@sepetov
Программист Navision, программист PHP

Каким алгоритмом распределить товары в БД по заказам покупки, если допустимы расхождения?

Раньше вся эта аналитика выполнялась почти вручную. На текущий момент я уже автоматизировал это в нашей ERP-системе, но хочу спросить у экспертов: как бы вы подошли к решению этой задачи, если бы делали её сами?

Условия следующие:

1. По итогу анализа xml/dbf-накладных, присланных поставщиками, имеем таблицу такой структуры:
- номер накладной (часть первичного ключа)
- номер строчки в накладной (часть первичного ключа)
- код поставщика (ссылка на его профиль в нашей БД)
- название товара
- количество товара
- серия товара
- срок годности

2. По итогу работы приёмщиков склада в БД имеем другую таблицу такой структуры:
- id (первичный ключ, автоинкремент)
- идентификатор товара (ссылка на его карточку в каталоге с человеческим названием)
- количество товара
- серия
- срок годности
- производитель/страна происхождения/куча иных второстепенных характеристик товара
В этой же таблице есть два изначально пустых поля, которые нужно теперь заполнить:
- номер накладной, по которой этот товар вообще очутился на складе
- номер строчки в накладной
Собственно, два этих поля - это первичный ключ в первой таблице.

Сложностей, добавляющих "остроты" в решение, целая уйма. Приведу несколько:
- название товара у нас и у поставщика может не совпадать: "Термопаста ЕЕЕ 25 гр. 30 шт." и "Термопаста ЕЕЕ шприц 25 гр. в упак. 30 шт."
- поставщик может один и тот же товар, произведённый в разных странах, считать за один, а мы, например, как два разных
- поставщик может в электронной накладной не указать серию и срок годности, а может указать, но неверную
- один и тот же товар может одновременно прибыть от разных поставщиков
- один и тот же товар из одного заказа может прибывать частями в несколько дней
- какой-то товар могут вообще не привезти, а могут привезти лишний.
Строго говоря, получить 100% достоверного результата невозможно и погрешность будет у любого алгоритма, но ошибки были и при старой ручной работе (человеческий фактор).
  • Вопрос задан
  • 178 просмотров
Решения вопроса 1
На мой взгляд эта задача относится к менеджерским, а не айтишным. Есть хорошая поговорка: говно на входе - говно на выходе. И тогда задача формулируется иным образом: как построить процесс, чтобы он выдавал чистые данные. Описанный случай явно требует человеческого участия. И тогда остается лишь вопрос: кому и как отдать эту функцию. Жизнь "бедолаги" можно облегчить, если дать ему инструмент: рекомендательную систему что и с чем можно сопоставить. Ее можно построить любым подходящим способом. Например, через расстояние Левенштейна.

Таким образом, мой ответ такой: я бы менял процесс и вводил правила для сотрудников.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы