БесплатноБесплатный аудит сайта и кода на 1С-Битрикс при заказе доработки или поддержки

Импорт каталога из Excel и CSV в 1С-Битрикс: загрузка и обновление товаров

Импорт каталога из Excel и CSV в 1С-Битрикс: загрузка и обновление товаров, сопоставление колонок файла со свойствами инфоблока

Каталог интернет-магазина почти всегда начинается с таблицы. У поставщика есть прайс в Excel, у контент-менеджера — выгрузка с описаниями, у товароведа — файл остатков. И рано или поздно возникает один и тот же вопрос: как превратить эти столбцы «артикул, название, цена, остаток, картинка» в аккуратные карточки товаров на сайте — и, что важнее, как потом обновлять их, не создавая дублей и не ломая уже наведённый порядок. В 1С-Битрикс для этого есть штатный инструмент — импорт из CSV в модуле «Информационные блоки», плюс несколько правил, без которых любая загрузка превращается в «крякозябры» и размноженные товары.

В этой статье разберём импорт каталога из Excel и CSV без общих слов: чем CSV отличается от .xlsx и как одно превратить в другое, как устроено сопоставление колонок файла со свойствами инфоблока, как настроить обновление по артикулу, чтобы повторная загрузка правила существующие карточки, а не плодила новые, как быть с кодировкой, разделителями, торговыми предложениями и картинками, когда штатного импорта уже мало и пора переходить на обмен с 1С, и как всё это безопасно откатить. Материал — выжимка из наших внедрений по разработке каталога товаров на 1С-Битрикс, где загрузка и регулярное обновление ассортимента — одна из первых задач любого проекта.

Коротко

  • Штатный импорт в 1С-Битрикс читает CSV, а не .xls/.xlsx: Excel сначала сохраняют как CSV.
  • Кодировка файла и кодировка в мастере импорта должны совпадать, иначе кириллица «поедет».
  • Чтобы повторный импорт обновлял товары, а не плодил дубли, нужен стабильный ключ — обычно артикул в XML_ID.
  • Сопоставление колонок файла со свойствами инфоблока — центральный шаг, его настраивают вручную в мастере.
  • Первый импорт всегда делают на копии и после резервной копии базы; полному файлу предшествует прогон фрагмента.
  • Разовая загрузка — это CSV; регулярное обновление с вариациями и остатками — повод для обмена по CommerceML.

Что такое штатный импорт каталога в 1С-Битрикс

Импорт каталога — это загрузка данных о товарах из внешнего файла в инфоблок 1С-Битрикс. В штатной поставке за это отвечает модуль «Информационные блоки»: у любого инфоблока в административной части есть действие «Импорт из CSV», которое читает текстовый файл, разбирает его на строки и колонки и раскладывает значения по полям и свойствам элементов. Инфоблок при этом — обычное хранилище элементов Битрикса, а товар — это элемент инфоблока, у которого дополнительно включён торговый каталог (цена, остаток, складские поля).

Ключевое слово здесь — штатный. Речь именно о встроенном механизме, который не требует сторонних модулей и работает в любой редакции с инфоблоками. Он умеет создавать новые элементы, обновлять существующие, раскладывать значения по свойствам, привязывать разделы и подтягивать картинки по ссылкам. Взамен он ждёт от вас аккуратно подготовленный CSV и правильно настроенное сопоставление колонок — и то, и другое целиком на стороне человека, который запускает импорт.

Важно сразу разделить два процесса, которые часто путают. Первый — первичное наполнение: каталог пустой, и мы заливаем в него товары «с нуля». Второй — обновление: товары уже есть, и мы хотим освежить цены, остатки, описания или добавить новинки, не трогая остальное. Технически это один и тот же импорт из CSV, но настраивается он по-разному, и главная разница — в наличии стабильного идентификатора, по которому Битрикс понимает, обновлять существующий товар или создавать новый. Именно вокруг этого идентификатора крутится половина статьи, потому что от него зависит, будет у вас чистый каталог или свалка дублей.

Терминология: «импорт» и «загрузка» — заливка данных из файла в каталог. «Обновление прайса» — частный случай импорта, когда меняются в основном цены и остатки уже существующих товаров. «Обмен» (по CommerceML) — это отдельный автоматический протокол между 1С и Битриксом, а не то же самое, что импорт CSV. В обсуждении с 1С-программистом полезно называть вещи точно, чтобы не смешивать разовую загрузку файла и настроенный обмен.
Excel .xlsx · прайс CSV UTF-8 · разделитель Сопоставление колонки → свойства Инфоблок товары каталога сохранить мастер импорта Путь данных при импорте каталога
Схема: таблица из Excel сохраняется в CSV, в мастере импорта колонки сопоставляются со свойствами инфоблока, и данные раскладываются по карточкам товаров.

Excel или CSV: что именно грузит Битрикс

Первое, обо что спотыкаются, — попытка загрузить в Битрикс файл .xlsx напрямую. Штатный модуль «Информационные блоки» этого не умеет: он читает CSV (Comma-Separated Values) — простой текстовый формат, где строки таблицы разделены переносами, а колонки — специальным символом-разделителем. Excel-файлы .xls и .xlsx — это бинарные (или упакованные) форматы со стилями, формулами и листами; штатный импорт их не понимает.

Отсюда практическое правило: Excel готовит данные, CSV их переносит. Вы верстаете и вычищаете прайс в привычном Excel или Google Таблицах, а затем сохраняете результат в CSV и уже этот файл отдаёте Битриксу. Промежуточный CSV — не костыль, а нормальная часть процесса, и относиться к нему нужно так же внимательно, как к самой таблице.

