При разработке универсальных обработок в 1С:Предприятие 7.7 часто возникает задача вывода данных в модальном окне. Стандартная конфигурация 1С создает модальные окна с фиксированным размером, без рамок изменения масштаба и кнопок сворачивания/разворачивания. Это создает неудобства, если состав отображаемой таблицы данных заранее неизвестен. Рассмотрим, как при помощи библиотеки FormEx обойти эти ограничения и сделать окно гибким.
Для реализации возможности изменения размеров окна нам потребуется библиотека FormEx, которая предоставляет расширенный доступ к API Windows и свойствам форм 1С. Основной механизм заключается в использовании объекта Окна, который позволяет принудительно управлять состоянием формы после ее открытия.
Разберем процесс настройки по шагам:
ПослеОткрытия() необходимо получить доступ к объекту Окна и применить метод Максимизировать().МенюОкна, ПоказыватьПанели и ВидимостьМеню мы можем отключить системные панели 1С, освобождая место для контента.ПриИзмененииРазмераОкна позволяет пересчитать координаты всех кнопок и таблиц, чтобы они «тянулись» вместе с формой.Рассмотрим пример кода, который вы можете использовать в модуле формы вашей обработки. Этот код демонстрирует, как максимизировать окно при открытии и обеспечить правильное позиционирование таблицы и кнопок при растягивании формы.
Процедура ПослеОткрытия()
Перем Ширина, Высота;
Окна = СоздатьОбъект("Окна");
// Максимизируем форму при открытии
Окна.Максимизировать(Форма);
// Опционально: скрываем панели для экономии пространства
Окна.ПоказыватьПанели(0);
КонецПроцедуры
Процедура ПриИзмененииРазмераОкна(ТипСобытия, НоваяШирина, НоваяВысота)
Перем Лево, Верх, Ширина, Высота;
Отступ = 2;
ИмяТ = "ТзНаФорме";
// Получаем расширение формы для работы с объектами
афТаблица = РасширениеФормы.ПолучитьАтрибут(ИмяТ);
// Растягиваем таблицу в зависимости от новых размеров окна
афТаблица.УстановитьКоординаты(Отступ, 10, НоваяШирина - 20, НоваяВысота - 75);
// Пересчитываем положение кнопок относительно низа формы
афТаблица.ПолучитьКоординаты(Лево, Верх, Ширина, Высота);
ВерхКнопок = Верх + Высота + Отступ;
// Здесь добавляем логику перемещения ваших кнопок
// Пример для кнопки "кнНайти"
Кнопка = РасширениеФормы.ПолучитьАтрибут("кнНайти");
Кнопка.УстановитьКоординаты(Лево, ВерхКнопок, 100, 25);
КонецПроцедуры
При реализации динамического изменения интерфейса важно учитывать следующие аспекты:
Избегайте мерцания: при интенсивном изменении размеров формы элементы могут «прыгать». Для минимизации этого эффекта рекомендуется блокировать перерисовку окна на время выполнения пересчета координат. В FormEx можно использовать методы работы с API, вызывающие LockWindowUpdate, чтобы пользователь не видел промежуточных этапов перемещения объектов.
Использование «якорей»: если элементов на форме много, написание кода вручную для каждого объекта становится утомительным. Попробуйте реализовать небольшую функцию-обработчик, которая будет принимать список имен объектов и автоматически рассчитывать их положение на основе процентного соотношения от новых размеров формы. Это значительно упростит поддержку кода в будущем.
Альтернативный подход: если использование модального режима не является критическим требованием (например, пользователю не требуется строгое ограничение доступа к другим окнам 1С), рассмотрите использование метода ОткрытьФорму() вместо модального вызова. Обычная форма позволяет пользователю самостоятельно управлять размерами, максимизировать окно и сворачивать его штатными средствами Windows, что полностью снимает проблему с нехваткой места для таблиц.
Применяя данные методы FormEx, вы сможете значительно повысить удобство работы пользователей с вашими отчетами и обработками, превращая стандартные интерфейсы 1С 7.7 в современные, адаптивные инструменты.