В процессе эксплуатации и обновления информационных баз 1С:Предприятие пользователи и администраторы часто сталкиваются с непредвиденными сбоями платформы. Один из наиболее коварных и труднодиагностируемых сценариев — когда программа запускается без видимых проблем, но через несколько минут стабильной работы внезапно и без предупреждения закрывается (происходит так называемый "краш" приложения). Особенно часто эта проблема проявляется на операционной системе Windows 10 после обновления конфигураций (например, «1С:Бухгалтерия предприятия, редакция 3.0») или самой технологической платформы.
В рамках этой статьи мы подробно разберем, почему возникает данная неполадка, проанализируем взаимосвязь между платформой 1С и системными библиотеками Windows, а также выработаем пошаговый алгоритм устранения этой критической ошибки.
Рассмотрим типичную ситуацию. На рабочем компьютере под управлением Windows 10 база данных 1С (часто базовая версия конфигурации в файловом варианте) успешно открывается. Пользователь начинает работу, но ровно через 2–3 минуты программа аварийно завершает свою работу без вывода каких-либо предупреждений от самой 1С. При этом на соседних компьютерах под управлением Windows 7 та же самая база, открытая по локальной сети («шаре»), функционирует абсолютно стабильно.
Попытки стандартного «лечения» базы — такие как тестирование и исправление (ТиИ), очистка локального кэша конфигурации, выгрузка/загрузка информационной базы или даже переустановка платформы на соседние релизы — в данном случае не приносят желаемого результата.
Для того чтобы понять истинную причину сбоя, нам необходимо обратиться к системному журналу Windows (Event Viewer). Проанализируем лог ошибки, который фиксируется в операционной системе в момент падения 1С:
Имя сбойного приложения: 1cv8c.exe, версия: 8.3.12.1529
Имя сбойного модуля: Windows.Data.Pdf.dll, версия: 10.0.17134.285
Код исключения: 0xc0000005
Смещение ошибки: 0x00124530
Путь сбойного приложения: C:\Program Files (x86)\1cv8\8.3.12.1529\bin\1cv8c.exe
Путь сбойного модуля: C:\WINDOWS\system32\Windows.Data.Pdf.dll
Имя события: APPCRASH
Этот лог дает нам ключевые зацепки для расследования:
1cv8c.exe.Windows.Data.Pdf.dll.0xc0000005 указывает на ошибку нарушения прав доступа к памяти (Access Violation), когда приложение пытается обратиться к адресу памяти, который ему не принадлежит или закрыт для записи/чтения.Для начала разберемся, как связаны платформа 1С и системный файл Windows.Data.Pdf.dll. Данная библиотека представляет собой встроенный в Windows 10 программный интерфейс (WinRT API), который отвечает за рендеринг, распознавание и отображение документов в формате PDF.
Начиная с версии 8.3.10, разработчики платформы 1С интегрировали в систему более тесное взаимодействие с веб-контентом через встроенное поле HTML-документа (на базе движка WebKit). Когда программа пытается отобразить встроенную веб-страницу, содержащую PDF-элементы, рекламные баннеры или интерактивные инструкции, она обращается напрямую к системным API операционной системы Windows 10. Если в этот момент происходит конфликт версий или некорректная обработка структуры файла библиотекой Windows.Data.Pdf.dll, операционная система мгновенно прекращает работу процесса 1cv8c.exe, предотвращая дальнейшие ошибки памяти.
Но почему падение происходит именно через 3 минуты после старта? Здесь в силу вступает механизм планировщика задач 1С. В файловых информационных базах все регламентные (фоновые) задания выполняются непосредственно в сеансе запущенного клиента. При открытии базы планировщик инициализируется не сразу, а с небольшой задержкой (обычно от 120 до 180 секунд).
В современных конфигурациях «1С:Бухгалтерия» по умолчанию включено регламентное задание «Получение новостей» (или аналогичные сервисы интернет-поддержки). Спустя 3 минуты после запуска базы это задание стартует в фоне, подключается к серверам обновлений 1С, скачивает актуальные баннеры, новости и файлы помощи, которые зачастую содержат PDF-разметку. Платформа пытается отрисовать этот контент, вызывает сбойную библиотеку Windows.Data.Pdf.dll, и программа закрывается.
Простое отключение всех регламентных заданий — это радикальный и не самый лучший шаг, так как вы лишитесь важных автоматических функций (загрузка курсов валют, классификаторов, обновление индекса полнотекстового поиска). Ниже мы разберем более точечные и безопасные способы решения проблемы.
Поскольку виновником краша в большинстве случаев является загрузка рекламных и новостных материалов, мы можем отключить только этот функционал, сохранив работоспособность остальных регламентных процедур. Выполним следующие шаги:
В некоторых случаях некорректно скачанные ранее новостные файлы или поврежденные настройки планировщика могут вызывать циклическую ошибку при каждом запуске. Для устранения поврежденных временных данных выполните очистку кэша планировщика:
1Cv8JobScheduler и полностью удалите ее.*.cfl (это временные файлы блокировок и очередей планировщика).Если сбой происходит моментально при открытии или при переходе на начальную страницу, это означает, что на ней закреплен виджет «Информационный центр» или баннерная панель. Изменим состав начальной страницы:
Так как библиотека Windows.Data.Pdf.dll является системной, стабильность ее работы напрямую зависит от обновлений операционной системы и компонентов рендеринга. Рекомендуется выполнить следующие действия:
sfc /scannow. Если библиотека Windows.Data.Pdf.dll была повреждена, система восстановит ее из резервного хранилища.В старых релизах платформы линейки 8.3.12 (включая популярную версию 8.3.12.1529) обработка ошибок работы с COM-объектами, HTML-документами и базовыми версиями конфигураций имела существенные недоработки. Если вышеописанные способы не помогли, наиболее надежным решением будет обновление технологической платформы до более современных стабильных веток (например, актуальных релизов 8.3.15, 8.3.18 или старше).
В новых выпусках платформы разработчики 1С переработали логику работы встроенного браузера WebKit и добавили перехват критических ошибок (исключений) внешних DLL-библиотек. Даже если системная библиотека Windows выдаст ошибку, платформа не закроется аварийно, а просто проигнорирует сбойный графический элемент, позволив пользователю продолжить работу с учетными данными.