Чем CSV удобен и чем опасен одновременно — он предельно простой. В нём нет типов данных, форматов ячеек и защиты: только текст, разделители и переносы строк. Из-за этого:

Вывод простой: CSV — рабочий и надёжный формат для импорта, но он требует дисциплины на этапе сохранения. Большинство проблем импорта рождается не в самом Битриксе, а в том, как файл был выгружен из Excel.

Как из Excel получить правильный CSV

Сохранение таблицы в CSV кажется тривиальным — «Файл → Сохранить как → CSV», — но именно здесь закладываются будущие ошибки. Разберём порядок, который даёт предсказуемый результат.

  1. Приведите таблицу к «плоскому» виду. Одна строка — один товар (или одно торговое предложение). Уберите объединённые ячейки, промежуточные заголовки, пустые строки-разделители и формулы: в CSV попадут только значения, а «красота» разметки потеряется.
  2. Зафиксируйте текстом «опасные» поля. Артикул, штрихкод, код — задайте этим колонкам текстовый формат ещё до сохранения, чтобы Excel не срезал ведущие нули и не переводил длинные числа в экспоненту.
  3. Проверьте первую строку — заголовки. Понятные заголовки колонок (артикул, название, цена, остаток, раздел, картинка) сильно облегчат сопоставление в мастере импорта. Позже вы сможете указать Битриксу, что первую строку нужно пропустить как шапку.
  4. Сохраните как CSV с нужной кодировкой. В Excel выбирайте вариант «CSV UTF-8», если он есть, — он корректно пишет кириллицу. Классический «CSV (разделители — запятые)» в русской локали часто сохраняет в Windows-1251 и с точкой с запятой; это тоже рабочий вариант, но кодировку и разделитель нужно запомнить, чтобы выставить те же в мастере импорта.
  5. Откройте получившийся CSV текстовым редактором. Не Excel'ем, а «Блокнотом» или редактором кода: так вы своими глазами увидите реальный разделитель, увидите, обрамлены ли значения кавычками, и заметите «крякозябры» до загрузки, а не после.

Отдельно про Google Таблицы: они экспортируют CSV в UTF-8 с запятой в качестве разделителя — это предсказуемо и обычно удобнее, чем локализованный экспорт Excel. Если команда часто готовит прайсы, единый инструмент и единый формат выгрузки экономят массу времени на разборе «почему в этот раз всё съехало».

Совет: заведите один эталонный шаблон файла — фиксированный порядок колонок, заголовки, кодировка и разделитель. Тогда любой новый прайс приводится к шаблону, а настройки мастера импорта в Битриксе можно сохранить и переиспользовать. Меняющаяся от раза к разу структура файла — главный источник ручной возни и ошибок при регулярных загрузках.

Кодировка и разделители: причина «крякозябр»

Если после импорта в карточках вместо русских букв стоят «Ð¢Ð¾Ð²Ð°Ñ€» или «Òîâàð», дело почти всегда в кодировке. CSV не хранит информацию о том, в какой кодировке он записан, поэтому мастер импорта в Битриксе спрашивает её у вас. Правило одно и жёсткое: кодировка файла и кодировка, указанная в мастере, должны совпадать. Файл в UTF-8, а в мастере выбрана Windows-1251 — получите мусор; и наоборот.

Кодировка

Сам сайт на 1С-Битрикс может работать в UTF-8 (сейчас это стандарт) или в Windows-1251 (старые проекты). Мастер импорта умеет читать файл в одной кодировке и при необходимости перекодировать в кодировку сайта. Практический подход: выясните кодировку сайта, готовьте файл в UTF-8 (это самый универсальный вариант для кириллицы) и в мастере укажите, что файл — в UTF-8. Если сайт в 1251 и вы точно готовите файл в 1251, укажите её — главное, честно совпасть с реальным содержимым файла.

Разделитель полей и ограничитель

Второй источник «съехавших» колонок — разделитель. В CSV колонки отделяют либо запятой, либо точкой с запятой, реже табуляцией. Excel в русской локали по умолчанию пишет точку с запятой (потому что запятая занята под десятичный разделитель), а англоязычные инструменты и Google Таблицы — запятую. В мастере импорта Битрикс отдельно спрашивает разделитель полей и ограничитель строк (символ кавычек, которым обрамляют значения с запятыми и переносами внутри). Оба нужно выставить ровно так, как в файле.

Симптом после импортаВероятная причинаЧто проверить
Русский текст — «крякозябры»Кодировка файла ≠ кодировка в мастереОткрыть CSV в редакторе кода, сверить кодировку
Все данные в одной колонкеНеверный разделитель полейПроверить: запятая или точка с запятой в файле
Названия с запятой разорвалисьНет ограничителя строк (кавычек)Включить обрамление значений кавычками
Ведущие нули артикулов пропалиExcel срезал их до сохраненияЗадать текстовый формат колонке в Excel
Цены «1 490» стали текстом/нулёмПробел-разделитель тысяч, запятая как десятичнаяУбрать пробелы, привести дробную часть к точке

Практический приём против всего этого — прогон фрагмента. Прежде чем грузить весь прайс, импортируйте 20–30 строк и посмотрите на результат в карточках. Кодировка, разделитель и формат чисел проявляются на первых же товарах, и чинить их на маленьком куске несравнимо дешевле, чем разгребать испорченный полный каталог.

Где в админке запускается импорт CSV

