ZPPRP028

*&---------------------------------------------------------------------*
*& Report ZPPRP028
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*

REPORT  zpprp028.
INCLUDE zpprp028top.
INCLUDE zpprp028alv.






*生成按钮
SELECTION-SCREEN: FUNCTION KEY 1,
                  FUNCTION KEY 2.
*初始化显示按钮
INITIALIZATION.
  comm_smp_dyntxt-icon_id   = icon_create.
  comm_smp_dyntxt-icon_text = '导入模版'.
  sscrfields-functxt_01 = comm_smp_dyntxt.

  comm_smp_dyntxt-icon_id   = icon_change.
  comm_smp_dyntxt-icon_text = '下载模版'.
  sscrfields-functxt_02 = comm_smp_dyntxt.





*自定义按钮点击事件
AT SELECTION-SCREEN.
  CASE sscrfields-ucomm.
    WHEN 'FC01'.
      IF comm_p_f = ''.
        MESSAGE '请选择模版' TYPE 'I'.
        EXIT.
      ENDIF.

      PERFORM func_itab_get_data."获取数据
      PERFORM func_alv_show.     "显示ALV
    WHEN 'FC02'.
      PERFORM func_004.
    WHEN OTHERS.
  ENDCASE.





*执行按钮点击事件
START-OF-SELECTION.
  IF comm_p_f = ''.
    MESSAGE '请选择模版' TYPE 'I'.
    EXIT.
  ENDIF.

  PERFORM func_itab_get_data."获取数据
  PERFORM func_alv_show.     "显示ALV

**&---------------------------------------------------------------------*
**& 包含               ZPPRP028TOP
**&---------------------------------------------------------------------*

TABLES: SSCRFIELDS."选择屏幕上的字段
TABLES: AFPO.
TABLES: MARA.
TABLES: MAKT.
TABLES: T001W.
TABLES: AFKO.

TYPE-POOLS: ICON."图标
DATA: COMM_SMP_DYNTXT TYPE SMP_DYNTXT."菜单制作器:动态文本的程序接口

DATA: BEGIN OF COMM_WTAB_001,
        KDAUF(10)," LIKE afpo-kdauf, "销售订单号
        KDPOS     LIKE AFPO-KDPOS, "销售订单行项目
        MATNR(18),"LIKE mara-matnr, "物料编码
        MAKTX     LIKE MAKT-MAKTX, "物料名称
        WERKS     LIKE T001W-WERKS, "生产工厂
        DAUAT     LIKE AFPO-DAUAT, "生产订单类型
        MENGE     TYPE STRING,          "数量
        MEINS     LIKE MARA-MEINS, "基本单位

        GSTRP     LIKE AFKO-GSTRP, "基本开始日期
        GLTRP     LIKE AFKO-GLTRP, "基本结束日期
        TERKZ     LIKE AFKO-TERKZ, "计划类型
        VERID     LIKE AFPO-VERID, "生产版本
        UEBTK     LIKE AFPO-UEBTK, "是否允许过量交货
        ZTEXT     TYPE STRING,     "长文本备注
        WEMPF     LIKE AFPO-WEMPF, "收货方
      END OF COMM_WTAB_001.
DATA: BEGIN OF COMM_WTAB_002,
        CHECK(1),
        KDAUF(10),"    LIKE afpo-kdauf, "销售订单号
        KDPOS     LIKE AFPO-KDPOS, "销售订单行项目
        MATNR(18),    "LIKE mara-matnr, "物料编码
        MAKTX     LIKE MAKT-MAKTX, "物料名称
        WERKS     LIKE T001W-WERKS, "生产工厂
        DAUAT     LIKE AFPO-DAUAT, "生产订单类型
        MENGE     TYPE STRING,          "数量
        MEINS     LIKE MARA-MEINS, "基本单位

        GSTRP     LIKE AFKO-GSTRP, "基本开始日期
        GLTRP     LIKE AFKO-GLTRP, "基本结束日期
        TERKZ     LIKE AFKO-TERKZ, "计划类型
        VERID     LIKE AFPO-VERID, "生产版本
        UEBTK     LIKE AFPO-UEBTK, "是否允许过量交货
        ZTEXT     TYPE STRING,     "长文本备注
        WEMPF     LIKE AFPO-WEMPF, "收货方
        ISOK      TYPE STRING,     "成功标记
        AUFNR     LIKE AFPO-AUFNR, "生产订单号
        ZMSG      TYPE STRING,     "提示
      END OF COMM_WTAB_002.
