Как в обычной (неуправляемой) форме программно добавить на форму табличное поле, в котором вывести список документов "Реализация товаров и услуг"?
Чтобы данное поле было полностью идентично тому, которое можно создать обычным способом через конструктор, указав источник данных "ДокументСписок.РеализациТоваровУслуг".
---
Как-то так, проверил работает:

ТабличноеПоле = ЭлементыФормы.Добавить(Тип("ТабличноеПоле"),"НовоеТП", Истина); // , ЭлементыФормы.ОсновнаяПанель

ТабличноеПоле.ТипЗначения = Новый ОписаниеТипов("ДокументСписок.РеализацияТоваровУслуг");
ТабличноеПоле.Верх = 24;
ТабличноеПоле.Лево = 6;
ТабличноеПоле.Ширина = Ширина-40;
ТабличноеПоле.Высота = Высота-50;

ТабличноеПоле.СоздатьКолонки();
---
Как-то так, проверил работает:

ТабличноеПоле = ЭлементыФормы.Добавить(Тип("ТабличноеПоле"),"НовоеТП", Истина); // , ЭлементыФормы.ОсновнаяПанель

ТабличноеПоле.ТипЗначения = Новый ОписаниеТипов("ДокументСписок.РеализацияТоваровУслуг");
ТабличноеПоле.Верх = 24;
ТабличноеПоле.Лево = 6;
ТабличноеПоле.Ширина = Ширина-40;
ТабличноеПоле.Высота = Высота-50;

ТабличноеПоле.СоздатьКолонки();
---
php5, спасибо, работает!)
---
Работает, но не до конца... Как выяснилось, реквизит "Данные" у созданного элемента формы не заполнен. Поэтому, например, нельзя отборы настроить. Далее, после некоторых поисков в интернете выяснилось, что программно создать реквизит формы, чтобы привязать его к элементу управления, НЕЛЬЗЯ. Очень печально.. Хотя на управляемых формах это сделать возможно.
---
Kutuzov, немного не понял. Привязать к элементу управления? Вам необходимо назначить какие-то обработчики табличному полю?

Если да -

```1c
    НовыйЭлемент.УстановитьДействие("ПриПолученииДанных", Новый Действие("ПриПолученииДанных"));

    Процедура ПриПолученииДанных(Элемент, ОформленияСтрок)

    КрасныйЦвет = Новый Цвет(255, 0, 0);
    ОбычныйЦвет = Новый Цвет();

    Для Каждого элементОформленияСтрок из ОформленияСтрок Цикл
    элементОформленияСтрок.Ячейки.Колонка1.Текст = элементОформленияСтрок.ДанныеСтроки.Номенклатура.Артикул;
    элементОформленияСтрок.Ячейки.Колонка1.ОтображатьТекст = Истина;
    элементОформленияСтрок.Ячейки.Колонка1.Выравнивание = ГоризонтальноеПоложение.Право;

    //цветовая маркировка незаполненного количества
    Если Не элементОформленияСтрок.ДанныеСтроки.Обработан Тогда
    элементОформленияСтрок.Ячейки.Количество.ЦветФона = КрасныйЦвет;
    Иначе
    элементОформленияСтрок.Ячейки.Количество.ЦветФона = ОбычныйЦвет;
    КонецЕсли;
    КонецЦикла;

    КонецПроцедуры
```
---
использовать отборы можно кстати
---
Подскажите как использовать отборы в колонке табличного поля, которая была создана программно?

Создаю колонку таким кодом:

```1c
    Массив = Новый Массив;
    Массив.Добавить(Тип("СправочникСсылка.Проекты"));
    ТипПроект = Новый ОписаниеТипов(Массив, , );

    КолонкаТабличногоПоля = ЭтаФорма.ЭлементыФормы.ЖурналДокументовСписок.Колонки.Добавить("ПроектНовый", ТипПроект);
    КолонкаТабличногоПоля.УстановитьЭлементУправления(Тип("ПолеВвода"));

    КолонкаТабличногоПоля.ПодсказкаВШапке = ";
    КолонкаТабличногоПоля.Видимость = Истина;
```

