Albatro: интернет-магазин для рыбалки, лодок и туризма на автосинхронизации поставщиков
Как Dattel построил для Albatro витрину и CRM, где тысячи товаров из 1С и от разных поставщиков ежедневно сверяются по цене и остаткам — и у каждого поставщика своя формула наценки

У Albatro — каталог почти в 10 000 товаров, собранный из разных источников: часть ведётся через 1С, часть закупается у внешних поставщиков со своими прайсами и форматами отчётов. Вручную держать цены и остатки в актуальном состоянии по всем источникам одновременно — и при этом не терять свою маржу у каждого поставщика — нереально.
- Каталог: лодки, моторы, палатки, удилища, одежда, снаряжение для туризма — у каждой товарной группы свои поставщики
- У каждого поставщика свой формат данных: CSV-отчёт по токену, выгрузка остатков и цен, собственная нумерация артикулов
- Закупочная цена поставщика — не розничная: нужна наценка, и она не обязана быть одинаковой у всех поставщиков
- Остатки у поставщика меняются быстрее, чем их можно свести руками — нельзя продолжать продавать то, чего у поставщика уже нет
- Часть каталога ведётся из 1С, часть — от поставщиков напрямую: один и тот же товар нельзя завести дважды
Dattel построил для Albatro витрину на Next.js и CRM на собственном бэкенде (NestJS, Clean Architecture), которая каждые сутки обходит источники данных — 1С и каждого поставщика по отдельности, — сверяет товары по артикулу и пересчитывает розничную цену по правилу, заданному конкретно для этого источника, без участия человека.
Витрина Albatro — отдельное Next.js-приложение (MobX-сторы для корзины, избранного и выбора города, NextAuth с входом по email и по телефону) поверх собственного бэкенда на NestJS, построенного по Clean Architecture: доменный слой, репозитории, use-case-слой, 193 миграции базы данных на момент технического аудита. Цены и сроки доставки по товару считаются индивидуально под выбранный пользователем город.
Каталог собирается из нескольких источников одновременно. Часть товаров ведётся через 1С — на момент аудита это 6 271 позиция, каждая с собственным статусом привязки к карточке на сайте: менеджер в CRM сразу видит, что ещё не сопоставлено автоматически. Часть товаров поступает напрямую от поставщиков и сопоставляется по их собственному артикулу (vendor_code), а не по внутреннему ID Albatro.
Для каждого поставщика, с которым идёт автоматическая синхронизация, — отдельный фоновый сценарий на BullMQ. Раз в сутки он забирает CSV-отчёт поставщика по токену, построчно сопоставляет его с товарами на сайте по артикулу и обновляет цену и статус «в наличии». Количество на складе в карточке не трогается напрямую — оно всегда 0, видимость товара управляется отдельным статусом, а доставка идёт под заказ у поставщика.
Розничная цена не копирует закупочную — система пересчитывает её по правилу, которое задано отдельно для каждого поставщика: сейчас это наценка +40% с округлением вверх до ближайшего десятка, но у каждого поставщика расчёт вынесен в собственную функцию и может отличаться, когда это понадобится. Отдельная деталь: отчёты по остаткам и ценам поставщиков Albatro получает через API, который Dattel уже эксплуатирует для своей дропшиппинг-платформы mp.dattel.ru — инфраструктура, один раз построенная для одного продукта, пригодилась и для другого.
Для менеджеров — отдельная админка на Next.js: разделы «Товары», «Товары из 1С», «Товарные фиды», «Категории», «Бренды», «Договоры» и другие. В ней видно, какие товары ещё не привязаны к карточке на сайте, можно вручную поправить то, что автоматика не разобрала сама, и выгрузить фиды для внешних площадок — по категориям и по поставщику.
Семь звеньев одной цепи.
Источники данных: 1С и поставщики
Часть каталога ведётся через 1С, часть — напрямую от поставщиков. В CRM у каждого товара из 1С виден статус привязки к карточке на сайте: менеджер сразу видит, что система сопоставила сама, а что нужно проверить руками.
- 6 271 товар на момент аудита подтягивается из 1С, с ценами, остатком и статусом привязки по каждому
- Сопоставление — по штрихкоду и названию для 1С, по собственному артикулу поставщика (vendor_code) — для прямых поставок
- Не привязанные автоматически товары остаются видны в отдельном списке, а не теряются

Ежедневная синхронизация поставщиков
Для каждого поставщика, подключённого к автосинхронизации, — отдельный фоновый сценарий: раз в сутки система забирает его отчёт по остаткам и ценам и обновляет товары на сайте по артикулу.
- Сейчас подключены два поставщика с полной автосинхронизацией — Тонар и Кондор
- Расписание — через BullMQ, раз в 24 часа на каждого поставщика, можно запустить и вручную
- Остаток в карточке всегда 0 (доставка под заказ), видимость товара переключается отдельным статусом «в наличии у поставщика»

Наценка — своя формула на каждого поставщика
Закупочная цена поставщика не идёт в розницу напрямую. Система пересчитывает её по правилу, заданному конкретно для этого поставщика, и округляет до ровной цифры — покупатель видит уже готовую цену.
- Сейчас оба подключённых поставщика пересчитываются по формуле +40% с округлением вверх до ближайшего десятка
- Формула вынесена в отдельную функцию на каждого поставщика — задать другой процент конкретному поставщику не требует переписывать общую логику
- Отчёты поставщиков Albatro получает через API, которое Dattel уже использует в своей дропшиппинг-платформе mp.dattel.ru

Витрина для покупателя
Все источники — 1С и поставщики — сходятся в единой витрине на Next.js. Покупатель видит один каталог, один чекаут и даты доставки под свой город — какой бы товар за этим ни стоял.
- MobX-сторы для корзины, избранного и выбранного города — гидратируются из серверных данных при заходе
- NextAuth с входом по email или по номеру телефона
- Сроки и стоимость доставки считаются по каждому товару индивидуально, под выбранный город

“Albatro держит каталог почти в 10 000 товаров из разных источников — 1С и нескольких поставщиков — без того, чтобы кто-то каждый день сверял цены и остатки руками. Система сама обходит источники, пересчитывает розничную цену по правилу конкретного поставщика и обновляет витрину; менеджеру остаётся разобрать только то, что автоматика не смогла сопоставить сама.”
Изучим вашу задачу — и придём с ответом.
Оставьте контакты — договоримся о встрече. Разберёмся в задаче, найдём узкие места и вернёмся с ТЗ и оценкой каждой фазы: что делаем, сколько времени и денег.
Договор подпишете, только когда точно поймёте, за что платите. Позвоним в течение часа (9:00–18:00 МСК).