Михаил Базаров Разработка на 1С-Битрикс Михаил Базаров

Как можно с помощью файла csv или xls загрузить товары на сайт?

Вопрос задан: 30 июня 2026 в 10:00 | Просмотров: 8 Использованные MCP инструменты: searchDocs

Задайте свой вопрос — Работает AI в связке с MCP сервером. Перепроверяйте важную информацию.

Загрузка товаров из CSV/XLS в 1С-Битрикс

В 1С-Битрикс есть несколько способов загрузить товары из файлов CSV или XLS. Рассмотрим их от простого к сложному.


1. Штатные профили импорта через административную панель

В модуле Торговый каталог (catalog) существуют готовые механизмы импорта через профили. Они работают через раздел административного интерфейса:

  • Навигация в админке: Настройки → Торговый каталог → Экспорт/Импорт данных.
  • Система позволяет создавать профили импорта, задавать путь к файлу CSV, выбирать инфоблок товаров и запускать загрузку (вручную, агентом или по cron).
  • Профиль хранит имя рабочего шаблона и параметры запуска в поле SETUP_VARS.

2. Создание собственного PHP-шаблона импорта

Можно написать свой шаблон импорта. Механизм подробно описан в документации по экспорту/импорту модуля каталога.

Где размещать шаблоны:

  • Пользовательский шаблон импорта — в папке /bitrix/php_interface/include/catalog_import/.
  • Файл шаблона должен заканчиваться на _run.php.
  • Если рядом есть файл с именем _setup.php, система считает его мастером импорта для настройки.

Ключевые переменные шаблона импорта:

  • $URL_DATA_FILE — путь к файлу CSV для импорта.
  • $strImportErrorMessage — текст ошибки. Если установить эту переменную, импорт считается неудачным.

Пример простого шаблона импорта из CSV:

//<title>Импорт товаров из CSV</title>

$productIblockId = (int)$IBLOCK_ID;
$dataFile = (string)$URL_DATA_FILE;
$allowedDirectory = '/upload/import/';

if ($productIblockId <= 0)
{
    $strImportErrorMessage = 'Не выбран инфоблок каталога';
}
elseif ($dataFile === '')
{
    $strImportErrorMessage = 'Не указан файл импорта';
}
elseif (strncmp($dataFile, $allowedDirectory, strlen($allowedDirectory)) !== 0)
{
    $strImportErrorMessage = 'Файл импорта должен находиться в /upload/import/';
}
elseif (!is_readable($_SERVER['DOCUMENT_ROOT'] . $dataFile))
{
    $strImportErrorMessage = 'Файл импорта недоступен для чтения';
}
else
{
    $file = fopen($_SERVER['DOCUMENT_ROOT'] . $dataFile, 'rb');
    $element = new \CIBlockElement;

    if (!$file)
    {
        $strImportErrorMessage = 'Не удалось открыть файл импорта';
    }
    else
    {
        fgetcsv($file, 0, ';'); // пропускаем заголовки

        while (($row = fgetcsv($file, 0, ';')) !== false)
        {
            [$xmlId, $name] = array_pad($row, 2, '');

            $xmlId = trim((string)$xmlId);
            $name = trim((string)$name);

            if ($xmlId === '' || $name === '')
            {
                $strImportErrorMessage = 'В файле есть строка без XML_ID или названия';
                break;
            }

            $elementRow = \CIBlockElement::GetList(
                [],
                [
                    'IBLOCK_ID' => $productIblockId,
                    '=XML_ID'   => $xmlId,
                ],
                false,
                false,
                ['ID']
            )->Fetch();

            if ($elementRow)
            {
                $result = $element->Update((int)$elementRow['ID'], [
                    'NAME' => $name,
                ]);
            }
            else
            {
                $result = $element->Add([
                    'IBLOCK_ID' => $productIblockId,
                    'XML_ID'    => $xmlId,
                    'NAME'      => $name,
                    'ACTIVE'    => 'Y',
                ]);
            }

            if (!$result)
            {
                $strImportErrorMessage = $element->LAST_ERROR
                    ?: 'Не удалось сохранить элемент каталога';
                break;
            }
        }

        fclose($file);
    }
}

3. Загрузка товаров через API каталога + CSV

Если вам нужно загрузить не только карточки, но и цены, остатки, торговые предложения, внутри шаблона используйте API модуля catalog:

  • \Bitrix\Catalog\Model\Product::add() или update() — для добавления товарных параметров (сделать элемент товаром).
  • \Bitrix\Catalog\Model\Price — для загрузки цен.
  • \Bitrix\Catalog\StoreProductTable или складские документы — для остатков.

Пример добавления товарных параметров и цены для загруженного элемента:

\Bitrix\Main\Loader::includeModule('iblock');
\Bitrix\Main\Loader::includeModule('catalog');

