Кейсы
7 постов
7 постов
5 постов
ООО «Стратегия 96» — екатеринбургский агросервис, который продаёт запасные части для сельскохозяйственной и погрузочной техники: Manitou, CLAAS, John Deere, Carraro, CNH, силосные зубья, ножи, фильтры, крестовины, рабочие органы к плугам. Клиенты компании — хозяйства, агропредприятия, дилеры и перепродавцы, поэтому магазин работает только с юридическими лицами и ИП: заказ без ИНН здесь невозможен в принципе.
Диджитал-агентство «Винтра» разработало компании новый интернет-магазин на «1С-Битрикс» и собственном модуле «Винтра.Веб.Креатор», подключило обмен с учётной системой СБИС и перенесло сайт на боевой домен.
У компании работал интернет-магазин на «1С-Битрикс» с готовым решением «Аспро: Максимум». Лицензия решения истекла и продлевать её заказчик не планировал, а задача стояла шире косметики: снабженец должен сам получать цену, наличие и счёт, не дожидаясь менеджера.
Заказчик пришёл с техническим заданием на доработку действующего сайта. Мы его разобрали и ответили честно: под перечисленные требования меняется около 80 % сайта — каталог, цены, корзина, оформление, личный кабинет и обмен с учётной системой. Дорабатывать готовое решение в таком объёме означало платить за чужую лицензию и ломать её кастомизацией, а потом повторять это после каждого обновления.
Мы предложили сделать сайт заново на своём движке. Заказчик согласился.
Отдельно о том, что болело до переделки:
розничный и оптовый покупатель видели одну и ту же цену — индивидуальных условий сайт не знал;
списки запчастей на десятки позиций обрабатывались перепиской: клиент присылал Excel, менеджер вручную сверял артикулы с каталогом и отвечал письмом;
счёт выставлял менеджер — то есть заказ, пришедший вечером, ждал утра;
поиск по артикулу не находил ничего, хотя артикулы в каталоге были заполнены;
прайс-лист постоянным клиентам рассылался руками.
Исходных документов от заказчика было четыре, и они местами противоречили друг другу: ТЗ на доработку, сквозной сценарий «Первый заход на сайт» с макетами, список замечаний и отдельный документ по личному кабинету. Мы свели их в одно техническое задание и зафиксировали правило приоритета: каждый следующий по времени документ уточняет и отменяет предыдущий. Это снимает главный спор приёмки — «а мы имели в виду другое».
Поведение страниц описали словами, а состав блоков — прототипом. Прототип собрали отдельным этапом и согласовали до того, как написали первую строчку кода: тридцать с лишним экранов, от главной и карточки товара до загрузки Excel, оформления заказа и каждого раздела кабинета. С момента согласования прототип стал частью технического задания, а в самом ТЗ появились прямые ссылки на его страницы — по одной у каждого раздела.
Дизайн-макет как отдельный этап в проект не закладывали, и это осознанное решение: фирменный стиль у компании есть, макеты ключевых экранов заказчик предоставил сам, а оформление действующего сайта всех устраивало. Деньги заказчика ушли в функциональность, а не в повторное рисование того, что уже нарисовано.
Сайт работает на «1С-Битрикс» (действующая лицензия заказчика, редакция с модулем «Интернет-магазин») и нашем модуле «Винтра.Веб.Креатор» с шаблоном ecom. Это наша собственная разработка: визуальная сетка страниц, набор готовых блоков магазина, дизайн-система на токенах и темы оформления. Страницы каталога, главная, контакты и кабинет собираются блоками в админке, а не вёрсткой под каждый экран, — поэтому заказчик меняет состав и порядок блоков сам, без программиста.
Магазин собран не комплексным компонентом, а кирпичами: список разделов, список товаров, карточка, умный фильтр, топ-подборки и поиск — каждый своим блоком поверх штатных компонентов ядра.
Так каждый экран настраивается отдельно, а логика корзины, скидок и оформления остаётся платформенной — мы её не переписывали и не трогали, наше в ней только вёрстка и стили.
Модуль «Винтра.Веб.Креатор» сейчас проходит закрытое бета-тестирование. Его карточка в Маркетплейсе «1С-Битрикс» — marketplace.1c-bitrix.ru/solutions/wintra.webcreator, но в открытый доступ модуль пока не выложен.
Хотите поучаствовать в бете и собрать на нём свой проект — напишите нам, подключим.
Вместе с Веб.Креатором на проекте работают ещё два наших модуля: «Винтра.Интеграция со СБИС» и баннер cookie. Заказчику они достались в рамках заказа, без отдельной оплаты и без новых лицензий.
Категории убрали из левой колонки в широкое мега-меню под шапкой: четыре группы — MANITOU, CLAAS, по типу запчасти, другие бренды — плюс выделенный блок каталогов Manitou. Меню собирается из инфоблока и редактируется из админки: группы, названия, ссылки, порядок и видимость. В шаблон структура не зашита ни одной строкой.
Освободившаяся ширина отдана товарам: фильтр переехал горизонтально над списком, а правая колонка отведена корзине — она появляется, когда в корзине есть хотя бы один товар, и сохраняется при переходах между страницами. Пустая корзина колонку не занимает.
Адреса разделов перенесены со старого сайта один в один — по внешним кодам, а не по названиям, с приведением транслитерации к настройкам боевого сайта. Коды товаров — штрихкоды, они совпали сами. У каждого раздела один канонический адрес, все остальные уводят постоянным редиректом; хлебные крошки сразу дают канонический путь. Накопленные позиции в поиске от переезда не пострадали.
Главное требование бизнеса — показать зарегистрированному клиенту его цену. Сделали двумя штатными типами цен: «цена авторизованного» (актуальная) и гостевая, равная актуальной с наценкой 10 %. Гостевая цена записывается на импорте, а не считается при каждом показе страницы: иначе кеш, повторный вход или добавление в корзину начинают накручивать наценку поверх наценки.
Разделение держится на правах групп покупателей на типы цен — своей проверки «вошёл или нет» в коде нет вовсе.
Гость видит цену с подписью «моя цена» и подсказкой, что после входа цена будет другой; авторизованный — свою цену и зачёркнутую гостевую.
Одна и та же цена едет дальше в корзину, оформление, результат массового поиска и счёт. В учётную систему всегда уходит актуальная цена, а прайс-листы наценки не получают.
На старте поиск по артикулу находил ноль позиций при 987 заполненных артикулах — у свойств «артикул», «штрихкод», «бренд» и «производитель» стоял признак «не участвует в поиске». Признак включили, каталог переиндексировали, 3226 товаров — за двадцать секунд.
Само ядро поиска написали своё: магазин запчастей одним способом не ищется.
Запрос проходит в три прохода — точное совпадение артикула или штрихкода по началу строки, начало слова в названии, затем полнотекстовый поиск с морфологией. Если товар найден точным совпадением кода, в полнотекстовый проход запрос не пускаем: иначе в выдачу лезут позиции, где этот номер просто упомянут в описании. Поиск учитывает кросс-номера и аналоги, а фильтр на выдаче гасит значения, которых в результатах нет.
Отдел закупок работает списками. Раньше это была переписка; теперь это экран.
Клиент загружает свой Excel со списком артикулов, количеств и брендов. Система разбирает файл построчно, сопоставляет каждую строку с каталогом с учётом кросс-номеров и показывает результат таблицей: исходные строки клиента в исходном порядке, наши данные — справа. Артикул обрабатывается как строка, поэтому ведущие нули, дефисы и слеши не теряются — на этом спотыкается половина самодельных обработчиков.
У каждой строки понятный статус: «в наличии в полном объёме», «в наличии N шт.» с пометкой недостающего, «наличие по запросу», «бренд не совпал — артикул совпал точно» и «не найдено». Если артикул без бренда совпал с несколькими товарами, система ничего не подставляет молча, а просит выбрать. Дальше — три действия: добавить доступные позиции в корзину (с повторной проверкой цен и остатков), передать проблемные позиции менеджеру или скачать результат Excel — тем же файлом, с добавленными справа колонками.
Отдельное решение, которое стоит назвать вслух. В каталоге товар с нулевым собственным остатком, но с доступным аналогом, показывается в наличии — заказ надо дать оформить, а менеджер созвонится и предложит замену. В массовом поиске логика обратная: там человек собирает заказ сам, без менеджера, и подсунуть ему аналог вместо запрошенной позиции значит обмануть. Поэтому в результатах списка считается только свой остаток. Цена решения измерена: 845 позиций из 2065 «в наличии» живут на остатке аналога — ровно столько честно становится «по запросу».
Запросы сохраняются в кабинете: список файлов, дата, число позиций, сводка по статусам и переход в любой прошлый разбор. Письмо по проблемным позициям уходит менеджеру, закреплённому за организацией клиента, а не на общий ящик.
Оформление собрано на одном экране: плательщик, доставка, подтверждение — каждый блок правится на месте. Организация подставляется из кабинета, транспортная компания выбирается из списка, стоимость доставки сайт не считает намеренно — её называет менеджер по факту.
Дальше начинается то, ради чего подключали учётную систему. По факту оформления заказа сайт обращается к СБИС, создаёт счёт по действующей нумерации компании и возвращает покупателю номер, сумму, срок действия и PDF. Тот же счёт уходит письмом.
Своей нумерации сайт не ведёт вовсе — номер и дату присваивает учётная система, цены, НДС и реквизиты берутся оттуда же, а не из полей браузера.
Что предусмотрено, потому что в реальной жизни это случается:
повторное нажатие кнопки и повторный запрос не создают второй счёт — открывается уже выставленный; два счёта на один заказ означают, что кто-то заплатит по отменённому;
если своего остатка нет, заказ оформляется, но счёт не выставляется: заказ встаёт в стадию «На согласовании», менеджер предлагает замену и запускает счёт;
если учётная система не ответила сразу, заказ не теряется: показывается «счёт формируется», запрос повторяется, документ уходит клиенту по готовности;
отмена заказа покупателем закрыта начиная со стадии выставленного счёта — и в карточке заказа, и в списке.
Под выставленный счёт товар резервируется в СБИС на три дня, и резерв уменьшает остаток, который следующей выгрузкой приезжает на сайт. Публичного API резервирования у СБИС нет — работаем методами интерфейса; отказ резерва гасится и счёт остаётся действительным.
Номенклатура, цены и остатки приезжают на сайт обменом: наш модуль интеграции собирает данные, модуль импорта XML раскладывает их по каталогу. Товары без цены на сайт не выгружаются — решение заказчика.
Кабинет открывается сразу на заказах — не на анкете и не на приветствии. В меню шесть разделов: заказы, запросы по Excel, организации, избранное, контактные данные, выход.
К одному аккаунту привязывается несколько организаций: снабженец часто закупает на два-три юрлица.
Организация добавляется вводом ИНН — реквизиты подтягиваются автоматически из DaData: полное и сокращённое наименование, КПП, ОГРН, юридический адрес; по БИК подставляются банк, корреспондентский счёт и город.
Выбранная организация подставляется в оформление и может быть изменена в самом заказе. Доступ к чужой истории ввод ИНН не открывает: данные видны только внутри того аккаунта, к которому организация привязана.
В списке заказов — номер, дата, организация, состав, транспортная компания, город, сумма и номер счёта; поиск по номеру и товару, фильтр по году. Из карточки заказа можно скачать счёт PDF, отправить его повторно и повторить заказ — позиции переносятся в корзину с перепроверкой цен и остатков. В карточке заказа виден закреплённый менеджер с телефоном.
Вход сделан двумя способами: по почте с паролем и по номеру телефона. Подтверждение номера — звонком-сбросом, а не SMS: буквенное имя отправителя стоило бы заказчику около 7 600 ₽ в месяц, а звонок решает ту же задачу. Заказ можно оформить и без регистрации — кабинет создаётся по факту заказа, и первая организация рождается из первого же заказа.
У компании есть PDF-каталоги запчастей по моделям Manitou — MLT 735, MLT 741, MLT 840, MLT 845, MLT 960, MT, MRT, MHT. Раньше их отправляли по запросу вручную. Теперь каждая модель — отдельная индексируемая страница с обложкой, описанием и формой: почта, телефон, ИНН, название организации (подставляется по ИНН) и согласие на обработку данных.
После отправки клиент получает каталог письмом, служебный адрес — уведомление, а в системе остаётся лид с ИНН, организацией, контактами, названием каталога и адресом страницы. Прямая ссылка на PDF не работает: файл отдаётся контроллером по ограниченной ссылке, путь в коде страницы не публикуется — иначе раздел раздавал бы каталоги молча, не оставляя ни одного контакта. Модели, PDF, описания, обложки и тексты писем заказчик ведёт из админки сам.
Постоянные клиенты получают прайс-лист ежедневно, по списку получателей из админки: название, адреса, время отправки, переключатель и кнопка «отправить сейчас». Файл формируется заново по текущим данным сайта, и только после успешного формирования уходит письмом — при ошибке старый файл не отправляется, а причина пишется в журнал. Часовой пояс расписания — екатеринбургский, по времени заказчика. Гостевая наценка в прайс не попадает.
Со старого сайта перенесли структуру каталога и рабочие свойства товаров с чисткой дублей прежних импортов, кросс-номера и аналоги, пользователей с телефонами и почтой, историю заказов, содержимое информационных разделов, изображения и баннеры. Новости перенесены с сохранением адресов, коды элементов — боевые.
Внутренняя оптимизация: ЧПУ, генератор мета-тегов, карта сайта, robots.txt, редиректы со старых адресов, сжатие изображений, подключение Яндекс.Метрики с целями. Счётчик намеренно не блокируется баннером cookie — иначе до нажатия «Принять все» объекта счётчика на странице нет вовсе, и статистика теряет большинство посетителей. Электронная торговля включена штатными средствами, цели магазина названы теми же именами, под которыми заказчик собирал статистику раньше.
Сайт адаптивен: каталог на телефоне открывается полноэкранной панелью, шапка сжимается в одну строку со значками, горизонтальной прокрутки нет ни на одном разрешении. Приёмка шла по тридцати сквозным проверкам, записанным в техническое задание заранее: от «загрузить артикулы с ведущими нулями» до «повторить запрос счёта по тому же заказу и убедиться, что дубликат не создался».
Снабженец теперь делает сам то, что раньше делал менеджер: находит запчасть по артикулу или списком из Excel, видит свою цену и честное наличие, оформляет заказ на своё юрлицо и тут же получает счёт из учётной системы с зарезервированным товаром.
Менеджер подключается там, где он действительно нужен, — когда позиции нет и нужна замена.
Сайт работает на боевом домене new.strat96.ru. Разработка велась с августа по октябрь 2026 года; сейчас проект на поддержке и развитии.
У продавца на маркетплейсе есть две вещи: прайс от поставщика в Excel и кабинет продавца. Между ними — работа, которую обычно делают руками: разложить номенклатуру по требованиям площадки, найти то, чего в прайсе нет, написать описания, собрать картинки, снять видео. На сотне товаров это терпимо. На пяти тысячах — не делается вообще.
Для магазина HOFER FD — продавца автозапчастей бренда HÖFER — мы собрали конвейер, который проходит этот путь сам: на входе прайс как прислали, на выходе карточка на Ozon с рейтингом контента 100 из 100. В статье рассказываем, из чего он собран, что оказалось неочевидным и сколько такое стоит по времени.
У заказчика — ООО «Бюро проектов „Фьюжн“», магазин HOFER FD на Ozon — есть прайс поставщика: 1 566 строк, 86 товарных групп, около 1 460 позиций. В прайсе лежит скелет: наименование, артикул, OE-номер, кросс-номера, норма упаковки, цена. И всё.
Ozon для той же позиции хочет заметно больше: развёрнутое наименование, аннотацию, вид и место установки, код ТН ВЭД, вес и три габарита упаковки, восемь и больше изображений, видео. Половины этого в прайсе нет физически.
Задача звучала так: сделать так, чтобы недостающее добиралось само, а не набивалось вручную. Ассортимент планируется расширять до пяти тысяч позиций — там ручная работа не масштабируется ни за какие деньги.
Первое, о чём думаешь, — написать скрипт. Мы так не сделали, и вот почему.
Всё, что нужно этому конвейеру, в «1С-Битрикс» уже есть готовым: хранилище номенклатуры со свойствами любой формы, импорт из Excel с преобразованиями полей, генератор изображений по шаблону, выгрузка в Seller API. Каждый кусок — существующий модуль, который поддерживает его автор, а не мы. Своя строка кода — это долг: чинить и обновлять придётся самим.
Поэтому «Битрикс» здесь работает не витриной, а станком. Публичная часть сайта выключена намеренно — смотреть на конвейер некому, он не для посетителей. Единственный критерий любого решения: годится ли результат для выгрузки на Ozon.
Из этого следует приятное: хватает редакции «Старт». Торгового каталога и «Интернет-магазина» в ней нет, и это проверено — не мешает. И импорт, и выгрузка работают на инфоблоках, беря цены, остатки и габариты из обычных свойств.
Прайс поставщика мы не правим никогда: следующий придёт в том же виде, и правка не переживёт. Вместо этого рядом появляется рабочая Google-таблица — тот же прайс, разложенный под загрузку.
Столбцы источника остаются нетронутыми, наши начинаются правее. Смысл в том, что таблица — общий стол: в ней работает заказчик (цены и наценка — его зона), в ней работаем мы, и она же уходит на импорт. Ничего не надо пересылать и сводить.
Правая часть таблицы: габариты и их источник, аннотация, вид колодок, ТН ВЭД и блок промптов — он всегда последний
Грабли, на которые наступают все. Модуль импорта различает категории и товары не по содержимому, а по оформлению строки: ей нужны одновременно заливка и объединённые ячейки по всей ширине. Мы перенесли клиентский файл в Google-таблицу голыми значениями — и модуль перестал видеть имена разделов. Ошибка молчит: глазами всё верно, значения на месте, а разделы не парсятся. Поэтому таблицу для импорта правят поверх существующей, а не пересобирают из данных.
Второе правило родилось само: новые столбцы добавляются до блока промптов, а промпты всегда идут последними. Иначе через месяц в таблице тридцать столбцов вперемешку, и в ней невозможно работать.
Часть недостающего берётся с официального сайта бренда, и это самый честный источник: развёрнутое наименование, комплектация, применяемость (марка / модель / годы), OE и Ref-номера, фотографии. Сборщик обходит сотню с лишним карточек за три минуты и не требует ни прокси, ни браузера.
А вот весогабариты в открытом доступе почти отсутствуют — и это главный вывод всей истории.
Мы перебрали двенадцать каталогов и маркетплейсов. Итог:
один источник отдал вес и три размера отдельными полями и покрыл 80 позиций из 132 — он и стал основным;
ещё один отдал габариты одной строкой и покрыл шесть позиций;
часть площадок закрыта антиботом наглухо — не пускают ни с сервера, ни через прокси, ни браузером;
официальный API со всеми данными существует и стоит 228 000 ₽ в месяц;
остальные отдаются свободно, но весогабаритов не содержат вовсе.
Вывод устойчивый: массового источника весогабаритов в открытом доступе нет. Их публикуют продавцы маркетплейсов, а маркетплейсы закрыты. Значит схема должна работать без них.
Поиск не по артикулу. Один каталог на запрос по артикулу колодок Chevrolet Captiva уверенно выдал колодки Lada Vesta. Данные пришли настоящие — просто не про тот товар. Источник годится только тогда, когда артикул на найденной карточке совпадает с запрошенным, и это проверяется программно, а не глазами.
Размер детали вместо размера коробки. Внешне не отличить: числа правдоподобные, поля заполнены. Проверяется плотностью: разделите вес на объём. У коробки с колодками выходит 0,3–1,5 г/см³; если получилось 7,3 — это плотность сплошной стали, и в источнике указан размер самого изделия. У нас такая проверка стоит отдельным скриптом и отбраковывает строки до того, как они уедут в карточку.
И мелочь, которая стоит часа: размеры почти везде отдаются в метрах, вес в килограммах, а Ozon просит миллиметры и граммы. Приводить к одному виду надо при разборе, а не «потом в таблице».
Схема в итоге двухслойная. Что нашлось — берём фактом. Остальное закрываем типовым значением по категории (медианой собранных) и честно помечаем это в отдельном столбце «Источник габаритов».
Так делать можно, потому что пустое поле роняет карточку на валидации, а помеченная оценка видна глазами и правится точечно. У колодок разброс невелик, а Ozon всё равно перемеряет посылку при приёмке. Заказчик видит, где факт, а где оценка, и может уточнить любую строку сам.
Аннотация нужна каждой позиции, и писать её руками на пяти тысячах товаров бессмысленно. Мы не стали гонять тексты через отдельный сервис: генерация живёт прямо в Google-таблице, надстройкой с моделью.
Устроено так:
отдельный столбец — промпт-формула: он не текст, а формула, которая склеивает факты строки (наименование, применяемость, тип, комплектацию, номера);
соседний столбец — куда пишет модель;
ещё один — общая роль модели на весь лист.
Промпт живёт формулой не для красоты: поправили данные в строке — промпт изменился сам, и перегенерация не требует переписывания заданий. На тестовой категории 132 описания сгенерировались примерно за минуту, длина 261–438 знаков, все уникальные.
Три вещи, которые стоит знать заранее:
Перезапись формулы запускает генерацию заново и тратит деньги. Сначала проверяем на двух строках, потом ставим на столбец. Готовый результат фиксируем значениями, иначе случайный пересчёт спишет бюджет ещё раз.
Габариты в промпт не кладём намеренно. В первом прогоне модель писала «габариты упаковки составляют 15.50 × 3.50 × 9.00 см» — а это у нас в большинстве строк оценка. В отдельном столбце она помечена, в тексте же читалась бы как точная величина. Весогабариты идут отдельным полем, не прозой.
Всё, что пишет модель, вычитывается. Правдоподобная выдумка в карточке маркетплейса дороже пустого поля. Мы проверяли тексты на выдуманные годы выпуска — годы пришли из применяемости с сайта бренда, модель ничего не добавила от себя. Но проверять надо каждый раз.
Медиа весит в рейтинге Ozon больше всего, и восемь кадров дают за него максимум. Собираются они тремя разными способами и ни один — руками.
Его рисует наш модуль wintra.genimgmarketplace: один шаблон на всю категорию, послойная композиция, 132 картинки за прогон.
Каждый слой берёт значение из своего источника: фон — из шаблона, фото — с сайта бренда, текст — из свойств товара
Текстовые слои умеют считать: наименование склеивается из раздела каталога и свойства «Вид колодок» и обрезается по длине контейнера, применяемость переносится по строкам, длинный список Ref-номеров ломается и закрывается многоточием. Это важнее, чем кажется: без ограничения длины строка просто уезжает за край картинки, и заметно это только на просмотре всех 132 файлов подряд.
Дальше — карусель. Здесь мы разделили слайды на общие (годятся любой категории) и категорийные.
Ключевая деталь схемы: категорийный слайд ищется не по ID раздела и не по его названию. Причина простая — при первом импорте разделы только создаются, их ID ещё не существует. Зато в строке уже лежит артикул, а у артикула есть смысловая средняя часть: «HF 350 960» → 350. По ней и идёт подбор. Импорт забирает слайды двумя масками: общие и категорийные.
Что нельзя рисовать на слайдах. Ozon запрещает на дополнительных фото информацию о доставке и возврате — сроки, стоимость, способ, географию, скорость. Наш слайд «Доставка и оплата» получил замечание модерации целиком и был заменён. Под тот же запрет попадает безобидное на вид «отгружаем со склада в Самаре». Заодно мы убрали со слайдов сроки гарантии, контакты, рейтинг магазина и число заказов: последние два меняются, а картинка нет.
Видео в рейтинге Ozon даёт +40 к группе «Медиа». Без него общий рейтинг упирается в 82 балла, сколько ни заполняй остальное. При этом генератора видео в Seller API нет вовсе: площадка принимает только ссылку на готовый файл.
Значит ролики надо собирать самим — и на 132 позиции это уже не ручная работа. Мы собрали видеообложки из кадров той же галереи: растворение между кадрами, вертикальный формат под карточку, имя файла равно слитному артикулу, чтобы импорт подхватил без сопоставления.
Требования площадка отдаёт сама, в описании атрибутов: видеообложка — MP4 или MOV, 8–30 секунд, до 20 МБ. Здесь есть тихая ловушка: кроссфейды съедают время внахлёст. Восемь кадров по 1,25 секунды дают на выходе 7,6 секунды — то есть меньше минимума, и файл отбивается. Поэтому длительность считается от целевой, а каждый готовый файл проверяется программно.
Выгрузку ведёт модуль webprostor.ozon: профиль на категорию, товары, цены и остатки через Seller API.
Здесь главная особенность площадки: у Ozon своя структура атрибутов на каждую категорию. Это значит, что профиль выгрузки настраивается по каждой категории отдельно — универсального «залить весь прайс» не бывает в принципе.
И самое дорогое из мелочей: значение словарного атрибута должно совпадать со справочником Ozon побайтно. Площадка принимает строку молча, но без точного совпадения ставит нулевой идентификатор значения и роняет валидацию. Выглядит это как «импорт прошёл успешно, а карточка не публикуется». Поэтому словари категории мы выгружаем из API и подставляем значения из них, а не набираем руками.
Тестовая карточка набрала 100 баллов: медиа 100, текст 100, атрибуты 100. Посмотреть её можно прямо сейчас — колодки HÖFER HF 350 563 на Ozon.
Цены модулей открыты, ссылки ниже — считайте сами. Интереснее часы, потому что именно они определяют объём работы.
Фундамент — один раз на весь проект:
лицензия «1С-Битрикс», достаточно редакции «Старт»;
модуль импорта из Excel — kda.importexcel;
генератор изображений — wintra.genimgmarketplace;
выгрузка на Ozon — webprostor.ozon;
настройка всего процесса — парсер, генератор, модули, сведение данных: около 6 часов работы программиста.
Дальше работа идёт категориями — «колодки», «амортизаторы», «фильтры» и так далее, включая подкатегории. На каждую:
настройка профиля выгрузки под категорию (специфика Ozon заложена именно в категории);
правка парсера, поиск источников, если на прежних нужных данных нет;
сопоставление полученных данных;
новые столбцы таблицы под свойства этой категории;
правка шаблона генератора картинок;
запуск генерации текстов и видео;
два категорийных слайда.
Итого около 8 часов работы контент-менеджера на категорию. И вот что важно: количество товаров внутри категории почти не влияет. Десять позиций или сто тридцать — работа одна и та же. Десяток проще сделать руками; со ста — конвейер уже окупается, а с тысячей альтернативы нет.
Любому продавцу, который выходит на маркетплейсы с чужим прайсом и большим ассортиментом:
автозапчасти, расходники, инструмент;
стройматериалы, крепёж, сантехника;
электрика и комплектующие;
любой каталог, где поставщик присылает Excel, а площадка хочет карточку.
Особенно — если ассортимент регулярно обновляется. Разовую выгрузку можно пережить руками; ежемесячную с новыми позициями — нет.
Схема не привязана к Ozon: Wildberries, Яндекс.Маркет и Авито отличаются требованиями к размерам картинок и составом атрибутов, а звенья конвейера остаются те же.
Общероссийская общественная организация «Спортивная федерация армейского рукопашного боя России» (ФАРБ России) развивает армейский рукопашный бой — первое официально признанное полноконтактное смешанное единоборство в новейшей истории страны. АРБ зародился в ВДВ в 1979 году, с 1991 года входит в Единую всероссийскую спортивную классификацию как военно-прикладной вид спорта, с 1996 года — общероссийский вид спорта. Федерация объединяет региональные отделения по всей стране, проводит всероссийские соревнования и ведёт детско-юношеское направление.
Диджитал-агентство «Винтра» разработало федерации новый сайт на «1С-Битрикс» и готовом решении «Аспро: Allcorp3» и перенесло его на боевой домен.
Федерация работала на конструкторе «Тильда». Сайт справлялся с ролью визитки, но не справлялся с ролью рабочего инструмента организации: тридцать с небольшим страниц, каждая свёрстана вручную. Добавить регион, нового руководителя, соревнование или документ означало звать разработчика и переверстывать страницу. Календарь соревнований жил картинками и PDF, региональные отделения — простым списком, без карты и без возможности найти ближайшее. Не было и версии для слабовидящих, обязательной для спортивной федерации.
Сайт на «1С-Битрикс: Управление сайтом» и готовом решении «Аспро: Allcorp3» с вёрсткой по утверждённому макету. Всё содержимое вынесено в инфоблоки: федерация ведёт сайт из админки, без программиста.
Руководящие органы федерации. Четыре раздела — руководство, управление, советы и комитеты — собраны на одном компоненте с фильтром по группам: президент, вице-президенты, президиум, исполнительная дирекция, попечительский совет, совет ветеранов. Двадцать один человек в руководстве, у каждого фотография, должность и справка, которая раскрывается всплывающим окном.
Региональные отделения на карте. Отделения показаны на интерактивной карте России с кластеризацией меток и отбором по федеральному округу и субъекту. У каждого отделения — герб региона, полное наименование организации, адрес, президент и контакты. Посетитель находит ближайшее отделение по карте, а не листает список.
Календарь соревнований. Лента мероприятий с горизонтальным выбором даты и фильтрами по возрастной группе, статусу, уровню, месту проведения и участникам. У каждого соревнования — афиша, сроки, место и положение. Рядом — план-календарь федерации и положение о всероссийских соревнованиях отдельными документами.
Библиотека документов. Пять разделов: конференция, президиум, исполнительная дирекция, нормативные документы и календарь года. Документы выкладываются файлами, у каждого виден размер и кнопка скачивания. В нормативные вошли Указ Президента, федеральные законы и приказы Минспорта.
Учебные заведения, где развивают АРБ. Высшее и среднее образование отдельными разделами: логотип учебного заведения, название и ссылка на сайт. Более пятидесяти организаций — от военных училищ до гражданских университетов.
Зал славы и история вида спорта. Карточки заслуженных спортсменов с фотографиями и званиями, страница истории АРБ, раздел научно-методических материалов с публикациями в PDF.
Пресс-центр. Новости с фотогалереями, медиатека с фотоальбомами соревнований и раздел видео. Фотоальбом — отдельный элемент с галереей внутри, альбомы наполняются пачкой.
Раздел антидопинга с контактами ответственного лица и восемнадцатью документами: правила, списки запрещённых субстанций, порядок процедур.
Версия для слабовидящих: переключение размера шрифта, цветовой схемы, отключение изображений и озвучивание текста. Для сайта спортивной федерации это требование доступности, а не опция.
Формы обратной связи с защитой каптчей, согласие на обработку персональных данных, политика конфиденциальности и куки-баннер на нашем модуле «Винтра.КукиБаннер».
Перенос на боевой домен и хостинг заказчика: разворот из резервной копии, настройка окружения, PHP 8.3, HTTP/2, композитный кэш, кэширование статики на 45 дней, агенты на системном планировщике вместо хитов посетителей.
Оптимизация изображений в WebP модулем «Винтра.ImageOptimize», SEO-контур на «Аспро: SmartSEO» с шаблонами метатегов по разделам.
Доступы для контент-менеджеров федерации: отдельный уровень прав и группа, чтобы сотрудники вели содержимое сайта сами и не могли задеть настройки.
«1С-Битрикс: Управление сайтом» 26.7, готовое решение «Аспро: Allcorp3» 1.4.5, «Аспро: SmartSEO», собственные модули агентства «Винтра.Редирект», «Винтра.ImageOptimize», «Винтра.КукиБаннер», PHP 8.3, nginx, HTTP/2, MySQL 8.0, Яндекс.Карты.
Сайт ardrf.ru работает на боевом домене с 1 сентября 2026 года.
Федерация ведёт его сама: добавляет соревнования, новости, документы, региональные отделения и руководителей из админки. Посетитель находит ближайшее отделение по карте, отбирает соревнования по возрасту и уровню, скачивает нормативные документы и читает новости — там, где раньше была статичная визитка на конструкторе.
Самарский агрокомплекс «Тепличный» — предприятие, которое 75 лет выращивает овощи, зелень и рассаду в закрытом грунте: томаты, огурцы, баклажаны, перец, редис, салат, зеленые культуры и цветочную рассаду. Продукция расходится через фирменные магазины, партнёрскую розницу и оптовые поставки. Диджитал-агентство «Винтра» разработало предприятию интернет-магазин на «1С-Битрикс» и готовом решении «Аспро: Максимум» и перенесло его на боевой домен.
У предприятия работал сайт-визитка: рассказать о хозяйстве он мог, продавать — нет. Розничный покупатель не видел ни цен, ни наличия и звонил по каждому вопросу. Оптовые партии продавались вручную, по телефону и переписке, а излишки урожая — то, что выгоднее продать «с молотка», — уходили по договорной цене без конкуренции покупателей. Отдельная боль — доставка: возят по Самаре и пригородам, цена зависит от адреса, а границы «города» и «пригорода» магазин уточняет по ходу дела и хочет менять сам, без программиста.
Интернет-магазин на «1С-Битрикс: Управление сайтом» (редакция «Малый бизнес») и готовом решении «Аспро: Максимум» с вёрсткой по утверждённому макету: каталог, карточка товара, корзина, оформление заказа, личный кабинет, избранное.
Каталог, который наполняет сам заказчик. Товары не заводятся руками: агроном ведёт обычную таблицу — артикул, раздел, название, цена, наличие, метки «Хит»/«Новинка»/«Акция», размер и сорт, — а импорт разносит её по карточкам. Фотографии подхватываются по артикулу из имени файла, разделы создаются по названию. Обновилась цена или закончился товар — правится строка в таблице, а не сайт.
Доставка считается сама по адресу покупателя. Зоны магазин рисует прямо на карте в админке и назначает каждой свою цену. Покупатель на оформлении заказа вводит адрес или ставит точку на карте — система находит адрес, определяет, в какую зону он попал, и подставляет тариф. Выбирать зону руками не нужно и ошибиться нельзя: адрес вне обслуживания просто убирает курьера из способов доставки, остаётся самовывоз. Отдельно решён случай, когда одна зона лежит внутри другой: микрорайон в городской черте с собственным тарифом не задваивается с городским.
Раздел «Торги» — собственный модуль открытых аукционов на оптовые партии. Продавец собирает лот из товаров каталога в одном окне: выбирает позицию, объём в килограммах и стартовую цену за килограмм. Лот может быть из одной позиции или из нескольких — торгуются за средневзвешенную цену за килограмм всего лота. Участвовать может любой посетитель, регистрация не нужна: первая ставка запрашивает имя, телефон и почту, дальнейшие идут в один клик. После каждой ставки таймер сбрасывается на пять минут — пять минут тишины, и лот выигран последним участником. Цена, стоимость лота, таймер и лидер обновляются у всех участников без перезагрузки страницы.
Выигранный лот сам становится заказом. Когда торги закрылись, система создаёт победителю аккаунт с оптовыми правами, авторизует его, кладёт позиции лота в корзину по отыгранным ценам — до копейки — и отправляет на обычное оформление заказа. Дальше это штатный заказ магазина: он виден в личном кабинете покупателя и обрабатывается в общем потоке с розницей.
Оптовикам — свои условия оплаты и доставки. Оптовый покупатель видит счёт, наличные и оплату при получении и самовывоз со склада; розничная курьерская доставка ему не показывается. В «1С-Битрикс» ограничение способов оплаты по группе пользователя не предусмотрено — мы написали своё, на штатном механизме ограничений, не переделывая типы плательщиков.
Точки продаж на карте. Две фирменные точки предприятия и пятнадцать партнёрских точек трёх предпринимателей — на отдельных картах, с адресами, телефонами и режимом работы. На главной показываются только фирменные.
Страница производства с фотогалереей, вакансии с отправкой резюме в отдел кадров, юридические страницы и политика обработки персональных данных, баннер согласия на куки.
Письмо покупателю, который оформил заказ без регистрации, теперь содержит и логин, и пароль от созданного аккаунта: в стандартной сборке пароль в письмо не попадает, и человек не мог войти в личный кабинет за своим заказом.
Адаптивная вёрстка на единой шкале размеров: типографика и вертикальные отступы заданы переменными, брейкпоинты переопределяют шкалу — сайт масштабируется целиком, а не поблочно.
Перенос на боевой домен и хостинг заказчика: 28 правил 301-редиректов со старого сайта на нашем модуле «Винтра.Редирект», карта метатегов, карта сайта на 120 адресов, robots.txt.
Оптимизация изображений в WebP на лету — наш модуль «Винтра.ImageOptimize», композитный кэш «1С-Битрикс», HTTP/2.
SEO-контур на модуле «Аспро: SmartSEO»: шаблоны метатегов по разделам инфоблоков. Аналитика: Яндекс.Метрика с вебвизором, семь целей и электронная коммерция.
«1С-Битрикс: Управление сайтом 26.7», редакция «Малый бизнес», «Аспро: Максимум» 2.10.1, «Аспро: SmartSEO», «Винтра.Редирект», «Винтра.ImageOptimize», «Винтра.КукиБаннер», собственный модуль торгов, PHP 8.3, nginx, HTTP/2, Яндекс.Карты, Яндекс.Метрика.
Сайт 63teplica.ru работает на боевом домене с 28 августа 2026 года.
Розница покупает онлайн и видит стоимость доставки сразу по своему адресу, опт торгуется за партии на сайте, а выигранный лот доходит до заказа без единого звонка. Каталог, зоны доставки и лоты предприятие ведёт само, из админки и своей таблицы.
Санаторий «Русский Бор» — круглогодичная здравница в Тольятти, наберегу Жигулёвского водохранилища в сосновом бору. Номера от «Эконома» до «Люкса», собственная лечебная база: водолечебница, грязелечебница,физиотерапия, бассейн, спелеокамера. Диджитал-агентство «Винтра» разработало санаторию новый сайт на 1С-Битрикс и решении «Аспро:Allcorp3» и перенесло его на боевой домен без потери поискового трафика.
Санаторий работал на старом сайте, собранном на стороннем гостиничном шаблоне. За годы он оброс адресами: в карте оказался 441 адрес, из которых живыми были только 134 страницы. Структура не давала гостю быстро понять, чем здесь лечат и сколько стоит путёвка — виды лечения,лечебная база и медицинские услуги лежали вперемешку, а цены жили в таблицах, которые тяжело поддерживать. Бронирование работало через TravelLine, и его надо было сохранить.
Новый корпоративный сайт-презентация на «1С-Битрикс: Управление сайтом» и готовом решении «Аспро: Allcorp3» с доработкой темы под фирменный стиль санатория.
Раздел «Лечение» разложен на три ветки: восемь видов лечения по профилям — неврология, эндокринология, сердечно-сосудистые и костно-мышечные заболевания, органы дыхания, отдельно программы для детей, взрослых и пенсионеров; лечебная база восемью отделениями; более двадцати медицинских процедур. Всего 37 карточек.
Раздел «Цены и акции»: семь путёвок и лечебных программ с ценой и длительностью, медицинские услуги, лабораторные исследования,дополнительные услуги и акции.
Номерной фонд карточками: площадь, вместимость, удобства значками, цена за ночь, кнопки «Оставить заявку» и «Бронировать».
Интерактивная схема территории: пятнадцать объектов на плане —корпуса, столовая, летняя эстрада, детская и спортивная площадки,беседки, парковки — и описание каждого корпуса с медицинским блоком и категориями номеров.
Интеграция с системой бронирования TravelLine: форма поиска номеров на главной и бронирование из карточек номерного фонда.
Фотогалереи на страницах инфраструктуры, питания и досуга — единым рендером, чтобы добавление снимков не требовало вёрстки.
Переезд на боевой домен без потери поискового трафика: собрана карта всех 441 адреса старого сайта, для 134 живых страниц выстроено соответствие и загружено 133 правила 301-редиректов через наш модуль «Винтра.Редирект».
Оптимизация изображений в WebP на лету — наш модуль «Винтра.ImageOptimize».
SEO-контур: шаблоны метатегов по разделам, канонические адреса, модуль «Аспро: SmartSEO».
Аналитика перенесена со старого сайта без разрывов: Яндекс.Метрика с вебвизором и картой кликов, пиксель ретаргетинга ВКонтакте.
Композитный кэш 1С-Битрикс, HTTP/2, адаптивная вёрстка.
1С-Битрикс «Управление сайтом» 26.4, «Аспро: Allcorp3» 1.4.4, «Аспро:SmartSEO», «Винтра.Редирект», «Винтра.ImageOptimize», PHP 8.2, nginx,TravelLine, Яндекс.Метрика.
Сайт переехал на боевой домен 27 августа 2026 года. Старые адреса ведут на новые страницы, бронирование через TravelLine работает,счётчики собирают статистику с первого дня.
Санаторий остаётся у нас на сопровождении: обслуживание сайта, обслуживание хостинга и техподдержка «Битрикс».
Когда у бренда есть постоянные покупатели, рано или поздно встаёт вопрос: как сделать так, чтобы интернет-магазин их узнавал и поощрял автоматически — без ручных промокодов, без «напиши менеджеру», без табличек в Excel. Для бренда одежды «Сколько? Можно»skolko-mozhno. мы собрали такую систему: четыре уровня клиента с автоматическим повышением, бонусные баллы, реферальная программа «приведи друга» и оплата подарочными сертификатами — всё работает в одной связке на сайте.
В статье рассказываем, что и зачем сделали, и показываем скриншотами, как это видит покупатель и менеджер.
У бренда уже был сложившийся круг постоянных покупателей и понятные правила лояльности на бумаге:
новички получают 3% скидки и 3 балла за каждые 100 ₽;
при выкупе на 50 000 ₽ клиент переходит во второй уровень — 5% скидки и 5 баллов;
на 150 000 ₽ — третий уровень, 7% и 7 баллов;
на 300 000 ₽ — VIP, 10%, 10 баллов и бесплатная доставка независимо от региона.
К этому добавлялись регулярные просьбы клиентов: «дайте бонус другу, я
готов рекомендовать», «можно ли продать подарочный сертификат и чтобы
его потом можно было реально потратить на сайте?».
Беда в том, что на сайте этого не было ничего. Все скидки приходилось вручную считать менеджеру, сертификаты продавали бумажными карточками с кодами, реферальной программы не существовало. Постоянный покупатель и случайный пользователь видели одну и ту же витрину, с одними и теми же ценами.
Поэтому «Сколько? Можно» пришли к нам — попросили собрать всё это в работающую механику прямо в интернет-магазине.
Велосипед не изобретали. За основу взяли проверенный модуль для «1С-Битрикс» — «Система бонусов. Программы лояльности» (acrit.bonus),
предназначенный для реализации бонусной системы с поддержкой групп
пользователей, бонусных счетов и скидок в корзине. Это сэкономило
клиенту время и деньги.
Но «из коробки» этот модуль закрывал не все потребности. Поэтому мы достроили вокруг него недостающие шестерёнки:
автоматическое повышение уровня клиента при достижении заданной суммы выкупа;
личный кабинет с прогресс-шкалой, историей баллов и реферальным разделом;
собственный механизм оплаты подарочным сертификатом — отдельно от бонусов, чтобы баланс баллов и баланс сертификата не смешивались.
Почему сертификаты вынесли отдельно — об этом позже. Это была принципиальная просьба клиента, и она оказалась оправданной.
В системе зарегистрированы четыре уровня:
«Выпусти стиль» (новичок);
«Нравится — надевай»;
«Стиль без запретов»;
«Всё можно» (VIP).
При регистрации каждый клиент сразу попадает на первый уровень. Дальше — двигается по шкале сам, без участия менеджера: магазин складывает суммы всех его выполненных заказов и, как только нужная сумма набрана, переводит клиента на следующий уровень. Тогда же меняется и его скидка, и ставка начисления баллов.
В личном кабинете клиент видит свою текущую ступень и прогресс-шкалу до следующей.
Покупатель не должен высчитывать свою цену в голове. Скидка применяется на сайте автоматически, как только клиент авторизуется. Старая цена зачёркнута, новая — рядом. В карточке товара дополнительно показано, сколько баллов клиент получит за этот заказ по своей текущей ставке.
То же самое — в списке товаров, в корзине и в форме оформления заказа.
В корзине клиент видит итог уже с учётом скидки своего уровня. На странице оформления заказа появляются два специальных блока: «Бонусный счёт» и «Сертификат».
В блоке «Бонусный счёт» клиент видит, сколько баллов у него есть, и может списать их на оплату — частично или полностью (1 балл = 1 ₽). Рядом, в правом столбце, ему сразу подсказано, сколько баллов начислится за этот заказ.
Под бонусным блоком — блок «Сертификат»: туда вводится код подарочной карты. Подробнее об этом — ниже.
Мы добавили в личный кабинет отдельный раздел /personal/bonus/. В нём всё, что касается лояльности, собрано в одном месте:
текущий уровень и шкала прогресса;
доступный баланс баллов;
история начислений и списаний (когда и за что);
реферальный кабинет (ниже).
Клиенту не нужно писать менеджеру вопросы «сколько у меня баллов» и «когда мне начислят за прошлый заказ» — он всё видит сам.
В кабинете «Бонусный счёт» у каждого клиента есть собственная реферальная ссылка вида ?ref=33 и кнопка скопировать. Клиент отправляет ссылку другу — друг проходит по ней и регистрируется. С этого момента магазин помнит, кто кого привёл.
Срабатывает это так:
другу при регистрации начисляются 500 ₽ бонусов за регистрацию плюс 500 ₽ за то, что он пришёл по приглашению — итого 1000 ₽ на старте;
тому, кто пригласил, начисляется 1000 ₽ после того, как друг оформит и выполнит свой первый заказ.
Менеджер в этой схеме не участвует — ни в подсчёте, ни в отслеживании «кто кого привёл». Всё делает интернет-магазин.
Она регулируется двумя правилами: бесплатно для всех заказов от 30 000 ₽ и бесплатно для VIP-уровня независимо от суммы и региона. Правила не противоречат друг другу — система сама подбирает, какое из них применять для клиента на конкретном заказе.
А вот здесь — самый интересный кусок и причина, по которой пришлось докручивать систему собственным механизмом.
Сначала мы попробовали вариант «через бонусы»: сертификат продаётся как товар, а после оплаты его номинал просто зачисляется покупателю на бонусный счёт. Так делают многие. Но у бренда было принципиальное требование — деньги с сертификата НЕ должны смешиваться с накопленными баллами. Чтобы человек, у которого 1 000 ₽ собственных бонусов плюс сертификат на 5 000 ₽, видел не «6 000 ₽ на одном счёте», а два разных источника денег с разной логикой жизни.
В стандартном модуле такое отделение сделать невозможно — там один общий бонусный счёт. Поэтому мы сделали для сертификатов отдельный механизм.
Как это видит покупатель на оформлении заказа:
вводит код с сертификата → нажимает «Проверить»;
сайт показывает остаток и максимум, который можно списать (но не больше суммы корзины);
вводит сумму, которую хочет списать (по умолчанию — весь остаток);
нажимает «Применить» → сайт пересчитывает итог;
оформляет заказ и доплачивает разницу обычным способом.
Если сертификат покрывает корзину полностью — доплачивать ничего не нужно, заказ сразу проходит как оплаченный.
В этом же блоке аккуратно обрабатываются нештатные ситуации: неправильный код, попытка списать больше, чем на сертификате, и отмена применения до оформления.
После применения покупатель в правом сайдбаре видит итог: сумма заказа,
сколько списано бонусов, сколько списано по сертификату, сумма доплаты — всё прозрачно.
Бонусные баллы и сертификат при этом можно использовать в одном заказе одновременно. Например, у клиента 1 500 ₽ на бонусном счёте, и подарили карту на 5 000 ₽ — в форме оформления он сначала вводит код сертификата на 5 000 ₽, потом в соседнем блоке списывает свои 1 500 ₽ баллами, и итог к доплате уменьшается сразу на обе суммы. Магазин это аккуратно посчитает и сложит в один заказ.
И всё это работает в том числе с мобильного: блок аккуратно ужимается, поля и кнопки крупные, все удобно.
В админке магазина в карточке заказа теперь появляется не одна платёжная
строка, а две: «Оплата на сайте» — на сумму к доплате, и «Подарочная карта» — на сумму, списанную с сертификата. В комментарии к платежу сертификата виден его код и сумма списания. Никаких недоразумений: всё видно сразу.
Бонусы при этом — отдельный сценарий: они уменьшают платёж «Оплата на сайте», что и логично, потому что для бухгалтерии это деньги клиента, а не подарочные.
В одном заказе могут одновременно встретиться: скидка по уровню, списание бонусов и списание сертификата. Чтобы они не перетягивали одеяло друг у друга, мы выстроили чёткую очередь:
Сначала магазин применяет скидку клиента — она определяется его текущим уровнем и считается до всего остального.
Дальше срабатывает обработчик бонусов: если клиент списал баллы, они уменьшают платёж «Оплата на сайте».
Последним работает обработчик сертификата:
он уменьшает баланс сертификата, создаёт в заказе вторую платёжную
строку «Подарочная карта» и уменьшает основной платёж на ту же сумму.
В итоге у клиента остаётся одна понятная сумма «к доплате», у менеджера — заказ с прозрачной структурой платежей, у магазина — корректная отчётность и корректная выгрузка в «1С» (она забирает заказ как обычно, никаких допработ со стороны 1С-программиста не потребовалось).
Учёт сертификатов хранится в отдельном справочнике в админке: код, номинал, текущий остаток, активность. Рядом — отдельная история всех операций: какой клиент, какой заказ, какая сумма списана или возвращена. Когда на сертификате остаётся ноль — магазин сам помечает его как неактивный, чтобы пустые коды не висели мёртвым грузом.
В момент, когда менеджер пробивает продажу сертификата в «1С», его код моментально прилетает на сайт в этот же справочник — никакой ручной заводки не нужно. Покупатель сразу может ввести этот код на сайте и потратить.
Это, кстати, ещё одна причина, почему сертификат сделан отдельным механизмом, а не «пополнением бонусного счёта»: подарочный сертификат часто покупают другу в подарок, а активирует его уже сам друг — со своего аккаунта на сайте. Деньги попадают именно туда, куда задумано, а не на счёт того, кто покупал.
Поверх этой системы мы добавили ещё один автоматический сценарий, который оживляет клиентскую базу — поздравление с днём рождения и скидку к нему.
Клиент один раз указывает дату рождения — в личном кабинете или прямо при оформлении заказа. Дата подтягивается в обе стороны: что заполнил в
одном месте, то подставится в другом. После первого сохранения сменить её может только администратор магазина — это защита от схемы «поставил день в день и пользуюсь скидкой».
Раз в сутки магазин проверяет даты рождения всех клиентов. Если у кого-то день рождения попадает в окно ±3 дня — система автоматически:
переводит клиента во временную группу «Скидка на День рождения»;
даёт ему скидку 10% на товары, которые не участвуют в других акциях;
отправляет поздравительное письмо — один раз в год, по красивому шаблону;
когда окно закрывается — так же тихо возвращает клиента в обычную группу.
Для бренда это маркетинговый инструмент возврата клиентов: повод заглянуть на сайт именно в тот момент, когда человек открыт к покупке для себя. Письмо приходит к точному поводу, а не «просто так» — открываемость у таких писем заметно выше, чем у обычных рассылок.
Настроенная нами автоматическая бонусная система на сайте интернет-магазина «Сколько? Можно» обеспечивает следующее преимущества:
Постоянные покупатели узнаются магазином автоматически — без ручных промокодов и переписок с менеджером.
Шкала уровней работает сама: чем больше клиент выкупает, тем выгоднее ему покупать дальше — это видно прямо в каталоге.
Реферальная программа снимает с менеджера задачу по учёту «кто кого привёл» — магазин помнит сам.
Сертификаты перестали быть «бумажками на удачу»: клиент гарантированно может потратить номинал на сайте — частично или полностью, в один заказ или за несколько.
Бонусные баллы и подарочные деньги живут отдельно — это сохраняет правильную бухгалтерию и не позволяет смешивать разные сценарии лояльности.
Скидка в день рождения работает фоном — каждый клиент получает поздравление в свой день, без участия маркетолога, и это прямой повод вернуть его за покупкой именно в тот момент, когда у него настроение что-то себе купить.
И всё это сделано без переписывания шаблона карточки товара, корзины и чекаута: стандартные компоненты «Битрикса» продолжают работать как работали, мы только аккуратно добавили в них новые блоки и обработчики.
Любому интернет-магазину с повторными покупками, где имеет смысл узнавать постоянных клиентов и поощрять их автоматически. В первую очередь это касается таких сфер, как:
одежда, обувь, аксессуары;
косметика и парфюмерия;
товары для дома, текстиль, посуда;
чай, кофе, сладости, специи;
спорттовары, нутрициология, БАДы;
товары для хобби — творчество, рукоделие, настольные игры.
Особенно нужна такая программа лояльности, если круг постоянных покупателей уже есть, но он никак не отмечен в магазине, или если вы продаёте подарочные сертификаты офлайн и хотите, чтобы клиенты могли гасить их на сайте без участия менеджера.
Мы сделали модуль, который связывает «1С-Битрикс» с системой учёта СБИС Retail в обе стороны. Главное достижение: он тянет из СБИС любые свойства товара — вес, фасовку, тип, происхождение — и они «живыми» оказываются в карточке на сайте, работают как фильтры и переключатели.
У нашего клиента — интернет-магазина чая chaichelovek.ru — офлайн-магазин живёт в СБИС Retail (Saby): там склад, кассы, ценники, характеристики каждого товара. Параллельно есть интернет-магазин на «1С-Битрикс» — и его надо как-то наполнять. Причем у каждого товара есть параметры, определяемые спецификой чайной сферы: тип чая, локация происхождения, формат упаковки, и главное — вес в граммах с возможностью купить любую фасовку от 25 граммов до целого прессованного блина.
Готовые интеграции СБИС ↔ «Битрикс» решают базовый сценарий: артикул, цена, остаток, картинка. Для витрины-ларька этого хватает. Но когда у товара есть собственные свойства, которые магазину важны для продаж — вес, фасовка, объём, сорт, состав, — готовое решение начинает скрипеть. Эти свойства либо не передаются вовсе, либо их приходится руками переносить и потом синхронизировать каждое изменение.
Разводить два каталога в двух системах — это не интеграция, это двойная работа. Что особенно заметно на ассортименте в сотни позиций.
Чтобы обеспечить двустороннюю связь между CMS «1С-Битрикс» и системой учёта Saby Retail (СБИС) с обменом необходимыми параметрами, мы сделали модуль «Интеграция со СБИС (Retail)» (wintra.sbisintegration). Каталог и остатки едут из СБИС на сайт по расписанию, заказы с сайта автоматически попадают в Saby Retail.
Главное, ради чего мы его и собирали: модуль тянет из СБИС любые свойства товара, какие нужно — вес, фасовку, тип, происхождение, характеристики упаковки — и они «живыми» оказываются в карточке товара на сайте. Работают как фильтры, как переключатели, как отображаемые поля.
СБИС → сайт. Модуль выгружает номенклатуру из Saby Retail по расписанию. В админке указываем, какое поле СБИС во что маппится на сайте: весовое свойство — в свойство «Фасовка» у элемента инфоблока, тип — в раздел каталога, характеристики — в отдельные свойства товара. Выгрузка идёт в YML, сайт подхватывает — получает актуальный каталог со всеми нужными полями.
Остатки — отдельным лёгким файлом, по своему расписанию (например, раз в десять минут). Это важно: полный каталог большой, гонять его часто нет смысла, а остатки должны быть свежими.
Сайт → СБИС. На событие оформления заказа модуль сам отправляет заказ в Saby Retail со всеми позициями, количествами и данными покупателя. Менеджер открывает свою обычную систему СБИС — заказ уже там.
Модуль «Интеграция со СБИС (Retail)» (wintra.sbisintegration) устанавливается через Маркетплейс «1С-Битрикс». Дальше в админке «Настройки → Настройки модулей → Интеграция СБИС» нужно:
Вбить ключи OAuth и выбрать магазин / точку продаж в СБИС.
Настроить маппинг: какое свойство СБИС соответствует какому свойству Битрикс-каталога.
Добавить расписания — отдельно для номенклатуры, отдельно для остатков.
Первая настройка занимает пару часов вместе с прогоном первой выгрузки. Дальше модуль работает тихо в фоне.
Вот живая карточка пуэра «Гу И Ваньгун»:
В блоке «Фасовка (гр)» — четыре варианта: 25 г за 129 ₽, 50 г за 257 ₽, 100 г за 1031 ₽, целый пресс 357 г за 1835 ₽. Рядом характеристики: «Локация — Юньнань», «Формат упаковки — Прессованный». Всё это не заводилось на сайте руками: модуль взял свойства из карточки товара в СБИС и разложил их туда, куда мы указали в настройках маппинга. Изменится цена в учётке или добавится новая фасовка — на сайте всё обновится само.
Модуль «Интеграция со СБИС (Retail)» (wintra.sbisintegration) от «Винтра» — нужный инструмент для тех, у кого офлайн-розница живёт в СБИС Retail, а параллельно есть (или планируется) интернет-магазин на «1С-Битрикс». Особенно — если ассортимент нестандартный: весовые товары, фасовки, наборы, если есть характеристики, которых нет в готовых коннекторах. Чайные магазины, специи и кофе, косметика на развес, хозтовары, стройматериалы — любая категория, где товар «живёт» свойствами.
Рассказываем, как разработали модуль для автоматической генерации картинок товаров под требования Wildberries, Ozon, «Яндекс.Маркет» и «Авито» прямо из административной панели «1С-Битрикс».
Весной 2026 года к нам обратились владельцы интернет-магазина шин «Шинснаб.рф». Задача была стандартная для крупного e-commerce: подготовить картинки 1000+ товаров для размещения на 4 маркетплейсах — Ozon, Wildberries, «Яндекс.Маркет» и «Авито».
Казалось бы, что сложного? Но дьявол кроется в деталях.
Каждый маркетплейс предъявляет собственные требования к размерам изображений:
Ozon: 700×933 пикселя;
Wildberries: 900×1200 пикселей;
Яндекс.Маркет: 1040×1440 пикселей;
Авито: 1280×960 пикселей.
Итого: 4000 картинок только для основного ассортимента. При ручной подготовке — 5–7 минут на товар с учётом обработки, наложения логотипа, добавления текстовой информации. Простая арифметика: 1000 товаров × 4 площадки × 6 минут = 400 часов работы.
Картинки должны выглядеть профессионально и узнаваемо на всех площадках. Это означает:
Единый брендовый фон.
Логотип в одном месте.
Консистентное расположение текста с характеристиками.
Качественное удаление фона у товара.
При ручной обработке поддерживать такую консистентность практически невозможно — человеческий фактор даёт о себе знать.
Каталог шин постоянно пополняется. Каждый новый товар означает необходимость создавать ещё 4 картинки вручную. При активном пополнении ассортимента это превращается в бесконечный процесс.
Мы разработали модуль «Послойный генератор изображений» — wintra.genimgmarketplace — решение для автоматической генерации картинок товаров прямо в административной панели «1С-Битрикс».
Принцип работы простой: создаёте один шаблон в визуальном редакторе, а модуль автоматически применяет его ко всем товарам и генерирует картинки нужных размеров для всех площадок.
Модуль работает по принципу послойной композиции. Доступно 7 типов слоёв:
Графические слои:
Фон — статическое изображение или фон с автоматическим удалением у товара.
Локальная картинка — загружаемое в админку изображение (логотипы, декоративные элементы).
Детальная картинка товара — основное фото из карточки товара.
Картинка из свойства товара — дополнительные изображения из характеристик.
Текстовые слои:
Статический текст — неизменяемые надписи (название магазина, слоганы).
Текст из свойства — динамические данные товара (название, размер, цена).
PHP-вычисляемый текст — сложная логика (например, «Скидка 15%» при определённых условиях).
Особенно полезная функция — условные слои. Можно настроить отображение элементов в зависимости от характеристик товара. Например:
Показывать стикер «ХИТ» только для топовых позиций.
Выделять товары со скидкой специальным фоном.
Добавлять сезонные элементы для зимних/летних шин.
Модуль написан на PHP для платформы «1С-Битрикс». Для рендеринга изображений используется библиотека GD2 — стандартное решение, которое есть на любом хостинге. Архитектура модуля состоит из 4 основных классов:
Template — управление шаблонами (создание, редактирование, удаление).
Layer — работа со слоями внутри шаблона.
Generator — послойный рендер финальных изображений.
Schedule — обработка фоновых заданий через cron.
Каждый шаблон редактируется в визуальном конструкторе слоёв — фон, логотип, текст, картинка товара. Изменения сразу видны в превью
Одна из самых трудозатратных операций при подготовке картинок — качественное удаление фона у товара. Модуль решает это автоматически:
Попиксельная обработка — анализ каждого пикселя на предмет принадлежности к фону.
Feather-сглаживание — создание плавных переходов по краям объекта.
Интеллектуальное определение границ — автоматический поиск контуров товара.
Результат не уступает ручной обработке в Photoshop, но выполняется за секунды.
Код модуля прошёл аудит безопасности:
Защита от XSS-атак через фильтрацию входящих данных.
Параметризованные SQL-запросы для предотвращения инъекций.
Валидация загружаемых файлов.
CSS и JavaScript вынесены в отдельные файлы для ускорения загрузки. Все текстовки интерфейса — через lang-файлы для возможной локализации.Исходный код размещён в:
/opt/stozer/projects/shinsnab/www/local/modules/wm.genimgmarketplace/
— стандартная структура модулей Битрикс.
До автоматизации на подготовку картинок 1000 товаров для 4 площадок требовалось 400 человеко-часов. После внедрения модуля:
Настройка шаблона: 2-3 часа.
Генерация всех картинок: 30-40 минут.
Итого: 95% экономии времени.
Все 4000 картинок получаются в едином стиле. При необходимости изменить дизайн (например, обновить логотип или поменять фон) достаточно отредактировать шаблон, и все картинки обновятся автоматически.
Добавление нового товара в каталог автоматически запускает генерацию картинок для всех площадок. Менеджер просто заполняет карточку товара — картинки создаются без его участия.
Брендовый фон, логотип, характеристики товара — всё на своих местах. Каждая картинка автоматически генерируется под нужный размер площадки
Модуль успешно прошёл модерацию и опубликован на Bitrix Marketplace как коммерческий продукт. Живые примеры работы можно посмотреть в карточках товаров «ШинСнаб.рф» на марктеплейсах — все картинки товаров созданы автоматически.
Модуль работает в фоновом режиме через систему заданий. Настроив cron на сервере, можно полностью забыть о ручной генерации:
Новый товар добавлен → картинки создаются автоматически.
Изменена цена → картинки обновляются с новой ценой.
Обновлён шаблон → все картинки пересоздаются с новым дизайном.
Система работает 24/7 без участия человека.
400 часов ручной работы × 1500 руб/час = 600 000 рублей экономии только на первичной подготовке картинок. При регулярном пополнении каталога экономия составляет десятки тысяч рублей ежемесячно.
При подключении к новому маркетплейсу не нужно заново готовить весь визуальный контент. Достаточно добавить новый размер в шаблон — и картинки для новой площадки готовы за полчаса.
Сезонные акции, редизайн, смена позиционирования — любые изменения визуального стиля внедряются за минуты вместо недель ручной работы.
Модуль интегрируется с любым интернет-магазином на 1С-Битрикс. Не требует изменения структуры базы данных или кастомизации стандартного каталога.Установка занимает 15-20 минут:
Загрузка модуля через маркетплейс.
Настройка первого шаблона.
Запуск генерации картинок.
Совместимость проверена с редакциями «Малый бизнес», «Стандарт» и «Профессионал».
Модуль «Послойный генератор изображений» (wintra.genimgmarketplace) — это практическое решение реальной бизнес-задачи. Вместо сотен часов рутинной работы получается автоматизированная система, которая работает быстрее человека и не допускает ошибок.