В процессе настройки 1С:Розница 2.2 пользователи часто сталкиваются с ситуацией, когда в Правилах ценообразования для конкретного магазина указаны дополнительные виды цен, но при попытке продать товар в Рабочем месте кассира (РМК) программа выдает ошибку или просит ввести цену вручную. Разберем подробно, почему так происходит, как устроена логика системы и какие существуют корректные способы решения этой задачи.
Первое и самое важное, что нам необходимо усвоить: вкладка Дополнительные виды цен в справочнике ПравилаЦенообразования не имеет никакого отношения к алгоритму автоматического поиска цены при подборе товара в чеке. Проанализируем её реальное назначение.
Эта настройка используется исключительно механизмом Распределенных Информационных Баз (РИБ). Когда система выполняет синхронизацию данных между центральным узлом и базой магазина, ей нужно понимать, какие записи регистра сведений ЦеныНоменклатуры следует «отправить» в этот магазин. По умолчанию передаются только те цены, которые указаны как основные. Если же в магазине используются маркетинговые акции (например, скидка «Спеццена» по определенному виду цен) или на ценниках должна печататься «старая» цена из другого вида цен, эти данные должны физически присутствовать в локальной базе магазина. Именно для этого мы указываем их в списке дополнительных — чтобы система «протолкнула» их через фильтры обмена.
Когда кассир сканирует штрихкод товара, система запускает поиск актуальной цены. Этот процесс строго регламентирован и не предполагает «перебора» всех доступных видов цен. Выясним порядок приоритетов:
Таким образом, «автоматического отката» к альтернативному виду цен в типовой конфигурации не существует.
Это наиболее правильный и методически верный способ решения проблемы, когда часть товаров в магазине должна продаваться по ценам «другого» магазина или склада. Рассмотрим пошагово, как это настроить:
УстановкаЦенНоменклатуры.Теперь при сканировании товара система увидит, что он входит в особую группу, и обратится к нужному виду цен, игнорируя основной вид из шапки правила.
Если нам нужно, чтобы в Магазине №1 цены всегда соответствовали Магазину №2, но при этом для некоторых позиций были свои исключения, воспользуемся механизмом расчетных цен. Проанализируем этот алгоритм:
ВидЦеныМагазин1.[ЦенаМагазина2].ВидЦеныМагазин1.Важный нюанс: несмотря на то что формула задана, 1С требует физического наличия записи в регистре цен. Поэтому нам все равно придется создавать документ УстановкаЦенНоменклатуры. Однако при его заполнении цены будут рассчитаны автоматически на основании данных второго магазина. Это избавляет от двойного ввода данных, но требует дисциплины в проведении документов.
Иногда проблему пытаются решить через маркетинговые акции. Посмотрим на этот вариант. В системе можно создать автоматическую скидку, типом которой будет Спеццена. В настройках такой скидки указывается вид цены, из которого нужно брать значение.
Почему это может быть плохим решением:
Если типовые настройки категорически не подходят, программист может вмешаться в работу системы через механизм расширений. Рассмотрим, в какую сторону смотреть специалисту. Основная логика получения цен сосредоточена в общих модулях, отвечающих за ценообразование (например, ЦенообразованиеВызовСервера или аналогичные в зависимости от версии).
Мы можем переопределить процедуру получения цены, добавив в неё условие: «если полученная цена равна 0, выполнить повторный запрос к регистру сведений ЦеныНоменклатуры, но уже с фильтром по одному из дополнительных видов цен». Пример логики (схематично):
// В расширении для модуля поиска цены
&После("ПолучитьЦенуНоменклатуры")
Процедура Расш_ПолучитьЦенуНоменклатуры(Товар, Правило, Цена)
Если Цена = 0 Тогда
// Получаем список дополнительных видов цен из правила
СписокДопЦен = Правило.ДополнительныеВидыЦен.ВыгрузитьКолонку("ВидЦены");
Для Каждого ТекВидЦены Из СписокДопЦен Цикл
НоваяЦена = ПолучитьЗначениеИзРегистра(Товар, ТекВидЦены);
Если НоваяЦена > 0 Тогда
Цена = НоваяЦена;
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Однако помните, что такое решение может замедлить работу РМК при массовом подборе товаров, так как системе придется выполнять несколько запросов к базе данных вместо одного.
Выясним еще одну причину, по которой цена может не подтягиваться. Если в настройках магазина включена опция Управлять ассортиментом, то одного лишь наличия цены недостаточно. Товар должен быть включен в документ ИзменениеАссортимента для данного магазина, и у него должен быть установлен статус «Разрешены закупки и продажи». Если товара нет в ассортименте магазина, система может блокировать получение его данных, включая цену, даже если она корректно установлена в регистре.
Таким образом, для стабильной работы ценообразования в 1С:Розница 2.2 мы рекомендуем придерживаться стандартной схемы: Ценовые группы + Уточнения в правилах. Это обеспечит прозрачность учета, корректную работу РИБ и отсутствие ошибок при продаже в РМК.