Настройка генерации прайс-листов 1С-Битрикс — автоматическая выгрузка

Менеджер тратит час на сборку прайса в Excel — и всё равно ошибается в цене для постоянного клиента. При каталоге в 15 000 позиций ручная выгрузка занимает целый день, а ошибки в ценообразовании ведут к потере прибыли или клиентов. Каждая ошибка обходится компании в среднем в 5 000 рублей, а при еже
Услуги, которые мы предлагаем
Показано 1 из 1Все 1626 услуг
Настройка генерации прайс-листов 1С-Битрикс — автоматическая выгрузка
Простой
~1 день

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

Часто задаваемые вопросы

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

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1415
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Разработка веб-сайта для компании ФИКСПЕР
    996
  • 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
    735
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    863
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    773
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    1134

Менеджер тратит час на сборку прайса в Excel — и всё равно ошибается в цене для постоянного клиента. При каталоге в 15 000 позиций ручная выгрузка занимает целый день, а ошибки в ценообразовании ведут к потере прибыли или клиентов. Каждая ошибка обходится компании в среднем в 5 000 рублей, а при ежемесячном обновлении это сотни тысяч убытков. Мы настраиваем генерацию прайс-листов прямо из 1С-Битрикс, чтобы данные всегда были актуальны и доступны по ролям. Автоматизация исключает ручные ошибки и даёт менеджерам готовые документы за секунды. В результате клиент получает актуальный прайс за минуты, а не часы. Настройка генерации прайс-листов 1С-Битрикс с разграничением доступа и автоматическим обновлением — это основа эффективной работы отдела продаж.

Проблемы, которые решаем

Ручное обновление цен. При изменении номенклатуры или стоимости нужно вручную править файлы — это чревато неактуальными данными и недовольством клиентов. На одном проекте с 50 000 товаров менеджеры тратили 3 дня на обновление Excel.

  • Ошибки в расчётах. Разные типы цен (опт, розница, спецпредложения) легко перепутать. Наша система автоматически подставляет нужную цену под пользователя, исключая путаницу.
  • Доступ к конфиденциальной информации. Нельзя, чтобы розничный клиент видел оптовые цены. Разграничение через группы пользователей и типы цен решает эту задачу.

Как мы это делаем

Используем PhpSpreadsheet (phpoffice/phpspreadsheet) PhpSpreadsheet — современную библиотеку для работы с Excel. Генератор написан на PHP 8.1+, использует ORM Битрикса и кэширование тегированное для ускорения выборки. Все запросы оптимизированы: выборка цен через CCatalogProduct::GetOptimalPrice, остатки — через CCatalogStoreProduct, кэширование разделов.

Вот пример генерации Excel-прайса с форматированием и автошириной колонок:

