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