Разработка кастомной PIM-системы для 1С-Битрикс

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

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

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

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

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

Архитектура кастомной PIM на Битрикс: от атрибутов до синдикации

Представьте каталог из 15 000 товаров, каждый с 60 уникальными атрибутами. Стандартные инфоблоки тормозят, администраторам не хватает гибкости, а интеграция с маркетплейсами превращается в ад. Мы построили 15 кастомных PIM-систем на 1С-Битрикс и выполнили более 30 внедрений. Кастомная PIM решает эти задачи без перехода на сторонний софт — Битрикс становится единой мастер-системой для данных о товарах. Product Information Management (PIM) — это подход, который мы адаптируем под экосистему 1С-Битрикс, сохраняя скорость внедрения и отсутствие лицензионных отчислений. Как указано в документации 1С-Битрикс, инфоблоки v2.0 поддерживают EAV-модель, но при масштабировании мы используем гибридный подход.

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

Стандартный инфоблок хранит свойства в b_iblock_element_property по модели EAV. При 50+ атрибутах и высоком трафике это даёт проблемы производительности. Для кастомной PIM используем гибридный подход: фиксированные атрибуты (название, описание, изображения) — в полях инфоблока, а динамические — в кастомных таблицах.

CREATE TABLE b_pim_attribute (
    ID INT AUTO_INCREMENT PRIMARY KEY,
    IBLOCK_SECTION_ID INT,
    CODE VARCHAR(100) NOT NULL,
    NAME VARCHAR(255) NOT NULL,
    TYPE ENUM('string','number','boolean','list','multilist') DEFAULT 'string',
    IS_REQUIRED TINYINT(1) DEFAULT 0,
    IS_FILTERABLE TINYINT(1) DEFAULT 0,
    SORT INT DEFAULT 100,
    INDEX idx_section (IBLOCK_SECTION_ID)
);

CREATE TABLE b_pim_attribute_value (
    ID INT AUTO_INCREMENT PRIMARY KEY,
    PRODUCT_ID INT NOT NULL,
    ATTRIBUTE_ID INT NOT NULL,
    VALUE_STRING VARCHAR(1000),
    VALUE_NUMBER DECIMAL(15,4),
    VALUE_BOOLEAN TINYINT(1),
    INDEX idx_product_attr (PRODUCT_ID, ATTRIBUTE_ID)
);

CREATE TABLE b_pim_attribute_option (
    ID INT AUTO_INCREMENT PRIMARY KEY,
    ATTRIBUTE_ID INT NOT NULL,
    VALUE VARCHAR(500) NOT NULL,
    SORT INT DEFAULT 100
);

Такой подход позволяет задавать атрибуты на уровне категории без изменения схемы инфоблока. Подробнее о CommerceML.

Как начать: три шага

  1. Спроектировать схему атрибутов: определить фиксированные и динамические атрибуты для каждой категории. Мы подготавливаем прототип таблиц.
  2. Развернуть кастомные таблицы: выполнить миграции для создания b_pim_attribute, b_pim_attribute_value и индексов.
  3. Настроить административный интерфейс: использовать наш компонент на основе bitrix:main.ui.grid для управления атрибутами.

Этот процесс занимает 2–3 дня для опытного разработчика.

Почему кастомная PIM выгоднее готовых решений?

Кастомная PIM на Битрикс внедряется в 2–3 раза быстрее, чем Akeneo Enterprise, и не требует лицензионных отчислений. Сравнение стоимости:

Критерий Кастомная PIM на Битрикс Akeneo / Pimcore
Стоимость лицензии 0 ₽ (входит в экосистему) От $20 000–$50 000 в год
Время внедрения 2–8 недель 3–6 месяцев
Гибкость под специфику Максимальная Ограничена API
Производительность до 100k SKU Отличная Зависит от сервера

Экономия на лицензиях может достигать $15 000–$30 000 в год, окупая разработку за первый год.

Пример генерации YML-фида
function buildYmlOffer(int $productId): array
{
    $connection = \Bitrix\Main\Application::getConnection();
    $values     = $connection->query(
        "SELECT a.CODE, v.VALUE_STRING, v.VALUE_NUMBER
         FROM b_pim_attribute_value v
         JOIN b_pim_attribute a ON a.ID = v.ATTRIBUTE_ID
         WHERE v.PRODUCT_ID = {$productId}"
    );
    $params = [];
    while ($row = $values->fetch()) {
        $params[$row['CODE']] = $row['VALUE_STRING'] ?? $row['VALUE_NUMBER'];
    }
    return $params;
}

