Перенос каталога из 1С: где рвётся выгрузка
Два каталога и семь мест, где ломается обмен: 9 200 позиций за четыре недели и 2 100 позиций за семь вместо двух. Разбор просрочки и порядок приёмки.
Обмен с 1С — самая недооценённая часть сметы. В предварительной оценке на него закладывают 40 часов, по факту уходит 120. На заводе гофроупаковки мы поставили в смету на выгрузку две недели, а потратили семь, и весь проект сдали за 17 недель вместо 12. Пять недель просрочки — наша ошибка в оценке, а не задержка клиента: мы оценили этап по структуре справочника, не посмотрев в данные. Дальше разбираем на двух каталогах, где именно рвётся выгрузка и как мы теперь принимаем эту работу.
Что приходит из 1С на самом деле
Ожидание: аккуратный файл со структурой групп, характеристиками и остатками. Реальность зависит от того, зачем эту базу заполняли последние десять лет. Плохих вариантов два, и второй хуже.
Учёт вели под склад, а не под витрину
Первый выгруженный файл каталога электротехники: 9 200 номенклатурных позиций, из них 610 — дубли одного товара с разной единицей измерения, 340 без единой характеристики и 1 900 с наименованием в формате внутреннего учёта, вида «Каб.ВВГнг-LS 3х2,5 ГОСТ (бухт.)».
Это не вина клиента. 1С заполнялась под бухгалтерию и склад, а не под витрину: кладовщику хватает строки «Каб.ВВГнг-LS», а покупателю нужен фильтр по сечению. Поэтому первый этап работ — не код, а решение, кто и по каким правилам приводит номенклатуру в порядок. Если этого решения нет, разработка встаёт на месяц.
Поле в справочнике есть, данных в нём нет
Второй вариант выглядит безобидно и потому опаснее. На гофрозаводе в справочнике номенклатуры были заведены поля под марку и профиль картона. Мы посмотрели структуру, увидели поля и посчитали задачу понятной. На третьей неделе работ выяснилось, что заполнены они у 380 позиций из 2 100, а у остальных марка написана текстом в комментарии — вперемешку с нормой расхода, фамилией технолога и пометками про клише.
Структура справочника не говорит о данных ничего. Поле под характеристику означает только то, что кто-то однажды его завёл.
Семь мест, где рвётся обмен
- Единицы измерения. Один товар в метрах и в бухтах создаёт две карточки с разной ценой и убивает фильтр по цене.
- Характеристики в одном текстовом поле. Сечение, материал и ГОСТ склеены в наименование, и фильтр по сечению собрать не из чего.
- Изображения. В 1С их нет либо они лежат в отдельной папке с именами по внутреннему коду, который не совпадает с артикулом.
- Цены по типам. Розница, опт, дилер — на сайт должна попасть одна, а приходят все, и без правила выбора витрина показывает дилерскую.
- Остатки по складам. Восемь складов, из которых на сайте показываются два, и правило суммирования нигде не записано.
- Удалённые позиции. Товар помечен на удаление в 1С, но продолжает приходить в выгрузке и остаётся в индексе поисковика ещё месяц.
- Время обмена. Полная выгрузка на 9 200 позиций занимает 26 минут и в это время нагружает сервер; если она стоит в расписании на дневное время, сайт заметно тормозит.
Шесть пунктов из семи чинятся кодом за предсказуемое время. Первые два — нет: пока не решено, кто размечает номенклатуру и по каким правилам, оценивать нечего. Именно на них разъезжаются сроки.
Два каталога: семь недель и четыре
Оба проекта — каталоги с обменом, оба делала одна команда. Разница в том, что на одном мы посмотрели данные до сметы, а на другом после.
| Проект | Позиций в 1С | Выгрузка в смете | Выгрузка по факту | Сдвиг проекта |
|---|---|---|---|---|
| Завод гофроупаковки, 2024 | 2 100 | 2 нед | 7 нед | +5 нед |
| Каталог электротехники, 2025 | 9 200 | 4 нед | 4 нед | 0 |
Сдвиг считаем по сроку всего проекта: 12 недель по плану и 17 фактически против 16 и 16. Позиций в 1С у второго проекта вчетверо больше — объём тут ни при чём.
Гофрозавод: семь недель вместо двух
Разметить 2 100 позиций руками нереально, поэтому мы написали парсер комментариев. Он разобрал 1 600 записей автоматически, остальные 240 технолог размечал вместе с нашим аналитиком — четыре дня по три часа. Плюс неделя ушла на проверку, и она была обязательной: калькулятор считает цену тиража по марке картона, и ошибка на 5% в марке даёт ошибку на 12% в стоимости тиража. Расхождение в марке — это не косметика, это счёт клиенту.
Итого семь недель вместо двух и пять недель сдвига по всему проекту. Клиент узнал об этом на третьей неделе, в тот же день, когда узнали мы, — вместе с новым планом и предложением сдать калькулятор отдельным релизом, раньше личного кабинета. Так и сделали: считать на сайте начали за месяц до формальной сдачи. Просрочку это не отменяет — она стоит красной метрикой в списке наших работ и останется там.
Каталог электротехники: четыре недели из шестнадцати
На каталоге электротехники обмен занял четыре недели из шестнадцати по плану — не потому что задача была проще, а потому что структуру проверили заранее. 9 200 позиций свели к 12 полям характеристик, по которым выбирают в этой нише: номинал, число полюсов, кривая отключения. Треть значений пришлось нормализовать — «16А», «16 А» и «16 ампер» лежали в одном поле как три разные строки.
Обмен разделили по частоте: остатки и цены по договору каждые 15 минут, номенклатура раз в сутки. И сделали его односторонним — сайт не пишет в 1С ничего, кроме заказа. Сбой на сайте не может испортить учёт, и это снимает главное возражение бухгалтерии, которая обмена боится больше всех.
Как мы это чиним
Между 1С и сайтом всегда ставится промежуточный слой — служба обмена со своей базой соответствий. Она принимает выгрузку, сверяет её с предыдущей, пишет отчёт о расхождениях и только потом обновляет витрину. Прямая запись из 1С в базу сайта не делается никогда: любая ошибка на стороне учёта немедленно оказывается у покупателя.
Правила приведения номенклатуры выносятся в справочник, который редактирует контент-менеджер клиента без нас. Первичная разметка 9 200 позиций заняла у клиента шесть рабочих дней, дальше — только новые товары. Это принципиальный момент: правила разметки знает клиент, а не мы, и держать их в коде значит звать разработчика на каждую новую группу товаров.
Остатки и цены обновляются отдельным быстрым обменом раз в 15 минут, полная выгрузка со структурой — ночью. Разделение снимает и нагрузку, и половину конфликтов. Заодно оно убирает синхронный запрос к 1С из отрисовки страницы: цена и остаток приходят из кэша, который обновляется в фоне. На скорости каталога это видно сильнее, чем любая работа с картинками, — мы разбирали это в замерах Core Web Vitals.
Порядок приёмки
Обмен не считается сданным, пока не пройдены пять проверок.
- Расхождение по числу активных позиций между 1С и сайтом — не больше нуля. Считается полное число, а не выборка.
- Число позиций с заполненными характеристиками на сайте совпадает с числом из 1С. Это отдельная проверка, и появилась она дорого.
- Цена и остаток на десяти случайных товарах совпадают с учётной системой в момент проверки.
- Товар, помеченный на удаление, исчезает с витрины за один цикл обмена и отдаёт корректный код ответа.
- Полная выгрузка проходит на боевом сервере без деградации времени ответа больше чем на 15%.
Откуда взялся второй пункт
Через полтора месяца после запуска каталога электротехники клиент сказал, что менеджеры снова считают заказы в Excel. В логах поиска нашлось 1 400 позиций, которые не находились по характеристикам вообще. Причина была в нашей же нормализации: «16А» и «16 А» мы свели к числу 16, а позиции с дробным номиналом — «6,3 А» — парсер отбрасывал молча, без ошибки, и позиция уходила в индекс без номинала.
Первые дни мы искали проблему в поисковом движке, а она была на шаг раньше, в выгрузке. Исправление заняло пять дней, ещё два ушло на переиндексацию каталога. На приёмке мы смотрели выборку из двадцати позиций, и выборка была в полном порядке — 1 400 промахов в неё просто не попали.
Отсюда два правила. Любой парсер данных клиента обязан падать с ошибкой на непонятном значении, а не пропускать его: молчаливый пропуск превращается в пустое поле, а пустое поле — в позицию, которой нет в поиске. И на приёмке сверяется полное число позиций с заполненными характеристиками, а не выборка. Полный разбор этой истории — в кейсе каталога.
Сколько это занимает и что теперь стоит в смете
На каталоге электротехники обмен обошёлся в 118 часов разработки, шесть рабочих дней на стороне клиента и четыре недели календарно с учётом ожидания правок в 1С.
Аудит выгрузки стоит два дня. После гофрозавода он стоит в смете отдельной строкой, и мы не даём её вычёркивать: два дня дешевле пяти недель просрочки в любом пересчёте. Этап интеграции с учётной системой больше нельзя оценить по структуре справочника — только по данным. Берём минимум 200 случайных записей реальной выгрузки и смотрим, сколько характеристик заполнено, где они лежат, сколько позиций без цены и без картинки. Срок подписывается после этого, а не до. Тем же разбором номенклатуры начинается любой наш проект магазина и каталога — раньше дизайна и раньше вёрстки.
И последнее. Пять недель просрочки остались метрикой на странице проекта, в отзыве клиента и в этом тексте. Убрать их — значит через год снова поставить в смету две недели на выгрузку, о которой ничего не известно.