При выполнении миграции данных между конфигурациями, например, при переходе с Управление торговлей 10.3 на Управление торговлей 11.4, часто возникает необходимость ограничить перенос старых документов или их реквизитов. Рассмотрим ситуацию, когда при переносе Приходных кассовых ордеров (ПКО) в целевую базу пытаются загрузиться документы-основания за прошлые периоды, которые не должны присутствовать в новой базе.
Зачастую разработчики пытаются ограничить перенос данных на уровне ПКС (правил конвертации свойств). Например, прописывая условие в событии Перед выгрузкой:
Если ЗначениеЗаполнено(Источник.ДокументОснование) Тогда
Если Источник.ДокументОснование.Дата < Дата(2020, 01, 01) Тогда
Значение = "";
КонецЕсли;
КонецЕсли;
Однако, как показывает практика, простой очистки значения Значение = "" бывает недостаточно, если в целевой базе УТ 11.4 данный реквизит является обязательным для заполнения или если логика ПКО (правила конвертации объекта) жестко завязана на поиск по объекту-основанию. Также попытка использовать Отказ = Истина в событии ПКС может вызвать критическую ошибку, так как система прерывает процесс выгрузки свойства, но не отменяет ожидание объекта на стороне загрузки.
Разберем, на что следует обратить внимание, если стандартные методы фильтрации не приносят результата:
УТ 11.4. Если это так, попытка передать «пустое» значение приведет к сбою при записи документа. Возможно, потребуется пересмотреть структуру данных или правила поиска.Видами номенклатуры, Организациями или Статьями движения денежных средств, они могут блокировать процесс создания документа целиком.ПКО. Даже если логика фильтрации даты верна, некорректное ПКО для справочника может спровоцировать сбой всей цепочки загрузки.Если вы столкнулись с «необъяснимыми» ошибками при переносе документов, воспользуйтесь следующими рекомендациями:
Шаг 1: Изоляция проблемы. Попробуйте временно исключить правило для реквизита ДокументОснование. Если ошибка исчезнет, значит, проблема действительно была в заполнении или поиске этого объекта.
Шаг 2: Проверка логов обмена. Включите режим отладки в Конвертации данных 2.0. Просмотрите протокол обмена: на каком именно ПКО происходит прерывание процесса. Часто сообщение об ошибке указывает на Вид номенклатуры или Организацию, что является сигналом проверить именно эти справочники.
Шаг 3: Пересмотр логики исключения. Вместо удаления значения в ПКС, рассмотрите возможность использования параметров обмена. Вы можете передать дату отсечения через параметры и использовать ее в Перед выгрузкой для всего ПКО документа. В таком случае, если документ не проходит по дате, он не будет выгружен вовсе:
// В событии Перед выгрузкой ПКО документа
Если Источник.Дата < Параметры.ДатаОтсечения Тогда
Отказ = Истина;
КонецЕсли;
Этот подход более надежен, так как предотвращает попытку загрузки «проблемного» документа в целевую систему, исключая возникновение конфликтов ссылочной целостности или обязательности заполнения реквизитов.
Основной урок, который мы вынесли из данной ситуации: при возникновении «странных» ошибок при переносе между УТ 10.3 и УТ 11.4, не ограничивайтесь анализом одного конкретного свойства. Всегда проверяйте корректность ПКО для второстепенных справочников, которые могут быть задействованы в механизме заполнения документа. Часто решение лежит в исправлении ошибки в правилах для, казалось бы, не связанных объектов.