К статье
Практический материал

Торговля и Склад · 8 мин

Как получить цены в 1С: интерфейс, запросы и программные способы

Как получить цены в 1С: просмотр в интерфейсе, установка цен номенклатуры, запросы к регистру, программное получение цены и типичные ошибки.

Цены в типовых конфигурациях 1С (Управление торговлей, Комплексная автоматизация, ERP, Розница) хранятся не в карточке товара, а в отдельном регистре сведений «Цены номенклатуры». Поэтому получить цену можно несколькими путями: через интерфейс документа установки цен, через отчёты и прайс-лист, через консоль запросов или программно — встроенными функциями. Выбор способа зависит от задачи: разовая проверка, массовый анализ или интеграция в обработку.

Прежде чем получать цены, важно понимать, что в 1С действует механизм видов цен: один и тот же товар может иметь закупочную, оптовую, розничную и другие цены одновременно. Кроме того, цены действуют с определённой даты — регистр периодический, и запрос «какая цена у товара» всегда должен уточняться вопросом «на какую дату и какой вид цены».

Где в 1С хранятся цены и почему это важно

В типовых конфигурациях цены фиксируются документом «Установка цен номенклатуры». При проведении документ записывает строки в периодический регистр сведений «Цены номенклатуры» с измерениями «Номенклатура», «Вид цены» (в некоторых конфигурациях добавляется «Характеристика») и ресурсом «Цена». Сам документ после проведения можно изменить только перепроведением, поэтому история изменений цен сохраняется.

Периодичность регистра — «в пределах секунды», то есть теоретически цена может меняться несколько раз в день. На практике это редкость, но при программном получении цены всегда нужно указывать дату среза, иначе можно получить неактуальное значение. Если у товара несколько характеристик (размеры, цвета), цена может задаваться отдельно для каждой характеристики — это ещё один фильтр, который легко забыть.

Как посмотреть цены через интерфейс

Самый быстрый способ — открыть список документов «Установка цен номенклатуры» (раздел «Закупки» или «CRM и маркетинг» в зависимости от конфигурации) и найти последний документ по нужному виду цены. В табличной части видны товары, старые и новые цены, процент изменения. Через кнопку подбора можно добавить позиции и увидеть их текущие цены, не проводя документ.

Второй вариант — отчёт «Прайс-лист» (в УТ и ERP находится в разделе «CRM и маркетинг — Цены и скидки»). В настройках отчёта выбирается вид цены, дата, отбор по группам номенклатуры. Отчёт показывает картину на указанную дату и подходит для выгрузки в Excel. В карточке товара на закладке «Цены» также отображается история установленных цен по всем видам.

Просмотр текущей цены через интерфейс
  1. 1
    Откройте отчёт «Прайс-лист» в разделе ценообразования
  2. 2
    Укажите вид цены и дату, на которую нужны цены
  3. 3
    При необходимости установите отбор по номенклатуре или группе
  4. 4
    Сформируйте отчёт и проверьте, что колонка цен заполнена
  5. 5
    Если цены пустые — проверьте, есть ли проведённые документы установки цен на эту дату

Получение цен через запрос к регистру

Для анализа и выгрузок удобнее всего обращаться к регистру напрямую через виртуальную таблицу «СрезПоследних». Она возвращает актуальные цены на заданную дату по заданным условиям. Типовой запрос выглядит так:

ВЫБРАТЬ

Цены.Номенклатура КАК Номенклатура,

Цены.ВидЦены КАК ВидЦены,

Цены.Цена КАК Цена

ИЗ

РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Период, ВидЦены = &ВидЦены) КАК Цены

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

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

Программное получение цены в коде

В модуле формы или обработки цену получают через менеджер регистра. Базовый вариант — метод «ПолучитьПоследнее»:

Отбор = Новый Структура;

Отбор.Вставить("Номенклатура", Товар);

Отбор.Вставить("ВидЦены", ВидЦены);

Цена = РегистрыСведений.ЦеныНоменклатуры.ПолучитьПоследнее(ДатаОтсечки, Отбор).Цена;

Для массового получения цен по списку товаров «ПолучитьПоследнее» в цикле использовать нельзя — каждый вызов выполняет отдельный запрос к базе. Правильный подход: один запрос к срезу последних с отбором по списку номенклатуры, результат выгружается в таблицу значений, и дальше цены берутся из неё. При обработке тысяч позиций разница во времени может составлять минуты против секунд.

В типовых конфигурациях есть готовые механизмы ценообразования: например, в УТ 11 используется общий модуль работы с ценами, который учитывает не только регистр, но и соглашения с клиентами, скидки и округления. Если дорабатываете типовую конфигурацию, сначала проверьте наличие таких функций — самописное чтение регистра может игнорировать правила округления и валюту вида цены.

Цены в соглашениях и для контрагентов

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

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

Способы получения цен

Отчёт «Прайс-лист»

Подходит для разового просмотра и выгрузки в Excel; не требует навыков запросов, но ограничен настройками отчёта

Консоль запросов со срезом последних

Гибкий анализ и выгрузка произвольных наборов данных; требует понимания структуры регистра

Программное получение

Для обработок, обменов и интеграций; требует контроля производительности и учёта механизмов конфигурации

Проверка результата и типичные ошибки

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

Типичные ошибки
01
Не указана дата среза — получена цена на текущую дату вместо нужной, итоги анализа искажены
02
Не учтён вид цены — в выгрузке смешались закупочные и розничные цены
03
Игнорирование характеристик номенклатуры — часть позиций осталась без цен
04
Получение цен в цикле через ПолучитьПоследнее — обработка тысяч позиций занимает часы
05
Сравнение цен из регистра с ценами из документов продаж без учёта скидок — ложные выводы о расхождениях
Контрольные точки

Как проверить результат

Совпадение с документом установки цен
Норма

Цены в выгрузке равны ценам последнего проведённого документа

Тревожный признак

Значения расходятся — проверьте дату среза и вид цены

Полнота выборки
Норма

Все позиции списка получили цены

Тревожный признак

Часть товаров с пустой ценой — возможно, цена задана по характеристикам или другому виду цены

Валюта цены
Норма

Валюта вида цены соответствует ожидаемой

Тревожный признак

Цены в другой валюте без пересчёта — добавьте конвертацию по курсу на дату

FAQ

Почему запрос возвращает пустую цену, хотя в прайсе она есть?

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

Как получить цены на прошлую дату?

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

Можно ли получить цены без документа установки цен?

Нет, регистр заполняется только проведением документа «Установка цен номенклатуры» (или эквивалентного документа при загрузке через обмен). Если документов нет — регистр пуст, и получать цены неоткуда.

Чем отличается цена в регистре от цены в документе продажи?

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

Как выгрузить цены в Excel для поставщика или клиента?

Проще всего сформировать отчёт «Прайс-лист» с нужным видом цены и сохранить его в файл. Для регулярной выгрузки по своему шаблону используйте консоль запросов с выгрузкой результата в табличный документ и последующим сохранением.

Цены в валюте, а прайс нужен в рублях — что делать?

Вид цены может быть заведён в валюте. В запросе добавьте соединение с регистром курсов валют и умножьте цену на курс (и разделите на кратность) на дату среза. В отчёте «Прайс-лист» типовые конфигурации часто умеют пересчитывать валюту автоматически — проверьте настройки отчёта.