Никита Митусов Обсудить задачу
около 10 000 на витрине поставщика, счёт подрядчика

GSE Electro. Потолок 3 400

GSE Electro

Каталог поставщика на Битриксе

Поставщик дал нестабильный API без фильтра по складу. Первая боевая выгрузка упёрлась в 3 400 товаров, и работу приняли только как прототип. Довёл её до конца за пять дней.

  1. 1 000

    Тестовый домен. Мало намеренно, надо было согласовать поля.

  2. 3 399

    Первая боевая выгрузка. Я написал про 5 тысяч и ошибся. Настоящее число 3 399.

  3. из 10 000

    Руководство сравнило с витриной поставщика, там около 10 000. Принято как рабочий прототип, нужна доработка.

  4. 5 400

    «Пробил потолок». «Фух». «Но ещё рано радоваться».

  5. итог

    Перенёс на боевой. «Это всё, что я смог вытащить». Точное число осталось на скриншоте, сюда его не пишу.

Лист 2Сито22–24 июля 2025

200 000 ради нескольких тысяч

Фильтр «Москва»

Нажми рубильник.

Что выгружаем

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

1 модуль = 1 000 товаров. 200 тысяч и несколько тысяч это моя условная оценка, точного счёта не было.

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

Три дня оптимизации «разными схемами»

10 часов
1 час

Моя оценка из переписки, лога нет.

Лист 3Следующая страница28–29 июля 2025

Страница, которая не перелистывается

Каталог отдаётся порциями. За следующей надо приходить с новым scrollId. 28 июля API стало возвращать тот же самый. Попробуй сам.

Запросов
0
Страница
1
Новых товаров
0

Запрос ещё не отправлен.

Настоящая строка лога, 29 июля, значения скрытыСетевая ошибка (попытка 1): /product/scroll?hasStock=true… HTTP/1.1 503 Service Temporarily Unavailable

Потом API ожило, значит сбой был на стороне источника. Строку с 503 я прислал подрядчику, разговор с поставщиком вёл он. Он же предложил выгрузку по разделам. Я доработал выгрузку, и раздел, который почти пустовал, начал заполняться.

Лист 4Разделы24–29 июля 2025

«Совсем грустный раздел»

519

Кабеленесущие системы

1

Электрощитовое оборудование

Каталог на сайте: левое меню с новыми разделами
Настоящий экран: левое меню и каталог после подгонки под новую иерархию. Отмечены два раздела с листа выше.

22 июля вечером я предупредил: у нового поставщика своя иерархия, вывод может подвести. На следующий день так и вышло. Меню и блоки на главной были сделаны статично под старую структуру.

Ложная тревога тоже была. Подрядчик посчитал по разделам и получил 1 400. Кеш Битрикса: после сброса цифры сошлись.

Лист 5Спецификация работиюль 2025

Что сделал я и что сделали другие

УчастокСделал яДругие
ПостановкаДо старта спросил про склады: всё или один город. Ответ определил всю задачу.Подрядчик уточнил: только Москва.
ИмпортНаписал скрипт из API поставщика в инфоблок Битрикса: цены, фото, поля.API и документация поставщика.
ВыкладкаСнял бэкапы, работал на тестовом домене. На боевой перенёс только скрипт.Подрядчик поднял тариф хостинга и выдал доступы.
СайтЛевое меню, карточки на главной, подкатегории, нумерация, поля карточки.Шаблон сделала другая студия.
РасписаниеКаталог раз в 29 дней. Цены и остатки раз в день, только изменившиеся.Частоту обновления цен предложил подрядчик.
ДоработкаПробил потолок выгрузки, перенёс на боевой.Идею выгрузки по разделам предложил подрядчик, он же говорил с поставщиком.

PHP · 1С-Битрикс · API поставщика · cron

Карточка товара в каталоге на телефоне

Карточка без лишнего

Руководство просило убрать шесть полей и имя поставщика. Нажми строку, и она уйдёт из карточки.

  • ID в системе поставщикаID в системе
  • Артикул поставщикаАртикул
  • Остаток в МосквеОстаток

Цен в API две, тариф и оптовая, и они всегда совпадают: 10,29 ₽ и 10,29 ₽. Посмотрел на живом товаре.

Два ритма

Каждый день
цены и остатки, только изменившиеся
Раз в 29 дней
каталог. Именно каждые 29 дней, а не 29-го числа: на этом тоже споткнулись

Лист 6Приёмка29 июля 2025

Спасибо, что не бросил работу и решил довести её до конца. Такой подход уважаю.

Представитель заказчика. Пересказ из переписки.

24 июля я считал работу законченной. 28 июля её не приняли. 29 июля я довёл выгрузку и перенёс на боевой. Поблагодарили именно за это.

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

Нужно похожее? Интеграции с 1С и CRM: от 12 000 ₽