DATA: BEGIN OF COMM_WTAB_003,
        DISPO LIKE MARC-DISPO,
      END OF COMM_WTAB_003.
DATA: BEGIN OF COMM_WTAB_004,
        MATNR LIKE MAKT-MATNR,
        MAKTX LIKE MAKT-MAKTX,
      END OF COMM_WTAB_004.
DATA: BEGIN OF COMM_WTAB_005,
        VBELN LIKE KDST-VBELN,
        VBPOS LIKE KDST-VBPOS,
        MATNR LIKE KDST-MATNR,
      END OF COMM_WTAB_005.


DATA: COMM_ALV_ITAB LIKE TABLE OF COMM_WTAB_002 WITH HEADER LINE.

PARAMETERS: COMM_P_F TYPE RLGRAP-FILENAME.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR COMM_P_F.
  CALL FUNCTION 'WS_FILENAME_GET'
    EXPORTING
      MASK             = ',EXCEL FILE,*.XLS;*.XLSX;'
      MODE             = 'O'
    IMPORTING
      FILENAME         = COMM_P_F
    EXCEPTIONS
      INV_WINSYS       = 1
      NO_BATCH         = 2
      SELECTION_CANCEL = 3
      SELECTION_ERROR  = 4
      OTHERS           = 5.

*&---------------------------------------------------------------------*
*& 包含               ZPPRP028ALV
*&---------------------------------------------------------------------*










*---------------------------------------------------------------------*
*                             ALV字段显示控制
*---------------------------------------------------------------------*
FORM COMM_ALV_FIELD_INIT TABLES FUNC_LVC_T_FCAT TYPE LVC_T_FCAT USING
      FUNC_FIELDNAME  TYPE C            " 字段名
      FUNC_SCRTEXT_M  TYPE C            " 标题
      FUNC_COL_POS    TYPE I            " 所在列
      FUNC_OUTPUTLEN  TYPE I            " 输出长度
      FUNC_EMPHASIZE  TYPE C            " 高亮显示
      FUNC_KEY        TYPE C            " 主键
      FUNC_CHECKBOX   TYPE C            " 显示checkbox
      FUNC_EDIT       TYPE C            " 是否可编辑
      FUNC_FIX_COLUMN TYPE C            " 固定列
      FUNC_NO_ZERO    TYPE C            " 为输出隐藏零
      .

  DATA: FUNC_LVC_S_FCAT TYPE LVC_S_FCAT.
  FUNC_LVC_S_FCAT-FIELDNAME   = FUNC_FIELDNAME.
  FUNC_LVC_S_FCAT-SCRTEXT_M   = FUNC_SCRTEXT_M.
  FUNC_LVC_S_FCAT-COL_POS     = FUNC_COL_POS.
  FUNC_LVC_S_FCAT-OUTPUTLEN   = FUNC_OUTPUTLEN.
  FUNC_LVC_S_FCAT-EMPHASIZE   = FUNC_EMPHASIZE.
  FUNC_LVC_S_FCAT-KEY         = FUNC_KEY.
  FUNC_LVC_S_FCAT-CHECKBOX    = FUNC_CHECKBOX.
  FUNC_LVC_S_FCAT-EDIT        = FUNC_EDIT.
  FUNC_LVC_S_FCAT-FIX_COLUMN  = FUNC_FIX_COLUMN.
  FUNC_LVC_S_FCAT-NO_ZERO     = FUNC_NO_ZERO.

  APPEND FUNC_LVC_S_FCAT TO FUNC_LVC_T_FCAT.
  CLEAR  FUNC_LVC_S_FCAT.
