Почему при печати ценников в 1С отображается розничная цена вместо акционной?

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

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

1. Анализ механизмов миграции данных в РИБ

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

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

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

2. Проверка настроек типа цен у пользователя

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

Чтобы исправить это, выполним следующие действия:

  1. Перейдем в раздел Администрирование — Настройки пользователей и прав.
  2. Откроем карточку конкретного пользователя и перейдем в Настройки пользователя.
  3. Найдем пункт Основной тип цен продажи. Если там указано значение «Розничная», обработка печати будет автоматически подставлять именно её, игнорируя наличие более актуальных акционных цен в регистрах.

3. Особенности логики печати из карточки номенклатуры

Разберем важный технический нюанс. Печать из документа «Установка цен номенклатуры» или «Маркетинговая акция» всегда берет данные из самого документа. Однако печать «из карточки», о которой упоминает пользователь, обращается к функции получения среза последних цен на текущую дату.

Посмотрим на пример типичного запроса, который отрабатывает в фоновом режиме при формировании ценника:


ВЫБРАТЬ
    ЦеныНоменклатурыСрезПоследних.Цена КАК АктуальнаяЦена,
    ЦеныНоменклатурыСрезПоследних.ТипЦен КАК ТипЦен
ИЗ
    РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Период, Номенклатура = &Номенклатура) КАК ЦеныНоменклатурыСрезПоследних

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

4. Влияние локального кэша конфигурации

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

Для решения проблемы попробуем выполнить очистку кэша:

  1. Удалим базу из списка в окне запуска 1С и добавим её заново.
  2. Либо вручную очистим папки %AppData%\1C\1cv8 и %LocalAppData%\1C\1cv8.

5. Разница во времени сервера и клиента

Выясним еще одну неочевидную причину. Метод СрезПоследних() крайне чувствителен к параметру даты. Если на рабочих станциях пользователей время спешит или отстает относительно сервера, запрос может выдавать разные результаты. Например, если акция начинается в 00:00:00, а на локальном ПК еще 23:55:00 предыдущего дня, ценник напечатает старую цену.

Рекомендуем всегда использовать серверное время для получения цен:


ТекущаяДатаСервера = ТекущаяДата(); // Выполнять на стороне сервера
Цена = РегистрыСведений.ЦеныНоменклатуры.СрезПоследних(ТекущаяДатаСервера, Новый Структура("Номенклатура", ВыбТовар));

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

← На главную