При настройке обмена данными между конфигурациями «Управление производственным предприятием» (УПП) и «Управление торговлей» (УТ) часто возникает задача ограничить состав передаваемых данных. Типичный пример — необходимость запретить выгрузку платежных документов по конкретной организации. Разберем подробно, как это сделать правильно с помощью «Конвертации данных 2.1» (КД), избежав при этом ошибок синхронизации и появления пустых ссылок.
Самый распространенный и методически верный способ фильтрации объектов в КД 2.1 — использование переменной Отказ в обработчиках Правил Конвертации Объектов (ПКО). Проанализируем ситуацию: когда система начинает готовить объект к выгрузке, она обращается к ПКО. Если мы на этом этапе скажем системе, что объект выгружать не нужно, он просто не попадет в файл обмена.
Пошаговая инструкция:
ПлатежноеПоручениеВходящее.ПередВыгрузкой.
Если Объект.Организация.Код = "ТХЗ000001" Тогда
Отказ = Истина;
КонецЕсли;
Почему это лучше, чем другие варианты? Использование Отказ = Истина является штатным механизмом платформы. В отличие от попыток манипулировать параметрами загрузки, этот метод гарантирует, что XML-структура объекта даже не начнет формироваться.
Часто программисты сталкиваются с тем, что после установки фильтра (как в Методе 1) в целевой базе (УТ) появляются документы с надписью «Объект не найден» в полях ссылок. Выясним причину: это происходит потому, что документ был исключен из основной выгрузки, но на него сослался какой-то другой объект (например, реестр платежей или связанный документ). Система КД видит ссылку и пытается выгрузить «скелет» объекта, чтобы не нарушить целостность данных.
Чтобы этого избежать, выполним следующие настройки в ПКО:
Если ваш обмен между УПП и УТ работает через механизм планов обмена, то эффективнее всего запретить саму регистрацию изменений. Рассмотрим ситуацию: если документ организации-исключения даже не попадет в таблицу регистрации, система не будет тратить ресурсы на его обработку при запуске обмена.
Для этого в конфигурации УПП (источнике) необходимо настроить Правила Регистрации Данных (ПРД):
В обработчике ПередОбработкой правила регистрации для нужного документа пропишем:
Если Объект.Организация.Код = "ТХЗ000001" Тогда
Отказ = Истина;
КонецЕсли;
Это позволит держать таблицу изменений в чистоте, не перегружая файл обмена ненужными данными.
Если документов очень много, проверка каждого объекта в ПКО может замедлить процесс. В таком случае рассмотрим вариант фильтрации на этапе выборки данных. Это делается в Правилах выгрузки данных (ПВД) с использованием произвольного алгоритма.
В обработчике ПередОбработкой для ПВД можно написать запрос:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ПлатежноеПоручениеВходящее.Ссылка
|ИЗ
| Документ.ПлатежноеПоручениеВходящее КАК ПлатежноеПоручениеВходящее
|ГДЕ
| ПлатежноеПоручениеВходящее.Организация.Код <> &ЗапрещенныйКод";
Запрос.УстановитьПараметр("ЗапрещенныйКод", "ТХЗ000001");
ВыборкаДанных = Запрос.Выполнить().Выбрать();
В этом случае в переменную ВыборкаДанных попадут только те документы, которые заведомо разрешены к выгрузке. Это самый быстрый способ с точки зрения производительности.
Работая напрямую с «боевой» базой, как в обсуждаемом случае, необходимо соблюдать крайнюю осторожность. Проанализируем несколько советов, которые помогут избежать «забирания 10 тонн хлеба домой» из-за сбоев в отгрузке:
"ТХЗ000001") — не самая надежная практика. При перенумеровании справочника или случайном изменении кода в базе, обмен перестанет фильтровать данные. Рекомендуем использовать ИНН: Если Объект.Организация.ИНН = "1234567890" Тогда ....<Объект> с запрещенными данными отсутствуют.Подводя итог, отметим: наиболее универсальным решением для разовых задач является Метод 1 (Отказ в ПКО), а для стабильно работающих высоконагруженных систем — сочетание фильтрации в ПРД и ПВД. Помните, что корректность обмена зависит не только от запрета выгрузки самого объекта, но и от того, как настроена передача ссылок на этот объект в других документах.