码迷,mamicode.com
首页 > 其他好文 > 详细

未清SO关闭处理

时间:2019-09-29 16:49:02      阅读:121      评论:0      收藏:0      [点我收藏+]

标签:log   round   vba   ade   ima   mode   oop   mat   调用   

 

使用:  SD_SALESDOCUMENT_CHANGE   关闭订单

  DATA: ls_header_in  LIKE bapisdhd1 .
  DATA: ls_header_inx LIKE bapisdhd1x,
        lt_item_in    LIKE TABLE OF bapisditm,
        ls_item_in    LIKE bapisditm,
        lt_item_inx   LIKE TABLE OF bapisditmx,
        ls_item_inx   LIKE bapisditmx,
        lt_bapiret2   LIKE bapiret2   OCCURS 0 WITH HEADER LINE.
  DATA: lv_message    TYPE string.

*BREAK xiangcai.
  LOOP AT pt_data INTO DATA(ls_data).
    SELECT SINGLE lfstk
      INTO @DATA(ls_lfstk)
      FROM vbak
     WHERE vbeln = @ls_data-zbillno.
    IF ls_lfstk = C.
      DATA(lv_msg) = 已完成交货.
      ls_data-zmess  = 订单已完成交货.
      ls_data-zpststu = 1.
      ls_data-updat = sy-datum.
      ls_data-uptim = sy-uzeit.
      ls_data-upnam = sy-uname.
      MODIFY pt_data FROM ls_data.
      CONTINUE.
    ENDIF.
**检查回传的数量 ztotal = 创建的批发销售DN 的项目数量
    CLEAR:ls_zift0008sum.
    READ TABLE lt_zift0008sum INTO ls_zift0008sum WITH KEY zbillno = ls_data-zbillno
                                                           zlineno = ls_data-zlineno
                                                           BINARY SEARCH.

    IF ls_data-ztotal = ls_zift0008sum-ztotal.
      ls_header_inx-updateflag = U.
*      ls_header_in-serv_date = sy-datum .
*      ls_header_inx-serv_date = ‘X‘.

      ls_item_in-itm_number = ls_data-zlineno.
      ls_item_in-material = ls_data-zmatnr.
      ls_item_in-reason_rej = 01."拒绝原因
      APPEND ls_item_in TO lt_item_in.
      CLEAR: ls_item_in.

      ls_item_inx-updateflag = X.
      ls_item_inx-itm_number = ls_data-zlineno.
      ls_item_inx-material = X.
      ls_item_inx-reason_rej = X.
      APPEND ls_item_inx TO lt_item_inx.
      CLEAR: ls_item_inx.

    ELSE.
      lv_msg = 前序数据没有接收完全.
      ls_data-zmess  = 前序数据没有接收完全.
      ls_data-zpststu = 2.
      MODIFY pt_data FROM ls_data.
      RETURN.
    ENDIF.
  ENDLOOP.

  IF lt_item_in[] IS NOT INITIAL.
***未清SO关闭处理
    CALL FUNCTION SD_SALESDOCUMENT_CHANGE
      EXPORTING
        salesdocument     = ls_data-zbillno
*       order_header_in   = ls_header_in
        order_header_inx  = ls_header_inx
        behave_when_error = P
      TABLES
        item_in           = lt_item_in
        item_inx          = lt_item_inx
        return            = lt_bapiret2.

    LOOP AT lt_bapiret2 INTO DATA(ls_bapiret2) WHERE type = E OR type = A OR type = X.
      DATA(lv_tyep) = E.
      CLEAR: lv_message.
      MESSAGE ID ls_bapiret2-id
            TYPE ls_bapiret2-type
          NUMBER ls_bapiret2-number
            WITH ls_bapiret2-message_v1 ls_bapiret2-message_v2 ls_bapiret2-message_v3 ls_bapiret2-message_v4
            INTO lv_message.
      ls_data-zmess = ls_data-zmess && lv_message.
    ENDLOOP.



    IF lv_tyep NE E.
      lv_message = SO关闭成功.
      ls_data-zmess   = lv_message.
      ls_data-updat   = sy-datum.
      ls_data-uptim   = sy-uzeit.
      ls_data-upnam   = sy-uname.
      MODIFY pt_data FROM ls_data TRANSPORTING zmess zpststu updat uptim upnam WHERE zpststu NE 1.
    ELSE.
      ls_data-updat   = sy-datum.
      ls_data-uptim   = sy-uzeit.
      ls_data-upnam   = sy-uname.
      MODIFY pt_data FROM ls_data TRANSPORTING zmess zpststu updat uptim upnam WHERE zpststu NE 1.
    ENDIF.

ENDIF.

 

 

出现报错:输入凭证编号 (而且错误是第一次调用函数出现,第二次  第三次 针对这个问题测试 就成功了)

技术图片

 

 

 

 

 

 走了标准的这段代码
技术图片

 

 

 技术图片

 

 

 技术图片

 

 感觉在FORM的上一层,应该走进 ELSE 分支,却走进了 PERFORM  BELEG_LESEN.  的逻辑
进去之后 VBAK-VBELN 为空,所以报错
技术图片

 

 

为了解决问题,先换用了BDC的方式

  IF lt_item_in[] IS NOT INITIAL.
