Сегодня расскажу про одну из самых используемых бади в отгрузке при внедрении 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-м прогоне, то в последующих прогонах они уже не появятся
Надеюсь, вам поможет данная статья сократить время на написание ТЗ для этой бади. Удачи!