zoukankan      html  css  js  c++  java
  • 参照UB单创建DN并过账

    *&---------------------------------------------------------------------*
    *& Form FRM_DN_POST
    *&---------------------------------------------------------------------*
    *& text 参照UB单创建DN 并发货过账
    *&---------------------------------------------------------------------*
    *& -->  p1        text
    *& <--  p2        text
    *&---------------------------------------------------------------------*
    FORM frm_dn_post .
      DATA:lt_stock_items TYPE TABLE OF bapidlvreftosto.
      DATA:ls_stock_items TYPE bapidlvreftosto.
      DATA:lt_created_items TYPE TABLE OF bapidlvitemcreated.
      DATA:ls_created_items TYPE bapidlvitemcreated.
      DATA:lv_delivery TYPE bapishpdelivnumb-deliv_numb.
      DATA:lv_vstel TYPE vstel.
      DATA:lv_ledat TYPE ledat.
      DATA:lt_return TYPE TABLE OF bapiret2.
      DATA:ls_header_data LIKE bapiobdlvhdrchg.
      DATA:ls_header_ctrl LIKE bapiobdlvhdrctrlchg.
      DATA:lt_item_data LIKE TABLE OF bapiobdlvitemchg.
      DATA:ls_item_data LIKE bapiobdlvitemchg.
      DATA:lt_item_data_spl LIKE TABLE OF /spe/bapiobdlvitemchg.
      DATA:ls_item_data_spl LIKE /spe/bapiobdlvitemchg.
      DATA:lt_item_control LIKE TABLE OF bapiobdlvitemctrlchg.
      DATA:ls_item_control LIKE bapiobdlvitemctrlchg.
    
      DATA:lt_vbpok_tab TYPE TABLE OF vbpok.
      DATA:ls_vbpok_tab TYPE vbpok.
      DATA:ls_techn_control TYPE bapidlvcontrol.
      DATA:ls_header_control TYPE bapiobdlvhdrctrlchg.
      DATA:ls_vbkok TYPE vbkok.
      DATA:lt_prot TYPE TABLE OF prott.
    
      DATA:lv_flag     TYPE c,
           lv_message  TYPE string,
           lv_message1 TYPE string,
           lv_mblnr    TYPE mkpf-mblnr,
           lv_mjahr    TYPE mkpf-mjahr.
    
    
    **取到选中的订单号
      LOOP AT gt_doc ASSIGNING <gf_doc> WHERE sel = 'X' AND zstatus <> 'S'.
        gs_key-ebeln = <gf_doc>-ebeln.
        COLLECT gs_key INTO gt_key.
      ENDLOOP.
    
    **通过订单号处理
      LOOP AT gt_key INTO gs_key.
    
    
    **s1.根据UB创建DN
    
    **清变量
        CLEAR: lv_message,lv_flag,
               lv_delivery,
               ls_stock_items,lt_stock_items,
               ls_created_items,lt_created_items,
               lt_return.
    
    **参数赋值
        LOOP AT gt_doc ASSIGNING <gf_doc> WHERE ebeln = gs_key-ebeln.
          ls_stock_items-ref_doc = <gf_doc>-ebeln. "参考凭证
          ls_stock_items-ref_item = <gf_doc>-ebelp."参考项
          APPEND ls_stock_items TO lt_stock_items.
    
          ls_created_items-ref_doc = <gf_doc>-ebeln. "参考凭证
          ls_created_items-ref_item = <gf_doc>-ebelp."参考项
          ls_created_items-material = <gf_doc>-zmatnr."物料编号
          ls_created_items-material_long = <gf_doc>-zmatnr."物料编号
          APPEND ls_created_items TO lt_created_items.
        ENDLOOP.
    
    *  DATA(lv_flag) = 'Y'.
    *  EXPORT lv_flag TO  MEMORY ID 'ZPOS_LGORT_FLAG'.
        CALL FUNCTION 'BAPI_OUTB_DELIVERY_CREATE_STO'
          EXPORTING
            ship_point        = lv_vstel
            due_date          = lv_ledat
          IMPORTING
            delivery          = lv_delivery
          TABLES
            stock_trans_items = lt_stock_items
            created_items     = lt_created_items
            return            = lt_return.
        FREE MEMORY ID 'ZPOS_LGORT_FLAG'.
    
        DELETE lt_return WHERE type = 'E' AND id = 'BAPI' AND number = '001'.
        LOOP AT lt_return INTO DATA(ls_return) WHERE type = 'E'.
          lv_flag = 'E'.
          CONCATENATE lv_message  ls_return-message INTO lv_message  SEPARATED BY '/'.
        ENDLOOP.
    
    
        IF lv_flag = 'E'.
          CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
    
          LOOP AT gt_doc ASSIGNING <gf_doc> WHERE ebeln = gs_key-ebeln.
            <gf_doc>-cldat = sy-datum.
            <gf_doc>-cltim = sy-uzeit.
            <gf_doc>-clnam = sy-uname.
    *      IF lv_flag = 'E'.
            <gf_doc>-zstatus = 'E'.
            <gf_doc>-zmessage = lv_message.
            <gf_doc>-icon  = '@5C@'.
    *      ELSE.
    *        <gf_doc>-zstatus = '1'.
    *        <gf_doc>-zmessage = 'DN创建成功'.
    **        <gf_doc>-ICON = '@5B@'.
    *        <gf_doc>-vbeln = lv_delivery.
    **        <gf_doc>-posnr = lv_mjahr.
    *      ENDIF.
            PERFORM frm_update_db.
          ENDLOOP.
    
        ELSE.
    
          CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
            EXPORTING
              wait = 'X'.
    **s2.修改DN
          CLEAR:lv_mblnr,lv_mjahr,
                ls_header_data,ls_header_ctrl,
                ls_item_data,lt_item_data,
                ls_item_data_spl,lt_item_data_spl,
                ls_item_control,lt_item_control.
    
    **参数赋值
          ls_header_data-deliv_numb = lv_delivery.
          ls_header_ctrl-deliv_numb = lv_delivery.
    
    **记录DN创建结果
          LOOP AT gt_doc ASSIGNING <gf_doc> WHERE ebeln = gs_key-ebeln.
            <gf_doc>-cldat = sy-datum.
            <gf_doc>-cltim = sy-uzeit.
            <gf_doc>-clnam = sy-uname.
    
            <gf_doc>-zstatus = '1'.
            <gf_doc>-zmessage = 'DN创建成功'.
    **        <gf_doc>-ICON = '@5B@'.
            <gf_doc>-vbeln = lv_delivery.
    
            DATA: ls_lips LIKE lips.
    **通过VGBEL  VGPOS
            CLEAR: ls_lips.
            SELECT SINGLE *"posnr INTO <gf_doc>-posnr
              INTO ls_lips
              FROM lips
             WHERE vgbel = <gf_doc>-ebeln
               AND vgpos = <gf_doc>-ebelp.
            <gf_doc>-posnr = ls_lips-posnr.
            PERFORM frm_update_db.
    
    **要修改:存储地点  数量  批次
            ls_item_data-deliv_numb      = lv_delivery."交货
            ls_item_data-deliv_item      = ls_lips-posnr."交货项目
            ls_item_data-material        = ls_lips-matnr."物料编号
            ls_item_data-dlv_qty         = <gf_doc>-zlfimg."数量
    *        ls_item_data-batch          = lips-charg."批次
            ls_item_data-fact_unit_nom   = ls_lips-umvkz.
            ls_item_data-fact_unit_denom = ls_lips-umvkn.
            APPEND ls_item_data TO lt_item_data.
            CLEAR:ls_item_data.
    
            ls_item_data_spl-deliv_numb = ls_lips-vbeln."交货单
            ls_item_data_spl-deliv_item = ls_lips-posnr."交货单行项目
            ls_item_data_spl-stge_loc = <gf_doc>-zlgort. "库存地点
            APPEND ls_item_data_spl TO lt_item_data_spl.
            CLEAR:ls_item_data_spl.
    
            ls_item_control-deliv_numb = ls_lips-vbeln."交货单
            ls_item_control-deliv_item = ls_lips-posnr."交货单行项目
            ls_item_control-chg_delqty = 'X'.
            APPEND ls_item_control TO lt_item_control.
            CLEAR:ls_item_control.
          ENDLOOP.
    
    
          IF lt_item_data IS NOT INITIAL.
            CLEAR:lt_return.
    
            CALL FUNCTION 'BAPI_OUTB_DELIVERY_CHANGE'
              EXPORTING
                header_data    = ls_header_data
                header_control = ls_header_ctrl
                delivery       = lv_delivery
              TABLES
                item_data      = lt_item_data
                item_data_spl  = lt_item_data_spl
                item_control   = lt_item_control
                return         = lt_return.
    
            READ TABLE lt_return TRANSPORTING NO FIELDS WITH KEY type = 'E'.
            IF sy-subrc <> 0.
              CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
                EXPORTING
                  wait = 'X'.
              <gf_doc>-zmessage = 'DN修改成功'.
    
    **记录DN修改结果
              LOOP AT gt_doc ASSIGNING <gf_doc> WHERE ebeln = gs_key-ebeln.
                <gf_doc>-cldat = sy-datum.
                <gf_doc>-cltim = sy-uzeit.
                <gf_doc>-clnam = sy-uname.
    
                <gf_doc>-zstatus = '2'.
                <gf_doc>-zmessage = 'DN修改成功'.
    **        <gf_doc>-ICON = '@5B@'.
    
                PERFORM frm_update_db.
              ENDLOOP.
    
    
    **s3.DN过账
    **清变量
              CLEAR:lv_mblnr,lv_mjahr,
                    ls_vbkok,lv_flag,
                    lt_prot,
                    ls_vbpok_tab,lt_vbpok_tab.
              SELECT *
                FROM lips
                INTO TABLE @DATA(lt_lips)
               WHERE vbeln = @lv_delivery.
    
              LOOP AT lt_lips  ASSIGNING FIELD-SYMBOL(<fs_lips>).
                CLEAR:ls_vbpok_tab.
                ls_vbpok_tab-vbeln_vl = <fs_lips>-vbeln. "交货.
                ls_vbpok_tab-posnr_vl = <fs_lips>-posnr."原行项目
                ls_vbpok_tab-vbeln    = <fs_lips>-vbeln. "交货.
                ls_vbpok_tab-posnn    = <fs_lips>-posnr."交货项目
                ls_vbpok_tab-matnr    = <fs_lips>-matnr."物料编号
                ls_vbpok_tab-charg    = <fs_lips>-charg."批号
                ls_vbpok_tab-lfimg    = <fs_lips>-lfimg.
                ls_vbpok_tab-meins    = <fs_lips>-meins.
                ls_vbpok_tab-werks    = <fs_lips>-werks ."库存地点
                ls_vbpok_tab-lgort    = 9000 .           "库存地点
                ls_vbpok_tab-kzlgo    = 'X'.             "库存地点可修改
                ls_vbpok_tab-pikmg    = <fs_lips>-lfimg."捡配数量
                ls_vbpok_tab-lgmng    = <fs_lips>-lfimg."交货量
                APPEND ls_vbpok_tab TO lt_vbpok_tab.
    
                CLEAR:ls_item_data_spl.
                ls_item_data_spl-deliv_numb = <fs_lips>-vbeln."交货
                ls_item_data_spl-deliv_item = <fs_lips>-posnr."原行项目
                ls_item_data_spl-stge_loc   = 9000.       "库存地点
                APPEND ls_item_data_spl TO lt_item_data_spl.
    
              ENDLOOP.
    
              ls_header_data-deliv_numb     = lv_delivery."交货
              ls_techn_control-upd_ind      = 'U'.
              ls_header_control-deliv_numb  = lv_delivery."交货
              lv_delivery                   = lv_delivery."交货
    
              ls_vbkok-vbeln_vl             = lv_delivery.
              ls_vbkok-wabuc                = 'X'.
              ls_vbkok-wadat_ist            = sy-datum.
    
    
              CALL FUNCTION 'WS_DELIVERY_UPDATE'
                EXPORTING
                  vbkok_wa                  = ls_vbkok
                  delivery                  = lv_delivery
                  update_picking            = 'X'
                IMPORTING
                  ef_error_in_goods_issue_0 = lv_flag
                TABLES
                  prot                      = lt_prot
                  vbpok_tab                 = lt_vbpok_tab
                EXCEPTIONS
                  error_message             = 1
                  OTHERS                    = 2.
    
    
    
              LOOP AT lt_prot INTO DATA(ls_prot) WHERE msgty = 'E'.
                lv_flag = 'E'.
    
                CLEAR:lv_message1.
                MESSAGE ID ls_prot-msgid
                      TYPE ls_prot-msgty
                    NUMBER ls_prot-msgno
                      WITH ls_prot-msgv1 ls_prot-msgv2 ls_prot-msgv3 ls_prot-msgv4
                      INTO lv_message1.
                CONCATENATE lv_message lv_message1 INTO lv_message SEPARATED BY '/'.
              ENDLOOP.
    
              IF lv_flag = 'E'.
                "创建失败
                CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
    **状态跟新+回写落地表
                LOOP AT gt_doc ASSIGNING <gf_doc> WHERE ebeln = gs_key-ebeln.
                  <gf_doc>-cldat = sy-datum.
                  <gf_doc>-cltim = sy-uzeit.
                  <gf_doc>-clnam = sy-uname.
                  <gf_doc>-zstatus = 'E'.
                  <gf_doc>-zmessage = 'DN过账失败:' && lv_message.
                  <gf_doc>-icon  = '@5C@'.
                  PERFORM frm_update_db.
                ENDLOOP.
    
              ELSE.
                "创建成功
                CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
                  EXPORTING
                    wait = 'X'.
                SELECT SINGLE mblnr mjahr INTO (lv_mblnr,lv_mjahr)
                  FROM mseg WHERE vbeln_im = lv_delivery.
    
                LOOP AT gt_doc ASSIGNING <gf_doc> WHERE ebeln = gs_key-ebeln.
                  <gf_doc>-cldat = sy-datum.
                  <gf_doc>-cltim = sy-uzeit.
                  <gf_doc>-clnam = sy-uname.
    
                  <gf_doc>-mblnr = lv_mblnr.
                  <gf_doc>-mjahr = lv_mjahr.
                  <gf_doc>-zstatus = 'S'.
                  <gf_doc>-zdjzt = 'X'.
    *              <gf_doc>-zmessage = 'DN过账失败:' && lv_message.
                  <gf_doc>-icon  = '@5B@'.
                  PERFORM frm_update_db.
                ENDLOOP.
              ENDIF.
    
    ***状态跟新+回写落地表
    *          LOOP AT gt_doc ASSIGNING <gf_doc> WHERE ebeln = gs_key-ebeln.
    *            <gf_doc>-cldat = sy-datum.
    *            <gf_doc>-cltim = sy-uzeit.
    *            <gf_doc>-clnam = sy-uname.
    *            IF lv_flag = 'E'.
    *              <gf_doc>-zstatus = 'E'.
    *              <gf_doc>-zmessage = 'DN过账失败:' && lv_message.
    *              <gf_doc>-icon  = '@5C@'.
    *            ELSE.
    *              <gf_doc>-zstatus = 'S'.
    *              <gf_doc>-zmessage = 'DN过账成功'.
    *              <gf_doc>-icon = '@5B@'.
    ***怎么取凭证号
    *              <gf_doc>-mblnr = lv_delivery.
    *              <gf_doc>-mjahr = lv_mjahr.
    *            ENDIF.
    *
    *            PERFORM frm_update_db.
    *
    *          ENDLOOP.
    
            ELSE.
              "修改失败
              CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
              <gf_doc>-zmessage = '交货单修改失败'.
            ENDIF.
    
          ENDIF.
    
        ENDIF.
      ENDLOOP.
    
    
    *  "获取采购订单数据-行项目数据
    *  SELECT *
    *    FROM ekpo
    *    INTO TABLE @DATA(lt_ekpo)
    *   WHERE ebeln = @iv_ebeln."采购订单
    *  LOOP AT lt_ekpo INTO DATA(ls_ekpo).
    *
    *    ls_stock_items-ref_doc = ls_ekpo-ebeln."参考凭证
    *    ls_stock_items-ref_item = ls_ekpo-ebelp."参考项
    *    APPEND ls_stock_items TO lt_stock_items.
    *    ls_created_items-ref_doc = ls_ekpo-ebeln."参考凭证
    *    ls_created_items-ref_item = ls_ekpo-ebelp."参考项
    *    ls_created_items-material = ls_ekpo-matnr."物料编号
    *    ls_created_items-material_long = ls_ekpo-matnr."物料编号
    *    APPEND ls_created_items TO lt_created_items.
    *  ENDLOOP.
    *
    **  DATA(lv_flag) = 'Y'.
    **  EXPORT lv_flag TO  MEMORY ID 'ZPOS_LGORT_FLAG'.
    *  CALL FUNCTION 'BAPI_OUTB_DELIVERY_CREATE_STO'
    *    EXPORTING
    *      ship_point        = lv_vstel
    *      due_date          = lv_ledat
    *    IMPORTING
    *      delivery          = lv_delivery
    *    TABLES
    *      stock_trans_items = lt_stock_items
    *      created_items     = lt_created_items
    *      return            = lt_return.
    *  FREE MEMORY ID 'ZPOS_LGORT_FLAG'.
    *
    *  DELETE lt_return WHERE type = 'E' AND id = 'BAPI' AND number = '001'.
    *
    *  LOOP AT lt_return INTO DATA(ls_return) WHERE type = 'E'.
    *    CONCATENATE o_return-message ls_return-message INTO o_return-message SEPARATED BY '/'.
    *  ENDLOOP.
    *
    *  IF sy-subrc = 0.
    *
    *    "创建失败
    *    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
    *
    *    o_return-type = 'E'.
    *    CONCATENATE '交货单创建失败:' o_return-message INTO o_return-message.
    *
    *  ELSE.
    *
    *    "创建成功
    *    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
    *      EXPORTING
    *        wait = 'X'.
    *
    *    o_return-zdjh = lv_delivery."交货单
    *    o_return-type = 'S'.
    *    o_return-message = '交货单创建成功'.
    *
    *    ls_header_data-deliv_numb = lv_delivery.
    *    ls_header_ctrl-deliv_numb = lv_delivery.
    *
    *    SELECT *
    *      FROM lips
    *      INTO TABLE @DATA(lt_lips)
    *     WHERE vbeln = @lv_delivery.
    *
    *    LOOP AT lt_lips INTO DATA(ls_lips).
    *      ls_item_data-deliv_numb      = ls_lips-vbeln."交货
    *      ls_item_data-deliv_item      = ls_lips-posnr."交货项目
    *      ls_item_data-material        = ls_lips-matnr."物料编号
    *      ls_item_data-dlv_qty         = ''."越库业务:创建DN时,数量都变为0
    *      ls_item_data-fact_unit_nom   = ls_lips-umvkz.
    *      ls_item_data-fact_unit_denom = ls_lips-umvkn.
    *      APPEND ls_item_data TO lt_item_data.
    *      CLEAR:ls_item_data.
    *
    *      ls_item_data_spl-deliv_numb = ls_lips-vbeln."交货单
    *      ls_item_data_spl-deliv_item = ls_lips-posnr."交货单行项目
    *      ls_item_data_spl-stge_loc = ls_lips-lgort. "库存地点
    *      APPEND ls_item_data_spl TO lt_item_data_spl.
    *      CLEAR:ls_item_data_spl.
    *
    *      ls_item_control-deliv_numb = ls_lips-vbeln."交货单
    *      ls_item_control-deliv_item = ls_lips-posnr."交货单行项目
    *      ls_item_control-chg_delqty = 'X'.
    *      APPEND ls_item_control TO lt_item_control.
    *      CLEAR:ls_item_control.
    *
    *    ENDLOOP.
    *
    *    IF lt_item_data IS NOT INITIAL.
    *      CLEAR:lt_return.
    *
    *      CALL FUNCTION 'BAPI_OUTB_DELIVERY_CHANGE'
    *        EXPORTING
    *          header_data    = ls_header_data
    *          header_control = ls_header_ctrl
    *          delivery       = lv_delivery
    *        TABLES
    *          item_data      = lt_item_data
    *          item_data_spl  = lt_item_data_spl
    *          item_control   = lt_item_control
    *          return         = lt_return.
    *
    *      READ TABLE lt_return TRANSPORTING NO FIELDS WITH KEY type = 'E'.
    *      IF sy-subrc <> 0.
    *        CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
    *          EXPORTING
    *            wait = 'X'.
    *        o_return-message = '交货单创建成功/交货单修改成功'.
    *      ELSE.
    *        "修改失败
    *        CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
    *        o_return-message = '交货单创建成功/交货单修改失败'.
    *      ENDIF.
    *
    *    ENDIF.
    *
    *  ENDIF.
    
    ENDFORM.
  • 相关阅读:
    远程控制.scrcpy&其他资料&我的游戏辅助方案
    虚拟机.第三方.droid4x(海马玩)
    私.微信
    私.Modbus测试_ZC03_rtu,ascii,tcp
    Modbus资料
    私.Modbus测试_ZC02_串口方式
    私.Modbus测试_ZC01_TCP方式
    私.01.serialport
    C# Type Basics
    NORFLASH驱动详细说明
  • 原文地址:https://www.cnblogs.com/rainysblog/p/11009318.html
Copyright © 2011-2022 走看看