Разработка сайта пекарни на 1С-Битрикс
У пекарни две принципиально разные задачи на сайте. Первая — продать хлеб и выпечку с доставкой или самовывозом в выбранное время. Вторая — дать клиенту собрать торт на заказ из компонентов, увидеть цену и указать дату готовности. Это разные сценарии с разной архитектурой: стандартный торговый каталог с модулем sale для первого и кастомный конфигуратор на Highload-блоках для второго.
Конфигуратор — самый технически сложный элемент и основная точка, на которой пекарня отстраивается от конкурентов в онлайне.
Каталог продукции
Ассортимент разбит по разделам инфоблока: хлеб, сдобная выпечка, слоёная выпечка, кондитерские изделия, сезонное меню. Каждый элемент — товар торгового каталога.
Свойства элемента:
- Состав — полный перечень ингредиентов (требование ТР ТС 022/2011 о маркировке пищевой продукции)
- Аллергены — множественный справочник: глютен, молоко, яйца, орехи, соя. Отображаются иконками с тултипами
- КБЖУ — четыре числовых поля: калории, белки, жиры, углеводы на 100 г
- Вес — в граммах
- Срок годности — строка: «24 часа», «72 часа», «5 суток»
- Наличие — список: в наличии / под заказ / нет. Обновляется через интеграцию с учётной системой или вручную
Для товаров с вариациями (хлеб в нарезке и целый, круассан с разными начинками) — торговые предложения (SKU). У каждого предложения своя цена, вес и фото.
Фильтрация: по разделу, аллергенам (исключить глютен), калорийности. Фасетный индекс CIBlockSmartFilter даёт мгновенную фильтрацию даже на мобильных. Для пекарни с 50–150 позициями — более чем достаточно.
Конфигуратор торта на заказ
Клиент пошагово собирает торт: выбирает форму, основу, начинку, крем, декор — и видит визуализацию с итоговой ценой. Оформляет заказ с указанием даты готовности. Вся логика — на трёх Highload-блоках.
HL-блок «Компоненты торта»:
| Поле | Тип | Примеры значений |
|---|---|---|
| UF_TYPE | Список | base / filling / cream / decor |
| UF_NAME | Строка | Бисквит ванильный, Шоколадный ганаш, Мастика |
| UF_PRICE_PER_KG | Число | Стоимость за кг (для base, filling, cream) |
| UF_PRICE_FIXED | Число | Фиксированная стоимость (для decor) |
| UF_IMAGE | Файл | Превью в интерфейсе |
| UF_LAYER_IMAGE | Файл | Изображение слоя для визуализации (прозрачный фон) |
| UF_COMPATIBLE | Строка | JSON совместимых ID — не все кремы подходят ко всем основам |
| UF_ALLERGENS | Список (мн.) | Аллергены компонента |
HL-блок «Формы и размеры»:
| Поле | Тип | Примеры |
|---|---|---|
| UF_SHAPE | Список | round / square / heart |
| UF_TIERS | Целое число | Ярусы: 1, 2, 3 |
| UF_WEIGHT_MIN | Число | Минимальный вес в кг |
| UF_WEIGHT_MAX | Число | Максимальный вес |
| UF_WEIGHT_STEP | Число | Шаг (0.5 кг) |
| UF_MULTIPLIER | Число | Коэффициент: двухъярусный = 1.3 |
HL-блок «Заказы тортов»:
| Поле | Тип | Назначение |
|---|---|---|
| UF_CONFIG_JSON | Текст | Полная конфигурация в JSON |
| UF_WEIGHT | Число | Итоговый вес |
| UF_PRICE | Число | Рассчитанная стоимость |
| UF_ORDER_ID | Целое | Привязка к заказу sale |
| UF_DESIRED_DATE | Дата | Желаемая дата готовности |
| UF_STATUS | Список | new / confirmed / in_production / ready / delivered |
| UF_COMMENT | Текст | Надпись на торте, пожелания |
Пошаговый интерфейс:
-
Форма и размер. Выбор формы (круг, квадрат, сердце), количества ярусов, веса ползунком. Для многоярусных — автоматическое распределение: нижний ярус 60%, верхний 40%.
-
Основа. Коржи для каждого яруса отдельно. Карточки с фото, названием и аллергенами. При выборе обновляется визуализация — слой меняет текстуру.
-
Начинка. Только совместимые с выбранной основой варианты (фильтр по
UF_COMPATIBLE). Шоколадный ганаш подходит к бисквиту и брауни, но не к медовым коржам — API возвращает только допустимые комбинации. Это не каприз — несовместимые комбинации дают плохой результат, и кондитер всё равно откажет. -
Крем. Аналогично начинке, с проверкой совместимости.
-
Декор. Множественный выбор: мастика, ягоды, шоколадный декор, съедобная печать, живые цветы. У каждого — фиксированная стоимость. Надпись на торте — текстовое поле до 50 символов, добавляет фиксированную сумму.
-
Итого. Визуализация (послойное наложение
UF_LAYER_IMAGEчерез CSSposition: absolute), полный состав, объединённые аллергены всех компонентов, КБЖУ, цена.
Формула расчёта:
Цена = (Σ цена_за_кг × вес) × коэффициент_ярусности + Σ декор + наценка_срочности
Наценка за срочность: менее 48 часов до готовности — +30%. Менее 24 часов — заказ недоступен (минимальное время производства). Валидация UF_DESIRED_DATE на сервере с учётом выходных пекарни.
Расчёт выполняется на сервере через AJAX-контроллер. Клиентский JS показывает промежуточную сумму для обратной связи, но финальная цена — всегда серверная. Это исключает манипуляции с ценой в DevTools.
После подтверждения конфигурация сохраняется в HL-блок, создаётся заказ в sale со специальным типом плательщика. Администратор получает уведомление, подтверждает — клиенту уходит ссылка на оплату.
Онлайн-заказ выпечки с временными окнами
Стандартная корзина sale: выбор товаров, оформление с доставкой или самовывозом, оплата. Особенность — временные окна. Свежий хлеб не может ждать весь день у курьера.
Служба доставки настраивается с интервалами: 08:00–10:00, 10:00–12:00, 12:00–14:00. Клиент при оформлении выбирает дату и удобное окно. Минимальный интервал — 2 часа. Заказ на «сегодня» доступен, если до начала ближайшего окна осталось минимум 3 часа.
Минимальная сумма для бесплатной доставки — в свойствах службы доставки. Ниже порога — доставка платная, стоимость рассчитывается обработчиком sale.delivery.
Для самовывоза — выбор точки и времени. Если у пекарни несколько точек, каждая — элемент инфоблока Locations с адресом, координатами, временем работы и привязкой к складу в sale. Наличие товара показывается по конкретной точке.
Интеграция с POS-системой
Пекарня, которая продаёт и в зале, и онлайн, обязана синхронизировать остатки. Иначе утренний хлеб, раскупленный в зале к 10 утра, будет висеть на сайте как «в наличии» до вечера.
Интеграция с POS (iiko, r_keeper, Poster, 1С:Розница) через REST API или файловый обмен. Агент синхронизации запускается каждые 15–30 минут: забирает остатки, обновляет свойство Наличие в инфоблоке. При нулевом остатке товар деактивируется. При поступлении новой партии — активируется обратно.
Для 1С:Розница используется стандартный модуль обмена Битрикс (sale.export.1c). Для iiko и Poster — кастомный коннектор: GET-запрос к API → маппинг артикулов → обновление через CIBlockElement::SetPropertyValuesEx().
Программа лояльности
Бонусная карта на сайте — через внутренние счета sale. Начисление при каждом заказе, списание при следующем. Идентификация — по номеру телефона, без пластиковых карт.
Для пекарни актуальна «утренняя» скидка: заказ на доставку в окно 08:00–10:00 — минус 10%. Реализуется через правило корзины с проверкой свойства заказа «время доставки».
Технические сроки
| Этап | Что делается | Срок |
|---|---|---|
| Прототип | Wireframes конфигуратора, структура инфоблоков | 3–5 дней |
| Дизайн | UI конфигуратора, каталог, карточка товара, мобильная версия | 5–7 дней |
| Вёрстка | Адаптив, анимации конфигуратора | 5–7 дней |
| Backend | HL-блоки, контроллеры расчёта, интеграция sale, POS | 7–10 дней |
| Контент | Наполнение каталога, фотосъёмка | 3–5 дней |
| Тестирование | Расчёты конфигуратора, нагрузка, мобильные | 3–4 дня |
Композитный кеш — для каталога и статических страниц. Конфигуратор торта работает целиком через AJAX — не кешируется. Микроразметка Schema.org Product с NutritionInformation для появления в товарной выдаче. Стоимость проекта зависит от варианта визуализации конфигуратора (шаблоны или Canvas-рендер), объёма интеграций с POS и количества точек самовывоза.







