Каталог в 1С-Битрикс достаточно загрузить один раз, а вот цены и остатки меняются каждый день — и именно их обмен обновляет чаще всего. Разберём, как устроено регулярное обновление цен и наличия из 1С, как настроить сопоставление типов цен и поскладской учёт и почему обновлять только цены с остатками быстрее, чем гонять весь каталог.
Что именно обновляется: цены и остатки отдельно от каталога
В обмене по протоколу CommerceML 2 данные разделены на два потока. Структура каталога — разделы, свойства, названия и характеристики товаров — едет в файле import.xml. А то, что меняется постоянно, лежит в файле предложений offers.xml: это цены, остатки и признак наличия для каждого торгового предложения (SKU).
Практический вывод: чтобы обновить цены и наличие, не нужно перевыгружать весь каталог. Достаточно передать один offers.xml с новыми значениями по существующим позициям. Битрикс находит товар по XML_ID, обновляет поля цены и количества в модуле catalog и не трогает описания, картинки и свойства.
- Цена пишется в таблицу цен каталога (
b_catalog_price) по каждому типу цены; - Остаток — в поле количества товара (
CATALOG_QUANTITY) или в разрезе складов; - Признак наличия Битрикс пересчитывает сам на основе остатка и настроек торгового каталога.
Как 1С передаёт цены и остатки
Инициатором обмена всегда выступает 1С. Типовая конфигурация (Управление торговлей, Комплексная автоматизация, ERP) обращается к публичной точке приёма /bitrix/admin/1c_exchange.php, авторизуется и передаёт файлы порциями. Сам приём встроен в модуль Торговый каталог — без подключённого модуля catalog цены и остатки писать просто некуда.
Для обновления наличия важно понимать логику сопоставления. Товар на сайте связывается с номенклатурой 1С по идентификатору XML_ID, а торговое предложение — по своему XML_ID вида GUID#GUID (родитель и характеристика). Если эти идентификаторы стабильны, обновление ложится точно на нужные карточки.
XML_ID инфоблока и элементов вручную. После смены идентификатора очередная выгрузка не найдёт товар по прежнему коду, обновит «мимо» и может создать дубль вместо обновления цены.Сопоставление типов цен
В 1С обычно заведено несколько видов цен (розничная, оптовая, закупочная, цены по сегментам), а в Битрикс им соответствуют типы цен из раздела Магазин → Настройки → Типы цен. Задача обмена — правильно связать одно с другим, иначе цена приедет «не туда» или не обновится вовсе.
| Сторона 1С | Сторона Битрикс |
|---|---|
| Вид цены «Розничная» | Базовый тип цены (BASE) |
| Вид цены «Оптовая» | Тип цены «Оптовая» |
| Валюта и НДС | Валюта каталога, ставка НДС товара |
Сопоставление настраивается на первом обмене — Битрикс предлагает связать пришедшие из offers.xml виды цен с существующими типами. Проверьте после первой выгрузки, что базовая цена (по ней считаются скидки и корзина) заполнена именно тем видом цены, который вы продаёте. Частая ошибка — на сайт приезжает закупочная цена вместо розничной.
Остатки и поскладской учёт
Простой сценарий — один общий остаток на товар. Тогда 1С выгружает суммарное количество, и оно ложится в поле количества карточки. Поведение сайта при нуле задаётся в Магазин → Настройки → Настройки модуля:
- Использовать складской учёт — включает разрез по складам вместо одного числа;
- Разрешить покупку при отсутствии товара — можно ли купить позицию с нулевым остатком;
- Отрицательные остатки — уходить количеству «в минус» или нет;
- Порог наличия — при каком остатке товар считается «под заказ».
Если в 1С ведётся несколько складов и это важно для покупателя, включите поскладской учёт и выгрузку складов на стороне 1С. Тогда остатки придут в разрезе складов (таблица b_catalog_store_product), а общий остаток Битрикс просуммирует автоматически.
Магазин → Склады.Частичная выгрузка и расписание
Полный обмен каталогом тяжёлый: картинки, свойства, описания, тысячи элементов. Для цен и остатков это лишнее. В типовых конфигурациях 1С есть режим выгрузки только изменений и отдельная настройка обмена, где можно отключить выгрузку каталога и оставить только предложения. Такой offers.xml проходит в разы быстрее и почти не грузит сайт.
Регулярность настраивается на стороне 1С регламентным заданием. Практичная схема — разнести два обмена по расписанию:
- Каталог — раз в сутки ночью, полной выгрузкой (структура, новые товары, картинки);
- Цены и остатки — каждые 15–60 минут, только
offers.xmlс изменениями.
Так витрина держит актуальное наличие в течение дня, а тяжёлая перестройка каталога не мешает покупателям в часы пик. Частоту подбирайте под оборот: для быстро расходуемых остатков имеет смысл 10–15 минут, для стабильного ассортимента хватает часа.
Кэш и отображение на витрине
Обмен обновил данные в базе — но покупатель видит витрину из кэша. Битрикс использует тегированный кэш каталога: при изменении элемента инфоблока связанные страницы должны сбрасываться автоматически. Чтобы это работало, тегированное кэширование должно быть включено в Настройки → Настройки продукта → Автокэширование, а компоненты каталога — настроены на сброс кэша по изменению.
Если новые цены и остатки «не видны» сразу после обмена, а появляются только после ручной очистки кэша, проверьте:
- включён ли тегированный кэш и поддерживает ли его хранилище (Redis/файлы);
- не стоит ли на каталоге композитный кэш с большим временем жизни;
- не кэширует ли цену CDN или внешний прокси перед сайтом.
Отдельно держите в уме витрины, которые кэшируют цену в своей вёрстке (быстрый заказ, блоки «хиты продаж») — их время жизни кэша тоже влияет на актуальность.
Типовые проблемы обновления
Большинство сбоев с ценами и остатками сводится к нескольким причинам:
- Цена не обновляется — не сопоставлен вид цены 1С с типом цены Битрикс, либо на сайт выгружается не тот вид цены;
- Остаток всегда ноль — включён складской учёт, но склады из 1С не выгружаются или неактивны;
- Товар «нельзя купить» — при нуле остатка не разрешена покупка отсутствующих, хотя по логике магазина должна быть под заказ;
- Изменения не видны на витрине — не сбрасывается тегированный или композитный кэш;
- Обмен обрывается — тайм-аут PHP на большом
offers.xml; уменьшите шаг импорта и размер пакета.
Диагностику начинайте с временных файлов выгрузки в /upload/1c_exchange/ или /upload/1c_catalog/ — по ним видно, что реально приехало от 1С. Дальше сверяйте цену и остаток в карточке товара с тем, что пришло в offers.xml: так сразу понятно, проблема в передаче или в отображении.
Итог
Регулярное обновление остатков и цен из 1С — это отдельный, лёгкий обмен файлом offers.xml, который не трогает структуру каталога. Ключевые вещи: стабильные XML_ID для точного попадания, корректное сопоставление видов цен с типами цен Битрикс, продуманный поскладской учёт и включённый тегированный кэш, чтобы новые данные сразу попадали на витрину. Разнесите тяжёлый обмен каталогом и частое обновление цен по разным расписаниям — и наличие будет актуальным весь день.
Если цены «уезжают», остатки не совпадают со складом или обмен обрывается на большом объёме, мы в B2Bsite разбираем сопоставление типов цен и складов под вашу конфигурацию 1С, настраиваем частичную выгрузку по расписанию и чиним сброс кэша, чтобы витрина показывала реальное наличие.
Частые вопросы
Нужно ли перевыгружать весь каталог, чтобы обновить цены и остатки?
Нет. Цены и остатки едут в файле offers.xml отдельно от структуры каталога. Достаточно передать обновлённые предложения по уже существующим товарам, не трогая описания и картинки.
Почему цена с сайта не совпадает с 1С?
Чаще всего неправильно сопоставлены виды цен: на сайт как базовая приходит не розничная, а другая цена. Проверьте связь типов цен в настройках обмена и то, какой вид цены выгружается из 1С.
Почему остатки везде показывают ноль?
Обычно включён складской учёт, но склады из 1С не выгружаются или неактивны в разделе Склады. Тогда остатки по складам не суммируются в общий остаток товара.
Как часто можно обновлять цены и остатки?
Обмен инициирует 1С по регламентному заданию. Для остатков практично 10–60 минут, отдельно от полного обмена каталогом, который достаточно запускать раз в сутки.
Новые цены не появляются на витрине сразу — почему?
Витрина отдаётся из кэша. Проверьте, что включён тегированный кэш каталога и не стоит композитный кэш с большим временем жизни, а также нет кэширования цены на CDN или прокси.
Можно ли выгружать только цены и остатки без картинок?
Да. В типовых конфигурациях 1С есть режим выгрузки только изменений и отдельная настройка обмена, где отключается выгрузка каталога. Такой offers.xml проходит быстро и слабо грузит сайт.
Как учитывать несколько складов?
Включите складской учёт в настройках торгового каталога и выгрузку складов на стороне 1С. Остатки придут в разрезе складов, а общий остаток Битрикс просуммирует автоматически.
Что делать, если обмен обрывается на большом offers.xml?
Уменьшите шаг импорта и размер пакета в настройках интеграции и увеличьте max_execution_time в PHP. Обмен пойдёт меньшими порциями за несколько шагов вместо одного.
Поможем с настройкой и поддержкой 1С-Битрикс: Управление сайтом
Поможем с настройкой, доработкой и поддержкой 1С-Битрикс: Управление сайтом.