При обновлении типовых конфигураций, таких как 1С:Бухгалтерия предприятия 3.0 или 1С:Розница, специалисты часто сталкиваются с критической ошибкой компиляции. Программа внезапно прекращает работу, а в окне сообщений появляется текст вида: Ошибка инициализации модуля: EF_00_00267418 РегистрСведений.ПараметрыРаботыПрограммы.МодульМенеджера. Причиной указывается дублирование функций, например, ВыполнятьОбновлениеБезФоновогоЗадания или ЕстьРолиМодифицированныеРасширениями.
Рассмотрим детально, почему возникает эта ситуация, что означают таинственные индексы EF и как правильно провести обновление, чтобы избежать подобных «пакостей» в будущем.
Для начала выясним природу префикса EF. Эта аббревиатура расшифровывается как Extension Fix. Компания «1С» использует механизм расширений для оперативной доставки исправлений критических ошибок (багов) в типовых конфигурациях. Когда в вышедшем релизе обнаруживается серьезная ошибка, разработчики выпускают небольшой «патч» в виде расширения. Если в базе включена настройка автоматической загрузки исправлений, система сама скачивает и подключает это расширение без участия программиста.
Проанализируем механику конфликта. Ошибка «Процедура или функция уже определена» возникает в следующей последовательности:
EF_00_XXXXXX, которое перекрывает проблемную функцию своим кодом.Самый быстрый и надежный способ восстановить работоспособность базы — это удаление установленных патчей. Поскольку патчи EF предназначены исключительно для исправления кода и не содержат новых данных (справочников или реквизитов), их удаление абсолютно безопасно для целостности информационной базы.
Рассмотрим шаги по ручному удалению через Конфигуратор:
EF_.После удаления старых патчей система успешно скомпилирует модуль РегистрСведений.ПараметрыРаботыПрограммы.МодульМенеджера, так как теперь функции будут определены только в основном коде новой версии конфигурации.
Выясним, почему ошибка чаще возникает при обновлении через Конфигуратор файлом .cf или .cfu. При использовании Конфигуратора мы напрямую меняем структуру метаданных, но механизмы управления расширениями при этом не всегда срабатывают автоматически.
Если же выполнять обновление через пользовательский режим (Администрирование — Обслуживание — Обновление программы), система задействует алгоритмы Библиотеки стандартных подсистем (БСП). Эти алгоритмы обучены проверять список установленных патчей перед обновлением и автоматически удалять те из них, которые становятся неактуальными для нового релиза. Поэтому, если вы столкнулись с ошибкой, попробуйте в следующий раз проводить процедуру через встроенный помощник обновления.
Часто бухгалтеры и администраторы опасаются удалять расширения, боясь потерять введенную информацию. В случае с патчами EF это исключено. Проанализируем типичный состав такого расширения:
// Пример кода в патче EF, вызывающего конфликт
&Вместо("ВыполнятьОбновлениеБезФоновогоЗадания")
Функция EF_ВыполнятьОбновлениеБезФоновогоЗадания()
// Исправленная логика от разработчиков 1С
Возврат Истина;
КонецФункции
Как видим, расширение содержит только программный код. В нем нет определений новых таблиц базы данных. Следовательно, удаление объекта расширения просто возвращает управление основному коду конфигурации, который в новом релизе уже содержит аналогичные исправления.
Чтобы минимизировать вероятность появления подобных «сюрпризов» при обновлении, рекомендуем выполнить следующие действия:
Администрирование — Обслуживание — Обновление программы и снимите галочку «Устанавливать исправления (патчи) автоматически». В этом случае вам придется устанавливать критические фиксы вручную, но вы будете знать, какие расширения присутствуют в системе./ClearCache или вручную очистить содержимое папок в %AppData%\1C\1Cv8\.EF-пакетов. Если они есть, их можно безопасно удалить непосредственно перед запуском сравнения-объединения.Подводя итог, можно сказать, что механизм патчей — это полезный инструмент для быстрого исправления ошибок «на лету», однако он требует внимательности от администратора при переходе на новые релизы конфигурации. Описанные методы позволяют решить проблему за считанные минуты и успешно продолжить работу с актуальной версией программы.