В данной статье описаны примеры программного создания объектов управляемой формы 1С : элементов, команд, реквизитов, а также описание стандартных возможностей для работы с ними.
Введение в управляемая форма 1С реквизиты элементы команды
Рекомендуется модифицировать управляемые формы типового решения 1С программно для удобного будущего обновления и исключения конфликтов, а также для удобной работы с изменениями и надежности при использовании механизма расширений.
В некоторых типовых конфигурациях 1С (ЕРП 2, УТ 11) используется механизм упрощенного изменения конфигурации. Статьи о типовом механизме можно найти в разделе полезных ссылок. Данный механизм используется в БСП, и его необходимо знать при модификации типовых конфигураций.
При добавлении элементов на форму программно можно отредактировать практически любое свойство из панель свойств, которое можно установить вручную в конфигураторе.
Также все описанные в текущем разделе процедуры и функции находятся во внешней обработке УпрФормы.
Примеры работы с объектом «ДанныеФормыКоллекция» и созданием дин. списка и таблицы значений программно можно будет посмотреть в части 2.
Для запуска обработки в режиме предприятия необходимо наличие объектов «Справочники.Номенклатура», подчиненный ему «Справочники.ХарактеристикиНоменклатуры» и «РегистрыСведений.ЦеныНоменклатуры”.
Программное переопределение обработчиков событий формы и элементов формы
Переопределить обработчики событий формы можно в обработчике «ПриСозданииНаСервере» (кроме самого обрабочика «ПриСозданииНаСервере») или в теле модуля формы в контексте сервера (например, Переопределение событий ПриЧтениинаСервере и ПриСозданииНаСервере).
В теле модуля формы:
А в новой процедуре нужно добавить вызов основной, если такая процедура есть.
Аналогично можно поступить и с обработчиками элементов формы:
Программное создание групп формы.
Доступные виды групп формы:
Программное добавление команды на форму.
Удалить команду можно при помощи метода коллекции формы команд: Команды.Удалить( ). Удалять можно только те команды, которые были созданы программно.
Программное создание декораций форм.
Программное добавление реквизита на форму.
Добавлять новые реквизиты в управляемую форму и удалять необходимо с помощью метода ИзменитьРеквизиты(), куда в параметры передается массив добавляемых реквизитов и массив удаляемых. Удалять при этом можно только те реквизиты, которые были созданы программно.
Вывод реквизитов на форму.
Вызов процедур при создании на сервере 1С
После описания всех процедур выводим их в процедуре ПриСозданииНаСервере. Также можно изменить программно некоторые свойства формы, например, заголовок. Чтобы был виден только наш заголовок, нужно отключить свойство Автозаголовок.
Некоторые советы при программном редактировании формы
Итак, взглянем на получившийся результат. Все элементы на форме созданы программно:
В публикации представлен модуль программного добавления реквизитов и пример его использования при доработке типовых форм.
Концепция модуля: Модуль поставляется через поставку. Проверка обратной совместимости новых версий модуля, обеспечивается обработкой тестирования, обновляющейся версии. Модуль имеет сборочную линию на Jenkins, собирающую релиз из проекта EDT и запускающую сценарий тестирования ADD(не опубликована).
Программный интерфейс, добавляющий элементы на форму всегда использует контекст элемента, создается функцией СоздатьКонтекстЭлемента.
Остальная логика реализована в функциях, отвечающих за добавление соответствующих элементов.
Область применения: доработка всех типовых форм, для облегчения последующей поддержки конфигурации(обновления).
Основные возможности:
Зачем нужен модуль?
Пример формы полностью сгенерированной модулем:
Описание демонстрационного примера использования:
Код демонстрационного примера:
Видеозапись разработки примера для демонстрации использования модуля и добавление его через поставку для типовой конфигурации(видео без звука).
Платформы на которых протестирована работа конфигурации:
8.3.13.1644
8.3.14.1630
8.3.16.869
8.3.16.1063
Программно создать группы конолок и колонки на форме
Доброго времени суток.
Ни как ни могу понять в чём дело, помогите пожалуйста разобраться.
Суть дела: есть форма справочника, в ней есть таблица «ТаблицаРедактирования» нужно в эту таблицу программно добавить Колонки и разместить их в определённые группы колонок, которые также создаются программно.
Пишу следующий код
// создаём новые группы колонок
Сч = 1;
СоответствиеИменГруппировок = Новый Соответствие;
Для Каждого ТекЭлемент ИЗ ТаблицаГруппировок Цикл
Если Не ТекЭлемент.Группировка = «» Тогда
НовыйЭлемент = Элементы.Добавить(«ГруппировкаКол» + Формат(Сч, «ЧЦ=3; ЧВН=; ЧГ=»),
Тип(«ГруппаФормы»),Элементы.ТаблицаРедактирования);
НовыйЭлемент.Заголовок = ТекЭлемент.Группировка;
НовыйЭлемент.Вид = ВидГруппыФормы.ГруппаКнопок;
СоответствиеИменГруппировок.Вставить(ТекЭлемент.Группировка, НовыйЭлемент);
Сч = Сч + 1;
КонецЕсли;
// здесь всё отрабатывается правильно, в ТаблицаРедактирования добавляются новые ГруппыКолонок
// Добавляем реквизиты Формы
МассивРеквизитов = Новый Массив;
ТипыРеквизита = Новый Массив;
ТипыРеквизита.Добавить(Тип(«Число»));
ОписаниеТиповДляРеквизита = Новый ОписаниеТипов(«Число», Новый КвалификаторыЧисла(20, 4));
Сч = 1;
Для Каждого ТекНастройка из ТЗНастройкиКолонок Цикл
НовыйРеквизит = Новый РеквизитФормы(«Значение» + Формат(Сч, «ЧЦ=3; ЧВН=; ЧГ=»),
ОписаниеТиповДляРеквизита,
«ТаблицаРедактирования»,
«Значение» + Формат(Сч, «ЧЦ=3; ЧВН=; ЧГ=»),
Истина);
ИзменитьРеквизиты(МассивРеквизитов);
//Данный участок кода также отрабатывается без ошибок
// Добавляем колонки на форму
Для Сч = 1 по ВсегоРасчетов Цикл
НовыйЭлемент = Элементы.Добавить(«ТаблицаРедактированияЗначение» + Формат(Сч, «ЧЦ=3; ЧВН=; ЧГ=»),
Тип(«ПолеФормы»), РодительЭлемента); // на этой строчке система начинает ругаться (Не допустимое значение параметров)
При создании новых группировок колонок и реквизитов формы проблем не возникает. Ошибка выдаётся при попытке добавления в форму колонок
в строчке
НовыйЭлемент = Элементы.Добавить(«ТаблицаРедактированияЗначение» + Формат(Сч, «ЧЦ=3; ЧВН=; ЧГ=»),
Тип(«ПолеФормы»), РодительЭлемента); // на этой строчке система начинает ругаться (Не допустимое значение параметров)
При чём если в качестве РодительЭлемента указан путь Элементы.ТаблицаРедактирования, то всё отлично добавляется, но при этом естественно колонки добавляются непосредственно в таблицу, а нужно чтобы добавлялись в нужную группировку колонки.
Не совсем ясно в чём ошибка: в описании метода Добавить видим что третий параметр может быть
(необязательный)
Тип: ГруппаФормы; ТаблицаФормы; УправляемаяФорма.
Родитель для добавляемого элемента.
Если не указан, то добавляется на верхний уровень.
При этом РодительЭлемента является именно ГруппойФормы, т.е. по типу абсолютно подходит. А в чём ошибке не ясно.
Программное управление обычными формами документов и справочников в УПП/КА
Часть 1
Чтобы не снимать с поддержки все формы конфигурации и не вставлять свои обработчики в процедуры «ПриОткрытии», будем искать такую процедуру, которая вызывается во всех формах документах и справочников.
И так, с нимаем с поддержки общий модуль «РаботаСДиалогами».
Находим функцию «АктивизироватьРеквизитВФорме» и сразу после объявления функции добавляем строку вызова нашей процедуры:
Все. Отделались снятием с поддержки двух модуле с добавлением в них двух строк. Обновлять будет легко.
Часть 2
Теперь самое главное.
Добавляем в конфигурацию общий модуль «ИТ_РаботаСДиалогами». В свойствах ставим галочки на использование в клиенте.
В модуль помещаем вызываемые функции.
Обратите внимание, что работа с формами справочника имеет особенности. Поскольку процедура «МеханизмНумерацииОбъектов.УстановитьДоступностьПоляВводаНомера» вызывается как из формы списка справочника, так и из формы самого элемента справочника. Различить можно только по составу передаваемых метаданных или просто по имени формы.
Часть 3
Поскольку мы не хотим каждый раз писать кучу кода при размещении реквизитов на форму, мы напишем заранее разного рода функции и процедуры, которые и будем в дальнейшем использовать.
— Функция добавления поля ввода на форму (одна из ранних наших функций).
— Функция добавления флажка на форму.
Эта функция позволяет разместить на форму флажок (булево).
Правила использования такие же как у предыдущей функции. Фактически это копия предыдущей функции, только для флажка.
Код этой функции почти идентичны предыдущим, по этому убран под спойлер.
— Функция добавления надписи на форму.
Эта функция позволяет разместить на форму надпись.
Правила использования такие же как у предыдущей функции. Фактически это вырезка вывода надписи из первой функции..
Код убран под спойлер
— Универсальное добавление поля на форму. (это другой подход добавления элементов на форму, гораздо более универсальный).
Используем эту процедуру гораздо чаще тех, что указал выше.
— Процедура удаления колонки в табличной части формы.
Иногда возникает необходимость удалять колонки с формы документа. Тут все просто.
— Процедура удаления элемента формы.
Часть 4
Думаю надо показать несколько примеров, как мы добавляем новые реквизиты на форму.
Примеры добавления колонки на форме:
Еще пример с добавлением полей в отдельной закладке:
Еще пример работы с формой справочника.
Часть 5
Доработки по совместимости и универсальности.
Желательно весь код модуля «ИТ_РаботаСДиалогами» обрамить в клиента
В процедурах, прежде чем добавлять реквизиты на форму, убедитесь, что такой реквизит существует.
Например так:
Поскольку вызов функции может происходить многократно в одной форме, всегда проверяйте, выведен ли уже реквизит на форму.
Например так:
Такие проверки позволят вам копировать общий модуль «ИТ_РаботаСДиалогами» во все ваши конфигурации УПП/КА и не бояться вызова исключений.
Программное добавление и изменение элементов управляемых форм
Платформа 1С:Предприятие позволяет программно добавлять и изменять элементы управляемой формы. Разберемся для чего это может потребоваться.
Программная модификация формы может потребоваться в нескольких случаях:
В управляемой форме можно программно добавить, изменить и удалить:
Все указанные операции возможны только на сервере.
Программное изменение формы имеет ограничения:
Изменение команд формы
Коллекция Команды доступна как на клиенте, так и на сервере. Изменять коллекцию (методы Добавить () и Удалить () ) можно только на сервере. Искать и получать количество элементов (методы Найти () и Количество () ) можно как на клиенте, так и на сервере.
Изменение реквизитов формы
Внимание!
Процесс изменения состава реквизитов является достаточно ресурсоемким. Фактически выполняется пересоздание формы. В связи с этим работа с реквизитами формы выполняется в пакетном режиме.
Создадим новый реквизит формы с именем Покупатель:
// Изменения состава реквизитов
ИзменитьРеквизиты ( ДобавляемыеРеквизиты );
Изменение элементов формы
Рассмотрим несколько наиболее распространенных на практике примеров работы с командами, реквизитами и элементами формы.
Добавление команды и связанной с ней кнопки:
Добавление реквизита и связанного с ним поля ввода:
Назначение элементу формы обработчика события:
&НаКлиенте
Процедура Подключаемый_ПокупательПриИзменении ( Элемент )
// Действия события
КонецПроцедуры
Внимание!
Внимание!
Скачать обработку с примерами программного поиска и изменения реквизитов, команд и элементов управляемой формы можно ЗДЕСЬ.
Остались вопросы?
Спросите в комментариях к статье.
2 комментария
Ваш текст:
В параметры ДобавляемыеРеквизиты и УдаляемыеРеквизиты передаются массивы с элементами типа РеквизитФормы.
Верный текст:
(необязательный)
Тип: Массив.
Массив, содержащий СТРОКИ, описывающие ПУТИ к удаляемым реквизитам.