Как программно отменить выгрузку объекта в Конвертации данных 2.1?

Программист 1С v8.3 (Обычные формы) IT и автоматизация бизнеса
← На главную

При работе с правилами обмена в Конвертации данных 2.1 часто возникает задача отфильтровать выгружаемые данные «на лету». Например, требуется не выгружать определенные документы или справочники, если они соответствуют заданному условию. Давайте разберем, как реализовать этот механизм и что делать, если код не срабатывает.

Использование параметра Отказ в обработчике Перед выгрузкой

Основной инструмент для управления выгрузкой объекта — это обработчик Перед выгрузкой, который доступен в настройках Правил выгрузки данных (ПВД). В контексте этого события существует специальный параметр Отказ, который имеет тип Булево.

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


Если Источник.ВидКонтактнойИнформации = Справочники.ВидыКонтактнойИнформации.НайтиПоКоду("000000001") Тогда
    Отказ = Истина;
КонецЕсли;

Когда Отказ = Истина, процесс обработки текущего объекта прерывается, и он не попадает в итоговый файл обмена.

Почему код может не срабатывать: диагностика и устранение проблем

Если вы написали условие, но объекты все равно попадают в выгрузку, это означает, что логика не выполняется или выполняется не в том контексте. Рассмотрим шаги для поиска причины:

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

Альтернативные подходы к фильтрации

Помимо программного вмешательства в обработчиках, существуют более производительные методы управления составом выгружаемых данных:

1. Использование запроса в ПВД:

Самый эффективный способ исключить объекты — наложить фильтр непосредственно в текст запроса, который выбирает данные для обмена. Это экономит ресурсы системы, так как «лишние» объекты даже не будут попадать в обработчики событий.

2. Проверка доступности данных:

Если условие опирается на Справочники.ВидыКонтактнойИнформации.НайтиПоКоду(), помните, что поиск может вернуть пустую ссылку. В такой ситуации условие Если Источник.Вид = ... будет ложным, и отмена не произойдет. Всегда проверяйте результат поиска на пустоту:


ВидКИ = Справочники.ВидыКонтактнойИнформации.НайтиПоКоду("000000001");
Если ЗначениеЗаполнено(ВидКИ) И Источник.Вид = ВидКИ Тогда
    Отказ = Истина;
КонецЕсли;

Подводя итог, можно сказать, что механизм Отказ = Истина является надежным инструментом, но требует внимательного отношения к контексту исполнения кода. Всегда начинайте отладку с проверки того, вызывается ли код вообще, и какой тип данных содержит переменная Источник на момент проверки.

← На главную