ENDFORM.










*---------------------------------------------------------------------*
*                             绑定按钮
*---------------------------------------------------------------------*
FORM FUNC_ALV_BTN_INIT USING
  FUNC_SLIS_T_EXTAB TYPE SLIS_T_EXTAB
  .

  SET PF-STATUS 'ZPPRP028STATUS' EXCLUDING FUNC_SLIS_T_EXTAB.
ENDFORM.

*---------------------------------------------------------------------*
*                             绑定按钮事件
*---------------------------------------------------------------------*
FORM FUNC_ALV_BTN_EVENT USING
  FUNC_SY_UCOMM LIKE SY-UCOMM
  FUNC_SLIS_SELFIELD TYPE SLIS_SELFIELD
  .

  DATA: FUNC_CL_GUI_ALV_GRID TYPE REF TO CL_GUI_ALV_GRID.

  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    IMPORTING
      E_GRID = FUNC_CL_GUI_ALV_GRID.

  CALL METHOD FUNC_CL_GUI_ALV_GRID->CHECK_CHANGED_DATA.

  FUNC_SLIS_SELFIELD-REFRESH = 'X'.

  READ TABLE COMM_ALV_ITAB INDEX FUNC_SLIS_SELFIELD-TABINDEX.

  CASE FUNC_SY_UCOMM.
    WHEN '&FUNC_001'.
      PERFORM FUNC_001.
    WHEN '&FUNC_002'.
      PERFORM FUNC_002.
    WHEN '&FUNC_003'.
      PERFORM FUNC_003.
    WHEN '&FUNC_005'.
      PERFORM FUNC_001.
    WHEN OTHERS.
  ENDCASE.

  CLEAR:FUNC_SY_UCOMM.
ENDFORM.

