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