мета-данные страницы
  •  

Расчет даты выдачи заказа

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

Версия описания документации (для программиста)

Алгоритм расчёта даты выдачи

Если дата выдачи задаётся в ручную, то расчёт завершается (данный признак выставляется после ручного изменения даты выдачи) Если заказ не новый (открыт после сохранения) или склад приема «Чистомат» то расчёт завершается

Если в заказе нет не одной услуги и товара, то расчёт завершается Если глоб. настройка «Автоматический расчёт даты выдачи» выкл, то расчёт завершается

Если «для нового заказа использовать дату выдачи предыдущего»(локальная настройка), то берем дату выдачи из предыдущего и выходим Если в заказе выбрана срочность у которой стоит признак «Участвовать в расчете даты выдачи», то к тек дате прибавляем «Часов на исполнение» из карточки срочности, НО если значение часа больше глоб. настройки «Переносить выдачу заказа на след день если ориентировочный час готовности по срочным заказам позже указанного», то переносим на следующий день. Расчёт завершаем

Определяем тип расчёта: Если это прач. заказ, то считаем по своду. Если химчистка, то он берется из глоб.настройки «ЗАКАЗЫ: Расчёт даты выдачи от» (1 - загрузки цеха; 2 - групп изделий заказа)

+ Продолжительность прачечного заказа с расчётом по своду Если по своду: ilEach_day = Берем все группы из добавленных услуг и в них берем максимальную «Плюс к сроку исполнения» их группы + Продолжительность заказа при расчёте даты выдачи от групп изделий заказа ilEach_day = Если от загрузки цеха: У склада приема берем значение «Пропускная способность» (Если на текущий день превышено данное значение, то дата выдачи увеличится на 1 день) Если у склада пропускная способность не указана, то берем ее из глобальной настройки «ЗАКАЗЫ: Общая пропускная способность» ЕСЛИ «Пропускная способность» указана ТО ПО складу приема ЕСЛИ глоб. настройка «ЗАКАЗЫ: Расчёт загрузку цеха при созд\откр заказа» ВКЛ ТО не нашел особо разницы, если она ВКЛ или ВЫКЛ

nlQtyInCashe = Считаем по полю "Кол-во" все услуги в статусе новый и в исполнении кроме услуг текущего заказа (если "Пропускная способность" указана у склада, то считаем только у услуг принятых на складе приема заказа, если из глоб настройки, то считаем услуги по всем складам) 

ilQtyServ = Считаем кол-во основных услуг (те, что через плюсик добавлены не считаем)
ilQty = nlQtyInCashe + ilQtyServ
ilDaysForWork = ilQty / ilEach_day (берем целую часть) //Количество дней для обработки заказа

ИНАЧЕ ПО группам по каждой услуги из заказа вычисляем: ilQtyMaxInDay = «Пропускная способность точек исполнения» из группы услуги ilQtyFld = «Кол-во» все услуги в статусе новый и в исполнении кроме услуг текущего заказа по группе услуг из заказа ilDaysByDuration = «Срок исполнения группы услуг» из склада, если не указан, то «Срок исполнения папки номенклатуры» из карточки номенклатуры, если не заполнено, то «Срок исполнения номенклатуры» из карточки номенклатуры ilDaysByRepair = Если это ремонт у какой-то из основных тоже есть такой же ШК, то по группе основной услуги берем «Плюс к сроку исполнения», если же такой основной услуги нет, то берем «Плюс к сроку исполнения» уже по ремонту ilDaysByDuration := ilDaysByDuration + ilDaysByRepair; Продолжительность обработки услуг для группы на основе сроков исполнения (кол-во дней)

  
  ЕСЛИ ЗАКАЗЫ: Ателье ТО
  ...
  КОНЕЦ
из всех услуг запоминаем с самым большим ilDaysByDuration

+ Продолжительность заказа при расчёте даты выдачи от групп изделий заказа по каждой услуги из заказа вычисляем: ilDuration = ЕСЛИ услуга основная, ТО ЕСЛИ «Собственные сроки выполнения (иначе настройки группы)» (в номенклатуре) то «Срок исполнения» (из услуги), если не заполнено, то из склада приема по этой группе услуги срок исполнение, ИНАЧЕ склада приема по этой группе услуги срок исполнение если не заполнено, то из группы товара «Срок исполнения (дней)» ИНАЧЕ ЕСЛИ «Собственные сроки выполнения (иначе настройки группы)» (в номенклатуре) то «Срок исполнения» (из услуги) ИНАЧЕ из группы услуги «Срок исполнения (дней)» из всех услуг запоминаем с самым большим ilDuration по каждой услуги из заказа вычисляем: ЕСЛИ глоб. настройка «ЗАКАЗЫ: Суммировать дату выдачи основной услуги с ремонтными» и это основная услуга ТО ilDuration = срок исполнения основной услуги = собственный срок исполнения + СУММА (сроков исполнения среди ремонтных) и ПО всем основным услугам берем максимальную дату выдачи ilDaysForServ

+ Если «ЗАКАЗЫ: Расчёт даты выдачи от» не указан, то считаем по Продолжительность заказа при расчёте даты выдачи от групп изделий заказа Каждый из 3-х типов возвращает значение кол-ва дней на исполнение, зафиксируем его в переменной ivDurationOrder

+ Расссчитываем «Дней на отгрузку в цех»: По складу приёма смотрим значение «Время последнего забора заказов» (если оно не заполнено, то считаем, что там «16:45») Если текущее время больше время последнего забора, то прибавляем 1 день К полученному значению прибавляем «Количество дней переноса» (из склада)

ivDurationOrder = ivDurationOrder + «Дней на отгрузку в цех»

ДАТА ВЫДАЧИ = текущая дата + ivDurationOrder

+ Находим максимальную дату из реквизитов с признаком «Максимальное значение между расчетной датой выдачи и значением реквизита подставлять в дату выдачи» в услугах Если это значение больше, то ДАТА ВЫДАЧИ = «Максимальное значение между расчетной датой выдачи и значением реквизита подставлять в дату выдачи»

+ Смещаем дату выдачи, если она попадает на праздничный день (Маркетинг-праздничные дни) + ДАТА ВЫДАЧИ = ДАТА ВЫДАЧИ + глоб. настройка «ЗАКАЗЫ: Время готовности по умолчанию» (к дате прибавляется время из глоб. настройки)

+ ЕСЛИ в заказе есть услуга с признаком «Доставка» ТО У клиента берем «Район» то анализируем дни доставки и время и при необходимости смещаем дату выдачи на доступный день и время доставки. + ЕСЛИ не прач. заказ, то для каждой услуги фиксируем рассчитанную дату выдачи

Блок-схема Задача в Б24

Блок-схема новая Задача в Б24 новая

Проанализировать по заказу как произошел расчет даты выдачи заказа, можно с помощью лога CalcDateOut