С выходом версии 1С:ERP 2.5 (и Комплексной автоматизации 2.5) разработчики представили кардинально новую архитектуру подсистемы ценообразования. Одной из самых частых сложностей, с которой сталкиваются программисты и аналитики при переходе, является появление разделения характеристик на «обычные» и «ценовые». Рассмотрим подробнее, как устроена эта связь и как правильно получать цены в новых реалиях. Если этот переход связан с миграцией из устаревшей системы, для сохранения документов и остатков можно использовать готовый перенос данных УПП 1.3 — ERP.
В старых версиях системы регистр ЦеныНоменклатуры напрямую использовал справочник ХарактеристикиНоменклатуры. Это приводило к избыточности: если у товара 50 характеристик (например, разные цвета), но цена на них одинаковая, системе приходилось хранить 50 идентичных записей в регистре сведений.
Проанализируем новую схему в версии 2.5. Теперь используются два разных объекта:
ХарактеристикиНоменклатуры — это физические свойства товара, которые менеджер выбирает в документах (Акт выполненных работ, Заказ клиента и т.д.).ХарактеристикиНоменклатурыДляЦенообразования (далее — Характеристики ЦО) — это логические группы для установки цен.Именно второй справочник (Характеристики ЦО) теперь является измерением в регистре ЦеныНоменклатуры25. Это позволяет установить одну цену для целой группы физических характеристик, значительно сокращая объем базы данных.
Для того чтобы система понимала, какую цену подставить в документ при выборе конкретной характеристики, необходимо настроить их соответствие. Разберем по шагам, где это происходит:
Настройка выполняется в карточке Вида номенклатуры. На вкладке «Настройки ценообразования» (или аналогичной, в зависимости от точного релиза) указывается принцип распределения характеристик для целей ценообразования. Возможны несколько вариантов:
В самой «обычной» характеристике в базе данных хранится ссылка на соответствующий элемент справочника ХарактеристикиНоменклатурыДляЦенообразования. Если вы создаете документы программно, важно понимать, что напрямую сопоставлять их через равенство ссылок нельзя — это разные типы данных. Для более удобного ручного управления характеристиками в документах ценообразования подойдёт расширение для добавления и удаления характеристик номенклатуры в установке цен.
Если в настройках системы (раздел НСИ и администрирование -> CRM и маркетинг) включено использование ценообразования версии 11.5, основным источником данных становится регистр ЦеныНоменклатуры25.
Важный момент: в системе могут существовать оба регистра одновременно (старый и новый). Это сделано для обеспечения плавного перехода. Однако запись новых цен через документ УстановкаЦенНоменклатуры будет происходить именно в ЦеныНоменклатуры25, если включена новая версия. Поэтому попытка получить цену из старого регистра может вернуть неактуальные данные или пустой результат. Для плавного перехода на новую схему можно применить обработку для переноса истории цен в регистр версии 2.5.
Рассмотрим ситуацию, описанную автором: в документе «Акт выполненных работ» выбрана стандартная характеристика, а цену нужно вытянуть из нового регистра. Настоятельно не рекомендуется писать прямые запросы к регистру ЦеныНоменклатуры25, так как логика сопоставления характеристик достаточно сложная (учитываются приоритеты, настройки вида номенклатуры и иерархия).
Правильнее всего использовать типовые механизмы. Разберем пример обращения к общему модулю, который берет на себя всю работу по поиску связей:
// Параметры для получения цен
ПараметрыЗапроса = ЦенообразованиеКлиентСервер.ПараметрыЗапросаЦен();
ПараметрыЗапроса.Дата = Объект.Дата;
ПараметрыЗапроса.Валюта = Объект.Валюта;
// Добавляем номенклатуру и ОБЫЧНУЮ характеристику
ЦенообразованиеКлиентСервер.ДобавитьНоменклатуруВПараметрыЗапроса(ПараметрыЗапроса, ВыбНоменклатура, ВыбХарактеристика);
// Вызов функции получения цен
ДанныеЦен = ЦенообразованиеВызовСервера.ПолучитьЦеныНоменклатуры(ПараметрыЗапроса);
Посмотрим, что происходит «под капотом» этого вызова:
ХарактеристикиНоменклатуры выполняется поиск сопоставленной ХарактеристикиЦО.ЦеныНоменклатуры или ЦеныНоменклатуры25).Чтобы избежать путаницы в данных и обеспечить корректную работу документов, придерживайтесь следующих правил:
ЦенообразованиеВызовСервера автоматически учитывают связь между двумя справочниками характеристик.ХарактеристикиНоменклатурыДляЦенообразования, иначе цены в регистр просто не запишутся или не будут найдены.Таким образом, связь между характеристиками реализована через промежуточный справочник-группиратор. Это усложнило архитектуру для разработчика, но дало бизнесу гибкость в управлении прайс-листами и позволило оптимизировать производительность системы при работе с большими объемами данных. Для дополнительного ускорения работы перегруженной базы можно применить инструмент для многопоточной свёртки 1С:ERP, сокращающий размер исторических документов и записей регистров.