wintramedia

wintramedia

Мы — digital-агентство «Винтра». Каждый день работаем с реальным бизнесом, решаем настоящие задачи, получаем живые данные и хотим делиться интересным в сфере IT. Наш сайт: https://wintramedia.ru
На Пикабу
Дата рождения: 24 апреля
111 рейтинг 7 подписчиков 4 подписки 19 постов 3 в горячем
Награды:
Пикабу 17 лет!
1

От прайса в Excel до карточки Ozon: конвейер на «1С-Битрикс» для рейтинга контента 100 из 100⁠⁠

Серия Кейсы

У продавца на маркетплейсе есть две вещи: прайс от поставщика в Excel и кабинет продавца. Между ними — работа, которую обычно делают руками: разложить номенклатуру по требованиям площадки, найти то, чего в прайсе нет, написать описания, собрать картинки, снять видео. На сотне товаров это терпимо. На пяти тысячах — не делается вообще.

Четыре звена конвейера. Прайс не правим никогда — следующий придёт такой же

Четыре звена конвейера. Прайс не правим никогда — следующий придёт такой же

Для магазина HOFER FD — продавца автозапчастей бренда HÖFER — мы собрали конвейер, который проходит этот путь сам: на входе прайс как прислали, на выходе карточка на Ozon с рейтингом контента 100 из 100. В статье рассказываем, из чего он собран, что оказалось неочевидным и сколько такое стоит по времени.

С чего начали

У заказчика — ООО «Бюро проектов „Фьюжн“», магазин HOFER FD на Ozon — есть прайс поставщика: 1 566 строк, 86 товарных групп, около 1 460 позиций. В прайсе лежит скелет: наименование, артикул, OE-номер, кросс-номера, норма упаковки, цена. И всё.

Ozon для той же позиции хочет заметно больше: развёрнутое наименование, аннотацию, вид и место установки, код ТН ВЭД, вес и три габарита упаковки, восемь и больше изображений, видео. Половины этого в прайсе нет физически.

Задача звучала так: сделать так, чтобы недостающее добиралось само, а не набивалось вручную. Ассортимент планируется расширять до пяти тысяч позиций — там ручная работа не масштабируется ни за какие деньги.

Почему станком стал «Битрикс», а не таблица и не скрипт

Первое, о чём думаешь, — написать скрипт. Мы так не сделали, и вот почему.

Всё, что нужно этому конвейеру, в «1С-Битрикс» уже есть готовым: хранилище номенклатуры со свойствами любой формы, импорт из Excel с преобразованиями полей, генератор изображений по шаблону, выгрузка в Seller API. Каждый кусок — существующий модуль, который поддерживает его автор, а не мы. Своя строка кода — это долг: чинить и обновлять придётся самим.

Поэтому «Битрикс» здесь работает не витриной, а станком. Публичная часть сайта выключена намеренно — смотреть на конвейер некому, он не для посетителей. Единственный критерий любого решения: годится ли результат для выгрузки на Ozon.

Из этого следует приятное: хватает редакции «Старт». Торгового каталога и «Интернет-магазина» в ней нет, и это проверено — не мешает. И импорт, и выгрузка работают на инфоблоках, беря цены, остатки и габариты из обычных свойств.

Звено 1. Прайс → Google-таблица

Прайс поставщика мы не правим никогда: следующий придёт в том же виде, и правка не переживёт. Вместо этого рядом появляется рабочая Google-таблица — тот же прайс, разложенный под загрузку.

Столбцы источника остаются нетронутыми, наши начинаются правее. Смысл в том, что таблица — общий стол: в ней работает заказчик (цены и наценка — его зона), в ней работаем мы, и она же уходит на импорт. Ничего не надо пересылать и сводить.

Правая часть таблицы: габариты и их источник, аннотация, вид колодок, ТН ВЭД и блок промптов — он всегда последний

Правая часть таблицы: габариты и их источник, аннотация, вид колодок, ТН ВЭД и блок промптов — он всегда последний

Грабли, на которые наступают все. Модуль импорта различает категории и товары не по содержимому, а по оформлению строки: ей нужны одновременно заливка и объединённые ячейки по всей ширине. Мы перенесли клиентский файл в Google-таблицу голыми значениями — и модуль перестал видеть имена разделов. Ошибка молчит: глазами всё верно, значения на месте, а разделы не парсятся. Поэтому таблицу для импорта правят поверх существующей, а не пересобирают из данных.

Второе правило родилось само: новые столбцы добавляются до блока промптов, а промпты всегда идут последними. Иначе через месяц в таблице тридцать столбцов вперемешку, и в ней невозможно работать.

Звено 2. Добираем то, чего в прайсе нет

Часть недостающего берётся с официального сайта бренда, и это самый честный источник: развёрнутое наименование, комплектация, применяемость (марка / модель / годы), OE и Ref-номера, фотографии. Сборщик обходит сотню с лишним карточек за три минуты и не требует ни прокси, ни браузера.

А вот весогабариты в открытом доступе почти отсутствуют — и это главный вывод всей истории.

Двенадцать площадок и один рабочий источник

Мы перебрали двенадцать каталогов и маркетплейсов. Итог:

  • один источник отдал вес и три размера отдельными полями и покрыл 80 позиций из 132 — он и стал основным;

  • ещё один отдал габариты одной строкой и покрыл шесть позиций;

  • часть площадок закрыта антиботом наглухо — не пускают ни с сервера, ни через прокси, ни браузером;

  • официальный API со всеми данными существует и стоит 228 000 ₽ в месяц;

  • остальные отдаются свободно, но весогабаритов не содержат вовсе.

