![]() |
Расчет сроков поставки
Вложений: 1
Задам вопрос здесь, т.к. теоретиков и практиков по логическому мышлению здесь больше всего :)
Стоит задача автоматизировать расчет сорванных сроков поставок товаров, точнее вывод разницы в сроках в днях. Для того, чтобы было понятней, прикладываю файлик в Excel. Частично я задачу решил, но когда наткнулся на некоторые условия, зашел в тупик. Поставки разбиты помесячно. Итак, допустим по плану поставка должна быть 05.01.2013. В феврале поставок не намечалось. Фактически в январе ничего не поставили, а в феврале поставили за январь. Получается, мы должны посчитать разницу в днях за январь + количество дней до поставки в феврале. (Я выделил красным на листе этот вариант) А может быть так, что по плану поставка должна быть в феврале, а по факту еще вообще ничего не было. Надо тоже как то считать. В Excel я сделал примерный набросок, которой работает корректно во всех случаях, кроме описанного мною первого случая. Прошу совета, и речь не идет о какой то унифицированной формуле, а скорее о теоретической форме расчета, которую потом можно будет переложить на C#. |
Delirium, посмотрел табличку. Первая мысль - у тебя не нормализована форма что ли. Ну т.е. не хватает еще одной колонки, чтобы получить полностью определенную запись в базе денных. Хм... поясню из далека.
Беру в пример 11ую строку. Спецификацией определены две поставки по ID 5001397 в январе и в марте. Как определить, какой приход товара (январский или мартовский) был в апреле (ну перенесем дату с февраля для большей наглядности)? Ответ - никак. Можно конечно взять предположение, что поставки закрываются в порядке поступления, но сам понимаешь - в жизни это далеко не факт. Подожди, но при работе с поставщиками и со складским учетом есть сквозные номера отчетности? + опять же поставка может быть не полной. Или это сейчас не рассматривается? Т.е. ИМХО должны быть только две даты. Дата конкретного заказа, и дата его привоза. В базе данных (сейчас я больше в них) id, data_spec, data_fact. Это основное. Дальше можно будет внести еще одно поле, например номер договора, в рамках которого осуществляется ежеквартальная отгрузка товара. Нууу и еще + одно для описания подробностей. Например частичной отгрузки. |
lxa85, это лишь часть из базы, показанная для сравнения. На самом деле там порядка 200 колонок с десятками других дат :). В данном случае надо отследить именно срыв поставки в разрезе таких дат. Поставка одна, т.е. после торгов, например, планируется поставить 24 единицы товара, по 2 каждый месяц. Да, бывает так, что в январе не поставят 2, а в феврале поставят сразу 4. Но январский срок все равно считается просроченным, а февральский нет(если конечно в феврале не поставили позже февральского срока). Это такая специфика расчетов в данном случае.
|
Delirium, мы друг друга поняли :)
В любом случае, нужен какой-то параметр "принципиально отличающий" Это должны быть различные строки базы данных. Посмотри, возможно будет целесообразно сделать "Представление", т.е. краткую выборку, по которой искать срывы сроков поставки. |
Цитата:
Представление я бы сделал, если бы понял, какое. Пока что идея примерно такая: Код:
Берем текущий месяц(скажем, апрель), ищем в спецификации ближайшую дату поставки от СЕГОДНЯ до начала года по месяцам |
Код:
переменная "дата поставки" = NULL |
Время: 16:34. |
Время: 16:34.
© OSzone.net 2001-