При разработке сложных интерфейсов в платформе 1С:Предприятие 7.7 периодически возникает необходимость динамически изменять размеры диалогового окна, переставлять местами реквизиты или менять их габариты в зависимости от определенных условий. Проанализируем возможности встроенного языка 1С 7.7 и выясним, какие инструменты существуют для решения этой задачи.
В штатном встроенном языке платформы 1С 7.7 объект Форма не имеет свойств и методов, позволяющих напрямую считывать или изменять точные координаты элементов (ширину, высоту, отступы слева и сверху). Также платформа не предоставляет штатного механизма для создания новых элементов управления во время выполнения программы.
Попытка обратиться к свойствам позиционирования через встроенный объект Форма не даст результата, так как платформенный функционал работы с формой ограничен базовыми операциями управления контекстом и слоями.
Если конфигурация должна работать исключительно на встроенных возможностях 1С 7.7 без подключения внешних библиотек, применяют следующие механизмы:
Форма.ИспользоватьСлой(), включающий отображение нужного слоя.Видимость() и Доступность() скрываются или блокируются элементы, которые не должны отображаться при определенных условиях.ОткрытьФорму().Для полноценного и точного управления координатами элементов управления используется внешняя компонента FormEx (файл FormEx.dll). Она расширяет объектную модель 1С 7.7 и предоставляет инструмент для работы с геометрией окна.
Основные возможности FormEx для управления элементами:
УстановитьКоординаты. Позволяет объектно изменять позицию и размеры конкретного элемента через объект АтрибутФормы:
// Пример изменения координат элемента с помощью FormEx
Атрибут = СоздатьОбъект("АтрибутФормы");
Атрибут.УстановитьИмя("ИмяРеквизита");
Атрибут.УстановитьКоординаты(Лево, Верх, Ширина, Высота);
АвтоРазмер). Компонента позволяет задавать правила поведения элементов при изменении размеров самого окна формы.ПриИзмененииРазмераОкна, что позволяет пересчитывать позиции элементов «на лету» при изменении пользователем границ окна.Помимо библиотеки FormEx, для решения похожих задач применяются и другие технологии:
1cpp.dll). Предоставляет возможности внедрения и управления интерфейсными объектами (включая табличные поля и ActiveX-элементы) прямо в форме во время выполнения.MoveWindow или SetWindowPos), используя дескрипторы окон (HWND).При использовании внешних библиотек важно учитывать следующие технические моменты:
ЗагрузитьВнешнююКомпоненту().