Вывод устойчивый: массового источника весогабаритов в открытом доступе нет. Их публикуют продавцы маркетплейсов, а маркетплейсы закрыты. Значит схема должна работать без них.

Два опасных места, где парсер врёт молча

Поиск не по артикулу. Один каталог на запрос по артикулу колодок Chevrolet Captiva уверенно выдал колодки Lada Vesta. Данные пришли настоящие — просто не про тот товар. Источник годится только тогда, когда артикул на найденной карточке совпадает с запрошенным, и это проверяется программно, а не глазами.

Размер детали вместо размера коробки. Внешне не отличить: числа правдоподобные, поля заполнены. Проверяется плотностью: разделите вес на объём. У коробки с колодками выходит 0,3–1,5 г/см³; если получилось 7,3 — это плотность сплошной стали, и в источнике указан размер самого изделия. У нас такая проверка стоит отдельным скриптом и отбраковывает строки до того, как они уедут в карточку.

И мелочь, которая стоит часа: размеры почти везде отдаются в метрах, вес в килограммах, а Ozon просит миллиметры и граммы. Приводить к одному виду надо при разборе, а не «потом в таблице».

Чего найти не удалось — закрываем типовым значением

Схема в итоге двухслойная. Что нашлось — берём фактом. Остальное закрываем типовым значением по категории (медианой собранных) и честно помечаем это в отдельном столбце «Источник габаритов».

Так делать можно, потому что пустое поле роняет карточку на валидации, а помеченная оценка видна глазами и правится точечно. У колодок разброс невелик, а Ozon всё равно перемеряет посылку при приёмке. Заказчик видит, где факт, а где оценка, и может уточнить любую строку сам.

Звено 3. Тексты пишет приложение в таблице, а не человек

Аннотация нужна каждой позиции, и писать её руками на пяти тысячах товаров бессмысленно. Мы не стали гонять тексты через отдельный сервис: генерация живёт прямо в Google-таблице, надстройкой с моделью.

Устроено так:

  • отдельный столбец — промпт-формула: он не текст, а формула, которая склеивает факты строки (наименование, применяемость, тип, комплектацию, номера);

  • соседний столбец — куда пишет модель;

  • ещё один — общая роль модели на весь лист.

Промпт живёт формулой не для красоты: поправили данные в строке — промпт изменился сам, и перегенерация не требует переписывания заданий. На тестовой категории 132 описания сгенерировались примерно за минуту, длина 261–438 знаков, все уникальные.

Три вещи, которые стоит знать заранее:

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

  2. Габариты в промпт не кладём намеренно. В первом прогоне модель писала «габариты упаковки составляют 15.50 × 3.50 × 9.00 см» — а это у нас в большинстве строк оценка. В отдельном столбце она помечена, в тексте же читалась бы как точная величина. Весогабариты идут отдельным полем, не прозой.

  3. Всё, что пишет модель, вычитывается. Правдоподобная выдумка в карточке маркетплейса дороже пустого поля. Мы проверяли тексты на выдуманные годы выпуска — годы пришли из применяемости с сайта бренда, модель ничего не добавила от себя. Но проверять надо каждый раз.

Звено 4. Картинки — восемь кадров на товар

Медиа весит в рейтинге Ozon больше всего, и восемь кадров дают за него максимум. Собираются они тремя разными способами и ни один — руками.

Главное изображение

Его рисует наш модуль wintra.genimgmarketplace: один шаблон на всю категорию, послойная композиция, 132 картинки за прогон.

Каждый слой берёт значение из своего источника: фон — из шаблона, фото — с сайта бренда, текст — из свойств товара

Каждый слой берёт значение из своего источника: фон — из шаблона, фото — с сайта бренда, текст — из свойств товара

Текстовые слои умеют считать: наименование склеивается из раздела каталога и свойства «Вид колодок» и обрезается по длине контейнера, применяемость переносится по строкам, длинный список Ref-номеров ломается и закрывается многоточием. Это важнее, чем кажется: без ограничения длины строка просто уезжает за край картинки, и заметно это только на просмотре всех 132 файлов подряд.

Четыре слайда инфографики

Дальше — карусель. Здесь мы разделили слайды на общие (годятся любой категории) и категорийные.

Новая категория стоит двух новых файлов — профиль импорта при этом не трогают

Новая категория стоит двух новых файлов — профиль импорта при этом не трогают

Ключевая деталь схемы: категорийный слайд ищется не по ID раздела и не по его названию. Причина простая — при первом импорте разделы только создаются, их ID ещё не существует. Зато в строке уже лежит артикул, а у артикула есть смысловая средняя часть: «HF 350 960» → 350. По ней и идёт подбор. Импорт забирает слайды двумя масками: общие и категорийные.

Что нельзя рисовать на слайдах. Ozon запрещает на дополнительных фото информацию о доставке и возврате — сроки, стоимость, способ, географию, скорость. Наш слайд «Доставка и оплата» получил замечание модерации целиком и был заменён. Под тот же запрет попадает безобидное на вид «отгружаем со склада в Самаре». Заодно мы убрали со слайдов сроки гарантии, контакты, рейтинг магазина и число заказов: последние два меняются, а картинка нет.

Собственно галерея

Главное изображение, фотографии с сайта бренда и четыре слайда — восемь кадров в каждой карточке

Главное изображение, фотографии с сайта бренда и четыре слайда — восемь кадров в каждой карточке

Звено 5. Видеообложка — иначе потолок 82 балла

Видео в рейтинге Ozon даёт +40 к группе «Медиа». Без него общий рейтинг упирается в 82 балла, сколько ни заполняй остальное. При этом генератора видео в Seller API нет вовсе: площадка принимает только ссылку на готовый файл.

Значит ролики надо собирать самим — и на 132 позиции это уже не ручная работа. Мы собрали видеообложки из кадров той же галереи: растворение между кадрами, вертикальный формат под карточку, имя файла равно слитному артикулу, чтобы импорт подхватил без сопоставления.

Требования площадка отдаёт сама, в описании атрибутов: видеообложка — MP4 или MOV, 8–30 секунд, до 20 МБ. Здесь есть тихая ловушка: кроссфейды съедают время внахлёст. Восемь кадров по 1,25 секунды дают на выходе 7,6 секунды — то есть меньше минимума, и файл отбивается. Поэтому длительность считается от целевой, а каждый готовый файл проверяется программно.

Звено 6. Выгрузка в Ozon

Выгрузку ведёт модуль webprostor.ozon: профиль на категорию, товары, цены и остатки через Seller API.

Здесь главная особенность площадки: у Ozon своя структура атрибутов на каждую категорию. Это значит, что профиль выгрузки настраивается по каждой категории отдельно — универсального «залить весь прайс» не бывает в принципе.

И самое дорогое из мелочей: значение словарного атрибута должно совпадать со справочником Ozon побайтно. Площадка принимает строку молча, но без точного совпадения ставит нулевой идентификатор значения и роняет валидацию. Выглядит это как «импорт прошёл успешно, а карточка не публикуется». Поэтому словари категории мы выгружаем из API и подставляем значения из них, а не набираем руками.

Что получилось: 100 из 100

Формула проверена на живых цифрах карточки

Формула проверена на живых цифрах карточки

Тестовая карточка набрала 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, Яндекс.Маркет и Авито отличаются требованиями к размерам картинок и составом атрибутов, а звенья конвейера остаются те же.

Показать полностью 6
1

Удобный сайт для Федерации армейского рукопашного боя России⁠⁠

Серия Кейсы

Общероссийская общественная организация «Спортивная федерация армейского рукопашного боя России» (ФАРБ России) развивает армейский рукопашный бой — первое официально признанное полноконтактное смешанное единоборство в новейшей истории страны. АРБ зародился в ВДВ в 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 года.

Федерация ведёт его сама: добавляет соревнования, новости, документы, региональные отделения и руководителей из админки. Посетитель находит ближайшее отделение по карте, отбирает соревнования по возрасту и уровню, скачивает нормативные документы и читает новости — там, где раньше была статичная визитка на конструкторе.

Показать полностью 7 1
1

От открытого аукциона до заказа без единого звонка: интернет-магазин для агрокомплекса «Тепличный»⁠⁠

Серия Кейсы

Самарский агрокомплекс «Тепличный» — предприятие, которое 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 года.

Розница покупает онлайн и видит стоимость доставки сразу по своему адресу, опт торгуется за партии на сайте, а выигранный лот доходит до заказа без единого звонка. Каталог, зоны доставки и лоты предприятие ведёт само, из админки и своей таблицы.

Показать полностью 7 1
1

Новый сайт санатория без потери поискового трафика — кейс диджитал-агентства «Винтра»⁠⁠

Серия Кейсы

Санаторий «Русский Бор» — круглогодичная здравница в Тольятти, наберегу Жигулёвского водохранилища в сосновом бору. Номера от «Эконома» до «Люкса», собственная лечебная база: водолечебница, грязелечебница,физиотерапия, бассейн, спелеокамера. Диджитал-агентство «Винтра» разработало санаторию новый сайт на 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 работает,счётчики собирают статистику с первого дня.

Санаторий остаётся у нас на сопровождении: обслуживание сайта, обслуживание хостинга и техподдержка «Битрикс».

Показать полностью 5 1
1

Программа лояльности, оплата сертификатом и рефералка в одной связке — кейс по магазину одежды «Сколько? Можно»⁠⁠

Серия Кейсы

Когда у бренда есть постоянные покупатели, рано или поздно встаёт вопрос: как сделать так, чтобы интернет-магазин их узнавал и поощрял автоматически — без ручных промокодов, без «напиши менеджеру», без табличек в 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. вводит код с сертификата → нажимает «Проверить»;

  2. сайт показывает остаток и максимум, который можно списать (но не больше суммы корзины);

  3. вводит сумму, которую хочет списать (по умолчанию — весь остаток);

  4. нажимает «Применить» → сайт пересчитывает итог;

  5. оформляет заказ и доплачивает разницу обычным способом.

Если сертификат покрывает корзину полностью — доплачивать ничего не нужно, заказ сразу проходит как оплаченный.

В этом же блоке аккуратно обрабатываются нештатные ситуации: неправильный код, попытка списать больше, чем на сертификате, и отмена применения до оформления.

Блок «Сертификат»: проверка кода, остаток на карте и подсказки покупателю

Блок «Сертификат»: проверка кода, остаток на карте и подсказки покупателю

После применения покупатель в правом сайдбаре видит итог: сумма заказа,
сколько списано бонусов, сколько списано по сертификату, сумма доплаты — всё прозрачно.

Бонусные баллы и сертификат при этом можно использовать в одном заказе одновременно. Например, у клиента 1 500 ₽ на бонусном счёте, и подарили карту на 5 000 ₽ — в форме оформления он сначала вводит код сертификата на 5 000 ₽, потом в соседнем блоке списывает свои 1 500 ₽ баллами, и итог к доплате уменьшается сразу на обе суммы. Магазин это аккуратно посчитает и сложит в один заказ.

И всё это работает в том числе с мобильного: блок аккуратно ужимается, поля и кнопки крупные, все удобно.

Как видит заказ менеджер

В админке магазина в карточке заказа теперь появляется не одна платёжная
строка, а две: «Оплата на сайте» — на сумму к доплате, и «Подарочная карта» — на сумму, списанную с сертификата. В комментарии к платежу сертификата виден его код и сумма списания. Никаких недоразумений: всё видно сразу.

Карточка заказа в админке: две платёжные строки: «Оплата на сайте» + «Подарочная карта»

Карточка заказа в админке: две платёжные строки: «Оплата на сайте» + «Подарочная карта»

Бонусы при этом — отдельный сценарий: они уменьшают платёж «Оплата на сайте», что и логично, потому что для бухгалтерии это деньги клиента, а не подарочные.

Как это работает в связке — простыми словами

В одном заказе могут одновременно встретиться: скидка по уровню, списание бонусов и списание сертификата. Чтобы они не перетягивали одеяло друг у друга, мы выстроили чёткую очередь:

  1. Сначала магазин применяет скидку клиента — она определяется его текущим уровнем и считается до всего остального.

  2. Дальше срабатывает обработчик бонусов: если клиент списал баллы, они уменьшают платёж «Оплата на сайте».

  3. Последним работает обработчик сертификата:
    он уменьшает баланс сертификата, создаёт в заказе вторую платёжную
    строку «Подарочная карта» и уменьшает основной платёж на ту же сумму.

В итоге у клиента остаётся одна понятная сумма «к доплате», у менеджера — заказ с прозрачной структурой платежей, у магазина — корректная отчётность и корректная выгрузка в «1С» (она забирает заказ как обычно, никаких допработ со стороны 1С-программиста не потребовалось).

Учёт сертификатов хранится в отдельном справочнике в админке: код, номинал, текущий остаток, активность. Рядом — отдельная история всех операций: какой клиент, какой заказ, какая сумма списана или возвращена. Когда на сертификате остаётся ноль — магазин сам помечает его как неактивный, чтобы пустые коды не висели мёртвым грузом.

В момент, когда менеджер пробивает продажу сертификата в «1С», его код моментально прилетает на сайт в этот же справочник — никакой ручной заводки не нужно. Покупатель сразу может ввести этот код на сайте и потратить.

Это, кстати, ещё одна причина, почему сертификат сделан отдельным механизмом, а не «пополнением бонусного счёта»: подарочный сертификат часто покупают другу в подарок, а активирует его уже сам друг — со своего аккаунта на сайте. Деньги попадают именно туда, куда задумано, а не на счёт того, кто покупал.

Справочник «Подарочные сертификаты» в админке: коды, номиналы, остатки, активность

Справочник «Подарочные сертификаты» в админке: коды, номиналы, остатки, активность

Бонус сверху — скидка в день рождения

Поверх этой системы мы добавили ещё один автоматический сценарий, который оживляет клиентскую базу — поздравление с днём рождения и скидку к нему.

Клиент один раз указывает дату рождения — в личном кабинете или прямо при оформлении заказа. Дата подтягивается в обе стороны: что заполнил в
одном месте, то подставится в другом. После первого сохранения сменить её может только администратор магазина — это защита от схемы «поставил день в день и пользуюсь скидкой».

Раз в сутки магазин проверяет даты рождения всех клиентов. Если у кого-то день рождения попадает в окно ±3 дня — система автоматически:

  • переводит клиента во временную группу «Скидка на День рождения»;

  • даёт ему скидку 10% на товары, которые не участвуют в других акциях;

  • отправляет поздравительное письмо — один раз в год, по красивому шаблону;

  • когда окно закрывается — так же тихо возвращает клиента в обычную группу.

Для бренда это маркетинговый инструмент возврата клиентов: повод заглянуть на сайт именно в тот момент, когда человек открыт к покупке для себя. Письмо приходит к точному поводу, а не «просто так» — открываемость у таких писем заметно выше, чем у обычных рассылок.

Что это даёт бренду

Настроенная нами автоматическая бонусная система на сайте интернет-магазина «Сколько? Можно» обеспечивает следующее преимущества:

  • Постоянные покупатели узнаются магазином автоматически — без ручных промокодов и переписок с менеджером.

  • Шкала уровней работает сама: чем больше клиент выкупает, тем выгоднее ему покупать дальше — это видно прямо в каталоге.

  • Реферальная программа снимает с менеджера задачу по учёту «кто кого привёл» — магазин помнит сам.

  • Сертификаты перестали быть «бумажками на удачу»: клиент гарантированно может потратить номинал на сайте — частично или полностью, в один заказ или за несколько.

  • Бонусные баллы и подарочные деньги живут отдельно — это сохраняет правильную бухгалтерию и не позволяет смешивать разные сценарии лояльности.

  • Скидка в день рождения работает фоном — каждый клиент получает поздравление в свой день, без участия маркетолога, и это прямой повод вернуть его за покупкой именно в тот момент, когда у него настроение что-то себе купить.

И всё это сделано без переписывания шаблона карточки товара, корзины и чекаута: стандартные компоненты «Битрикса» продолжают работать как работали, мы только аккуратно добавили в них новые блоки и обработчики.

Кому это решение подойдёт

Любому интернет-магазину с повторными покупками, где имеет смысл узнавать постоянных клиентов и поощрять их автоматически. В первую очередь это касается таких сфер, как:

  • одежда, обувь, аксессуары;

  • косметика и парфюмерия;

  • товары для дома, текстиль, посуда;

  • чай, кофе, сладости, специи;

  • спорттовары, нутрициология, БАДы;

  • товары для хобби — творчество, рукоделие, настольные игры.

