Где в 1С:ERP хранятся цены номенклатуры в разрезе контрагентов: подробный разбор архитектуры

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

В системе 1С:ERP Управление предприятием архитектура хранения цен значительно отличается от более простых конфигураций (например, 1С:Бухгалтерия). Здесь нет прямой связи «Один контрагент — Одна цена». Вместо этого используется многоуровневая система связей через виды цен, соглашения и специализированные регистры. В данной статье мы разберем, где именно искать данные о ценах для поставщиков и покупателей, и как программно получить эти значения.

Хранение цен поставщиков: Регистр «ЦеныНоменклатурыПоставщиков»

Для работы с ценами, которые выставляют нам внешние контрагенты, в системе выделен отдельный регистр сведений — ЦеныНоменклатурыПоставщиков. Рассмотрим подробнее, как организована эта структура.

Данные в этот регистр попадают двумя основными путями:

  1. Документ «Регистрация цен поставщика»: Специализированный документ, предназначенный для фиксации прайс-листа контрагента.
  2. Автоматическая регистрация: При проведении документа ПриобретениеТоваровУслуг система может автоматически записывать новые цены, если в настройках соглашения или самого документа установлен соответствующий флаг «Регистрировать цены поставщика автоматически».

Разберем ключевую особенность: цена в этом регистре всегда привязана не напрямую к партнеру, а к объекту ВидЦеныПоставщика. Этот справочник подчинен конкретному Партнеру. Таким образом, цепочка поиска данных выглядит так: Партнер (Поставщик) -> Вид цены поставщика -> Запись в регистре.

В регистре ЦеныНоменклатурыПоставщиков хранятся следующие измерения:

Проанализируем техническую сторону получения этих цен. Если вам нужно извлечь данные запросом, необходимо обращаться к виртуальной таблице СрезПоследних, учитывая период (дату актуальности цены).

Хранение цен для покупателей: Соглашения и регистр «ЦеныНоменклатуры25»

Ситуация с ценами для оптовых покупателей сложнее. В 1С:ERP нет регистра «Цены для клиента Иванова». Вместо этого система использует механизм Типовых и Индивидуальных соглашений.

Разберем по шагам, как система определяет цену для покупателя в документе продажи:

  1. Система обращается к Индивидуальному соглашению, которое выбрано в заказе или реализации.
  2. В соглашении проверяется указанный ВидЦены (например, «Оптовая» или «Спеццена для дилеров»).
  3. На основе этого вида цены система обращается в регистр сведений ЦеныНоменклатуры25 (в версиях ERP 2.5 и выше) или ЦеныНоменклатуры (в старых редакциях).

Однако существует исключение. Если для конкретного клиента нужно установить уникальные цены на отдельные товары, которые не зависят от общих прайс-листов, такие данные хранятся прямо в объекте соглашения на вкладке «Уточнение цен номенклатуры». Эти цены имеют наивысший приоритет при заполнении документов.

Проанализируем регистр ЦеныНоменклатуры25. Это периодический регистр, который хранит значения для каждого вида цены. Если вид цены настроен как «Рассчитываемый» (динамически на основе других цен по формуле), то записей в регистре для него не будет — система рассчитывает такую цену «на лету» в момент обращения. Для расчёта действующих цен покупателя с учётом условий соглашений подойдёт отчёт для формирования прайс-листа по выбранному соглашению.

Технические особенности получения цен программным способом

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

Для корректного получения цен рекомендуется использовать типовые механизмы. В 1С:ERP для этого предусмотрены специализированные функции в общих модулях. Посмотрим на пример вызова функции для получения цен:


// Пример получения цен через типовой механизм
ПараметрыЗапросаЦен = ПродажиСервис.ПараметрыЗапросаЦен();
ПараметрыЗапросаЦен.Дата = ТекущаяДата();
ПараметрыЗапросаЦен.ВидЦены = СсылкаНаВидЦены;
ПараметрыЗапросаЦен.Номенклатура = СсылкаНаТовар;

ТаблицаЦен = ПродажиСервис.ПолучитьЦеныНоменклатуры(ПараметрыЗапросаЦен);

Этот метод позволяет корректно обработать все условия, включая валюты и единицы измерения (упаковки). Выясним причину, почему это важно: цена может быть установлена за одну единицу хранения, а в документе использоваться упаковка из 10 штук — типовой механизм автоматически произведет пересчет.

Дополнительный механизм: Сопоставление номенклатуры контрагентов

Часто возникает задача найти цену по артикулу или наименованию, которое использует сам контрагент (поставщик или покупатель). Для этого в ERP используется регистр сведений НоменклатураКонтрагентов.

Рассмотрим ситуацию: поставщик присылает прайс-лист, где товар называется «Винт М8», а в вашей базе он значится как «Болт оцинкованный 8мм». Чтобы система понимала, для какого именно вашего товара регистрируется цена, в регистре НоменклатураКонтрагентов хранится связь между вашей позицией и идентификатором в базе контрагента.

При заполнении табличных частей документов через обработку «Прайс-лист поставщика» система сначала ищет соответствие в этом регистре, а затем обращается к ЦеныНоменклатурыПоставщиков для получения или записи данных.

Итоги и рекомендации

Подводя итог, можно выделить следующие правила поиска цен в 1С:ERP:

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

← На главную