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

Особое внимание уделим форматам CSV, XML и JSON, а также типичным ошибкам, которые возникают при экспорте больших баз данных. Если вы работаете с 1С-Битрикс: Управление сайтом (любой редакции) или Битрикс24, здесь найдёте решения под свои задачи. Для новичков мы подробно расписали каждый шаг, а для опытных пользователей добавили продвинутые техники оптимизации выгрузки.

1. Стандартные инструменты выгрузки в 1С-Битрикс

Самый простой способ выгрузить каталог — использовать встроенные инструменты административной панели. Они подходят для большинства задач, если не требуется глубокая кастомизация структуры данных. Рассмотрим два основных метода: через Экспорт/Импорт и модуль Торговый каталог.

Чтобы начать, перейдите в раздел Магазин → Настройки → Экспорт/Импорт данных. Здесь доступны профили для выгрузки в форматы CSV и XML. Для CSV можно настроить разделители, кодировку (рекомендуется UTF-8) и список выгружаемых полей. Важно: если ваш каталог содержит более 10 000 товаров, используйте постраничную выгрузку, чтобы избежать таймаутов сервера.

  • 📁 Профили экспорта: Сохраняйте настройки для повторного использования (например, отдельные профили для Яндекс.Маркет и Google Merchant Center).
  • ⚙️ Поля для выгрузки: Выбирайте только необходимые (название, цена, артикул, остатки), чтобы уменьшить размер файла.
  • 🔄 Автоматизация: Настройте расписание выгрузки через CRON, если данные обновляются ежедневно.
💡

Если в выгруженном файле CSV появляются "кракозябры", проверьте кодировку в настройках профиля. Для кириллицы всегда используйте UTF-8 без BOM.

Для выгрузки в XML (например, для YML-фида) перейдите в Магазин → Настройки → Экспорт в Яндекс.Маркет. Здесь можно сгенерировать файл, соответствующий требованиям маркетплейса, с учётом категорий, параметров доставки и валюты. Обратите внимание: если ваш каталог содержит товары с вариантами (цвета, размеры), настройте выгрузку предложений, а не только родительских товаров.

💡

Стандартные инструменты Битрикса покрывают 80% задач по выгрузке, но для сложных структур (многовариантные товары, динамические свойства) потребуется доработка через API или модули.

2. Выгрузка через API 1С-Битрикс

Если встроенные инструменты не подходят (например, нужно выгрузить данные в нестандартном формате или интегрироваться с внешней системой), используйте REST API или PHP-классы Битрикса. Этот метод требует знаний программирования, но даёт полный контроль над процессом.

Основные методы для работы с каталогом:

  • 🔧 CCatalogProduct::GetList() — получение списка товаров с фильтрацией.
  • 📦 CCatalogProduct::GetByID() — детальная информация по конкретному товару.
  • 🏷️ CIBlockElement::GetPropertyValues() — выгрузка дополнительных свойств (цвет, материал и т.д.).

Пример кода для выгрузки товаров в JSON:

<?php

// Подключаем пролог Битрикса

