Обмен ценами — самый чувствительный участок связки Битрикс и МойСклад: ошибка мгновенно видна покупателю и бьёт по марже. Разберём, как сопоставить типы цен, перенести ценовые группы и скидки и не устроить хаос с приоритетами.
Как устроены цены в обеих системах
Прежде чем настраивать обмен, надо понять, что модели ценообразования в системах разные. В МойСклад у товара есть набор типов цен (розничная, оптовая, закупочная и произвольные), задаваемых в справочнике. В 1С-Битрикс цены хранятся в модуле catalog и привязаны к типам цен и группам пользователей через права на покупку.
- МойСклад: тип цены — атрибут товара, значение в валюте.
- Битрикс: тип цены (
CATALOG_GROUP) + права групп пользователей на покупку по этому типу.
Задача обмена — сопоставить типы цен один к одному и решить, какая система является мастером цены. Чаще всего мастер — учётная система (МойСклад), а сайт цены только отображает.
Сопоставление типов цен
Ядро настройки — таблица соответствия типов цен МойСклад и Битрикс. Каждому типу цены на сайте назначается источник из МойСклад.
| Тип цены МойСклад | Тип цены Битрикс | Кто видит |
|---|---|---|
| Цена продажи | BASE (Розница) | Все пользователи |
| Оптовая | OPT | Группа «Оптовики» |
| Дилерская | DEALER | Группа «Дилеры» |
| Закупочная | — (не выгружать) | Никто |
Закупочные и внутренние цены на сайт не выгружаются никогда — это чувствительные данные. В маппинге такие типы явно помечают как игнорируемые.
Ценовые группы и персональные цены
В B2B редко хватает двух-трёх типов цен. Нужны ценовые группы и иногда персональные цены под контрагента. Здесь стандартный обмен по типам цен упирается в потолок.
- Ценовые группы МойСклад маппятся на типы цен Битрикс, каждый из которых виден своей группе пользователей.
- Персональная цена под конкретного клиента — это уже не тип цены, а индивидуальная скидка или отдельный прайс, который выгружают в Highload-блок или свойство и применяют в корзине.
- Привязка «пользователь → ценовая группа» ведётся на стороне сайта или подтягивается из CRM по внешнему коду контрагента.
Для персональных цен обычно применяют кастомный обработчик события OnGetOptimalPrice или правило корзины, которое подставляет цену из внешнего источника. Стандартного механизма «одна цена на одного клиента» в Битриксе нет.
Обмен скидками и правила приоритетов
Скидки — отдельная сущность. В Битриксе есть правила работы с корзиной (модуль sale), которые считаются на лету, и скидки на товар. Переносить ли скидки из МойСклад — вопрос архитектуры.
- Скидка уже в цене. Простейший путь: МойСклад отдаёт итоговую цену со скидкой, сайт её просто показывает. Минус — не видно «старой» цены.
- Скидка отдельным полем. Выгружаются базовая и акционная цена, сайт показывает зачёркнутую старую и новую.
- Скидка как правило корзины. Логика скидок остаётся на сайте, МойСклад отдаёт только базовые цены.
Ключевой риск — двойное применение скидки: она приехала уже в цене и ещё раз сработала правилом корзины. Поэтому фиксируют единый источник скидочной логики.
Округление, валюты и НДС
Технические детали, которые ломают итоговую цену чаще, чем логика. Их фиксируют в ТЗ на обмен.
- Округление. До каких знаков и по каким правилам. В Битриксе есть настройка округления цен в параметрах модуля
catalog; она должна совпадать с ожиданиями бизнеса. - Валюта. Если МойСклад ведёт цены в одной валюте, а сайт в другой, нужно решить, где происходит конвертация и по какому курсу.
- НДС. Цена «с НДС» или «без НДС» в источнике и на витрине — рассинхрон здесь даёт систематическую ошибку в чеке.
Отдельно проверяют, что цена ноль или пусто не выгружается как валидная — иначе товар уедет на сайт с ценой 0 и его купят даром. Такие позиции лучше снимать с публикации.
Частота и надёжность обмена цен
Цены меняются реже остатков, но обмен ими тяжелее, потому что затрагивает много типов. Практичный режим — инкрементальный обмен по изменённым позициям раз в час или по событию изменения цены в МойСклад.
- Полная переливка всех цен — только по регламенту (ночью) или при первичной загрузке.
- Инкремент — по флагу изменения или дате модификации товара.
- После обмена — контроль: доля товаров с нулевой ценой не должна расти.
Обязательно ведите лог изменений цен: что, когда и с какого на какое значение поменялось. При спорах с покупателем и разборе «почему продали дешевле» это единственный источник правды.
Итог
Надёжный обмен ценами и скидками между 1С-Битрикс и МойСклад строится на трёх решениях: чёткое сопоставление типов цен с правами групп, единый источник скидочной логики и аккуратная работа с округлением, валютой и НДС. Персональные цены и сложные скидки почти всегда требуют кастомной логики поверх стандартного обмена.
Мы в B2Bsite настраиваем ценовой обмен под B2B и розницу: сопоставляем типы цен и ценовые группы, реализуем персональные цены и дилерские прайсы, защищаем от двойных скидок и нулевых цен, добавляем логирование. Если цены на сайте расходятся с учётом — приведём их в порядок.
Частые вопросы
Какая система должна быть мастером цены?
Обычно учётная система — МойСклад, где цены формируются менеджерами. Сайт в этом случае цены только отображает и не редактирует, чтобы значения не расходились.
Как выгрузить оптовые цены только для оптовиков?
Сопоставить оптовый тип цены МойСклад с отдельным типом цены Битрикс и дать право покупки по нему только группе «Оптовики». Розничные пользователи этот тип не увидят.
Можно ли передавать персональные цены под контрагента?
Стандартного механизма нет, но реализуется кастомно: индивидуальные цены выгружают в Highload-блок или свойство и подставляют через обработчик OnGetOptimalPrice или правило корзины.
Почему на сайте появились товары с ценой 0?
Чаще всего в МойСклад у товара не задана цена нужного типа, и обмен выгрузил пустое значение как ноль. Такие позиции нужно фильтровать и снимать с публикации до появления корректной цены.
Как не допустить двойного применения скидки?
Зафиксировать единый источник скидочной логики: либо МойСклад отдаёт готовую цену со скидкой, либо скидку считает Битрикс на базовых ценах. Одновременно оба варианта включать нельзя.
Нужно ли выгружать закупочные цены на сайт?
Нет. Закупочные и внутренние цены — чувствительные данные, их явно исключают из маппинга и никогда не отдают на витрину.
Как часто синхронизировать цены?
Инкрементально по изменённым позициям раз в час или по событию изменения цены. Полную переливку всех цен делают по ночному регламенту или при первичной загрузке каталога.
Поможем с настройкой и поддержкой Интеграции и связки систем
Поможем с настройкой, доработкой и поддержкой Интеграции и связки систем.