Как выгрузить один документ в несколько разных документов в Конвертации данных 2.0?

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

При настройке обменов в Конвертации данных 2.0 часто возникают задачи, выходящие за рамки стандартной логики «один объект источника — один объект приемника». Одной из самых частых является разделение одного документа из базы-источника на несколько документов в базе-приемнике. Рассмотрим, как грамотно реализовать этот механизм и избежать ошибок при обмене.

Разбор проблемы и причины неудач

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

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

Решение через метод ВыгрузитьПоПравилу

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

Разберем реализацию по шагам:

  1. Создайте основное правило выгрузки (ПВД) для исходного документа.
  2. В обработчике ПередВыгрузкой этого правила напишите логику разделения.

Пример программного вызова:


Если Объект.Родитель.Наименование <> "Анси-телеком" Тогда
    Отказ = истина;
Иначе
    // Первый документ
    ВыгрузитьПоПравилу(Объект, , , , "ИмяПКО_ПервогоДокумента");
    // Второй документ
    ВыгрузитьПоПравилу(Объект, , , , "ИмяПКО_ВторогоДокумента");
КонецЕсли;

Использование этого метода дает вам полный контроль: вы можете проверять любые условия (например, наличие специфических подразделений или признаков) и вызывать соответствующие ПКО (правила конвертации объектов) только тогда, когда это действительно необходимо.

Проверка корректности загрузки

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

Дополнительные рекомендации по отладке

Если данные все равно не выгружаются, попробуйте следующие приемы:

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

2. Проверка флагов выгрузки: Если система упорно «запоминает» объект и не дает выгрузить его повторно, проверьте флаг Не запоминать выгруженные объекты в настройках правила. Однако будьте осторожны: это может привести к циклической выгрузке, если в системе есть перекрестные ссылки.

3. Именование правил: При работе с зеркальными базами (например, ЗУП и БУХ с похожей структурой) иногда полезно добавлять префиксы к именам ПКО (например, Correspondent_...), чтобы четко разграничить логику обработки данных для каждой стороны обмена.

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

← На главную