В процессе работы с программой 1С:Розница (редакции 2.1 и 2.2) пользователи часто сталкиваются с ситуацией, когда в печатной форме «Приходная накладная (по розничным ценам)» документа поступления товаров колонки с розничными ценами и суммами остаются пустыми. При этом документы установки цен в системе присутствуют, а ценники печатаются корректно. Рассмотрим подробнее причины этой проблемы и разберем по шагам все способы её решения: от простых настроек до правки программного кода.
Проанализируем механику работы платформы 1С. Когда мы открываем печатную форму, система выполняет запрос к регистру сведений ЦеныНоменклатуры, чтобы получить срез последних цен на момент времени документа Поступление товаров. Основная сложность заключается в том, что по умолчанию запрос ищет цены, действующие строго до или в момент совершения операции.
Рассмотрим типичную ситуацию:
Поступление товаров в 12:00:00.Установка цен номенклатуры. Система записывает её текущим временем, например, в 12:00:05.Как исправить без программирования:
Самый простой способ — изменить время документов вручную. Выясним, как это сделать правильно. Мы рекомендуем устанавливать время документа Установка цен номенклатуры на начало дня (00:00:00), а документ Поступление товаров оставлять текущим временем или записывать более поздним временем. В этом случае на момент прихода товара цены в системе уже будут «известны».
В конфигурации 1С:Розница 2.x существует важная функциональная опция, о которой часто забывают. Проверим настройки по пути: Администрирование — Маркетинг. Если там включен флаг «Использовать применение цен», то одного документа Установка цен номенклатуры недостаточно для того, чтобы цена стала действующей в конкретном магазине.
Разберем алгоритм действий в этом случае:
Применение цен номенклатуры.Проанализируем ситуацию, когда время выставлено верно, но цены все равно не выводятся. Печатная форма приходной накладной жестко привязана к настройкам магазина, указанного в документе. Система должна понимать, какой именно вид цен (из множества возможных) является для данного магазина «розничным».
Проверим следующие настройки:
Если связь между магазином и видом цен разорвана или не настроена, алгоритм печати просто не знает, из какой колонки регистра брать данные.
Если вы опытный пользователь или программист и устали постоянно следить за секундами в документах, можно внести небольшое изменение в код конфигурации. Это позволит системе видеть цены, установленные даже в ту же самую секунду, что и приход.
Посмотрим на пример исправления в Модуле менеджера документа Поступление товаров. Нам необходимо найти функцию ПечатьНакладная. Проблема часто кроется в условии соединения таблиц в запросе. Найдем фрагмент, где происходит соединение с регистром цен.
В старых релизах (например, 2.1.8.16) можно встретить жесткое условие соответствия периода. Мы можем изменить логику получения данных. Проанализируем пример кода:
// В запросе функции ПечатьНакладная ищем соединение:
|втВидыЦенПоПравилам КАК ВидыЦенПоПравилам
|ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
|ПО (ЦеныНоменклатуры.Период = ВидыЦенПоПравилам.Дата)
Зачастую замена знака = на >= помогает, но это может быть некорректно, если цены меняются несколько раз в день. Более правильным решением является использование объекта Граница в параметрах запроса, чтобы включить текущую секунду документа в выборку. В коде формирования параметров запроса следует использовать:
ПараметрыЗапроса.Вставить("Период", Новый Граница(ДатаДокумента, ВидГраницы.Включая));
Это гарантирует, что если Установка цен и Поступление проведены в одну и ту же секунду, цена будет подтянута в печатную форму.
Рассмотрим еще два фактора, которые могут влиять на результат:
Подводя итог, можно сказать, что в 90% случаев проблема решается простым изменением времени документа Установка цен номенклатуры на более раннее. Однако для стабильной работы системы мы рекомендуем проверить настройки Правил ценообразования и Применения цен. Если же вы обладаете навыками разработки, внедрение использования Границы в запросе печатной формы раз и навсегда снимет вопрос о «лишних секундах» и ошибках пользователей при вводе документов.