В административной части импорт живёт рядом с самим инфоблоком. Общий путь такой: раздел «Контент» → нужный тип информационных блоков → конкретный инфоблок каталога → список элементов, где в панели действий есть «Импорт из CSV» (в разных версиях и решениях пункт может называться чуть иначе и располагаться в меню действий над списком). Импорт всегда привязан к конкретному инфоблоку: вы грузите товары именно в тот каталог, из которого запустили мастер.

Мастер импорта проводит через несколько шагов, и на каждом важно не спешить:

  1. Загрузка файла и параметры чтения. Указываете путь к CSV (загруженному на сервер или выбранному из папки), кодировку, разделитель полей и ограничитель строк. Здесь же обычно задаётся, пропускать ли первую строку-заголовок.
  2. Предпросмотр и сопоставление колонок. Мастер показывает распознанные колонки и предлагает сопоставить каждую с полем или свойством элемента: название, детальный текст, цена, свойство «Бренд», внешний код и так далее. Это самый ответственный шаг.
  3. Параметры создания и обновления. Указываете раздел по умолчанию, активность создаваемых элементов, правила обновления существующих (по какому полю искать совпадение) и что делать с ненайденными строками.
  4. Запуск и отчёт. Импорт выполняется — на больших файлах пошагово, порциями, — и по завершении показывает, сколько элементов создано, сколько обновлено, были ли ошибки в строках.

Отдельно отметим: у товаров есть не только «контентные» поля инфоблока, но и поля торгового каталога — цена, валюта, количество, признак «нет на складе». В штатном импорте набор доступных для сопоставления цен и складских полей зависит от версии и настроек каталога; иногда цену и остаток удобнее обновлять отдельным проходом или вовсе обменом. Об этом — в разделе про обновление прайса.

Сопоставление колонок со свойствами инфоблока

Сопоставление (маппинг) — это сердце импорта. Файл ничего не «знает» о вашем инфоблоке: он просто набор колонок. Задача мастера — понять, что колонка «Артикул» должна лечь во внешний код, «Название» — в поле заголовка элемента, «Бренд» — в свойство типа «Список», «Цена» — в базовую цену каталога, а «Раздел» — в привязку к разделу. Пока это соответствие не задано верно, данные попадут не туда.

Чтобы маппинг был чистым, инфоблок должен быть готов заранее. Порядок такой:

  1. Заведите свойства до импорта. Все свойства, которые вы собираетесь заполнять из файла (бренд, материал, цвет, габариты), должны уже существовать в инфоблоке с правильным типом. Импорт не создаёт свойства сам — он только заполняет существующие.
  2. Согласуйте типы. Свойство-список ждёт значение из списка; если в файле «Синий», а в списке такого значения нет, поведение зависит от настроек (создать значение или пропустить). Строковое свойство примет любой текст. Число ждёт число. Несоответствие типа — частая причина пустых свойств после импорта.
  3. Выделите колонку-идентификатор. Одну колонку (обычно артикул) вы сопоставляете с внешним кодом (XML_ID) — именно по ней Битрикс будет искать существующий элемент при обновлении. Без этого повторный импорт создаст дубли.
  4. Разберитесь с разделами. Колонку «Категория» сопоставляют либо с привязкой к существующему разделу (по названию или коду), либо настраивают создание разделов на лету. Продумайте это до загрузки, иначе товары свалятся в один раздел.
  5. Отметьте множественные свойства. Если одно свойство принимает несколько значений (несколько картинок, несколько тегов), договоритесь о внутриячеечном разделителе и проверьте, что мастер его понимает.
Маппинг: колонки файла → свойства инфоблока Артикул Название Бренд Цена Раздел Внешний код (XML_ID) Название элемента Свойство «Бренд» (список) Базовая цена Привязка к разделу ключ
Схема: каждая колонка файла вручную привязывается к полю или свойству инфоблока; колонка-артикул уходит во внешний код и служит ключом для обновления.

Хорошая новость: настройки сопоставления обычно можно сохранить как профиль импорта и переиспользовать при следующих загрузках того же файла. Для регулярных прайсов это критично — вы один раз аккуратно настраиваете маппинг, а дальше просто подставляете новый CSV той же структуры. Отсюда и важность эталонного шаблона файла: при стабильной структуре профиль не приходится перенастраивать.

Первый импорт пошагово

Сведём подготовку и запуск в единый порядок для первичного наполнения каталога — когда инфоблок пустой и мы заливаем товары впервые.

  1. Снимите резервную копию базы. Даже перед первым импортом: если что-то пойдёт не так, откат из бэкапа — самый быстрый способ вернуться к чистому состоянию.
  2. Подготовьте инфоблок. Заведите нужные свойства с правильными типами, разделы (или продумайте их создание при импорте), включите торговый каталог, если товары должны иметь цену и остаток.
  3. Приведите файл к шаблону. Плоская таблица, понятные заголовки, текстовый формат артикулов, корректные числа, сохранение в CSV с известной кодировкой и разделителем.
  4. Проверьте CSV в редакторе кода. Убедитесь, что кириллица читается, разделитель тот, что ожидаете, значения с запятыми обрамлены кавычками.
  5. Прогоните фрагмент. Импортируйте первые 20–30 строк, откройте несколько созданных карточек и сверьте все поля: название, свойства, цена, раздел, картинка.
  6. Настройте профиль сопоставления. На фрагменте отладьте маппинг колонок, включая колонку-идентификатор во внешний код, и сохраните профиль.
  7. Запустите полный импорт. Загрузите весь файл с теми же настройками. На больших объёмах импорт идёт порциями — дайте ему завершиться, не прерывая.
  8. Проверьте отчёт и каталог. Сверьте число созданных элементов с числом строк файла, выборочно откройте карточки, проверьте разделы и цены.
  9. Перестройте служебные структуры. Постройте фасетный индекс для умного фильтра и запустите переиндексацию поиска — импорт сам это не делает.