Отбор по "ПроектНовый" не работает.
---
В форме элемента справочника Номенклатура

Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)

    .......

 Если Лев(Наименование,7) = "Барабан" Тогда
  СКК_ДобавитьСтраницуДляБарабанов();
 КонецЕсли;
КонецПроцедуры // ПередОткрытием()

Процедура СКК_ДобавитьСтраницуДляБарабанов()
 ЭлФ = ЭтаФорма.ЭлементыФормы;
 ЭлФПанель = ЭлФ.ОсновнаяПанель;
 Страницы = ЭлФПанель.Страницы;
 Страницы.Добавить( "ДляБарабанов", "Для Барабанов");

 СтараяСтраница = ЭлФПанель.ТекущаяСтраница;
 ЭлФПанель.ТекущаяСтраница = Страницы.ДляБарабанов;

 ТабПоле = ЭлФ.Добавить(Тип("ТабличноеПоле"),"ТЧ_РасходПиломатериалов", Истина, ЭлФПанель );
 ТабПоле.ТипЗначения = Новый ОписаниеТипов("РегистрСведенийСписок.СКК_РасходПиломатериалов");
 ТабПоле.ИзменяетДанные = Истина;
 ТабПоле.Доступность = Истина;
 ТабПоле.ИзменятьСоставСтрок = Истина;
 ТабПоле.ТолькоПросмотр = Ложь;
 ТабПоле.Верх = 36;
 ТабПоле.Лево = 6;
 ТабПоле.Ширина = 586;
 ТабПоле.Высота = 139;
 ТабПоле.Подсказка = "(СКК) Расход пиломатериалов на крепление барабанов";
 ТабПоле.УстановитьПривязку(ГраницаЭлементаУправления.Низ,ЭлФПанель,ГраницаЭлементаУправления.Низ);
 ТабПоле.УстановитьПривязку(ГраницаЭлементаУправления.Лево,ЭлФПанель,ГраницаЭлементаУправления.Лево);
 ТабПоле.УстановитьПривязку(ГраницаЭлементаУправления.Право,ЭлФПанель,ГраницаЭлементаУправления.Право);
  ТабПоле.СоздатьКолонки();

  Колонка = ТабПоле.Колонки.Найти("Номенклатура");
 Колонка.Видимость = Ложь;

 ТабПоле.Значение.Отбор.Номенклатура.Использование = Истина;
 ТабПоле.Значение.Отбор.Номенклатура.Значение = Ссылка;
 ТабПоле.Значение.Отбор.Номенклатура.ВидСравнения = ВидСравнения.Равно;

 КомПанель = ЭлФ.Добавить(Тип("КоманднаяПанель"),"КоманднаяПанельТЧ_РасходПиломатериалов", Истина, ЭлФПанель );
 КомПанель.Вспомогательная = Истина;
 КомПанель.Автозаполнение = Истина;
 КомПанель.ИсточникДействий = ТабПоле;
 КомПанель.Верх = 6;
 КомПанель.Лево = 6;
 КомПанель.Ширина = 586;
 КомПанель.Высота = 25;

 ЭлФПанель.ТекущаяСтраница = СтараяСтраница;
КонецПроцедуры
---
tmixsam, спасибо, работает.
(9) jigourt, боюсь, 12 см вам не светят :). Из вашего примера видно, что вы используете реквизиты формы (если я правильно понял). А их можно только "ручками" в конфигураторе добавлять, а программно нельзя.
---
Kutuzov, и как вы к такому выводу пришли?? переменная ИмяРеквизитаФормы просто строка, полученная из имени константы