Как мы реализуем интерфейс управления атрибутами?

Кастомный административный раздел на базе компонента bitrix:main.ui.grid:

// /local/modules/company.pim/admin/attributes.php
require_once $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/prolog_admin_before.php';

$APPLICATION->SetTitle('PIM: Управление атрибутами');

$sectionId = (int)$_GET['section_id'];
$connection = \Bitrix\Main\Application::getConnection();
$attributes = $connection->query(
    "SELECT * FROM b_pim_attribute WHERE IBLOCK_SECTION_ID = {$sectionId} ORDER BY SORT"
);

Интерфейс позволяет менеджеру:

  • Добавлять атрибуты к категории without изменения структуры БД
  • Задавать тип, обязательность, возможность фильтрации
  • Сортировать атрибуты перетаскиванием
  • Копировать набор атрибутов в дочернюю категорию

Форма редактирования товара отображает динамические атрибуты текущей категории. Валидация обязательных атрибутов выполняется при сохранении.

Синдикация на несколько каналов

Кастомная PIM экспортирует данные в форматы: Яндекс.Маркет (YML), Ozon, Wildberries (JSON), Google Merchant. Пример генерации фида показан выше.

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

  • Техническое задание и прототип схемы данных
  • Разработка core-функционала (таблицы, форма редактирования, валидация)
  • Кастомный административный интерфейс с сортировкой и копированием атрибутов
  • Экспортёры для маркетплейсов (YML, JSON, XML)
  • Документация и передача исходных кодов
  • Обучение администраторов работе с системой
  • Гарантийная поддержка в течение месяца

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

Этап Длительность Результат
Аналитика и проектирование 3–5 дней Техническое задание, прототип схемы
Разработка core-функционала 2–3 недели Таблицы, форма редактирования, сохранение
Валидация и UI-улучшения 1–2 недели Кастомная админка, сортировка, копирование
Синдикация и массовое редактирование 2–3 недели Экспортёры, bulk edit
Тестирование и документация 1 неделя Отчёт о нагрузочном тестировании, документация

Общая длительность — от 2 до 8 недель в зависимости от объёма функционала. Свяжитесь с нами для точной оценки вашего проекта.

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

Проводим нагрузочное тестирование с помощью ab и jmeter, имитируя 500 одновременных запросов. Проверяем время генерации YML-фида (менее 10 секунд для 50 000 товаров). При необходимости добавляем тегированное кэширование.

Типичные ошибки при разработке

  • Использовать только свойства инфоблоков (EAV) для всех атрибутов — приводит к тормозам при массовых выборках.
  • Не создавать индексы на кастомных таблицах — запросы становятся медленными уже на 10 000 товаров.
  • Забыть про асинхронное сохранение атрибутов — блокирует интерфейс при редактировании.

Закажите разработку

Оценим ваш проект за 1 день, подготовим коммерческое предложение с точными сроками. Получите консультацию инженера — напишите нам.

Разработка и настройка модулей 1С-Битрикс

Главная ловушка Битрикса — init.php. Сунул туда обработчик OnBeforeIBlockElementUpdate, потом ещё один — через год файл на 2000 строк, и при каждом хите весь этот ком выполняется. Мы переносим бизнес-логику в полноценные модули с D7 ORM, собственными таблицами и административным интерфейсом. Модуль можно отключить, перенести на другой проект, покрыть тестами — с init.php ничего из этого не получится. Опыт команды — 10+ лет в Битрикс, сертифицированные специалисты, гарантия на код 6 месяцев. Закажите консультацию — расскажем, как перевести legacy-код в модульную архитектуру.

Почему init.php — худшее место для бизнес-логики?

Init.php не поддерживает автозагрузку классов, не имеет изолированного пространства имён, не поддаётся модульному тестированию и не отключается без правки самого файла. Каждый обработчик, написанный там, срабатывает на каждом запросе, даже если он не нужен. В модуле вы регистрируете обработчика через EventManager, и он выполняется только при наступлении события. Разница в производительности — до 3 раз при 10+ обработчиках.

Стандартные модули: типовые проблемы и решения

