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