Случайные зависания 1С:Предприятие — одна из самых коварных проблем, с которыми сталкиваются администраторы и программисты. Особенно неприятна ситуация, когда программа перестает реагировать на действия пользователя, издает характерный звук ошибки при клике, а диспетчер задач сообщает: «Приложение не может быть закрыто, потому что активен модальный диалог». При этом визуально на экране никаких диалоговых окон нет. В этой статье мы подробно разберем причины возникновения такого поведения и найдем эффективные способы решения проблемы.
Разберем механику этого процесса. Когда в 1С вызывается модальное окно (например, предупреждение, вопрос или форма выбора), основное окно приложения блокируется. Если по какой-то причине модальное окно не отрисовывается, оказывается за пределами видимости экрана или «схлопывается», пользователь попадает в тупик: основное окно недоступно, а закрыть невидимое «препятствие» невозможно. Проанализируем основные группы причин, вызывающих этот эффект.
Как показывает практика и обсуждения специалистов, наиболее часто подобные зависания встречаются на 32-битных версиях Windows 7. Современные релизы платформы (начиная с 8.3.15 и выше) потребляют значительное количество ресурсов и используют обновленные механизмы отрисовки окон, которые могут конфликтовать со старыми видеодрайверами и архитектурными ограничениями 32-битных систем.
Рассмотрим рекомендации по устранению этой причины:
Иногда причина кроется в самой конфигурации. Выясним, как некорректный код может привести к «вечному» модальному окну. Рассмотрим пример опасного участка кода в форме элемента справочника или документа:
&НаКлиенте
Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка)
// Ошибочная попытка программного закрытия внутри события закрытия
Закрыть();
КонецПроцедуры
Если в форме внесены изменения и пользователь пытается ее закрыть, платформа инициирует стандартный диалог «Данные были изменены. Сохранить изменения?». Если в коде при этом вызывается метод Закрыть(), возникает конфликт потоков выполнения. В некоторых случаях окно вопроса может закрыться программно, но флаг модальности в ядре платформы останется активным. Проанализируем состояние системы в этот момент: интерфейс заблокирован, но объекта, который можно нажать, не существует.
1С сохраняет положение и размеры окон для каждого пользователя в специальном хранилище настроек. Если пользователь работает на нескольких мониторах, а затем переходит на ноутбук, или если произошел сбой разрешения экрана, модальное окно может открыться по координатам за пределами видимой области.
Для решения этой проблемы выполним следующие действия:
Alt + Space (Пробел). Если окно существует, но оно скрыто, появится системное меню. Выберите пункт «Переместить» и используйте стрелки на клавиатуре, чтобы вывести окно в центр экрана.%AppData%\1C\1cv8 и %LocalAppData%\1C\1cv8.В файловых базах данных (которые часто используются в магазинах) регламентные задания выполняются в контексте текущего пользовательского сеанса. Если в момент пробития чека или подбора товара запускается тяжелое фоновое задание (например, синхронизация данных или загрузка классификаторов), оно может перехватить фокус или вызвать невидимое сообщение об ошибке.
Разберем алгоритм действий для диагностики:
/AllowExecuteScheduledJobs, чтобы фоновые задачи не мешали работе кассиров.Проанализируем ситуацию с торговым оборудованием. Часто зависания происходят при обращении к драйверам ККТ (Атол, Штрих-М). Драйвер может попытаться вывести свое внутреннее окно сообщения (например, «Исчерпан ресурс ФН» или «Нет связи»), которое не является окном 1С.
Рекомендация: Проверьте настройки драйвера. В современных драйверах Атол 10.х в настройках свойств можно отключить визуальные оповещения. Также убедитесь, что библиотека драйвера совпадает по разрядности с платформой 1С.
Если 1С уже «зависла» с фантомным окном, а закрывать ее через убийство процесса нежелательно (чтобы не потерять введенные данные), попробуем следующие манипуляции:
Enter или Esc несколько раз. Часто это позволяет закрыть невидимый диалог, выбрав вариант по умолчанию.Ctrl + F4 — эта комбинация закрывает активное дочернее окно, даже если оно не в фокусе.Подводя итог, можно составить чеклист для борьбы со странными зависаниями:
/NoServerCursor в строке запуска, что иногда решает проблемы с графическим стеком Windows 7.Рассмотренные методы позволяют в большинстве случаев локализовать и устранить причину невидимых модальных окон, обеспечивая стабильную работу пользователей в системе.