require_once($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/prolog_before.php');

// Получаем список товаров

$arFilter = array('IBLOCK_ID' => 2, 'ACTIVE' => 'Y'); // ID инфоблока и активные товары

$arSelect = array('ID', 'NAME', 'DETAIL_PAGE_URL', 'CATALOG_PRICE_1', 'PROPERTY_CML2_ARTICLE');

$res = CIBlockElement::GetList(array(), $arFilter, false, false, $arSelect);

while($ob = $res->GetNextElement()) {

$arFields = $ob->GetFields();

$arProps = $ob->GetProperties();

$products[] = array_merge($arFields, $arProps);

}

// Сохраняем в JSON

file_put_contents($_SERVER['DOCUMENT_ROOT'].'/upload/export/products.json', json_encode($products, JSON_UNESCAPED_UNICODE));

?>

Для выгрузки через REST API используйте endpoint /bitrix/tools/catalog.export.php с передачей параметров type (например, csv или xml) и iblock_id. Не забудьте сгенерировать API-ключ в настройках модуля Веб-сервисы.

Как ускорить выгрузку больших каталогов?

Для каталогов с 50 000+ товаров используйте пакетную выгрузку:

1. Разбейте товары на группы по 5 000 штук (по ID или алфавиту).

2. Выгружайте каждую группу в отдельный файл, затем объединяйте их.

3. Для ускорения отключите индексирование поиском (CModule::IncludeModule('search')) на время экспорта.

3. Экспорт каталога в 1С: Предприятие

Если ваш интернет-магазин синхронизирован с 1С:Управление торговлей или 1С:ERP, выгрузку каталога удобно осуществлять через модуль Обмен с 1С. Этот метод гарантирует актуальность данных в обеих системах и минимизирует ручной труд.

Для настройки обмена:

  1. В 1С-Битрикс перейдите в Магазин → Настройки → Обмен с 1С.
  2. Укажите путь к файлу обмена (обычно /upload/1c_catalog.xml).
  3. В настройте обработку Выгрузка данных на сайт (путь: Администрирование → Обмен данными с сайтом).
  4. Задайте расписание автоматического обмена (рекомендуется ежедневный экспорт в непиковые часы).

Формат обмена — CommerceML (.xml). В файле будут передаваться:

  • 📦 Товары (название, артикул, цены, остатки).
  • 🏷️ Свойства (характеристики, фотографии, описания).
  • 📂 Категории (структура раздела с вложенностью).
📊 Какой формат обмена с 1С вы используете?
CommerceML (XML)
CSV
JSON
Другой

Критичный нюанс: при первом обмене обязательно выполните полную выгрузку (mode=import), а не инкрементальную. Это позволит избежать расхождений в данных между системами.

4. Выгрузка каталога для маркетплейсов

Маркетплейсы (Ozon, Wildberries, Яндекс.Маркет) предъявляют жёсткие требования к структуре фидов. В 1С-Битрикс есть готовые решения для адаптации каталога под эти требования.

Для Яндекс.Маркет:

  1. Перейдите в Магазин → Настройки → Экспорт в Яндекс.Маркет.
  2. Выберите тип фида: YML (для обычного экспорта) или YML для вендоров (если вы поставщик).
  3. Настройте обязательные поля: vendor (производитель), model (модель), delivery (условия доставки).
  4. Укажите путь к файлу (например, /yandex-market.xml) и сгенерируйте его.

Для Ozon и Wildberries потребуется доработка. Используйте модули из Marketplace или напишите собственный скрипт на основе API. Пример структуры для Ozon:

{

"items": [

{

"offer_id": "12345",

"name": "Название товара",

"price": 999,

"old_price": 1200,

"quantity": 10,

"barcode": "4601234567890"

}

]

}

Маркетплейс Формат фида Обязательные поля Особенности
Яндекс.Маркет YML (XML) name, price, categoryId, vendor Поддерживает варианты товаров (offers)
Ozon JSON/CSV offer_id, name, price, quantity Требует уникальный offer_id для каждого SKU
Wildberries XLSX/CSV nmId, brand, price, quantity Привязка к номенклатуре WB (nmId)
Google Merchant Center XML/CSV id, title, price, availability Поддерживает динамические ремаркетинговые теги

Указать корректные категории (соответствие вашим и категориям маркетплейса)

Проверить наличие всех обязательных полей (баркоды, артикулы)

Оптимизировать названия товаров (длина до 150 символов)

Добавить фотографии с разрешением не менее 800×800 px

Проверить актуальность цен и остатков-->

5. Решение типичных ошибок при выгрузке

Даже при правильной настройке экспорта могут возникать ошибки. Рассмотрим самые распространённые и способы их устранения.

⚠️ Внимание: Если при выгрузке в CSV пропадают русские символы, проверьте кодировку файла. В большинстве случаев помогает принудительное указание UTF-8 в настройках профиля или добавление строки header('Content-Type: text/csv; charset=UTF-8'); в скрипте экспорта.

Ошибка 1: Таймаут при выгрузке большого каталога

Если скрипт прерывается с ошибкой 504 Gateway Time-out, увеличьте лимиты в php.ini:

max_execution_time = 300

memory_limit = 512M

post_max_size = 64M

upload_max_filesize = 64M

Также можно разбить выгрузку на части с помощью параметра NAV_PARAMS в методе GetList().

Ошибка 2: Не экспортируются свойства товаров

Проверьте, что в настройках профиля экспорта отмечены галочки напротив нужных свойств. Если используете API, убедитесь, что в выборке ($arSelect) указаны все необходимые поля, включая PROPERTY_*.

Ошибка 3: Несовпадение цен в 1С и на сайте

Это происходит, если в 1С-Битрикс настроены типы цен (розничная, оптовая), а в профиле экспорта не указан правильный идентификатор типа. Проверьте настройки в Магазин → Настройки → Типы цен и сопоставьте их с .

Ошибка 4: Дублирование товаров в фиде

Чаще всего это связано с неправильной настройкой торговых предложений. Убедитесь, что в экспорте участвуют только родительские товары или корректно сгруппированные предложения (с указанием group_id).

6. Оптимизация выгруженного каталога для SEO

Выгруженный каталог можно использовать не только для синхронизации с внешними системами, но и для SEO-оптимизации. Например, анализ структуры данных помогает улучшить внутреннюю перелинковку или сформировать XML-карту сайта.

Вот несколько способов применения экспортированных данных:

  • 🔍 Анализ семантического ядра: Выгрузите названия товаров и категорий, чтобы найти повторяющиеся ключевые слова или пропущенные long-tail запросы.
  • 📊 Оптимизация метатегов: На основе экспортированных данных автоматически генерируйте title и description для карточек товаров.
  • 🔗 Внутренняя перелинковка: Используйте данные о связанных товарах (аксессуары, аналоги) для создания релевантных ссылок.

Пример скрипта для генерации XML-карты сайта на основе выгруженного каталога:

<?php

$arFilter = array('IBLOCK_ID' => 2, 'ACTIVE' => 'Y');

$arSelect = array('ID', 'NAME', 'DETAIL_PAGE_URL', 'DATE_ACTIVE_FROM');

$res = CIBlockElement::GetList(array('SORT' => 'ASC'), $arFilter, false, false, $arSelect);

$xml = new SimpleXMLElement('<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"/>');

while($ob = $res->GetNextElement()) {

$arFields = $ob->GetFields();

$url = $xml->addChild('url');

$url->addChild('loc', 'https://ваш-сайт.ru'.$arFields['DETAIL_PAGE_URL']);

$url->addChild('lastmod', date('Y-m-d', strtotime($arFields['DATE_ACTIVE_FROM'])));

$url->addChild('changefreq', 'weekly');

$url->addChild('priority', '0.8');

}

$xml->asXML($_SERVER['DOCUMENT_ROOT'].'/sitemap_products.xml');

?>

Для автоматизации SEO-задач можно интегрировать выгрузку с сервисами вроде Screaming Frog или Netpeak Spider. Загрузите CSV-файл с товарами в эти инструменты, чтобы проанализировать:

  • Длину и уникальность title/description.
  • Наличие дублирующегося контента.
  • Оптимизацию изображений (alt-тексты, размеры).

7. Автоматизация и интеграция с внешними системами

Ручная выгрузка каталога отнимает время и чревата ошибками. Автоматизируйте процесс с помощью:

  • 🤖 CRON-задач: Настройте автоматическую выгрузку по расписанию (например, ежедневно в 3:00).
  • 🔌 Вебхуков: Отправляйте данные в внешние системы (например, Amocrm или RetailCRM) сразу после обновления каталога.
  • ☁️ Облачных сервисов: Используйте Google Sheets + Apps Script для парсинга и визуализации данных.

Пример настройки CRON для автоматической выгрузки:

# Выгрузка каталога в CSV каждый день в 3:00

0 3 * /usr/bin/php /path/to/bitrix/cli.php catalog_export --profile-id=1 --format=csv --path=/upload/export/products_$(date +\%Y-\%m-\%d).csv

Для интеграции с RetailCRM используйте готовый модуль из Marketplace или напишите собственный коннектор. Пример передачи данных через API:

$api = new \RetailCrm\ApiClient(

'https://ваш-аккаунт.retailcrm.ru',

'ваш-api-ключ'

);

$products = []; // Массив товаров из Битрикса

$response = $api->request->productsUpload($products);

⚠️ Внимание: При настройке автоматического обмена проверьте, что внешняя система поддерживает объём передаваемых данных. Например, некоторые CRM ограничивают количество товаров в одном запросе (обычно до 1 000 штук). В этом случае используйте пакетную выгрузку.

8. Альтернативные способы выгрузки

Если стандартные методы не подходят, рассмотрите альтернативные варианты:

1. Выгрузка через SQL-запросы

Для опытных пользователей доступен прямой экспорт данных из базы MySQL. Это самый быстрый способ, но требует осторожности, чтобы не нарушить целостность данных. Пример запроса:

SELECT

p.ID, p.NAME, p.DETAIL_PAGE_URL,

c.PRICE, c.QUANTITY,

ip.VALUE as ARTICLE

FROM

b_iblock_element p

LEFT JOIN

b_catalog_product c ON p.ID = c.ID

LEFT JOIN

b_iblock_element_property ip ON p.ID = ip.IBLOCK_ELEMENT_ID AND ip.IBLOCK_PROPERTY_ID = [ID_СВОЙСТВА_АРТИКУЛ]

WHERE

p.IBLOCK_ID = [ID_ИНФОБЛОКА]

INTO OUTFILE '/tmp/products.csv'

FIELDS TERMINATED BY ';'

ENCLOSED BY '"'

LINES TERMINATED BY '\n';

2. Использование модулей из Marketplace

В Marketplace доступны платные и бесплатные решения для выгрузки:

  • 📤 "Экспорт в Excel" — удобный интерфейс для выгрузки в XLSX.
  • 🔄 "Обмен с МойСклад" — синхронизация с популярным сервисом учёта.
  • 📦 "Выгрузка в Facebook Catalog" — для рекламных кампаний.

3. Выгрузка через Composer-пакеты

Для разработчиков доступны пакеты вроде bitrix/exporter, которые упрощают работу с экспортом. Установка:

composer require vendor/bitrix-exporter

php vendor/bin/export catalog --format=json --output=products.json

Выбор способа зависит от задачи:

  • Для разовой выгрузки подойдёт SQL или стандартный экспорт.
  • Для регулярного обмена с внешними системами — API + CRON.
  • Для интеграции с маркетплейсами — специализированные модули.

FAQ: Частые вопросы по выгрузке каталога

Как выгрузить только товары с ненулевым остатком?

В настройках профиля экспорта добавьте фильтр по количеству: в разделе Фильтр укажите CATALOG_QUANTITY > 0. Если используете API, добавьте условие в $arFilter:

$arFilter = array(

'IBLOCK_ID' => 2,

'ACTIVE' => 'Y',

'>CATALOG_QUANTITY' => 0

);

Можно ли выгрузить каталог с фотографиями?

Да, но стандартными средствами Битрикса фотографии экспортируются только в виде ссылок (DETAIL_PICTURE, PREVIEW_PICTURE). Чтобы скачать сами файлы, используйте скрипт:

<?php

$arSelect = array('ID', 'NAME', 'DETAIL_PICTURE');

$res = CIBlockElement::GetList(array(), array('IBLOCK_ID' => 2), false, false, $arSelect);

while($ob = $res->GetNextElement()) {

$arFields = $ob->GetFields();

if ($arFields['DETAIL_PICTURE']) {

$file = CFile::GetPath($arFields['DETAIL_PICTURE']);

copy($_SERVER['DOCUMENT_ROOT'].$file, '/path/to/export/images/'.$arFields['ID'].'.jpg');

}

}

?>

Для XML-фидов (например, YML) фотографии подгружаются автоматически по URL.

Как выгрузить каталог с учетом скидок и промокодов?

Скидки в Битриксе хранятся отдельно от основных цен. Чтобы экспортировать актуальную цену со скидкой, используйте метод CCatalogProduct::GetOptimalPrice():

$arFilter = array('IBLOCK_ID' => 2, 'ID' => $productId);

$arPrice = CCatalogProduct::GetOptimalPrice($productId, 1, array(), 'N');

$finalPrice = $arPrice['PRICE']['PRICE']; // Цена со скидкой

Для выгрузки промокодов потребуется отдельный экспорт из модуля Sale (раздел Магазин → Промо-акции).

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

Разбейте каталог на части по:

  • 🔢 ID: Выгружайте товара с ID от 1 до 5000, затем 5001–10000 и т.д.
  • 📚 Категориям: Экспортируйте по одному разделу за раз.
  • 📅 Дате изменения: Выгружайте только обновлённые товары (фильтр >=DATE_CREATE).

Также увеличьте лимиты памяти в php.ini (см. раздел "Решение ошибок").

Как проверить корректность выгруженного XML-фида?

Используйте валидаторы: