Вводные
- Конфигурация Управление торговлей 11
- Состыкованный каталог номенклатуры с каталогом поставщика
- Нужно автоматически обновлять цены и остатки номенклатуры по данным поставщика
- Нужно организовать мониторинг автоматической загрузке
Порядок обработки
- Получение данных
- Декодирование
- Состыковка
- Запись
- Постобработка
Получение данных
В качестве примера рассмотрю получение данных от
- sima-land (сайт, документация API), HTTP API c поддержкой JSON. Использовать буду v3 без аутентификации, v5 с аутентификацией.
- samson(сайт, документация API), HTTP API c поддержкой JSON, доступ по токену.
- steam-toys (сайт), HTTP файл XLS, доступ по basic аутентификации. Есть YML и CSV, но по полноте данных и компактности в данном случае XLS лучше.
В случае sima-land запросом можно получить информацию по списку id, список 50 элементов, при небольшом количестве товаров оптимально использовать этот подход. При большем объеме возможен вариант использования фильтра по группе товаров.
Минусом конкретной реализации API является то что получаем всю карточку товара, хотя нам нужны только остатки.
У samson остатки/цены получить можно только все, ответ разбит на страницы.
У steam-toys один файл
Декодирование
В результате декодирования нужно получить массив с данными, минимум:
Для остатков
- id товара
- склад
- количество
Для цен
- id товара
- вид цены
- цена
Для остатков информация может быть дополнена остатками "всего" и "в пути".
Для цен информация может быть дополнена валютой (в минимуме все в руб) и курсом.
Перед распределением по документам можно формировать временную скомпонованную таблицу, можно просто перебирать декодированный массив и писать в документы
Условием нормального декодирования XLS является наличие в первой строке заголовков соответствующим требованиям именования колонок таблицы значений. Прайс листы с группировками, картинками раскрасками и подобным нужны для удобства ручной обработки (формирования заказа в том же файле), вопрос формирования прайс листа технического формата можно решить административно.
Состыковка
Состыковку делаю по артикулу номенклатуры поставщика, при наличии идентификаторов со стороны поставщика это оптимальный вариант.
Перед состыковкой получаю таблицу значений и индексирую её по колонке "Артикул". Рассматриваю вариант без характеристик.
Запись
Записи результата загрузки несколько, оптимальный выбирается из ситуации в базе и требований заказчика
Остатки
- Документом оприходование излишков товаров товаров
- оприходуется на "виртуальный склад", видно в подборе заказа поставщику при использовании группы складов
- по складу может стоять ордерная схема для оприходования и при проведении только этого документа остаток не будет виден в подборе
- удобно выгружать типовыми обработками на сайт (как правило берут данные из РН "Свободные остатки")
- Документом заказ поставщику
- ставится "к поступлению" на основной склад, в подборе видно при "простом" варианте отображения подбора
- можно указать плановую дату поступления на склад, что лучше чем просто остаток
- для выгрузки на сайт добавляется запрос к РС "ДоступныеОстаткиПланируемыхПоступлений", в типовом обмене
- Документом корректировка регистров в РН "Свободные остатки"
- из преимуществ перед записью документами то что меньше времени на обработку
- основной минус в "поломке" баланса учета
- При использовании Мегапрайс (помощник закупок) записать данные в его регистр напрямую.
Цены
- Документом Установка цен номенклатуры
- Цены продажи
- Базовые цены для расчета цен продажи
- В упрощенном варианте в том числе закупочные если поставщик один
- Документом Установка цен номенклатуры поставщика
- Цены закупки
- Документом заказ поставщику, совместно с регистрацией цен. Для отсутствия остатков по РН "Расчеты с поставщиками" можно выбрать хоз операцию "Прием на хранение с правом продажи", в строках ТЧ "Товары" указать вид цен поставщика.
- При использовании Мегапрайс (расчет цен) записать данные в его регистр напрямую
При фиксации записи данных нужно определится фиксируете только последнее состояние или историю. При фиксации истории уточните какой период и с какой точностью.
Результат упущения данного вопроса база в 50+ГБ 90 процентов которой были изменения по свободным остаткам через корректировку регистра. По отзывам клиентов в последних релизах вендор поправил алгоритм.
Постобработка
После загрузки цен как правило рассчитывают цены продажи. основная проблема в том что механизм расчета цен применяемый в документе Установка цен номенклатуры жестко завязан за форму документа, которую нельзя получить в серверном контексте, решением является эмулирование формы через структуру, решение вопроса в статье //infostart.ru/public/1257236/.
При сложном варианте расчета, для которого функционала типовой УТ не хватает имеет смысл найти/разработать свой механизм и запускать его после успешной загрузке.
После загрузки остатков запускают обновление остатков/статусов товаров. Типового по этому поводу в УТ 11 не встречал.
Мониторинг
Варианты
- От ошибки
- при ошибке загрузки отправлять уведомление на почту или в мессенджер
- при ошибке писать в журнал регистрации, отдельно запускать обработку анализа журнала регистрации и отправлять уведомления об ошибках
- От отсутствия успешного выполнения (если система не получает пинг в ожидаемое время, он посылает вам предупреждение)
- Использовать https://healthchecks.io/
- Использовать Zabbix и настроить в нем параметр мониторинга
Варианты реализации
- Внешняя подключаемая обработка, проста в подключении и настройки расписания.
- Расширение конфигурации, нужен блок с подключением расписания, который использует механизм внешних обработок,удобно переиспользовать код по формированию документов.
- Доработка конфигурации, удорожание дальнейшей поддержки конфигурации.
Итог
Реализовать механизм загрузки не сложно. Проблемы возникают при некорректном формате данных и "сложной" постобработке.
Благодарю за внимание.