Как перенести документ Корректировка записей регистров из УТП 2.0 в БП 3.0

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

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

Метод 1: Использование конфигурации Конвертация данных 2.0

Проанализируем работу через правила обмена. Поскольку документ является владельцем наборов записей, стандартное сопоставление реквизитов здесь практически бесполезно. Нам необходимо работать с коллекцией Движения.

Разберем по шагам настройку в Конвертации данных:

  1. В правилах конвертации объектов (ПКО) для документа КорректировкаЗаписейРегистров перейдем на вкладку Движения. Здесь необходимо отметить флажками все регистры (накопления, сведений, бухгалтерии), которые планируется переносить.
  2. Для каждого выбранного регистра будут созданы правила конвертации свойств (ПКС). Проанализируем структуру регистров в базе-источнике (УТП) и базе-приемнике (БП). Если имена измерений и ресурсов совпадают, 1С сопоставит их автоматически. Если же есть различия (что часто встречается в казахстанских локализациях), нам придется вручную прописывать соответствия полей.
  3. Обратим внимание на алгоритм загрузки: при записи документа в БП 3.0 существующие записи в регистрах по этому регистратору будут удалены и заменены новыми. Это стандартное поведение, гарантирующее актуальность данных.

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

Метод 2: Настройка прямого обмена через COM-соединение

Выясним причину, по которой часто не удается подключиться напрямую из одной базы в другую. Если при попытке создать объект V83.COMConnector возникает ошибка, связанная с comcntr.dll, это обычно указывает на проблемы с регистрацией библиотеки или конфликт разрядности (32/64 бит).

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

  1. Запустим командную строку от имени администратора.
  2. Выполним регистрацию библиотеки вручную, указав путь к установленной платформе: regsvr32 "C:\Program Files\1cv8\8.3.XX.XXXX\bin\comcntr.dll"
  3. Если сервер 1С работает в 64-битном режиме, а компонента 32-битная, воспользуемся консолью Службы компонентов Windows. Создадим новое приложение COM+, в котором укажем нашу библиотеку как локального пользователя. Это позволит 64-битному процессу сервера взаимодействовать с 32-битной компонентой.

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


ПутьКБазе = "Srvr=""ServerName"";Ref=""BaseName"";";
Соединитель = Новый COMОбъект("V83.COMConnector");
Попытка
    БазаИсточник = Соединитель.Connect(ПутьКБазе + "Usr=""Admin"";Pwd=""Password"";");
Исключение
    Сообщить("Ошибка подключения: " + ОписаниеОшибки());
    Возврат;
КонецПопытки;

При использовании COM-соединения нам придется вручную перебирать все движения документа в УТП и создавать аналогичные наборы записей в БП. Это требует написания объемного кода, но работает быстрее, чем выгрузка в промежуточные файлы.

Метод 3: Универсальная обработка Выгрузка и загрузка данных XML

Если структура регистров в УТП 2.0 и БП 3.0 идентична (одинаковые типы данных и состав полей), мы можем воспользоваться стандартным инструментом разработчика — обработкой ВыгрузкаЗагрузкаДанныхXML.epf.

Проанализируем этот путь:

Риск этого метода: Если в целевой базе отсутствует какое-либо измерение регистра или тип данных отличается, загрузка прервется с ошибкой. Кроме того, этот метод не решает проблему синхронизации справочников. Если в БП нет контрагента или номенклатуры, которые указаны в движениях, вы получите битые ссылки («Объект не найден»).

Метод 4: Перенос через таблицу значений (универсальный обмен)

Рассмотрим альтернативный вариант, если COM-соединение настроить не удается, а правила обмена кажутся слишком сложными. Можно реализовать выгрузку через промежуточный файл (JSON или Excel).

  1. В базе УТП напишем внешнюю обработку, которая выгружает таблицу записей регистра в JSON.
  2. В базе БП создадим обработку, которая читает этот файл и заполняет объект РегистрНакопленияНаборЗаписей.

Посмотрим на пример программного заполнения движений в базе-приемнике:


НовыйДокумент = Документы.КорректировкаЗаписейРегистров.СоздатьДокумент();
НовыйДокумент.Дата = ДатаИзФайла;
НовыйДокумент.Записать();

Набор = РегистрыНакопления.ТоварыНаСкладах.СоздатьНаборЗаписей();
Набор.Отбор.Регистратор.Установить(НовыйДокумент.Ссылка);

Для Каждого СтрокаДанных Из ТаблицаИзФайла Цикл
    НоваяЗапись = Набор.Добавить();
    ЗаполнитьЗначенияСвойств(НоваяЗапись, СтрокаДанных);
    НоваяЗапись.Регистратор = НовыйДокумент.Ссылка;
    НоваяЗапись.Период = НовыйДокумент.Дата;
КонецЦикла;

Набор.Записать();

Этот подход позволяет гибко управлять сопоставлением данных, например, искать справочники по артикулу или БИН/ИИН, если их уникальные идентификаторы в базах различаются.

Подведем итоги

Для разового переноса небольшого объема данных лучше всего подходит Выгрузка и загрузка данных XML (при условии схожести конфигураций). Если же требуется регулярный обмен, наиболее надежным способом будет создание правил в Конвертации данных 2.0 с детальной настройкой коллекции Движения. Помните, что перед переносом корректировок необходимо синхронизировать все справочники, иначе данные в регистрах будут некорректными.

← На главную