Торговые предложения — это отдельный инфоблок, связанный с каталогом. Импорт SKU из CSV сложнее обычного, потому что каждое предложение нужно корректно привязать к родительскому товару и передать ему цену, остаток и свойства вроде цвета или размера.
Как устроены торговые предложения в Битрикс
Торговое предложение (SKU) в 1С-Битрикс — это не поле товара, а отдельный элемент отдельного инфоблока. Когда в настройках каталога вы включаете торговые предложения, модуль catalog создаёт второй инфоблок (например «Каталог (торговые предложения)») со своим IBLOCK_ID. Товар-родитель живёт в основном инфоблоке, а его вариации — в инфоблоке предложений.
Связь между ними держится на служебном свойстве CML2_LINK типа «Привязка к элементам инфоблока». Оно есть у каждого предложения и указывает на ID родительского товара. Цена и остаток предложения хранятся не в свойствах, а в таблицах каталога b_catalog_price и b_catalog_product. Поэтому импорт SKU из CSV — это одновременно работа с инфоблоком, привязкой и торговым каталогом.
Подготовка CSV-файла предложений
Файл предложений отличается от файла товаров: у каждой строки должен быть признак родителя, по которому предложение найдёт свой товар. Удобнее всего использовать внешний код (XML_ID) родительского элемента — он стабилен и не меняется при переносах.
Минимальный набор колонок для строки предложения:
- Артикул/внешний код предложения — уникальный
XML_IDсамого SKU, нужен для дедупликации; - Внешний код родителя — по нему заполняется
CML2_LINK; - Название — обычно дублирует товар или добавляет вариацию;
- Свойства предложения — цвет, размер, объём (по отдельной колонке на каждое);
- Цена и остаток — если они задаются на уровне SKU.
windows-1251 или UTF-8; в мастере это указывается явно. Разделителем по умолчанию идёт точка с запятой ;, а не запятая — иначе строки «съедут» на этапе разбора.Порядок загрузки: сначала товары, потом SKU
Предложение не может быть привязано к товару, которого ещё нет в базе. Поэтому импорт всегда идёт в два прохода:
- сначала импортируете товары в основной инфоблок каталога, обязательно проставляя каждому уникальный
XML_ID; - затем импортируете предложения в инфоблок SKU, привязывая их к уже существующим родителям.
Если файл один и содержит и товары, и вариации, его нужно разделить на два CSV — по инфоблокам. Смешать их в одном проходе мастера нельзя: мастер импортирует ровно в один выбранный инфоблок.
XML_ID, что и при первичной загрузке. Тогда повторный импорт обновит существующие SKU, а не создаст дубли.Настройка мастера импорта CSV
Инструмент находится в разделе Магазин → Настройки → Экспорт / импорт данных → Импорт (CSV) и работает на компоненте bitrix:catalog.import.csv. Пройти нужно несколько шагов:
- Файл и формат — указываете путь к
.csv, кодировку, разделитель полей и признак «первая строка — заголовки колонок»; - Инфоблок — выбираете именно инфоблок торговых предложений, а не основной каталог;
- Сопоставление колонок — каждой колонке CSV назначаете назначение: поле элемента, свойство, цена, количество или привязка.
Ключевое поле для дедупликации — «Внешний код» (XML_ID). Отметьте его как поле, по которому мастер ищет совпадения, чтобы обновлять предложения, а не плодить копии.
Привязка предложений к товарам через CML2_LINK
Это центральный момент всего импорта. В сопоставлении колонок найдите свойство CML2_LINK (в интерфейсе — «Привязка к товарам» или по имени свойства) и назначьте ему колонку с внешним кодом родителя.
Дальше важно выбрать режим поиска родителя: не по ID, а по внешнему коду. Мастер сопоставляет значение из CSV с XML_ID элементов основного каталога и подставляет найденный ID в привязку. Именно поэтому на шаге импорта товаров внешние коды обязательны и должны совпадать с колонкой родителя в файле предложений.
| Что в CSV | Куда сопоставляем | Как ищем родителя |
|---|---|---|
| Артикул SKU | Внешний код (XML_ID) | — |
| Код товара-родителя | CML2_LINK | по XML_ID каталога |
| Цвет, размер | Свойства предложения | — |
Цены, остатки и свойства предложений
Чтобы CSV передавал цену, в сопоставлении назначьте колонку типу «Цена» и выберите нужный тип цены (например «BASE» — базовая розничная). Остаток назначается типу «Количество» — он ляжет в b_catalog_product. Без этого предложение будет считаться нечисловым и, при включённом контроле остатков, окажется недоступным к покупке.
Свойства вариации (цвет, размер) должны заранее существовать как свойства инфоблока предложений. Мастер импорта не создаёт свойства сам — он только заполняет уже готовые. Для свойств типа «список» удобнее включить автодобавление новых значений, иначе неизвестные варианты не запишутся.
- цена — тип «Цена», привязка к типу цены;
- остаток — тип «Количество»;
- цвет/размер — существующие свойства инфоблока SKU;
- вес, штрихкод — поля торгового каталога, если заполняете.
Сохранение профиля и повторный импорт
Всю карту сопоставления не нужно настраивать каждый раз заново. На последнем шаге мастер предлагает сохранить настройки импорта — так рождается профиль, который потом запускается одной кнопкой или по расписанию через агент/задачу на cron.
Для регулярной подгрузки цен и остатков достаточно урезанного файла: внешний код SKU, цена, количество. Профиль с включённым обновлением по XML_ID найдёт существующие предложения и обновит только эти поля, не трогая свойства и привязки.
Итог
Импорт торговых предложений из CSV в 1С-Битрикс держится на трёх вещах: правильном порядке загрузки (сначала товары, потом SKU), стабильных внешних кодах и корректной привязке CML2_LINK по XML_ID родителя. Добавьте к этому назначение цен и остатков через торговый каталог и сохранённый профиль — и получите повторяемый процесс без дублей и «висящих» вариаций.
Если каталог большой, со сложной размерной сеткой или подтягивается из 1С, мы в B2Bsite настраиваем сопоставление, привязки и автоматический обмен так, чтобы предложения обновлялись без ручной правки. Поможем спроектировать структуру инфоблоков и наладить стабильную выгрузку.
Частые вопросы
Чем импорт торговых предложений отличается от импорта товаров?
Предложения загружаются в отдельный инфоблок SKU, а не в основной каталог. Каждую строку нужно привязать к родительскому товару через свойство CML2_LINK, поэтому файл содержит колонку с внешним кодом родителя.
Почему предложения не отображаются в карточке товара?
Чаще всего не заполнилась привязка CML2_LINK: родитель не найден по внешнему коду. Проверьте, что товары импортированы раньше предложений и их XML_ID совпадает со значением в колонке родителя.
По какому полю привязывать SKU к товару?
Надёжнее всего по внешнему коду (XML_ID) родительского элемента. В мастере для CML2_LINK выбирается режим поиска родителя по внешнему коду, а не по внутреннему ID, который меняется между базами.
Можно ли загрузить товары и предложения одним файлом?
Нет. Мастер импортирует ровно в один выбранный инфоблок, поэтому файл делят на два CSV: отдельно товары в основной каталог, отдельно предложения в инфоблок SKU.
Как передать цену и остаток предложения?
В сопоставлении колонок назначьте одну колонку типу «Цена» с нужным типом цены, а другую — типу «Количество». Эти данные ложатся в таблицы торгового каталога, а не в свойства инфоблока.
Почему не заполнились свойства цвет и размер?
Мастер импорта не создаёт свойства сам — они должны заранее существовать в инфоблоке предложений. Для свойств-списков включите автодобавление новых значений, иначе неизвестные варианты не запишутся.
Как избежать дублей при повторном импорте?
Используйте внешний код (XML_ID) как ключ дедупликации и тот же XML_ID, что и при первой загрузке. Тогда повторный импорт обновит существующие предложения вместо создания копий.
Можно ли автоматизировать регулярную загрузку?
Да. На последнем шаге сохраните настройки импорта в профиль и запускайте его по расписанию через агент или cron. Для обновления цен и остатков достаточно урезанного файла с внешним кодом, ценой и количеством.
Поможем с настройкой и поддержкой 1С-Битрикс: Управление сайтом
Поможем с настройкой, доработкой и поддержкой 1С-Битрикс: Управление сайтом.