Принципы работы алгоритмов расстановки партий, ГТД и т.п.

Локальный расстановщик партий

Задача

Для каждой позиции отдельно взятого документа проставить партию и/или ГТД согласно выбранной методике партионного учета (FIFO, LIFO) и имеющимся на дату документа остаткам (в разрезе партий и/или ГТД) в процессе «ПроцессОткуда» отгружаемого ресурса «РесурсОткуда». В случае, если для удовлетворения количественной потребности отгружаемого в позиции документа ресурса нужно использовать более одной партии, позиция документа должна быть разделена на несколько: по числу необходимых партий. Если же отгружаемое количество превышает суммарное по партиям количество ресурсов имеющхся на складе, то позиция должна быть разделена на <Количество партий на складе> + 1 позиция, причем в последней партия должна остаться непроставленной; обязательно в такой ситуации должно быть выдано предупреждение о перерасходе. Алгоритм интерфейсно оформлен в виде сервисной процедуры.

Основные понятия и параметры задачи

Партия

Вопрос в том, какая аналитика или набор аналитик (партия, ГТД, и то, и другое), идентифицирует партию. В общем случае, партией считается набор аналитик, задаваемых в настройках структуры бизнеса в разделе «Общая настройка» на закладке «Расстановщик партий».

Дата партии

Нужно определится, что брать в качестве «даты партии». Существуют следующие варианты, также задаваемые в настройках структуры бизнеса для расстановщика партий:

  • брать дату непосредственно из партии (ДатаНачала партии, СрокГодности и пр.),
  • использовать дату первого поступления партии в процесс.

Методика партионного учета

Название говорит само за себя. Может быть 4 варианта:

  • партионный учет не ведется,
  • ручная методика учета(партия проставляется вручную),
  • FIFO,
  • LIFO.

Выбор методики партионного учета производится в разделе «Партионный учет» карточки типа процесса.

Алгоритм

Дата берется из партии

Для невозвратных движений (с положительным количеством) строится отчет с условием отбора на параметры - процессы, ресурсы, имеющиеся в соответствующих позициях документа со стороны откуда. Отчет разбивается на таблицы по процессам, ресурсам (данное разбиение - это разрезы расстановки партий, здаваемые в карточке типа процесса в разделе «Партионный учет»), на строки - по партиям (набору идентифицирующих партию аналитик). Для получения количественных показателей в отчете задается один измеритель - «количество». Отчет сортируется по дате партии. Далее, для каждой из невозвратных позиций документа находится соответствующая таблица в отчете и в зависимости от методики партионного учета совершется обход строк отчета (FIFO - с первой строки таблицы, LIFO - с последней) и проверяется правильность расстановки партий: модифицикация, при необходимости, разбиваение на позиции.

Возвраты (движения с отрицательным количеством). Алгоритм различает два вида возвратных движений: возврат от покупателя и возврат поставщику. В обоих случаях в возвратных позициях документа проставляется последняя отгруженная патия. С точки зрения алгоритма, эти два случая отличаются методикой ведения партионного учета в «ПроцессеОткуда»: в случае возврата поставщику считается, что в «ПроцессеОткуда» задана ручная методика ведения партионного учета. При возврате от покупателя алгоритм определяет дебетовый оборот по партии (без учета внутренних перемещений), чтобы проконтролировать излишек в возврате (т.е. в любой момент времени остаток не должен превышать дебетовый оборот). Возврат поставщику обрабатывается как и обычная отгрузка покупателю (т.е. контролируются только остатки на складе), но с тем отличием, что возвратные позиции рассматриваются как движения из Куда в Откуда.

Дата берется по дате прихода ресурса в процесс

Раньше в Ядре был класс «ЗапросПартий» он делал все что нужно для получения отсортированного по дате прихода списка партий, т.е. то, что нам и требуется. Теперь он пропал (видимо был удален за ненадобностью). Предлагается его вернуть.

Глобальный расстановщик партий

Задача

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

Основные понятия и параметры задачи

Те же, что и для алгоритма локальной расстановки партий. Дополнительно имеем параметр - «период». Задается в диалоге вызова робота или в настройках автоматических расчетов для робота партий. Там же должны задаваться набор идентифицирующих аналитик и способ выбора даты.

Алгоритм

Шаг1: определение даты начиная с которой требуется корректировка партий.

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

Шаг2: получение начальных остатков по партиям.

Требуется получить остатки по партиям на дату определенную на первом шаге. Задача сводится к алгоритму локальной расстановки партий без корректировки документа, т.е. к построению отчета описанному в п.3.1 раздела «локальный расстановщик партий» или запроса партий - п.3.2 того же раздела. На основе полученных данных строим реестр партий - список партий с их количеством отсортированный согласно методике партионного учета.

Шаг3: Обработка документов за период.

Отбираем все документы за период начиная с даты определенной на шаге 1, заканчивая датой конца периода переданной в параметрах, у которых в позициях имеется хотя бы один процесс со стороны откуда или куда для которого методика партионного учета > 0(партионный учет ведется). Запрос упорядочиваем по дате начала документов(процессов). Далее, обходим результаты запроса и в каждом из документов обрабатываем позиции: если движение является входящим в процесс с ведущимся партионным учетом, то корректирум реестр партий, если исходящим - то проверяем расстановку партий согласно имеющемуся реестру, если и входящим и исходящим, то сначала проверяем расстановку партий на выходе, затем корректируем реестр для входа.

Ссылки по теме

 
doc/accounting_by_lots.txt · Последние изменения: 2016/04/15 15:26 (внешнее изменение)
 
За исключением случаев, когда указано иное, содержимое этой вики предоставляется на условиях следующей лицензии:CC Attribution-Noncommercial-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki