При обновлении крупных типовых конфигураций 1С, таких как 1С:Комплексная автоматизация или 1С:ERP Управление предприятием, технические специалисты часто сталкиваются со странным поведением системы. В списке расширений внезапно появляются неизвестные структуры, а сам процесс обновления завершается аварийно с ошибками компиляции программных модулей. В рамках данной статьи мы подробно разберем, что представляют собой эти служебные расширения, выясним причину возникновения сбоев и рассмотрим по шагам несколько надежных способов исправления ситуации.
Служебные расширения, имена которых обычно начинаются с префиксов EF_ или ER_, — это специальный механизм оперативного исправления ошибок, разработанный фирмой 1С. В обиходе их называют патчами или исправлениями. Назначение этих объектов в свойствах метаданных всегда установлено как «Исправление».
Рассмотрим подробнее логику их работы:
Проанализируем ситуацию, когда система функционирует штатно: при выходе очередного официального релиза конфигурации все ранее выпущенные патчи должны автоматически удаляться платформой. Это логично, поскольку исправления из патчей разработчики уже штатно интегрируют в новый релиз. Однако на практике этот автоматический механизм периодически дает сбои.
Основная проблема кроется в рассинхронизации процессов обновления метаданных конфигурации и удаления старых патчей. Давайте разберем этот процесс по шагам, чтобы понять природу конфликта:
1С:Комплексная автоматизация до актуального релиза).EF_.Типичным примером такой проблемы является патч EF_00_00266348. Данное исправление изначально предназначалось для устранения назойливого системного сообщения «Расширения конфигурации обновлены, требуется перезапустить сеанс» в общем модуле УправлениеДоступомСлужебный. При обновлении конфигурации на новый релиз, где эта проблема была решена на уровне ядра, старый патч не успел удалиться и заблокировал запуск программы следующей ошибкой:
Ошибка инициализации модуля: EF_00_00266348 ОбщийМодуль.УправлениеДоступомСлужебный.Модуль по причине: Процедура или функция с указанным именем уже определена (ЭтоПраваРолейРасширений)
В результате база данных оказывается в заблокированном состоянии: пользователи не могут войти в систему, а при первом запуске под администратором программа аварийно завершает работу.
Если глубина конфликта позволяет запустить систему в режиме «1С:Предприятие» под учетной записью с административными правами, мы можем выполнить удаление через графический интерфейс. Для этого выполним следующие действия:
EF_ в имени).Если стандартный интерфейс недоступен, но база открывается, мы можем воспользоваться альтернативным путем. Откроем главное меню, перейдем в «Функции для технического специалиста» (в старых версиях — «Все функции»), найдем стандартную обработку Управление расширениями конфигурации и удалим ненужные служебные объекты оттуда.
В ситуациях, когда запуск режима «1С:Предприятие» полностью заблокирован ошибками компиляции, нам на помощь придет режим Конфигуратора. Обратите внимание, что данный способ подходит для версий ПРОФ и КОРП. Разберем алгоритм действий:
EF_.После успешного применения изменений закроем Конфигуратор и запустим программу в обычном режиме. Система запустится без ошибок и выполнит штатные процедуры обновления.
В базовых версиях конфигураций 1С прямое управление расширениями через интерфейс Конфигуратора заблокировано на уровне лицензионных ограничений платформы. Кроме того, при автоматическом обновлении большого количества баз ручное удаление нерационально. В таких случаях мы можем воспользоваться возможностями запуска платформы из командной строки.
Создадим bat-файл или запустим командную строку Windows, после чего выполним команду принудительного удаления конкретного расширения:
"C:\Program Files\1cv8\8.3.22.1709\bin\1cv8.exe" DESIGNER /F "C:\1C_Bases\KA" /N "Администратор" /P "Пароль" /DeleteCfg -Extension EF_00_00266348 /UpdateDBCfg
Рассмотрим параметры этой команды подробнее:
DESIGNER — запускает платформу в режиме конфигуратора для выполнения административных действий./F "C:\1C_Bases\KA" — указывает путь к файловой базе данных (для серверного варианта используйте параметры /S "ИмяСервера\ИмяБазы")./N и /P — авторизационные данные пользователя с административными правами./DeleteCfg -Extension — ключевой параметр, предписывающий платформе принудительно удалить расширение с указанным именем (в нашем примере это EF_00_00266348)./UpdateDBCfg — параметр, который автоматически обновляет конфигурацию базы данных после удаления объекта, избавляя нас от необходимости открывать Конфигуратор вручную.Для того чтобы минимизировать вероятность возникновения подобных сбоев при последующих обновлениях программных продуктов 1С, мы рекомендуем придерживаться нескольких простых правил:
Превентивное удаление перед обновлением. Многие опытные администраторы баз данных выработали полезную привычку: перед тем как запустить процесс обновления релиза, они заходят в список расширений конфигурации и вручную очищают все установленные патчи с префиксом EF_. Это полностью исключает конфликт старого кода исправлений с новыми механизмами релиза. После успешного обновления и запуска программы система сама скачает новые актуальные патчи, если они потребуются.
Использование специализированного софта для обновлений. Если вы администрируете большое количество баз данных, рассмотрите возможность автоматизации процесса с помощью сторонних утилит (например, популярного инструмента «Обновлятор-1С»). В подобных программных продуктах по умолчанию заложена функция предварительной очистки базы от всех установленных патчей перед началом процедуры накатывания нового релиза.
Контроль автоматической загрузки исправлений. Если вы хотите полностью контролировать стабильность вашей системы и исключить несанкционированное изменение программного кода, автоустановку патчей можно отключить. Для этого перейдите в раздел Администрирование — Интернет-поддержка и сервисы — Обновление версии программы и снимите флаг Загружать и устанавливать исправления (патчи) автоматически. При такой настройке вы сможете самостоятельно скачивать только проверенные исправления с портала 1С:ИТС и устанавливать их вручную по мере необходимости.