Разработка сайта мебельной фабрики на 1С-Битрикс
Мебельная фабрика работает с номенклатурой, где один товар может иметь десятки вариаций: диван в пяти обивках, трёх размерах и двух конфигурациях каркаса — это 30 торговых предложений. Кухонный гарнитур собирается из модулей, и покупатель хочет увидеть результат до заказа. Сайт на 1С-Битрикс решает обе задачи: каталог с торговыми предложениями и фасетной фильтрацией для стандартной мебели, плюс 3D-конфигуратор для модульных систем. Интеграция с 1С обеспечивает актуальность цен и остатков без ручного обновления.
Каталог мебели на торговых предложениях
Каталог строится на торговом каталоге Битрикса (модуль catalog) с использованием механизма SKU — торговых предложений. Структура разделов инфоблока: кухни, шкафы-купе, диваны и кресла, кровати, столы и стулья, мебель для ванной, офисная мебель.
Основной инфоблок «Мебель» содержит товары, к каждому из которых привязан инфоблок торговых предложений. Свойства товара:
- Коллекция — привязка к справочнику (инфоблок «Коллекции»)
- Стиль — список: классика, современный, лофт, скандинавский, минимализм
- Материал каркаса — список: массив дуба, массив бука, ЛДСП, МДФ, металл
- Страна производства — список (для импортной мебели в ассортименте)
- Гарантия — числовое свойство (месяцы)
- 3D-модель — файл GLTF/GLB для конфигуратора (где применимо)
Торговые предложения содержат свойства, формирующие конкретную вариацию:
- Цвет — привязка к справочнику с HEX-кодом и фото образца
- Материал обивки/фасада — привязка к справочнику с характеристиками
- Размер — строковое свойство (Ш×Г×В в мм)
- Артикул — уникальный код для синхронизации с 1С
-
Цена — через механизм цен модуля
catalog(базовая, розничная, дилерская) -
Остаток — через складской учёт модуля
catalog
Фасетная фильтрация
Фильтрация по параметрам — критичный элемент для каталога с тысячами SKU. Битрикс поддерживает фасетный индекс (модуль iblock, метод \Bitrix\Iblock\PropertyIndex\Manager::buildIndex()), который строит предрассчитанные таблицы для мгновенной фильтрации.
Компонент bitrix:catalog.smart.filter выводит фильтр с параметрами:
- Материал — чекбоксы с количеством товаров в скобках
- Стиль — чекбоксы
- Цена — диапазон (ползунок)
- Размер — диапазоны по ширине, глубине, высоте
- Цвет — визуальные плашки с образцами
- Наличие — переключатель «В наличии / Под заказ»
Фасетный индекс перестраивается при изменении товаров через обработчик OnAfterIBlockElementUpdate. Для каталога с 5000+ SKU это даёт выигрыш в скорости фильтрации на порядок по сравнению с прямыми SQL-запросами.
Интеграция с 1С
Синхронизация работает через штатный модуль обмена catalog по протоколу CommerceML 2:
- Номенклатура — из 1С в Битрикс: товары, торговые предложения, свойства (цвет, размер, материал)
- Цены — из 1С: базовые, розничные, дилерские типы цен
- Остатки — из 1С: по складам, с агрегацией для отображения на сайте
- Заказы — из Битрикс в 1С: заказы с сайта выгружаются как заказы покупателей
- Статусы заказов — из 1С в Битрикс: обновление статуса производства/доставки
Расписание обмена: цены и остатки — каждые 30 минут (cron), номенклатура — раз в сутки (ночной обмен), заказы — каждые 15 минут.
B2B-раздел для дилеров
Дилерский раздел закрыт авторизацией. Дилеры регистрируются через форму с подтверждением менеджером (модерация через бизнес-процесс модуля bizproc). После подтверждения пользователь добавляется в группу «Дилеры», которой доступны:
-
Дилерские цены — отдельный тип цен в модуле
catalog, видимый только группе «Дилеры» - Расширенный каталог — разделы инфоблока с правами доступа для дилеров
- Маркетинговые материалы — инфоблок с фото, рендерами, описаниями для каталогов дилеров
- История заказов и взаиморасчёты — данные из 1С, выгружаемые в личный кабинет
Deep-dive: 3D-конфигуратор мебели
Конфигуратор модульной мебели — ключевое конкурентное преимущество сайта. Покупатель собирает кухню из модулей в 3D-пространстве: выбирает нижние и верхние шкафы, размещает их вдоль стен, выбирает фасады и столешницу, видит итоговую стоимость. Технически это интеграция WebGL-приложения на Three.js с данными из каталога Битрикс.
Архитектура взаимодействия
Конфигуратор — клиентское JavaScript-приложение, загружающее данные из Битрикс через REST API. Схема:
- При открытии конфигуратора JS запрашивает
/api/configurator/modules/— список доступных модулей с параметрами (размеры, цена, путь к 3D-модели) - Данные берутся из инфоблока «Модули конфигуратора»: каждый элемент — отдельный модуль (нижний шкаф 600мм, верхний шкаф 400мм, угловой модуль и т.д.)
- 3D-модели хранятся в формате GLTF/GLB — оптимальный баланс между качеством и размером файла
- При размещении модуля на сцене Three.js обновляет итоговую спецификацию и стоимость
Модели и оптимизация
Каждый модуль существует как параметрическая 3D-модель. Для кухонного шкафа это: корпус (фиксированный), фасад (сменный — привязка к справочнику фасадов), фурнитура (ручки — сменные). Подгрузка моделей выполняется лениво: при инициализации загружаются только low-poly превью, детальная модель подгружается при размещении на сцене.
Требования к моделям:
- Полигонаж одного модуля — до 5000 полигонов (low-poly для реального времени)
- Текстуры — 512×512 для модулей, 1024×1024 для фасадов
- Формат GLTF с Draco-компрессией — снижение размера файла на 70–80%
- Группировка: корпус, фасад, столешница — отдельные
meshдля замены материалов
Смена материалов и фасадов
При выборе материала фасада (например, «Дуб натуральный» → «Белый глянец») Three.js заменяет текстуру на соответствующем mesh модуля. Текстуры хранятся в Highload-инфоблоке «Материалы конфигуратора» с полями: название, тип (дерево, пластик, стекло), текстура (файл PNG), карта нормалей (файл PNG), параметры PBR (roughness, metalness).
Замена происходит через THREE.TextureLoader с кэшированием загруженных текстур в Map. При первом выборе материала текстура загружается с сервера, при повторном — берётся из кэша.
Расстановка в пространстве
Пользователь задаёт размеры помещения (длина стен, высота потолка) через ввод в форму. Three.js строит каркас комнаты. Модули привязываются к стенам через snap-логику: при перетаскивании модуль «прилипает» к ближайшей стене и соседнему модулю. Коллизии проверяются через bounding box — модули не могут пересекаться.
Ограничения размещения задаются в свойствах модуля в инфоблоке:
- UF_WALL_TYPE — список: нижний, верхний, пенал, угловой
- UF_SNAP_POINTS — JSON с координатами точек стыковки
- UF_MIN_HEIGHT — минимальная высота установки от пола (для верхних модулей)
Формирование заказа
По завершении конфигурации пользователь нажимает «Оформить заказ». JavaScript формирует JSON-спецификацию: массив модулей с координатами, выбранные фасады и материалы, рендер-скриншот сцены (генерируется через renderer.domElement.toDataURL()).
JSON отправляется на сервер, где PHP-скрипт:
- Создаёт заказ в модуле
saleс товарами-модулями из каталога - Рассчитывает итоговую стоимость через привязку модулей к торговым предложениям (фасад + размер = конкретное SKU)
- Сохраняет скриншот и JSON-конфигурацию в свойствах заказа
- Выгружает заказ в 1С при следующем цикле обмена
Производительность
Конфигуратор с 15–20 модулями на сцене должен работать при 30+ FPS на среднем устройстве. Меры оптимизации:
- Instancing для одинаковых модулей (
THREE.InstancedMesh) - Frustum culling — Three.js отсекает объекты за пределами камеры автоматически
- LOD — при удалении камеры модули переключаются на упрощённую геометрию
- Тени отключены; освещение — ambient + directional без shadow map
Технические требования
Сайт разворачивается на редакции «Бизнес» — необходимы модули торгового каталога, складского учёта и обмена с 1С. Серверные требования: PHP 8.1+, PostgreSQL или MySQL, минимум 4 ГБ RAM (конвертация 3D-моделей при загрузке через админку), SSD для хранения GLTF-файлов. Композитный кэш для каталога, CDN для статики и 3D-моделей.







