Как сделать модальное окно в 1С 7.7 изменяемым по размеру с помощью FormEx?

Программист 1С v7.7 IT и автоматизация бизнеса
← На главную

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

Решение задачи: использование методов FormEx для управления окном

Для реализации возможности изменения размеров окна нам потребуется библиотека FormEx, которая предоставляет расширенный доступ к API Windows и свойствам форм 1С. Основной механизм заключается в использовании объекта Окна, который позволяет принудительно управлять состоянием формы после ее открытия.

Разберем процесс настройки по шагам:

  1. Инициализация окна: в процедуре ПослеОткрытия() необходимо получить доступ к объекту Окна и применить метод Максимизировать().
  2. Управление видимостью элементов интерфейса: если требуется «чистый» вид окна, с помощью методов МенюОкна, ПоказыватьПанели и ВидимостьМеню мы можем отключить системные панели 1С, освобождая место для контента.
  3. Динамический пересчет координат: это ключевой этап. При изменении размера окна пользователем, событие ПриИзмененииРазмераОкна позволяет пересчитать координаты всех кнопок и таблиц, чтобы они «тянулись» вместе с формой.

Пример программной реализации

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


Процедура ПослеОткрытия()
    Перем Ширина, Высота;
    Окна = СоздатьОбъект("Окна");
    // Максимизируем форму при открытии
    Окна.Максимизировать(Форма);
    
    // Опционально: скрываем панели для экономии пространства
    Окна.ПоказыватьПанели(0);
КонецПроцедуры

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

Важные рекомендации по оптимизации

При реализации динамического изменения интерфейса важно учитывать следующие аспекты:

Избегайте мерцания: при интенсивном изменении размеров формы элементы могут «прыгать». Для минимизации этого эффекта рекомендуется блокировать перерисовку окна на время выполнения пересчета координат. В FormEx можно использовать методы работы с API, вызывающие LockWindowUpdate, чтобы пользователь не видел промежуточных этапов перемещения объектов.

Использование «якорей»: если элементов на форме много, написание кода вручную для каждого объекта становится утомительным. Попробуйте реализовать небольшую функцию-обработчик, которая будет принимать список имен объектов и автоматически рассчитывать их положение на основе процентного соотношения от новых размеров формы. Это значительно упростит поддержку кода в будущем.

Альтернативный подход: если использование модального режима не является критическим требованием (например, пользователю не требуется строгое ограничение доступа к другим окнам 1С), рассмотрите использование метода ОткрытьФорму() вместо модального вызова. Обычная форма позволяет пользователю самостоятельно управлять размерами, максимизировать окно и сворачивать его штатными средствами Windows, что полностью снимает проблему с нехваткой места для таблиц.

Применяя данные методы FormEx, вы сможете значительно повысить удобство работы пользователей с вашими отчетами и обработками, превращая стандартные интерфейсы 1С 7.7 в современные, адаптивные инструменты.

← На главную