Почему группы справочника превращаются в элементы при переносе данных в 1С:Бухгалтерия 3?

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия IT и автоматизация бизнеса
← На главную

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

Анализ свойства ЭтоГруппа и особенности XML-сериализации

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

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

Типы иерархии в конфигураторе

Посмотрим на настройки метаданных в конфигурации-приемнике. Существует два принципиально разных вида иерархии, которые определяют поведение справочника:

  1. Иерархия групп и элементов: привычная структура с «желтыми папками» и вложенными в них карточками (например, справочник Номенклатура).
  2. Иерархия элементов: папок как таковых не существует. Один полноценный элемент может быть подчинен другому (например, справочник Подразделения или Статьи затрат в некоторых версиях).

Если в конфигурации «Бухгалтерия предприятия 3» для справочника Контрагенты по какой-то причине тип иерархии был изменен или загрузка идет в справочник, где предусмотрена только иерархия элементов, то все ваши «папки» из источника принудительно станут «элементами», сохранив при этом ссылку на родителя. Проверьте это свойство в конфигураторе на вкладке «Иерархия».

Проблема дублей и идентификации объектов

Рассмотрим ситуацию, когда в базе-приемнике уже существует элемент с таким же кодом или наименованием, как у переносимой группы. Если в правилах обмена настроен поиск по этим полям, система найдет существующий элемент и попытается обновить его данными группы. Поскольку 1С не позволяет превратить существующий элемент в группу, загрузчик просто обновит доступные поля, но объект останется карточкой. Визуально это выглядит так, будто группа «открывается как элемент».

Обработка события «Перед загрузкой» в правилах конвертации

Проанализируем программный код, который часто используется в обработчиках КД 2.0. Если вы используете произвольный алгоритм создания объекта, важно явно указывать метод создания. Разберем пример неправильного и правильного кода в обработчике ПередЗагрузкой:

Неправильный подход (всегда создается элемент):


// Ошибка: не проверяется признак группы из входящих данных
Объект = Справочники.Контрагенты.СоздатьЭлемент();

Правильный подход (учитываем тип объекта):


Если ПараметрыОбъекта["ЭтоГруппа"] = Истина Тогда
    Объект = Справочники.Контрагенты.СоздатьГруппу();
Иначе
    Объект = Справочники.Контрагенты.СоздатьЭлемент();
КонецЕсли;

Режим просмотра в управляемых формах БП 3

Иногда проблема носит чисто визуальный характер и связана с особенностями интерфейса «Такси». В управляемых формах 1С 8.3 пользователи могут случайно переключить режим отображения списка. Если в меню «Еще» — «Настройка списка» установлен режим «Список», то иерархия скрывается, и все объекты (и папки, и элементы) отображаются в одной плоской таблице. При этом значок папки может выглядеть иначе или отсутствовать, что создает иллюзию превращения групп в элементы. Убедитесь, что установлен режим «Иерархический список» или «Дерево».

Как исправить уже загруженные данные?

Если вы обнаружили, что тысячи групп уже превратились в элементы, простым переименованием или перетаскиванием это не исправить. Выясним алгоритм автоматизированного исправления:

  1. Необходимо написать обработку, которая найдет такие «лже-группы» (объекты, которые должны быть группами, но являются элементами).
  2. Для каждого такого объекта нужно создать настоящую группу с тем же наименованием и кодом.
  3. Переподчинить все дочерние элементы новой группе, изменив у них реквизит Родитель.
  4. Удалить старый «лже-элемент».

Важно помнить: стандартный метод Объект.Записать() не позволяет менять реквизит ЭтоГруппа у существующей записи в базе данных. Это ограничение на уровне платформы для обеспечения целостности данных.

Резюме для разработчика

Подведем итог: если группы справочника в БП 3 отображаются как элементы, первым делом проверьте правила обмена на предмет передачи свойства ЭтоГруппа в параметрах. Во вторую очередь убедитесь, что в приемнике не включен режим «плоского» списка. И всегда проверяйте тип иерархии в метаданных справочника конфигурации-приемника.

← На главную