Как эффективно обновить БСП в собственной конфигурации с версии 2.2 на актуальную?

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

Обновление Библиотеки стандартных подсистем (БСП) — это всегда вызов для разработчика, особенно если разрыв между текущей и целевой версиями составляет несколько лет (например, переход с ветки 2.2 на 3.1). Процесс осложняется тем, что БСП глубоко интегрируется в структуру метаданных и программный код. Рассмотрим подробно два основных подхода к решению этой задачи, проанализируем необходимые инструменты и разберем нюансы сохранения данных. Для быстрого изучения и поиска актуального кода можно использовать справочник по методам БСП с примерами использования.

Метод 1: Последовательное обновление по инструкциям поставщика

Этот способ считается классическим и наиболее безопасным с точки зрения сохранения целостности данных. Разберем его по шагам.

При последовательном обновлении не обязательно накатывать каждый промежуточный релиз. Однако критически важно выполнять все действия, описанные в файле UpdateSSL.xml, для каждого пропущенного релиза. Рассмотрим алгоритм:

  1. Анализ цепочки обновлений: Определим промежуточные точки. Например, если мы переходим с 2.2 на 3.1, нам в любом случае придется пройти через финальные релизы веток 2.3, 2.4 и 3.0.
  2. Подготовка модулей: Перед началом обновления проанализируем все изменения, внесенные нами в типовые модули БСП. Нам нужно выделить их, обрамить комментариями или, что еще лучше, вынести в отдельные модули или расширения. Это минимизирует конфликты при сравнении и объединении.
  3. Использование внешних инструментов сравнения: Стандартный механизм сравнения 1С:Предприятие не всегда удобен при массовых изменениях. Рассмотрим использование KDiff3 или P4Merge. Эти программы поддерживают трехстороннее сравнение (3-way merge).

Проанализируем, как работает трехстороннее сравнение в KDiff3 при обновлении конфигурации:

Система автоматически принимает изменения, если они однозначны: если текст в A и C совпадает, а в B отличается — значит, это ваша доработка, и она сохраняется. Если A и B совпадают, а C изменился — берется код новой БСП. Вмешательство потребуется только в случаях, когда один и тот же участок кода был изменен и вами, и разработчиками 1С.

Метод 2: «Чистое» внедрение новой версии (Re-integration)

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

Разберем этапы этого процесса:

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

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

Миграция данных и обработка «Первого запуска»

Выясним причину, почему данные могут «отвалиться» даже при успешном сравнении модулей. БСП активно использует справочник ИдентификаторыОбъектовМетаданных. При масштабных изменениях UUID объектов могут измениться.

Для корректного завершения обновления обязательно выполним следующие действия:

Рефакторинг кода и переход на расширения

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


&После("ПриЗаписи")
Процедура Моя_ПриЗаписи(Источник, Отказ)
    // Ваш код здесь, он не мешает обновлению основной конфигурации
КонецПроцедуры

Также проанализируем ситуацию с модальностью. Новые версии БСП (начиная с 3.0) полностью ориентированы на асинхронную работу. Если в вашей старой конфигурации используются методы Вопрос() или ОткрытьФормуМодально(), их придется заменить на описание оповещений (ОписаниеОповещения), иначе механизмы БСП будут работать некорректно или вызывать ошибки исполнения. При необходимости можно использовать примеры асинхронного запуска функций и процедур на БСП.

Оптимизация производительности при обновлении

При переходе с версии 2.2 на 3.1 объем данных в регистрах БСП может существенно вырасти. Чтобы ускорить процесс выполнения обработчиков обновления данных:

  1. Переведем базу данных на MS SQL в режим Simple (Простая модель восстановления), чтобы избежать разрастания логов транзакций.
  2. Временно отключим полнотекстовый поиск.
  3. Убедимся, что регламентные задания не заблокированы, так как многие обработчики обновления в БСП теперь выполняются в фоновом режиме.

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

← На главную