При разработке интерфейсов на платформе 1С 7.7 часто возникает потребность зафиксировать размеры формы, чтобы пользователь не мог развернуть окно на весь экран. Стандартными средствами платформы это сделать крайне затруднительно, однако использование внешней компоненты FormEx открывает широкие возможности для управления поведением окон. Разберем, как реализовать запрет максимизации максимально эффективно.
Основная проблема заключается в том, что системное событие изменения размера окна срабатывает раньше, чем код в 1С успевает отреагировать. Попытка просто присвоить свойство Максимизирована = 0 внутри ПриИзмененииРазмераОкна часто приводит к тому, что форма визуально «мигает» или теряет элементы управления. Для обхода этого ограничения применим подход с отложенным выполнением через ОбработкаОжидания.
Рассмотрим пошаговую реализацию:
ПриИзмененииРазмераОкна будем проверять тип события: если окно максимизировано (тип 2), мы запускаем обработку ожидания с минимальным таймаутом.ЗапретитьМаксимизацию необходимо отключить обработку ожидания, чтобы не нагружать систему повторными вызовами.Пример программного кода:
Процедура ЗапретитьМаксимизацию()
РФорма = СоздатьОбъект("РасширениеФормы");
РФорма.УстановитьФорму(Форма);
РФорма.Максимизирована = 0;
РФорма.ОбработкаОжидания("ЗапретитьМаксимизацию", 0); // Отключаем обработку ожидания
РФорма = "";
КонецПроцедуры
Процедура ПриИзмененииРазмераОкна(ТипСобытия)
Если ТипСобытия = 2 Тогда // Окно было максимизировано
РФорма = СоздатьОбъект("РасширениеФормы");
РФорма.ОбработкаОжидания("ЗапретитьМаксимизацию", 1); // Включаем как можно быстрее
Возврат;
КонецЕсли;
КонецПроцедуры
Важно помнить, что объект РасширениеФормы следует очищать (присваивать пустую строку РФорма = "") после завершения действий, чтобы избежать утечек памяти и корректно аннулировать ссылки на объекты интерфейса.
Еще одна распространенная проблема при работе с формами 1С 7.7 — нестабильное поведение полос прокрутки (скроллеров) в табличных полях. Бывает, что при динамическом изменении состава строк или данных в ТаблицеЗначений скроллер не появляется или не исчезает вовремя.
Рассмотрим, как заставить полосу прокрутки работать предсказуемо:
Вместо того чтобы полагаться на автоматическое обновление, можно принудительно управлять свойством ВертСкроллер. Если обновление элементов не дает стабильного результата, рекомендуется использовать следующий подход:
// При обновлении формы проверяем количество строк
Если тзДокументы.КоличествоСтрок() > 6 Тогда
тпДокументы.ВертСкроллер = 1; // Всегда показываем скроллер
Иначе
тпДокументы.ВертСкроллер = 0; // Скрываем
КонецЕсли;
Если в процессе разработки возникают глюки отображения, когда полоса прокрутки «залипает», иногда приходится прибегать к менее эстетичному, но надежному методу: всегда устанавливать ВертСкроллер = 1. Это избавит пользователя от прыгающего интерфейса, хотя и будет отображать полосу прокрутки даже при малом количестве данных.
Проблема некорректного завершения работы базы данных в режиме DBF часто приводит к необходимости индексации. Чтобы избежать ручных вопросов пользователям при каждом входе, можно использовать пакетный режим запуска. Создайте файл параметров, например _ReIndex.prm:
[General]
CheckAndRepair=1
[CheckAndRepair]
Reindex=1
SkipUnresolved=1
Reconstruct=1
Затем в командном файле запускайте 1С сначала в пакетном режиме, а после его завершения — в обычном:
start /wait 1cv7.exe CONFIG /D<ПутьКБазе> /N<Пользователь> /P<Пароль> /@_ReIndex.prm
start 1cv7.exe ENTERPRISE /D<ПутьКБазе> /N<Пользователь> /P<Пароль>
Этот метод позволяет полностью исключить «диалоговое окно индексации» для обычных пользователей, обеспечивая целостность индексов перед началом рабочего дня.
Таким образом, комбинируя возможности FormEx для управления визуальными элементами и пакетные режимы для обслуживания базы данных, можно значительно повысить надежность и комфортность работы в 1С 7.7.