交货单可用性检查,库存+批次可用

本文介绍了一个ABAP函数zsdfm001_60,用于检查物料在不同批次及库位下的可用库存。该函数首先获取指定交货单下的物料批次信息,然后根据输入的物料号或批次号查询具体的库存详情,并调用BAPI接口计算可用库存。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

可用性检查函数函数
FUNCTION zsdfm001_60.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  IMPORTING
*"     VALUE(I_MATNR) TYPE  MATNR OPTIONAL
*"     VALUE(I_CHARG) TYPE  CHARG_D OPTIONAL
*"     VALUE(I_VBELN) TYPE  VBELN
*"  EXPORTING
*"     VALUE(E_ITEM) TYPE  ZSDS086
*"----------------------------------------------------------------------
DATA: i_return LIKE bapiwmdve OCCURS 0 WITH HEADER LINE.
DATA: i_WMDVSX LIKE BAPIWMDVS OCCURS 0 WITH HEADER LINE.




*    批次库存
DATA:BEGIN OF i_lips OCCURS 0,
      matnr LIKE lips-matnr,
      charg LIKE lips-charg,
      werks LIKE lips-werks,
      lgort LIKE lips-lgort,
      meins LIKE lips-meins,
      END OF i_lips.
      SELECT
      matnr
      charg
      werks
      lgort
      VRKME
      INTO TABLE i_lips
      FROM lips
      WHERE vbeln = i_vbeln.


      IF i_matnr IS NOT INITIAL."说明查询的是没有批次的库存
                 READ TABLE i_lips WITH KEY matnr = i_matnr.


                SELECT SINGLE
                mard~matnr
                mard~labst
                mara~meins
                INTO (e_item-matnr,e_item-menge,e_item-meins )
                FROM mard
                INNER JOIN mara ON mara~matnr = mard~matnr
                WHERE  mard~werks = i_lips-werks AND mard~lgort = i_lips-lgort AND mard~matnr = i_matnr .




ELSEIF i_charg IS NOT INITIAL."查询单个批次


      SELECT "SINGLE
      mchb~matnr
      mchb~charg
      mchb~clabs
      INTO  (e_item-matnr,e_item-charg,e_item-chnum )
      FROM mchb
      FOR ALL ENTRIES IN i_lips
      WHERE  mchb~werks = i_lips-werks AND mchb~lgort = i_lips-lgort and matnr = i_lips-matnr AND mchb~charg = i_charg .
     ENDSELECT.


      SELECT "SINGLE
      mard~matnr
      mard~labst
      mara~meins
      INTO (e_item-matnr,e_item-menge,e_item-meins )
      FROM mard
      INNER JOIN mara ON mara~matnr = mard~matnr
      FOR ALL ENTRIES IN i_lips
      WHERE  mard~werks = i_lips-werks AND mard~lgort = i_lips-lgort AND mard~matnr = e_item-matnr .
     ENDSELECT.


*          *批次可用库存
      READ TABLE i_lips WITH KEY matnr = e_item-matnr.


      CALL FUNCTION 'BAPI_MATERIAL_AVAILABILITY'
      EXPORTING
        plant      = i_lips-werks
        material   = e_item-matnr
        UNIT       = i_lips-meins
        check_rule = 'B'
        stge_loc   = i_lips-lgort
        batch      = e_item-charg
      TABLES
        WMDVSX = I_WMDVSX
        wmdvex     = i_return.
        READ TABLE i_return INDEX 1.
        e_item-chnum_k = i_return-COM_QTY.
        REFRESH i_return.
  ENDIF.


*            *库位可用库存
refresh i_return.
  CALL FUNCTION 'BAPI_MATERIAL_AVAILABILITY'
  EXPORTING
    plant      = i_lips-werks
    material   = e_item-matnr
    UNIT       = i_lips-meins
    check_rule = 'B'
    stge_loc   = i_lips-lgort
  TABLES
    WMDVSX = I_WMDVSX
    wmdvex     = i_return.


  READ TABLE i_return INDEX 1.
  e_item-menge_k = i_return-COM_QTY.


*单位换算
  CALL FUNCTION 'MATERIAL_UNIT_CONVERSION'
EXPORTING
  INPUT   = e_item-menge      "clabs--基本计量单位下库存数量,为传入参数
  kzmeinh = ' '
  matnr   = e_item-matnr
  meinh   = i_lips-meins
IMPORTING
  OUTPUT  = e_item-menge.      "输出值赋值给zkcsl--公斤计库存数量


  CALL FUNCTION 'MATERIAL_UNIT_CONVERSION'
EXPORTING
  INPUT   = e_item-chnum      "clabs--基本计量单位下库存数量,为传入参数
  kzmeinh = ' '
  matnr   = e_item-matnr
  meinh   = i_lips-meins
IMPORTING
  OUTPUT  = e_item-chnum.      "输出值赋值给zkcsl--公斤计库存数量


E_ITEM-meins = I_LIPS-meins.
  ENDFUNCTION
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值