Важно: уже на первом импорте сопоставьте артикул с внешним кодом (XML_ID), даже если сейчас вы грузите «с нуля». Тогда следующая загрузка того же прайса будет обновлять товары, а не создавать их заново. Идентификатор, заложенный при первом импорте, — ваша страховка от дублей в будущем.

Обновление по артикулу без дублей

Самая частая боль повторного импорта — размножение товаров. Загрузили прайс сегодня — появилось 5000 карточек. Загрузили обновлённый прайс завтра — стало 10000, причём половина дублирует первую. Причина всегда одна: Битрикс не смог понять, что строка файла описывает уже существующий товар, и на всякий случай создал новый.

Решение — стабильный уникальный идентификатор в каждой строке, по которому импорт ищет совпадение. В роли такого ключа почти всегда выступает артикул, и заводят его во внешний код элемента (XML_ID) или в отдельное строковое свойство, помеченное как идентификатор в настройках импорта. Логика при повторной загрузке становится простой и предсказуемой:

Строка файла артикул BS-M-BL Есть такой XML_ID? Совпал → UPDATE цена, остаток, поля Нет → CREATE новый элемент да нет Стабильный артикул в XML_ID — гарантия обновления без дублей
Схема: импорт ищет элемент по артикулу в внешнем коде; при совпадении обновляет существующую карточку, при отсутствии — создаёт новую.

Ключевое требование к идентификатору — стабильность. Артикул должен быть одним и тем же от выгрузки к выгрузке. Если сегодня артикул «BS-M-BL», а завтра поставщик переименовал его в «BS/M/BL», Битрикс сочтёт это новым товаром и создаст дубль. Поэтому идентификатор берут из источника, который его не меняет: учётная система, 1С, стабильный код поставщика. И наоборот — «название» плохой ключ: названия правят постоянно, и привязка по ним рассыпается на первой же редактуре.

Ещё один нюанс — уникальность внутри файла. Если в одном CSV две строки имеют одинаковый артикул, импорт либо перезапишет одну другой, либо создаст путаницу. Перед загрузкой полезно прогнать файл на дубли артикулов прямо в Excel (условное форматирование или сводная таблица) и устранить их. Дубли в источнике — это дубли в каталоге, импорт лишь переносит беспорядок.

Разовый импорт или регулярное обновление прайса

Импорт из CSV решает две принципиально разные задачи, и путать их дорого. Разовый импорт — это «залить каталог один раз»: первичное наполнение, миграция со старого сайта, добавление новой категории. Регулярное обновление прайса — это «каждый день/неделю освежать цены и остатки»: процесс, который повторяется и должен быть максимально автоматизирован и защищён от ошибок.

КритерийРазовый импорт CSVРегулярное обновление
ЧастотаОдин раз или изредкаЕжедневно/еженедельно
ИдентификаторЖелателенОбязателен и стабилен
Что меняетсяВсё содержимоеЧаще цены и остатки
Ручной трудДопустимНужно минимизировать
Риск дублейРазовый, контролируемыйНакапливается при ошибке
Куда развиваетсяМожет остаться CSVОбычно перерастает в обмен с 1С

Вывод простой: для разовой задачи ручной импорт CSV — нормальный и достаточный инструмент. Для регулярного обновления он быстро упирается в потолок: каждую загрузку кто-то должен готовить файл, помнить кодировку и разделитель, не перепутать профиль сопоставления, не забыть перестроить фасет. Один невнимательный прогон — и в каталоге дубли или съехавшие цены. Поэтому регулярное обновление прайса рано или поздно уводят либо в автоматический импорт по расписанию (агент, который сам берёт файл из папки), либо в полноценный обмен с 1С по CommerceML, где цены и остатки приходят без участия человека.

Разовый импорт против регулярного обмена Разовый импорт CSV • Человек готовит файл вручную • Загрузка через мастер импорта • Подходит для наполнения и правок • Кодировка/маппинг каждый раз • Риск ошибки на каждом прогоне Регулярный обмен с 1С • Автоматически по расписанию • CommerceML: товары, цены, остатки • Характеристики → предложения • Связи по XML_ID, без дублей • Минимум ручного труда
Схема: разовую загрузку удобно делать через импорт CSV, а повторяющееся обновление ассортимента, цен и остатков логичнее вести автоматическим обменом с 1С.

Обновление цен и остатков

Отдельный и самый частый сценарий регулярного импорта — обновление прайса: цены и остатки меняются гораздо чаще, чем описания и картинки. Здесь важно не грузить каждый раз весь каталог целиком, а обновлять точечно то, что реально изменилось.

Что учесть с ценами

Цена товара в 1С-Битрикс — это поле торгового каталога, а не обычное свойство инфоблока. При сопоставлении в мастере вы указываете, в какой тип цены (базовая, розничная, оптовая) ложится колонка. Частые тонкости: десятичный разделитель должен быть точкой (не запятой), в числах не должно быть пробелов-разделителей тысяч и символа валюты, а сама валюта должна соответствовать настройкам каталога. Если у товара несколько типов цен, каждый обновляется отдельной колонкой или отдельным проходом.

Что учесть с остатками

