Пример с добавлением динамического списка, если бы мы выполняли его средствами визуального конструирования, выглядел бы следующим образом.
Сначала мы добавим реквизит формы типа ДинамическийСписок (рис. 3.216).

Рис. 3.216. Добавление реквизита формы
После этого для динамического списка установим флажок Произвольный запрос и зададим текст запроса и основную таблицу (рис. 3.217).

Рис. 3.217. Установка текста запроса и основной таблицы
Затем добавим элемент формы Таблица (рис. 3.218).

Рис. 3.218. Добавление таблицы формы
После этого свяжем между собой элемент формы и реквизит формы (рис. 3.219).

Рис. 3.219. Связь таблицы и реквизита
Теперь создадим колонку таблицы Наименование и свяжем ее с колонкой динамического списка Наименование (рис. 3.220).

Рис. 3.220. Добавление колонки «КолонкаНаименование» и ее связь с полем реквизита
Аналогичным образом создадим еще одну колонку таблицы Код и свяжем ее с колонкой динамического списка Код (рис. 3.221).

Рис. 3.221. Добавление колонки «КолонкаКод» и ее связь с полем реквизита
Теперь эти же самые действия выполним программно, из встроенного языка.
Примечание
Пример можно посмотреть в демонстрационной базе «Программное изменение формы», общая форма Форма, команда Добавить динамический список. Это локальная команда этой формы.
Как и в предыдущем примере, модификацию формы будем выполнять в серверной контекстной процедуре. Сначала добавим реквизит формы РеквизитСписокТоваров (листинг 3.173).
Листинг 3.173. Добавление реквизита формы
// Добавить реквизит "Динамический список".
ТипыРеквизита = Новый Массив;
ТипыРеквизита.Добавить(Тип("ДинамическийСписок"));
ОписаниеТиповДляРеквизита = Новый ОписаниеТипов(ТипыРеквизита);
НовыйРеквизит = Новый РеквизитФормы("РеквизитСписокТоваров", // имя
ОписаниеТиповДляРеквизита, // тип
, // путь
"СписокТоваров", // заголовок
Истина); // сохраняемые данные
ДобавляемыеРеквизиты = Новый Массив;
ДобавляемыеРеквизиты.Добавить(НовыйРеквизит);
ИзменитьРеквизиты(ДобавляемыеРеквизиты);
Здесь все аналогично предыдущему примеру, за исключением типа добавляемого реквизита – ТипыРеквизита.Добавить(Тип("ДинамическийСписок")).
В результате мы имеем состояние, показанное на рисунке 3.216.
Теперь, после того как реквизит добавлен, можно задать текст запроса и основную таблицу динамического списка (листинг 3.174).
Листинг 3.174. Установка текста запроса и основной таблицы
// Задать текст запроса и другие свойства динамического списка.
РеквизитСписок = ЭтотОбъект["РеквизитСписокТоваров"];
РеквизитСписок.ТекстЗапроса = "ВЫБРАТЬ Наименование, Код ИЗ Справочник.Товары";
РеквизитСписок.ОсновнаяТаблица = "Справочник.Товары";
В результате мы имеем состояние, показанное на рисунке 3.217.
Теперь добавим элемент формы и свяжем его с данными. Снова все, как и в предыдущем примере. Отличается лишь тип добавляемого элемента (листинг 3.175).
Листинг 3.175. Добавление элемента формы
// Добавить элемент формы и связать его с реквизитом.
НовыйЭлемент = Элементы.Добавить("ЭлементСписокТоваров", Тип("ТаблицаФормы"));
НовыйЭлемент.ПутьКДанным = "РеквизитСписокТоваров";
В результате мы имеем состояние, показанное на рисунке 3.219.
Особенность работы с таблицей заключается в том, что при визуальном конструировании платформа предлагает автоматически создать колонки таблицы, если вы мышью перетаскиваете реквизит в дерево элементов формы.
В нашем же случае необходимо это сделать самостоятельно. И не только создать колонки, но и связать их с данными (листинг 3.176).
Листинг 3.176. Создание колонок и их связь с данными
// Создать колонки и связать их с данными.
НоваяКолонкаТаблицы = Элементы.Добавить("КолонкаНаименование", Тип("ПолеФормы"), НовыйЭлемент);
НоваяКолонкаТаблицы.ПутьКДанным = "РеквизитСписокТоваров.Наименование";
НоваяКолонкаТаблицы = Элементы.Добавить("КолонкаКод", Тип("ПолеФормы"), НовыйЭлемент);
НоваяКолонкаТаблицы.ПутьКДанным = "РеквизитСписокТоваров.Код";
Тут особенность заключается в том, что, во-первых, при добавлении колонки (поля формы) мы указываем его родителя третьим параметром метода Добавить(). НовыйЭлемент – это как раз та самая таблица, которую мы только что добавили в форму.
Во-вторых, указывая путь к данным, мы указываем его полностью, от корня реквизитов. Сначала имя реквизита, являющегося динамическим списком, а потом через точку – имя одного из полей запроса, содержащегося в этом динамическом списке – РеквизитСписокТоваров.Наименование.
В результате мы имеем состояние, показанное на рисунке 3.221.
После этого можно запустить систему в режиме 1С:Предприятие и посмотреть, как работает наша команда Добавить динамический список.
В результате ее выполнения внизу формы появится полноценный список товаров, позволяющий добавлять, изменять и удалять товары (рис. 3.222).

Рис. 3.222. Динамический список в форме