// Создаем элемент инфоблока
$element = new \CIBlockElement;
$productId = $element->Add([
    'IBLOCK_ID' => $productIblockId,
    'XML_ID'    => 'EXT_001',
    'NAME'      => 'Новый товар из CSV',
    'ACTIVE'    => 'Y',
]);

// Делаем элемент товаром каталога
$result = \Bitrix\Catalog\Model\Product::add([
    'ID' => $productId,
    'TYPE' => \Bitrix\Catalog\ProductTable::TYPE_PRODUCT,
]);

// Добавляем цену (базовый тип цены — ID=1)
$priceResult = \Bitrix\Catalog\Model\Price::add([
    'PRODUCT_ID'       => $productId,
    'CATALOG_GROUP_ID' => 1,
    'PRICE'            => 1500.00,
    'CURRENCY'         => 'RUB',
]);

4. Создание профиля импорта программно

Профиль импорта создаётся через класс CCatalogImport:

$importProfileId = \CCatalogImport::Add([
    'FILE_NAME'       => 'my_csv_import',
    'NAME'            => 'Импорт товаров из CSV',
    'IN_MENU'         => 'Y',
    'IN_AGENT'        => 'N',
    'IN_CRON'         => 'N',
    'DEFAULT_PROFILE' => 'N',
    'NEED_EDIT'       => 'N',
    'SETUP_VARS'      => http_build_query([
        'IBLOCK_ID'     => $productIblockId,
        'URL_DATA_FILE' => '/upload/import/products.csv',
    ]),
]);

if (!$importProfileId)
{
    throw new \RuntimeException('Не удалось создать профиль импорта');
}

5. Импорт XLS (Excel)

Штатного импорта XLS напрямую в 1С-Битрикс нет. Для работы с XLS можно:

  • Конвертировать XLS в CSV в Excel (сохранить как CSV с разделителем «;») и загружать CSV-файл через описанные выше механизмы.
  • Написать свой PHP-шаблон, который читает XLS через библиотеки типа PhpSpreadsheet (внимание: для Битрикса это нештатный код, требуется дополнительная установка библиотеки через composer).

Резюме по выбору способа

  1. Для разовой загрузки — создайте профиль импорта через админку и используйте готовый шаблон.
  2. Для регулярной загрузки — создайте профиль с агентами (IN_AGENT = 'Y') или настройте запуск по cron.
  3. Для сложной загрузки (цены, остатки, торговые предложения) — напишите свой PHP-шаблон импорта в /bitrix/php_interface/include/catalog_import/ с вызовом API каталога.
  4. Для XLS файлов — конвертируйте в CSV либо используйте внешнюю PHP-библиотеку для чтения Excel.

Услуги Стоимость разработки на 1С-Битрикс

Стоимость разработки сайта зависит от объёма и сложности проекта. Ниже приведены ориентировочные цены, как правило не выходят за обозначенные рамки. Срок разработки зависит от сложности проекта: как правило называю сроки с запасом.
Финальная стоимость и сроки разработки обговариваются на этапе обсуждения. Скачайте опросник на разработку, заполните как можно подробнее и вышлите удобным способом. После ознакомления смогу задать уточняющие вопросы и оценить проект.
Поддержка и доработки проектов
от 3 000 руб. от 1 часа

Выполнение доработок любой сложности. Поддержка, модернизация и расширение функционала существующих проектов. Решение задач: от мелких правок вёрстки до разработки новых модулей.

Подробнее
Сайт на готовом решении 1С-Битрикс
от 70 000 руб. от 5-ти дней

Вариант для тех, кто не хочет тратить много средств на индивидуальный проект, и не имеет серьезных требований к сайту. Магазин, быстро запускается на базе одного из 200-та готовых решений.

Подробнее
Индивидуальная разработка магазина
от 300 000 руб. от 5-ти недель

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

Подробнее
Мобильное приложение
от 300 000 руб. от 4-х недель

Разработка кроссплатформенного мобильного приложения, которое не уступает нативным решениям как в производительности, так и пользовательском опыте. Публикуется в AppStore, GooglePlay и RuStore

Подробнее
Инфоресурс
от 170 000 руб. от 3-х недель

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

Подробнее
Сайт компании
от 150 000 руб. от 2-х недель

Корпоративный сайт с информационными разделами, каталогом товаров или услуг. Включает формы обратной связи карточек каталога, любое количество статичных и динамичных разделов.

Подробнее

Включено в стоимость разработки:

  • Лицензия на 1С-Битрикс необходимой редакции, дополнительные модули, для реализации функционала и видео-инструкции по работе с готовым проектом
  • Оптимизация программной части проекта и конфигурации сервера под максимальную скорость работы. Базовая СЕО оптимизация и добавление сайта в поисковые системы.

Блог-note Заметки по 1С-Битрикс