```1c
    Процедура ПриОткрытии()
    ЭтаФорма.ЭлементыФормы.Очистить();
    КолвоПолей = 0;
    Для каждого Конст Из Метаданные.Константы Цикл
    Если Конст.Подсказка = "МояКонстанта" Тогда
    НовоеПолеВвода = ЭтаФорма.ЭлементыФормы.Добавить(Тип("ПолеВвода"),Конст.Имя);
    НовоеПолеВвода.Данные = Конст.Имя;
    НовоеПолеВвода.Значение = Константы[Конст.Имя].Получить();
    НовоеПолеВвода.Верх = 33 + КолвоПолей * 20;
    НовоеПолеВвода.Лево = 140;
    НовоеПолеВвода.Ширина = 252;
    НовоеПолеВвода.Высота = 19;
    НовоеПолеВвода.КнопкаВыбора = Истина;
    НовоеПолеВвода.КнопкаОчистки = Истина;

    ДействиеОбработкаВыбора = Новый Действие("ОсновнаяОрганизацияПриИзменении");
    НовоеПолеВвода.УстановитьДействие("ПриИзменении",ДействиеОбработкаВыбора);

    НоваяНадпись = ЭтаФорма.ЭлементыФормы.Добавить(Тип("Надпись"),"Надпись"+Конст.Имя);
    НоваяНадпись.Заголовок = Конст.Синоним;
    НоваяНадпись.Верх = 33 + КолвоПолей * 20;
    НоваяНадпись.Лево = 8;
    НоваяНадпись.Ширина = 122;
    НоваяНадпись.Высота = 19;
    КолвоПолей = КолвоПолей + 1;
    КонецЕсли;
    КонецЦикла;
    КонецПроцедуры
```

вот прицепил код целиком
---
jigourt, ясно, спасибо. Но этот вариант не совсем подходит по программное создание табличных полей списков справочников и документов. Решение - см. выше.
---
Или в форме списка справочника Номенклатура

выбираем мышкой нужный элемент, например "Барабан 18В"

вверху в форме списка нажимаем кнопочку "Перейти"

из выпадающего списка выбираем "(СКК) Расход пиломатериалов на крепление барабанов"

Попадаем в список регистра сведений, в котором уже задан отбор Номенклатура = "Барабан 18В".
---
```1c
    НовоеПолеВвода = ЭтаФорма.ЭлементыФормы.Добавить(Тип("ПолеВвода"),ИмяРеквизитаФормы);
    НовоеПолеВвода.Данные = ИмяРеквизитаФормы;
    НовоеПолеВвода.Значение = Константы[ИмяРеквизитаФормы].Получить();
    НовоеПолеВвода.Верх = 33
    НовоеПолеВвода.Лево = 140;
    НовоеПолеВвода.Ширина = 252;
    НовоеПолеВвода.Высота = 19;
    НовоеПолеВвода.КнопкаВыбора = Истина;
    НовоеПолеВвода.КнопкаОчистки = Истина;

    ДействиеОбработкаВыбора = Новый Действие("ОсновнаяОрганизацияПриИзменении");
    НовоеПолеВвода.УстановитьДействие("ПриИзменении",ДействиеОбработкаВыбора);
```

это пример создания поля ввода с заполнением данные и значение
вот только жаль 12 см уже улетели
---
jigourt, хм, да я как бы за ними и не рвался. Вынесли бы вы лучше имена реквизитов из констант...
---
oldfornit, да я тоже, но лишними бы не были ))) а по поводу имен, так это не имена реквизитов в константах, это кусок кода, который строит форму констант сам ))
---
```1c
    ЭтаФорма.ЭлементыФормы.ЖурналДокументовСписок.НастройкаОтбора.ПроектНовый.Доступность = Истина
```
---
```1c
    {ЖурналДокументов.ДокументыКонтрагентов.Форма.ФормаСписка.Форма(73)}: Поле объекта не обнаружено (ПроектНовый)
    ЭтаФорма.ЭлементыФормы.ЖурналДокументовСписок.НастройкаОтбора.ПроектНовый.Доступность = Истина
```

В элементах отбора нет моей колонки.
---
ЖурналДокументовСписок - это какой тип значения? В объекте метаданных, соответствующему этому типу значения должен быть реквизит ПроектНовый. Вы же все равно конфигурацию дорабатываете, так что выход только такой.
---
ЖурналДокументовСписок - это какой тип значения?
Это табличное поле.
Уточню задачу, возможно поможет: необходмо в журнал документов добавить колонку "Проект" (решено), заполнить ее данными (решено) и добавить возможность отбора по значению в этой колонке.
---
ЖурналДокументовСписок - это какой тип значения?

