Многие специалисты и системные администраторы в своей практике сталкиваются с внезапной и очень неприятной ситуацией, когда стабильно работающая система начинает массово "выбрасывать" пользователей. При попытке запуска или в процессе работы на экран выводится критическое сообщение: На сервере 1С:Предприятия произошла неисправимая ошибка. Приложение будет закрыто. Давайте детально проанализируем эту ситуацию, выясним скрытые причины падения сервера и разберем по шагам все возможные способы восстановления работоспособности.
На первый взгляд проблема кажется хаотичной: одни пользователи продолжают спокойно работать, а другие вылетают из программы сразу при запуске или при попытке открыть определенный документ. Более того, базы данных, такие как Зарплата и Управление Персоналом, могут работать без перебоев, в то время как Бухгалтерия или ERP-система падают на одном и том же кластере серверов.
Рассмотрим подробнее механизм возникновения этой ошибки. Главным виновником данного сбоя является внешняя компонента генерации штрихкодов, а именно библиотека 1CBarcodWin64_9_0_12_13.dll (или смежные с ней релизы). Платформа 1С имеет встроенный механизм фоновой загрузки обновлений и новостей с официальных серверов. Когда система решает, что ей необходима свежая компонента для работы со штрихкодами, она скачивает ее в каталог временных файлов. Однако скачанный файл может содержать внутренний дефект или конфликтовать с серверным окружением.
Посмотрим, что происходит на уровне архитектуры клиент-серверного варианта 1С. Когда клиентское приложение вызывает функцию генерации штрихкода, запрос отправляется на сервер приложений. Если вызывается метод МенеджерОборудованияВызовСервера.ПодключитьКомпонентуГенерацииИзображенияШтрихкода, дефектная библиотека инициализируется в памяти рабочего процесса rphost.exe. Из-за внутренней ошибки в библиотеке происходит жесткое падение всего процесса rphost.exe на уровне операционной системы.
Это объясняет, почему проблема затрагивает случайных пользователей. Один пользователь открывает счет на оплату, система пытается сгенерировать QR-код, процесс rphost.exe аварийно завершается, и связь обрывается у всех десятков пользователей, чьи сеансы в данную секунду обслуживались этим конкретным рабочим процессом.
Разберем ситуации, в которых система неявно обращается к сбойной компоненте. Падение происходит не всегда при самом запуске. Часто триггерами выступают:
QRКодРеквизитыПлатежа в общих модулях программы.Отдельно стоит упомянуть файловые базы данных. В них эта же проблема может маскироваться под совершенно другое сообщение: Обнаружено нарушение целостности системы. Из-за этого многие администраторы ошибочно полагают, что сработала защита от нелицензионного использования, хотя на самом деле это критический баг при инициализации barcode-компоненты. Давайте рассмотрим рабочие методы решения этой проблемы.
Первое, что приходит на ум — почистить кэш. Однако многие отмечают, что чистка кэша и папки Temp помогает буквально на 5 минут. Выясним причину этого явления. При удалении временных файлов вы действительно стираете сбойную компоненту. Но при следующем запуске 1С снова обращается к интернету, скачивает ту же самую сломанную библиотеку и кладет ее обратно. Кроме того, часто кэш чистят только у пользователя, забывая про серверные службы.
Выполним правильную очистку по шагам:
USR1CV8.C:\Users\USR1CV8\AppData\Local\Temp. Обязательно удалите все файлы с расширением DLL.C:\Windows\Temp.Также проанализируем работу антивируса. На сервере антивирусное программное обеспечение может блокировать скачанный файл DLL в папке Temp, помещая его в карантин, что заставляет платформу 1С уходить в бесконечный цикл попыток скачать и установить компоненту заново. Убедитесь, что каталоги кэша добавлены в исключения антивируса.
Если блокировка интернета невозможна, а конфигурация находится на поддержке с возможностью редактирования, мы можем временно закомментировать код вызова компоненты. Это лишит пользователей возможности печатать штрихкоды, но вернет работоспособность всей остальной базе.
Посмотрим на пример того, как модифицировать код в конфигураторе. Откройте общий модуль МенеджерОборудованияВызовСервера и найдите функцию подключения компоненты. Отредактируем ее следующим образом:
Функция ПодключитьКомпонентуГенерацииИзображенияШтрихкода(ОписаниеОшибки = "") Экспорт
// ВРЕМЕННОЕ РЕШЕНИЕ: Отключаем загрузку сбойной компоненты
// чтобы предотвратить падение рабочего процесса rphost
Возврат Ложь;
// Ниже располагается оригинальный код от 1С:
// УстановитьБезопасныйРежим(Истина);
// ИмяКомпоненты = "ОбщаяКартинка.КомпонентаПечатиШтрихкодов";
// И т.д...
КонецФункции
После применения данного исправления сервер перестанет обращаться к внешней библиотеке, и критическая ошибка исчезнет. Как только 1С выпустит исправленный релиз конфигурации или обновит компоненту на своих серверах, вы сможете вернуть оригинальный код.
Самым элегантным и безопасным решением, не требующим снятия конфигурации с замка, является создание небольшого расширения конфигурации. Суть метода заключается в подмене новой сбойной компоненты на проверенную старую версию, например, из старых релизов Бухгалтерии (версии 8.3.88.22 или аналогичных).
Разберем по шагам процесс создания такого расширения:
МенеджерОборудованияВызовСервера с аннотацией &Вместо для функции подключения компоненты.Посмотрим на пример кода, который будет перенаправлять вызов на вашу стабильную компоненту:
&Вместо("ПодключитьКомпонентуГенерацииИзображенияШтрихкода")
Функция НашеРасширение_ПодключитьКомпонентуГенерацииИзображенияШтрихкода(ОписаниеОшибки = "") Экспорт
УстановитьБезопасныйРежим(Ложь);
Попытка
// Указываем путь к стабильной компоненте, загруженной в расширение
ИмяКомпоненты = "ОбщаяКартинка.СтабильнаяКомпонентаШтрихкодовРасширения";
ПодключитьВнешнююКомпоненту(ИмяКомпоненты, "КартинкаШтрихкода");
Возврат Истина;
Исключение
ОписаниеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
Возврат Ложь;
КонецПопытки;
КонецФункции
Очень важный момент: при подключении готового расширения в режиме 1С:Предприятие (в разделе "Печатные формы, отчеты и обработки" -> "Расширения") обязательно снимите галочку Безопасный режим. Внешние компоненты не могут загружаться в память сервера и получать права на выполнение кода операционной системы, если расширение работает в безопасном режиме.
Мы подробно проанализировали причины критического падения сервера 1С и выяснили, что ошибка кроется в фоновом обновлении внешней компоненты. Вы можете выбрать любой из предложенных вариантов: жесткую очистку кэшей системного пользователя USR1CV8 с последующей блокировкой сетевых запросов, комментирование вызова в конфигураторе или подмену компоненты через механизм расширений. Последний способ является наиболее предпочтительным, так как он сохраняет возможность формирования QR-кодов и не влияет на поддержку типовой конфигурации.