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