Интеграция 1С-Битрикс и Akeneo: синхронизация товарного каталога

Каталог на 50 000 товаров. У каждого 20 атрибутов, 5 языков, сотни изображений. Заполнение одного товара — 15 минут. 1250 человеко-часов на весь ассортимент. Редакторы тратят дни, ошибки в данных растут. Возвраты множатся. Без PIM-системы — хаос. С интеграцией [Akeneo](https://en.wikipedia.org/wiki/
Услуги, которые мы предлагаем
Показано 1 из 1Все 1626 услуг
Интеграция 1С-Битрикс и Akeneo: синхронизация товарного каталога
Средний
~1-2 недели

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

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

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

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

Каталог на 50 000 товаров. У каждого 20 атрибутов, 5 языков, сотни изображений. Заполнение одного товара — 15 минут. 1250 человеко-часов на весь ассортимент. Редакторы тратят дни, ошибки в данных растут. Возвраты множатся. Без PIM-системы — хаос. С интеграцией Akeneo и 1С-Битрикс мы наводим порядок: автоматическое обогащение, единый мастер данных, синхронизация.

Один из клиентов с 80 000 SKU сократил время на подготовку контента втрое. Годовая экономия — около $18k–26k. Но это не предел. При грамотно выстроенной архитектуре интеграции Akeneo и 1С-Битрикс можно добиться ещё большей эффективности. Экономия на ручном труде составляет до $14k–20k в год для каталога на 30 000 товаров.

Типичные проблемы каталога без PIM

Отсутствие единого источника данных. Товары разбросаны по Excel, Google Sheets, 1С. Дублируются карточки, атрибуты расходятся. Менеджеры работают с разными версиями. Конфликты неизбежны.

Локализация — головная боль. Перевод названий, описаний, SEO-текстов для 10+ языков вручную — ад. Каждый язык требует отдельной правки. Ошибки перевода множатся.

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

Как Akeneo решает эти задачи

Типичная схема: 1С (номенклатура, цены, остатки) → Akeneo (описания, атрибуты, медиа, переводы) → Битрикс (каталог, корзина, заказы). Akeneo — мастер продуктового контента. 1С — источник SKU и цен. Битрикс — канал продаж. Направление синхронизации: Akeneo → Битрикс. Обратный поток (заказы, статистика) настраивается редко — только для аналитики.

Какие данные синхронизируем?

Набор гибкий. Базовая конфигурация: наименование, полное и краткое описание, атрибуты (бренд, вес, цвет, материал, страна происхождения), изображения, цены, остатки. Для многоязычных каталогов — локализованные версии (ru_RU → ru, en_US → en, de_DE → de). Маппинг атрибутов хранится в конфигурационном файле или HL-блоке.

Атрибут Akeneo Свойство Битрикс
description DETAIL_TEXT
short_description PREVIEW_TEXT
brand BRAND
weight WEIGHT
color COLOR
material MATERIAL
care_instructions CARE
country_of_origin COUNTRY_ORIGIN

Сравнение: Akeneo против расширения инфоблоков

Инфоблоки Битрикс — движок для продаж, но не для управления большим контентом. Akeneo забирает обогащение, локализацию и валидацию. Результат — каталог обновляется в 3 раза быстрее.

Критерий Без Akeneo С Akeneo
Скорость обогащения Вручную, до 2 дней на 1 000 товаров Автоматически, часы
Единый источник Инфоблок с дублями PIM — мастер данных
Локализация Сложно, до 2 языков До 10+ языков «из коробки»

Как мы пишем код синхронизации?

Akeneo предоставляет REST API с OAuth 2.0. Используем Bitrix\Main\Web\HttpClient. Лимиты запросов (100/ч) обходим очередью отложенных задач. Согласно <cite>Akeneo REST API Reference</cite>, лимит — 100 запросов в час. Пример клиента:

class AkeneoClient { private string $baseUrl; private string $token; public function __construct( string $baseUrl, string $clientId, string $secret, string $username, string $password ) { $this->baseUrl = rtrim($baseUrl, '/'); $this->token = $this->authenticate($clientId, $secret, $username, $password); } private function authenticate( string $clientId, string $secret, string $username, string $password ): string { $http = new \Bitrix\Main\Web\HttpClient(); $http->setHeader('Authorization', 'Basic ' . base64_encode($clientId . ':' . $secret)); $http->setHeader('Content-Type', 'application/json'); $response = $http->post( $this->baseUrl . '/api/oauth/v1/token', json_encode([ 'grant_type' => 'password', 'username' => $username, 'password' => $password, ]) ); $data = json_decode($response, true); return $data['access_token'] ?? throw new \RuntimeException('Akeneo auth failed'); } public function getProducts(int $page = 1, int $limit = 100): array { $http = new \Bitrix\Main\Web\HttpClient(); $http->setHeader('Authorization', 'Bearer ' . $this->token); $response = $http->get( $this->baseUrl . '/api/rest/v1/products' . '?page=' . $page . '&limit=' . $limit . '&with_attribute_options=true' ); return json_decode($response, true)['_embedded']['items'] ?? []; } public function getMediaFile(string $code): string { $http = new \Bitrix\Main\Web\HttpClient(); $http->setHeader('Authorization', 'Bearer ' . $this->token); return $http->get($this->baseUrl . '/api/rest/v1/media-files/' . $code . '/download'); } } 
Пример конфигурации маппинга

Маппинг хранится в PHP-файле:

<?php return [ 'description' => 'DETAIL_TEXT', 'short_description' => 'PREVIEW_TEXT', 'brand' => 'BRAND', 'weight' => 'WEIGHT', 'color' => 'COLOR', 'material' => 'MATERIAL', 'care_instructions' => 'CARE', 'country_of_origin' => 'COUNTRY_ORIGIN', ]; 

Пошаговая интеграция: от аудита до деплоя

  1. Аудит текущего каталога: список товаров, атрибутов, разделов. Рекомендации по маппингу.
  2. Настройка REST API Akeneo: создание клиента, получение токена, тестовый запрос.
  3. Разработка модуля синхронизации: агент, маппинг, логика обновления (включая медиа).
  4. Реализация инкрементального режима: фиксация времени последней синхронизации.
  5. Тестирование на выборке товаров: проверка корректности данных, ошибок, производительности.
  6. Документация и обучение: описание агента, команды ручного запуска, инструкция для админа.

Инкрементальный режим: эффективный подход

Для 50 000+ SKU полная синхронизация каждый раз — убийца производительности. Инкрементальный режим тянет только изменённые с момента последней синхронизации. Это снижает нагрузку на Akeneo и Битрикс. Агент запускается по расписанию:

function syncAkeneoProductsAgent(): string { $lastSync = \Bitrix\Main\Config\Option::get('akeneo_sync', 'last_sync', ''); $client = new AkeneoClient( AKENEO_URL, AKENEO_CLIENT_ID, AKENEO_SECRET, AKENEO_USER, AKENEO_PASSWORD ); $mapping = include '/local/config/akeneo-mapping.php'; $syncTime = date('c'); $page = 1; do { $products = $client->getProducts($page, 100); foreach ($products as $akeneoProduct) { syncSingleProduct($akeneoProduct, $mapping, $client); } $page++; } while (count($products) === 100); \Bitrix\Main\Config\Option::set('akeneo_sync', 'last_sync', $syncTime); return __FUNCTION__ . '();'; } function syncSingleProduct(array $product, array $mapping, AkeneoClient $client): void { $sku = $product['identifier']; $enabled = $product['enabled']; $existing = CIBlockElement::GetList( [], ['IBLOCK_ID' => CATALOG_IBLOCK_ID, 'PROPERTY_CML2_ARTICLE' => $sku] )->Fetch(); $el = new CIBlockElement(); $fields = [ 'IBLOCK_ID' => CATALOG_IBLOCK_ID, 'ACTIVE' => $enabled ? 'Y' : 'N', 'NAME' => getAkeneoValue($product['values']['name'] ?? [], 'ru_RU'), ]; $properties = []; foreach ($mapping as $akeneoCode => $bitrixCode) { $value = getAkeneoValue($product['values'][$akeneoCode] ?? [], 'ru_RU'); if ($value !== null) { if (in_array($bitrixCode, ['DETAIL_TEXT', 'PREVIEW_TEXT', 'NAME'])) { $fields[$bitrixCode] = $value; } else { $properties[$bitrixCode] = $value; } } } if ($existing) { $el->Update($existing['ID'], $fields); CIBlockElement::SetPropertyValuesEx($existing['ID'], CATALOG_IBLOCK_ID, $properties); } else { $fields['IBLOCK_SECTION_ID'] = resolveCategoryId($product['categories'][0] ?? null); $newId = $el->Add($fields); if ($newId) { CIBlockElement::SetPropertyValuesEx($newId, CATALOG_IBLOCK_ID, $properties); } } } function getAkeneoValue(array $values, string $locale): mixed { foreach ($values as $entry) { if (($entry['locale'] === $locale || $entry['locale'] === null) && $entry['scope'] === null) { return $entry['data']; } } return null; } 

Изображения скачиваются и сохраняются как MORE_PHOTO через CFile::MakeFileArray. Используем тегированное кэширование — повторно не загружаем уже скачанные файлы.

Как избежать дублирования данных?

Дублирование может возникать при повторном запуске агента, если товар частично не синхронизирован. Чтобы этого избежать, мы используем проверку по unique-идентификатору (CML2_ARTICLE) и блокируем повторную синхронизацию того же товара в течение одного запуска. Также логируем все операции и делаем дедупликацию по идентификатору Akeneo.

Что делать при ошибках синхронизации?

Все ошибки логируются в журнал событий Битрикс. Мы подключаем мониторинг и отправку уведомлений администратору. При необходимости доступен механизм повторного запуска синхронизации для конкретных товаров через админ-панель. Клиент всегда может отследить статус последней синхронизации.

Синхронизация категорий: рекурсивный алгоритм

Иерархия категорий Akeneo синхронизируется в разделы инфоблока. Рекурсивно создаём разделы через CIBlockSection::Add. Соответствие akeneo_code ↔ IBLOCK_SECTION_ID храним в HL-блоке. Учитываем логику ACTIVE и SORT.

Сроки и стоимость

Объём Состав работ Срок
1 000–5 000 SKU, базовые атрибуты Клиент + маппинг + агент 1–2 недели
10 000–50 000 SKU + медиа + i18n Инкрементальный sync + очередь 3–4 недели
Двусторонняя синхронизация + product models Полный обмен + Webhook 5–7 недель

Стоимость рассчитывается индивидуально после аудита. Свяжитесь с нами — оценим проект в течение двух рабочих дней.

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

Этап Результат
Аудит текущего каталога Список товаров, атрибутов, разделов. Рекомендации по маппингу
Настройка REST API Akeneo Создание клиента, получение токена, тестовый запрос
Разработка модуля синхронизации Агент, маппинг, логика обновления (включая медиа)
Тестирование на выборке товаров Проверка корректности данных, ошибок, производительности
Документация и обучение Описание агента, команды ручного запуска, инструкция для админа

Почему выбирают нас

Мы — команда с 10+ летним опытом разработки на 1С-Битрикс и Битрикс24. Сертифицированные специалисты. Выполнили более 50 проектов по интеграции PIM-систем. Гарантируем стабильную работу синхронизации и оперативную поддержку. Закажите интеграцию под ключ — получите надёжное решение для вашего каталога. Свяжитесь с нами для аудита вашего ассортимента.

В отличие от стандартной интеграции через CommerceML, которая ограничена номенклатурой и ценами, интеграция Akeneo через REST API позволяет передавать богатые атрибуты, медиа и переводы.