工艺路线批导

*&---------------------------------------------------------------------*
*& Report ZTEST_HZY_CS
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zppb104.
*&---------------------------------------------------------------------*
*& Report ZPPB104
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*

TABLES sscrfields.


************************************************************************
类型定义
************************************************************************
TYPES:BEGIN OF ty_data,

        material(18)        TYPE c,                          "物料
        KTEXT(40)           TYPE c,                           "物料描述
        plant(4)            TYPE c,                          "工厂
        valid_from(8)       TYPE c,                          "有效日期自
        plnnr(8)            TYPE c,                  "组号
        group_counter(2)    TYPE c,                          "组计数器
        task_list_usage(3)  TYPE c,                          "用途
        task_list_status(3TYPE c,                         "状态
        activity(4)         TYPE c,                          "工序编码(操作/活动编号)
        work_cntr(8)        TYPE c,                          "工作中心
        control_key(4)      TYPE c,                          "控制码
        ktsch(7)            TYPE c,                           "标准文本码
        description(40)     TYPE c,                          "工序描述
        base_quantity(13)   TYPE c,                          "基本数量
        std_value_01(9)     TYPE c,                          "标准值-人工
        std_value_02(9)     TYPE c,                          "标准值-制费(固定)
        std_value_03(9)     TYPE c,                          "标准值-制费(变动)
        std_value_04(9)     TYPE c,                          "标准值-能动
        message(40)         TYPE c,  创建反馈信息
        color               TYPE char4,
        box                 TYPE c,
      END OF ty_data.

TYPESBEGIN OF ty_mesg,
         light(4)     TYPE c,
         type(1)      TYPE c,
         material(18TYPE c,
         text(555)    TYPE c,
       END OF ty_mesg.

************************************************************************
内表声明
************************************************************************
TYPE-POOLS:slis,
           vrm,
           truxs,
           ole2
           .
DATAt_data TYPE STANDARD TABLE OF ty_data WITH HEADER LINE.
DATAt_temp TYPE STANDARD TABLE OF ty_data WITH HEADER LINE.
DATAfieldcat TYPE slis_t_fieldcat_alv WITH HEADER LINE,
      layout   TYPE slis_layout_alv,
      repname  LIKE sy-repid VALUE sy-repid.
DATAtask      TYPE bapi1012_tsk_c OCCURS WITH HEADER LINE,
      material  TYPE bapi1012_mtk_c OCCURS WITH HEADER LINE,
      sequence  TYPE bapi1012_seq_c OCCURS WITH HEADER LINE,
      operation TYPE bapi1012_opr_c OCCURS WITH HEADER LINE,
      return    TYPE bapiret2 OCCURS WITH HEADER LINE.
DATAgt_mesg TYPE STANDARD TABLE OF ty_mesg.
DATAgs_mesg TYPE ty_mesg.
DATAgt_raw TYPE truxs_t_text_data.


************************************************************************
全局变量声明
************************************************************************
DATAzmessage(80TYPE c.
DATAg_meins LIKE mara-meins.
DATAg_group         TYPE bapi1012_tsk_c-task_list_group,
      g_group_counter TYPE bapi1012_tsk_c-group_counter.

*** OLE EXCLE定义
DATAg_sheet       TYPE ole2_object,
      g_activesheet TYPE ole2_object,
      g_newsheet    TYPE ole2_object,
      g_appl        TYPE ole2_object,
      g_work        TYPE ole2_object,
      g_cell        TYPE ole2_object.


DEFINE add_field.
  CLEAR fieldcat.
  fieldcat-col_pos   &1.
  fieldcat-fieldname &2.
  fieldcat-seltext_l &3.
  fieldcat-icon      &4.
  APPEND fieldcat.
END-OF-DEFINITION.

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-002.
PARAMETERSp_file LIKE rlgrap-filename.
SELECTION-SCREEN FUNCTION KEY 1.
SELECTION-SCREEN END OF BLOCK b1.

*SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE  TEXT-001.
*
*
*PARAMETERS: p_upload TYPE c RADIOBUTTON GROUP g1 DEFAULT 'X',
*            p_down   TYPE c RADIOBUTTON GROUP g1.
*
*
*SELECTION-SCREEN END OF BLOCK b2.



************************************************************************
* Initialization
************************************************************************
INITIALIZATION.

SSCRFIELDS-FUNCTXT_01 '下载模板'.


************************************************************************
* AT SELECTION-SCREEN ON VALUE-REQUEST
************************************************************************
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
  PERFORM open_file .



************************************************************************
* at selection screen
************************************************************************
AT SELECTION-SCREEN.

*AT SELECTION-SCREEN.

  IF SY-UCOMM 'FC01'.
    PERFORM  download_template.           "下载模板
  ENDIF.

  IF SY-UCOMM 'ONLI'.
    PERFORM check_filename.           "检查选择条件必输
  ENDIF.


*AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_path.
*  PERFORM frm_get_filename.                    "选择文件

************************************************************************
* event Start of Selection
************************************************************************
START-OF-SELECTION.
*  PERFORM open_file .
*  PERFORM check_filename.   "文件检查

*  IF p_upload = 'X'.
    PERFORM get_data_from_file.   "
    PERFORM check_data.

*    PERFORM FILL_LIGHT.
    PERFORM build_fieldcat.
    PERFORM display_report.
*  ELSE.
*    PERFORM download_template.               "下载模板
*  ENDIF.


************************************************************************
*EVENT End-of selection
************************************************************************
END-OF-SELECTION.


*&---------------------------------------------------------------------*
*&      Form  OPEN_FILE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_P_FILE  text
*----------------------------------------------------------------------*
FORM open_file .
  DATAl_file         TYPE string,
        l_file_import  TYPE string,
        l_path_initial TYPE string,
        lt_file_table  TYPE filetable,
        lw_file        TYPE file_table,
        l_rc           TYPE i.

  CLEARl_file,
         l_file_import,
         l_path_initial,
         lt_file_table,
         lw_file,
         l_rc.

  l_file p_file.
*  IF p_upload = 'X'.

    CALL METHOD cl_gui_frontend_services=>file_open_dialog
      EXPORTING
        window_title     '选择模板下载路径'
*       default_extension =
        default_filename '工艺路线批量导入下载模板.XLSX'
        file_filter      'Excel 文件 (*.xls;*xlsx)|*.xls;*.xlsx'
*       with_encoding    =
*       initial_directory =
*       multiselection   =
      CHANGING
        file_table       lt_file_table
        rc               l_rc.

    .
    IF sy-subrc <> 0.
      MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                 WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    ENDIF.

    READ TABLE lt_file_table INTO lw_file INDEX 1.
    IF sy-subrc EQ 0.
      p_file lw_file-filename.
    ENDIF.

*  ELSE.

*    CALL METHOD cl_gui_frontend_services=>file_save_dialog
*      EXPORTING
*        file_filter       = 'Excel 文件 (*.xls;*xlsx)|*.xls;*.xlsx'
*        default_file_name = l_file
*        initial_directory = l_file
*      CHANGING
*        filename          = l_file_import
*        path              = l_path_initial
*        fullpath          = l_file
*      EXCEPTIONS
*        OTHERS            = 0.
*
*    p_file = l_file.
*  ENDIF.

ENDFORM" OPEN_FILE


*&---------------------------------------------------------------------*
*&      Form  BATCH_CREATE_ROUTING
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM
  batch_create_routing .
  DATA lv_char  TYPE opr_class_data_interface-vge02 VALUE 'KG',
         lv_meins TYPE mara-meins.
*
  .
  IF sy-subrc <> 0.

  ENDIF.



  DATA t_temp TYPE STANDARD TABLE OF ty_data WITH HEADER LINE.
  t_temp[] t_data[].
  DELETE t_temp WHERE box NE 'X' or COLOR 'C610'.
  DELETE ADJACENT DUPLICATES FROM t_temp COMPARING material plant plnnr group_counter.
datalv_sno TYPE char6 .
  LOOP AT t_temp[] INTO t_temp ."WHERE BOX = 'X' and color ne 'C610'.

    CLEAR:lv_meins.
    取得到单位



    PERFORM convert_input USING t_temp-material.
    PERFORM convert_input USING t_temp-activity.

    SELECT SINGLE meins
     INTO lv_meins
     FROM mara
     WHERE matnr t_temp-material.

*    AT END OF GROUP_COUNTER."MATERIAL.
    CLEAR task.
    SELECT SINGLE plnnr FROM mapl INTO task-task_list_group WHERE matnr t_temp-material
                                                              AND werks t_temp-plant .
*                                                                AND  plnnr = t_temp-plnnr.
    task-plant             t_temp-plant.     "工厂
    task-group_counter     t_temp-group_counter.
      TASK-DESCRIPTION       T_TEMP-KTEXT.
    task-task_measure_unit lv_meins.
*      TASK-TASK_MEASURE_UNIT_ISO = T_TEMP-TASK_MEASURE_UNIT.
    task-task_list_group  t_temp-plnnr任务清单组码
    task-task_list_usage   t_temp-task_list_usage.    "任务清单使用
    task-task_list_status  t_temp-task_list_status.    "状态
    task-valid_from        t_temp-valid_from.       "有效起始日期从
    task-valid_to_date     '99991231'.       "
    APPEND task.

    material-material     t_temp-material.
    material-plant        t_temp-plant.
    material-valid_from   t_temp-valid_from.
*    material-material_external = t_temp-maktx.
    material-group_counter t_temp-group_counter.
    material-valid_to_date '99991231'.
    APPEND material.

    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
      EXPORTING
        input  t_temp-material
      IMPORTING
        output t_temp-material.

  lv_sno '000000'.
    LOOP AT t_data[] INTO t_data WHERE  box 'X' AND material t_temp-material AND plant t_temp-plant

   AND plnnr t_temp-plnnr AND group_counter T_TEMP-group_counter  .
      PERFORM convert_input USING t_data-material.
      PERFORM convert_input USING t_data-activity.
      operation-task_list_group t_data-plnnr任务清单组码


      operation-group_counter   t_data-group_counter.     组计数器

      operation-activity      t_data-activity.              "工序编码
      operation-plant         t_data-plant.                 "工序工厂
      operation-work_cntr     t_data-work_cntr.             "工作中心
      operation-standard_text_key t_data-ktsch.
      TRANSLATE t_data-control_key TO UPPER CASE.
      operation-control_key   t_data-control_key.           "控制码
      operation-description   t_data-description.           "工序描述
      operation-base_quantity t_data-base_quantity.         "基本数量
      operation-valid_from    t_data-valid_from.            "有效起始日期从
      operation-valid_to_date '99991231'.                   "有效日期至


      operation-std_value_01  t_data-std_value_01.          "标准值2


      operation-std_value_02  t_data-std_value_02.          "标准值2


      operation-std_value_03  t_data-std_value_03.          "标准值2

      operation-std_value_04  t_data-std_value_04.          "标准值3


      operation-denominator   1.                            "用于转换工艺路线和工序单位的分母
      operation-nominator     1.                            "用于转换任务清单和工序计量单位的计数器
      operation-cost_relevant 'X'.                          "成本核算相关标识(默认与成本100%相关)
*    operation-operation_measure_unit =  lv_meins. " 单位
*     operation-TIME_UNIT = 'MIN'.
      operation-sequence_no lv_sno.
*      lv_sno = ''.
*      CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
*        EXPORTING
*          input         = lv_sno
*       IMPORTING
*         OUTPUT        = lv_sno
*                .

*    it_operation-insp_point_complt_flow_variant = T_DATA-qppktabs.    "检验点完成
      APPEND operation.

*        REFRESH operation[].
    ENDLOOP.
 CALL FUNCTION 'BAPI_ROUTING_CREATE'
*       EXPORTING
*          plnty                  = 'N'
      IMPORTING
        group                  t_temp-plnnr
        groupcounter           t_temp-group_counter
      TABLES
        task                   task[]
        materialtaskallocation material[]
        sequence               sequence[]
        operation              operation[]
        return                 return[].

    IF sy-subrc 0.
      PERFORM build_message.
      CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
      CLEAR gs_mesg.
      READ TABLE return INDEX 1.
      IF return-type 'S'.
        DATAcount(3TYPE c.
        DATAtotal TYPE i.
        gs_mesg-type 'S'.
        READ TABLE return INDEX 1.
        MOVE return-message_v2 TO zmessage.

        SELECT COUNT(*INTO total FROM mapl WHERE matnr t_temp-material AND werks t_temp-plant AND loekz <> 'X'  AND plnty 'N'.
        MOVE total TO count.
        CONCATENATE '物料:' t_temp-material 工厂:' t_temp-plant :' g_group 计数器:' g_group_counter '已经成功创建!现共有count '条工艺路线。INTO gs_mesg-text.
        gs_mesg-material t_temp-material.
        APPEND gs_mesg TO gt_mesg.
        CONCATENATE  '任务清单zmessage '创建成功INTO zmessage.
        t_temp-message zmessage.
        t_temp-color 'C510'.
        MODIFY t_temp[] FROM t_temp.
        CLEAR t_temp.
      ELSE.
        gs_mesg-type 'E'.
        READ TABLE return INDEX 2.
        MOVE return-message TO zmessage.
        CONCATENATE '物料:' t_temp-material 工厂:' t_temp-plant :' g_group 计数器:' g_group_counter 创建失败!请检查数据。原因:' zmessage INTO gs_mesg-text.
        gs_mesg-material t_temp-material.
        APPEND gs_mesg TO gt_mesg.
        t_temp-message zmessage.
        t_temp-color 'C610'.
        MODIFY t_temp[] FROM t_temp.
        CLEAR t_temp.
      ENDIF.
    ELSE.
      PERFORM build_message.
      CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
      gs_mesg-type 'E'.
      CONCATENATE '物料:' t_temp-material 工厂:' t_temp-plant :' g_group 计数器:' g_group_counter 创建失败!请检查数据。原因:' zmessage INTO gs_mesg-text.
      gs_mesg-material t_temp-material.
      APPEND gs_mesg TO gt_mesg.
      t_temp-message zmessage.
      t_temp-color 'C610'.
      MODIFY t_temp[] FROM t_temp.
      CLEAR t_temp.
    ENDIF.

    CLEAR zmessage.
    REFRESH task[].
    REFRESH material[].
    REFRESH sequence[].
    REFRESH operation[].
    REFRESH return[].

*    ENDAT.
  ENDLOOP.
  IF sy-subrc NE 0.
    MESSAGE '请至少选择一条有效数据TYPE'S' DISPLAY LIKE 'E'.
  ENDIF.
  LOOP AT t_temp[] INTO t_temp WHERE box 'X'.
    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
      EXPORTING
        input  t_temp-material
      IMPORTING
        output t_temp-material.
    LOOP AT t_data[] INTO t_data WHERE box 'X' AND material t_temp-material AND plant t_temp-plant.
*          AND plnnr = t_temp-plnnr AND group_counter = t_temp-group_counter.
*          t_data-message = '12'.
      IF sy-subrc 0.
        IF t_data-plnnr t_temp-plnnr AND T_DATA-group_counter T_TEMP-group_counter.
                t_data-message t_temp-message.
               t_data-color t_temp-color.
               MODIFY t_data[] FROM t_data.
               CLEAR t_data.
           ELSEIF T_DATA-PLNNR '' or T_DATA-group_counter ''.
              t_data-message t_temp-message.
               t_data-color t_temp-color.
               MODIFY t_data[] FROM t_data.
               CLEAR t_data.
        ENDIF.



      ENDIF.



    ENDLOOP.
  ENDLOOP.
  SORT t_data[] BY color.

ENDFORM" BATCH_CREATE_ROUTING


*&---------------------------------------------------------------------*
*&      Form  CONVERT_INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_T_DATA_MATERIAL  text
*----------------------------------------------------------------------*
FORM convert_input USING p_data.
  CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
    EXPORTING
      input  p_data
    IMPORTING
      output p_data.
ENDFORM" CONVERT_INPUT


*&---------------------------------------------------------------------*
*&      Form  GET_DATA_FROM_FILE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM get_data_from_file .
  CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
    EXPORTING
      i_line_header        'X'       " Not include file header
      i_tab_raw_data       gt_raw    " Work Table
      i_filename           p_file
    TABLES
      i_tab_converted_data t_data[]
    EXCEPTIONS
      conversion_failed    1
      OTHERS               2.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

  IF t_data[] IS INITIAL.
    MESSAGE s000(zjinguWITH '上传文件不包含任何有效数据DISPLAY LIKE 'E'.
    STOP.
  ENDIF.
ENDFORM" GET_DATA_FROM_FILE


*&---------------------------------------------------------------------*
*&      Form  CHECK_FILENAME
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM check_filename .
  DATA:l_hzm TYPE string,
       l_s1  TYPE string.

  IF p_file IS INITIAL.
    MESSAGE '路径不能为空TYPE 'S' DISPLAY LIKE 'E'.
    STOP.
  ENDIF.
  SPLIT p_file AT '.' INTO l_s1 l_hzm.

  IF l_hzm  <>  'XLS' AND l_hzm  <>  'xls'
    AND l_hzm  <>  'XLSX' AND l_hzm  <>  'xlsx'.
    MESSAGE '请输出正确的文件格式TYPE 'S' DISPLAY LIKE 'E'.
    STOP .
  ENDIF.

ENDFORM" CHECK_FILENAME


*&---------------------------------------------------------------------*
*&      Form  CHECK_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM check_data .
  LOOP AT t_data[] INTO t_data.
    CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'
      EXPORTING
        input  t_data-material
      IMPORTING
        output t_data-material
*     EXCEPTIONS
*       LENGTH_ERROR       = 1
*       OTHERS = 2
      .
    IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.

      CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
        EXPORTING
          input  t_data-group_counter
        IMPORTING
          output t_data-group_counter.


    "1、根据物料、工厂 MARC表检查物料是否存在,如不存在给出校验提示消息:物料不存在
    SELECT SINGLE matnr INTO t_data-material FROM marc
      WHERE matnr t_data-material
      AND   werks t_data-plant.
    IF sy-subrc <> 0.
      t_data-message '物料不存在'.
      t_data-color 'C610'.
      MODIFY t_data.
      CONTINUE.
    ENDIF.

    SELECT SINGLE matnr INTO t_data-material FROM mapl
      WHERE matnr t_data-material
      AND   werks t_data-plant
      AND   plnal t_data-group_counter
      AND   loekz ''
      AND   plnty 'R'.

    IF sy-subrc 0.
      t_data-message '工艺已存在不允许重复创建'.
      t_data-color 'C610'.
      MODIFY t_data[] FROM t_data.
      CONTINUE.
    ENDIF.

    SELECT SINGLE arbpl INTO t_data-work_cntr FROM crhd
      WHERE arbpl t_data-work_cntr.
    IF sy-subrc NE 0.
      t_data-message '工作中心不存在'.
      t_data-color 'C610'.
      MODIFY t_data[] FROM t_data.
      CONTINUE.
    ENDIF.
    IF t_data-plnnr ''.
      t_data-message '缺少必输组号'.
      t_data-color 'C610'.
      MODIFY t_data[] FROM t_data.
      CONTINUE.

    ENDIF.
    IF  t_data-group_counter ''.
       t_data-message '缺少必输组计数器'.
      t_data-color 'C610'.
      MODIFY t_data[] FROM t_data.
      CONTINUE.
    ENDIF.


    MODIFY t_data[] FROM t_data.
  ENDLOOP.
  LOOP AT t_data[] INTO t_data.
    CALL FUNCTION 'CONVERSION_EXIT_MATN1_OUTPUT'
      EXPORTING
        input  t_data-material
      IMPORTING
        output t_data-material
*     EXCEPTIONS
*       LENGTH_ERROR       = 1
*       OTHERS = 2
      .
    IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.
    MODIFY t_data[] FROM t_data.
    CLEAR t_data.
  ENDLOOP.


ENDFORM" CHECK_DATA


*&---------------------------------------------------------------------*
*&      Form  BUILD_MESSAGE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM build_message .
  CALL FUNCTION 'MESSAGE_TEXT_BUILD'
    EXPORTING
      msgid               sy-msgid
      msgnr               sy-msgno
      msgv1               sy-msgv1
      msgv2               sy-msgv2
      msgv3               sy-msgv3
      msgv4               sy-msgv4
    IMPORTING
      message_text_output zmessage.
ENDFORM" BUILD_MESSAGE


*&---------------------------------------------------------------------*
*&      Form  FILL_LIGHT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM fill_light .
  CLEAR gs_mesg.
  LOOP AT gt_mesg INTO gs_mesg.
    IF gs_mesg-type 'E' OR gs_mesg-type 'A'.
      gs_mesg-light '@0A@'"red light
    ELSEIF gs_mesg-type 'W' OR gs_mesg-type 'I'.
      gs_mesg-light '@09@'"yellow light
    ELSE.
      gs_mesg-light '@08@'"green light
    ENDIF.
    MODIFY gt_mesg FROM gs_mesg.
  ENDLOOP.
ENDFORM" FILL_LIGHT


*&---------------------------------------------------------------------*
*&      Form  BUILD_FIELDCAT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM build_fieldcat .
  add_field  1  'BOX'    '类型'     'X'.
  add_field  1  'MATERIAL'    '物料'     'X'.
  add_field  1  'KTEXT'    '工艺路线描述'     'X'.
  add_field  1  'PLANT'    '工厂'     'X'.
  add_field  1  'VALID_FROM'    '有效日期'     'X'.
  add_field  1  'PLNNR'    '组号'     'X'.
  add_field  1  'GROUP_COUNTER'    '组计数器'     'X'.
  add_field  1  'TASK_LIST_USAGE'    '用途'     'X'.
  add_field  1  'TASK_LIST_STATUS'    '状态'     'X'.
  add_field  1  'ACTIVITY'    '操作/活动'     'X'.
  add_field  1  'WORK_CNTR'    '工作中心'     'X'.
  add_field  1  'CONTROL_KEY'    '控制码'     'X'.
  add_field  1  'KTSCH'    '标准文本码'     'X'.
  add_field  1  'DESCRIPTION'    '工序短文本'     'X'.
  add_field  1  'BASE_QUANTITY'    '基本数量'     'X'.
  add_field  1  'STD_VALUE_01'    '标准值-人工'     'X'.
  add_field  1  'STD_VALUE_02'    '标准值-制费 (固定)'     'X'.
  add_field  1  'STD_VALUE_03'    '标准值-制费(变动)'     'X'.
  add_field  1  'STD_VALUE_04'    '标准值-能动'     'X'.
  add_field  1  'MESSAGE'    '创建反馈信息'     'X'.

ENDFORM" BUILD_FIELDCAT


*&---------------------------------------------------------------------*
*&      Form  DISPLAY_REPORT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM display_report .
  layout-box_fieldname  'BOX'.
  layout-zebra 'X'.
  layout-colwidth_optimize 'X'.
  layout-info_fieldname 'COLOR'.

  SORT t_data[] BY color.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      it_fieldcat              fieldcat[]
      i_callback_program       repname
      is_layout                layout
      i_save                   'A'
      i_callback_pf_status_set 'FRM_PF_STATUS'
      i_callback_user_command  'FRM_USER_COMMAND'
    TABLES
      t_outtab                 t_data.
ENDFORM" DISPLAY_REPORT
FORM frm_pf_status USING rt_extab TYPE slis_t_extab.
  SET PF-STATUS 'STANDARD'.
ENDFORM"FRM_PF_STATUS

FORM frm_user_command USING r_ucomm LIKE sy-ucomm
      rs_selfield TYPE slis_selfield.
  rs_selfield-refresh 'X'.
*&---刷新屏幕数据到内表
  DATAlr_grid1 TYPE REF TO cl_gui_alv_grid.
  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    IMPORTING
      e_grid lr_grid1.
  CALL METHOD lr_grid1->check_changed_data.
  CASE r_ucomm .
    WHEN 'SAVE'.
      PERFORM batch_create_routing.
      CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
        IMPORTING
          e_grid lr_grid1.
      CALL METHOD lr_grid1->check_changed_data.

  ENDCASE.



ENDFORM"FRM_USER_COMMAND

*&---------------------------------------------------------------------*
*&      Form  DOWNLOAD_TEMPLATE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM download_template .


DATAw_objdata     LIKE wwwdatatab,
          w_mime        LIKE w3mime,
          w_filename    TYPE string "VALUE '模板修改',
          w_fullpath    TYPE string "VALUE 'D:/SAPREPORT/',
          w_path        TYPE  string"VALUE 'D:/SAPREPORT/',
          w_destination LIKE rlgrap-filename,
          w_objnam      TYPE string,
          w_rc          LIKE sy-subrc,
          w_errtxt      TYPE string,
          w_action      TYPE i.
    DATA:w_objid TYPE wwwdatatab-objid,
         w_dest  LIKE sapb-sappfad.

    w_objid 'ZPPB104'.
    w_filename  '工艺路线导入模板'.

    CALL METHOD cl_gui_frontend_services=>file_save_dialog
      EXPORTING
        window_title         '下载导入模板'
        default_extension    'XLS'
        default_file_name    w_filename
      CHANGING
        filename             w_filename
        path                 w_path
        fullpath             w_fullpath
*        user_action          = w_action
      EXCEPTIONS
        cntl_error           1
        error_no_gui         2
        not_supported_by_gui 3
        OTHERS               4.

    IF sy-subrc AND w_action EQ 0.
      w_dest w_fullpath.
      CONDENSE w_objnam NO-GAPS.
      SELECT SINGLE relid objid
        INTO CORRESPONDING FIELDS OF w_objdata
        FROM wwwdata
      WHERE srtf2 AND relid 'MI' AND objid w_objid.
      IF sy-subrc NE OR w_objdata-objid EQ space.
        CONCATENATE '模板文件w_objnam '不存在INTO w_errtxt.
        MESSAGE w_errtxt TYPE 'I'.
      ENDIF.
      w_destination w_dest.
      CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
        EXPORTING
          key         w_objdata
          destination w_destination
        IMPORTING
          rc          w_rc.
      IF w_rc NE 0.
        CONCATENATE '模板文件:w_objnam '下载失败INTO w_errtxt.
        MESSAGE w_errtxt TYPE 'E'.
      ENDIF.
    ENDIF.


* CREATE OBJECT g_appl 'EXCEL.APPLICATION'.
*  SET PROPERTY OF g_appl 'VISIBLE' = 0.
*
*  CALL METHOD OF
*    g_appl
*      'WORKBOOKS' = g_work.
*  CALL METHOD OF
*    g_work
*      'Add' = g_work.
*
*  GET PROPERTY OF g_appl 'ActiveSheet' = g_activesheet.
*  SET PROPERTY OF g_activesheet 'Name' = '工艺路线模板'.
*
*  PERFORM fill_cell USING:
*        1 1 '物料' 27 1,
*        1 2 '工艺路线描述' 27 1,
*        1 3 '工厂' 27 1,
*        1 4 '有效日期自' 27 1,
*        1 5 '组号' 27 1,
*
*        1 6 '组计数器' 27 1,
*        1 7 '用途' 27 1,
*        1 8 '状态' 27 1,
*        1 9 '操作/活动' 27 1,
*        1 10 '工作中心' 27 1,
*        1 11 '控制码' 27 1,
*        1 12 '标准文本码' 27 1,
*        1 13 '工序短文本' 27 1,
*        1 14 '基本数量' 27 1,
*        1 15 '标准值-人工' 27 1,
*        1 16 '标准值-制费(固定)' 27 1,
*        1 17 '标准值-制费(变动)' 27 1,
*        1 18 '标准值-标准值-能动' 27 1.
*
*
*  "EXCEL文件别存为
*  CALL METHOD OF
*    g_work
*    'SAVEAS'
*    EXPORTING
*      #1 = p_file.
*
*  "关闭文件
*  CALL METHOD OF
*    g_work
*    'close'.
*
*  "退出EXCEL
*  CALL METHOD OF
*    g_appl
*    'QUIT'.
*  FREE OBJECT g_appl.
*
*  MESSAGE s000(zjingu) WITH '文件:' p_file ' 下载成功'.
ENDFORM" DOWNLOAD_TEMPLATE


*&---------------------------------------------------------------------*
*&      Form  FILL_CELL
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_1      text
*      -->P_1      text
*      -->P_0981   text
*      -->P_26     text
*      -->P_1      text
*----------------------------------------------------------------------*
FORM fill_cell USING fu_row
                       fu_column
                       fu_value
                       fu_color
                       fu_bold.

  DATAl_cell  TYPE ole2_object,
        l_color TYPE ole2_object,
        l_bold  TYPE ole2_object.

  "设置单元格内容
  CALL METHOD OF
       g_appl
       'Cells' l_cell
     EXPORTING
       #1      fu_row
       #2      fu_column.

  SET PROPERTY OF l_cell 'Value'       =  fu_value.

  "设置单元格颜色
*  GET PROPERTY OF L_CELL 'Interior'    = L_COLOR.
*  SET PROPERTY OF L_COLOR 'ColorIndex' = FU_COLOR.

  "设置单元格加粗
  GET PROPERTY OF l_cell 'Font' l_bold.
  SET PROPERTY OF l_bold 'Bold' fu_bold.

ENDFORM"fill_cell
*&---------------------------------------------------------------------*
*&      Form  UNIT_INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_T_DATA_TASK_MEASURE_UNIT  text
*----------------------------------------------------------------------*
FORM unit_input USING p_unit.
  CALL FUNCTION 'CONVERSION_EXIT_CUNIT_INPUT'
    EXPORTING
      input          p_unit
      language       sy-langu
    IMPORTING
      output         p_unit
    EXCEPTIONS
      unit_not_found 1
      OTHERS         2.
  IF sy-subrc <> 0.
* Implement suitable error handling here
  ENDIF.

ENDFORM.               " frm_display_alv
**&---------------------------------------------------------------------*

 

    1. 工艺路线批导bapi使用

CLEAR task.
    SELECT SINGLE plnnr FROM mapl INTO task-task_list_group WHERE matnr t_temp-material
                                                              
AND werks t_temp-plant .
*                                                                AND  plnnr = t_temp-plnnr.
    task-plant             t_temp-plant.     "工厂
    task-group_counter     t_temp-group_counter.
      TASK-DESCRIPTION       T_TEMP-KTEXT.
    task-task_measure_unit lv_meins.
*      TASK-TASK_MEASURE_UNIT_ISO = T_TEMP-TASK_MEASURE_UNIT.
    task-task_list_group  t_temp-plnnr任务清单组码
    task-task_list_usage   t_temp-task_list_usage.    "任务清单使用
    task-task_list_status  t_temp-task_list_status.    "状态
    task-valid_from        t_temp-valid_from.       "有效起始日期从
    task-valid_to_date     '99991231'.       "
    APPEND task.

    material-material     t_temp-material.
    material-plant        t_temp-plant.
    material-valid_from   t_temp-valid_from.
*    material-material_external = t_temp-maktx.
    material-group_counter t_temp-group_counter.
    material-valid_to_date '99991231'.
    APPEND material.

    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
      EXPORTING
        input  t_temp-material
      
IMPORTING
        output t_temp-material.

  lv_sno '000000'.
    LOOP AT t_data[] INTO t_data WHERE  box 'X' AND material t_temp-material AND plant t_temp-plant

   
AND plnnr t_temp-plnnr AND group_counter T_TEMP-group_counter  .
      PERFORM convert_input USING t_data-material.
      PERFORM convert_input USING t_data-activity.
      operation-task_list_group t_data-plnnr任务清单组码


      operation-group_counter   t_data-group_counter.     组计数器

      operation-activity      t_data-activity.              "工序编码
      operation-plant         t_data-plant.                 "工序工厂
      operation-work_cntr     t_data-work_cntr.             "工作中心
      operation-standard_text_key t_data-ktsch.
      TRANSLATE t_data-control_key TO UPPER CASE.
      operation-control_key   t_data-control_key.           "控制码
      operation-description   t_data-description.           "工序描述
      operation-base_quantity t_data-base_quantity.         "基本数量
      operation-valid_from    t_data-valid_from.            "有效起始日期从
      operation-valid_to_date '99991231'.                   "有效日期至


      operation-std_value_01  t_data-std_value_01.          "标准值2


      operation-std_value_02  t_data-std_value_02.          "标准值2


      operation-std_value_03  t_data-std_value_03.          "标准值2

      operation-std_value_04  t_data-std_value_04.          "标准值3


      operation-denominator   1.                            "用于转换工艺路线和工序单位的分母
      operation-nominator     1.                            "用于转换任务清单和工序计量单位的计数器
      operation-cost_relevant 'X'.                          "成本核算相关标识(默认与成本100%相关)
*    operation-operation_measure_unit =  lv_meins. " 单位
*     operation-TIME_UNIT = 'MIN'.
      operation-sequence_no lv_sno.
*      lv_sno = ''.
*      CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
*        EXPORTING
*          input         = lv_sno
*       IMPORTING
*         OUTPUT        = lv_sno
*                .

*    it_operation-insp_point_complt_flow_variant = T_DATA-qppktabs.    "检验点完成
      APPEND operation.

   CALL FUNCTION 'BAPI_ROUTING_CREATE'
*       EXPORTING
*          plnty                  = 'N'
      IMPORTING
        group                  t_temp-plnnr
        groupcounter           
t_temp-group_counter
      
TABLES
        task                   task[]
        materialtaskallocation 
material[]
        sequence               
sequence[]
        operation              
operation[]
        
return                 return[].
 

猜你喜欢

转载自blog.csdn.net/z_x_xing_/article/details/90201516