Ситуация, когда программа 1С внезапно закрывается («вылетает») при попытке открыть конкретную форму, является одной из самых сложных для диагностики. Особенно коварно эта проблема проявляется, когда у одного пользователя (например, расчетчицы) форма не открывается, а под полными правами или на другом рабочем месте все работает штатно (хотя бывает и так, что вылет происходит повсеместно). Рассмотрим подробно причины этого поведения и разберем по шагам алгоритм локализации и устранения ошибки.
Первым делом проанализируем состояние временных файлов на компьютере пользователя. Часто причиной сбоя становится повреждение локального кэша, где 1С хранит скомпилированные модули и метаданные для ускорения работы. Если данные в кэше рассинхронизированы с реальным состоянием базы, обращение к форме вызывает критическую ошибку памяти.
Для эффективной очистки кэша выполним следующие действия:
%LOCALAPPDATA%\1C\1cv8\ и %APPDATA%\1C\1cv8\. Важно удалять именно папки с длинными буквенно-цифровыми названиями (GUID), не трогая файлы настроек списка баз ibases.v8i.Выясним, не связаны ли вылеты с индивидуальными настройками формы. 1С сохраняет положение окна, ширину колонок табличных частей и выбранные отборы для каждого пользователя в специальной системной таблице SystemSettings. Если при сохранении этих данных произошел сбой, попытка восстановить «битую» настройку при открытии формы приведет к падению приложения.
Для проверки этой гипотезы проделаем следующее:
Если очистка кэша и настроек не дала результата, нам необходимо понять, в какой момент происходит сбой: при инициализации на сервере или при отрисовке на клиенте. Для этого запустим базу в режиме отладки.
Разберем последовательность действий в Конфигураторе:
ПриСозданииНаСервере.ПриОткрытии и OnCreateAtServer. Часто вылет провоцируют вызовы внешних компонент или работа с файловой системой.Проанализируем историю обновлений конфигурации. Если в последнее время применялось динамическое обновление (так называемое «демоническое обновление»), это могло привести к несоответствию структуры базы данных и кэша сервера. В таких случаях программа падает при обращении к объекту, который был изменен «на лету».
Чтобы исправить это, выполним «фиктивное» обновление:
Внесем любое незначительное изменение в конфигурацию (например, добавим пробел в комментарий модуля), сохраним и обновим конфигурацию базы данных (F7) в монопольном режиме, предварительно выгнав всех пользователей. Это заставит систему пересчитать контрольные суммы и обновить структуру метаданных во всех таблицах.
Иногда причина кроется не в коде 1С, а во взаимодействии с операционной системой. Рассмотрим две частые «внешние» причины:
Конфликт с драйвером принтера. При открытии формы (особенно если на ней есть печатные формы или сложные таблицы) 1С опрашивает принтер по умолчанию для расчета параметров отображения. Если драйвер недоступен или поврежден, приложение может закрыться с ошибкой. Попробуйте временно назначить «Microsoft Print to PDF» принтером по умолчанию в Windows и проверить работу формы.
Аппаратное ускорение видеокарты. В редких случаях отрисовка сложных элементов управляемого интерфейса конфликтует с драйвером видеокарты. Проверим это, отключив аппаратное ускорение в настройках платформы. Для этого в файле conf.cfg можно прописать параметр:
DisableHardwareAcceleration=t
Если ни один из методов не помог, перейдем к «тяжелой артиллерии» — анализу журналов Windows. Откроем Просмотр событий и изучим раздел Журналы Windows — Приложение. Ищем ошибки с кодом Application Error, где исполняемым файлом является 1cv8.exe.
Особое внимание уделим коду исключения (Exception code). Например, код 0xc0000005 чаще всего указывает на ошибку нарушения прав доступа к памяти (Access Violation), что может свидетельствовать о конфликте с антивирусом или системой предотвращения выполнения данных (DEP). В этом случае стоит попробовать добавить 1С в исключения DEP.
В завершение проанализируем состояние самой информационной базы. Если проблема носит массовый характер, возможно физическое повреждение таблиц. Выполним следующие действия:
chdbfl.exe, которая находится в папке bin установленной платформы.1C:Enterprise 8.3 Server Agent и очистить серверный кэш (папка snccntx в каталоге данных сервера), чтобы исключить хранение поврежденных сеансовых данных.Таким образом, последовательно исключая локальные ошибки кэша, специфические настройки пользователя, конфликты драйверов и ошибки метаданных, мы сможем найти истинную причину вылета программы и восстановить работоспособность формы.