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