Как откатиться с УТ 11.3 на УТ 11.2 без потери данных?

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

Ситуация, когда долгожданное обновление на новую редакцию (например, переход с УТ 11.2 на УТ 11.3) оборачивается лавиной критических ошибок в первый же рабочий день, увы, не редкость. Работать в системе становится невозможно, а просто откатиться к утренней резервной копии нельзя — менеджеры уже успели ввести сотни документов, выставить счета и провести новые реализации. В этой статье мы подробно разберем, как выйти из этой непростой ситуации, почему не сработает простой даунгрейд конфигурации и какими способами можно вернуть базу на стабильный релиз 11.2 с минимальными потерями данных.

Почему нельзя просто загрузить старый файл конфигурации (.cf) УТ 11.2?

У многих начинающих специалистов возникает соблазн просто взять файл конфигурации 1centerprise.cf предыдущего релиза УТ 11.2, зайти в Конфигуратор обновленной базы УТ 11.3 и выполнить команду «Загрузить конфигурацию из файла». Делать это категорически запрещено!

Проанализируем технические причины, почему такая попытка приведет к краху системы:

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

Единственно верная стратегия: восстановление копии и перенос данных за период

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

  1. Развернем резервную копию базы данных, сделанную перед обновлением на УТ 11.3 (это будет наша чистая и стабильная база 11.2).
  2. Оставим текущую рабочую базу на УТ 11.3 во временном монопольном доступе для разработчиков (из нее мы будем забирать документы, созданные пользователями за рабочий день).
  3. Выберем один из инструментов переноса данных и перенесем документы за текущий день из «испорченной» УТ 11.3 в восстановленную УТ 11.2.
  4. Подменим рабочую базу восстановленной и очищенной версией 11.2 и запустим пользователей.

Рассмотрим подробнее доступные технические инструменты для реализации этой схемы.

Способ 1. Использование универсального формата EnterpriseData

Если обе версии конфигураций поддерживают синхронизацию через универсальный формат обмена EnterpriseData (это штатный механизм для современных версий УТ), мы можем использовать его для переноса.

Преимущество этого метода в том, что формат EnterpriseData описывает бизнес-сущности в виде XML-схем, независимых от конкретных изменений в таблицах СУБД. Это позволяет нивелировать разницу в метаданных между 11.3 и 11.2.

Разберем процесс по шагам:

  1. В базе УТ 11.3 настроим синхронизацию данных через универсальный формат в каталог или файл.
  2. В качестве периода выгрузки укажем текущий день, когда велась работа в ошибочной конфигурации.
  3. Зарегистрируем к обмену все измененные документы (например, «Заказ клиента», «Реализация товаров и услуг», «Поступление безналичных денежных средств»).
  4. Выполним выгрузку в XML-файл.
  5. В восстановленной базе УТ 11.2 настроим аналогичное подключение для синхронизации и выполним загрузку данных из полученного файла.

Способ 2. Программный перенос документов через COM-соединение

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

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


