Как исправить ошибки при обновлении 1С, связанные со служебными расширениями (патчами)?

Программист 1С v8.3 (Управляемые формы) 1С:Комплексная автоматизация IT и автоматизация бизнеса
← На главную

При обновлении крупных типовых конфигураций 1С, таких как 1С:Комплексная автоматизация или 1С:ERP Управление предприятием, технические специалисты часто сталкиваются со странным поведением системы. В списке расширений внезапно появляются неизвестные структуры, а сам процесс обновления завершается аварийно с ошибками компиляции программных модулей. В рамках данной статьи мы подробно разберем, что представляют собой эти служебные расширения, выясним причину возникновения сбоев и рассмотрим по шагам несколько надежных способов исправления ситуации.

Что такое служебные расширения и для чего они нужны?

Служебные расширения, имена которых обычно начинаются с префиксов EF_ или ER_, — это специальный механизм оперативного исправления ошибок, разработанный фирмой 1С. В обиходе их называют патчами или исправлениями. Назначение этих объектов в свойствах метаданных всегда установлено как «Исправление».

Рассмотрим подробнее логику их работы:

  1. Оперативность доставки кода: Разработчики 1С выпускают патчи между официальными релизами программ. Это позволяет быстро устранить критический баг (например, ошибку в заполнении регламентированной отчетности или некорректный расчет налога), не дожидаясь выхода полноценного накопительного обновления.
  2. Автоматическая установка: Если в системе включена интеграция с Порталом 1С:ИТС и настроена интернет-поддержка, программа может самостоятельно в фоновом режиме скачивать и применять эти исправления. Пользователям для этого не требуется монопольный доступ — изменения вступят в силу сразу после очередного перезапуска сеанса.

Проанализируем ситуацию, когда система функционирует штатно: при выходе очередного официального релиза конфигурации все ранее выпущенные патчи должны автоматически удаляться платформой. Это логично, поскольку исправления из патчей разработчики уже штатно интегрируют в новый релиз. Однако на практике этот автоматический механизм периодически дает сбои.

Выясняем причины возникновения ошибок при обновлении

Основная проблема кроется в рассинхронизации процессов обновления метаданных конфигурации и удаления старых патчей. Давайте разберем этот процесс по шагам, чтобы понять природу конфликта:

  1. Вы запускаете обновление конфигурации (например, обновляете 1С:Комплексная автоматизация до актуального релиза).
  2. В базу накатываются новые модули и объекты метаданных.
  3. До того момента, как сработают штатные процедуры удаления старых патчей, платформа пытается скомпилировать обновленную конфигурацию вместе с существующими расширениями EF_.
  4. Поскольку в новом релизе программный код уже содержит исправления, код старого патча начинает дублировать новые системные процедуры. Возникает жесткий конфликт имен.

Типичным примером такой проблемы является патч EF_00_00266348. Данное исправление изначально предназначалось для устранения назойливого системного сообщения «Расширения конфигурации обновлены, требуется перезапустить сеанс» в общем модуле УправлениеДоступомСлужебный. При обновлении конфигурации на новый релиз, где эта проблема была решена на уровне ядра, старый патч не успел удалиться и заблокировал запуск программы следующей ошибкой:

Ошибка инициализации модуля: EF_00_00266348 ОбщийМодуль.УправлениеДоступомСлужебный.Модуль по причине: Процедура или функция с указанным именем уже определена (ЭтоПраваРолейРасширений)

В результате база данных оказывается в заблокированном состоянии: пользователи не могут войти в систему, а при первом запуске под администратором программа аварийно завершает работу.

Способ 1. Удаление патчей через режим «1С:Предприятие»

Если глубина конфликта позволяет запустить систему в режиме «1С:Предприятие» под учетной записью с административными правами, мы можем выполнить удаление через графический интерфейс. Для этого выполним следующие действия:

  1. Перейдем в раздел меню Администрирование, далее выберем пункт Обслуживание.
  2. Развернем группу настроек Обновление программы и перейдем по гиперссылке Установленные исправления (патчи).
  3. В открывшемся списке выделим левой кнопкой мыши один или несколько конфликтных патчей (ориентируясь на префикс EF_ в имени).
  4. Нажмем на кнопку Удалить исправление на панели инструментов.

Если стандартный интерфейс недоступен, но база открывается, мы можем воспользоваться альтернативным путем. Откроем главное меню, перейдем в «Функции для технического специалиста» (в старых версиях — «Все функции»), найдем стандартную обработку Управление расширениями конфигурации и удалим ненужные служебные объекты оттуда.

Способ 2. Удаление патчей через Конфигуратор (ПРОФ и КОРП версии)

В ситуациях, когда запуск режима «1С:Предприятие» полностью заблокирован ошибками компиляции, нам на помощь придет режим Конфигуратора. Обратите внимание, что данный способ подходит для версий ПРОФ и КОРП. Разберем алгоритм действий:

  1. Запустим базу данных в режиме Конфигуратора с правами администратора.
  2. В главном меню перейдем в раздел Конфигурация и выберем пункт Расширения конфигурации.
  3. Перед нами откроется табличная часть со всеми установленными в системе расширениями. Найдем строки, имена которых начинаются на EF_.
  4. Выделим проблемное расширение и нажмем клавишу Del (или выберем «Удалить» в контекстном меню по правой кнопке мыши). Повторим процедуру для всех зависших патчей.
  5. Обязательно обновим конфигурацию базы данных, нажав клавишу F7 (или синюю бочку на панели инструментов).

После успешного применения изменений закроем Конфигуратор и запустим программу в обычном режиме. Система запустится без ошибок и выполнит штатные процедуры обновления.

Способ 3. Удаление через командную строку (для Базовых версий и автоматизации)

В базовых версиях конфигураций 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

Рассмотрим параметры этой команды подробнее:

Рекомендации по предотвращению ошибок с патчами в будущем

Для того чтобы минимизировать вероятность возникновения подобных сбоев при последующих обновлениях программных продуктов 1С, мы рекомендуем придерживаться нескольких простых правил:

Превентивное удаление перед обновлением. Многие опытные администраторы баз данных выработали полезную привычку: перед тем как запустить процесс обновления релиза, они заходят в список расширений конфигурации и вручную очищают все установленные патчи с префиксом EF_. Это полностью исключает конфликт старого кода исправлений с новыми механизмами релиза. После успешного обновления и запуска программы система сама скачает новые актуальные патчи, если они потребуются.

Использование специализированного софта для обновлений. Если вы администрируете большое количество баз данных, рассмотрите возможность автоматизации процесса с помощью сторонних утилит (например, популярного инструмента «Обновлятор-1С»). В подобных программных продуктах по умолчанию заложена функция предварительной очистки базы от всех установленных патчей перед началом процедуры накатывания нового релиза.

Контроль автоматической загрузки исправлений. Если вы хотите полностью контролировать стабильность вашей системы и исключить несанкционированное изменение программного кода, автоустановку патчей можно отключить. Для этого перейдите в раздел Администрирование — Интернет-поддержка и сервисы — Обновление версии программы и снимите флаг Загружать и устанавливать исправления (патчи) автоматически. При такой настройке вы сможете самостоятельно скачивать только проверенные исправления с портала 1С:ИТС и устанавливать их вручную по мере необходимости.

← На главную