Перенос остатков — одна из самых ответственных задач при миграции между конфигурациями 1С. Часто стандартных правил обмена недостаточно, особенно когда структура источника (например, БП 3.0) и приемника (например, БГУ 2.0) существенно различается. В таких случаях мы прибегаем к переносу остатков в «1С:Конвертация данных 2.1» с использованием ПВД и произвольных алгоритмов, опираясь на опыт, заложенный в типовых решениях. Рассмотрим подробнее, как избежать типичных ошибок при программном формировании объектов и их табличных частей.
Проанализируем ситуацию: программист формирует Таблицу Значений с данными, помещает её в Структуру и пытается выгрузить через ПКО документа. Система выдает ошибку, сообщая, что поле (например, «Материалы») не обнаружено. Выясним причину этого поведения. В КД 2.1 при выгрузке без объекта-источника (когда первый параметр метода ВыгрузитьПоПравилу — структура), механизм конвертации ожидает, что имена ключей структуры будут в точности совпадать с именами свойств Источника, указанными в Правилах конвертации свойств (ПКС). Чтобы быстро выявить несоответствия, рекомендуется использовать портативный обозреватель правил конвертации свойств, который позволяет проанализировать решение ошибки «Поле объекта не обнаружено», возникающей при несоответствии имен ключей структуры и имен ПКС.
Рассмотрим, как правильно подготовить данные для выгрузки. Вместо того чтобы полагаться на стандартную выборку, мы используем Запрос, чтобы получить остатки из регистров бухгалтерии. Полученный результат нужно упаковать так, чтобы КД поняла, где реквизиты шапки, а где строки табличной части. Это классический пример использования ПВД и произвольных алгоритмов для сложной миграции данных, подобно тому как реализован перенос данных из 1С:УПП 1.3 в 1С:БП 3.0 — для этого есть перенос остатков и документов из УПП 1.3 в БП 3.0.
Разберем по шагам пример кода в обработчике «Перед обработкой» правила выгрузки данных:
// 1. Получаем данные запросом
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ХозрасчетныйОстатки.Субконто1 КАК Номенклатура,
| ХозрасчетныйОстатки.Субконто2 КАК ЦМО,
| ХозрасчетныйОстатки.СуммаОстаток КАК Сумма,
| ХозрасчетныйОстатки.КоличествоОстаток КАК Количество
|ИЗ
| РегистрБухгалтерии.Хозрасчетный.Остатки(&ДатаПереноса, Счет = &Счет, , ) КАК ХозрасчетныйОстатки";
Запрос.УстановитьПараметр("ДатаПереноса", КонецДня(Параметры.ДатаНачала));
Запрос.УстановитьПараметр("Счет", ПланыСчетов.Хозрасчетный.ЗапасныеЧасти);
ТЗ_Материалы = Запрос.Выполнить().Выгрузить();
// 2. Формируем структуру документа (шапка + табличная часть)
ДанныеОбъекта = Новый Структура;
ДанныеОбъекта.Вставить("Номер", "ОСТ-0001");
ДанныеОбъекта.Вставить("Дата", Параметры.ДатаНачала);
ДанныеОбъекта.Вставить("Организация", Параметры.Организация);
ДанныеОбъекта.Вставить("Материалы", ТЗ_Материалы); // Ключ должен совпадать с Источником в ПКС
ДанныеОбъекта.Вставить("РазделУчета", "Материалы");
// 3. Вызываем выгрузку по правилу
// Важно: ДанныеОбъекта передаем первым параметром как ИСТОЧНИК
ВыгрузитьПоПравилу(ДанныеОбъекта, , , , "ВводНачальныхОстатковМатериалы");
// 4. Отменяем стандартную обработку ПВД
Отказ = Истина;
Посмотрим на настройки ПКО. Поскольку мы передаем структуру, а не реальный объект базы данных, в ПКО должны быть выполнены определенные условия, включая правильную настройку поиска и кэширования объектов без ссылки, так как у структуры нет ссылки. Аналогичные подходы применяются, когда разрабатываются правила конвертации для обмена с 1С:БП ред.3.0 для систем, снятых с поддержки (поможет переход из БП 2.0 в БП 3.0 с переносом остатков):
УникальныйИдентификатор(), и попытка его вызвать приведет к краху выгрузки. Настройте поиск по полям: Номер, Дата, Организация.Проанализируем ситуацию с табличной частью. В ПКО документа создается ПКГС (Правило конвертации групп свойств) для ТЧ «Материалы». Здесь есть два пути:
Путь А: Прямое сопоставление. В поле «Источник» у ПКГС пишем «Материалы». В этом случае система возьмет значение ДанныеОбъекта.Материалы (нашу ТЗ) и начнет обходить её строки.
Путь Б: Через переменную Коллекция. Если сопоставление имен не срабатывает, применяйте программное управление выгрузкой через переменную «Коллекция» в обработчике «Перед выгрузкой» у ПКГС:
// В обработчике ПКГС "Материалы" -> Перед выгрузкой
Коллекция = Источник.Материалы;
// Теперь система точно знает, какую таблицу обходить
Важный момент: для всех реквизитов внутри ТЧ в ПКС должны быть правильно указаны Источники (имена колонок вашей ТЗ) и ПКО для ссылочных типов.
Рассмотрим особенности переноса данных и остатков в БГУ 2.0 — есть готовый перенос остатков и оборотов в 1С:БГУ 2.0. Эта конфигурация крайне требовательна к аналитике. При переносе остатков материалов часто недостаточно просто перенести Номенклатуру. Нужно убедиться, что передаются КПС, КФО и КЭК. О том, какие преимущества можно получить, дополняя стандартные алгоритмы «Конвертации данных 2.1» для работы со сложными структурами, полезно знать при интеграции с государственными системами.
Если эти данные отсутствуют в источнике (БП 3.0), их нужно либо вычислить в запросе, либо подставить фиксированным значением в ПКС через обработчик «Перед выгрузкой», используя переменную Значение.
Пример заполнения фиксированного КФО в ПКС:
// ПКС КФО -> Перед выгрузкой
Значение = "4"; // Или поиск ссылки на конкретное значение в базе-приемнике
Иногда удобнее передавать данные не через первый параметр (Источник), а через третий параметр метода ВыгрузитьПоПравилу. Изучите подробнее использование «Входящих данных» и метода ВыгрузитьПоПравилу() для передачи произвольных структур. Если вы передаете структуру в ВходящиеДанные, то во всех ПКС необходимо проставить галочку «Получать из входящих данных».
Сравним вызовы:
// Вариант 1: Через Источник (рекомендуется для простых случаев)
ВыгрузитьПоПравилу(СтруктураДанных, , , , "ИмяПКО");
// Вариант 2: Через ВходящиеДанные
ВыгрузитьПоПравилу( , , СтруктураДанных, , "ИмяПКО");
Выясним, какие еще моменты могут сорвать перенос:
NULL, приемник может создать «битую» запись. Используйте ЕСТЬNULL в запросах.Проанализировав все шаги, мы видим, что ключ к успеху — в строгом контроле над параметрами ВыгрузитьПоПравилу и правильной настройке поиска в ПКО. Сочетание программного формирования данных и гибких настроек позволяет успешно осуществить даже сложный переход с 1С: 7.7 на 1С: 8.3 Бухгалтерию предприятия 3.0 (удобно через перенос остатков и документов с 1С 7.7 на БП 3.0), обеспечивая корректную миграцию остатков между существенно различающимися конфигурациями.