Как запретить выгрузку документов по определенной организации из УПП в УТ через Конвертацию данных 2.1

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

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

Метод 1. Использование обработчика «Перед выгрузкой» в ПКО

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

Пошаговая инструкция:

  1. Откроем правила обмена в конфигурации «Конвертация данных».
  2. Найдем ПКО для документа ПлатежноеПоручениеВходящее.
  3. Перейдем на закладку «Обработчики событий» и выберем событие ПередВыгрузкой.
  4. Вставим следующий код:

Если Объект.Организация.Код = "ТХЗ000001" Тогда
    Отказ = Истина;
КонецЕсли;

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

Метод 2. Решение проблемы «Объект не найден» (битые ссылки)

Часто программисты сталкиваются с тем, что после установки фильтра (как в Методе 1) в целевой базе (УТ) появляются документы с надписью «Объект не найден» в полях ссылок. Выясним причину: это происходит потому, что документ был исключен из основной выгрузки, но на него сослался какой-то другой объект (например, реестр платежей или связанный документ). Система КД видит ссылку и пытается выгрузить «скелет» объекта, чтобы не нарушить целостность данных.

Чтобы этого избежать, выполним следующие настройки в ПКО:

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

Метод 3. Фильтрация на уровне планов обмена (регистрация)

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

Для этого в конфигурации УПП (источнике) необходимо настроить Правила Регистрации Данных (ПРД):

В обработчике ПередОбработкой правила регистрации для нужного документа пропишем:


Если Объект.Организация.Код = "ТХЗ000001" Тогда
    Отказ = Истина;
КонецЕсли;

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

Метод 4. Оптимизация через запрос в ПВД

Если документов очень много, проверка каждого объекта в ПКО может замедлить процесс. В таком случае рассмотрим вариант фильтрации на этапе выборки данных. Это делается в Правилах выгрузки данных (ПВД) с использованием произвольного алгоритма.

В обработчике ПередОбработкой для ПВД можно написать запрос:


Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |   ПлатежноеПоручениеВходящее.Ссылка
    |ИЗ
    |   Документ.ПлатежноеПоручениеВходящее КАК ПлатежноеПоручениеВходящее
    |ГДЕ
    |   ПлатежноеПоручениеВходящее.Организация.Код <> &ЗапрещенныйКод";

Запрос.УстановитьПараметр("ЗапрещенныйКод", "ТХЗ000001");
ВыборкаДанных = Запрос.Выполнить().Выбрать();

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

Важные рекомендации по безопасности и тестированию

Работая напрямую с «боевой» базой, как в обсуждаемом случае, необходимо соблюдать крайнюю осторожность. Проанализируем несколько советов, которые помогут избежать «забирания 10 тонн хлеба домой» из-за сбоев в отгрузке:

  1. Проверка по ИНН вместо Кода: Использование кода организации ("ТХЗ000001") — не самая надежная практика. При перенумеровании справочника или случайном изменении кода в базе, обмен перестанет фильтровать данные. Рекомендуем использовать ИНН: Если Объект.Организация.ИНН = "1234567890" Тогда ....
  2. Тестирование через файл: Прежде чем загружать изменения в УТ, воспользуемся обработкой «Универсальный обмен данными в формате XML». Выгрузим данные в локальный XML-файл и откроем его любым текстовым редактором. Поиском по названию организации или ИНН убедимся, что секции <Объект> с запрещенными данными отсутствуют.
  3. Очистка регистрации: Если вы уже успели запустить обмен с ошибками, в целевой базе могут остаться «битые» ссылки. После внесения исправлений в правила, обязательно очистите таблицу регистрации изменений для данной организации в УПП, используя обработку «Регистрация изменений для обмена».

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

← На главную