Остаток (количество) — тоже поле каталога. При обновлении важно решить, что делать с товарами, которых нет в текущем файле остатков: обнулять их количество (снятые с продажи «пропадают» из наличия) или не трогать. Если магазин работает с несколькими складами, плоский CSV с одной колонкой остатка не покроет складской учёт — там уже нужен обмен, который умеет раскладывать количество по складам. Для простого магазина с единым остатком CSV вполне достаточно.

Практика: прайс-файл для обновления делайте узким — артикул, цена, остаток, и всё. Чем меньше колонок, тем меньше шансов случайно затереть описание или картинку пустым значением из свежего файла. Обновление цен и остатков и обновление контента — это разные задачи, и разводить их по разным файлам и профилям безопаснее.

И главное правило обновления прайса: пустая ячейка в файле — это не всегда «оставить как было». В зависимости от настроек импорта пустое значение может затереть существующее. Поэтому если в новом прайсе нет колонки описания, лучше вообще не сопоставлять её с полем, чем сопоставить и получить пустые ячейки, стирающие тексты. Узкий файл обновления снимает этот риск на корню.

Торговые предложения при импорте

Если товары продаются в вариациях — размеры, цвета, объёмы, — простой плоский импорт в один инфоблок уже не покрывает задачу. Вариации в 1С-Битрикс живут в отдельном инфоблоке торговых предложений, связанном с товарами. Мы подробно разбираем эту архитектуру в статье про торговые предложения (SKU) в 1С-Битрикс; здесь важно понять, как они соотносятся с импортом из CSV.

Штатный импорт CSV работает на уровне одного инфоблока. Это значит, что для каталога с вариациями плоского файла недостаточно — нужно грузить два связанных набора данных: сами товары в инфоблок товаров и их предложения в инфоблок офферов, проставляя каждому предложению привязку к родителю. Есть несколько практических подходов:

Практический вывод: простой каталог без вариаций отлично грузится и обновляется штатным CSV. Каталог с торговыми предложениями через плоский CSV грузить можно, но это неудобно, требует нескольких проходов или доработки, и почти всегда упирается в необходимость обмена. Если ваш ассортимент — это одежда, обувь, техника с модификациями, закладывайте обмен с 1С сразу, а CSV оставьте для разовых задач.

Картинки: пути и загрузка

Картинки — частая точка непонимания при импорте. В CSV нельзя положить сам файл изображения: там только текст. Поэтому картинки передают ссылками, а мастер импорта по этим ссылкам подтягивает изображения в карточки. Работает это так:

  1. Файлы кладут на сервер заранее. Изображения загружают в отдельную папку сайта (например, в директорию загрузок), а в колонке CSV указывают путь к файлу относительно этой папки или сайта.
  2. Колонку пути сопоставляют с полем картинки. В мастере путь связывают с детальной или анонсной картинкой элемента либо со свойством типа «Файл». Мастер читает путь и привязывает файл к товару.
  3. Для нескольких картинок — множественное свойство. Галерею товара обычно хранят в свойстве-файле с включённой множественностью; несколько путей в ячейке разделяют оговорённым символом.
  4. Внешние URL — с оговорками. Часть конфигураций умеет скачивать картинку по внешней ссылке (http-адресу) в момент импорта, но это медленнее, зависит от доступности источника и не всегда включено. Надёжнее сначала залить файлы на свой сервер.

Типичные грабли с картинками: пути в файле не совпадают с реальным расположением на сервере (регистр букв, лишняя папка, кириллица в именах файлов), из-за чего изображение «не находится» и карточка остаётся без фото. Поэтому имена файлов держат латиницей, без пробелов, а пути в CSV сверяют с фактической структурой папок. И, как всегда, проверяют на фрагменте: загрузили несколько товаров — открыли карточки — убедились, что картинки на месте, прежде чем грузить тысячи строк.

Совет: называйте файлы картинок по артикулу — BS-M-BL.jpg. Тогда путь в CSV собирается автоматически из артикула, а при обновлении картинок не приходится вручную пересобирать соответствия «товар — фото». Осмысленные имена файлов экономят часы на больших каталогах.

Первый импорт на копии сайта

Правило, которое не стоит нарушать: первый импорт большого или незнакомого файла делают на копии, а не на боевом каталоге. Причина проста — ошибки маппинга, кодировки и формата чисел проявляются только после загрузки, и если она прошла сразу на живом сайте, вы правите последствия под нагрузкой, с реальными посетителями и заказами.

Безопасный порядок выглядит так:

Этот подход выглядит «перестраховкой» ровно до первого испорченного каталога. Один прогон непроверенного файла на живом магазине способен создать тысячи дублей, обнулить цены или стереть описания — и всё это увидят покупатели. Копия и бэкап стоят получаса, а разгребание последствий — дней. Мы в проектах по разработке интернет-магазинов на 1С-Битрикс закладываем этот регламент в любую работу с массовой загрузкой данных.

Производительность больших файлов

Маленький прайс на пару сотен строк грузится мгновенно. Файл на десятки и сотни тысяч строк — уже нагрузка, которая упирается в ограничения PHP и сервера: время выполнения скрипта, память, размер загружаемого файла. Штатный импорт это учитывает и на больших объёмах работает порциями — обрабатывает файл кусками, показывая прогресс, чтобы не превысить лимит времени за один запрос.

Узкое местоКак проявляетсяЧто помогает
Размер загружаемого файлаФайл не грузится через формуЗагрузить CSV на сервер по FTP/SFTP, указать путь
Время выполненияИмпорт «обрывается» на серединеПошаговая (порционная) обработка, увеличение лимитов
ПамятьОшибка нехватки памятиОбработка построчно, не грузить файл целиком в память
Блокировки и кэшСайт «тормозит» во время импортаИмпорт в часы низкой нагрузки, сброс кэша после
Пересчёт фасета и поискаДолгий импорт + долгая переиндексацияРазнести во времени, запускать по расписанию

