SAP SHDB VLPOD 录屏带序列号的

91 篇文章 9 订阅
52 篇文章 5 订阅

考虑到交货单有多种情况

1个行项目  多个数量,需要对应多个序列号 

多个行项目,多个数量,需要多个序列号 

最终形成的FM如下

FUNCTION ZIF_BDC_VLPOD_RE_S.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  IMPORTING
*"     VALUE(PVBELN) TYPE  VBELN OPTIONAL
*"     VALUE(PBUDAT) TYPE  BUDAT OPTIONAL
*"     VALUE(LV_MODE) TYPE  APQI-PUTACTIVE DEFAULT 'N'
*"     VALUE(PLGORT) TYPE  ZE_UMLGO OPTIONAL
*"  EXPORTING
*"     VALUE(OSTATUS) TYPE  BAPI_MTYPE
*"     VALUE(OMESSAGE) TYPE  BAPI_MSG
*"  TABLES
*"      T_GERNR STRUCTURE  ZMMS_STO_GERNR OPTIONAL
*"----------------------------------------------------------------------
  DATA:LT_BDCMESSAGE LIKE TABLE OF BDCMSGCOLL.
  DATA:LS_BDCMESSAGE LIKE BDCMSGCOLL.
  DATA:LT_RETURN    TYPE BAPIRET2     OCCURS 0 WITH HEADER LINE.
  DATA:LVNAME TYPE STRING.
  DATA:ITEMC(2) TYPE  C.
  DATA:LTLIPS TYPE TABLE OF LIPS WITH HEADER LINE.
  DATA:LSLIPS LIKE  LIPS.
  CLEAR BDCDATA[].

  SELECT * INTO TABLE LTLIPS FROM LIPS WHERE VBELN = PVBELN.

  PERFORM BDC_DYNPRO USING 'SAPMV50A' '4006'.
  PERFORM BDC_FIELD USING 'BDC_CURSOR' 'LIKP-VBELN'.
  PERFORM BDC_FIELD USING 'BDC_OKCODE' '=ENT2'.
  PERFORM BDC_FIELD USING 'LIKP-VBELN' PVBELN.

  PERFORM BDC_DYNPRO USING 'SAPMV50A' '1000'.
  PERFORM BDC_FIELD USING 'BDC_OKCODE' '=T\02'.
  PERFORM BDC_FIELD USING 'BDC_SUBSCR' 'SAPMV50A                                1502SUBSCREEN_HEADER'.
  PERFORM BDC_FIELD  USING 'LIKP-BLDAT' PBUDAT.
  PERFORM BDC_FIELD USING 'BDC_SUBSCR' 'SAPMV50A                                1110SUBSCREEN_BODY'.
  PERFORM BDC_FIELD USING 'BDC_CURSOR' 'TVPODVB-GRUND(01)'.
  PERFORM BDC_FIELD USING 'GV_XSIT' '2'.
