При переходе на новые релизы конфигурации «Бухгалтерия предприятия, редакция 3.0» (начиная с 3.0.71.63, 3.0.71.69, 3.0.71.75 и выше) многие пользователи и технические специалисты сталкиваются с критической ошибкой при запуске программы. Процесс обновления в конфигураторе проходит успешно, однако при попытке войти в пользовательский режим система аварийно завершает работу.
Проанализируем типичное сообщение об ошибке, которое видит пользователь:
Ошибка инициализации модуля: EF_00_00177760 ОбщийМодуль.ОбщегоНазначенияКлиентСервер.Модуль по причине: {EF_00_00177760 ОбщийМодуль.ОбщегоНазначенияКлиентСервер.Модуль(8,18)}: Процедура или функция с указанным именем не определена (БезопаснаяСтрокаКоманды)
В данной статье мы подробно разберем, почему возникает этот сбой, как он связан с механизмом исправления ошибок (патчами) и какими способами можно вернуть работоспособность информационной базы.
Разберем ситуацию с технической точки зрения. Основным виновником проблемы является установленный ранее патч (исправление) с идентификатором EF_00_00177760. Рассмотрим историю его появления. Данный патч выпускался фирмой «1С» для релизов линейки 3.0.70 и ниже с целью устранения критической уязвимости. Его задача заключалась в обеспечении безопасности при вызове внешних приложений через командную строку. Патч принудительно внедрял в общий модуль ОбщегоНазначенияКлиентСервер функцию БезопаснаяСтрокаКоманды.
Проблема заключается в том, что начиная с релиза 3.0.71, разработчики «1С» включили аналогичные механизмы защиты непосредственно в основной код конфигурации и Библиотеки стандартных подсистем (БСП). Однако реализация в новом ядре отличается от той, что была в патче.
Когда вы запускаете обновленную базу, происходит следующее:
ОбщегоНазначенияКлиентСервер.БезопаснаяСтрокаКоманды.Это самый надежный и быстрый способ, если база данных позволяет зайти в конфигуратор. Рассмотрим последовательность действий:
После удаления расширения попробуйте запустить 1С в обычном режиме. Как правило, этого достаточно для устранения ошибки.
Если вам удалось запустить программу (например, на другом релизе или после частичного исправления), мы можем воспользоваться штатным механизмом управления патчами. Рассмотрим, как это сделать:
EF_00_00177760. Проанализируем описание: там должно быть указано, что это исправление безопасности для модуля ОбщегоНазначенияКлиентСервер.Важное замечание: Не стоит опасаться удаления этого патча. Поскольку вы уже обновились до версии 3.0.71 или выше, все необходимые функции безопасности уже встроены в основной код конфигурации. Старый патч становится просто избыточным и вредным «наслоением» кода.
В случаях, когда ошибка блокирует любой запуск, или если база находится на серверном кластере и ведет себя нестабильно, проанализируем возможность использования параметров запуска. Рассмотрим применение ключа /DeleteCfg.
Для автоматизированного удаления расширения можно запустить 1С из командной строки (cmd) с использованием следующего шаблона:
1cv8.exe DESIGNER /F "ПутьКВашейБазе" /N "Логин" /P "Пароль" /DeleteCfg -Extension "EF_00_00177760"
Также полезно знать о параметре /SafeMode, который позволяет запустить базу в безопасном режиме, временно игнорируя расширения, чтобы зайти в интерфейс и провести очистку.
Иногда даже после удаления патча ошибка может сохраняться в оперативной памяти или локальных файлах пользователя. Посмотрим, как окончательно закрепить результат:
%AppData%\1C\1Cv8\ и %LocalAppData%\1C\1Cv8\.Разберем ситуацию, описанную в сообщениях форума, когда техподдержка не может сразу дать ответ. Патчи устанавливаются и удаляются механизмом БСП автоматически. Однако, если при предыдущих обновлениях произошел программный сбой, интернет-соединение прервалось в момент загрузки исправлений или кэш патчей оказался поврежден, автоматика может «забыть» удалить старое исправление, ставшее несовместимым.
Посмотрим на пример того, как должен выглядеть правильный программный вызов функции в новом релизе. Вместо обращения к методам патча, конфигурация теперь использует штатные вызовы БСП:
// В новых релизах используется штатный механизм защиты
СтрокаКоманды = ОбщегоНазначенияКлиентСервер.БезопаснаяСтрокаКоманды(КомандаЗапуска);
// Больше не требуется внешнее расширение EF_00_00177760
Таким образом, мы выяснили, что корень проблемы лежит в конфликте версий одного и того же функционала. Решение задачи сводится к ручному удалению устаревшего технологического артефакта (патча). После выполнения предложенных шагов обновление 1С:Бухгалтерии завершится корректно, и база будет готова к работе.