Типы цен из 1С не появляются на сайте сами по себе: при обмене каждый тип цены переносится как отдельная цена каталога, и задача интегратора — заранее договориться, какой тип 1С соответствует какой цене инфоблока. Ошибка в этом сопоставлении приводит к тому, что покупатель видит закупочную или пустую цену.
Как устроено соответствие цен при обмене
В 1С у номенклатуры может быть несколько типов цен: розничная, оптовая, закупочная, цена по акции. В 1С-Битрикс им соответствуют типы цен каталога (сущность catalog_group), которые вы создаёте в разделе Магазин → Настройки → Типы цен. Обмен по протоколу CommerceML связывает эти две сущности по имени.
Ключевой момент: сопоставление идёт не по внутренним идентификаторам, а по названию типа цены. В XML-файле выгрузки (import.xml и особенно offers.xml) 1С передаёт блок <ТипыЦен> с наименованием каждого типа. При первой загрузке Битрикс создаёт одноимённый тип цены каталога автоматически, если его ещё нет.
Что настроить на стороне 1С
Прежде чем что-то делать в Битрикс, определитесь, какие типы цен вообще должны попадать на сайт. В обработке обмена (Администрирование → Обмен с сайтом или узел плана обмена) есть список типов цен для выгрузки — отметьте только нужные.
- Не выгружайте закупочную цену. Это частая утечка: закупка уходит в XML, попадает в отдельный тип цены и при неверной настройке показа отображается покупателю.
- Проверьте валюту типа цены. В блоке
<Цены>передаётся валюта; она должна существовать в справочнике валют Битрикс (Магазин → Настройки → Валюты), иначе цена не запишется. - Согласуйте налог (НДС). Цена может выгружаться с включённым или выделенным НДС — от этого зависит, нужно ли на сайте настраивать наценку налога поверх.
Стабильность имени типа цены — половина успеха. Договоритесь с бухгалтерией и 1С-программистом, что названия «Розничная», «Оптовая» и т.д. фиксируются и не редактируются.
Настройка на стороне 1С-Битрикс
После первой удачной загрузки зайдите в Магазин → Настройки → Типы цен — там появятся типы, пришедшие из 1С. Для каждого нужно проверить и настроить:
- Права на просмотр и покупку. В свойствах типа цены задаётся, какие группы пользователей его видят. Розничную открываем группе «Все пользователи», оптовую — только оптовикам, закупочную закрываем полностью.
- Базовый тип. Ровно один тип цены должен быть отмечен как базовый — от него считаются скидки и наценки. Обычно это розничная цена.
- Порядок и приоритет. Если у товара несколько цен, покупателю показывается минимальная доступная ему по правам — учитывайте это при настройке групп.
Само соответствие «тип цены 1С → тип цены каталога» хранится в служебной таблице модуля обмена и не требует ручного маппинга в интерфейсе — оно устанавливается по имени. Ручное вмешательство нужно лишь при рассинхронизации имён.
Пример карты соответствия
Перед внедрением полезно составить и согласовать простую таблицу — она станет опорным документом при отладке обмена.
| Тип цены в 1С | Тип цены каталога Битрикс | Кому виден |
|---|---|---|
| Розничная | BASE (базовая) | Все пользователи |
| Оптовая | OPT | Группа «Оптовики» |
| Цена по акции | SALE | Все пользователи |
| Закупочная | не выгружается | — |
Такую карту стоит держать вместе с настройками обмена: при любой правке цен на сайте видно, откуда пришло значение и кто за него отвечает.
Проверка через XML-выгрузку
Когда цены на сайте выглядят не так, как ожидалось, начинайте разбор с исходного XML. Файлы обмена лежат в каталоге /upload/1c_exchange/ (или в папке, указанной в настройках публичной части обмена). Откройте offers.xml и найдите блок:
<ТипыЦен><ТипЦены><Ид>…</Ид><Наименование>Розничная</Наименование></ТипЦены></ТипЦены>
Затем у конкретного товара сверьте блок <Цены><Цена>: внутри <ИдТипаЦены> ссылается на тот же идентификатор, а <ЦенаЗаЕдиницу> содержит значение. Если наименование в XML не совпадает с именем типа цены в Битрикс — вы нашли причину дубля.
Типовые ошибки и как их избежать
- Дубли типов цен. Появляются после переименования или смены регистра («Оптовая» и «оптовая»). Лечение: привести имена к единому виду и объединить цены, старый тип удалить.
- На сайте видна закупка. Забыли снять выгрузку закупочного типа или не закрыли его правами. Проверьте настройки выгрузки в 1С и права группы в Битрикс.
- Нулевые или пустые цены. Валюта из XML отсутствует в справочнике Битрикс, либо у товара в 1С не заполнен нужный тип цены.
- Скидки считаются неверно. Не назначен или назначен не тот базовый тип цены — правила скидок стартуют от него.
- Цена не обновляется. Товар не сматчился по внешнему коду, поэтому цена пишется «мимо» существующего элемента каталога.
Когда цен несколько
Отдельный сценарий — выгрузка нескольких типов цен одновременно (розница, опт, дилерская). Механизм тот же: каждый тип 1С становится своим типом каталога, а различает их покупатель по группе. Тонкость в том, что при большом числе типов растёт объём offers.xml и время загрузки, поэтому выгружайте только реально используемые цены.
Если логика ценообразования сложнее прямого соответствия (например, оптовая цена считается на сайте как розничная минус процент), одним маппингом не обойтись — потребуется настройка правил работы с ценами или доработка обработчика события OnSuccessCatalogImport1C. Детали разобраны в отдельной статье об обмене несколькими типами цен.
Итог
Соответствие типов цен 1С и сайта держится на трёх вещах: стабильных именах типов цен, аккуратном списке выгружаемых цен на стороне 1С и правильно розданных правах в каталоге Битрикс. Проверяйте связку по исходному XML, не выгружайте закупку и не переименовывайте типы цен «на живую» — тогда покупатель всегда видит корректную цену для своей группы.
Если обмен ценами настраивается на большом каталоге, с несколькими прайсами и группами клиентов, мы можем взять это на себя: настроим сопоставление, права и расписание, проверим выгрузку и возьмём интеграцию на сопровождение.
Частые вопросы
По какому признаку 1С-Битрикс связывает тип цены 1С с ценой каталога?
По наименованию типа цены, которое передаётся в блоке ТипыЦен XML-выгрузки. Внутренние идентификаторы при этом не сопоставляются, поэтому переименование типа разрывает связь.
Почему после выгрузки появились дубли типов цен?
Чаще всего из-за переименования типа цены в 1С или разницы в регистре. Битрикс воспринимает новое имя как новый тип и создаёт одноимённую копию. Нужно привести имена к единому виду и объединить цены.
Как не показать покупателям закупочную цену?
Не включайте закупочный тип в список выгрузки на стороне 1С, а если он уже пришёл на сайт — закройте его правами на просмотр для всех групп пользователей в настройках типа цены.
Что делать, если цены выгрузились нулевыми?
Проверьте, что валюта из XML есть в справочнике валют Битрикс и что у товара в 1С действительно заполнен нужный тип цены. Пустая цена в источнике даёт нулевую цену на сайте.
Какой тип цены должен быть базовым?
Ровно один — обычно розничный. От базового типа модуль каталога считает скидки и наценки, поэтому его отсутствие или неверный выбор ломает расчёт итоговой цены.
Нужно ли вручную настраивать маппинг цен в интерфейсе Битрикс?
Нет, при штатном обмене соответствие устанавливается автоматически по имени типа цены. Ручное вмешательство требуется только для устранения дублей и рассинхронизации имён.
Где посмотреть, какие типы цен реально пришли из 1С?
В исходном файле offers.xml из каталога /upload/1c_exchange/ (блок ТипыЦен) и в разделе Магазин → Настройки → Типы цен административной панели сайта.
Можно ли выгружать сразу несколько типов цен?
Да, каждый тип 1С станет отдельной ценой каталога, а показ регулируется правами групп пользователей. Выгружайте только используемые цены, чтобы не раздувать объём и время обмена.
Поможем с настройкой и поддержкой 1С-Битрикс: Управление сайтом
Поможем с настройкой, доработкой и поддержкой 1С-Битрикс: Управление сайтом.