Загрузка, анализ и обработка прайс-листов

Материал из Управление номенклатурой
Перейти к навигации Перейти к поиску

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

Источники данных

Возможные варианты:

  • Файлы табличных документов Excel;
  • YML фиды с товарами и ценами для Яндекс маркета и других маркетплейсов, доступные для скачивания с сайтов поставщиков;
  • XML файлы с товарами и ценами, со структурой принятой в учетной системе поставщиков (структура XML файла произвольная, для чтения данных из каждого вида XML требуется разработка отдельного модуля);
  • API REST с доступом к данным из учетной системы поставщиков (структура API произвольная, для доступа и чтения данных из API каждого поставщика требуется разработка отдельного модуля);
  • Другие источники данных. Возможно разработать модуль доступа и чтения данных из почти любого источника. Например внешняя база данных.

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

Общая структура данных

Важный момент!!! Вся загружаемая информация (цены, остатки, контент) записывается дважды, в отдельные справочники:

  1. С привязкой к внешним товарам (исходные не обработанные данные);
  2. С привязкой к номенклатуре (обработанные данные, готовые для использования в бизнес логике).

Исходные данные

  • Внешние товары (для каждой номенклатуры, несколько записей по количеству Владельцев данных):
    • Цены поставщиков (для каждого внешнего товара, несколько записей по количеству Видов цен);
    • Статусы наличия (для каждого внешнего товара, несколько записей по количеству Складов);
    • Числовые остатки (для каждого внешнего товара, несколько записей по количеству Складов).

Обработанные данные

  • Номенклатура (наши товары):
    • Цены поставщиков (для каждой номенклатуры, несколько записей по количеству Поставщиков + Видов цен);
    • Статусы наличия (для каждой номенклатуры, несколько записей по количеству Поставщиков + Складов);
    • Числовые остатки (для каждой номенклатуры, несколько записей по количеству Поставщиков + Складов);
    • Основной поставщик (для каждой номенклатуры, несколько записей по количеству Складов);

Данные дублируются по ряду причин:

  1. Дополнительная обработка загруженных данных. При загрузке данные записываются как есть, с привязкой к внешним товарам. Далее данные обрабатываются и записываются с привязкой к номенклатуре:
  2. Скорость загрузки. Бывают ситуации, когда один и те же данные необходимо записать несколько раз:
    • Запись нескольких складов из одной колонки. Вместо того, что бы настраивать запись каждого склада указываю одну общую колонку (можно и так, вариант рабочий), настраиваем запись в главный склад, а в остальные склады копируем уже записанные значения, что даст выигрыш в скорости;
  3. Дополнительная информация. При очередной загрузке не всем товарам поставщика назначен аналог номенклатуры в нашей базе, значит записать цены и остатки к номенклатуре нет возможности (номенклатура не известна). Но мы можем записать цены и товары с привязкой к внешним товарам, и далее просматривать в форме анализа и обработки прайс-листов.

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

Возможные ситуации:

  • Есть сомнения, или не понятно как будут использоваться загруженные данные. Включаем обе записи. Структуру данных это не нарушит. Если есть обработка, она все равно заменит загруженные данные. Самое худшее, что случится, это будет затрачено немного лишнего времени при записи.
  • Не требуется обработка данных и данные не нужные для просмотра у товаров без аналогов. Включаем только запись с привязкой к номенклатуре.
  • Требуется обработка данных. Включаем только запись с привязкой к внешним товарам.

Общие справочники

Владельцы данных

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

Внешние товары

Основная информация о товарах, загруженная из внешних источников данных, (файлы прайс-листов Excel, XML, API REST и пр):

  • Идентификаторы товаров, в системе поставщика или конкурента (наименование, код, артикул, штрихкод, производитель, характеристика);
  • Товарная группа, с иерархией в системе поставщика или конкурента;
  • Аналог номенклатуры, соответствующее значение в нашей номенклатуре.

Цены

Структура записи цен поставщиков и конкурентов.

Виды цен

При загрузке цен прайс-листов, цены записываются в разрезе справочника Вид загружаемых цен.

