Нужно ли удалять исправления ошибок версии после обновления 1С и как это сделать правильно?

Системный администратор 1С v8.3 (Управляемые формы) 1C:Бухгалтерия
← На главную

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

Как работает механизм автоматического удаления исправлений

Для начала разберем внутреннюю логику системы. Механизм управления исправлениями является частью Библиотеки стандартных подсистем (БСП). Когда разработчики 1С выпускают патч, в его метаданных жестко прописывается диапазон версий конфигурации, для которых он предназначен. Например, исправление может быть применимо только для версий с 3.0.138.25 по 3.0.139.99.

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

Проанализируем алгоритм, который выполняет БСП:

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

Почему исправления могут не удалиться автоматически?

Несмотря на стройную логику, на практике часто возникают ситуации, когда после обновления мы заходим в список расширений и видим старые патчи (например, небезызвестный EF_60008207). Выясним основные причины, почему это происходит:

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

2. Открытый Конфигуратор. Если во время запуска режима «Предприятие» для выполнения обновления у вас параллельно открыт Конфигуратор, это может препятствовать изменению состава расширений. Платформа блокирует структуру конфигурации, и скрипты БСП не могут корректно завершить удаление расширений .cfe.

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

4. Конфликты метаданных. Если в новой версии конфигурации разработчики уже внесли исправления, которые дублируют код патча, но назвали объекты иначе, может возникнуть коллизия. Система при попытке удаления патча может натолкнуться на логическую ошибку «Объект метаданных не найден» или «На объект есть ссылки», что прерывает операцию удаления.

Инструкция по ручному удалению неактуальных исправлений

Если после обновления вы обнаружили, что старые исправления остались в списке, рекомендуем выполнить следующие шаги. Рассмотрим два основных способа очистки.

Способ 1: Через пользовательский интерфейс (Рекомендуемый)

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

  1. Запустите программу в режиме «1С:Предприятие» от имени пользователя с полными правами.
  2. Перейдите в раздел Администрирование, далее выберите пункт Обслуживание.
  3. Найдите подраздел Обновление программы и кликните по гиперссылке Установленные исправления (патчи).
  4. В открывшемся списке выделите все строки (или те, которые явно относятся к прошлым версиям) и нажмите кнопку Удалить. Чтобы в дальнейшем не сталкиваться с лишними системными сообщениями, можно применить отключение всех уведомлений по расширениям.
  5. Программа может предупредить о необходимости перезапуска. Согласитесь и дождитесь завершения сеанса.

Важный совет: После удаления всех патчей вы можете нажать кнопку «Поиск исправлений», если у вас настроена интернет-поддержка. Система сама скачает только те патчи, которые действительно нужны для вашего текущего релиза.

Способ 2: Через список расширений в Конфигураторе

Этот способ подходит для опытных пользователей и системных администраторов, когда через интерфейс «Предприятия» патч не удаляется из-за внутренних ошибок. Также можно использовать универсальное удаление расширений в виде внешней обработки.

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

Пример анализа применимости патча

Рассмотрим ситуацию, описанную в обсуждении, на примере патча EF_60008207. При попытке его повторной установки на версию 3.0.140.20 система выдает ошибку:

При установке исправления EF_60008207.cfe произошла ошибка: Исправление не применимо для данной версии конфигурации.

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

Регламент «Чистого обновления»

Чтобы избежать проблем с «хвостами» от старых версий, мы рекомендуем придерживаться следующего регламента при каждом обновлении типовых конфигураций (БП, ЗУП, УТ):

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

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

← На главную