Каталог интернет-магазина почти всегда начинается с таблицы. У поставщика есть прайс в Excel, у контент-менеджера — выгрузка с описаниями, у товароведа — файл остатков. И рано или поздно возникает один и тот же вопрос: как превратить эти столбцы «артикул, название, цена, остаток, картинка» в аккуратные карточки товаров на сайте — и, что важнее, как потом обновлять их, не создавая дублей и не ломая уже наведённый порядок. В 1С-Битрикс для этого есть штатный инструмент — импорт из CSV в модуле «Информационные блоки», плюс несколько правил, без которых любая загрузка превращается в «крякозябры» и размноженные товары.
В этой статье разберём импорт каталога из Excel и CSV без общих слов: чем CSV отличается от .xlsx и как одно превратить в другое, как устроено сопоставление колонок файла со свойствами инфоблока, как настроить обновление по артикулу, чтобы повторная загрузка правила существующие карточки, а не плодила новые, как быть с кодировкой, разделителями, торговыми предложениями и картинками, когда штатного импорта уже мало и пора переходить на обмен с 1С, и как всё это безопасно откатить. Материал — выжимка из наших внедрений по разработке каталога товаров на 1С-Битрикс, где загрузка и регулярное обновление ассортимента — одна из первых задач любого проекта.
Коротко
- Штатный импорт в 1С-Битрикс читает CSV, а не .xls/.xlsx: Excel сначала сохраняют как CSV.
- Кодировка файла и кодировка в мастере импорта должны совпадать, иначе кириллица «поедет».
- Чтобы повторный импорт обновлял товары, а не плодил дубли, нужен стабильный ключ — обычно артикул в XML_ID.
- Сопоставление колонок файла со свойствами инфоблока — центральный шаг, его настраивают вручную в мастере.
- Первый импорт всегда делают на копии и после резервной копии базы; полному файлу предшествует прогон фрагмента.
- Разовая загрузка — это CSV; регулярное обновление с вариациями и остатками — повод для обмена по CommerceML.
Что такое штатный импорт каталога в 1С-Битрикс
Импорт каталога — это загрузка данных о товарах из внешнего файла в инфоблок 1С-Битрикс. В штатной поставке за это отвечает модуль «Информационные блоки»: у любого инфоблока в административной части есть действие «Импорт из CSV», которое читает текстовый файл, разбирает его на строки и колонки и раскладывает значения по полям и свойствам элементов. Инфоблок при этом — обычное хранилище элементов Битрикса, а товар — это элемент инфоблока, у которого дополнительно включён торговый каталог (цена, остаток, складские поля).
Ключевое слово здесь — штатный. Речь именно о встроенном механизме, который не требует сторонних модулей и работает в любой редакции с инфоблоками. Он умеет создавать новые элементы, обновлять существующие, раскладывать значения по свойствам, привязывать разделы и подтягивать картинки по ссылкам. Взамен он ждёт от вас аккуратно подготовленный CSV и правильно настроенное сопоставление колонок — и то, и другое целиком на стороне человека, который запускает импорт.
Важно сразу разделить два процесса, которые часто путают. Первый — первичное наполнение: каталог пустой, и мы заливаем в него товары «с нуля». Второй — обновление: товары уже есть, и мы хотим освежить цены, остатки, описания или добавить новинки, не трогая остальное. Технически это один и тот же импорт из CSV, но настраивается он по-разному, и главная разница — в наличии стабильного идентификатора, по которому Битрикс понимает, обновлять существующий товар или создавать новый. Именно вокруг этого идентификатора крутится половина статьи, потому что от него зависит, будет у вас чистый каталог или свалка дублей.
Excel или CSV: что именно грузит Битрикс
Первое, обо что спотыкаются, — попытка загрузить в Битрикс файл .xlsx напрямую. Штатный модуль «Информационные блоки» этого не умеет: он читает CSV (Comma-Separated Values) — простой текстовый формат, где строки таблицы разделены переносами, а колонки — специальным символом-разделителем. Excel-файлы .xls и .xlsx — это бинарные (или упакованные) форматы со стилями, формулами и листами; штатный импорт их не понимает.
Отсюда практическое правило: Excel готовит данные, CSV их переносит. Вы верстаете и вычищаете прайс в привычном Excel или Google Таблицах, а затем сохраняете результат в CSV и уже этот файл отдаёте Битриксу. Промежуточный CSV — не костыль, а нормальная часть процесса, и относиться к нему нужно так же внимательно, как к самой таблице.
Чем CSV удобен и чем опасен одновременно — он предельно простой. В нём нет типов данных, форматов ячеек и защиты: только текст, разделители и переносы строк. Из-за этого:
- Числа могут «съехать». Ведущие нули артикулов, длинные штрихкоды и телефоны Excel любит превращать в экспоненциальную запись или обрезать. В CSV это уже застынет в испорченном виде.
- Разделитель внутри данных ломает колонки. Если разделитель — запятая, а в названии товара есть запятая, строка «разъедется». Поэтому значения обрамляют кавычками-ограничителями.
- Переносы строк в описании опасны. Многострочное описание внутри ячейки может разорвать одну строку CSV на несколько. Такие поля тоже должны быть в кавычках.
- Кодировка не хранится в файле явно. CSV — это байты; какая это кодировка, определяет тот, кто читает файл. Отсюда — «крякозябры», если читающая сторона угадала неверно.
Вывод простой: CSV — рабочий и надёжный формат для импорта, но он требует дисциплины на этапе сохранения. Большинство проблем импорта рождается не в самом Битриксе, а в том, как файл был выгружен из Excel.
Как из Excel получить правильный CSV
Сохранение таблицы в CSV кажется тривиальным — «Файл → Сохранить как → CSV», — но именно здесь закладываются будущие ошибки. Разберём порядок, который даёт предсказуемый результат.
- Приведите таблицу к «плоскому» виду. Одна строка — один товар (или одно торговое предложение). Уберите объединённые ячейки, промежуточные заголовки, пустые строки-разделители и формулы: в CSV попадут только значения, а «красота» разметки потеряется.
- Зафиксируйте текстом «опасные» поля. Артикул, штрихкод, код — задайте этим колонкам текстовый формат ещё до сохранения, чтобы Excel не срезал ведущие нули и не переводил длинные числа в экспоненту.
- Проверьте первую строку — заголовки. Понятные заголовки колонок (артикул, название, цена, остаток, раздел, картинка) сильно облегчат сопоставление в мастере импорта. Позже вы сможете указать Битриксу, что первую строку нужно пропустить как шапку.
- Сохраните как CSV с нужной кодировкой. В Excel выбирайте вариант «CSV UTF-8», если он есть, — он корректно пишет кириллицу. Классический «CSV (разделители — запятые)» в русской локали часто сохраняет в Windows-1251 и с точкой с запятой; это тоже рабочий вариант, но кодировку и разделитель нужно запомнить, чтобы выставить те же в мастере импорта.
- Откройте получившийся 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» (в разных версиях и решениях пункт может называться чуть иначе и располагаться в меню действий над списком). Импорт всегда привязан к конкретному инфоблоку: вы грузите товары именно в тот каталог, из которого запустили мастер.
Мастер импорта проводит через несколько шагов, и на каждом важно не спешить:
- Загрузка файла и параметры чтения. Указываете путь к CSV (загруженному на сервер или выбранному из папки), кодировку, разделитель полей и ограничитель строк. Здесь же обычно задаётся, пропускать ли первую строку-заголовок.
- Предпросмотр и сопоставление колонок. Мастер показывает распознанные колонки и предлагает сопоставить каждую с полем или свойством элемента: название, детальный текст, цена, свойство «Бренд», внешний код и так далее. Это самый ответственный шаг.
- Параметры создания и обновления. Указываете раздел по умолчанию, активность создаваемых элементов, правила обновления существующих (по какому полю искать совпадение) и что делать с ненайденными строками.
- Запуск и отчёт. Импорт выполняется — на больших файлах пошагово, порциями, — и по завершении показывает, сколько элементов создано, сколько обновлено, были ли ошибки в строках.
Отдельно отметим: у товаров есть не только «контентные» поля инфоблока, но и поля торгового каталога — цена, валюта, количество, признак «нет на складе». В штатном импорте набор доступных для сопоставления цен и складских полей зависит от версии и настроек каталога; иногда цену и остаток удобнее обновлять отдельным проходом или вовсе обменом. Об этом — в разделе про обновление прайса.
Сопоставление колонок со свойствами инфоблока
Сопоставление (маппинг) — это сердце импорта. Файл ничего не «знает» о вашем инфоблоке: он просто набор колонок. Задача мастера — понять, что колонка «Артикул» должна лечь во внешний код, «Название» — в поле заголовка элемента, «Бренд» — в свойство типа «Список», «Цена» — в базовую цену каталога, а «Раздел» — в привязку к разделу. Пока это соответствие не задано верно, данные попадут не туда.
Чтобы маппинг был чистым, инфоблок должен быть готов заранее. Порядок такой:
- Заведите свойства до импорта. Все свойства, которые вы собираетесь заполнять из файла (бренд, материал, цвет, габариты), должны уже существовать в инфоблоке с правильным типом. Импорт не создаёт свойства сам — он только заполняет существующие.
- Согласуйте типы. Свойство-список ждёт значение из списка; если в файле «Синий», а в списке такого значения нет, поведение зависит от настроек (создать значение или пропустить). Строковое свойство примет любой текст. Число ждёт число. Несоответствие типа — частая причина пустых свойств после импорта.
- Выделите колонку-идентификатор. Одну колонку (обычно артикул) вы сопоставляете с внешним кодом (XML_ID) — именно по ней Битрикс будет искать существующий элемент при обновлении. Без этого повторный импорт создаст дубли.
- Разберитесь с разделами. Колонку «Категория» сопоставляют либо с привязкой к существующему разделу (по названию или коду), либо настраивают создание разделов на лету. Продумайте это до загрузки, иначе товары свалятся в один раздел.
- Отметьте множественные свойства. Если одно свойство принимает несколько значений (несколько картинок, несколько тегов), договоритесь о внутриячеечном разделителе и проверьте, что мастер его понимает.
Хорошая новость: настройки сопоставления обычно можно сохранить как профиль импорта и переиспользовать при следующих загрузках того же файла. Для регулярных прайсов это критично — вы один раз аккуратно настраиваете маппинг, а дальше просто подставляете новый CSV той же структуры. Отсюда и важность эталонного шаблона файла: при стабильной структуре профиль не приходится перенастраивать.
Первый импорт пошагово
Сведём подготовку и запуск в единый порядок для первичного наполнения каталога — когда инфоблок пустой и мы заливаем товары впервые.
- Снимите резервную копию базы. Даже перед первым импортом: если что-то пойдёт не так, откат из бэкапа — самый быстрый способ вернуться к чистому состоянию.
- Подготовьте инфоблок. Заведите нужные свойства с правильными типами, разделы (или продумайте их создание при импорте), включите торговый каталог, если товары должны иметь цену и остаток.
- Приведите файл к шаблону. Плоская таблица, понятные заголовки, текстовый формат артикулов, корректные числа, сохранение в CSV с известной кодировкой и разделителем.
- Проверьте CSV в редакторе кода. Убедитесь, что кириллица читается, разделитель тот, что ожидаете, значения с запятыми обрамлены кавычками.
- Прогоните фрагмент. Импортируйте первые 20–30 строк, откройте несколько созданных карточек и сверьте все поля: название, свойства, цена, раздел, картинка.
- Настройте профиль сопоставления. На фрагменте отладьте маппинг колонок, включая колонку-идентификатор во внешний код, и сохраните профиль.
- Запустите полный импорт. Загрузите весь файл с теми же настройками. На больших объёмах импорт идёт порциями — дайте ему завершиться, не прерывая.
- Проверьте отчёт и каталог. Сверьте число созданных элементов с числом строк файла, выборочно откройте карточки, проверьте разделы и цены.
- Перестройте служебные структуры. Постройте фасетный индекс для умного фильтра и запустите переиндексацию поиска — импорт сам это не делает.
Обновление по артикулу без дублей
Самая частая боль повторного импорта — размножение товаров. Загрузили прайс сегодня — появилось 5000 карточек. Загрузили обновлённый прайс завтра — стало 10000, причём половина дублирует первую. Причина всегда одна: Битрикс не смог понять, что строка файла описывает уже существующий товар, и на всякий случай создал новый.
Решение — стабильный уникальный идентификатор в каждой строке, по которому импорт ищет совпадение. В роли такого ключа почти всегда выступает артикул, и заводят его во внешний код элемента (XML_ID) или в отдельное строковое свойство, помеченное как идентификатор в настройках импорта. Логика при повторной загрузке становится простой и предсказуемой:
- Совпадение нашлось — Битрикс обновляет существующий элемент: меняет цену, остаток, описание, оставляя тот же ID и все связи.
- Совпадения нет — Битрикс создаёт новый элемент, потому что это, вероятно, новинка.
- Строки нет в файле, а товар есть — это отдельный вопрос политики: деактивировать снятые с продажи, обнулять остаток или не трогать. Штатный импорт по умолчанию их не удаляет.
Ключевое требование к идентификатору — стабильность. Артикул должен быть одним и тем же от выгрузки к выгрузке. Если сегодня артикул «BS-M-BL», а завтра поставщик переименовал его в «BS/M/BL», Битрикс сочтёт это новым товаром и создаст дубль. Поэтому идентификатор берут из источника, который его не меняет: учётная система, 1С, стабильный код поставщика. И наоборот — «название» плохой ключ: названия правят постоянно, и привязка по ним рассыпается на первой же редактуре.
Ещё один нюанс — уникальность внутри файла. Если в одном CSV две строки имеют одинаковый артикул, импорт либо перезапишет одну другой, либо создаст путаницу. Перед загрузкой полезно прогнать файл на дубли артикулов прямо в Excel (условное форматирование или сводная таблица) и устранить их. Дубли в источнике — это дубли в каталоге, импорт лишь переносит беспорядок.
Разовый импорт или регулярное обновление прайса
Импорт из CSV решает две принципиально разные задачи, и путать их дорого. Разовый импорт — это «залить каталог один раз»: первичное наполнение, миграция со старого сайта, добавление новой категории. Регулярное обновление прайса — это «каждый день/неделю освежать цены и остатки»: процесс, который повторяется и должен быть максимально автоматизирован и защищён от ошибок.
| Критерий | Разовый импорт CSV | Регулярное обновление |
|---|---|---|
| Частота | Один раз или изредка | Ежедневно/еженедельно |
| Идентификатор | Желателен | Обязателен и стабилен |
| Что меняется | Всё содержимое | Чаще цены и остатки |
| Ручной труд | Допустим | Нужно минимизировать |
| Риск дублей | Разовый, контролируемый | Накапливается при ошибке |
| Куда развивается | Может остаться CSV | Обычно перерастает в обмен с 1С |
Вывод простой: для разовой задачи ручной импорт CSV — нормальный и достаточный инструмент. Для регулярного обновления он быстро упирается в потолок: каждую загрузку кто-то должен готовить файл, помнить кодировку и разделитель, не перепутать профиль сопоставления, не забыть перестроить фасет. Один невнимательный прогон — и в каталоге дубли или съехавшие цены. Поэтому регулярное обновление прайса рано или поздно уводят либо в автоматический импорт по расписанию (агент, который сам берёт файл из папки), либо в полноценный обмен с 1С по CommerceML, где цены и остатки приходят без участия человека.
Обновление цен и остатков
Отдельный и самый частый сценарий регулярного импорта — обновление прайса: цены и остатки меняются гораздо чаще, чем описания и картинки. Здесь важно не грузить каждый раз весь каталог целиком, а обновлять точечно то, что реально изменилось.
Что учесть с ценами
Цена товара в 1С-Битрикс — это поле торгового каталога, а не обычное свойство инфоблока. При сопоставлении в мастере вы указываете, в какой тип цены (базовая, розничная, оптовая) ложится колонка. Частые тонкости: десятичный разделитель должен быть точкой (не запятой), в числах не должно быть пробелов-разделителей тысяч и символа валюты, а сама валюта должна соответствовать настройкам каталога. Если у товара несколько типов цен, каждый обновляется отдельной колонкой или отдельным проходом.
Что учесть с остатками
Остаток (количество) — тоже поле каталога. При обновлении важно решить, что делать с товарами, которых нет в текущем файле остатков: обнулять их количество (снятые с продажи «пропадают» из наличия) или не трогать. Если магазин работает с несколькими складами, плоский CSV с одной колонкой остатка не покроет складской учёт — там уже нужен обмен, который умеет раскладывать количество по складам. Для простого магазина с единым остатком CSV вполне достаточно.
И главное правило обновления прайса: пустая ячейка в файле — это не всегда «оставить как было». В зависимости от настроек импорта пустое значение может затереть существующее. Поэтому если в новом прайсе нет колонки описания, лучше вообще не сопоставлять её с полем, чем сопоставить и получить пустые ячейки, стирающие тексты. Узкий файл обновления снимает этот риск на корню.
Торговые предложения при импорте
Если товары продаются в вариациях — размеры, цвета, объёмы, — простой плоский импорт в один инфоблок уже не покрывает задачу. Вариации в 1С-Битрикс живут в отдельном инфоблоке торговых предложений, связанном с товарами. Мы подробно разбираем эту архитектуру в статье про торговые предложения (SKU) в 1С-Битрикс; здесь важно понять, как они соотносятся с импортом из CSV.
Штатный импорт CSV работает на уровне одного инфоблока. Это значит, что для каталога с вариациями плоского файла недостаточно — нужно грузить два связанных набора данных: сами товары в инфоблок товаров и их предложения в инфоблок офферов, проставляя каждому предложению привязку к родителю. Есть несколько практических подходов:
- Две загрузки с общим ключом. Сначала импортируют товары (у каждого — свой артикул/внешний код), затем отдельным файлом импортируют предложения в инфоблок офферов, указывая в каждой строке артикул родительского товара, по которому проставляется привязка.
- Плоский файл с ключом группировки. Один CSV, где несколько строк с одинаковым «кодом модели» — это вариации одного товара. Но штатный мастер так «из коробки» не разложит данные по двум инфоблокам: обычно требуется доработка или скрипт.
- Обмен вместо импорта. Как только вариаций много, надёжнее не мучить CSV, а настроить обмен по CommerceML: там характеристики номенклатуры сами становятся торговыми предложениями, а связи восстанавливаются по внешним кодам.
Практический вывод: простой каталог без вариаций отлично грузится и обновляется штатным CSV. Каталог с торговыми предложениями через плоский CSV грузить можно, но это неудобно, требует нескольких проходов или доработки, и почти всегда упирается в необходимость обмена. Если ваш ассортимент — это одежда, обувь, техника с модификациями, закладывайте обмен с 1С сразу, а CSV оставьте для разовых задач.
Картинки: пути и загрузка
Картинки — частая точка непонимания при импорте. В CSV нельзя положить сам файл изображения: там только текст. Поэтому картинки передают ссылками, а мастер импорта по этим ссылкам подтягивает изображения в карточки. Работает это так:
- Файлы кладут на сервер заранее. Изображения загружают в отдельную папку сайта (например, в директорию загрузок), а в колонке CSV указывают путь к файлу относительно этой папки или сайта.
- Колонку пути сопоставляют с полем картинки. В мастере путь связывают с детальной или анонсной картинкой элемента либо со свойством типа «Файл». Мастер читает путь и привязывает файл к товару.
- Для нескольких картинок — множественное свойство. Галерею товара обычно хранят в свойстве-файле с включённой множественностью; несколько путей в ячейке разделяют оговорённым символом.
- Внешние URL — с оговорками. Часть конфигураций умеет скачивать картинку по внешней ссылке (http-адресу) в момент импорта, но это медленнее, зависит от доступности источника и не всегда включено. Надёжнее сначала залить файлы на свой сервер.
Типичные грабли с картинками: пути в файле не совпадают с реальным расположением на сервере (регистр букв, лишняя папка, кириллица в именах файлов), из-за чего изображение «не находится» и карточка остаётся без фото. Поэтому имена файлов держат латиницей, без пробелов, а пути в CSV сверяют с фактической структурой папок. И, как всегда, проверяют на фрагменте: загрузили несколько товаров — открыли карточки — убедились, что картинки на месте, прежде чем грузить тысячи строк.
BS-M-BL.jpg. Тогда путь в CSV собирается автоматически из артикула, а при обновлении картинок не приходится вручную пересобирать соответствия «товар — фото». Осмысленные имена файлов экономят часы на больших каталогах.
Первый импорт на копии сайта
Правило, которое не стоит нарушать: первый импорт большого или незнакомого файла делают на копии, а не на боевом каталоге. Причина проста — ошибки маппинга, кодировки и формата чисел проявляются только после загрузки, и если она прошла сразу на живом сайте, вы правите последствия под нагрузкой, с реальными посетителями и заказами.
Безопасный порядок выглядит так:
- Резервная копия базы — всегда первым шагом. Перед любым массовым импортом снимают бэкап. Это дешёвая страховка, которая превращает откат из многочасовой чистки в операцию на несколько минут.
- Тестовый инфоблок или копия сайта. Отладку маппинга и проверку результата проводят на копии каталога или отдельном тестовом инфоблоке той же структуры. Там можно спокойно ошибаться.
- Прогон фрагмента. На копии сначала грузят небольшой кусок файла, проверяют карточки, потом весь файл. Только убедившись, что результат корректен, переносят настройки на боевой каталог.
- Боевой импорт в окно низкой нагрузки. Полную загрузку на живом сайте запускают, когда посетителей меньше, и после свежего бэкапа.
Этот подход выглядит «перестраховкой» ровно до первого испорченного каталога. Один прогон непроверенного файла на живом магазине способен создать тысячи дублей, обнулить цены или стереть описания — и всё это увидят покупатели. Копия и бэкап стоят получаса, а разгребание последствий — дней. Мы в проектах по разработке интернет-магазинов на 1С-Битрикс закладываем этот регламент в любую работу с массовой загрузкой данных.
Производительность больших файлов
Маленький прайс на пару сотен строк грузится мгновенно. Файл на десятки и сотни тысяч строк — уже нагрузка, которая упирается в ограничения PHP и сервера: время выполнения скрипта, память, размер загружаемого файла. Штатный импорт это учитывает и на больших объёмах работает порциями — обрабатывает файл кусками, показывая прогресс, чтобы не превысить лимит времени за один запрос.
| Узкое место | Как проявляется | Что помогает |
|---|---|---|
| Размер загружаемого файла | Файл не грузится через форму | Загрузить CSV на сервер по FTP/SFTP, указать путь |
| Время выполнения | Импорт «обрывается» на середине | Пошаговая (порционная) обработка, увеличение лимитов |
| Память | Ошибка нехватки памяти | Обработка построчно, не грузить файл целиком в память |
| Блокировки и кэш | Сайт «тормозит» во время импорта | Импорт в часы низкой нагрузки, сброс кэша после |
| Пересчёт фасета и поиска | Долгий импорт + долгая переиндексация | Разнести во времени, запускать по расписанию |
Практические приёмы для тяжёлых файлов: заливать CSV на сервер напрямую (минуя форму загрузки с её лимитом), запускать импорт в окно низкой посещаемости, а тяжёлые пост-операции — построение фасетного индекса и переиндексацию поиска — выносить на потом, а не делать «на лету» сразу после загрузки. Для по-настоящему больших и регулярных объёмов ручной импорт через мастер вообще перестаёт быть удобным: там уместнее автоматический импорт по расписанию или обмен, который умеет обрабатывать данные фоново и инкрементально — только изменения, а не весь каталог каждый раз.
Ограничения штатного импорта
Штатный импорт CSV — честный рабочий инструмент, но у него есть чёткие границы, за которыми он становится неудобным или недостаточным. Знать их полезно, чтобы вовремя выбрать другой путь, а не героически «допиливать» CSV там, где нужен обмен.
- Только CSV, не .xlsx. Прямой загрузки Excel-файлов нет — всегда через промежуточный CSV со всеми рисками кодировки и разделителей.
- Один инфоблок за проход. Товары и торговые предложения — это два инфоблока, и связать их плоским импортом «из коробки» непросто; для вариаций нужен либо многопроходный импорт, либо обмен.
- Плоская модель данных. Сложные структуры — несколько складов, множественные цены с условиями, связанные товары, комплекты — плохо ложатся в один CSV.
- Ручной труд и хрупкость. Каждая загрузка требует внимания к кодировке, маппингу и профилю; человеческая ошибка на любом шаге портит каталог.
- Нет инкрементальности «из коробки». Мастер обычно работает со всем файлом; выгружать и грузить только изменения — это уже задача источника данных или скрипта.
- Ограниченная логика удаления/деактивации. Что делать с товарами, пропавшими из файла, штатный импорт решает грубо; тонкую политику снятия с продажи чаще пишут отдельно.
Ни одно из этих ограничений не делает импорт CSV «плохим» — просто у него своя ниша: разовые и несложные загрузки, первичное наполнение, простые прайсы. Как только требования выходят за эти рамки, дешевле перейти на подходящий инструмент, чем бороться с форматом.
Когда нужен CommerceML или скрипт
Есть три ситуации, в которых штатный импорт CSV пора менять на более мощный механизм.
Регулярный обмен с 1С по CommerceML
Если у бизнеса есть 1С и каталог нужно держать в актуальном состоянии постоянно, правильный ответ — обмен по CommerceML. Это автоматический протокол: 1С по расписанию выгружает номенклатуру, характеристики, цены, остатки и картинки, а Битрикс принимает их и раскладывает по инфоблокам товаров и предложений, связывая по внешним кодам. Никакой ручной подготовки файлов, никаких «крякозябр», а вариации приходят как полноценные торговые предложения. Как настраивается и диагностируется этот обмен, мы подробно разбираем в статье про интеграцию магазина с 1С.
Собственный скрипт импорта
Когда источник данных не 1С, а, скажем, API поставщика, нестандартный XML или тот же Excel, но со сложной логикой, пишут собственный скрипт на API Битрикса (классы работы с элементами инфоблоков, ценами, остатками) или на PhpSpreadsheet для чтения .xlsx напрямую. Скрипт даёт полный контроль: инкрементальное обновление только изменённого, своя логика дублей и деактивации, раскладка по двум инфоблокам, обработка картинок по своим правилам. Ценой большей гибкости идёт разработка и поддержка.
Сторонние модули импорта
На «Маркетплейсе» 1С-Битрикс есть готовые модули, которые расширяют импорт: читают .xlsx напрямую, поддерживают сложный маппинг, планировщик и обновление по расписанию. Это компромисс между штатным CSV и полноценной разработкой — быстрее скрипта, гибче штатного мастера, но с зависимостью от чужого решения и его качества.
Проверка результата импорта
Импорт не заканчивается на сообщении «готово». Пока вы не проверили результат, вы не знаете, прошёл он корректно или тихо создал проблему. Минимальный набор проверок после каждой значимой загрузки:
- Сверьте числа. Количество созданных и обновлённых элементов из отчёта импорта сопоставьте с числом строк в файле. Резкое расхождение — сигнал дублей или пропусков.
- Откройте выборку карточек. Проверьте несколько товаров из разных разделов: название, свойства, цена, остаток, раздел, картинка — всё ли на месте и в нужных полях.
- Проверьте кодировку. Убедитесь, что кириллица читается везде — в названиях, описаниях и значениях свойств, а не только в первом попавшемся товаре.
- Поищите дубли. Отсортируйте элементы по артикулу/внешнему коду и убедитесь, что нет двух карточек с одним идентификатором.
- Перестройте фасет и поиск. Постройте фасетный индекс умного фильтра и запустите переиндексацию поиска — иначе фильтр и поиск покажут старую картину.
- Проверьте фильтр на витрине. Зайдите на сайт и убедитесь, что новые значения свойств появились в умном фильтре и счётчики совпадают с каталогом.
Про фасет стоит сказать отдельно: это самая частая «незаметная» проблема после импорта. Товары загрузились правильно, но фильтр их «не видит», потому что фасетный индекс не пересчитан. Пользователь фильтрует по бренду — и не находит только что загруженные товары. Если хотите глубже понять, как устроен и почему требует перестроения этот механизм, у нас есть подробный разбор про умный фильтр в 1С-Битрикс. Здесь запомните правило: после массового импорта фасет перестраивают всегда.
Откат неудачного импорта
Даже при аккуратной подготовке импорт иногда идёт не так: не тот профиль маппинга, съехавшая кодировка, файл со старыми ценами. Способность быстро откатиться отличает управляемый процесс от паники, поэтому откат продумывают до загрузки, а не после.
| Способ отката | Когда применим | Скорость и полнота |
|---|---|---|
| Восстановление из бэкапа базы | Бэкап снят прямо перед импортом | Быстро и полно — эталонный способ |
| Удаление партии по метке/дате | Элементы помечены при импорте | Быстро для создания, сложнее для обновления |
| Импорт в отдельный раздел | Заранее грузили в изолированный раздел | Удаляется раздел целиком, но нужна подготовка |
| Повторный «правильный» импорт | Есть корректная версия файла | Чинит значения, но не убирает дубли |
| Ручная чистка | Бэкапа нет, партия не помечена | Медленно и рискованно — крайний случай |
Из таблицы видно главное: единственный по-настоящему быстрый и полный способ отката — восстановление из резервной копии базы, снятой непосредственно перед импортом. Все остальные варианты — компромиссы разной степени болезненности. Поэтому бэкап перед импортом это не бюрократия, а самый ценный элемент всего процесса. Дополнительно помогает дисциплина: грузить в изолированный раздел, помечать партию служебным полем, хранить предыдущую версию файла — всё это даёт запасные пути, если бэкап по каким-то причинам недоступен.
Частые ошибки
- Попытка загрузить .xlsx напрямую. Штатный импорт читает только CSV. Excel сначала сохраняют в CSV с контролем кодировки и разделителя.
- Несовпадение кодировок. Файл в UTF-8, а в мастере выбрана 1251 (или наоборот) — кириллица превращается в «крякозябры». Кодировка файла и мастера должны совпадать.
- Нет стабильного идентификатора. Без артикула во внешнем коде повторный импорт создаёт дубли вместо обновления. Ключ закладывают уже на первом импорте.
- Нестабильный артикул. Меняющийся от выгрузки к выгрузке идентификатор ломает обновление: старый товар считается новым. Ключ должен быть постоянным.
- Неверный разделитель. Данные схлопываются в одну колонку или «разъезжаются» — разделитель в мастере не тот, что в файле. Сначала смотрят файл, потом настраивают мастер.
- Пустые ячейки затирают данные. Сопоставленная колонка с пустыми значениями стирает описания и картинки. Для обновления прайса делают узкий файл — только артикул, цена, остаток.
- Срезанные артикулы и штрихкоды. Excel убрал ведущие нули или перевёл длинные числа в экспоненту. «Опасные» колонки заранее переводят в текстовый формат.
- Импорт сразу на боевом каталоге. Непроверенный файл на живом сайте создаёт дубли и портит карточки на глазах у покупателей. Первый прогон — на копии, после бэкапа.
- Забыли фасет и поиск. После импорта фильтр «не видит» новые товары и значения. Фасетный индекс перестраивают, поиск переиндексируют.
- Дубли артикулов в самом файле. Две строки с одним артикулом порождают путаницу в каталоге. Файл чистят от дублей до загрузки.
- Битые пути картинок. Пути в CSV не совпадают с реальным расположением файлов — карточки остаются без фото. Имена латиницей, пути сверяют со структурой папок.
- Плоский CSV для каталога с вариациями. Товары и предложения — два инфоблока; одним плоским файлом их корректно не связать. Для вариаций нужен многопроходный импорт или обмен.
Чек-лист импорта
Сведём всё в практический список, по которому удобно проверять готовность к загрузке и корректность результата.
- Файл в CSV, структура плоская. Одна строка — один товар; объединённых ячеек, формул и промежуточных заголовков нет.
- Кодировка и разделитель известны. CSV открыт в редакторе кода, кодировка и разделитель проверены и совпадут с настройками мастера.
- «Опасные» поля текстовые. Артикулы, штрихкоды, коды сохранены без потери ведущих нулей и экспоненты.
- Идентификатор заложен. Колонка-артикул сопоставлена с внешним кодом (XML_ID) для обновления без дублей.
- Свойства заведены заранее. Все целевые свойства инфоблока существуют с правильными типами; списки наполнены.
- Разделы продуманы. Привязка к разделам настроена, товары не свалятся в одну кучу.
- Бэкап базы снят. Резервная копия сделана непосредственно перед импортом.
- Прогон фрагмента выполнен. 20–30 строк загружены на копии, карточки проверены, маппинг отлажен и сохранён в профиль.
- Прайс отделён от контента. Обновление цен и остатков идёт узким файлом, отдельно от описаний и картинок.
- Полный импорт завершён без обрывов. На большом файле дали пройти всем порциям; отчёт проверен.
- Результат сверен. Числа, выборка карточек, кодировка, отсутствие дублей проверены.
- Фасет и поиск перестроены. Фасетный индекс построен, поиск переиндексирован, фильтр на витрине проверен.
Словарь терминов
| Термин | Что означает |
|---|---|
| Импорт из CSV | Штатная загрузка данных о товарах из текстового файла в инфоблок 1С-Битрикс. |
| CSV | Текстовый формат таблицы: строки — переносами, колонки — символом-разделителем. |
| Кодировка | Способ записи символов в байтах (UTF-8, Windows-1251); при несовпадении — «крякозябры». |
| Разделитель полей | Символ между колонками CSV: запятая, точка с запятой или табуляция. |
| Ограничитель строк | Кавычки, которыми обрамляют значения с запятыми и переносами внутри. |
| Сопоставление (маппинг) | Привязка колонок файла к полям и свойствам элементов инфоблока. |
| Внешний код (XML_ID) | Стабильный идентификатор элемента; ключ поиска при обновлении без дублей. |
| Обновление прайса | Частный случай импорта: массовое обновление цен и остатков существующих товаров. |
| CommerceML | Формат автоматического обмена между 1С и Битриксом: товары, цены, остатки, характеристики. |
| Фасетный индекс | Заранее просчитанная таблица «свойство → товары» для быстрого умного фильтра. |
Вывод
Импорт каталога из Excel и CSV в 1С-Битрикс — это простой инструмент со строгими правилами. Excel готовит данные, CSV их переносит; кодировка файла и мастера обязаны совпадать; колонки вручную сопоставляются со свойствами инфоблока; а стабильный артикул во внешнем коде превращает повторную загрузку из источника дублей в аккуратное обновление. Освоив эти четыре вещи, вы закроете подавляющее большинство задач по наполнению и обновлению каталога без сторонних решений.
Практический вывод один: относитесь к импорту как к управляемому процессу, а не разовому «залил и забыл». Резервная копия и прогон фрагмента на копии перед боевой загрузкой, узкий файл для обновления прайса, перестроение фасета после импорта, честный выбор между CSV и обменом с 1С там, где начинаются вариации и регулярность, — вот что отличает чистый каталог от свалки дублей. А если ассортимент растёт, обновляется ежедневно и обрастает торговыми предложениями, не насилуйте CSV: закладывайте грамотно спроектированный каталог с обменом с 1С с самого начала — и загрузка товаров перестанет быть головной болью. Больше разборов по каталогу и поиску — в рубрике «Каталог и поиск».