Цены конкурентов: мониторинг рынка, прайсы поставщиков, сопоставление товаров
Контрагент в AIERP — это запись в едином справочнике с одной из трёх ролей: поставщик, производитель или конкурент. У каждого — иерархия (главный филиал и подразделения), ответственный менеджер, сайт, настройки приёма прайса (формат файла, нужная колонка, день обновления) и набор флагов (работает по РРЦ, активен, публичен). Для каждого контрагента можно настроить одну или несколько «настроек прайса» — правил, какие именно товары и по каким ценам подтягивать. Настройки складываются в дерево папок, поддерживают гибкий отбор товаров с возможностью задать индивидуальные цены прямо в условиях отбора, период действия и резервные цены. При обработке настройки система обновляет таблицу цен и остатков у контрагента (для каждого товара по магазинам) и автоматически отправляет наши товары в очередь пересчёта — наши цены сами догонят новую рыночную ситуацию. Сопоставление каталога контрагента с нашим — отдельный инструмент: запускается анализ, система предлагает спорные пары с оценкой уверенности, пользователь применяет принятые сопоставления. Импорт прайсов в формате XML ведёт подробный журнал — видно каждое обращение к источнику, его статус и ошибки.
Что получает бизнес от модуля
Конкурент — обычный контрагент
Конкурент в системе — это тот же контрагент, что поставщик и производитель, только с другой ролью в выпадающем списке. Один справочник, одна иерархия, один поиск, единые фильтры и аналитика, единые права доступа. Если конкурент решит стать дистрибьютором — меняется один пункт в карточке, данные никуда не переезжают.
Настройки прайсов в дереве папок
Каждый контрагент может иметь несколько настроек прайсов — например, одна для холодильников, другая для стиральных машин. Все настройки складываются в дерево папок любой глубины: «Маркетплейсы», «Дистрибьюторы», «Локальные конкуренты». В карточке настройки — название, контрагент, магазин, условия отбора товаров, период действия, резервные цены и остатки, флаг активности. Перетаскиванием меняется порядок и принадлежность к папкам.
Индивидуальные цены в условиях отбора
Условия отбора в настройке прайса — это строки с фильтрами по категории, типу товара, производителю и тегам. Каждая такая строка может содержать свои цены, остатки и РРЦ. Это позволяет одной настройкой покрыть несколько категорий с разными ценами — не нужно плодить пять-десять отдельных настроек. Если в строке цены не указаны — берётся резервное значение из общей карточки настройки.
Обновление цен у контрагентов
При обработке настройки система проходит по отобранным товарам и для каждого создаёт или обновляет запись в таблице цен и остатков у контрагента. Уникальный ключ — тройка «контрагент × магазин × товар». Запись содержит код товара у контрагента, текущую цену с точностью до копеек, РРЦ, остаток на складе и срок доставки. Это стандартизованный срез «что сейчас у них», готовый для аналитики и для использования в наших правилах ценообразования.
Автоматический пересчёт наших цен
После обновления цен у контрагента все затронутые товары автоматически отправляются в очередь пересчёта. Наши правила ценообразования — с учётом РРЦ или с формулой от цен конкурентов — пересчитают наши собственные цены. Цепочка «обновился прайс конкурента — пересчиталась наша цена» работает без участия пользователя, фоном, и доходит до сайта за минуты.
Сопоставление каталогов
У контрагента «холодильник Bosch KGN39VW17R», а у нас — «Холодильник Bosch KGN39 двухкамерный». Это один и тот же товар, но компьютер сам не догадается. Кнопка «Запустить анализ» сравнивает их каталог с нашим по штрихкоду, артикулу, наименованию и бренду. Видно прогресс анализа, видно список спорных пар с оценкой уверенности. Принятые пары применяются одной кнопкой, система запоминает решение и не предлагает его повторно.
Импорт XML-прайсов с журналом
Многие контрагенты отдают прайс в виде XML-фида по веб-адресу. Система сама скачивает его по расписанию, парсит, обновляет данные. Журнал обработки фиксирует каждое обращение: время, статус, размер ответа, ошибки. Если фид перестал отдаваться или поменялся формат — узнаём об этом в течение часа через журнал, а не через две недели по жалобам менеджеров на устаревшие цены.
День обновления и актуальность
В карточке контрагента задаётся день недели или месяца, когда обновляется его прайс, формат файла (Excel, CSV, XML, обращение к API) и название колонки с ценой — у разных контрагентов колонки называются по-разному. Видна дата последней актуализации — если она устарела, система подсветит «прайс не обновлялся больше двух недель, проверьте источник».
Массовые действия и копирование
Можно создать сразу пачку настроек, удалить или перенести пачку в другую папку, скопировать существующую настройку. Одной командой «Обработать все» запускается обновление всех активных настроек сразу — удобно после загрузки новых прайсов. Точечная обработка одной настройки тоже доступна. Превью показывает, какие товары попадут под настройку до её сохранения. Статистика собирает счётчики обработок и покрытия товаров.
Что входит в Рынок
- 01
Карточка контрагента — всё в одном месте
В карточке хранятся название и сокращённое название, код, папка, порядок, родительский контрагент (для филиалов), роль (поставщик, производитель или конкурент), привязка к юрлицу, ответственный менеджер, контактное лицо с телефоном и почтой, сайт, описание для внутренних служб и описание для покупателей, дата последней актуализации, день обновления и формат прайса, восемь флагов настроек (ЭДО, контроль документов, публичность, рассылка, дистрибуция, отсрочка, работа по РРЦ, активность). Удаление мягкое — карточку можно восстановить.
- 02
Три роли в одном справочнике
У контрагента может быть одна из трёх ролей: поставщик (у него закупаем товары), производитель (он диктует РРЦ), конкурент (у него мониторим цены, но не закупаем). Один справочник — единые поиск, фильтры и права. Если конкурент решит стать дистрибьютором — меняется только роль в карточке, остальные данные остаются на месте.
- 03
Настройка прайса контрагента
В карточке настройки задаются название, папка хранения, порядок, контрагент, магазин (можно сделать настройку только для одного склада или общей для всех), условия отбора товаров, резервная цена с точностью до копеек, резервный остаток, резервная РРЦ, флаг активности и период действия с указанием начальной и конечной даты. Один контрагент может иметь несколько настроек — для разных категорий или каналов продаж.
- 04
Условия отбора с индивидуальными ценами
Условия отбора — это набор строк с фильтрами по категории, типу товара, производителю и тегам. Строки складываются логически — «и то, и другое» или «то или другое». Это даёт «настройку на категорию», «настройку на бренд» или «настройку на список товаров». Дополнительно у каждой строки может быть своя цена, остаток и РРЦ — тогда они применяются именно к товарам этой строки. Если в строке цен нет, используется резервное значение из общей карточки настройки.
- 05
Таблица цен и остатков у контрагентов
Главная выходная таблица модуля. По каждой тройке «контрагент — магазин — товар» хранятся: код товара у этого контрагента, текущая цена с точностью до копеек, РРЦ с точностью до копеек, остаток на складе, срок доставки в днях, срок производства. Уникальный ключ — эта же тройка, поэтому повторная обработка прайса не плодит дубликаты, а аккуратно обновляет существующие строки. Удаление мягкое — можно восстановить и поднять историю.
- 06
Алгоритм обработки прайса
Когда настройка запускается на обработку, система проверяет: есть ли в условиях отбора строки с индивидуальными ценами. Если есть — обрабатывает построчно, у каждой строки свои цены. Если нет — обрабатывает пачкой с резервными ценами из общей карточки. Для каждого подходящего товара создаётся или обновляется строка в таблице цен и остатков у контрагентов. В конце все затронутые товары одной операцией отправляются в очередь пересчёта — наши цены пересчитаются автоматически.
- 07
Построчная обработка с индивидуальными ценами
Если хоть одна строка условий отбора содержит свои цены — обработка идёт построчно. Для каждой строки берутся её собственные цена, остаток и РРЦ. Если в строке какое-то поле не задано — подтягивается резервное значение из общей карточки настройки. Затем по условиям строки отбираются товары и для каждого создаётся или обновляется запись в таблице цен у контрагента. Это позволяет одной настройкой охватить разные категории с разными ценами.
- 08
Обработать все активные одной командой
Команда «Обработать все» проходит по всем активным настройкам прайсов и запускает обработку каждой. По окончании выводится сводка: сколько настроек обработано, сколько товаров обновлено, какие были ошибки. Команда запускается из расписания (например, каждое утро), вызывается автоматически при обновлении XML-фида или нажимается вручную, когда нужно немедленно подтянуть свежие цены.
- 09
Фоновые обработчики
Вся тяжёлая работа уходит в фон. Общий обработчик запускает обработку всех настроек по расписанию — например, каждое утро. Точечный обработчик стартует, когда пользователь меняет одну настройку. Отдельный обработчик проверяет, не попал ли изменённый товар под существующие настройки прайсов — это срабатывает, когда меняется карточка товара. Пользователь не видит технических деталей — просто видит, что данные актуальны.
- 10
Сопоставление каталогов: четыре шага
Запуск анализа — система сравнивает их каталог с нашим по штрихкоду, артикулу, наименованию и бренду. Просмотр статуса — видно текущий прогресс и общую готовность. Список предложений — постранично показываются спорные пары «наш товар + код у контрагента» с оценкой уверенности, сортировка по уверенности. Применение — выбранные пары сохраняются в системе, система запоминает решение и не предлагает его повторно.
- 11
Перенос сопоставлений между контрагентами
Когда добавляется новый «зеркальный» контрагент — например, региональный дистрибьютор того же производителя, что уже размечен — нет смысла прогонять анализ заново. Превью показывает, какие сопоставления подойдут для нового контрагента (по совпадающим кодам и штрихкодам), кнопка «Перенести» применяет их одной командой. Семьдесят-девяносто процентов сопоставлений переносятся за минуты вместо недель.
- 12
Журнал обработки прайсов
Каждое обращение к источнику прайса (XML-фид по веб-адресу, API контрагента, скачивание Excel) пишется в журнал: контрагент, адрес источника, время, статус, размер ответа, текст ошибки. Это материал для диагностики «почему сегодня не подтянулись цены» и для контроля лимитов обращений к публичным источникам.
- 13
Работа по РРЦ
В карточке контрагента есть флаг «работает по РРЦ» — обычно ставится производителям. Если он включён, цены этого контрагента считаются рекомендованными розничными. Правила ценообразования с переключателем «учитывать РРЦ» берут базу именно из таких контрагентов. Это даёт прямую связь «РРЦ производителя — наша цена не дороже» и защищает от потери дилерского статуса.
- 14
Главные и подчинённые контрагенты
Контрагенты можно вкладывать друг в друга — у крупного дистрибьютора с филиалами в десяти городах главный контрагент и десять подчинённых. У каждого филиала свой склад, контакты, прайс. Кнопка «Сделать главным» помечает одно из подразделений как основное — по умолчанию работаем с ним, специально указанием — с конкретным филиалом. Без этой иерархии справочник у крупных поставщиков превращается в кашу.
- 15
Папки и порядок: для контрагентов и для прайсов
В системе две независимые иерархии папок: одна для контрагентов (где он лежит организационно — «Маркетплейсы», «Дистрибьюторы», «Локальные конкуренты»), другая для настроек прайсов (по бизнес-логике обновления — «Ежедневные», «Еженедельные», «По событию»). Порядок и принадлежность к папкам меняются перетаскиванием. Можно выбрать пачку контрагентов и перенести их в другую папку одной командой.
- 16
Богатый набор операций
Стандартные: создание, открытие, изменение, удаление, перетаскивание для смены порядка. Дополнительные: превью настройки до сохранения, копирование, точечная обработка, обработка всех активных, статистика. Массовые: создание пачки, удаление пачки, перенос пачки в другую папку, перенос контрагентов в папку. По контрагентам — переключение главного филиала, категорийные параметры. По товарам контрагента — отдельный набор: добавление, превью пачки, перенос сопоставлений, четыре шага сопоставления каталогов.
- 17
Права доступа
Доступ разделён на два блока — «Настройки прайсов контрагентов» и «Цены и остатки у контрагентов». В каждом по четыре права: создавать, изменять, видеть, удалять. Менеджеры закупа обычно получают только просмотр в обоих блоках — чтобы видеть актуальные цены поставщиков. Аналитики ценообразования получают права на изменение настроек прайсов. Управление самими контрагентами — отдельный блок прав.
- 18
Самообновляющаяся система
После любой правки настройки прайса система сама запускает её обработку и подтягивает свежие цены — пользователю не нужно вручную нажимать «Обработать». То же самое при изменении карточки товара — система проверяет, не попадает ли товар под существующие настройки, и обновляет данные. Кэш сбрасывается автоматически, расчёты идут фоном. На выходе — всегда актуальные цены без ручных операций.
- 19
Безопасное обновление цен
Каждая запись в таблице цен у контрагентов уникальна по тройке «контрагент — магазин — товар». Если запись уже есть — обновляются цена, остаток и РРЦ. Если нет — создаётся новая. Это значит, что обработку прайса можно запускать сколько угодно раз — дубликатов не появится, данные просто аккуратно перезапишутся свежими. Удаление мягкое — случайно стёртую запись можно восстановить.
Как это выглядит в системе
Частые вопросы
Где хранится «конкурент»?
В общем справочнике контрагентов — там же, где поставщики и производители. У каждого контрагента есть роль: поставщик (у него закупаем), производитель (диктует РРЦ), конкурент (мониторим цены). Конкурент — это просто контрагент с такой ролью. Один справочник, единые поиск, фильтры, права доступа. Если конкурент решит стать дистрибьютором — меняется только роль, остальные данные на месте.
Что такое настройка прайса?
Это правило подтягивания цен от конкретного контрагента. В карточке настройки: название, папка хранения, контрагент, магазин (можно сделать настройку для конкретного склада или общей для всех), условия отбора товаров, резервная цена, остаток и РРЦ, флаг активности, период действия. Один контрагент может иметь несколько настроек — например, отдельные для холодильников и для стиральных машин, с разными резервными ценами.
Что такое таблица цен и остатков у контрагентов?
Главная выходная таблица модуля. По каждой тройке «контрагент — магазин — наш товар» хранятся: код товара у этого контрагента, текущая цена с точностью до копеек, РРЦ, остаток на складе, срок доставки и срок производства. Это стандартизованный срез «что сейчас у них» — готов для аналитики, для использования в наших правилах ценообразования, для построения графиков и отчётов.
Как работает обработка настройки?
Когда настройка запускается на обработку, система проверяет: есть ли в условиях отбора строки с индивидуальными ценами. Если есть — обрабатывает построчно, у каждой строки свои цены. Если нет — обрабатывает пачкой с резервными ценами. Для каждого подходящего товара создаётся или обновляется запись в таблице цен у контрагентов. В конце все затронутые товары одной операцией отправляются в очередь пересчёта — наши цены пересчитаются автоматически.
Что такое индивидуальные цены в условиях отбора?
У каждой строки условий отбора может быть своя цена, остаток и РРЦ. Это нужно, когда одна настройка покрывает несколько категорий с разными ценами: например, первая строка — категория «Холодильники» с ценой 100 000 ₽, вторая строка — категория «Стиральные машины» с ценой 50 000 ₽. Не нужно плодить пять-десять отдельных настроек ради разных цен — всё компактно в одной. Если в строке цены не задали, подставляется резервное значение из общей карточки.
Как происходит сопоставление товаров?
Запускается анализ — система сравнивает каталог контрагента с нашим по штрихкоду, артикулу, наименованию и бренду. Видно прогресс анализа. По завершении открывается список спорных пар «наш товар — код у контрагента» с оценкой уверенности, отсортированный по убыванию уверенности. Пользователь принимает или отклоняет пары, нажимает «Применить» — связь сохраняется. Система запоминает решения и не предлагает их повторно.
Как переносить сопоставления от одного контрагента к другому?
Превью переноса показывает, какие сопоставления подойдут для нового контрагента — по совпадающим кодам товаров и штрихкодам. Кнопка «Перенести» применяет их одной командой. Это критично при добавлении нового «зеркального» контрагента — например, регионального дистрибьютора того же производителя, что уже размечен. Не нужно прогонять анализ заново — семьдесят-девяносто процентов сопоставлений переносятся за минуты.
Как наши цены пересчитываются от цен конкурентов?
Цепочка простая: обработали прайс контрагента — обновилась таблица цен у контрагентов; затронутые товары попали в очередь пересчёта; фоновая обработка прошла по каждому товару и запустила наши правила ценообразования; правило с переключателем «учитывать РРЦ» или с формулой от цен контрагентов посчитало новую нашу цену; результат сохранён в таблице цен по товарам и магазинам. Всё автоматически, без участия пользователя.
Что такое флаг «работает по РРЦ»?
Переключатель в карточке контрагента — обычно ставится производителям. Если он включён, цены этого контрагента в системе считаются рекомендованными розничными. Правила ценообразования с переключателем «учитывать РРЦ» берут базу именно из таких контрагентов — это гарантирует, что наша цена не уходит ниже рекомендованной, и защищает от потери дилерского статуса.
Что такое день обновления прайса?
В карточке контрагента указывается день, в который он обычно публикует обновлённый прайс — день недели (с 1 по 7) или день месяца (с 1 по 31), в зависимости от соглашения. Расписание системы каждый день проверяет, у кого из контрагентов сегодня день обновления, и автоматически запускает для них обработку прайса. Если день не указан — обработка идёт по общему расписанию.
Что такое формат прайса и колонка с ценой?
Если контрагент отдаёт прайс файлом, в карточке указывается формат (Excel, CSV, XML, или работа через API) и название колонки, в которой лежит цена — у разных контрагентов колонки называются по-разному: «Цена», «Цена опт», «РРЦ», «Дилерская цена». Это позволяет настроить импорт один раз, не разбирая каждый файл вручную: парсер сам берёт нужную колонку.
Что в журнале обработки прайсов?
Каждое обращение к источнику прайса фиксируется: контрагент, адрес источника, время обращения, статус (успех или код ошибки), размер ответа, текст ошибки. Используется для диагностики «почему сегодня не подтянулись цены» — открываем журнал, видим статус и причину. Например, «404 — страница не найдена» означает, что контрагент сменил адрес фида, нужно обновить настройку.
Какие есть фоновые обработчики?
Три. Общий обработчик проходит по всем активным настройкам прайсов и обрабатывает каждую — запускается из расписания, например, каждое утро. Точечный обработчик стартует, когда пользователь меняет одну настройку. Отдельный обработчик проверяет, не попал ли изменённый товар под существующие настройки — это срабатывает, когда меняется карточка товара. Все три работают фоном и не блокируют пользователей.
Можно ли посмотреть превью?
Да. До сохранения настройки можно увидеть превью: сколько товаров попадёт под эту настройку и какие цены и остатки они получат. Это «тест перед сохранением» — особенно важно для крупных настроек с индивидуальными ценами в строках отбора, где ошибка в условиях может затронуть сотни товаров. Превью даёт спокойную проверку без последствий.
Как работают массовые операции?
Можно создать сразу пачку настроек, удалить пачку, перенести пачку в другую папку. Команда «Обработать все» запускает обновление всех активных настроек сразу. Любую настройку можно скопировать в другую папку или привязать к другому контрагенту — это удобно при добавлении нового «зеркального» контрагента: копируем структуру настроек и привязываем к нему вместо ручного создания каждой настройки заново.
Где смотреть статистику?
В разделе настроек прайсов есть страница со статистикой — счётчики обработок, покрытие товаров, общий объём таблицы цен у контрагентов. По сопоставлению каталогов виден прогресс анализа. По очереди пересчёта — её текущее состояние. Всё это сводится в обзорной панели «Закупки», где руководитель видит ключевые цифры по работе с поставщиками и конкурентами одной страницей.
Какие иерархии в системе?
Две независимые. Первая — папки контрагентов (где контрагент лежит организационно: «Маркетплейсы», «Дистрибьюторы», «Локальные конкуренты»). Вторая — папки настроек прайсов (по бизнес-логике обновления: «Ежедневные», «Еженедельные», «По событию»). Один контрагент может иметь настройки в разных папках прайсов. Порядок и принадлежность к папкам в обоих случаях меняется перетаскиванием.
Что такое «сделать главным»?
Операция в карточке контрагента — пометить его как главный среди филиалов одного юрлица. Используется для крупных дистрибьюторов: у них один головной офис и десять филиалов. Каждый филиал — отдельный контрагент со своим складом и контактами, но по умолчанию работаем с главным. Признак главенства используется в фильтрах и подстановках, чтобы выбор контрагента по умолчанию был осмысленным.
Сколько типов источников цен?
По ролям контрагента — три (поставщик, производитель, конкурент). По форматам приёма — много: XML-фид по веб-адресу, файл Excel, CSV, прямое подключение к API контрагента. По типу канала — маркетплейсы (Wildberries, Ozon, Я.Маркет — каждый отдельный контрагент с ролью «конкурент»), сайты конкурентов (адрес и парсер), агрегаторы цен. Настройка прайса описывает, откуда именно подтягивать цены и что с ними делать.
Удаляются ли данные физически?
Нет. Настройки прайсов, записи в таблице цен у контрагентов, карточки контрагентов — всё удаляется мягко. Удалённое скрывается из списков, но физически остаётся в базе данных. Это критично для аудита и спорных ситуаций: «была ли у нас цена этого конкурента на товар X в день Y» — поднимается из истории даже спустя годы.
Какие права доступа?
Доступ разделён на два независимых блока — «Настройки прайсов контрагентов» и «Цены и остатки у контрагентов». В каждом по четыре права: создавать, изменять, видеть, удалять. Менеджеры закупа обычно получают только просмотр в обоих блоках — чтобы видеть актуальные цены поставщиков. Аналитикам ценообразования добавляются права на создание и изменение настроек прайсов. Управление самими контрагентами — отдельный блок прав.
Как обновление прайса попадает в нашу цену?
Цепочка автоматическая. Расписание запускает скачивание прайса с веб-адреса контрагента. Парсер обрабатывает файл, пишет в журнал результаты обращения и обновляет данные в системе. Дальше запускается обработка настройки прайса — обновляется таблица цен у контрагентов. Затронутые товары попадают в очередь пересчёта. Наши правила ценообразования считают новые цены и сохраняют их по магазинам. «Обзорная» розничная цена в карточке товара тоже обновляется автоматически — и попадает на сайт.
Что если контрагент — это маркетплейс?
Создаётся отдельный контрагент с ролью «конкурент» и адресом маркетплейса (Wildberries, Ozon, Я.Маркет — каждый отдельной карточкой). Настройка прайса для него подключается к публичному API или парсеру страниц. После обработки в таблице цен у контрагентов появляются актуальные цены маркетплейса по нашему товару. Наши правила ценообразования могут реагировать на эти данные — например, «всегда быть на 1% дешевле минимума среди маркетплейсов».
Что меняется на реальной сети
- Было
- Менеджеры вручную мониторили М.Видео, DNS, Ситилинк раз в неделю. На 8 000 SKU это занимало 2 дня по одному конкуренту. К моменту окончания цикла данные устаревали. На сайте была своя цена, у конкурентов — другая, по выходным мы оказывались в минусе по позиции.
- Сделали
- Завели четырёх контрагентов с ролью «конкурент». Для каждого настроили подтягивание прайса с подключением к их публичным API или парсингом сайтов. Расписание каждые 4 часа запускает обработку всех настроек — обновляется таблица цен у конкурентов. После обновления товары попадают в очередь пересчёта, и наши правила ценообразования с базой «не дороже медианы конкурентов» автоматически считают новую розницу.
- Стало
- Мониторинг — каждые 4 часа без участия менеджеров. К пятнице мы знаем, где DNS опустил цены на iPhone, и автоматически подстраиваем свои. Конкурентная позиция стабильно в топ-3 по выдаче. Менеджеры освободились от рутины — занимаются ассортиментом.
- Было
- Каждый маркетплейс (Wildberries, Ozon, Я.Маркет, СберМегаМаркет) брал свою комиссию и требовал свою цену для победы в выдаче. Раньше менеджеры вели «цены каналов» в Excel, обновляли руками. С маркетплейсом А было +15% к рознице, с Б +12%, с В −5%. Ошибались, теряли в выдаче.
- Сделали
- Каждый маркетплейс — отдельный контрагент с ролью «конкурент». Настройка прайса подтягивает текущие минимальные цены конкурентов и актуальные комиссии. В таблице цен у контрагентов хранится цена для каждого канала. У товара заведены правила ценообразования с базой «соответствующий ценовой тип» и формулой «база × (1 + комиссия в процентах)», которые считают цену, нужную для победы в выдаче на каждом канале.
- Стало
- Цены на 4 канала пересчитываются автоматически с актуальными комиссиями. Позиция в выдаче на каждом канале — топ-5 без ручного контроля. Менеджеры не сводят 4 Excel-таблицы по утрам — занимаются ассортиментом и маркетингом.
- Было
- У каждого поставщика свой формат прайса: Excel с разными колонками, CSV с разделителями, XML, у одного — API. Менеджер закупа открывал каждый файл, искал нужную колонку, импортировал. Ошибки в маппинге колонок повторялись, неделями цены закупки в системе были устаревшими.
- Сделали
- Для каждого поставщика — контрагент с ролью «поставщик» и заполненными настройками формата прайса, колонки с ценой, дня обновления, адреса. К нему — настройка прайса с условиями отбора товаров. Каждое утро расписание запускает обработку для тех поставщиков, у которых сегодня день обновления. XML-фиды парсятся, всё пишется в журнал. Цены обновляются в таблице у контрагентов, наши закупочные цены пересчитываются через очередь автоматически.
- Стало
- Закупочные цены актуальны на 100% — обновляются автоматически утром. Менеджеры закупа смотрят на отчёт «у каких поставщиков что изменилось» вместо ручного импорта. Маржа стала точной, отрицательных продаж нет.
- Было
- Производители (Bosch, Samsung, LG) пересылали РРЦ Excel-листами раз в месяц. Менеджеры импортировали — кто помнил, кто забывал. На сайте появлялись товары ниже РРЦ, производители грозили отозвать дилерство. Контроль был ручной и нерегулярный.
- Сделали
- Каждый производитель — отдельный контрагент с ролью «производитель» и включённым флагом «работает по РРЦ». Настройка прайса подтягивает РРЦ-листы автоматически — из XML-фида или Excel через парсер. Таблица цен у контрагентов хранит РРЦ на каждый товар. В системе ценообразования создано правило с переключателем «учитывать РРЦ», максимальным приоритетом и формулой «база × 1.00» — гарантия, что наша цена не уйдёт ниже РРЦ. Любое более слабое правило (скидка, акция) перекрывается этим.
- Стало
- Цена ниже РРЦ — системно невозможна. Производители получают наши отчёты автоматически. Дилерские статусы продлеваются без вопросов. Менеджеры освобождены от контроля РРЦ — занимаются акциями в рамках разрешённого.
- Было
- Заводили нового регионального дистрибьютора. У него — 4 000 наименований, у нас — 22 000 SKU. Сопоставление вручную заняло 3 недели на одного человека. Через 2 месяца появился ещё один зеркальный дистрибьютор — снова 3 недели. Не масштабируется.
- Сделали
- Используют встроенный модуль сопоставления каталогов. Кнопка «Запустить анализ» — система сравнивает каталог нового контрагента с нашим по штрихкоду, артикулу, наименованию и бренду. Список спорных пар выводится с оценкой уверенности — пользователь принимает или отклоняет каждую пару. Принятые применяются одной кнопкой. Для «зеркальных» дистрибьюторов — кнопка «Перенести сопоставления» от уже размеченного контрагента: сопоставления переносятся за минуты.
- Стало
- Анализ 4 000 SKU — за 30 минут с автоматической обработкой 75% мэппингов. Спорные 25% — ручная проверка по очереди suggestions с предложениями системы. Зеркальные дистрибьюторы — почти 100% переносится автоматически через transfer-mappings. Полные 3 недели → 1 день.
- Было
- XML-фиды от поставщиков иногда падали (сервер не отвечал, формат менялся). Мы узнавали об этом через 2-3 дня, когда менеджер закупа замечал, что у части товаров не обновляется закупочная. Источник проблемы — поиск часами по логам.
- Сделали
- Включили журнал обработки прайсов. Каждое обращение к источнику пишется: контрагент, адрес, время, статус, размер ответа, текст ошибки. После обновления настройки автоматически запускается её обработка — все ошибки попадают в журнал. На обзорной панели появилась плитка «прайсы с ошибками за последние сутки» с переходом сразу к проблемным записям.
- Стало
- О падении фида узнаём в течение часа через дашборд. Менеджер открывает лог, видит exact причину (404, timeout, парсинг XML), связывается с поставщиком. Источник проблемы локализован за минуты. Полные обновления — на 99.5% уровне.
Как модуль помогает розничной сети
Единый справочник для трёх ролей: поставщик, производитель, конкурент
В AIERP «конкурент» — это не отдельная сущность и не специальный модуль, а запись в общем справочнике контрагентов с ролью «конкурент». Тот же справочник содержит поставщиков и производителей. У одного контрагента может быть только одна роль — поиск ведётся быстро по индексу.
Это даёт ключевые преимущества: единая модель прав доступа (один раздел контрагентов на все роли), единые фильтры и поиск, единые отчёты по контрагентам с разбивкой по роли. Если завтра конкурент решит стать дистрибьютором — меняем роль в карточке без переноса данных, без потери истории, без двойной работы.
В карточке контрагента хранятся название и сокращённое название, код, папка, порядок, родительский контрагент (для филиалов крупных дистрибьюторов), роль, привязка к юридическому лицу, ответственный менеджер, контактное лицо с телефоном и почтой, сайт, описание для внутренних служб и описание для покупателей, дата последней актуализации, день обновления и формат прайса, название колонки с ценой, восемь флагов настроек: ЭДО, контроль документов, публичность, рассылка, дистрибуция, отсрочка платежа, работа по РРЦ, активность. Удаление мягкое — карточку можно восстановить.
Иерархия родительский-дочерний даёт правильную структуру для крупных поставщиков: главный офис и десять филиалов в регионах — каждый филиал отдельный контрагент со своим складом и контактами. Кнопка «Сделать главным» помечает одно из подразделений как основное. Это критично для крупных дистрибьюторов: по умолчанию работаем с главным, специально указанием — с конкретным филиалом.
Настройка прайса с гибким отбором и индивидуальными ценами
Настройка прайса — это «правило подтягивания цен от контрагента». Один контрагент может иметь несколько настроек: одна для категории «Холодильники» с одной ценой, другая для «Стиральные машины» с другой. У каждой настройки — папка в дереве папок настроек. Это бизнес-структура настроек, независимая от организационной структуры контрагентов.
В карточке настройки задаются: название, папка хранения, порядок, контрагент, магазин (можно сделать настройку только для одного склада или общей для всех), условия отбора товаров, резервная цена с точностью до копеек, резервный остаток, резервная РРЦ, флаг активности, период действия с указанием начальной и конечной даты. Удаление мягкое.
Условия отбора — главное место настройки. Это набор строк с фильтрами по категории, типу товара, производителю, тегам и характеристикам. Строки складываются логически: «и то, и другое» или «то или другое». Это даёт «настройку на категорию», «настройку на бренд» или «настройку на конкретный список товаров» — практически любой бизнес-сценарий.
Особенность: у каждой строки может быть своя цена, остаток и РРЦ. Если хоть одна строка их содержит — обработка идёт построчно: для каждой строки отдельно отбираются товары и применяются именно её цены. Если в строке цен нет — используется резервное значение из общей карточки. Это позволяет одной настройкой покрыть несколько категорий с разными ценами вместо пяти-десяти отдельных настроек.
Таблица цен и остатков у контрагентов: рыночный срез по каждому товару
Таблица цен и остатков у контрагентов — главная выходная таблица модуля. После каждой обработки настройки здесь обновляются строки. По каждой тройке «контрагент — магазин — наш товар» хранятся: код товара у этого контрагента, текущая цена с точностью до копеек, РРЦ с точностью до копеек, остаток на складе у контрагента, срок доставки в днях, срок производства. Удаление мягкое.
Уникальная связь по этой тройке. Это значит, что повторная обработка не плодит дубликаты, а аккуратно обновляет существующие записи. Цены и РРЦ хранятся с точностью до копеек — независимо от того, в каком виде пришли из источника. Никакого «1099.99999» в данных — всё аккуратно.
По каждому товару можно получить рыночный срез одним взглядом: какая цена у М.Видео, у DNS, у Ситилинка, какая РРЦ у Bosch, какая закупочная у нашего дистрибьютора. Аналитика типа «средняя цена среди всех конкурентов по нашему товару» — простая операция, ответ за миллисекунды. Графики истории цен строятся прямо из этой таблицы.
Зачем это нужно: наши правила ценообразования могут считать от цен у контрагентов. Например, правило «не дороже медианы среди конкурентов»: формула берёт медиану цен по конкурентам и устанавливает нашу цену. Связь автоматическая — после каждого обновления цен у контрагентов товар попадает в очередь пересчёта, и наша цена пересчитывается через цепочку.
Обработка прайса с автоматическим пересчётом наших цен
Когда настройка прайса запускается на обработку, система действует по чёткому алгоритму. Сначала смотрит на условия отбора: есть ли в них строки с индивидуальными ценами. Если есть — обрабатывает построчно, у каждой строки свои цены. Если нет — обрабатывает пачкой с резервными ценами из общей карточки настройки.
При пачечной обработке система получает список товаров, попадающих под условия отбора (с защитным лимитом в десять тысяч, чтобы случайная ошибка в условиях не «отобрала миллион»), и для каждого товара создаёт или обновляет запись в таблице цен у контрагентов с резервными ценами, остатком и РРЦ. Затронутые товары запоминаются.
При построчной обработке система проходит по каждой строке условий отбора. Для строки берутся её собственные цены — если в строке какое-то поле не задано, подставляется резервное значение из общей карточки. Затем по условиям строки отбираются товары и для каждого создаётся или обновляется запись в таблице цен с конкретными ценами этой строки. Затронутые товары собираются в общий список без дубликатов.
Финальный шаг всегда одинаковый: все затронутые товары одной операцией отправляются в очередь пересчёта. Это запускает асинхронный пересчёт наших цен через правила ценообразования. Цепочка «обновился прайс контрагента — товары в очередь — пересчиталась наша цена — обновился сайт» работает детерминированно и прозрачно, каждый шаг трассируется в истории.
Сопоставление каталогов: четыре шага вместо недель ручной работы
Главная сложность интеграции с любым контрагентом — сопоставление их каталога с нашим. У них «холодильник Bosch KGN39VW17R», у нас — «Холодильник Bosch KGN39 двухкамерный». Штрихкод может совпадать, но не всегда. Внутренний артикул контрагента вообще ничего не говорит. Менеджеры тратят дни и недели на ручное сопоставление, особенно при подключении нового дистрибьютора с тысячами позиций.
AIERP закрывает эту задачу встроенным модулем сопоставления каталогов. Кнопка «Запустить анализ» — система проходит по каталогу контрагента и для каждой его позиции вычисляет уверенность соответствия с нашими товарами по нескольким сигналам: совпадение штрихкода, артикула, нечёткое совпадение наименования, бренда, категории. Результаты сохраняются в отдельный список предложений.
Видно текущий прогресс анализа — выполняется, завершён или прерван, сколько позиций уже обработано из общего числа. Когда анализ завершён, открывается список предложений: постранично с возможностью пагинации, каждое предложение — пара «код у контрагента, его наименование, наш предложенный товар, оценка уверенности». Сортировка по убыванию уверенности — самые надёжные пары первыми. Для каждой пары кнопки «Принять», «Отклонить», «Пропустить».
После принятия пары и нажатия «Применить» система сохраняет связь и в следующей обработке прайса использует её — этому коду у контрагента соответствует наш конкретный товар. Решения запоминаются и не предлагаются повторно. Это позволяет проходить большие каталоги в несколько подходов, без потери прогресса.
Дополнительно — перенос сопоставлений между контрагентами. При добавлении нового «зеркального» контрагента (например, региональный дистрибьютор того же производителя, что у уже размеченного) можно перенести семьдесят-девяносто процентов сопоставлений автоматически. Система ищет совпадения по кодам товаров и штрихкодам, превью показывает, что именно перенесётся, кнопка «Перенести» применяет. Это экономит недели ручной работы при росте сети поставщиков.
Массовые операции, папки, период действия
Набор операций — богатый. Для папок настроек прайсов: древовидное представление, создание, переименование, удаление, перетаскивание для смены порядка. Для самих настроек: создание, открытие, изменение, удаление, превью до сохранения, копирование, точечная обработка одной настройки, обработка всех активных одной командой, статистика, перетаскивание. Массовые: создание пачки, удаление пачки, перенос пачки в другую папку.
По контрагентам: загрузка всех без пагинации (для выпадающих списков), перетаскивание, массовый перенос в папку, переключение главного филиала, категорийные параметры (характеристики, которые контрагент передаёт для своих товаров). По товарам контрагента — отдельный набор операций: создание, изменение, удаление, превью пачки и пакетное добавление, перенос сопоставлений с превью, четыре шага сопоставления каталогов.
Период действия настройки прайса — даты начала и окончания. Если сегодня вне периода — настройка не применяется при обработке. Это позволяет настраивать сезонные правила: например, контрагент даёт зимние скидки на резину с октября по март, в апреле настройка автоматически перестаёт применяться, в октябре сама включается. Никакого ручного включения и выключения.
День обновления прайса на карточке контрагента — день недели или месяца, когда обычно публикуется свежий прайс. Расписание системы каждый день проверяет, у кого сегодня день обновления, и автоматически запускает обработку. Если день не указан — обработка идёт по общему расписанию. Формат прайса и название колонки с ценой — мета-настройки формата файла, используются парсером при импорте.
Импорт прайсов, журнал обработки, фоновая работа
Самый частый формат прайса конкурента или дистрибьютора — XML-фид по веб-адресу. Адрес контрагента доступен через интернет, парсер каждые несколько часов скачивает, обрабатывает, обновляет данные. Журнал обработки хранит историю каждого обращения: контрагент, адрес источника, время, статус (успех или код ошибки), размер ответа, текст ошибки. Это материал для быстрой диагностики, когда что-то пошло не так.
Архитектура асинхронная — никаких блокировок интерфейса. После каждой правки настройки прайса система сама запускает её обработку в фоне. При изменении карточки товара срабатывает отдельный обработчик, который проверяет, не попал ли товар под существующие настройки, и точечно обновляет данные. Каждое обновление в таблице цен у контрагентов автоматически добавляет товар в очередь пересчёта наших цен.
Главный фоновый обработчик — общая обработка всех активных настроек. Запускается из расписания, проходит по контрагентам, фильтрует по дню обновления (если сегодня день обновления — обрабатываем), для каждого запускает обработку прайса. По окончании выводит сводку: сколько настроек обработано, сколько товаров обновлено, сколько ошибок. Эти данные попадают в систему мониторинга — администратор сразу видит, если что-то идёт не так.
Доступ разделён на два независимых блока — «Настройки прайсов контрагентов» и «Цены и остатки у контрагентов». В каждом по четыре права: создавать, изменять, видеть, удалять. Менеджеры закупа обычно видят актуальные цены, но не правят настройки. Аналитики ценообразования правят настройки прайс-листов. Удаление мягкое на всех ключевых сущностях — данные физически сохраняются в базе и могут быть подняты для исторического анализа, например, «была ли у нас цена этого конкурента на товар X в день Y» — ответ есть даже спустя годы.
Готовы автоматизировать?
Покажем модуль на ваших данных и подключим за 1–2 недели.
