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.
  • 相关阅读:
    Zend Framework 2.1.5 中根据服务器的环境配置调用数据库等的不同配置
    在基于 Eclipse 的 IDE 中安装和使用 Emmet(ZenCoding)
    【翻译】Emmet(Zen Coding)官方文档 之六 自定义 Emmet
    【翻译】Emmet(Zen Coding)官方文档 之二 缩写
    【翻译】Emmet(Zen Coding)官方文档 之七 一览表
    【翻译】Emmet(Zen Coding)官方文档 之三 CSS 缩写
    【翻译】Emmet(Zen Coding)官方文档 之四 动作
    【翻译】Emmet(Zen Coding)官方文档 之一 web 编程的必备工具
    Zend Framework 2 时区设置警告问题的解决
    【翻译】Emmet (Zen Coding) 元素类型
  • 原文地址:https://www.cnblogs.com/rainysblog/p/11009318.html
Copyright © 2011-2022 走看看