Практические приёмы для тяжёлых файлов: заливать CSV на сервер напрямую (минуя форму загрузки с её лимитом), запускать импорт в окно низкой посещаемости, а тяжёлые пост-операции — построение фасетного индекса и переиндексацию поиска — выносить на потом, а не делать «на лету» сразу после загрузки. Для по-настоящему больших и регулярных объёмов ручной импорт через мастер вообще перестаёт быть удобным: там уместнее автоматический импорт по расписанию или обмен, который умеет обрабатывать данные фоново и инкрементально — только изменения, а не весь каталог каждый раз.

Ограничения штатного импорта

Штатный импорт CSV — честный рабочий инструмент, но у него есть чёткие границы, за которыми он становится неудобным или недостаточным. Знать их полезно, чтобы вовремя выбрать другой путь, а не героически «допиливать» CSV там, где нужен обмен.

Ни одно из этих ограничений не делает импорт CSV «плохим» — просто у него своя ниша: разовые и несложные загрузки, первичное наполнение, простые прайсы. Как только требования выходят за эти рамки, дешевле перейти на подходящий инструмент, чем бороться с форматом.

Когда нужен CommerceML или скрипт

Есть три ситуации, в которых штатный импорт CSV пора менять на более мощный механизм.

Регулярный обмен с 1С по CommerceML

Если у бизнеса есть 1С и каталог нужно держать в актуальном состоянии постоянно, правильный ответ — обмен по CommerceML. Это автоматический протокол: 1С по расписанию выгружает номенклатуру, характеристики, цены, остатки и картинки, а Битрикс принимает их и раскладывает по инфоблокам товаров и предложений, связывая по внешним кодам. Никакой ручной подготовки файлов, никаких «крякозябр», а вариации приходят как полноценные торговые предложения. Как настраивается и диагностируется этот обмен, мы подробно разбираем в статье про интеграцию магазина с 1С.

Собственный скрипт импорта

Когда источник данных не 1С, а, скажем, API поставщика, нестандартный XML или тот же Excel, но со сложной логикой, пишут собственный скрипт на API Битрикса (классы работы с элементами инфоблоков, ценами, остатками) или на PhpSpreadsheet для чтения .xlsx напрямую. Скрипт даёт полный контроль: инкрементальное обновление только изменённого, своя логика дублей и деактивации, раскладка по двум инфоблокам, обработка картинок по своим правилам. Ценой большей гибкости идёт разработка и поддержка.

Сторонние модули импорта

На «Маркетплейсе» 1С-Битрикс есть готовые модули, которые расширяют импорт: читают .xlsx напрямую, поддерживают сложный маппинг, планировщик и обновление по расписанию. Это компромисс между штатным CSV и полноценной разработкой — быстрее скрипта, гибче штатного мастера, но с зависимостью от чужого решения и его качества.

Ориентир для выбора: разовая простая загрузка — штатный CSV. Регулярное обновление с вариациями и остатками при наличии 1С — обмен CommerceML. Нестандартный источник или особая логика — свой скрипт или проверенный модуль. Чаще всего в зрелом магазине сосуществуют оба подхода: обмен с 1С как основа и CSV для точечных ручных правок.

Проверка результата импорта

Импорт не заканчивается на сообщении «готово». Пока вы не проверили результат, вы не знаете, прошёл он корректно или тихо создал проблему. Минимальный набор проверок после каждой значимой загрузки:

  1. Сверьте числа. Количество созданных и обновлённых элементов из отчёта импорта сопоставьте с числом строк в файле. Резкое расхождение — сигнал дублей или пропусков.
  2. Откройте выборку карточек. Проверьте несколько товаров из разных разделов: название, свойства, цена, остаток, раздел, картинка — всё ли на месте и в нужных полях.
  3. Проверьте кодировку. Убедитесь, что кириллица читается везде — в названиях, описаниях и значениях свойств, а не только в первом попавшемся товаре.
  4. Поищите дубли. Отсортируйте элементы по артикулу/внешнему коду и убедитесь, что нет двух карточек с одним идентификатором.
  5. Перестройте фасет и поиск. Постройте фасетный индекс умного фильтра и запустите переиндексацию поиска — иначе фильтр и поиск покажут старую картину.
  6. Проверьте фильтр на витрине. Зайдите на сайт и убедитесь, что новые значения свойств появились в умном фильтре и счётчики совпадают с каталогом.

Про фасет стоит сказать отдельно: это самая частая «незаметная» проблема после импорта. Товары загрузились правильно, но фильтр их «не видит», потому что фасетный индекс не пересчитан. Пользователь фильтрует по бренду — и не находит только что загруженные товары. Если хотите глубже понять, как устроен и почему требует перестроения этот механизм, у нас есть подробный разбор про умный фильтр в 1С-Битрикс. Здесь запомните правило: после массового импорта фасет перестраивают всегда.

Откат неудачного импорта

Даже при аккуратной подготовке импорт иногда идёт не так: не тот профиль маппинга, съехавшая кодировка, файл со старыми ценами. Способность быстро откатиться отличает управляемый процесс от паники, поэтому откат продумывают до загрузки, а не после.