*---------------------------------------------------------------------*
*                             显示ALV
*---------------------------------------------------------------------*
FORM FUNC_ALV_SHOW.
  DATA: FUNC_LVC_S_FCAT TYPE TABLE OF LVC_S_FCAT WITH HEADER LINE."设定输出目录

  DATA: FUNC_LVC_S_LAYO TYPE LVC_S_LAYO."对输出样式的设定
  FUNC_LVC_S_LAYO-CWIDTH_OPT = 'X'.
  FUNC_LVC_S_LAYO-CWIDTH_OPT = 'X'.
  FUNC_LVC_S_LAYO-STYLEFNAME = 'FIELD_STYLE'.

  PERFORM COMM_ALV_FIELD_INIT TABLES FUNC_LVC_S_FCAT USING 'CHECK' '选择'                    '' '' '' '' 'X' 'X' '' ''.
  PERFORM COMM_ALV_FIELD_INIT TABLES FUNC_LVC_S_FCAT USING 'KDAUF' '销售订单号'              '' '' '' '' '' '' '' ''.
  PERFORM COMM_ALV_FIELD_INIT TABLES FUNC_LVC_S_FCAT USING 'KDPOS' '销售订单行项目'          '' '' '' '' '' '' '' ''.
  PERFORM COMM_ALV_FIELD_INIT TABLES FUNC_LVC_S_FCAT USING 'MATNR' '物料编码'                '' '' '' '' '' '' '' ''.
  PERFORM COMM_ALV_FIELD_INIT TABLES FUNC_LVC_S_FCAT USING 'MAKTX' '物料名称'                '' '' '' '' '' '' '' ''.
  PERFORM COMM_ALV_FIELD_INIT TABLES FUNC_LVC_S_FCAT USING 'WERKS' '生产工厂'                '' '' '' '' '' '' '' ''.
  PERFORM COMM_ALV_FIELD_INIT TABLES FUNC_LVC_S_FCAT USING 'DAUAT' '生产订单类型'            '' '' '' '' '' '' '' ''.
  PERFORM COMM_ALV_FIELD_INIT TABLES FUNC_LVC_S_FCAT USING 'MENGE' '数量'                    '' '' '' '' '' '' '' ''.
  PERFORM COMM_ALV_FIELD_INIT TABLES FUNC_LVC_S_FCAT USING 'MEINS' '基本单位'                '' '' '' '' '' '' '' ''.
  PERFORM COMM_ALV_FIELD_INIT TABLES FUNC_LVC_S_FCAT USING 'GSTRP' '基本开始日期'            '' '' '' '' '' '' '' ''.
  PERFORM COMM_ALV_FIELD_INIT TABLES FUNC_LVC_S_FCAT USING 'GLTRP' '基本结束日期'            '' '' '' '' '' '' '' ''.
  PERFORM COMM_ALV_FIELD_INIT TABLES FUNC_LVC_S_FCAT USING 'TERKZ' '计划类型'                '' '' '' '' '' '' '' ''.
  PERFORM COMM_ALV_FIELD_INIT TABLES FUNC_LVC_S_FCAT USING 'VERID' '生产版本'                '' '' '' '' '' '' '' ''.
  PERFORM COMM_ALV_FIELD_INIT TABLES FUNC_LVC_S_FCAT USING 'UEBTK' '是否允许过量交货'        '' '' '' '' '' '' '' ''.
  PERFORM COMM_ALV_FIELD_INIT TABLES FUNC_LVC_S_FCAT USING 'ZTEXT' '长文本备注'              '' '' '' '' '' '' '' ''.
  PERFORM COMM_ALV_FIELD_INIT TABLES FUNC_LVC_S_FCAT USING 'UEBTK' '是否允许过量交货'        '' '' '' '' '' '' '' ''.
  PERFORM COMM_ALV_FIELD_INIT TABLES FUNC_LVC_S_FCAT USING 'WEMPF' '收货方'                  '' '' '' '' '' '' '' ''.
  PERFORM COMM_ALV_FIELD_INIT TABLES FUNC_LVC_S_FCAT USING 'ISOK'  '是否成功'                '' '' '' '' '' '' '' ''.
  PERFORM COMM_ALV_FIELD_INIT TABLES FUNC_LVC_S_FCAT USING 'AUFNR' '生产订单号'              '' '' '' '' '' '' '' ''.
  PERFORM COMM_ALV_FIELD_INIT TABLES FUNC_LVC_S_FCAT USING 'ZMSG'  '系统返回的错误提示信息'  '' '' '' '' '' '' '' ''.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      I_CALLBACK_PROGRAM       = SY-CPROG
      I_CALLBACK_PF_STATUS_SET = 'FUNC_ALV_BTN_INIT'        "绑定按钮
      I_CALLBACK_USER_COMMAND  = 'FUNC_ALV_BTN_EVENT'       "自定义工具栏的事件
      IT_FIELDCAT_LVC          = FUNC_LVC_S_FCAT[]
      IS_LAYOUT_LVC            = FUNC_LVC_S_LAYO
    TABLES
      T_OUTTAB                 = COMM_ALV_ITAB              "ALV 输出的内表
    EXCEPTIONS
      PROGRAM_ERROR            = 1
                                 OTHERS.
ENDFORM.