*  PERFORM BDC_FIELD  USING 'LIKP-PODAT' PBUDAT.
  LOOP AT LTLIPS[] INTO LSLIPS.
    IF SY-TABIX < 10.
      ITEMC = '0' && SY-TABIX.
    ELSE.
      ITEMC = SY-TABIX.
    ENDIF.
    PERFORM BDC_DYNPRO  USING 'SAPMV50A' '1000'.
    PERFORM BDC_FIELD USING 'BDC_OKCODE' '=T\01'.
    PERFORM BDC_FIELD  USING 'BDC_SUBSCR' 'SAPMV50A                                1502SUBSCREEN_HEADER'.
    PERFORM BDC_FIELD USING 'LIKP-BLDAT' SY-DATUM.
    PERFORM BDC_FIELD  USING 'BDC_SUBSCR' 'SAPMV50A                                1104SUBSCREEN_BODY'.
    IF ITEMC = '01'.
      LVNAME = 'LIPS-LGORT('&& ITEMC &&')'.
      PERFORM BDC_FIELD USING LVNAME PLGORT.
    ENDIF.

    PERFORM BDC_DYNPRO  USING 'SAPMV50A' '1000'.
    PERFORM BDC_FIELD USING 'BDC_OKCODE' '=PODQ'.
    PERFORM BDC_FIELD  USING 'BDC_SUBSCR' 'SAPMV50A                                1502SUBSCREEN_HEADER'.
    PERFORM BDC_FIELD USING 'LIKP-BLDAT' SY-DATUM.
    PERFORM BDC_FIELD  USING 'BDC_SUBSCR' 'SAPMV50A                                1104SUBSCREEN_BODY'.

    PERFORM BDC_FIELD USING 'GV_XSIT' '2'.

    IF T_GERNR[] IS NOT INITIAL.
      PERFORM BDC_DYNPRO  USING 'SAPMV50A' '1000'.
      PERFORM BDC_FIELD USING 'BDC_OKCODE' '=PSER_T'.
      PERFORM BDC_FIELD  USING 'BDC_SUBSCR' 'SAPMV50A                                1502SUBSCREEN_HEADER'.
      PERFORM BDC_FIELD USING 'LIKP-BLDAT' SY-DATUM.
      PERFORM BDC_FIELD  USING 'BDC_SUBSCR' 'SAPMV50A                                1104SUBSCREEN_BODY'.
      LVNAME = 'LIPS-POSNR(' && ITEMC &&')'.
      PERFORM BDC_FIELD USING  'BDC_CURSOR' LVNAME.
      PERFORM BDC_FIELD USING 'GV_XSIT' '2'.
      LVNAME = 'TVPODVB-SELKZ(' && ITEMC &&')'.
      PERFORM BDC_FIELD USING LVNAME 'X'.

      LOOP AT T_GERNR INTO DATA(LSGERNR) WHERE POSNR = LSLIPS-POSNR.
        AT NEW POSNR.
          PERFORM BDC_DYNPRO USING 'SAPLIPW1' '0300'.
          PERFORM BDC_FIELD USING 'BDC_OKCODE' '=RWS'.
        ENDAT.
        SHIFT LSGERNR-ZZROW LEFT DELETING LEADING '0'.
        IF LSGERNR-ZZROW <  10.
          ITEMC = '0' && LSGERNR-ZZROW.
        ELSE.
          ITEMC = LSGERNR-ZZROW.
        ENDIF.
        LVNAME = 'RIPW0-SERNR('&& ITEMC &&')'.
        PERFORM BDC_FIELD USING LVNAME LSGERNR-GERNR.
      ENDLOOP.
    ENDIF.
  ENDLOOP.

  PERFORM BDC_DYNPRO  USING 'SAPMV50A' '1000'.
  PERFORM BDC_FIELD USING 'BDC_OKCODE' '=SICH_T'.
  PERFORM BDC_FIELD  USING 'BDC_SUBSCR' 'SAPMV50A                                1502SUBSCREEN_HEADER'.
  PERFORM BDC_FIELD USING 'LIKP-BLDAT' SY-DATUM.
  PERFORM BDC_FIELD  USING 'BDC_SUBSCR' 'SAPMV50A                                1104SUBSCREEN_BODY'.
  PERFORM BDC_FIELD USING 'BDC_CURSOR' 'TVPODVB-GRUND(03)'.
  PERFORM BDC_FIELD USING 'GV_XSIT' '2'.

  DATA:LS_PARAMS TYPE CTU_PARAMS.
  LS_PARAMS-DISMODE = 'N'.
  LS_PARAMS-RACOMMIT = 'X'.
  LS_PARAMS-UPDMODE = 'S'.
  CALL TRANSACTION 'VLPOD' USING BDCDATA
*        OPTIONS FROM ls_params
        MODE LV_MODE UPDATE 'S'
        MESSAGES INTO LT_BDCMESSAGE.
 
  CALL FUNCTION 'CONVERT_BDCMSGCOLL_TO_BAPIRET2'
    TABLES
      IMT_BDCMSGCOLL = LT_BDCMESSAGE
      EXT_RETURN     = LT_RETURN.
* 上面这个主要为了看具体报错的原因,做了BDCMESSAGe与BAPIRET2的转换 

  READ TABLE LT_BDCMESSAGE TRANSPORTING NO FIELDS
            WITH KEY
             MSGTYP = 'S'
             MSGID = 'VL' "表示保存成功
             MSGNR = '311'.
  IF SY-SUBRC <> 0.
    OSTATUS = 'E'.
    OMESSAGE =  'pod确认失败!'.
    LOOP AT LT_BDCMESSAGE INTO LS_BDCMESSAGE.
      OMESSAGE = OMESSAGE && LS_BDCMESSAGE-MSGID && LS_BDCMESSAGE-MSGNR && LS_BDCMESSAGE-MSGV1 && LS_BDCMESSAGE-MSGV2 && LS_BDCMESSAGE-MSGV3 && LS_BDCMESSAGE-MSGV4.
    ENDLOOP.
  ELSE .
    OSTATUS = 'S'.
    OMESSAGE =  'pod确认成功!'.
  ENDIF.
ENDFUNCTION.

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gavin_gxh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值