Почему не выводятся розничные цены в приходной накладной 1С:Розница и как это исправить?

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

В процессе работы с программой 1С:Розница (редакции 2.1 и 2.2) пользователи часто сталкиваются с ситуацией, когда в печатной форме «Приходная накладная (по розничным ценам)» документа поступления товаров колонки с розничными ценами и суммами остаются пустыми. При этом документы установки цен в системе присутствуют, а ценники печатаются корректно. Рассмотрим подробнее причины этой проблемы и разберем по шагам все способы её решения: от простых настроек до правки программного кода.

Причина 1: Нарушение хронологии документов (проблема «секунд»)

Проанализируем механику работы платформы 1С. Когда мы открываем печатную форму, система выполняет запрос к регистру сведений ЦеныНоменклатуры, чтобы получить срез последних цен на момент времени документа Поступление товаров. Основная сложность заключается в том, что по умолчанию запрос ищет цены, действующие строго до или в момент совершения операции.

Рассмотрим типичную ситуацию:

  1. Бухгалтер создает документ Поступление товаров в 12:00:00.
  2. На основании поступления создается Установка цен номенклатуры. Система записывает её текущим временем, например, в 12:00:05.
  3. При попытке напечатать накладную из документа поступления система «смотрит» в регистр на состояние в 12:00:00. В эту секунду новых розничных цен еще не существовало, так как они появились лишь 5 секунд спустя.

Как исправить без программирования: Самый простой способ — изменить время документов вручную. Выясним, как это сделать правильно. Мы рекомендуем устанавливать время документа Установка цен номенклатуры на начало дня (00:00:00), а документ Поступление товаров оставлять текущим временем или записывать более поздним временем. В этом случае на момент прихода товара цены в системе уже будут «известны».

Причина 2: Использование механизма «Применение цен»

В конфигурации 1С:Розница 2.x существует важная функциональная опция, о которой часто забывают. Проверим настройки по пути: Администрирование — Маркетинг. Если там включен флаг «Использовать применение цен», то одного документа Установка цен номенклатуры недостаточно для того, чтобы цена стала действующей в конкретном магазине.

Разберем алгоритм действий в этом случае:

  1. После проведения установки цен необходимо создать документ Применение цен номенклатуры.
  2. Этот документ подтверждает, что новые цены вступили в силу именно для вашего магазина (или торгового зала).
  3. Только после проведения «Применения» отчет в приходной накладной сможет подтянуть актуальные данные.

Причина 3: Настройки правил ценообразования магазина

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

Проверим следующие настройки:

  1. Зайдем в карточку Магазина и убедимся, что в поле «Правило ценообразования» выбрано корректное значение.
  2. Перейдем в само Правило ценообразования и проверим, какой Вид цен там указан.
  3. В настройках самого Вида цен обязательно должен стоять флаг «Использовать при продаже».

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

Причина 4: Программная корректировка запроса в модуле менеджера

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

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

В старых релизах (например, 2.1.8.16) можно встретить жесткое условие соответствия периода. Мы можем изменить логику получения данных. Проанализируем пример кода:


// В запросе функции ПечатьНакладная ищем соединение:
|втВидыЦенПоПравилам КАК ВидыЦенПоПравилам
|ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
|ПО (ЦеныНоменклатуры.Период = ВидыЦенПоПравилам.Дата)

Зачастую замена знака = на >= помогает, но это может быть некорректно, если цены меняются несколько раз в день. Более правильным решением является использование объекта Граница в параметрах запроса, чтобы включить текущую секунду документа в выборку. В коде формирования параметров запроса следует использовать:


ПараметрыЗапроса.Вставить("Период", Новый Граница(ДатаДокумента, ВидГраницы.Включая));

Это гарантирует, что если Установка цен и Поступление проведены в одну и ту же секунду, цена будет подтянута в печатную форму.

Дополнительные нюансы: Характеристики и Переоценка

Рассмотрим еще два фактора, которые могут влиять на результат:

  1. Характеристики номенклатуры: Если в поступлении указан товар с характеристикой, а цена установлена только на номенклатуру (в целом), запрос может не найти точного соответствия. Убедитесь, что цены установлены корректно для всех уровней учета.
  2. Документ «Переоценка товаров в рознице»: В некоторых версиях 2.1, если склад имеет тип «Торговый зал» и ведется суммовой учет в розничных ценах, необходимо наличие документа переоценки. Он фиксирует изменение стоимости остатков на складе. Без него некоторые алгоритмы «Розницы» могут игнорировать новые цены при расчете итоговых сумм в накладной.

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

Подводя итог, можно сказать, что в 90% случаев проблема решается простым изменением времени документа Установка цен номенклатуры на более раннее. Однако для стабильной работы системы мы рекомендуем проверить настройки Правил ценообразования и Применения цен. Если же вы обладаете навыками разработки, внедрение использования Границы в запросе печатной формы раз и навсегда снимет вопрос о «лишних секундах» и ошибках пользователей при вводе документов.

← На главную