В системе используется три понятия видов цен, они в отдельных справочниках, у каждого свое назначение. Важно, понимать в чем между ними разница.

  1. Виды цен поставщиков - классификатор видов цен, как он принят у поставщика. У каждого поставщика свой набор видов цен. Служит для сопоставления, в какой вид цен прайс-листов должна быть записана цена при загрузке (используется при загрузке из XML файлов и API, при загрузке из файлов Excel не используется);
  2. Виды загружаемых цен - служит для группировки цен загруженных из файлов прайс-листов и других внешних источников (в старой версии анализа прайс-листов это были Группы цен);
  3. Виды расчетных цен - рассчитываются на основании цен прайс-листов и других данных. Используются в учетной системе как цена продажи, либо закупки.

Важно!!! Если не понятно, в чем разница, тут описано на примере, обязательно ознакомиться.

Цены внешних товаров

Хранит информацию об исходных, не обработанных цена, загруженных из внешних источников.

Цены номенклатуры поставщиков

Хранит информацию обработанных ценах поставщиков (конкурентов), с учетом индивидуальных скидок и наценок на доставку..

Остатки

Информация об остатках записывается в двух вариантах:

  • Числовой остаток, реальное (либо предполагаемое) количество товара на складе поставщика;
  • Статус наличия, обобщенные признаки наличия товара на складе поставщика.

Виды остатков

Числовой остаток

Нужен для выгрузки количества товаров во внешние системы, где структура данных предполагает остаток только в виде числового значения:

  • Интернет-магазин;
  • Маркетплейсы;
  • Прайс-лист организации;
  • YML фиды.

Статус наличия

Обобщенная и дополнительная информация о наличии товара на складе поставщика.

  • Статусы удобнее использовать для фильтров:
    • При выгрузке товаров (например, только в наличии);
    • При просмотре списка товаров.
  • Дополнительные статусы на отсутствующие товары, если числовой остаток = "0" это вся информация, статусы дают больше вариантов:
    • Под заказ - количество = "0", но товар у поставщика все равно возможно заказать, с длительной доставкой;
    • Нет в наличии - количество = "0", товар нельзя заказать, поставщик оставил его в прайс-листе только для информации;
    • Удален - товар давно не обновлялся;
    • Снят с производства - товар очень давно не обновлялся, и скорее всего больше не появится.

Хранение остатков

Склады

Виртуальные склады, в разрезе которых хранится информация об остатках.

Важно!!! Обобщенные склады. У поставщика могут быть склады, типа Основной склад, или Магазин или Склад по такому то адресу, виртуальные склады это другое! Это именно обобщенные склады, которые возможно применить ко всем поставщикам.

Чаще всего, на практике, склады это регионы. Например: Москва, Санкт-Петербург и пр.

Остатки внешних товаров

Хранит информацию о числовых остатках для внешних товаров (в том числе без привязанного аналога нашей номенклатуры).

Статусы внешних товаров

Хранит информацию о статусах наличия для внешних товаров (в том числе без привязанного аналога нашей номенклатуры).

Остатки номенклатуры поставщиков

Хранит информацию о числовых остатках для номенклатуры (только для внешних товаров с привязанным аналогом нашей номенклатуры).

Статусы номенклатуры поставщиков

Хранит информацию о статусах наличия для номенклатуры (только для внешних товаров с привязанным аналогом нашей номенклатуры).

Обработка остатков

Значение статусов и остатков поставщиков, меняются двумя способами:

  1. При загрузке данных из прайс-листов, вариант приоритетный и всегда меняет текущее значение на загруженное;
  2. Дополнительная обработка, используется если информация об остатках не обновляется при загрузке (прайс-лист поставщика перестали загружать, либо поставщик убрал какие то товары из прайс-листов).

Статусы наличия

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

Дополнительно у статусов есть признак Статус устанавливается только через загрузку, используется что бы при сдвиге статусов пропустить, промежуточные статусы, например В наличии, Под заказ только через загрузку, значит с любого из этих статусов, после истечения срока актуальности передвинет на Удален. Без такого признака, получилось бы что со статуса Под заказ передвинул на Нет в наличии и только потом на Удален.

Числовые остатки

Удалить не актуальные числовые остатки. Обработки выбирает все остатки больше "0" и сбрасывает на "0" все где статус установлен на Удален или Снят с производства.

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

Основные поставщики

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

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

  1. Более низкая цена (среди всех у кого товар в наличии);
  2. Выше статус наличия (среди всех у кого товар в наличии и одинаковая минимальная цена);
  3. Более актуальная дата обновления (среди всех у кого товар в наличии, одинаковая минимальная цена, и одинаковый статус наличия).

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