Особенно нужна такая программа лояльности, если круг постоянных покупателей уже есть, но он никак не отмечен в магазине, или если вы продаёте подарочные сертификаты офлайн и хотите, чтобы клиенты могли гасить их на сайте без участия менеджера.

Показать полностью 7 1
1

Модуль wintra.sbisintegration: свойства товара из СБИС — прямо в карточку на сайте⁠⁠

Серия Кейсы

Мы сделали модуль, который связывает «1С-Битрикс» с системой учёта СБИС Retail в обе стороны. Главное достижение: он тянет из СБИС любые свойства товара — вес, фасовку, тип, происхождение — и они «живыми» оказываются в карточке на сайте, работают как фильтры и переключатели.

Задача

У нашего клиента — интернет-магазина чая chaichelovek.ru — офлайн-магазин живёт в СБИС Retail (Saby): там склад, кассы, ценники, характеристики каждого товара. Параллельно есть интернет-магазин на «1С-Битрикс» — и его надо как-то наполнять. Причем у каждого товара есть параметры, определяемые спецификой чайной сферы: тип чая, локация происхождения, формат упаковки, и главное — вес в граммах с возможностью купить любую фасовку от 25 граммов до целого прессованного блина.

Готовые интеграции СБИС ↔ «Битрикс» решают базовый сценарий: артикул, цена, остаток, картинка. Для витрины-ларька этого хватает. Но когда у товара есть собственные свойства, которые магазину важны для продаж — вес, фасовка, объём, сорт, состав, — готовое решение начинает скрипеть. Эти свойства либо не передаются вовсе, либо их приходится руками переносить и потом синхронизировать каждое изменение.

Разводить два каталога в двух системах — это не интеграция, это двойная работа. Что особенно заметно на ассортименте в сотни позиций.

Решение

Чтобы обеспечить двустороннюю связь между CMS «1С-Битрикс» и системой учёта Saby Retail (СБИС) с обменом необходимыми параметрами, мы сделали модуль «Интеграция со СБИС (Retail)» (wintra.sbisintegration). Каталог и остатки едут из СБИС на сайт по расписанию, заказы с сайта автоматически попадают в Saby Retail.

Главное, ради чего мы его и собирали: модуль тянет из СБИС любые свойства товара, какие нужно — вес, фасовку, тип, происхождение, характеристики упаковки — и они «живыми» оказываются в карточке товара на сайте. Работают как фильтры, как переключатели, как отображаемые поля.

Что сделали: двусторонний мост с произвольным маппингом свойств

СБИС → сайт. Модуль выгружает номенклатуру из Saby Retail по расписанию. В админке указываем, какое поле СБИС во что маппится на сайте: весовое свойство — в свойство «Фасовка» у элемента инфоблока, тип — в раздел каталога, характеристики — в отдельные свойства товара. Выгрузка идёт в YML, сайт подхватывает — получает актуальный каталог со всеми нужными полями.

Настройки модуля: OAuth-ключи, параметры каталога, пути выгрузки

Настройки модуля: OAuth-ключи, параметры каталога, пути выгрузки

Остатки — отдельным лёгким файлом, по своему расписанию (например, раз в десять минут). Это важно: полный каталог большой, гонять его часто нет смысла, а остатки должны быть свежими.

Расписания заданий: отдельная частота для каталога и для остатков

Расписания заданий: отдельная частота для каталога и для остатков

Сайт → СБИС. На событие оформления заказа модуль сам отправляет заказ в Saby Retail со всеми позициями, количествами и данными покупателя. Менеджер открывает свою обычную систему СБИС — заказ уже там.

Ручной запуск выгрузки и список актуальных файлов

Ручной запуск выгрузки и список актуальных файлов

Как подключается

Модуль «Интеграция со СБИС (Retail)» (wintra.sbisintegration) устанавливается через Маркетплейс «1С-Битрикс». Дальше в админке «Настройки → Настройки модулей → Интеграция СБИС» нужно:

  1. Вбить ключи OAuth и выбрать магазин / точку продаж в СБИС.

  2. Настроить маппинг: какое свойство СБИС соответствует какому свойству Битрикс-каталога.

  3. Добавить расписания — отдельно для номенклатуры, отдельно для остатков.

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

Результат: как это выглядит на реальной карточке

Вот живая карточка пуэра «Гу И Ваньгун»:

В блоке «Фасовка (гр)» — четыре варианта: 25 г за 129 ₽, 50 г за 257 ₽, 100 г за 1031 ₽, целый пресс 357 г за 1835 ₽. Рядом характеристики: «Локация — Юньнань», «Формат упаковки — Прессованный». Всё это не заводилось на сайте руками: модуль взял свойства из карточки товара в СБИС и разложил их туда, куда мы указали в настройках маппинга. Изменится цена в учётке или добавится новая фасовка — на сайте всё обновится само.

Модуль «Интеграция со СБИС (Retail)» (wintra.sbisintegration) от «Винтра» — нужный инструмент для тех, у кого офлайн-розница живёт в СБИС Retail, а параллельно есть (или планируется) интернет-магазин на «1С-Битрикс». Особенно — если ассортимент нестандартный: весовые товары, фасовки, наборы, если есть характеристики, которых нет в готовых коннекторах. Чайные магазины, специи и кофе, косметика на развес, хозтовары, стройматериалы — любая категория, где товар «живёт» свойствами.

Показать полностью 4
1

Модуль wintra.genimgmarketplace: как автоматизировать генерацию картинок для маркетплейсов⁠⁠

Рассказываем, как разработали модуль для автоматической генерации картинок товаров под требования 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 типов слоёв:

Графические слои:

  1. Фон — статическое изображение или фон с автоматическим удалением у товара.

  2. Локальная картинка — загружаемое в админку изображение (логотипы, декоративные элементы).

  3. Детальная картинка товара — основное фото из карточки товара.

  4. Картинка из свойства товара — дополнительные изображения из характеристик.

Текстовые слои:

  1. Статический текст — неизменяемые надписи (название магазина, слоганы).

  2. Текст из свойства — динамические данные товара (название, размер, цена).

  3. PHP-вычисляемый текст — сложная логика (например, «Скидка 15%» при определённых условиях).

Условная логика

Особенно полезная функция — условные слои. Можно настроить отображение элементов в зависимости от характеристик товара. Например:

  • Показывать стикер «ХИТ» только для топовых позиций.

  • Выделять товары со скидкой специальным фоном.

  • Добавлять сезонные элементы для зимних/летних шин.

Техническая реализация

Стек технологий

Модуль написан на PHP для платформы «1С-Битрикс». Для рендеринга изображений используется библиотека GD2 — стандартное решение, которое есть на любом хостинге. Архитектура модуля состоит из 4 основных классов:

  1. Template — управление шаблонами (создание, редактирование, удаление).

  2. Layer — работа со слоями внутри шаблона.

  3. Generator — послойный рендер финальных изображений.

  4. Schedule — обработка фоновых заданий через cron.

Каждый шаблон редактируется в визуальном конструкторе слоёв — фон, логотип, текст, картинка товара. Изменения сразу видны в превью

Автоматическое удаление фона

Одна из самых трудозатратных операций при подготовке картинок — качественное удаление фона у товара. Модуль решает это автоматически:

  1. Попиксельная обработка — анализ каждого пикселя на предмет принадлежности к фону.

  2. Feather-сглаживание — создание плавных переходов по краям объекта.

  3. Интеллектуальное определение границ — автоматический поиск контуров товара.

Результат не уступает ручной обработке в Photoshop, но выполняется за секунды.

Безопасность и производительность

Код модуля прошёл аудит безопасности:

  1. Защита от XSS-атак через фильтрацию входящих данных.

  2. Параметризованные SQL-запросы для предотвращения инъекций.

  3. Валидация загружаемых файлов.

CSS и JavaScript вынесены в отдельные файлы для ускорения загрузки. Все текстовки интерфейса — через lang-файлы для возможной локализации.Исходный код размещён в:

/opt/stozer/projects/shinsnab/www/local/modules/wm.genimgmarketplace/

— стандартная структура модулей Битрикс.

Результаты внедрения

Экономия времени

До автоматизации на подготовку картинок 1000 товаров для 4 площадок требовалось 400 человеко-часов. После внедрения модуля:

  • Настройка шаблона: 2-3 часа.

  • Генерация всех картинок: 30-40 минут.

Итого: 95% экономии времени.

Качество и консистентность

Все 4000 картинок получаются в едином стиле. При необходимости изменить дизайн (например, обновить логотип или поменять фон) достаточно отредактировать шаблон, и все картинки обновятся автоматически.

Масштабируемость

Добавление нового товара в каталог автоматически запускает генерацию картинок для всех площадок. Менеджер просто заполняет карточку товара — картинки создаются без его участия.

Итоговые картинки для маркетплейса: разные модели шин оформлены в едином фирменном стиле.

Итоговые картинки для маркетплейса: разные модели шин оформлены в едином фирменном стиле.

Брендовый фон, логотип, характеристики товара — всё на своих местах. Каждая картинка автоматически генерируется под нужный размер площадки

Коммерческий успех

Модуль успешно прошёл модерацию и опубликован на Bitrix Marketplace как коммерческий продукт. Живые примеры работы можно посмотреть в карточках товаров «ШинСнаб.рф» на марктеплейсах — все картинки товаров созданы автоматически.

Автоматизация через cron-задания

Модуль работает в фоновом режиме через систему заданий. Настроив cron на сервере, можно полностью забыть о ручной генерации:

  • Новый товар добавлен → картинки создаются автоматически.

  • Изменена цена → картинки обновляются с новой ценой.

  • Обновлён шаблон → все картинки пересоздаются с новым дизайном.

Система работает 24/7 без участия человека.

Практическая выгода для бизнеса

Прямая экономия

400 часов ручной работы × 1500 руб/час = 600 000 рублей экономии только на первичной подготовке картинок. При регулярном пополнении каталога экономия составляет десятки тысяч рублей ежемесячно.

Скорость выхода на новые площадки

При подключении к новому маркетплейсу не нужно заново готовить весь визуальный контент. Достаточно добавить новый размер в шаблон — и картинки для новой площадки готовы за полчаса.

Гибкость дизайна

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

Техническая интеграция

Модуль интегрируется с любым интернет-магазином на 1С-Битрикс. Не требует изменения структуры базы данных или кастомизации стандартного каталога.Установка занимает 15-20 минут:

  1. Загрузка модуля через маркетплейс.

  2. Настройка первого шаблона.

  3. Запуск генерации картинок.

Совместимость проверена с редакциями «Малый бизнес», «Стандарт» и «Профессионал».

Модуль «Послойный генератор изображений» (wintra.genimgmarketplace) — это практическое решение реальной бизнес-задачи. Вместо сотен часов рутинной работы получается автоматизированная система, которая работает быстрее человека и не допускает ошибок.

Показать полностью 6 1
2

Вирусы на «1С-Битрикс»: спасение сайта⁠⁠