Информационные блоки. Архитектура ИБ — первое, что мы ревьюим на любом проекте. Классическая ошибка: один инфоблок каталога с 80 свойствами, из которых 30 — множественные. Таблица b_iblock_element_property раздувается до миллионов строк, CIBlockElement::GetList на фильтрации по трём свойствам уходит в полное сканирование. Переносим справочники в Highload-блоки, убираем множественные свойства где можно, проектируем структуру с прицелом на то, что каталог вырастет в 5 раз.

Интернет-магазин (sale). Бизнес-правила корзины — отдельная история. Настраиваем приоритеты скидок, чтобы две акции не дали 60% вместо 30%, подключаем платёжные обработчики, прописываем кастомную валидацию через OnSaleOrderBeforeSaved.

Поиск. Встроенный модуль search с морфологией работает до 10–15 тысяч элементов. Дальше — Elasticsearch. Настраиваем через API модуля поиска Битрикс, индексируем через CSearchFullText или кастомные индексаторы.

Highload-блоки для справочников, логов, пользовательских данных — вместо раздутых ИБ. Прямые запросы через Bitrix\Highloadblock\HighloadBlockTable, собственные таблицы вместо EAV-структуры стандартных инфоблоков. Миллион записей — без деградации.

Почтовые события. Настройка — не только шаблоны в b_event_message. Главное — SPF, DKIM, DMARC на DNS, иначе транзакционные письма летят в спам. Проверяем доставляемость, настраиваем bounce-обработку.

Проектирование инфоблоков для производительности

Используем Highload-блоки для справочных данных (цвета, размеры, производители), которые не участвуют в сложных выборках. Для торговых предложений — отдельный инфоблок с привязкой через IBLOCK_ELEMENT_PROPERTY. Включаем INDEX_PROPERTY для часто фильтруемых свойств. Кэширование тегированное: при изменении элемента сбрасывается только связанный кеш. Highload-блоки обрабатывают до 10 раз быстрее, чем инфоблоки с множественными свойствами, на объёмах от 100 000 записей.

Разработка кастомных модулей

Каждый модуль — по структуре /local/modules/vendor.modulename/:

  • install/index.php — класс установки, создание таблиц через $DB->RunSQLBatch()
  • lib/ — классы D7 ORM, наследники Bitrix\Main\ORM\Data\DataManager
  • admin/ — административные страницы через CAdminList, CAdminForm
  • include.php — автозагрузка, регистрация обработчиков через EventManager::getInstance()->registerEventHandler()
  • REST API endpoints через \Bitrix\Rest\RestManager

Модуль регистрируется в системе, появляется в списке «Установленные решения», имеет свои настройки в /bitrix/admin/settings.php?mid=vendor.modulename. Его можно включать, отключать, обновлять через UpdateSystem или свой механизм миграций.

Примеры реализованных задач:

  • Управление акциями — визуальный конструктор условий через CAdminCalendar, таймеры через агенты (CAgent::AddAgent), аналитика эффективности в связке с модулем sale
  • Калькулятор стоимости — React-виджет на фронте, REST API в модуле, формулы хранятся в Highload-блоке
  • Система бронирования — real-time календарь, блокировка через $DB->StartTransaction() / $DB->Commit() при одновременных запросах, синхронизация с channel manager через webhook

Компоненты и композитный кэш

Кастомизация компонентов — через result_modifier.php и component_epilog.php, не через правку template.php стандартного шаблона. Так ядро обновляется безболезненно.

Композитный кэш (технология «Композитный сайт») — сервер отдаёт готовый HTML, минуя PHP-роутинг. Динамические зоны (корзина, авторизация) подгружаются через CBitrixComponent::setFrameMode(true) и AJAX. TTFB падает до 30–50 мс. Но есть нюансы: не все компоненты совместимы, $APPLICATION->ShowPanel() ломает композит, нужна аккуратная разметка <div id="bx-composite-...">.

Маркетплейс: аудит перед установкой

Перед установкой модуля с маркетплейса — обязательный аудит. Проверяем: SQL-запросы без подготовленных выражений (привет, SQL-инъекции), прямое обращение к $_REQUEST без фильтрации, использование устаревшего API старого ядра вместо D7, конфликты с модулем композитного кэширования. Модуль без обновлений больше года и с парой десятков установок — скорее всего, проблема на ближайшем обновлении PHP. Типичный случай: модуль вызывает CIBlockElement::GetList с несброшенным кешем — сайт падает при 5000 элементов.

