Розничная цена перестаёт быть числом, которое кто-то однажды проставил руками. Вы описываете правило: от какой цены считать, сколько наценить, до чего округлить, ниже какой границы не опускаться. Модуль применяет это правило ко всему каталогу и повторяет по расписанию.
Зачем это магазинуНаценка обычно живёт в голове у владельца и в чужом самописном скрипте: «электроника плюс 15, аксессуары плюс 40, но не ниже закупки и с окончанием на 90». Пока позиций сотня, это делается руками. На нескольких тысячах уже нет, и цены расходятся с задуманным тем сильнее, чем чаще приходит обмен из 1С.
Модуль превращает эту договорённость в настройку: наценка задана один раз, применяется одинаково ко всему каталогу и всегда объяснима. По любой цене видно, какое правило её посчитало и из чего.
Правило вместо разовой операцииПрофиль отвечает на два вопроса: какие товары и как считаем. Товары отбираются инфоблоком, разделами (с вложенными или без) и деревом условий И/ИЛИ по свойствам, ценам, датам.
Внутри профиля лежит таблица правил, упорядоченная вручную. Срабатывает первое подошедшее:
Наценка без границ ломает каталог на первом же нестандартном товаре. Поэтому у правила есть:
У правила есть срок действия. Надбавка к Новому году и скидка на две недели августа включаются и выключаются сами: правило вне срока в расчёте не участвует вовсе, а в списке правил помечено как недействующее, чтобы причину искали не в диапазонах.
Округление и красивые ценыШаблоны округления заводятся отдельно и переиспользуются профилями и правилами: шаг (до 1, 0.5, 10, 100) или окончание цены (…90, …99, …990, …999), направление вниз, вверх или по математическим правилам.
Сначала расчёт, потом установка ценРасчёт и запись цен это два разных действия. «Рассчитать» создаёт документ-черновик, цены в каталоге при этом не меняются.
У каждой строки есть колонка «Почему»: по какому правилу считалось, от какой базы, что дало округление и какой ограничитель сработал.
Дальше вы либо проводите документ целиком, либо снимаете отметки с отдельных строк. Товар, который не должен попадать под профиль никогда, добавляется в исключения профиля. Исключения уважает и ручной прогон, и автоматический.
Товары без базовой цены не получают ноль. Они попадают в срез ошибок и остаются нетронутыми.
Документ прогона и откатКаждый прогон сохраняется документом: профиль, снимок правил на момент расчёта, кто или что запустило, счётчики, все изменившиеся строки со значениями «было» и «стало».
Откат сверяет текущую цену со значением «стало». Если после установки цену успели изменить руками или обменом, модуль не затирает её молча, а показывает конфликт и даёт выбрать: перезаписать или пропустить.
Срок хранения документов настраивается.
Автоматический пересчётРасписание задаётся или общим пресетом, или индивидуально у профиля. Помимо расписания пересчёт запускается по изменению цены-источника: изменившиеся товары попадают в очередь и обрабатываются пакетом с задержкой, поэтому обмен на несколько тысяч позиций не превращается в столько же прогонов.
У профиля есть период действия и режим сухого прогона: считать по расписанию, но цены не ставить, пока вы не посмотрите результат.
Как это работает с 1СЭто единственное место, где модуль требует от вас настройки, а не просто работает. Разобраться стоит до покупки.
Базовый обмен с 1С устроен так: он приносит свой набор типов цен и удаляет у товара все остальные, про которые не знает. Поэтому схема, при которой модуль наценивает ту же цену, которую обновляет 1С, нежизнеспособна в принципе: либо обмен затрёт расчёт, либо наценка ляжет на наценку и цены уедут в потолок за неделю.
Рабочая схема одна, развести владение:
| Тип цены | Кто владеет | Есть в выгрузке 1С |
|---|---|---|
| закупочная (или базовая из 1С) | 1С | да, это источник расчёта |
| розничная, та, что на витрине | модуль | нет |
То есть под витрину нужен отдельный тип цены, которого нет в обмене. Модуль его защищает: при обмене попытка удалить цену такого типа отклоняется, сам обмен при этом проходит успешно и ничего не ломает.
Если приёмником выбрать тип цены, который приходит из 1С, форма профиля предупредит об этом сразу: такой расчёт будет затираться очередным обменом, и никакая защита не поможет, потому что обмен не удаляет эту цену, а перезаписывает.
Совпадение источника и приёмника запрещено на уровне формы.
Торговые предложенияДля товаров с торговыми предложениями цена считается и ставится на предложения. Цену родителя Битрикс вычисляет из них сам, и записывать её туда бесполезно: ядро всё равно перезапишет её в том же запросе. Модуль это учитывает, режим по умолчанию сам определяет, куда класть цену, так что простые товары и товары с предложениями можно обрабатывать одним профилем.
МультивалютностьЦены-источники в другой валюте приводятся к валюте профиля, поэтому диапазоны правил остаются осмысленными на мультивалютном каталоге.
Кто может считать, а кто ставить ценыУ модуля свои уровни доступа. Они раздаются группам пользователей на вкладке «Доступ» в настройках модуля:
Что делали с ценами, видно в журнале событий модуля: расчёты, установки и откаты, вручную и автоматически, с отбором по профилю и периоду, счётчиками обработанных и изменённых позиций и ссылкой на документ прогона. Записи о том, что цены записаны или откачены, дублируются в журнал ядра Битрикса, чтобы след остался и там, где его ищет администратор сайта.
О результатах автоматических прогонов модуль сообщает сам: уведомлением наверху административной панели, письмом на указанные адреса или и тем и другим сразу. Повод настраивается: каждый прогон, только прогоны с изменениями и ошибками, только ошибки. О ручном прогоне модуль не пишет, его результат человек и так видит на экране.
Совместимость и требованияУстановка. «Настройки» → «Marketplace» → «Установить решение». После установки в административной панели появляется раздел «Магазин» → «Priceman» с пунктами «Профили», «Шаблоны округления», «Расписания», «Журнал документов», «Журнал событий».
Шаг 1. Заведите тип цены под витрину, до первого расчёта.
«Магазин» → «Настройки» → «Типы цен». Нужен отдельный тип цены, которого нет в выгрузке из 1С: именно его будет считать модуль и показывать витрина. Тип цены, который приходит из обмена, приёмником быть не может, обмен перезапишет расчёт своими значениями. Форма профиля предупредит об этом сразу, если такой выбрать.
Шаг 2. Создайте профиль.
«Магазин» → «Priceman» → «Профили» → «Добавить профиль». Три вкладки:
Шаг 3. Рассчитайте, не устанавливая цены.
В списке профилей есть действие «Рассчитать цены». Расчёт создаёт документ-черновик и ничего не меняет в каталоге. В документе смотрите срезы (изменились, подешевело, подорожало, ошибки, не рассчитано), колонку «Почему» по любой строке и, если нужно, выгрузку в CSV.
Шаг 4. Установите цены.
В самом документе есть кнопка «Установить цены». Можно снять отметки с отдельных строк; товар, который не должен попадать под профиль никогда, отмечается прямо в строке действием «исключить из профиля». Если результат не устроил, рядом лежит «Откатить цены»: откат сверяет текущую цену со значением «стало» и не затирает молча то, что успели изменить руками или обменом.
Шаг 5. Включите автоматический пересчёт.
Расписание задаётся у профиля или общим пресетом: «Магазин» → «Priceman» → «Расписания». Отдельно работает пересчёт по изменению цены-источника: изменившиеся товары попадают в очередь и обрабатываются пакетом после того, как обмен закончился.
Автоматический пересчёт выполняется агентом, поэтому агенты должны выполняться на кроне: «Настройки» → «Настройки продукта» → «Агенты и очередь событий». Если агенты работают в режиме хитов, модуль напишет об этом на своей странице настроек.
Общие настройки лежат в «Настройки» → «Настройки продукта» → «Настройки модулей» → «Priceman»: пауза после изменения цен и частота агента, сроки хранения документов и журнала событий, вкладка «Уведомления» (кому и по какому поводу писать о результатах автоматических прогонов) и вкладка «Доступ» с уровнями прав для групп пользователей.
Расчёту достаточно уровня «Настройка профилей и расчёт»; «Установить цены» и «Откатить» доступны только на уровне «Полный доступ».