Владельцы необновленных сайтов на «1С-Битрикс» с решениями (в основном — снятыми с продажи, устаревших версий и т. п.) от «Аспро» и некоторых других разработчиков подвергаются риску заражения. За счет эксплуатации древних уязвимостей, которые давно устранены вендором, злоумышленник в лучшем случае нарушает работу сайта, в худшем — крадет информацию, переадресует пользователей на сторонние веб-ресурсы и выполняет другие нежелательные действия.

Причем попытки владельца откатить версию с помощью бэкапов хостера не спасают. Мы опишем наш опыт решения проблемы и изложим варианты восстановления сайта на устаревшем ПО «1С-Битрикс» с готовым решением «Аспро» без активной поддержки.

Условия попадания в группу риска:

  • Ваш сайт создан на CMS «1С-Битрикс: Управление сайтом».

  • Ядро CMS и решения не обновлялись более 1,5 лет.

  • На сайте используется на решение от компании Аспро, Esolutions, Sotbit, Маяк и других. Проверьте тут, есть ли в списке ваше решение.

Как понять, что ваш сайт заражен:

  • Сайт долго открывается или открываются не запрашиваемые страницы.

  • При попытке перейти на внутренние страницы сайта вы видите ошибку «Доступ запрещен».

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

  • В файловой структуре присутствует множество непонятных файлов и папок, не относящихся к структуре вашего сайта.

  • Невозможно войти в админ-панель сайта.

  • Наблюдаются прочие аномалии в работе сайта.

Пример письма от хостера с уведомлением о заражении сайта

Пример письма от хостера с уведомлением о заражении сайта

В любом из этих случаев важно как можно быстрее начать действовать. Если пройдет слишком много времени без активной реакции, ситуация может усугубиться — ведь обычно стандартный shared-хостинг хранит архивы только за последние 30 дней. В этот период восстановление сайта можно провести значительно быстрее и дешевле.

Процесс устранения уязвимостей, очистки сайта от вирусов и обновления до актуальной версии

Рассмотрим самый сложный пример из нашей практики. Вводные: Прошло более 30 дней с момента заражения. В админ-панель сайта не попасть, ни одна страница не открывается, да еще и пароль от админки никто не помнит. Единственная зацепка — доступ в панель управления хостингом.

Если вы помните пароль от админ-панели и заражение произошло не позднее 30 дней или у вас есть рабочий бэкап в «Списке резервных копий» (*ваш_домен*/bitrix/admin/dump_list.php), можно сразу восстановить сайт до последней рабочей версии до заражения. В таком случае пропустите пункты с 1-го по 4-й, описанные далее.

Когда пароля и бэкапов нет, делаем так:

1. Для начала переходим в панель управления хостера. Нам необходимо восстановить работу админ-панели сайта, чтобы страница *ваш_домен*/bitrix/admin/ открывала форму авторизации, а не выдавала ошибку. Для этого идем в файловый менеджер и удаляем из папок bitrix и bitrix/admin/ файлы .htaccess. Не переживайте, что удалите лишнее, потом мы заново разместим все, что необходимо.

* В одном из последних восстановленных нами проектов вирус разместил более 5000 файлов .htaccess. Не пытайтесь вычистить их все руками — есть специальный инструмент, но об этом позже.

2. Теперь, когда можем открыть страницу авторизации, если мы не помним пароль от админ-панели, нам необходимо произвести сброс пароля и восстановить его. Обычно почтовая подсистема сайта уже не работает и стандартным механизмом сбросить пароль не выйдет. Но все же стоит попытаться. Если результата нет, то ищем в интернете способы восстановления пароля от админки CMS. Писать тут рабочий способ специально не будем, ибо это может стать еще одной уязвимостью. Кто понимает, тот сделает.

3. После входа в админ-панель сайта вы, скорее всего, обнаружите, что многие разделы не открываются. Причина — всё те же файлы .htaccess. Пока нам необходимо только попасть на страницу системы обновлений (*ваш_домен*/bitrix/admin/update_system.php).

Вкладка «Установка обновлений» открывается по умолчанию

Вкладка «Установка обновлений» открывается по умолчанию

Здесь жмем «Проверить обновления» (п. 1). Если видим, что лицензия и ключ (п.2) показываются, но период получения обновлений окончился — значит, всё в порядке. Если же видим ошибку и вместо ключа — что-то иное, то, скорее всего, неверен адрес сервера для получения обновлений. Внесите изменения на странице настроек главного модуля (*ваш_домен*/bitrix/admin/settings.php), как показано на скриншоте.

Настройки сервера обновлений «1С-Битрикс»

Настройки сервера обновлений «1С-Битрикс»

После этого вернитесь на страницу системы обновлений и перейдите по ссылке «Проверить ключ» (п. 3). Вы попадете на сайт «1С-Битрикс», где сможете оплатить продление лицензионного ключа. Либо обратитесь к своему разработчику, если его контакты еще у вас есть, он поможет приобрести продление для вас.

4. Перейдите в раздел «Настройки — Инструменты — Резервное копирование — Список резервных копий» (*ваш_домен*/bitrix/admin/dump_list.php) и проверьте, нет ли там свежего по дате архива. Обычно добропорядочные разработчики перед тем, как вносить масштабные изменения на сайте, делают бэкап.

5. Если есть сохраненная резервная копия сайта — просто восстановите сайт до последней рабочей версии до заражения.

6. Независимо от того, удалось ли вам восстановиться с бэкапа или нет, следующим шагом будет обновление ядра и решений, имеющих доступ к обновлениям до последней версии, через штатную систему. Если видите ошибку с переходом на PHP 8, игнорируйте ее, сначала нужно устранить уязвимость. Поэтому установите обновления, которые вам доступны без перехода на PHP 8.