***未清SO关闭处理
*    CALL FUNCTION ‘SD_SALESDOCUMENT_CHANGE‘
    READ TABLE pt_data INTO ls_data INDEX 1.
    IF sy-subrc NE 0.
      RETURN.
    ENDIF.
    PERFORM frm_dynpro  USING                                               SAPMV45A 0102 X.
    PERFORM frm_dynpro  USING                                                  BDC_CURSOR
                                                                            VBAK-VBELN.
    PERFORM frm_dynpro  USING                                                  BDC_OKCODE
                                                                            =ENT2.
    PERFORM frm_dynpro  USING                                                  VBAK-VBELN
                                                                            ls_data-zbillno.
    PERFORM frm_dynpro  USING                                               SAPMV45A 4001 X.
    PERFORM frm_dynpro  USING                                                  BDC_OKCODE
                                                                            =BABS.
    PERFORM frm_dynpro  USING                                                  BDC_CURSOR
                                                                            RV45A-MABNR(01).
    PERFORM frm_dynpro  USING                                               SAPMV45A 0250 X.
    PERFORM frm_dynpro  USING                                                  BDC_CURSOR
                                                                            RV45A-S_ABGRU.
    PERFORM frm_dynpro  USING                                                  BDC_OKCODE
                                                                            =SUEB.
    PERFORM frm_dynpro  USING                                                  RV45A-S_ABGRU
                                                                            01."gs_data-S_ABGRU_009.
    PERFORM frm_dynpro  USING                                               SAPMV45A 4001 X.
    PERFORM frm_dynpro  USING                                                  BDC_OKCODE
                                                                            =SICH.
    PERFORM frm_dynpro  USING                                                  VBKD-BSTKD
                                                                            01."gs_data-BSTKD_010.
    PERFORM frm_dynpro  USING                                                  BDC_CURSOR
                                                                            KUWEV-KUNNR.
*perform frm_dynpro  using                                                ‘ ‘ ‘KUWEV-KUNNR‘
*                                                                        gs_data-KUNNR_011.
*PERFORM frm_dynpro  USING                                                ‘ ‘ ‘VBAK-AUGRU‘
*                                                                        ‘01‘."gs_data-AUGRU_012.
    CLEAR:gt_messtab[],gt_messtab.
    CALL TRANSACTION VA02 USING gt_bdcd
                            MODE gv_mode
                            UPDATE S
                            MESSAGES INTO gt_messtab.
    IF sy-subrc = 0.
      ls_data-zpststu = 1.
    ENDIF.
    LOOP AT gt_messtab WHERE msgtyp = E OR msgtyp = A OR msgtyp = X.
      ls_data-zpststu = 2.
      SELECT SINGLE *
        INTO @DATA(ls_t100)
        FROM t100
       WHERE sprsl = @gt_messtab-msgspra
         AND arbgb = @gt_messtab-msgid
         AND msgnr = @gt_messtab-msgnr.
      IF sy-subrc = 0.
        DATA(l_mstring) = ls_t100-text.
        IF l_mstring CS &1.
          REPLACE &1 WITH gt_messtab-msgv1 INTO l_mstring.
          REPLACE &2 WITH gt_messtab-msgv2 INTO l_mstring.
          REPLACE &3 WITH gt_messtab-msgv3 INTO l_mstring.
          REPLACE &4 WITH gt_messtab-msgv4 INTO l_mstring.
        ELSE.
          REPLACE & WITH gt_messtab-msgv1 INTO l_mstring.
          REPLACE & WITH gt_messtab-msgv2 INTO l_mstring.
          REPLACE & WITH gt_messtab-msgv3 INTO l_mstring.
          REPLACE & WITH gt_messtab-msgv4 INTO l_mstring.
        ENDIF.
        CONDENSE l_mstring.
        CONCATENATE ls_data-zmess l_mstring INTO ls_data-zmess.
      ELSE.
        CONCATENATE ls_data-zmess gt_messtab INTO ls_data-zmess.
      ENDIF.
    ENDLOOP.


    IF ls_data-zpststu = 1.
*  lv_type = ‘S‘.
*  ls_data-zpststu = 1.
*  ZDOCNO
      lv_message = SO关闭成功.
      ls_data-zmess   = lv_message.
      ls_data-updat   = sy-datum.
      ls_data-uptim   = sy-uzeit.
      ls_data-upnam   = sy-uname.
      MODIFY pt_data FROM ls_data TRANSPORTING zmess zpststu updat uptim upnam WHERE zpststu NE 1.
   ELSE.
      ls_data-updat   = sy-datum.
      ls_data-uptim   = sy-uzeit.
      ls_data-upnam   = sy-uname.
      MODIFY pt_data FROM ls_data TRANSPORTING zmess zpststu updat uptim upnam WHERE zpststu NE 1.
**回传回写log表 ZIFT0008
      CLEAR:gv_flag.
      PERFORM frm_update_zift0008 TABLES pt_data
                                  CHANGING gv_flag.
   ENDIF.
ENDIF.

 

 

未清SO关闭处理

标签:log   round   vba   ade   ima   mode   oop   mat   调用   

原文地址:https://www.cnblogs.com/rainysblog/p/11608671.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!