Когда в каталоге 10 000 товаров, а поставщик присылает прайс раз в день в Excel, обновлять вручную — потеря времени и источник ошибок?
Мы автоматизируем этот процесс: забираем файл, парсим, обновляем цены и остатки без участия человека. Интеграция под ключ занимает от 4 до 6 рабочих дней на одного поставщика. Время сотрудников, затрачиваемое на ручное обновление 1000 позиций, измеряется часами — и это при регулярных опечатках и пропущенных строках. Автоматизация исключает человеческий фактор и высвобождает ресурсы для более ценных задач.
Как автоматизация импорта сокращает расходы?
Ручное обновление 1000 позиций занимает 2–3 часа, ошибки неизбежны. Автоматизация сокращает время до нуля и снижает количество ошибок на 95%. Один раз настроенный процесс работает годами. Наш клиент с 15 000 SKU экономит 40 часов в месяц — это десятки тысяч рублей экономии ежемесячно. Окупаемость — 2–3 месяца. Для магазина с 50 000 товаров эффект масштабируется: экономия времени может превышать 100 часов в месяц.
Как мы получаем прайс-листы из разных источников?
Email с вложением — самый частый сценарий. Подключаемся к почтовому ящику по IMAP, ищем письма от поставщика по теме или отправителю, скачиваем вложение. Для безопасности используем отдельный ящик или папку.
$imap = imap_open('{mail.example.com:993/imap/ssl}INBOX', $user, $pass);
$emails = imap_search($imap, 'FROM "[email protected]" UNSEEN');
foreach ($emails as $num) {
$structure = imap_fetchstructure($imap, $num);
// извлекаем вложение
}
FTP/SFTP — каждый день скачиваем файл по расписанию, сравниваем дату изменения с предыдущим запуском. Если файл не изменился — пропускаем. HTTP URL — поставщик публикует прайс по ссылке с Basic Auth. Все варианты поддерживаются из коробки.
| Источник | Протокол | Частота обновления | Сложность настройки |
|---|---|---|---|
| IMAP | по поступлению | низкая | |
| FTP | FTP/SFTP | по расписанию | средняя |
| HTTP URL | HTTP | по запросу | низкая |
Как настроить маппинг колонок для любого формата?
Проблема: у каждого поставщика свой формат — артикул то в столбце B, то в D, шапка то из 2 строк, то из 5. Решение — конфигурируемый маппинг, который хранится в Highload-блоке:
supplier_id: 42
sku_column: B # артикул в столбце B
price_column: D # цена в столбце D
qty_column: F # остаток в столбце F
header_rows: 3 # первые 3 строки — шапка
Для чтения Excel используем PhpSpreadsheet (преемник PHPExcel):
$spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load($filePath);
$sheet = $spreadsheet->getActiveSheet();
$rows = $sheet->toArray();
Если поставщик сменил формат — достаточно отредактировать маппинг. Для 50 000+ SKU строим обратный индекс в памяти при запуске воркера: грузим все соответствия артикулов один раз, чтобы не долбить БД.
Как обновить цены и остатки через API Битрикс?
Цены в Битриксе хранятся в b_catalog_price. Каждый тип цены — отдельная запись. Мы обновляем их через API:
$priceType = CCatalogPriceType::GetList([], ['NAME' => 'Закупочная'])->Fetch();
CCatalogProduct::SetPrice($elementId, $priceType['ID'], $price, 'RUB');
// наценка для розничной цены
$retailPrice = $supplierPrice * $supplier->getMarkupCoefficient();
Остатки — в b_catalog_store_product. Если склады не используются, обновляем QUANTITY напрямую:
CCatalogStoreProduct::Update($storeProductId, ['AMOUNT' => $qty]);
Идентификация товаров по артикулу: храним соответствия в свойстве инфоблока SUPPLIER_SKU или в Highload-блоке SupplierMapping. Для 50 000+ SKU используем кэш в памяти.
Сравнение ручного и автоматического импорта
| Параметр | Ручной импорт | Автоматический импорт |
|---|---|---|
| Время на 1000 позиций | 2–3 часа | 2–3 минуты |
| Ошибки | 5–10% | <0.1% |
| Частота обновления | раз в неделю | до 24 раз в сутки |
| Затраты на месяц | 40 часов | 0 часов |
Автоматизация в 50 раз быстрее и в 100 раз точнее ручного труда.
Что входит в работу по настройке интеграции?
- Анализ источников данных и текущего формата прайс-листов поставщиков
- Разработка конфигурации маппинга колонок под каждого поставщика
- Настройка получения файлов (email/FTP/HTTP) и агента для их обработки
- Реализация обновления цен и остатков через API Битрикс с учётом торговых каталогов и складов
- Создание системы логирования ошибок и уведомлений (Telegram, Email)
- Передача документации: описание архитектуры, инструкция по добавлению нового поставщика, контакты техподдержки
- Обучение операторов: как распознать сбой и что делать при смене формата
- Поддержка интеграции в течение месяца после запуска
Типовые ошибки при импорте и как их избежать
Смена формата файла. Поставщик не предупредил — парсер упал. Логирование фиксирует ошибки, мы получаем уведомление и оперативно исправляем маппинг. Для критичных поставщиков настраиваем fallback-парсер.
Дубликаты артикулов. Один артикул может оказаться в двух товарах. Решение: перед импортом проверяем уникальность артикула в маппинге. Если дубликат — останавливаем процесс и отправляем alert.
Некорректные цены. Иногда поставщик ошибается в файле. Мы используем проверку на допустимый диапазон: если цена изменилась более чем на 30%, процесс приостанавливается и требует подтверждения.
| Размер прайс-листа | Количество строк | Время обработки | Память (пик) |
|---|---|---|---|
| 2 MB | 5 000 | 7 секунд | 256 MB |
| 10 MB | 25 000 | 35 секунд | 512 MB |
| 50 MB | 120 000 | 3 минуты | 1.5 GB |
Для магазинов с частыми изменениями цен и большим ассортиментом автоматизация — единственный способ оставаться актуальными. Свяжитесь с нами для оценки вашего проекта. Мы проанализируем прайс-листы ваших поставщиков и предложим оптимальную архитектуру. Получите консультацию по автоматизации импорта — расскажем, как ускорить обновление каталога в 10 раз.