Миграция на D7

При обновлении PHP или переходе на новую редакцию — рефакторинг устаревших вызовов:

  • CIBlockElement::GetList()Bitrix\Iblock\Elements\ElementTable::getList()
  • CSaleOrder::GetList()Bitrix\Sale\Order::getList()
  • CModule::IncludeModule()Bitrix\Main\Loader::includeModule() Тестирование на staging, откат через git при проблемах.

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

Сравнение подходов: Init.php vs Модуль

Критерий Init.php Модуль с D7 ORM
Производительность Выполняется на каждом хите Выполняется только при событии
Тестируемость Нет автозагрузки, тесты невозможны Полная поддержка PHPUnit
Поддерживаемость Кодовая база растёт бесконтрольно Изолированная структура, версионирование
Миграции Нет Собственные таблицы, управление через install
Кэширование Не поддерживает автоинвалидацию Тегированное кэширование, сброс по событию

Стоимость и состав разработки модулей

Что входит в разработку модуля?

  • Техническое задание и архитектурная схема
  • Код с соблюдением PSR-4 и код-стайла Битрикс
  • Unit-тесты (PHPUnit) на бизнес-логику
  • Интеграционные тесты на события и REST API
  • Документация по установке, настройке и API
  • Передача доступов к репозиторию и документации
  • Обучение администраторов работе с модулем
  • Гарантийная поддержка 6 месяцев

Ориентировочные сроки и сложность:

Сложность Примеры Сроки
Простой Виджет обратного звонка, баннерная система, простой калькулятор 3–5 дней
Средний Система бронирования, конфигуратор товаров, модуль отзывов с модерацией 1–2 недели
Сложный Мультирегиональность, кастомная программа лояльности, интеграция с ERP 2–4 недели
Enterprise Маркетплейс-платформа, сложные бизнес-процессы с множеством ролей 1–3 месяца

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

Тестирование модулей

Unit-тесты через PHPUnit покрывают бизнес-логику: расчёт скидок, валидацию, формирование документов. Моки для Bitrix\Main\Application::getConnection() позволяют тестам не зависеть от БД. Интеграционные тесты проверяют обработчики событий на реальной базе — OnAfterIBlockElementAdd, OnSaleOrderSaved и другие. REST API endpoints тестируем через curl или PHPUnit HTTP-клиент. Критично для модулей, работающих с b_sale_order, b_catalog_price — где ошибка стоит денег.

Совместимость проверяется на PHP 7.4, 8.0, 8.1, 8.2 и редакциях: Стандарт, Малый бизнес, Бизнес. Проверяем конфликты с популярными модулями маркетплейса — они любят перехватывать те же события. Нагрузочное тестирование: замеры на 10K, 100K, 1M записей, профилирование через Xdebug на предмет утечек памяти и N+1 запросов.

Примеры из практики

Модуль акций для сети электроники. Штатные скидки модуля sale не покрывали сценарии «2+1», подарок при покупке от суммы, комбинированные условия. Собрали визуальный конструктор: маркетолог создаёт правила через drag-and-drop, без тикетов в разработку. Календарь акций, автодеактивация через агенты, аналитика в привязке к b_sale_order — конверсия, средний чек, количество применений. Время запуска новой акции упало с двух дней до получаса.

Калькулятор для строителей. Параметры (площадь, материалы, этажность) → формула → предварительная смета → заявка в CRM через CRest::call('crm.lead.add'). Региональные коэффициенты и сезонные наценки — из Highload-блока, цены материалов — из обмена с 1С. Количество целевых заявок выросло на треть: клиенты видят разбивку по статьям до звонка менеджеру.

Бронирование для сети отелей. Real-time доступность через AJAX-запросы к кастомной таблице vendor_booking_slots, расчёт тарифов по сезону, синхронизация с Booking.com через channel manager API. Блокировка номера при одновременном бронировании — через SELECT ... FOR UPDATE в транзакции. Таймзоны обрабатываются через \DateTimeZone — гость из Владивостока и менеджер из Москвы видят одну картину.

Оценим проект за 1 день. Пишите — расскажем, что входит в разработку под ключ. Свяжитесь с нами для консультации по вашему проекту. Закажите разработку модуля под ключ — получите готовое решение с документацией и поддержкой.