Программно добавить динамический список на форму 1с

Обновлено: 08.07.2024

в нем прописал
Список.ТекстЗапроса = СтрЗаменить(Список.ТекстЗапроса, "itilprofИнциденты.КодЗавершения,", "itilprofИнциденты.КодЗавершения, itilprofИнциденты.ЧисловойПриоритет, itilprofИнциденты.КрайнийСрок, ");

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

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

Колонки появились. Но в них не отображаются значения! Отбор меж тем работает. Добавил реквизиты в расширение - не помогло. Что я делаю не так?!

(0) запрос измени в расширении - в данных динамического списка нет твоих реквизитов
А что смотреть? Строки в СписокПриПолученииДанныхНаСервереПосле посмотрел, там нет этих данных :(
(4) Не, ошибся - есть там.
Строки[45].Значение.Данные.ЧисловойПриоритет 77 Число
3 варианта. А в статьях что в инете нашел все было просто, так как я и написал изначально :( Буду пробовать сейчас

(14) какие три варианта?

(10)+(12)+(14) это один код по кусочкам - просто получилось так

(11) ПолеНадписи и так стоит по умолчанию после Элементы.Вставить("ЧисловойПриоритет", Тип("ПолеФормы"), Элементы.Список, Элементы.ТекущийИсполнитель);

(0) это из БСП если не хочешь так то попробуй вызвать код из БСП

Ну и "ОбщегоНазначения.УстановитьСвойстваДинамическогоСписка(Элементы.Список, СтруктураПараметров);" конечно же
Может с компоновщиком что то сделать надо?
Коллеги! неужели никто такого не делал? Не поверю никак!
(23) похоже это не поле ввода, а что-то другое. Почему влруг поле ввода?
(28) ну а почему отбор работает если не поменял текст запроса?
может с компоновщиком динамического запроса что нибудь надо сделать?
(31) Пробовал - не помогло. И потом я подозреваю что это ограничит возможность сортировки списка.

(32) Не парь мозг СтрЗаменить. Ты все равно затащил форму в расширение, сделай все по-человечески.

Во-первых добавление (заимствование) формы в расширение может привести к некоторым нежелательным эффектам, которые могут возникнуть после обновления конфигурации. Приведем немного теории.

Платформа использует сразу три формы:

Данные формы взаимодействуют между собой и в результате такого взаимодействия получается Результирующая форма, которую видит пользователь. В ходе взаимодействия указанных форм может возникнуть нежелательная ситуация, например, мы доработали форму в расширении, потом в новом релизе добавились реквизиты и они на форме не отображаются! Более подробно тут.

Во-вторых добавление формы в расширение привело бы к автоматическому добавлению всех реквизитов этого объекта и объектов метаданных (соответствующих ссылочным типам реквизитов объекта) в данное расширение, что загромождало бы само расширение и также не желательно.

Поэтому возникла задача программного создания элемента формы для добавленного реквизита в самом расширении, этому и посвящена данная публикация."

вот поэтому я должен (ТЗ такое) добавить в расширении в форму программно.

Перед прочтением данной статьи рекомендуется ознакомиться с первой частью, в которой описаны примеры программного создания элементов, команд, реквизитов управляемой формы, а также описание стандартных возможностей для работы с ними.

В данной же части будет рассмотрено программное создание динамических списков, таблиц значений на форме, их вывод в элементы формы и стандартные возможности для работы.

Модифицировать формы рекомендуется программно для удобного обновления конфигураций и исключения конфликтов, а также для удобной поддержки кода. Со статьями о механизмах модификации можно ознакомиться в разделе полезных ссылок.

Также все описанные в текущем разделе процедуры и функции находятся во внешней обработке УпрФормы.
Примеры программного создания элементов, команд, реквизитов управляемой формы, а также описание стандартных возможностей для работы с ними можно будет посмотреть в части 1.

Создание реквизита типа таблица значений и вывод на форму

Добавление условного оформления таблицы формы

Создаем условное оформление для таблицы:

В процедуру команды добавим вызов серверной процедуры для заполнения таблицы цен в зависимости от выбранной номенклатуры и характеристики:

Добавляем в процедуру ПриСозданииНаСервере процедуры:


Заполняем реквизиты Номенклатура, Характеристика и заполняем цены в таблице значений.


Создание реквизита типа динамический список с заданными настройками и вывод на форму

На странице 3 создадим динамический список с выводом всех цен выбранной номенклатуры и характеристики.
Добавим Условное Оформление дин. списка, отбор и сортировку программно.

Вывести динамический список в элементы управляемой формы 1С

Обновление параметров динамического списка программно

Если в запросе дин. списка используются параметры, то их необходимо обновлять при изменении соответствующих реквизитов.

Добавляем в процедуру ПриСозданииНаСервере процедуры:


Заполняем реквизиты Номенклатура, Характеристика и заполняем цены в таблице значений.


Содержимое регистра сведений ЦеныНоменклатуры:


Динамический список на форме:

Введение в управляемая форма 1С реквизиты элементы команды

Рекомендуется модифицировать управляемые формы типового решения 1С программно для удобного будущего обновления и исключения конфликтов, а также для удобной работы с изменениями и надежности при использовании механизма расширений.
В некоторых типовых конфигурациях 1С (ЕРП 2, УТ 11) используется механизм упрощенного изменения конфигурации. Статьи о типовом механизме можно найти в разделе полезных ссылок. Данный механизм используется в БСП, и его необходимо знать при модификации типовых конфигураций.
При добавлении элементов на форму программно можно отредактировать практически любое свойство из панель свойств, которое можно установить вручную в конфигураторе.
Также все описанные в текущем разделе процедуры и функции находятся во внешней обработке УпрФормы.

Программное переопределение обработчиков событий формы и элементов формы

В теле модуля формы:

А в новой процедуре нужно добавить вызов основной, если такая процедура есть.

Аналогично можно поступить и с обработчиками элементов формы:

Программное создание групп формы.

Доступные виды групп формы:


Программное добавление команды на форму.

Удалить команду можно при помощи метода коллекции формы команд: Команды.Удалить(<Команда>). Удалять можно только те команды, которые были созданы программно.

Программное создание декораций форм.

Программное добавление реквизита на форму.

Добавлять новые реквизиты в управляемую форму и удалять необходимо с помощью метода ИзменитьРеквизиты(), куда в параметры передается массив добавляемых реквизитов и массив удаляемых. Удалять при этом можно только те реквизиты, которые были созданы программно.

Вывод реквизитов на форму.

Вызов процедур при создании на сервере 1С

После описания всех процедур выводим их в процедуре ПриСозданииНаСервере. Также можно изменить программно некоторые свойства формы, например, заголовок. Чтобы был виден только наш заголовок, нужно отключить свойство Автозаголовок.

Некоторые советы при программном редактировании формы


Итак, взглянем на получившийся результат. Все элементы на форме созданы программно:

Статья писалась по итогу выполнения работы, в рамках которой требовалось выводить на форму содержимое различных регистров сведений. Вывод содержимого осуществляется через динамический список.

В статье рассмотрены следующие вопросы:

  1. Как программно создать реквизит формы с типом динамический список и установить для него произвольный запрос.
  2. Как программно добавить на форму элемент управления табличное поле, связать его с реквизитом формы и создать необходимые колонки.
  3. Как программно удалить созданные реквизиты и элементы формы.

Итак, в начале у нас не должно быть реквизитов и элементов формы с тем динамическим списком, который мы планируем создавать.

Как программно добавить динамический список в 1С

Сначала, нужно определить событие/команду и процедуру, при выполнении которой будет создаваться динамический список. В нашем случае это будет изменение элемента формы РегистрСведений. В этом элементе пользователь будет выбирать имя регистра сведений, который должен быть отображен в динамическом списке. Создаем процедуру для события ПриИзменении этого элемента:

Для создания динамического списка нам потребуется передать в процедуру несколько параметров. Рассмотрим их.

Во-первых, нужно сформировать текст запроса для динамического списка. Для его формирования нам потребуется имя регистра сведений. В запросе будут выбираться все поля регистра.

Возврат "ВЫБРАТЬ * ИЗ РегистрСведений." + ИмяРС + " КАК РегистрСведений" ;

Во-вторых, потребуется массив колонок, которые мы хотим вывести на форму. Колонки возьмем из полей регистра сведений. А их в свою очередь получим из метаданных регистра.

МассивКолонок = новый массив ;

Теперь можно приступить к созданию динамического списка и выводу его на форму. Добавлять реквизиты и элементы формы можно только на сервере.

Данная процедура использует произвольные запросы в динамическом списке. Если это не требуется, процедуру можно модифицировать.

Перед тем, как создавать новый динамический список нужно попытаться удалить уже существующий (если пользователь его ранее создал). Иначе возникнет ошибка при создании. Рассмотрим процедуру удаления. Она тоже должна выполняться на сервере. Удаление оборачиваем в оператор Попытка, т.к. удаляемого реквизита и элемента формы может не существовать.

При использовании процедуры удаления реквизитов и элементов формы нужно учитывать, что удалить можно только реквизиты и элементы, созданные программно.

Читайте также: