В процессе разработки и автоматизации задач в платформе 1С:Предприятие 7.7 разработчики часто сталкиваются с ситуацией, когда служебное окно сообщений необходимо не просто очистить, но и полностью убрать с экрана. Стандартная встроенная процедура ОчиститьОкноСообщений() удаляет выведенный текст, однако сама панель остается видимой в интерфейсе. Разберем доступные способы решения этой задачи, их преимущества и ограничения.
В штатном синтаксисе языка 1С 7.7 отсутствуют прямые методы управления отображением системных стыкуемых панелей интерфейса. Чтобы программно скрыть окно сообщений, нам потребуется прибегнуть либо к сценариям Windows Script Host (WSH), либо к внешним компонентам, расширяющим возможности платформы.
Штатно в 1С:Предприятии 7.7 за скрытие и отображение панели сообщений отвечает комбинация клавиш Ctrl + Shift + Z. Мы можем сымитировать нажатие этой комбинации с помощью системного COM-объекта WScript.Shell.
Рассмотрим пример программного кода:
WSHShell = СоздатьОбъект("WScript.Shell");
WSHShell.SendKeys("^+z"); // Имитация нажатия комбинации Ctrl+Shift+Z
WSHShell.SendKeys("^+я"); // Для случая, когда активна русская раскладка клавиатуры
Разберем особенности и подводные камни этого метода:
^ обозначает клавишу Ctrl, а символ + — клавишу Shift.SendKeys чувствителен к текущей системной раскладке. Дублирование вызова для английской буквы «z» и русской «я» (находящейся на той же физической клавише) повышает надежность срабатывания.Если в конфигурации подключена популярная внешняя компонента FormEx, задача решается значительно надежнее, так как компонента предоставляет прямой доступ к управлению элементами интерфейса без имитации клавиатурного ввода.
Посмотрим на пример вызова метода:
Сервис = СоздатьОбъект("Сервис");
Сервис.Окна.ПоказыватьПанель("Окно сообщений", 0);
Преимущества данного подхода:
0 явно указывает, что панель должна быть скрыта, исключая случайное открытие, как в случае с триггерными горячими клавишами.Если использование эмуляции клавиатуры нежелательно, а использование дополнительных тяжелых библиотек ограничено, можно отправлять оконные команды системными вызовами Windows API (например, через динамические обертки вроде DynamicWrapper).
Управление реализуется следующими способами:
SendMessage(hWnd, WM_COMMAND, 32800, 0), где 32800 — внутренний идентификатор команды переключения панели сообщений.HWND) окна сообщений или стыкуемого контейнера с последующим вызовом функции ShowWindow(hWnd, SW_HIDE).Если окно сообщений мешает при выполнении регламентных или пакетных обработок, проанализируем другие подходы к выводу служебных данных:
Состояние("Текст уведомления") выводит информацию в нижнюю панель окна программы, не вызывая появления плавающего окна сообщений.Текст.Форма.Закрыть().