Почему не выгружается родитель номенклатуры при онлайн-обмене и как это исправить?

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

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

Рассмотрим эту проблему подробнее. Ситуация обычно выглядит так: вы выгружаете группы и элементы номенклатуры. При использовании универсальной обработки выгрузки/загрузки данных XML все переносится отлично — иерархия сохраняется, родители на своих местах. Однако, как только вы переходите на регулярный онлайн-обмен (через планы обмена с регистрацией изменений), родитель перестает загружаться. В XML-файле вместо полноценного узла родителя передается только его идентификатор без каких-либо дополнительных признаков поиска.

Проанализируем причины такого поведения и разберем по шагам, как исправить эту ошибку.

В чем разница между универсальной обработкой и онлайн-обменом?

Для начала выясним причину, почему поведение системы отличается в зависимости от способа выгрузки.

Онлайн-обмен (через узлы планов обмена) работает строго по зарегистрированным изменениям. Если пользователь изменил сам элемент номенклатуры, система зарегистрирует на узле только его. Если родительская группа при этом не менялась, она не будет зарегистрирована. При формировании сообщения обмена элемент потянет за собой родителя только по ссылке. В универсальной обработке выгрузка часто идет сплошным потоком по фильтру, и родитель физически попадает в выборку целиком, поэтому проблема не проявляется.

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

Решение 1: Установка флага «Не запоминать выгруженные объекты»

Разберем самый эффективный метод решения, который помог автору проблемы. Нам необходимо заставить платформу игнорировать кэш для данного объекта и каждый раз выгружать полноценные данные с полями поиска.

  1. Откройте ваши правила обмена в конфигурации Конвертация данных.
  2. Найдите Правило Конвертации Объектов (ПКО) для справочника Номенклатура (или другого справочника, с которым возникла проблема).
  3. Откройте свойства этого ПКО.
  4. Установите флажок Не запоминать выгруженные объекты.
  5. Сохраните правила и обновите их в узле обмена вашей базы.

Сама фирма «1С» рекомендует устанавливать этот признак для тех ПКО, которые часто выгружаются по ссылке из свойств других объектов. Это методически правильное решение, которое гарантирует, что система каждый раз будет формировать полный XML-узел для родителя со всеми необходимыми реквизитами для поиска. Учитывайте, что это может незначительно увеличить объем файла обмена.

Решение 2: Настройка порядка Правил Выгрузки Данных (ПВД)

Посмотрим на еще один важный нюанс. Потеря родителей может быть связана с некорректным порядком выгрузки данных. Хорошей практикой при обмене иерархическими справочниками является выгрузка данных «снизу вверх» по логическим зависимостям.

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

Решение 3: Дополнительные поля поиска для иерархии

Рассмотрим дополнительные меры предосторожности. Если в базе-приемнике все равно возникают дубли или битые ссылки на группы, следует пересмотреть Правила Конвертации Свойств (ПКС).

Чтобы обработчик загрузки точно понимал, что он ищет группу, а не просто элемент с похожим наименованием, добавьте системный реквизит ЭтоГруппа в качестве обязательного поля поиска в ПКО.

  1. Откройте ПКО Номенклатуры.
  2. Перейдите к списку свойств (ПКС).
  3. Найдите свойство ЭтоГруппа (или создайте его, если его нет).
  4. Установите для него флаг Поиск объекта при загрузке по свойству.
  5. Убедитесь, что поиск также установлен для реквизитов Родитель, Код или Наименование (в зависимости от вашей логики синхронизации).

Применение этих простых шагов полностью устраняет проблему пустых родителей при типовых и нетиповых онлайн-обменах 1С. Комплексный подход (отключение кэширования для ссылочных групп, правильный порядок выгрузки и точные поля поиска) обеспечит стабильную работу обмена без потери иерархии.

← На главную