*---------------------------------------------------------------------*
*                             itab赋值
*---------------------------------------------------------------------*
FORM FUNC_ITAB_GET_DATA.
  DATA: FUNC_ITAB LIKE TABLE OF COMM_WTAB_001 WITH HEADER LINE.
  DATA: FUNC_TRUXS_T_TEXT_DATA TYPE TRUXS_T_TEXT_DATA.

  CLEAR: COMM_ALV_ITAB, COMM_ALV_ITAB[], FUNC_ITAB, FUNC_ITAB[].
  CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
    EXPORTING
      I_LINE_HEADER        = 'X'
      I_TAB_RAW_DATA       = FUNC_TRUXS_T_TEXT_DATA
      I_FILENAME           = COMM_P_F
    TABLES
      I_TAB_CONVERTED_DATA = FUNC_ITAB
    EXCEPTIONS
      CONVERSION_FAILED    = 1
      OTHERS               = 2.



  DATA: FUNC_TMP_DAUAT                      LIKE AFPO-DAUAT."生产订单类型
  DATA: FUNC_TMP_WEMPF                      LIKE AFPO-WEMPF."收货方
  DATA: FUNC_MARC_ITAB LIKE TABLE OF COMM_WTAB_003 WITH HEADER LINE.
  DATA: FUNC_MAKT_ITAB LIKE TABLE OF COMM_WTAB_004 WITH HEADER LINE.
  DATA: FUNC_KDST_ITAB LIKE TABLE OF COMM_WTAB_005 WITH HEADER LINE.
  DATA: MSG TYPE STRING.

  LOOP AT FUNC_ITAB.

    CLEAR: FUNC_TMP_DAUAT,FUNC_TMP_WEMPF, FUNC_MARC_ITAB, FUNC_MAKT_ITAB, FUNC_KDST_ITAB.

    COMM_ALV_ITAB-CHECK = 'X'.
    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' "前导0  销售订单号
      EXPORTING
        INPUT  = FUNC_ITAB-KDAUF
      IMPORTING
        OUTPUT = COMM_ALV_ITAB-KDAUF.
    COMM_ALV_ITAB-KDPOS = FUNC_ITAB-KDPOS."销售订单行项目
    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' "前导0  物料编码
      EXPORTING
        INPUT  = FUNC_ITAB-MATNR
      IMPORTING
        OUTPUT = COMM_ALV_ITAB-MATNR.









    "-----------------------------------------采购类型为F 不用创建-----------------------------------------
    DATA: TMPBESKZ TYPE CHAR1.
    CLEAR: TMPBESKZ.
    SELECT SINGLE MARC~BESKZ INTO TMPBESKZ FROM MARC WHERE MARC~MATNR = COMM_ALV_ITAB-MATNR AND MARC~BESKZ = 'F'.
    IF TMPBESKZ IS NOT INITIAL."找到数据 跳过 不创建







    ELSE.
















      "-----------------------------------------销售订单行项目校验-----------------------------------------
      IF FUNC_ITAB-KDAUF IS NOT INITIAL."有销售订单
        SELECT
        KDST~VBELN
        KDST~VBPOS
        KDST~MATNR
        INTO CORRESPONDING FIELDS OF TABLE  FUNC_KDST_ITAB
        FROM KDST
        WHERE
            KDST~VBELN = COMM_ALV_ITAB-KDAUF
        AND KDST~VBPOS = FUNC_ITAB-KDPOS
        AND KDST~MATNR = COMM_ALV_ITAB-MATNR
        .

        IF SY-SUBRC IS NOT INITIAL.
          CLEAR: MSG.
          CONCATENATE '没有找到相关销售订单数据,请检查' ',销售订单:' COMM_ALV_ITAB-KDAUF ',行号:' FUNC_ITAB-KDPOS ',物料号:' COMM_ALV_ITAB-MATNR INTO MSG.
          MESSAGE MSG TYPE 'I'.
          STOP.
        ENDIF.
      ENDIF.










      COMM_ALV_ITAB-MAKTX = FUNC_ITAB-MAKTX."物料名称
      SELECT
      MAKT~MATNR
      MAKT~MAKTX
      INTO CORRESPONDING FIELDS OF TABLE FUNC_MAKT_ITAB
      FROM MAKT
