При работе с конфигурацией 1С:Управление нашей фирмой (УНФ) разработчики часто сталкиваются с вопросом поиска механизмов связи между ключевыми объектами системы. В частности, возникает вопрос: в каком регистре сведений фиксируется принадлежность конкретной номенклатурной позиции к той или иной категории? Мы привыкли, что в сложных ERP-системах многие связи выносятся в регистры для обеспечения гибкости, однако в УНФ этот механизм реализован иначе. Проанализируем техническую структуру этой связи и разберем, как эффективно работать с этими данными.
Рассмотрим стандартную ситуацию: мы открываем список регистров сведений, таких как СоответствиеВидовНоменклатуры или СоответствиеНоменклатурыРаботаСНоменклатурой, и видим, что они пусты. Это происходит потому, что в архитектуре УНФ связь между номенклатурой и её категорией является объектной, а не записной.
Разберем это подробнее. Прямая связь хранится непосредственно в справочнике Номенклатура (Catalog.Номенклатура). В нем существует стандартный реквизит КатегорияНоменклатуры, имеющий тип СправочникСсылка.КатегорииНоменклатуры. Это означает следующее:
Поскольку связь реализована через реквизит, мы можем легко получить доступ к категории как через объектную модель, так и с помощью языка запросов 1С. Рассмотрим пример кода, который демонстрирует получение категории для конкретного товара:
// Получение ссылки на номенклатуру (пример)
ТоварСсылка = Справочники.Номенклатура.НайтиПоНаименованию("Стол кухонный");
Если Не ТоварСсылка.Пустая() Тогда
// Обращение к реквизиту напрямую через точку
ТекущаяКатегория = ТоварСсылка.КатегорияНоменклатуры;
Сообщить("Товар принадлежит категории: " + ТекущаяКатегория);
КонецЕсли;
Проанализируем ситуацию, когда нам необходимо получить список всей номенклатуры определенной категории с помощью запроса. Это наиболее производительный способ обработки данных в системе:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка КАК Товар,
| Номенклатура.Код КАК Код,
| Номенклатура.Артикул КАК Артикул
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.КатегорияНоменклатуры = &Категория";
Запрос.УстановитьПараметр("Категория", ВыбраннаяКатегорияСсылка);
РезультатЗапроса = Запрос.Выполнить();
Несмотря на то что сама связь хранится в справочнике, категория в УНФ выполняет роль мощного «шаблона». Выясним, почему разработчики часто ищут регистры связи. Это происходит из-за того, что дополнительные реквизиты и характеристики ведут себя так, будто они привязаны к категории динамически.
Посмотрим на механизм дополнительных реквизитов. В УНФ они привязываются не напрямую к номенклатуре, а к наборам свойств. Технически это работает так: в справочнике НаборыДополнительныхРеквизитовИСведений создается запись, связанная с конкретной категорией. Когда мы открываем карточку номенклатуры, система считывает её реквизит КатегорияНоменклатуры, находит соответствующий набор реквизитов и динамически выводит их на форму. Это создает иллюзию сложной связи через регистры, хотя в основе лежит всё тот же ссылочный реквизит.
Хотя категория — это реквизит, она напрямую управляет записями в других регистрах. Рассмотрим регистр сведений «Счета учета номенклатуры». В УНФ настройки счетов учета (ГФУ) могут быть заданы как для конкретной позиции, так и для всей категории в целом.
Проанализируем алгоритм поиска счетов учета системой:
СчетаУчетаНоменклатуры по конкретной ссылке на Номенклатуру.КатегорияНоменклатуры из карточки товара и ищет настройки в том же регистре, но уже для этой Категории.Аналогичная логика работает и с характеристиками. В УНФ характеристики могут быть общими для категории. В этом случае владельцем записи в справочнике ХарактеристикиНоменклатуры будет выступать не объект Номенклатура, а объект КатегорииНоменклатуры. Это критически важно учитывать при написании отчетов или обработок по остаткам в разрезе характеристик.
Если у вас возникают сомнения в том, где используется тот или иной объект, воспользуемся универсальным методом. В режиме «Конфигуратор» найдем справочник КатегорииНоменклатуры, нажмем на него правой кнопкой мыши и выберем пункт «Поиск ссылок на объект».
Этот инструмент покажет все места, где используется ссылка на категорию:
Номенклатура.ХарактеристикиНоменклатуры.Важно не путать иерархическую структуру (папки) и категории. Разберем основные отличия, которые важны для программиста:
Группы (Родитель): используются исключительно для визуального структурирования списка в интерфейсе. Хранятся в стандартном реквизите Родитель.
Категории: определяют логику сущности. Именно категория диктует, является ли объект запасом, услугой или работой, какие у него будут шаблоны ценников, как он будет синхронизироваться с интернет-магазином (например, на базе Битрикс) и какие аналитики учета будут применяться.
Таким образом, мы выяснили, что связь номенклатуры с категорией в 1С:УНФ реализована максимально просто и эффективно — через прямой ссылочный реквизит. Это упрощает написание запросов и ускоряет работу системы, при этом механизмы наследования через категорию позволяют гибко управлять свойствами тысяч товаров одновременно.