В классической архитектуре 1С 7.7 клавиша Esc жестко запрограммирована платформой как команда закрытия текущего диалогового окна. Если это поведение нарушено, значит, произошло вмешательство в стандартный цикл обработки событий системы. Давайте разберем по шагам, как выявить и устранить эту неисправность.
Самая вероятная причина того, что системное нажатие не доходит до формы — это перехват ввода внешними модулями. Даже если вы отключили библиотеку FormEx, в системе могут работать другие компоненты, установленные через ЗагрузитьВнешнююКомпоненту().
Рассмотрим использование инструмента Информатор из состава 1С++. Этот инструмент позволяет получить таблицу всех загруженных в память процесса DLL-библиотек. Если вы обнаружите подозрительные компоненты, их нужно временно выгрузить для проверки.
Также проверьте работу сторонних утилит, таких как i-gent, которые позволяют назначать горячие клавиши на уровне операционной системы. Подобное программное обеспечение может перехватывать нажатие Esc до того, как оно попадет в окно 1С.
Проанализируем программный код. В 1С 7.7 существует возможность имитации нажатий клавиш через WScript.Shell (объект WScript.Shell). Если в конфигурации реализована автоматизация, которая использует метод SendKeys, это может привести к конфликту в буфере клавиатуры.
Проверьте глобальный модуль и модули форм на наличие вызовов:
// Пример потенциально опасного кода
ОбъектShell = СоздатьОбъект(\"WScript.Shell\");
ОбъектShell.SendKeys(\"{ESC}\");
Если в коде реализована сложная логика, использующая подобные методы, попробуйте временно закомментировать эти блоки, чтобы исключить влияние на стандартную обработку событий.
Иногда проблема кроется в порядке обхода элементов на самой форме. Если на форме присутствует элемент управления, который «захватывает» фокус ввода некорректным образом, платформа может игнорировать системную команду закрытия.
Если программных причин не обнаружено, следует рассмотреть вероятность повреждения структуры 1Cv7.md. Хотя 1С 7.7 достаточно стабильна, в процессе многолетней разработки файл метаданных может накапливать ошибки. Для исключения этого фактора рекомендуем выполнить следующие действия:
.dt (если используется SQL-версия) или скопируйте файлы DBF в пустую конфигурацию..cf, а затем загрузить его в абсолютно новую «нулевую» базу. Если в чистой базе Esc работает корректно — проблема была в битых метаданных текущего файла конфигурации.Рассмотрим ситуацию, когда Esc вызывает действие другой кнопки. Это явный признак того, что на форме или в панели инструментов установлен «горячий» хоткей. Внимательно проверьте все элементы управления (кнопки, таблицы) на наличие назначения клавиши Esc в свойствах кнопки. Иногда при копировании элементов или использовании сторонних мастеров разработки подобные настройки переносятся незаметно.
В завершение, убедитесь, что в процедурах ПриЗакрытии() не прописаны условия, которые принудительно возвращают СтатусВозврата(0) без дополнительных проверок. Даже если вы закомментировали код, убедитесь, что логика формы не завязана на внешние глобальные переменные, которые принудительно блокируют закрытие окна.