В процессе разработки часто возникает потребность сделать интерфейс обработки более гибким. Например, создавать элементы управления «на лету» в зависимости от состава справочника или других условий, чтобы не проектировать все возможные варианты заранее в конфигураторе. Давайте разберем, как решить эту задачу в среде 1С:Предприятие 7.7.
Стандартные средства платформы 1С 7.7 не предусматривают инструментов для создания визуальных объектов интерфейса в режиме «Предприятие». Поэтому для выполнения этой задачи разработчики используют мощные внешние библиотеки-расширители, такие как FormEx и 1С++. Эти библиотеки позволяют напрямую обращаться к функциям WinAPI для управления окнами 1С.
Основным инструментом для решения нашей задачи является метод ДобавитьАтрибут(), предоставляемый расширением формы. Рассмотрим по шагам, как это реализовать на практике.
РасширениеФормы и привязываем его к текущей форме.ДобавитьАтрибут, указывая идентификатор и тип элемента (где 3 — это BUTTON, а 12 — CHECKBOX).Разберем пример кода для добавления кнопки:
срр_РасширениеФормы = СоздатьОбъект("РасширениеФормы");
срр_РасширениеФормы.УстановитьФорму(Форма);
// Добавляем атрибут с типом 3 (Кнопка)
доп_рекв = срр_РасширениеФормы.ДобавитьАтрибут("ИдентификаторКнопки", 3);
Если ТипЗначенияСтр(доп_рекв) = "АтрибутФормы" Тогда
доп_рекв.УстановитьКоординаты(лево, верх, ширина, высота);
доп_рекв.Заголовок = "Нажми меня";
доп_рекв.Формула = "МояПроцедураОбработки";
КонецЕсли;
При попытке создать флажок напрямую иногда возникают проблемы с отрисовкой, когда элемент отображается как кнопка. Чтобы превратить элемент в полноценный CHECKBOX, необходимо принудительно задать ему соответствующий стиль Windows.
Рассмотрим, как заставить флажок работать корректно:
// Создаем атрибут как элемент управления
Атр = ФормаРасш.ДобавитьАтрибут("ИмяФлажка", 3);
// Устанавливаем специфический стиль для отображения флажка
Атр.Стиль = 1342324739;
Атр.Заголовок = "Выбрать реквизит";
Работая с динамическим созданием элементов, важно помнить о нескольких аспектах:
Видимость = 0 и программно изменять их свойства Видимость, Заголовок и Доступность по мере необходимости. Это значительно надежнее, чем создание объектов в памяти «на лету».Таким образом, мы выяснили, что создание элементов на форме через FormEx — это мощный, но требующий осторожности прием. Используйте его только в крайних случаях, отдавая предпочтение статичным элементам с динамически изменяемыми свойствами, где это возможно.