Перенос документа Корректировка записей регистров является одной из наиболее трудоемких задач при синхронизации данных между конфигурациями 1С:Управление торговым предприятием (УТП) и 1С:Бухгалтерия предприятия (БП). Основная сложность заключается в том, что сам документ не содержит данных в привычных табличных частях — он выступает «контейнером» для записей множества различных регистров. Рассмотрим подробно, как реализовать этот перенос, какие инструменты использовать и как избежать распространенных технических ошибок.
Проанализируем работу через правила обмена. Поскольку документ является владельцем наборов записей, стандартное сопоставление реквизитов здесь практически бесполезно. Нам необходимо работать с коллекцией Движения.
Разберем по шагам настройку в Конвертации данных:
КорректировкаЗаписейРегистров перейдем на вкладку Движения. Здесь необходимо отметить флажками все регистры (накопления, сведений, бухгалтерии), которые планируется переносить.Важный нюанс для казахстанского учета: В БП 3.0 план счетов может иметь иную аналитику. Если мы переносим записи регистра бухгалтерии Хозрасчетный, нужно убедиться, что субконто сопоставляются корректно. Часто приходится в обработчике ПередЗагрузкой или ПриЗагрузке ПКС регистра принудительно указывать индекс субконто, чтобы данные не «улетели» в пустые поля.
Выясним причину, по которой часто не удается подключиться напрямую из одной базы в другую. Если при попытке создать объект V83.COMConnector возникает ошибка, связанная с comcntr.dll, это обычно указывает на проблемы с регистрацией библиотеки или конфликт разрядности (32/64 бит).
Рассмотрим порядок исправления этой ошибки:
regsvr32 "C:\Program Files\1cv8\8.3.XX.XXXX\bin\comcntr.dll"
После настройки соединения мы можем программно обращаться к базе-источнику. Посмотрим на пример кода, который инициализирует подключение:
ПутьКБазе = "Srvr=""ServerName"";Ref=""BaseName"";";
Соединитель = Новый COMОбъект("V83.COMConnector");
Попытка
БазаИсточник = Соединитель.Connect(ПутьКБазе + "Usr=""Admin"";Pwd=""Password"";");
Исключение
Сообщить("Ошибка подключения: " + ОписаниеОшибки());
Возврат;
КонецПопытки;
При использовании COM-соединения нам придется вручную перебирать все движения документа в УТП и создавать аналогичные наборы записей в БП. Это требует написания объемного кода, но работает быстрее, чем выгрузка в промежуточные файлы.
Если структура регистров в УТП 2.0 и БП 3.0 идентична (одинаковые типы данных и состав полей), мы можем воспользоваться стандартным инструментом разработчика — обработкой ВыгрузкаЗагрузкаДанныхXML.epf.
Проанализируем этот путь:
Корректировка записей регистров.Риск этого метода: Если в целевой базе отсутствует какое-либо измерение регистра или тип данных отличается, загрузка прервется с ошибкой. Кроме того, этот метод не решает проблему синхронизации справочников. Если в БП нет контрагента или номенклатуры, которые указаны в движениях, вы получите битые ссылки («Объект не найден»).
Рассмотрим альтернативный вариант, если COM-соединение настроить не удается, а правила обмена кажутся слишком сложными. Можно реализовать выгрузку через промежуточный файл (JSON или Excel).
РегистрНакопленияНаборЗаписей.Посмотрим на пример программного заполнения движений в базе-приемнике:
НовыйДокумент = Документы.КорректировкаЗаписейРегистров.СоздатьДокумент();
НовыйДокумент.Дата = ДатаИзФайла;
НовыйДокумент.Записать();
Набор = РегистрыНакопления.ТоварыНаСкладах.СоздатьНаборЗаписей();
Набор.Отбор.Регистратор.Установить(НовыйДокумент.Ссылка);
Для Каждого СтрокаДанных Из ТаблицаИзФайла Цикл
НоваяЗапись = Набор.Добавить();
ЗаполнитьЗначенияСвойств(НоваяЗапись, СтрокаДанных);
НоваяЗапись.Регистратор = НовыйДокумент.Ссылка;
НоваяЗапись.Период = НовыйДокумент.Дата;
КонецЦикла;
Набор.Записать();
Этот подход позволяет гибко управлять сопоставлением данных, например, искать справочники по артикулу или БИН/ИИН, если их уникальные идентификаторы в базах различаются.
Для разового переноса небольшого объема данных лучше всего подходит Выгрузка и загрузка данных XML (при условии схожести конфигураций). Если же требуется регулярный обмен, наиболее надежным способом будет создание правил в Конвертации данных 2.0 с детальной настройкой коллекции Движения. Помните, что перед переносом корректировок необходимо синхронизировать все справочники, иначе данные в регистрах будут некорректными.