Как связать обычные характеристики номенклатуры с новым регистром ЦеныНоменклатуры25 в 1С:ERP 2.5

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

С выходом версии 1С:ERP 2.5 (и Комплексной автоматизации 2.5) разработчики представили кардинально новую архитектуру подсистемы ценообразования. Одной из самых частых сложностей, с которой сталкиваются программисты и аналитики при переходе, является появление разделения характеристик на «обычные» и «ценовые». Рассмотрим подробнее, как устроена эта связь и как правильно получать цены в новых реалиях. Если этот переход связан с миграцией из устаревшей системы, для сохранения документов и остатков можно использовать готовый перенос данных УПП 1.3 — ERP.

Разберем концепцию разделения характеристик

В старых версиях системы регистр ЦеныНоменклатуры напрямую использовал справочник ХарактеристикиНоменклатуры. Это приводило к избыточности: если у товара 50 характеристик (например, разные цвета), но цена на них одинаковая, системе приходилось хранить 50 идентичных записей в регистре сведений.

Проанализируем новую схему в версии 2.5. Теперь используются два разных объекта:

  1. Справочник ХарактеристикиНоменклатуры — это физические свойства товара, которые менеджер выбирает в документах (Акт выполненных работ, Заказ клиента и т.д.).
  2. Справочник ХарактеристикиНоменклатурыДляЦенообразования (далее — Характеристики ЦО) — это логические группы для установки цен.

Именно второй справочник (Характеристики ЦО) теперь является измерением в регистре ЦеныНоменклатуры25. Это позволяет установить одну цену для целой группы физических характеристик, значительно сокращая объем базы данных.

Выясним, как устанавливается связь между справочниками

Для того чтобы система понимала, какую цену подставить в документ при выборе конкретной характеристики, необходимо настроить их соответствие. Разберем по шагам, где это происходит:

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

  1. Использовать характеристики номенклатуры — когда каждой физической характеристике соответствует своя ценовая.
  2. Использовать общие характеристики для ценообразования — когда несколько характеристик объединяются в одну ценовую группу.

В самой «обычной» характеристике в базе данных хранится ссылка на соответствующий элемент справочника ХарактеристикиНоменклатурыДляЦенообразования. Если вы создаете документы программно, важно понимать, что напрямую сопоставлять их через равенство ссылок нельзя — это разные типы данных. Для более удобного ручного управления характеристиками в документах ценообразования подойдёт расширение для добавления и удаления характеристик номенклатуры в установке цен.

Проанализируем работу регистра ЦеныНоменклатуры25

Если в настройках системы (раздел НСИ и администрирование -> CRM и маркетинг) включено использование ценообразования версии 11.5, основным источником данных становится регистр ЦеныНоменклатуры25.

Важный момент: в системе могут существовать оба регистра одновременно (старый и новый). Это сделано для обеспечения плавного перехода. Однако запись новых цен через документ УстановкаЦенНоменклатуры будет происходить именно в ЦеныНоменклатуры25, если включена новая версия. Поэтому попытка получить цену из старого регистра может вернуть неактуальные данные или пустой результат. Для плавного перехода на новую схему можно применить обработку для переноса истории цен в регистр версии 2.5.

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

Рассмотрим ситуацию, описанную автором: в документе «Акт выполненных работ» выбрана стандартная характеристика, а цену нужно вытянуть из нового регистра. Настоятельно не рекомендуется писать прямые запросы к регистру ЦеныНоменклатуры25, так как логика сопоставления характеристик достаточно сложная (учитываются приоритеты, настройки вида номенклатуры и иерархия).

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


// Параметры для получения цен
ПараметрыЗапроса = ЦенообразованиеКлиентСервер.ПараметрыЗапросаЦен();
ПараметрыЗапроса.Дата = Объект.Дата;
ПараметрыЗапроса.Валюта = Объект.Валюта;
// Добавляем номенклатуру и ОБЫЧНУЮ характеристику
ЦенообразованиеКлиентСервер.ДобавитьНоменклатуруВПараметрыЗапроса(ПараметрыЗапроса, ВыбНоменклатура, ВыбХарактеристика);

// Вызов функции получения цен
ДанныеЦен = ЦенообразованиеВызовСервера.ПолучитьЦеныНоменклатуры(ПараметрыЗапроса);

Посмотрим, что происходит «под капотом» этого вызова:

Рекомендации по настройке и использованию

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

  1. Проверьте настройки вида номенклатуры. Если для номенклатуры используются характеристики, убедитесь, что в поле «Настройка ценообразования» корректно указано, как они должны группироваться.
  2. Используйте типовые модули. Функции в ЦенообразованиеВызовСервера автоматически учитывают связь между двумя справочниками характеристик.
  3. Синхронизация данных. При массовой загрузке характеристик из внешних систем (например, из Excel или с сайта) не забывайте программно создавать и привязывать соответствующие элементы справочника ХарактеристикиНоменклатурыДляЦенообразования, иначе цены в регистр просто не запишутся или не будут найдены.

Таким образом, связь между характеристиками реализована через промежуточный справочник-группиратор. Это усложнило архитектуру для разработчика, но дало бизнесу гибкость в управлении прайс-листами и позволило оптимизировать производительность системы при работе с большими объемами данных. Для дополнительного ускорения работы перегруженной базы можно применить инструмент для многопоточной свёртки 1С:ERP, сокращающий размер исторических документов и записей регистров.

← На главную