Это табличное поле.

его данные имеют какой тип значения? У табличного поля есть свойство Данные - как я понимаю, это ЖурналДокументовСписок. У этого же табличного поля есть свойство ТипЗначения. Вот туда загляните, пожалуйста, и в объекте метаданных, соответствующему этому типу значения добавьте реквизит ПроектНовый.
И да, отбор в табличном поле возможен только по значению, которое хранится в базе данных. Если данные в колонке ПроектНовый берутся не из реквизитов документов, отбор сделать не получится
---
Всегда можно сделать отбор по ссылкам с имитацией отбора по полю, не имеющему привязку к данным.
---
его данные имеют какой тип значения? У табличного поля есть свойство Данные - как я понимаю, это ЖурналДокументовСписок. У этого же табличного поля есть свойство ТипЗначения.

Да, тип значения "ЖурналДокументовСписок.ДокументыКонтрагентов"

(20) Вот туда загляните, пожалуйста, и в объекте метаданных, соответствующему этому типу значения добавьте реквизит ПроектНовый

В журнал документов я могу добавить новую графу. В графе указать необходимые реквизиты документов. Но в некоторых документах проект указан в табличной части и я не могу указать реквизит ТЧ как источник данных для этой строки. Хочу заполнить программно эту графу, но в оформлении ячейки могу поменять только текст, данные изменить нельзя (следовательно отбор нормально не работает). Пытаюсь создать столбец табличного поля программно, но тогда отбор не работает совсем. Это тупик и никак нереализуемо?
---
Если Вы спрашивали про стандартный отбор списка - то он работает только так. Но Вам ничего не мешает над табличной частью журнала документов добавить поле фильтрации по проекту и в этом поле указывать нужный Вам проект. А отбор по журналу документов устанавливать программно, передавая в него массив ссылок, документы которых относятся к выбранному проекту (этот массив Вы можете получить запросом в тексте модуля)
---
У меня похожий вопрос (но все таки есть отличия) поэтому решил его тут создать чтобы все в одном месте было.
Кто подскажет как программно для элемента формы ТабличноеПоле установить источник данных табличную часть обработки.
Как сделать через Конфигуратор можно увидеть на примере справочника "Пользователи" (конфигурация УТ 10.3 и БП 2.0) - там в форме списка есть страница "Пользователи ИБ" и в ней ТабличноеПоле где источник данных "ОбработкаОбъектСписокПользователейИБ.ТабличнаяЧастьПользователей"

Решил сделать внешнюю обработку с аналогичным списком пользователей что-бы можно было ее открыть как в УТ 10.3, так и в БП 2.0 - но в них одна и та же обработка названа по разному, соответственно данные нужно как то проставлять программно (и колонки заполнять).

Пробовал так в модуле формы:

```1c
    Если Метаданные.Имя = "УправлениеТорговлей" Тогда
    ИмяСправочника = "СписокПользователейИБ";
    ИначеЕсли Метаданные.Имя = "БухгалтерияПредприятия" Тогда
    ИмяСправочника = "СписокПользователейБД";
    КонецЕсли;
    ОбработкаОбъектСписокПользователейИБ = Обработки[ИмяСправочника].Создать();
    ЭлементыФормы.ТаблицаПользователейИБ.ТипЗначения = Новый ОписаниеТипов("ОбработкаТабличнаяЧастьСтрока." + ИмяСправочника + ".ТабличнаяЧастьПользователей");
    ЭлементыФормы.ТаблицаПользователейИБ.Данные = "ОбработкаОбъектСписокПользователейИБ.ТабличнаяЧастьПользователей";
    ЭлементыФормы.ТаблицаПользователейИБ.СоздатьКолонки();
```

Результата нет.
Решить проблему наверное можно как-то по другому, но хотелось бы разобраться как установить Табличному полю источник табличную часть объекта обработки - раз интерактивно делается то и программно наверное как-то можно.