Процедура ПеренестиДокументыЗаДень()
    // Настраиваем COM-соединение с базой УТ 11.3
    Connector = Новый COMОбъект("V83.COMConnector");
    ПараметрыПодключения = "Srvr=""Server1C"";Ref=""ut11_3_damaged"";Usr=""Администратор"";Pwd=""Password""";
    
    Попытка
        База113 = Connector.Connect(ПараметрыПодключения);
    Исключение
        Сообщить("Не удалось подключиться к базе УТ 11.3: " + ОписаниеОшибки());
        Возврат;
    КонецПопытки;
    
    // Выбираем документы определенного типа за рабочую дату
    Запрос113 = База113.NewObject("Запрос");
    Запрос113.Text = 
        "ВЫБРАТЬ
        |	Ссылка КАК Ссылка
        |ИЗ
        |	Документ.РеализацияТоваровУслуг КАК Реализация
        |ГДЕ
        |	Реализация.Дата МЕЖДУ &НачалоДня И &КонецДня";
        
    Запрос113.SetParameter("НачалоДня", НачалоДня(ТекущаяДата()));
    Запрос113.SetParameter("КонецДня", КонецДня(ТекущаяДата()));
    
    Результат = Запрос113.Execute();
    Выборка = Результат.Choose();
    
    Пока Выборка.Next() Цикл
        // Создаем новый документ в нашей базе УТ 11.2
        НовыйДокумент = Документы.РеализацияТоваровУслуг.СоздатьДокумент();
        НовыйДокумент.Дата = Выборка.Ссылка.Date;
        НовыйДокумент.Номер = Выборка.Ссылка.Number;
        
        // Нам нужно найти контрагента в базе 11.2 по ИНН/КПП из базы 11.3
        ИННКонтрагента = Выборка.Ссылка.Контрагент.ИНН;
        КППКонтрагента = Выборка.Ссылка.Контрагент.КПП;
        НайденныйКонтрагент = Справочники.Контрагенты.НайтиПоРеквизиту("ИНН", ИННКонтрагента);
        
        Если Не НайденныйКонтрагент.Пустая() Тогда
            НовыйДокумент.Контрагент = НайденныйКонтрагент;
        КонецЕсли;
        
        // Заполняем табличную часть товары
        Для Каждого СтрокаТовара Из Выборка.Ссылка.Товары Цикл
            НоваяСтрока = НовыйДокумент.Товары.Добавить();
            // Код номенклатуры используем для поиска соответствия
            КодНоменклатуры = СтрокаТовара.Номенклатура.Код;
            НайденнаяНоменклатура = Справочники.Номенклатура.НайтиПоКоду(КодНоменклатуры);
            
            Если Не НайденнаяНоменклатура.Пустая() Тогда
                НоваяСтрока.Номенклатура = НайденнаяНоменклатура;
            КонецЕсли;
            
            НоваяСтрока.Количество = СтрокаТовара.Количество;
            НоваяСтрока.Цена = СтрокаТовара.Цена;
            НоваяСтрока.Сумма = СтрокаТовара.Сумма;
        КонецЦикла;
        
        Попытка
            НовыйДокумент.Записать(РежимЗаписиДокумента.Проведение);
        Исключение
            Сообщить("Ошибка при проведении документа: " + НовыйДокумент.Номер + " - " + ОписаниеОшибки());
            НовыйДокумент.Записать(РежимЗаписиДокумента.Запись);
        КонецПопытки;
    КонецПроцедуры

Этот пример наглядно демонстрирует, как можно точечно перенести ключевые документы через COM. Достоинством метода является полный контроль над процессом поиска дублей и сопоставления реквизитов.

Способ 3. Использование конфигурации «Конвертация данных 2.1»

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

Посмотрим на алгоритм работы:

  1. Выгружаем структуру метаданных конфигурации УТ 11.3 (источник) и УТ 11.2 (приемник) с помощью обработки MD83Exp.epf.
  2. Загружаем обе структуры в «Конвертацию данных».
  3. Создаем новые правила обмена, где источником выступает УТ 11.3, а приемником — УТ 11.2.
  4. Настраиваем правила конвертации объектов (ПКО) для документов, созданных за день, и сопутствующих справочников (Контрагенты, Номенклатура, Договоры).
  5. Сохраняем правила в XML-файл.
  6. В базе УТ 11.3 открываем обработку УниверсальныйОбменДаннымиXML.epf, выбираем созданные правила, задаем отбор по дате документов и выгружаем данные.
  7. В базе УТ 11.2 открываем эту же обработку на вкладке «Загрузка» и считываем полученный файл данных.

Способ 4. Выгрузка и загрузка через табличный документ (Excel)

Если у вас нет под рукой «Конвертации данных» и нет навыков COM-программирования, можно воспользоваться полуавтоматическим методом.

В платформе 1С есть отличный встроенный инструмент — обработка «Загрузка данных из табличного документа». С ее помощью можно перенести документы по следующей схеме:

  1. В базе УТ 11.3 открываем список нужных документов (например, реализации) за день. Выделяем все строки и нажимаем «Вывести список».
  2. Сохраняем полученную таблицу в формате Excel. Аналогично выводим табличные части товаров по этим документам.
  3. В восстановленной базе УТ 11.2 открываем обработку «Загрузка данных из табличного документа».
  4. Настраиваем соответствие колонок файла Excel реквизитам документов в 11.2 и производим загрузку. Сначала загружаем шапки документов, затем по номерам документов привязываем и загружаем строки табличных частей.

Альтернативный вариант: Устранение ошибок на релизе 11.3 без отката

Прежде чем приступать к трудоемкой процедуре отката, взвесьте все риски. Иногда исправление нескольких критических ошибок непосредственно в рабочей базе УТ 11.3 силами программиста занимает меньше времени, чем перенос документов крупного торгового предприятия за целый день. Ведь при переносе могут поехать складские остатки, партионный учет или себестоимость.

Для оперативного исправления багов вендора используйте механизм Расширений конфигурации:

← На главную