SAP EWM Блог

Сегодня расскажу про одну из самых используемых бади в отгрузке при внедрении SAP EWM.

Ее назначение - это сортировка или фильтрация квантов, которые система определила согласно стандартных настроек.

Вызывается она из программы /SCWM/SAPLREM_BIN_DET-SRC_BIN_DET каждый раз в тот момент, когда система ищет доступный запас для отпуска.

На вход бади поступают следующие значения:

Название переменной Описание переменной
iv_call если идет процесс грубого определения места, то значение = А
iv_anfml это собственно количество, для которого необходимо найти запас в текущем прогоне бади
iv_vorga вид операции, который скорее всего уже устарел и не используется (значения, которые могут приходить можно посмотреть в глобальной константе wmegc_vorga_*)
IS_LTAP структура складской задачи, для которой осуществляется поиск кванта
IS_MAT_GLOBAL глобальные данные материла
IS_MAT_LGNUM данные материала, специфичные для номера склада
IS_MAT_HAZARD данные опасного материала
IT_MAT_UOM данные материала по единицам измерений
IS_T331 данные типа склада для которого выполняется прогон (Если в последовательности поиска указана группа типов складов, то структура не заполняется).
IS_T333 данные настроек вида складского процесса, с которым осуществляется поиск кванта
IT_QMAT таблица квантов, которые система нашла согласно стандартной стратегии
IT_QMAT_STD таблица оригинальных квантов, до запуска внутренней SAPBadi /SCWM/EX_CORE_RMS_I_DETERMINE (в моей практике она всегда была равна IT_QMAT)
IV_REM_RULE стратегия отпуска материалов, которая определилась согласно настроек
IO_LOG объект лога
IV_ROW Строка объекта IO_LOG. Используется для лога.

На выходе бади:

Название переменной Описание переменной
ET_QMAT_CUS выходная таблица квантов, которую система будет использовать, если нам потребуются изменения.
EV_SET признак то, что нужно использовать ET_QMAT_CUS
CS_ORDIM_CUST данные складской задачи в пользовательской структуре

 

Итак, допустим вы создаете задачу на отбор или просматриваете доступные кванты для отбора в транзакции /scwm/prdo, в этом случае система запускает процесс поиска доступных квантов согласно настроенной стратегии и осуществляется вызов данной бади.

При этом нужно понимать, что бади может вызываться несколько раз для одной позиции заказа, в случае:

  • Если определилась последовательность поиска типа склада, к которой присвоено больше, чем один тип склада (групп типов складов). В данном случае бади будет вызываться сначала для первого типа склада, затем для каждого последующего до тех пор, пока найденные кванты не покроют требуемое количество  iv_anfml
  • Если текущая складская задача округлилась в сторону, меньшую от iv_anfml, то для оставшегося количества система снова запустит прогон определения доступных квантов и снова вызовется бади. Пример: у вас iv_anfml = 100 шт. Имеются доступные кванты по 50 шт в 2-х СМ. Соответственно при первом прогоне система покажет эти 2 места, но складская задача создасться только на 50 шт, поэтому для оставшегося количества система снова запустит определение доступных квантов. При следующем прогоне iv_anfml = 50 шт. Система снова покажет эти 2 места, но в первом месте уже доступного количества будет = 0.

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

Учитывайте следующие ограничения бади:

  • кванты либо сортируются либо удаляются, новые добавить нельзя.
  • если определенные кванты были удалены при 1-м прогоне, то в последующих прогонах они уже не появятся

Надеюсь, вам поможет данная статья сократить время на написание ТЗ для этой бади. Удачи!