При разработке алгоритмов, доработке документов (например, ЗаказКлиента) или составлении отчетов в типовых конфигурациях линейки «1С:Управление торговлей 11», «1С:Комплексная автоматизация 2» и «1С:ERP» часто возникает задача проверить, ведется ли по выбранной номенклатурной позиции учет по характеристикам. Начинающие разработчики нередко ищут простое булево поле в реквизитах справочника, однако в современных конфигурациях архитектура устроена иначе. Разберем детально, где хранится эта настройка и как правильно выполнять программную проверку.
В конфигурациях на базе типовой архитектуры признак использования характеристик не является булевым значением. Это связано с тем, что система поддерживает несколько различных вариантов детализации учета. Настройка хранится в реквизите ИспользованиеХарактеристик справочника Номенклатура (или справочника ВидыНоменклатуры).
Реквизит имеет тип ПеречислениеСсылка.ВариантыИспользованияХарактеристикНоменклатуры и может принимать следующие значения:
ВладелецХарактеристик).Таким образом, чтобы выяснить, ведется ли учет по характеристикам, нам необходимо убедиться, что значение реквизита ИспользованиеХарактеристик не равно значению НеИспользовать.
Проанализируем пример запроса, с помощью которого можно отобрать всю номенклатуру, для которой включен учет по характеристикам. Это решение удобно использовать в динамических списках, отчетах на СКД или процедурах заполнения документов.
ВЫБРАТЬ
Номенклатура.Ссылка КАК Номенклатура
ИЗ
Справочник.Номенклатура КАК Номенклатура
ГДЕ
Номенклатура.ИспользованиеХарактеристик <> ЗНАЧЕНИЕ(Перечисление.ВариантыИспользованияХарактеристикНоменклатуры.НеИспользовать)
И НЕ Номенклатура.ЭтоГруппа
В некоторых редакциях или частных случаях настройки могут определяться на уровне вида номенклатуры без прямого дублирования в карточке товара. В таком случае обращение в условии запроса строится через связь с видом номенклатуры:
ВЫБРАТЬ
Номенклатура.Ссылка КАК Номенклатура
ИЗ
Справочник.Номенклатура КАК Номенклатура
ГДЕ
Номенклатура.ВидНоменклатуры.ИспользованиеХарактеристик <> ЗНАЧЕНИЕ(Перечисление.ВариантыИспользованияХарактеристикНоменклатуры.НеИспользовать)
И НЕ Номенклатура.ЭтоГруппа
Если нам требуется проверить конкретную ссылку на номенклатуру в программном коде модуля формы или объекта, достаточно выполнить прямое сравнение со значением перечисления:
ИспользуютсяХарактеристики = (НоменклатураСсылка.ИспользованиеХарактеристик <> Перечисления.ВариантыИспользованияХарактеристикНоменклатуры.НеИспользовать);
Если ИспользуютсяХарактеристики Тогда
// Выполняем алгоритм для позиций с характеристиками
Иначе
// Характеристики не используются
КонецЕсли;
При реализации проверки обязательно учитываем несколько важных нюансов конфигурации:
ИспользоватьХарактеристикиНоменклатуры (константа ИспользоватьХарактеристикиНоменклатуры). Если опция выключена в общих настройках системы («НСИ и администрирование»), то даже при установленном значении в карточке номенклатуры поля выбора характеристик в документах будут недоступны.ХарактеристикиНоменклатуры является подчиненным. В зависимости от выбранного варианта владельцем выступает либо непосредственно элемент СправочникСсылка.Номенклатура (при индивидуальных характеристиках), либо СправочникСсылка.ВидыНоменклатуры (при общих характеристиках).ХарактеристикиНоменклатуры. Если для номенклатуры ранее использовались характеристики, а затем вариант изменили на НеИспользовать, созданные элементы справочника сохранятся. Поэтому корректным критерием всегда является проверка реквизита ИспользованиеХарактеристик.