7. Далее необходимо осуществить патчинг уязвимостей решений из списка «1С-Битрикс». В нем напротив каждого решения есть рекомендации. Практически каждый разработчик сделал простой патч. Просто закиньте нужный файл в корень сайта и выполните инструкции.

8. Пункт необходимый, если вы не смогли восстановиться из безопасной версии и работаете с зараженным сайтом. После того, как вы пропатчите все решения, вы устраните уязвимости для нового заражения вирусами, но они могут оставаться на сайте. У многих хостеров, как правило, в панели управления предусмотрен инструмент для бесплатной проверки файлов сайта на вирусы. Ее результатом в рассматриваемом случае обычно становится длинный список зараженностей. Игнорируйте всё, что связанно с .htaccess, а остальное удалите вручную.

9. Если на вашем сайте есть кнопка «Сайт под защитой», то можно сразу перейти к пунктам устранения угрозы с помощью системы проактивной защиты «1С-Битрикс».

Кнопка «Сайт под защитой»

Кнопка «Сайт под защитой»

Если кнопки нет, сначала нужно сделать п. 10.

С проактивной защитой «1С-Битрикс» работаем следующим образом:

  • Тут есть отличная функция «Настройки — Проактивная защита — Поиск троянов — Проверка .htaccess» (*ваш_домен*/bitrix/admin/xscan_htaccess.php). После проверки вы можете удалить все пораженные файлы и установить минимальный набор. Это самый простой и быстрый способ избавиться от зараженных файлов, сколько бы их ни было, не прибегая к удалению вручную.

  • Пройдите в раздел «Поиск троянов — Сканирование файлов» (*ваш_домен*/bitrix/admin/xscan_worker.php) и проведите сканирование. То, что вызывает подозрение, проверьте отдельно, указав путь вручную. А также можно написать в поддержку «1С-Битрикс» с просьбой проверить подозрительные файлы.

  • Далее, активируйте все варианты защиты: проактивный фильтр, веб-антивирус. Очень неплохо будет если вы подключите также двухэтапную авторизацию.

10. Осуществите переход на PHP 8. Тут начинается самое интересное. Скорее всего, вы столкнетесь с тем, что ваш сайт работает на PHP 7-й версии, поэтому необходимо будет перейти на PHP 8. У нас есть подробная статья об этом.

Если кратко, мы действуем по следующему сценарию:

  1. Накатываем обновления, которые нам дает поставить система сразу.

  2. Идем к хостеру меняем версию PHP на минимум 8.2. После этого, как правило, сайт перестанет работать, но админка будет функционировать, что даст нам возможность установить все последние обновления. Устанавливаем.

  3. Переходим к обновлению решений, обновляем все, что можно. Если вы хорошо понимаете, что за компоненты установлены и для чего они нужны и видите, что в списке есть решения с оконченным демонстрационным режимом или неактивной поддержкой, которые точно не нужны в работе, лучше их удалить. Делайте это только если точно знаете, что это за решение и как оно взаимодействует с вашим сайтом.

  4. После вам необходимо руками исправить все возникающие ошибки в публичной части и админ-панели сайта. Как правило ошибки возникают с PHP-функциями, подключением устаревших скриптов и так далее. В помощь вот такие шпаргалки: официальная и от хороших людей.

11. Перейдите по возможности на MySQL 8. Это выходит за рамки данной инструкции, поэтому оставим в виде рекомендации. Пункт в контексте рассматриваемой темы необязательный.

12. Перейдите в «Настройки — Модули» (*ваш_домен*/bitrix/admin/module_admin.php). Удалите все неиспользуемые модули. Важно: если не знаете, что за модуль и как он влияет на ваш сайт — не трогайте.

13. Аналогично пункту 12 делаем и тут: «Настройки — Настройки продукта — Список мастеров» (*ваш_домен*/bitrix/admin/wizard_list.php). Удалите обязательно демо интернет-магазин, демо корпоративный сайт и так далее. Если вы используете решение «Аспро», не удаляйте мастер «Аспро».

14. После всех пунктов выше сделайте следующее: перейдите в папку /upload/tmp/ и удалите в ней всё. Затем выполните повторное сканирование на вирусы с помощью хостерных утилит. Его результатом должна стать отметка, что вирусов не обнаружено. Далее, если у вас стоят ограничения на исходящий трафик, почтовые подсистемы и прочее, отправьте запрос хостеру, чтобы сняли ограничения с указанием на то, что все проблемы устранены и вирусов теперь нет.

15. В финале важно убедиться, что сайт работает как нужно. Это делается за два шага:

  1. Пройдите в раздел «Настройки — Инструменты — Проверка системы» (*ваш_домен*/bitrix/admin/site_checker.php). Если обнаружатся ошибки — устраните их.

  2. После тут: «Настройки — Настройки продукта — Автокеширование» (*ваш_домен/bitrix/admin/cache.php*), на вкладке «Очистка файлов кеша», удалите все.

Затем перейдите на сайт, откройте консоль (клавишей F12) и походите по сайту. Важно пройти по всем страницам, проверить весь функционал, работу форм, фильтров, слайдеров, получение писем из форм, работу сторонних интеграций.

Если всё в порядке — значит, ваш сайт спасен, и, даже если на нем останется старая версия «Аспро», он не будет уязвим для известных вирусов.

В дальнейшем важно не забывать обслуживать сайт, так как вредоносное ПО постоянно развивается и не исключено появление новых способов заражения. Регулярно проверяйте и устанавливайте обновления, следите за безопасностью паролей и не игнорируйте сообщения хостера.

Показать полностью 5
Отличная работа, все прочитано!

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества

Недвижимость и ремонт

Теги

Популярные авторы

Сообщества