При работе с конфигурациями на базе 1С:ERP 2.0 (включая 1С:Комплексная автоматизация 2.4 и 1С:Управление торговлей 11) разработчики часто сталкиваются с задачей извлечения конкретных параметров характеристики номенклатуры. Например, если характеристика называется «Черный, 36», нам может потребоваться отдельно получить значение цвета («Черный») и значение размера («36») для использования в логике отчетов или при выгрузке данных. Разберем подробно, как устроена эта система и какими методами следует пользоваться для решения задачи.
В современных конфигурациях 1С «параметры» характеристик не являются жестко заданными полями или реквизитами справочника. Они реализованы через механизм Дополнительных реквизитов и сведений, который является частью Библиотеки Стандартных Подсистем (БСП). Проанализируем структуру хранения:
ДополнительныеРеквизиты.Свойство (ссылка на План видов характеристик ДополнительныеРеквизитыИСведения) и Значение (тип данных зависит от настроек свойства, чаще всего это ссылка на значение дополнительного реквизита).Иногда при попытке прочитать ТЧ ДополнительныеРеквизиты запросом или через объектную модель разработчик обнаруживает, что она пуста, хотя в интерфейсе значения видны. Рассмотрим основные причины такой ситуации:
ДополнительныеСведения. В этом случае поиск по табличной части объекта ничего не даст.ВидНоменклатуры, а не конкретная Номенклатура.Вместо написания прямых запросов к табличным частям, рекомендуется использовать универсальные функции общего модуля УправлениеСвойствами. Это наиболее правильный и безопасный путь, так как БСП учитывает все настройки системы, включая кеширование и права доступа. Разберем два основных сценария.
Если нам нужно прочитать все имеющиеся свойства объекта (например, для вывода в печатную форму), воспользуемся методом ПолучитьЗначенияСвойств. Рассмотрим пример кода:
// СсылкаНаХарактеристику - это ссылка на элемент справочника ХарактеристикиНоменклатуры
ПараметрыОбъекта = УправлениеСвойствами.ПолучитьЗначенияСвойств(СсылкаНаХарактеристику);
Для Каждого СтрокаПараметра Из ПараметрыОбъекта Цикл
Сообщить("Свойство: " + СтрокаПараметра.Свойство + " | Значение: " + СтрокаПараметра.Значение);
КонецЦикла;
Этот метод возвращает таблицу значений с колонками Свойство и Значение. Это позволяет не задумываться о том, где именно лежат данные (в ТЧ или в регистре сведений), так как БСП соберет их автоматически.
Чаще всего программисту нужно получить значение конкретного свойства, например «Размер». Для этого проанализируем следующий подход:
// Сначала необходимо найти ссылку на само свойство (элемент ПВХ)
// В реальных задачах лучше искать по имени или использовать предопределенные элементы
СсылкаНаСвойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Размер (Характеристики)");
Если Не СсылкаНаСвойство.Пустая() Тогда
ЗначениеРазмера = УправлениеСвойствами.ЗначениеСвойства(СсылкаНаХарактеристику, СсылкаНаСвойство);
Сообщить("Выбран размер: " + ЗначениеРазмера);
КонецЕсли;
Выясним еще один важный момент: наименование характеристики в КА 2.4 (например, «Красный, XL») формируется автоматически. Оно строится на основании шаблона, заданного в Виде номенклатуры, и значений дополнительных реквизитов. Если вы программно меняете значения в табличной части ДополнительныеРеквизиты, не забудьте обновить и строковое наименование. Для этого в модуле менеджера справочника ХарактеристикиНоменклатуры обычно предусмотрены процедуры обновления по шаблону.
Посмотрим на ситуацию, когда мы работаем с регистрами накопления (например, ВыручкаИСебестоимостьПродаж). В них часто используется измерение АналитикаУчетаНоменклатуры. Важно понимать, что этот регистр сведений является лишь ключом (ссылкой), объединяющим номенклатуру и характеристику. Чтобы добраться до параметров, нам всегда нужно сначала получить ссылку на характеристику из этого ключа:
// Получаем характеристику из ключа аналитики
ХарактеристикаСсылка = КлючАналитики.Характеристика;
// Теперь применяем методы БСП, описанные выше
ЗначениеЦвета = УправлениеСвойствами.ЗначениеСвойства(ХарактеристикаСсылка, СсылкаНаСвойствоЦвет);
Таким образом, для надежной работы с характеристиками в КА 2.4 следует избегать прямых запросов к табличным частям, если нет уверенности в структуре данных конкретной базы. Использование общего модуля УправлениеСвойствами является стандартом разработки для ERP-систем.