Способ откатаКогда применимСкорость и полнота
Восстановление из бэкапа базыБэкап снят прямо перед импортомБыстро и полно — эталонный способ
Удаление партии по метке/датеЭлементы помечены при импортеБыстро для создания, сложнее для обновления
Импорт в отдельный разделЗаранее грузили в изолированный разделУдаляется раздел целиком, но нужна подготовка
Повторный «правильный» импортЕсть корректная версия файлаЧинит значения, но не убирает дубли
Ручная чисткаБэкапа нет, партия не помеченаМедленно и рискованно — крайний случай

Из таблицы видно главное: единственный по-настоящему быстрый и полный способ отката — восстановление из резервной копии базы, снятой непосредственно перед импортом. Все остальные варианты — компромиссы разной степени болезненности. Поэтому бэкап перед импортом это не бюрократия, а самый ценный элемент всего процесса. Дополнительно помогает дисциплина: грузить в изолированный раздел, помечать партию служебным полем, хранить предыдущую версию файла — всё это даёт запасные пути, если бэкап по каким-то причинам недоступен.

Правило: нет свежего бэкапа — не запускай массовый импорт. Это единственное правило, нарушение которого превращает пятиминутную ошибку в многочасовое восстановление вручную. Снять копию базы дешевле и быстрее, чем один раз пожалеть о её отсутствии.

Частые ошибки

Мини-FAQ. Можно ли совмещать обмен с 1С и ручной импорт CSV? Да, это частый и рабочий сценарий: обмен держит основной каталог в актуальном состоянии, а CSV используют для разовых массовых правок или загрузки данных, которых нет в 1С. Главное — не пересекаться по полям: если поле приходит из обмена, не правьте его же через CSV, иначе значения будут перезатирать друг друга.

Чек-лист импорта

Сведём всё в практический список, по которому удобно проверять готовность к загрузке и корректность результата.

  1. Файл в CSV, структура плоская. Одна строка — один товар; объединённых ячеек, формул и промежуточных заголовков нет.
  2. Кодировка и разделитель известны. CSV открыт в редакторе кода, кодировка и разделитель проверены и совпадут с настройками мастера.
  3. «Опасные» поля текстовые. Артикулы, штрихкоды, коды сохранены без потери ведущих нулей и экспоненты.
  4. Идентификатор заложен. Колонка-артикул сопоставлена с внешним кодом (XML_ID) для обновления без дублей.
  5. Свойства заведены заранее. Все целевые свойства инфоблока существуют с правильными типами; списки наполнены.
  6. Разделы продуманы. Привязка к разделам настроена, товары не свалятся в одну кучу.
  7. Бэкап базы снят. Резервная копия сделана непосредственно перед импортом.
  8. Прогон фрагмента выполнен. 20–30 строк загружены на копии, карточки проверены, маппинг отлажен и сохранён в профиль.
  9. Прайс отделён от контента. Обновление цен и остатков идёт узким файлом, отдельно от описаний и картинок.
  10. Полный импорт завершён без обрывов. На большом файле дали пройти всем порциям; отчёт проверен.
  11. Результат сверен. Числа, выборка карточек, кодировка, отсутствие дублей проверены.
  12. Фасет и поиск перестроены. Фасетный индекс построен, поиск переиндексирован, фильтр на витрине проверен.

Словарь терминов

ТерминЧто означает
Импорт из CSVШтатная загрузка данных о товарах из текстового файла в инфоблок 1С-Битрикс.
CSVТекстовый формат таблицы: строки — переносами, колонки — символом-разделителем.
КодировкаСпособ записи символов в байтах (UTF-8, Windows-1251); при несовпадении — «крякозябры».
Разделитель полейСимвол между колонками CSV: запятая, точка с запятой или табуляция.
Ограничитель строкКавычки, которыми обрамляют значения с запятыми и переносами внутри.
Сопоставление (маппинг)Привязка колонок файла к полям и свойствам элементов инфоблока.
Внешний код (XML_ID)Стабильный идентификатор элемента; ключ поиска при обновлении без дублей.
Обновление прайсаЧастный случай импорта: массовое обновление цен и остатков существующих товаров.
CommerceMLФормат автоматического обмена между 1С и Битриксом: товары, цены, остатки, характеристики.
Фасетный индексЗаранее просчитанная таблица «свойство → товары» для быстрого умного фильтра.

Вывод

Импорт каталога из Excel и CSV в 1С-Битрикс — это простой инструмент со строгими правилами. Excel готовит данные, CSV их переносит; кодировка файла и мастера обязаны совпадать; колонки вручную сопоставляются со свойствами инфоблока; а стабильный артикул во внешнем коде превращает повторную загрузку из источника дублей в аккуратное обновление. Освоив эти четыре вещи, вы закроете подавляющее большинство задач по наполнению и обновлению каталога без сторонних решений.

Практический вывод один: относитесь к импорту как к управляемому процессу, а не разовому «залил и забыл». Резервная копия и прогон фрагмента на копии перед боевой загрузкой, узкий файл для обновления прайса, перестроение фасета после импорта, честный выбор между CSV и обменом с 1С там, где начинаются вариации и регулярность, — вот что отличает чистый каталог от свалки дублей. А если ассортимент растёт, обновляется ежедневно и обрастает торговыми предложениями, не насилуйте CSV: закладывайте грамотно спроектированный каталог с обменом с 1С с самого начала — и загрузка товаров перестанет быть головной болью. Больше разборов по каталогу и поиску — в рубрике «Каталог и поиск».

Частые вопросы

Можно ли импортировать каталог прямо из файла .xls или .xlsx?

