Где в 1С:УНФ хранится связь между номенклатурой и её категорией

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

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

Архитектура связи: Справочник vs Регистр

Рассмотрим стандартную ситуацию: мы открываем список регистров сведений, таких как СоответствиеВидовНоменклатуры или СоответствиеНоменклатурыРаботаСНоменклатурой, и видим, что они пусты. Это происходит потому, что в архитектуре УНФ связь между номенклатурой и её категорией является объектной, а не записной.

Разберем это подробнее. Прямая связь хранится непосредственно в справочнике Номенклатура (Catalog.Номенклатура). В нем существует стандартный реквизит КатегорияНоменклатуры, имеющий тип СправочникСсылка.КатегорииНоменклатуры. Это означает следующее:

  1. Связь является жесткой: одна позиция номенклатуры всегда принадлежит только одной категории.
  2. Для получения категории не нужно обращаться к виртуальным таблицам регистров, достаточно прочитать реквизит объекта или получить его через точку в запросе.
  3. Данная связь является ключевой для определения поведения объекта в системе (тип номенклатуры, счета учета и т.д.).

Как программно получить категорию номенклатуры

Поскольку связь реализована через реквизит, мы можем легко получить доступ к категории как через объектную модель, так и с помощью языка запросов 1С. Рассмотрим пример кода, который демонстрирует получение категории для конкретного товара:


// Получение ссылки на номенклатуру (пример)
ТоварСсылка = Справочники.Номенклатура.НайтиПоНаименованию("Стол кухонный");

Если Не ТоварСсылка.Пустая() Тогда
    // Обращение к реквизиту напрямую через точку
    ТекущаяКатегория = ТоварСсылка.КатегорияНоменклатуры;
    Сообщить("Товар принадлежит категории: " + ТекущаяКатегория);
КонецЕсли;

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


Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |	Номенклатура.Ссылка КАК Товар,
    |	Номенклатура.Код КАК Код,
    |	Номенклатура.Артикул КАК Артикул
    |ИЗ
    |	Справочник.Номенклатура КАК Номенклатура
    |ГДЕ
    |	Номенклатура.КатегорияНоменклатуры = &Категория";

Запрос.УстановитьПараметр("Категория", ВыбраннаяКатегорияСсылка);
РезультатЗапроса = Запрос.Выполнить();

Роль категории в наследовании свойств и характеристик

Несмотря на то что сама связь хранится в справочнике, категория в УНФ выполняет роль мощного «шаблона». Выясним, почему разработчики часто ищут регистры связи. Это происходит из-за того, что дополнительные реквизиты и характеристики ведут себя так, будто они привязаны к категории динамически.

Посмотрим на механизм дополнительных реквизитов. В УНФ они привязываются не напрямую к номенклатуре, а к наборам свойств. Технически это работает так: в справочнике НаборыДополнительныхРеквизитовИСведений создается запись, связанная с конкретной категорией. Когда мы открываем карточку номенклатуры, система считывает её реквизит КатегорияНоменклатуры, находит соответствующий набор реквизитов и динамически выводит их на форму. Это создает иллюзию сложной связи через регистры, хотя в основе лежит всё тот же ссылочный реквизит.

Влияние на регистры: Счета учета и Характеристики

Хотя категория — это реквизит, она напрямую управляет записями в других регистрах. Рассмотрим регистр сведений «Счета учета номенклатуры». В УНФ настройки счетов учета (ГФУ) могут быть заданы как для конкретной позиции, так и для всей категории в целом.

Проанализируем алгоритм поиска счетов учета системой:

  1. Программа ищет запись в регистре СчетаУчетаНоменклатуры по конкретной ссылке на Номенклатуру.
  2. Если запись не найдена, система берет реквизит КатегорияНоменклатуры из карточки товара и ищет настройки в том же регистре, но уже для этой Категории.
  3. Если и там пусто, используются общие настройки для типа номенклатуры.

Аналогичная логика работает и с характеристиками. В УНФ характеристики могут быть общими для категории. В этом случае владельцем записи в справочнике ХарактеристикиНоменклатуры будет выступать не объект Номенклатура, а объект КатегорииНоменклатуры. Это критически важно учитывать при написании отчетов или обработок по остаткам в разрезе характеристик.

Как быстро найти все связи в конфигураторе

Если у вас возникают сомнения в том, где используется тот или иной объект, воспользуемся универсальным методом. В режиме «Конфигуратор» найдем справочник КатегорииНоменклатуры, нажмем на него правой кнопкой мыши и выберем пункт «Поиск ссылок на объект».

Этот инструмент покажет все места, где используется ссылка на категорию:

Отличие категорий от групп номенклатуры

Важно не путать иерархическую структуру (папки) и категории. Разберем основные отличия, которые важны для программиста:

Группы (Родитель): используются исключительно для визуального структурирования списка в интерфейсе. Хранятся в стандартном реквизите Родитель.

Категории: определяют логику сущности. Именно категория диктует, является ли объект запасом, услугой или работой, какие у него будут шаблоны ценников, как он будет синхронизироваться с интернет-магазином (например, на базе Битрикс) и какие аналитики учета будут применяться.

Таким образом, мы выяснили, что связь номенклатуры с категорией в 1С:УНФ реализована максимально просто и эффективно — через прямой ссылочный реквизит. Это упрощает написание запросов и ускоряет работу системы, при этом механизмы наследования через категорию позволяют гибко управлять свойствами тысяч товаров одновременно.

← На главную