use PhpOffice\PhpSpreadsheet\Spreadsheet; use PhpOffice\PhpSpreadsheet\Writer\Xlsx; use PhpOffice\PhpSpreadsheet\Style\NumberFormat; class BitrixPriceListGenerator { public function generate(int $priceTypeId, array $userGroups): string { $spreadsheet = new Spreadsheet(); $sheet = $spreadsheet->getActiveSheet(); $sheet->setTitle('Прайс-лист'); // Заголовки $headers = ['Артикул', 'Наименование', 'Раздел', 'Цена', 'Валюта', 'Остаток']; foreach ($headers as $col => $header) { $sheet->setCellValueByColumnAndRow($col + 1, 1, $header); } // Стиль заголовка $sheet->getStyle('A1:F1')->getFont()->setBold(true); $sheet->getStyle('A1:F1')->getFill() ->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID) ->getStartColor()->setARGB('FFE0E0E0'); $row = 2; $res = $this->getProductsWithPrices($priceTypeId, $userGroups); foreach ($res as $product) { $sheet->setCellValueByColumnAndRow(1, $row, $product['ARTICLE']); $sheet->setCellValueByColumnAndRow(2, $row, $product['NAME']); $sheet->setCellValueByColumnAndRow(3, $row, $product['SECTION']); $sheet->setCellValueByColumnAndRow(4, $row, $product['PRICE']); $sheet->setCellValueByColumnAndRow(5, $row, $product['CURRENCY']); $sheet->setCellValueByColumnAndRow(6, $row, $product['QUANTITY']); // Форматирование числа цены $sheet->getStyleByColumnAndRow(4, $row) ->getNumberFormat() ->setFormatCode(NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED2); $row++; } // Автоширина колонок foreach (range('A', 'F') as $col) { $sheet->getColumnDimension($col)->setAutoSize(true); } // Добавляем дату генерации $sheet->setCellValue('A' . ($row + 1), 'Дата формирования: ' . date('d.m.Y H:i')); $writer = new Xlsx($spreadsheet); $tempFile = tempnam(sys_get_temp_dir(), 'pricelist_'); $writer->save($tempFile); return $tempFile; } private function getProductsWithPrices(int $priceTypeId, array $userGroups): array { $result = []; $dbRes = \CIBlockElement::GetList( ['SECTION_ID' => 'ASC', 'SORT' => 'ASC'], ['IBLOCK_ID' => CATALOG_IBLOCK_ID, 'ACTIVE' => 'Y'], false, false, ['ID', 'NAME', 'IBLOCK_SECTION_ID', 'PROPERTY_ARTICLE'] ); $sectionCache = []; while ($el = $dbRes->GetNextElement()) { $fields = $el->GetFields(); $productId = $fields['ID']; // Получаем цену для типа $priceRes = \CCatalogProduct::GetOptimalPrice($productId, 1, $userGroups); $price = $priceRes['PRICE']['PRICE'] ?? 0; // Кэшируем названия разделов $sectionId = $fields['IBLOCK_SECTION_ID']; if (!isset($sectionCache[$sectionId])) { $sectionCache[$sectionId] = \CIBlockSection::GetByID($sectionId)->GetNext()['NAME'] ?? ''; } // Остатки $storeData = \CCatalogStoreProduct::GetList( [], ['PRODUCT_ID' => $productId] )->Fetch(); $quantity = $storeData['AMOUNT'] ?? 0; $result[] = [ 'ARTICLE' => $fields['PROPERTY_ARTICLE_VALUE'], 'NAME' => $fields['NAME'], 'SECTION' => $sectionCache[$sectionId], 'PRICE' => $price, 'CURRENCY' => $priceRes['PRICE']['CURRENCY'] ?? 'RUB', 'QUANTITY' => $quantity, ]; } return $result; } } 

Как управлять доступом к разным прайсам?

Контроль доступа строится на группах пользователей и типах цен Битрикс. Пример определения типа прайса:

$userId = \Bitrix\Main\Context::getCurrent()->getUser()->getId(); $userGroups = \CUser::GetUserGroup($userId); $priceTypeId = 1; // базовый if (in_array(WHOLESALE_GROUP_ID, $userGroups)) { $priceTypeId = 2; // оптовый } elseif (in_array(VIP_GROUP_ID, $userGroups)) { $priceTypeId = 3; // VIP } 

Такой подход позволяет для каждого типа цен генерировать отдельный прайс-лист, доступный только соответствующей группе. Мы также настраиваем права доступа к файлам через веб-сервер или .htaccess.

Почему стоит автоматизировать генерацию?

Автоматизация через агенты Битрикс особенно выгодна для каталогов от 10 000 позиций. Агент запускается ночью, формирует прайсы для всех типов цен и сохраняет их на сервере:

function GeneratePriceLists(): string { $generator = new BitrixPriceListGenerator(); foreach (getPriceTypes() as $type) { $file = $generator->generate($type['ID'], $type['USER_GROUPS']); $targetPath = '/upload/pricelists/pricelist_' . $type['CODE'] . '.xlsx'; rename($file, $_SERVER['DOCUMENT_ROOT'] . $targetPath); } return __FUNCTION__ . '();'; } 

Экономия времени для каталога из 10 000 товаров: ручная выгрузка — 4 часа, автоматическая — 2 минуты на генерацию всех прайсов. При этом исключаются ошибки человеческого фактора. Каждая ошибка в цене обходится компании в среднем в 5 000 руб. Автоматизация исключает такие ошибки и окупается за 2–3 месяца. Для типового интернет-магазина ежемесячная экономия на зарплате менеджеров и потерях от ошибок достигает 200 000 рублей.

Сравнение форматов прайс-листов

Формат Назначение Особенности
Excel (XLSX) Для менеджеров и представительских целей Форматирование, формулы, несколько листов. Лучше CSV для визуального анализа.
CSV Машинная обработка, интеграции Лёгкий, универсальный, но без оформления. Быстрее генерируется.
PDF Отправка клиентам Фиксированная вёрстка, защита от редактирования.

Выбор формата зависит от аудитории: менеджерам удобнее Excel, для автоматической загрузки в ERP — CSV, для клиентов — PDF.

Процесс работы

  1. Анализ. Изучаем вашу структуру каталога, типы цен, требования к формату. Определяем узкие места в текущей выгрузке.
  2. Проектирование. Согласовываем макет прайса, логику доступа, периодичность генерации. Создаём прототип.
  3. Реализация. Пишем модуль на PHP с учётом кэширования и оптимизации запросов. Код покрываем комментариями.
  4. Тестирование. Проверяем на реальных данных, исправляем нюансы. Тестируем все типы цен и группы пользователей.
  5. Деплой. Устанавливаем на сервер, настраиваем агенты, даём доступ. Обучаем ответственных сотрудников.
Пример настройки агента с cron

Добавьте в /bitrix/php_interface/cron_events.php:

require_once($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/prolog_before.php'); $GLOBALS['DB']->StartTransaction(); if (CAgent::CheckAgentName('GeneratePriceLists();')) { CAgent::AddAgent('GeneratePriceLists();', 'main', 'N', 86400, '', 'Y', date('d.m.Y H:i:s', strtotime('+1 day')), 30); } $GLOBALS['DB']->Commit(); 

После этого агент будет запускаться раз в сутки в выбранное время.

Что входит в работу

  • Настройка генерации прайсов в нужных форматах
  • Разграничение доступа к разным типам цен
  • Разработка и настройка агентов автогенерации
  • Интеграция с 1С (CommerceML) при необходимости
  • Документация по эксплуатации
  • Обучение ответственных сотрудников
  • Гарантия на код — 12 месяцев. Наш опыт — 5+ лет на рынке, более 50 успешных проектов по Битрикс. Мы сертифицированные специалисты 1С-Битрикс. Свяжитесь с нами для оценки вашего проекта — рассчитаем сроки и стоимость за один рабочий день. Получите консультацию по настройке автоматических прайс-листов уже сегодня.

Сроки ориентировочно

Конфигурация Срок
Простой прайс CSV по одному типу цен 0,5–1 день
Excel с форматированием, несколько типов цен 2–3 дня
Автогенерация по расписанию + личный кабинет 3–5 дней