Как правильно обновить сильно доработанную («переписанную») конфигурацию 1С:УПП 1.3, если она долго не обновлялась?

Программист 1С v8.3 (Обычные формы) Бухгалтерский учет IT и автоматизация бизнеса
← На главную

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

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

Почему идея обновления по отдельным подсистемам — это путь к катастрофе?

Первое побуждение, которое возникает у разработчика в условиях жесткого дефицита времени — обновить только то, что требуется. Например, перенести изменения только по подсистемам Зарплата, Кадры и РегламентированнаяОтчетность, оставив нетронутыми производство, склад и продажи.

Рассмотрим подробнее, почему этот подход является критической ошибкой:

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

Вывод: Обновлять конфигурацию по подсистемам категорически нельзя. Необходимо обновлять всю конфигурацию целиком.

Шаг 1. Подготовительный этап и оценка масштаба изменений

Прежде чем приступать к каким-либо действиям с рабочей базой, выполним обязательные подготовительные шаги:

  1. Создание резервной копии. Все работы по сравнению, объединению и тестированию выполняем исключительно на локальной копии базы данных. Желательно использовать быструю рабочую станцию с SSD-накопителем и достаточным объемом оперативной памяти, так как процесс сравнения метаданных УПП крайне ресурсоемок.
  2. Анализ степени доработанности системы. Сравним конфигурацию рабочей базы с аналогичным типовым файлом конфигурации (cf) того же релиза. Это позволит нам локализовать измененные объекты, составить список уникальных доработок и оценить трудозатраты.
  3. Определение цепочки релизов. Год без обновлений для УПП — это порядка 15–25 промежуточных релизов. Нам необходимо выстроить правильную цепочку обновления. Нельзя просто взять и накатить самый последний релиз поверх старой базы. Необходимо двигаться по так называемым «узловым» или ключевым релизам, которые указаны в требованиях к обновлению на портале поддержки 1С.

Шаг 2. Технология трехстороннего сравнения (3-Way Merge) при ручном обновлении

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

  1. Подготовим три файла конфигураций:
    • Конфигурация А: Наша текущая измененная рабочая конфигурация (старый релиз).
    • Конфигурация Б: Типовая конфигурация поставщика того же старого релиза (без доработок).
    • Конфигурация В: Типовая конфигурация поставщика нового (целевого) релиза, на который мы переходим.
  2. Откроем нашу измененную рабочую базу в режиме «Конфигуратор».
  3. Выберем пункт меню Конфигурация — Поддержка — Обновить конфигурацию или выполним сравнение и объединение с файлом конфигурации В.
  4. При сравнении система покажет дерево объектов. Наша задача — сопоставить изменения. Для этого крайне полезно предварительно сравнить Конфигурацию Б с Конфигурацией В, чтобы точно понимать, какие изменения внес сам вендор (фирма «1С») в новом релизе.
  5. При объединении объектов, которые были изменены и нами, и поставщиком, используем режим ручного объединения кода. Нажимаем шестеренку рядом с измененным модулем и аккуратно переносим наши кастомные процедуры, встраивая их в новые алгоритмы поставщика.

Рассмотрим пример того, как может выглядеть переопределение обработки заполнения в модуле документа при ручном слиянии кода:


// Исходный код типовой конфигурации нового релиза
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, ТекстовыйДокумент)
    // Типовой алгоритм заполнения реквизитов
    ЗаполнитьТиповыеРеквизиты(ЭтотОбъект, ДанныеЗаполнения);
    
    // Вставка нашего уникального доработанного механизма
    // Проверяем наличие специфических данных заполнения для нашей компании
    Если ТипЗнч(ДанныеЗаполнения) = Тип("СправочникСсылка.СпецификацииНоменклатуры") Тогда
        ЗаполнитьПоУникальнойСпецификации(ЭтотОбъект, ДанныеЗаполнения);
    КонецЕсли;
КонецПроцедуры

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

Шаг 3. Запуск отложенных обработчиков обновления ИБ

После того как метаданные успешно объединены в Конфигураторе и база сохранена (клавиша F7), критически важно правильно выполнить запуск системы в режиме «Предприятие».

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

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

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


// Пример системного вызова инициализации обновления данных
ОбновлениеИнформационнойБазы.ВыполнитьОбновлениеИнформационнойБазы();

Шаг 4. Автоматизация процесса с помощью специализированного ПО

Если ручное последовательное обновление 20 релизов занимает у разработчика колоссальное количество времени, имеет смысл автоматизировать рутинные операции. Для этого отлично подходит специализированный софт, например, «Обновлятор-1С».

Выясним, как правильно использовать автоматизацию в нашем сценарии:

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

Шаг 5. Радикальная архитектурная альтернатива: Вынос блоков ЗУП и БП

Давайте посмотрим на ситуацию стратегически. Обновление сильно кастомизированной, тяжелой системы 1С:УПП 1.3 только ради того, чтобы сдать отчетность и рассчитать зарплату — это невероятно дорогой, долгий и системно неэффективный процесс.

Современный архитектурный подход диктует совершенно иное решение: разделение контуров учета.

Вместо того чтобы тратить недели работы высокооплачиваемых программистов на постоянную актуализацию «переписанной» УПП, целесообразно выполнить следующие шаги:

  1. Вынос зарплатного и кадрового учета. Приобретается и внедряется типовая конфигурация 1С:Зарплата и управление персоналом (ЗУП) ред. 3.1. В нее переносятся кадровые данные и начальные остатки для расчета среднего заработка. Все изменения законодательства по налогам, взносам и кадровому учету теперь будут оперативно приходить с легкими автоматическими обновлениями типовой ЗУП 3.1.
  2. Вынос регламентированной отчетности и бухгалтерии. Для ведения бухгалтерского и налогового учета разворачивается типовая 1С:Бухгалтерия предприятия (БП) ред. 3.0.
  3. Настройка интеграции. Настраивается обмен данными (например, через механизмы синхронизации данных, правила конвертации или шину данных). Измененная 1С:УПП остается работать исключительно как оперативный контур (производство, складской учет, продажи, закупки). Из нее первичные документы выгружаются в 1С:БП, а из 1С:ЗУП в БП и УПП транслируются результаты расчета зарплаты и отражения ее в учете (в виде сводных проводок).

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

Будущее 1С:УПП 1.3: Жизненный цикл и финансовые риски

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

Таким образом, наилучшей тактикой в текущей ситуации будет временное оперативное обновление УПП полностью последовательным методом (с привлечением разработчиков для ручного слияния кода на копии), с параллельным запуском проекта по переходу на 1С:ERP или выносу регламентированных блоков в специализированные типовые решения.

← На главную