Штатный модуль «Информационные блоки» в 1С-Битрикс импортирует данные из CSV, а не напрямую из бинарных форматов Excel (.xls, .xlsx). Поэтому рабочая схема такая: подготовили таблицу в Excel, а затем сохранили её как CSV (в Excel это «Файл → Сохранить как → CSV») и уже этот CSV загрузили в Битрикс. При сохранении важно проследить за кодировкой и разделителем полей, иначе кириллица превратится в «крякозябры», а колонки съедут. Для прямой загрузки .xlsx без промежуточного CSV нужен сторонний модуль импорта или собственный скрипт на PHPExcel/PhpSpreadsheet.

Как обновлять товары при повторном импорте, а не создавать дубли?

Дубли появляются, когда Битрикс не может сопоставить строку файла с уже существующим элементом и на каждой загрузке создаёт новый. Чтобы этого не было, нужен стабильный уникальный идентификатор в каждой строке — как правило, артикул, который кладут во внешний код элемента (XML_ID) или в отдельное строковое свойство. При повторном импорте Битрикс ищет элемент по этому идентификатору: нашёл — обновляет поля, не нашёл — создаёт новый. Идентификатор должен быть неизменным между выгрузками, иначе логика «обновить существующий» ломается и каталог начинает размножаться.

В какой кодировке и с каким разделителем сохранять CSV для Битрикса?

Для кириллических каталогов надёжнее всего работает кодировка UTF-8 (без BOM или с ним — зависит от версии, обычно указывается в мастере импорта), а для старых проектов иногда Windows-1251. Главное — чтобы кодировка файла и кодировка, выбранная в мастере импорта, совпадали. Разделитель полей в CSV чаще всего запятая или точка с запятой; Excel в русской локали по умолчанию ставит точку с запятой. В мастере импорта Битрикс разделитель и ограничитель строк («кавычки») указываются явно, поэтому сначала посмотрите, что реально стоит в файле, а потом выставьте те же символы в настройках.

Как загрузить картинки товаров через импорт из CSV?

В штатном импорте картинки передают ссылками. В колонке файла указывают либо путь к изображению относительно сайта (файл заранее залит на сервер, например в папку загрузок), либо, в ряде конфигураций, внешний URL, откуда картинку нужно скачать. Мастер импорта сопоставляет эту колонку с полем детальной или анонсной картинки (или со свойством типа «Файл»). Для множественных изображений товара используют свойство-файл с включённой множественностью и разделяют несколько путей внутри ячейки. Складывать сами бинарные файлы прямо в CSV нельзя — там только текст и ссылки на файлы.

Чем штатный импорт CSV отличается от обмена с 1С по CommerceML?

Импорт CSV — это разовая или полуручная загрузка плоской таблицы: вы сами готовите файл, сопоставляете колонки и запускаете загрузку в админке. Обмен по CommerceML — это автоматический протокол между 1С и Битриксом, который сам передаёт номенклатуру, характеристики, цены, остатки и картинки по расписанию, восстанавливая связи по внешним кодам. CSV удобен для первичного наполнения, разовых правок и простых прайсов без вариаций. Как только нужны регулярное обновление, торговые предложения с характеристиками, остатки по складам и минимум ручного труда — правильнее переходить на обмен с 1С, а CSV оставить для точечных задач.

Что делать перед первым импортом большого каталога?

Первый импорт всегда делают на копии сайта или тестовом инфоблоке, а не сразу на боевом каталоге. Сначала снимают резервную копию базы, затем прогоняют небольшой фрагмент файла (несколько десятков строк), проверяют кодировку, сопоставление колонок, корректность создания элементов и только потом запускают полный файл. Такой порядок ловит ошибки маппинга и кодировки, пока они стоят дёшево, и позволяет спокойно откатиться. Прогонять непроверенный файл сразу на живом каталоге — самый частый способ получить дубли, съехавшие свойства и испорченные карточки.

Почему после импорта не работает фильтр по новым свойствам?

Умный фильтр в 1С-Битрикс работает по фасетному индексу — заранее просчитанной таблице «свойство → товары». Импорт добавляет или меняет значения свойств, но сам фасет при этом не пересчитывается автоматически. Поэтому после массовой загрузки фасетный индекс нужно перестроить, а если менялись поисковые поля — запустить переиндексацию поиска. Пока фасет не перестроен, фильтр показывает старую картину: новых значений в нём нет, а счётчики не совпадают с реальным каталогом. Это не ошибка импорта, а штатный шаг, который просто нельзя забывать.

Как быстро откатить неудачный импорт?

Надёжнее всего откатываться из резервной копии базы, снятой прямо перед загрузкой, — поэтому её и делают обязательным шагом. Если бэкапа нет, откат превращается в ручную чистку: удаление созданных элементов по дате или метке импорта, восстановление затёртых значений — это долго и не всегда полно. Некоторые команды перед импортом помечают элементы служебным полем или импортируют в отдельный раздел, чтобы в случае проблемы удалить ровно загруженную партию. Но универсальный ответ один: снятый заранее бэкап базы и предварительная проверка на копии — самая быстрая и безопасная страховка.

Поделиться:

Нужно загрузить или обновлять каталог без дублей и «крякозябр»?

Настроим импорт из Excel/CSV с обновлением по артикулу, свяжем каталог с торговыми предложениями и умным фильтром, а для регулярного обновления наладим обмен с 1С. Рассчитаем стоимость по вашему прайсу и ассортименту.

Услуга «Каталог товаров»

Игорь Воскресенский

Основатель студии B2Bsite. С 2014 года команда разрабатывает и поддерживает интернет-магазины и корпоративные сайты на 1С-Битрикс, настраивает каталоги, импорт и обмен с 1С, торговые предложения и умный фильтр для среднего и крупного бизнеса.

← Все статьи блога