*    WHERE matnr = func_itab-matnr
      WHERE MATNR = COMM_ALV_ITAB-MATNR
      .
      IF SY-SUBRC IS INITIAL.
        LOOP AT FUNC_MAKT_ITAB.
          COMM_ALV_ITAB-MAKTX = FUNC_MAKT_ITAB-MAKTX."物料名称
        ENDLOOP.
      ENDIF.




      COMM_ALV_ITAB-WERKS = FUNC_ITAB-WERKS."生产工厂



      IF FUNC_ITAB-KDAUF IS NOT INITIAL."有销售订单
        FUNC_TMP_DAUAT = 'ZP05'.
      ELSE.
        SELECT DISPO
        INTO CORRESPONDING FIELDS OF TABLE FUNC_MARC_ITAB
        FROM MARC
        WHERE MATNR = COMM_ALV_ITAB-MATNR AND DISPO = '001'.
        IF SY-SUBRC IS INITIAL."物料需求计划控制员 001
          FUNC_TMP_DAUAT = 'ZP05'.
        ELSE.
          FUNC_TMP_DAUAT = FUNC_ITAB-DAUAT.
        ENDIF.
      ENDIF.



      COMM_ALV_ITAB-DAUAT = FUNC_TMP_DAUAT."生产订单类型



      COMM_ALV_ITAB-MENGE = FUNC_ITAB-MENGE."数量
      COMM_ALV_ITAB-MEINS = FUNC_ITAB-MEINS."基本单位
      COMM_ALV_ITAB-GSTRP = FUNC_ITAB-GSTRP."基本开始日期
      COMM_ALV_ITAB-GLTRP = FUNC_ITAB-GLTRP."基本结束日期
      COMM_ALV_ITAB-TERKZ = FUNC_ITAB-TERKZ."计划类型







      "-----------------------------------------获取生产版本-----------------------------------------
*    COMM_ALV_ITAB-VERID = FUNC_ITAB-VERID."生产版本
      DATA: TMPVERID TYPE CHAR4.
      CLEAR: TMPVERID.
      SELECT
        SINGLE MKAL~VERID INTO TMPVERID
        FROM MAPL
        INNER JOIN MKAL
        ON  MAPL~MATNR = MKAL~MATNR
        AND MAPL~PLNNR = MKAL~PLNNR
        AND MAPL~WERKS = MKAL~WERKS
        WHERE
            MAPL~VBELN = COMM_ALV_ITAB-KDAUF
        AND MAPL~POSNR = FUNC_ITAB-KDPOS
        AND MAPL~MATNR = COMM_ALV_ITAB-MATNR.

      IF TMPVERID IS NOT INITIAL."找到数据"
        COMM_ALV_ITAB-VERID = TMPVERID."生产版本
      ELSE.
        CLEAR: MSG.
        CONCATENATE '请维护好生产版本,请检查' ',销售订单:' COMM_ALV_ITAB-KDAUF ',行号:' FUNC_ITAB-KDPOS ',物料号:' COMM_ALV_ITAB-MATNR INTO MSG.
        MESSAGE MSG TYPE 'I'.
        STOP.
      ENDIF.












      COMM_ALV_ITAB-UEBTK = FUNC_ITAB-UEBTK."是否允许过量交货
      COMM_ALV_ITAB-ZTEXT = FUNC_ITAB-ZTEXT."长文本备注


      FUNC_TMP_WEMPF = FUNC_ITAB-WEMPF.
      TRANSLATE FUNC_TMP_WEMPF TO UPPER CASE."强制转大写
      COMM_ALV_ITAB-WEMPF = FUNC_TMP_WEMPF."收货方

      APPEND COMM_ALV_ITAB.


























    ENDIF.
  ENDLOOP.
ENDFORM.

FORM FUNC_001.
  COMM_ALV_ITAB-CHECK = 'X'.
  MODIFY COMM_ALV_ITAB FROM COMM_ALV_ITAB
  TRANSPORTING CHECK WHERE CHECK = ''.
  CLEAR COMM_ALV_ITAB.
ENDFORM.

FORM FUNC_002.
  COMM_ALV_ITAB-CHECK = ''.
  MODIFY COMM_ALV_ITAB FROM COMM_ALV_ITAB
  TRANSPORTING CHECK WHERE CHECK = 'X'.
  CLEAR COMM_ALV_ITAB.
ENDFORM.

