Как правильно обновить сильно доработанную конфигурацию 1С:Розница при переходе через несколько релизов

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

Обновление нетиповой конфигурации 1С, особенно такой динамичной, как «Розница», — это всегда вызов для технического специалиста. Ситуация осложняется, когда необходимо «перепрыгнуть» сразу через 10 и более релизов, переходя с глобальной ветки 2.2 на 2.3. В такой ситуации стандартный механизм «накатывания» обновлений может привести к потере уникальных доработок или, что еще хуже, к повреждению структуры данных. Разберем детально, как выстроить стратегию обновления, чтобы сохранить и данные, и функционал.

Анализ исходной ситуации и подготовка

Представим ситуацию: у нас есть «1С:Розница 2.2», в которую внедрен сложный партионный учет (новые регистры, измененные модули проведения). Нам нужно добраться до актуального релиза 2.3. Первым делом проанализируем файл 1cv8upd.htm, который идет в комплекте с каждым обновлением. Фирма «1С» четко регламентирует цепочку обновлений. Нельзя просто взять и обновиться с первого релиза на десятый, если между ними были релизы с обязательной реструктуризацией данных. Мы должны выстроить цепочку «опорных» релизов, через которые будем проходить.

Рассмотрим основные риски:

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

Стратегия 1: Использование внешних инструментов сравнения (KDiff3)

Один из самых эффективных способов ускорить слияние кода — использование трехстороннего сравнения. Настроим 1С на работу с внешним инструментом, например, KDiff3 или Beyond Compare. Это позволит системе автоматически объединять участки кода, где типовые изменения и ваши доработки не пересекаются в рамках одной строки.

Проанализируем алгоритм действий при таком подходе:

  1. Подключаем внешнюю программу сравнения в настройках конфигуратора.
  2. Выполняем сравнение/объединение с конфигурацией поставщика (.cf или .cfu).
  3. Программа предложит варианты слияния. В 80% случаев автоматический мердж корректно вставит ваши блоки кода в новые процедуры типового решения.

Стратегия 2: Вынос доработок в расширения

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

Рассмотрим последовательность действий:

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

Стратегия 3: Пошаговое обновление на копии (Контрольный прогон)

Выясним причину, почему нельзя обновлять рабочую базу сразу. Зачастую первый запуск после обновления (процедуры ПриПервомЗапуске) может длиться часами из-за обработки миллионов записей. Для минимизации простоя магазина выполним следующие шаги:

  1. Сделаем полную копию рабочей базы на мощном локальном сервере (желательно с SSD).
  2. Последовательно обновим конфигурацию на каждый промежуточный релиз. Важно: после каждого обновления конфигурации БД обязательно запускаем сеанс «Предприятия» и дожидаемся завершения всех фоновых процедур обновления данных.
  3. Мониторим статус обновления через раздел «Администрирование — Обслуживание — Результаты обновления программы». Пока там не появится зеленая галочка «Обновление успешно завершено», переходить к следующему релизу нельзя.
  4. После прохождения всех 10 шагов создаем один итоговый файл .cf (конфигурация) или формируем цепочку .cfu.

Обработка данных и сохранение реквизитов

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

Если в релизе 2.2 данные хранились в Реквизит_Старый, а в 2.3 должны быть в Реквизит_Новый, при сравнении и объединении не разрешайте удаление старого реквизита. После обновления напишем простую обработку для переноса значений:


Выборка = Документы.РеализацияТоваровУслуг.Выбрать();
Пока Выборка.Следующий() Цикл
    Объект = Выборка.ПолучитьОбъект();
    Объект.Реквизит_Новый = Объект.Реквизит_Старый;
    Объект.Записать();
КонецЦикла;

Только после того, как мы убедились, что данные успешно перенесены, можно окончательно удалить старый объект из конфигурации.

Особенности перехода на Розницу 2.3

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

Финальный этап: Перенос изменений на рабочую базу

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

  1. Создаем архивную копию (обязательно!).
  2. Загружаем подготовленную конфигурацию (Загрузить конфигурацию из файла). Это обновит и код, и конфигурацию поставщика.
  3. Запускаем «Предприятие». Поскольку мы уже знаем время выполнения обработок по результатам теста, мы можем точно сориентировать заказчика по времени простоя.
  4. После завершения всех процедур очищаем серверный кэш (удаляем содержимое папок в каталоге srvinfo), чтобы избежать странных ошибок отображения форм.

Важный совет: Если время простоя критично, некоторые процедуры отложенного обновления БСП можно запускать в несколько потоков. Это настраивается в константах или через консоль заданий. Также убедитесь, что версия платформы 1С соответствует требованиям релиза 2.3 — часто он требует более актуальную версию, чем 2.2.

Таким образом, успех обновления через 10 релизов зависит от тщательности предварительного прогона на копии и грамотного использования инструментов сравнения кода. Никогда не пренебрегайте запуском «Предприятия» между этапами, даже если кажется, что изменений в данных нет — логика БСП может быть скрыта глубоко в недрах системы.

← На главную