Автонаполнение остатков и цен из прайс-листов поставщиков 1С-Битрикс

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Автонаполнение остатков и цен из прайс-листов поставщиков 1С-Битрикс
Средняя
~1-2 недели
Часто задаваемые вопросы

Наши компетенции:

Этапы разработки

Последние работы

  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1262
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    851
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Разработка на базе Битрикс, Битрикс24, 1С для компании Development of an Online Appointment Booking Widget for a Medical Center
    585
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    751
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    657
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    989

Автонаполнение остатков и цен из прайс-листов поставщиков 1С-Битрикс

Прайс-лист поставщика — Excel или CSV, который присылают по расписанию на почту или выкладывают на FTP. В отличие от API, прайс не обновляется в реальном времени, но для большинства b2b-магазинов обновление раз в день-два полностью достаточно. Задача: извлечь цены и остатки из нестандартного файла и обновить b_catalog_price и b_catalog_store_product.

Получение прайс-листа

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.

Чтение Excel/CSV

Для Excel используем PhpSpreadsheet (преемник PHPExcel):

$spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load($filePath);
$sheet = $spreadsheet->getActiveSheet();
$rows = $sheet->toArray();

Проблема: у каждого поставщика свой формат. Столбцы с артикулом, ценой и остатком находятся в разных позициях, первые строки могут быть заголовками разной длины.

Решение: конфигурируемый маппинг колонок, хранящийся в базе:

supplier_id: 42
sku_column: B       # артикул в столбце B
price_column: D     # цена в столбце D
qty_column: F       # остаток в столбце F
header_rows: 3      # первые 3 строки — шапка

Обновление цен

Цены в Битриксе хранятся в b_catalog_price. Каждый тип цены — отдельная запись:

$priceType = CCatalogPriceType::GetList([], ['NAME' => 'Закупочная'])->Fetch();
CCatalogProduct::SetPrice($elementId, $priceType['ID'], $price, 'RUB');

Если у поставщика несколько типов цен (розничная, оптовая, специальная) — создаём соответствующие типы в Битриксе и обновляем каждый отдельно.

Наценка при импорте: часто нужно импортировать закупочную цену и автоматически рассчитывать розничную. Коэффициент наценки хранится в настройках поставщика и применяется при записи:

$retailPrice = $supplierPrice * $supplier->getMarkupCoefficient();

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

b_catalog_store_product — таблица остатков по складам. Если склады не используются, обновляем QUANTITY напрямую через CCatalogProduct::Update().

При использовании складов:

CCatalogStoreProduct::Update($storeProductId, ['AMOUNT' => $qty]);
// или добавляем запись если не существует
CCatalogStoreProduct::Add([
    'PRODUCT_ID' => $elementId,
    'STORE_ID' => $storeId,
    'AMOUNT' => $qty,
]);

Идентификация товаров по артикулу

Прайс содержит артикулы поставщика, в Битриксе хранятся свои коды. Нужен словарь соответствий. Варианты хранения:

  • Свойство SUPPLIER_SKU в инфоблоке — простой вариант
  • Highload-блок SupplierMapping с парами (supplier_id, supplier_sku, element_id) — масштабируемый

Для 50 000+ SKU строим обратный индекс в памяти при запуске воркера: загружаем все пары в массив PHP один раз, используем для маппинга без запросов к БД.

Таймлайн работ

Этап Срок
Настройка получения файла (email/FTP/HTTP) 4–8 часов
Чтение и парсинг Excel/CSV с конфигурируемым маппингом 1–2 дня
Обновление цен и остатков в Битриксе 1 день
Логика идентификации товаров, словарь артикулов 4–8 часов
Обработка ошибок, логирование, расписание 4–6 часов

Итого: 4–6 рабочих дней на одного поставщика. При нескольких поставщиках — конфигурируемый маппинг окупается с третьего подключения.