FORM FUNC_003.
  READ TABLE COMM_ALV_ITAB WITH KEY CHECK = 'X'. "是否有选中的记录
  IF SY-SUBRC <> 0.
    MESSAGE '请选择' TYPE 'S'.
    RETURN.
  ENDIF.





  DATA: FUNC_BAPI_PP_ORDER_CREATE                TYPE BAPI_PP_ORDER_CREATE.
  DATA: FUNC_BAPIRET2                            TYPE BAPIRET2.
  DATA: FUNC_BAPI_ORDER_NUMBER                   TYPE BAPI_ORDER_KEY-ORDER_NUMBER.
  DATA: FUNC_THEAD_TDNAME                        TYPE THEAD-TDNAME.
  DATA: FUNC_TLINE                               TYPE TLINE.
  DATA: FUNC_TLINE_TB                            TYPE TABLE OF TLINE.









  LOOP AT COMM_ALV_ITAB  WHERE CHECK NE ''.
    IF COMM_ALV_ITAB[] IS NOT INITIAL.
      FUNC_BAPI_PP_ORDER_CREATE-SALES_ORDER	        = COMM_ALV_ITAB-KDAUF."销售订单号
      FUNC_BAPI_PP_ORDER_CREATE-SALES_ORDER_ITEM    = COMM_ALV_ITAB-KDPOS."销售订单行项目
      FUNC_BAPI_PP_ORDER_CREATE-MATERIAL            = COMM_ALV_ITAB-MATNR."物料编码
      FUNC_BAPI_PP_ORDER_CREATE-PLANT	              = COMM_ALV_ITAB-WERKS."生产工厂
      FUNC_BAPI_PP_ORDER_CREATE-ORDER_TYPE          = COMM_ALV_ITAB-DAUAT."生产订单类型
      FUNC_BAPI_PP_ORDER_CREATE-QUANTITY            = COMM_ALV_ITAB-MENGE."数量
      FUNC_BAPI_PP_ORDER_CREATE-BASIC_START_DATE    = COMM_ALV_ITAB-GSTRP."基本开始日期
      FUNC_BAPI_PP_ORDER_CREATE-BASIC_END_DATE      = COMM_ALV_ITAB-GLTRP."基本结束日期
*      func_bapi_pp_order_create-order_type          = comm_alv_itab-terkz."计划类型
      FUNC_BAPI_PP_ORDER_CREATE-ROUTING_TYPE        = COMM_ALV_ITAB-TERKZ."计划类型
      FUNC_BAPI_PP_ORDER_CREATE-PROD_VERSION        = COMM_ALV_ITAB-VERID."生产版本
*      func_bapi_pp_order_create-goods_recipient     = comm_alv_itab-wempf."收货方
      FUNC_BAPI_PP_ORDER_CREATE-STORAGE_LOCATION     = COMM_ALV_ITAB-WEMPF."收货方

      CALL FUNCTION 'CONVERSION_EXIT_CUNIT_INPUT' "单位
        EXPORTING
          INPUT          = COMM_ALV_ITAB-MEINS
        IMPORTING
          OUTPUT         = FUNC_BAPI_PP_ORDER_CREATE-QUANTITY_UOM
        EXCEPTIONS
          UNIT_NOT_FOUND = 1
          OTHERS         = 2.
      IF SY-SUBRC <> 0.

      ENDIF.





      CALL FUNCTION 'BAPI_PRODORD_CREATE'
        EXPORTING
          ORDERDATA    = FUNC_BAPI_PP_ORDER_CREATE
        IMPORTING
          RETURN       = FUNC_BAPIRET2
          ORDER_NUMBER = FUNC_BAPI_ORDER_NUMBER.

      IF FUNC_BAPIRET2-TYPE <> ''.
        LOOP AT COMM_ALV_ITAB WHERE KDAUF = COMM_ALV_ITAB-KDAUF AND KDPOS = COMM_ALV_ITAB-KDPOS AND MATNR = COMM_ALV_ITAB-MATNR.
          COMM_ALV_ITAB-ISOK = '失败'.
          COMM_ALV_ITAB-AUFNR = ''.
          COMM_ALV_ITAB-ZMSG  = FUNC_BAPIRET2-MESSAGE.
          MODIFY COMM_ALV_ITAB.
        ENDLOOP.
      ELSE.
        LOOP AT COMM_ALV_ITAB WHERE KDAUF = COMM_ALV_ITAB-KDAUF AND KDPOS = COMM_ALV_ITAB-KDPOS AND MATNR = COMM_ALV_ITAB-MATNR.
          COMM_ALV_ITAB-ISOK = '成功'.
          COMM_ALV_ITAB-AUFNR = FUNC_BAPI_ORDER_NUMBER.
          COMM_ALV_ITAB-ZMSG  = ''.
          MODIFY COMM_ALV_ITAB.
        ENDLOOP.


