При работе в терминальном режиме (RDP) разработчики конфигураций на обычных формах часто сталкиваются с неприятным артефактом: стандартное модальное окно, вызываемое через Вопрос() в процедуре ПриНачалеРаботыСистемы(), оказывается скрытым за сплэш-заставкой 1С. В результате пользователь видит «зависшее» приложение, которое ожидает действий, но кнопка подтверждения недоступна. Давайте разберем, как эффективно решить эту проблему.
Конфликт возникает из-за особенностей отрисовки графического интерфейса платформы 1С. Заставка (сплэш) является самостоятельным окном, которое удерживает фокус в процессе инициализации сеанса. Если модальный диалог вызывается мгновенно при старте, он пытается отрисоваться раньше, чем графическая подсистема успевает корректно переключить приоритеты окон внутри RDP-сессии.
Наиболее универсальным и надежным способом считается перенос логики вызова диалога из процедуры ПриНачалеРаботыСистемы() в обработчик ожидания. Это позволяет дождаться завершения процесса инициализации системы и полного скрытия заставки.
Рассмотрим реализацию данного метода по шагам:
ПриНачалеРаботыСистемы() вместо прямого вызова функции подключаем однократный обработчик.Посмотрим на пример кода:
Процедура ПриНачалеРаботыСистемы()
ПодключитьОбработчикОжидания("ПоказатьВопросПриСтарте", 1, Истина);
КонецПроцедуры
Процедура ПоказатьВопросПриСтарте() Экспорт
Ответ = Вопрос("Вы хотите выполнить корректировку времени на ККТ?", РежимДиалогаВопрос.ДаНет);
Если Ответ = КодВозвратаДиалога.Да Тогда
// Выполнение логики работы с оборудованием
КонецЕсли;
КонецПроцедуры
Параметр Истина в методе ПодключитьОбработчикОжидания гарантирует, что процедура выполнится только один раз. Задержка в 1 секунду обычно достаточна для того, чтобы сплэш-экран гарантированно исчез, и фокус ввода передался диалоговому окну.
Если стандартный Вопрос() продолжает вести себя нестабильно в конкретных условиях RDP-сервера, рекомендуем заменить его на собственную обработку или форму. Это дает гораздо больше контроля над поведением интерфейса.
Разберем процесс перехода на модальную форму:
ОткрытьМодально().Хотя модальность требует аккуратного обращения, использование собственной формы позволяет настроить положение окна на экране, что исключает наложение на служебные области 1С. При вызове через ОткрытьМодально() платформа принудительно блокирует интерфейс владельца, что часто работает стабильнее системного диалога при отрисовке в терминале.
Важно проанализировать, действительно ли необходимо задавать вопрос пользователю в момент старта системы. Если речь идет о технических проверках (например, времени на ККТ), лучше рассмотреть следующие архитектурные подходы:
ЧекККМ или панели управления торговым оборудованием).Такой подход не только решает проблему с визуальным перекрытием, но и повышает скорость запуска конфигурации, делая работу пользователей более комфортной.
При возникновении конфликта окон в RDP-сессии, мы рекомендуем в первую очередь использовать ПодключитьОбработчикОжидания. Это минимальное вмешательство в код, которое практически всегда решает проблему «исчезнувшего» диалога. Если же интерфейсные задачи усложняются, переход на специально созданные формы станет наиболее гибким решением, позволяющим избежать ограничений модальных системных функций.