zoukankan      html  css  js  c++  java
  • 未清SO关闭处理

    使用:  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.
  • 相关阅读:
    ThreadLocal的魔数为什么是0x61c88647?
    java流程控制之 高级for循环
    java流程控制之 for循环 九九乘法表
    java流程控制之 while循环 1到1000中能被5整除的数 按3个数据一行输出
    java流程控制之 for循环 1到1000中能被5整除的数 按3个数据一行输出
    java流程控制之 for循环 1到100的奇偶数和
    java流程控制之 while 循环
    java流程控制之 while 循环 1到100的和
    java流程控制之 switch
    java流程控制之顺序结构
  • 原文地址:https://www.cnblogs.com/rainysblog/p/11608671.html
Copyright © 2011-2022 走看看