*        手动修改
        WAIT UP TO 1 SECONDS.
        UPDATE AFKO
        SET GSTRP = COMM_ALV_ITAB-GSTRP
        GLTRP = COMM_ALV_ITAB-GLTRP
        TERKZ = COMM_ALV_ITAB-TERKZ
        WHERE AUFNR = FUNC_BAPI_ORDER_NUMBER.
        COMMIT WORK.


        "长文本备注
        CONCATENATE SY-MANDT FUNC_BAPI_ORDER_NUMBER INTO FUNC_THEAD_TDNAME.
        FUNC_TLINE-TDFORMAT = 1.
        FUNC_TLINE-TDLINE = COMM_ALV_ITAB-ZTEXT.
        APPEND FUNC_TLINE TO FUNC_TLINE_TB.

        CALL FUNCTION 'CREATE_TEXT'
          EXPORTING
            FID       = 'KOPF'
            FLANGUAGE = SY-LANGU
            FNAME     = FUNC_THEAD_TDNAME
            FOBJECT   = 'AUFK'
          TABLES
            FLINES    = FUNC_TLINE_TB
          EXCEPTIONS
            NO_INIT   = 1
            NO_SAVE   = 2
            OTHERS    = 3.

        IF SY-SUBRC = 0.
          CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
            EXPORTING
              WAIT = 'X'.

*          WAIT UP TO 1 SECONDS.
          UPDATE AUFK SET LTEXT = '1' WHERE AUFNR = FUNC_BAPI_ORDER_NUMBER.
*          COMMIT WORK.
        ELSE.
          CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
        ENDIF.



      ENDIF.
    ENDIF.

    CLEAR: FUNC_BAPI_PP_ORDER_CREATE, FUNC_BAPIRET2, FUNC_BAPI_ORDER_NUMBER, FUNC_THEAD_TDNAME, FUNC_TLINE, FUNC_TLINE_TB.
  ENDLOOP.
ENDFORM.

FORM FUNC_004.
  DATA: FUNC_WWWDATATAB      LIKE WWWDATATAB,
        FUNC_RLGRAP_FILENAME TYPE RLGRAP-FILENAME.

  CALL FUNCTION 'WS_FILENAME_GET'
    EXPORTING
      DEF_FILENAME     = 'ZPPRP028模版.xls'
      MASK             = '.xls;'
      MODE             = 'S'
      TITLE            = '下载'
    IMPORTING
      FILENAME         = FUNC_RLGRAP_FILENAME
    EXCEPTIONS
      SELECTION_CANCEL = 1
      OTHERS           = 2.

  SELECT SINGLE * INTO CORRESPONDING FIELDS OF FUNC_WWWDATATAB FROM WWWDATA WHERE OBJID = 'ZPPRP028'.

  CALL FUNCTION 'DOWNLOAD_WEB_OBJECT' "
    EXPORTING
      KEY         = FUNC_WWWDATATAB
      DESTINATION = FUNC_RLGRAP_FILENAME.
ENDFORM.

猜你喜欢

转载自blog.csdn.net/low584710047/article/details/79253058