检验计划批量导入

 

 

*&---------------------------------------------------------------------*
*& Report ZSDR0001
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZPPR0031.


INCLUDE ZPPR0031_TOP.

INCLUDE ZPPR0031_SCR.

INCLUDE ZPPR0031_FRM.

*---------------------------------------------------------------------*
* INITIALIZATION                                                      *
*                                                        *
*---------------------------------------------------------------------*

INITIALIZATION.

  PERFORM frm_screen_initial.
*---------------------------------------------------------------------*
* AT SELECTION-SCREEN  ON VALUE-REQUEST                               *
*                                                                     *
*---------------------------------------------------------------------*
AT SELECTION-SCREEN.
  CASE sy-ucomm.
    WHEN 'ONLI'.
    WHEN OTHERS.
      CASE sscrfields-ucomm.
        WHEN 'FC01'.
          PERFORM frm_download_module.
      ENDCASE.
  ENDCASE.

*---------------------------------------------------------------------*
* AT SELECTION-SCREEN OUTPUT                                          *
*                                                                     *
*---------------------------------------------------------------------*
AT SELECTION-SCREEN OUTPUT.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR pa_path.
  "获取文件地址搜索帮助
  PERFORM frm_get_fielpath.

*---------------------------------------------------------------------*
* START-OF-SELECTION
*---------------------------------------------------------------------*
START-OF-SELECTION.

  PERFORM frm_upload_data.                    "加载外部数据
  PERFORM frm_deal_data.                      "处理数据
  PERFORM frm_alv_layout_build.              "设置ALV整体布局
  PERFORM frm_alv_set_columns.               "设置ALV各个列的格式
  PERFORM frm_alv_display_data.              "调用ALV输出函数输出数据

INCLUDE:ZPPR0031_TOP

*&---------------------------------------------------------------------*
*& Include          ZPPR0001_TOP
*&---------------------------------------------------------------------*


TYPE-POOLS:slis.
TYPE-POOLS: abap.
TABLES sscrfields.
*EXCEL 上传模板
TYPES: BEGIN OF ty_data,
         werks      TYPE qpmk-werks,
         matnr      TYPE matnr,
         maktx      TYPE makt-maktx,
         plnnr      TYPE plnnr,
         gueltigab  TYPE qpmk-gueltigab,
         verwe      TYPE verwe,
         statu      TYPE statu,
         merknr     TYPE merknr,
         verwmerkm  TYPE qamv-verwmerkm,
         kurztext   TYPE qpmt-kurztext,
         stichprver TYPE qamv-stichprver,
         stellen    TYPE qpmk-stellen,
         masseinhsw TYPE qpmk-masseinhsw,
         sollwert   TYPE qsollwertc, "qkzsollpr,
         toleranzun TYPE qtolunc, "qkztolun,
         toleranzob TYPE qtolobc, "qkztolob,
         lzeitkz    TYPE qlzeitkz,
         steuerkz   TYPE qpmk-steuerkz,
         meins      TYPE mara-meins,
         pmethode   TYPE qpmz-pmethode,
         werkpm     TYPE qpmz-werkpm,
         katab1     TYPE qpmz-katab1,
         katalgart1 TYPE qpmz-katalgart1,
         auswmenge1 TYPE qpmz-auswmenge1,
         version1   TYPE qpmz-version1,
         auswmgwrk1 TYPE qpmz-auswmgwrk1,
         icon       TYPE char10,                 "指示灯
         zmess      TYPE string,                 "返回消息
         styletab   TYPE lvc_t_styl,
         sel        TYPE c,
       END OF ty_data.

DATA:gt_data TYPE TABLE OF ty_data WITH HEADER LINE,
     wa_data TYPE ty_data.

*&---Alv变量定义
DATA:gs_layout   TYPE lvc_s_layo.
DATA:gt_fieldcat TYPE lvc_t_fcat.
DATA:gs_fieldcat TYPE lvc_s_fcat.

DATA:gt_events   TYPE slis_t_event.          " 事件存储内表
DATA:wa_events   TYPE slis_alv_event.

DATA:g_grid TYPE REF TO cl_gui_alv_grid.

DATA:where_clause TYPE string VALUE 'SEL = ABAP_TRUE'.

DATA functxt TYPE smp_dyntxt.               "下载模板按钮需要用到的变量

DATA:gv_tabix TYPE i.
DATA: ls_stylerow TYPE lvc_s_styl,
      lt_styletab TYPE lvc_t_styl.


DATA :
  bdcdata1       LIKE bdcdata OCCURS 0 WITH HEADER LINE, "定义BDC内表
  msgtab         LIKE bdcmsgcoll OCCURS 0 WITH HEADER LINE, "定义消息内表
  l_mstring(480).                               "消息字符串

 INCLUDE:ZPPR0031_SCR

*&---------------------------------------------------------------------*
*& Include          ZPPR0001_SCR
*&---------------------------------------------------------------------*


SELECTION-SCREEN BEGIN OF BLOCK bk01 WITH FRAME TITLE TEXT-001.
  PARAMETERS: pa_path TYPE rlgrap-filename MODIF ID a.
  SELECTION-SCREEN SKIP.
SELECTION-SCREEN END OF BLOCK bk01.

SELECTION-SCREEN: FUNCTION KEY 1."下载模板按钮

INCLUDE:ZPPR0031_FRM

*&---------------------------------------------------------------------*
*& Include          ZPPR0001_FRM
*&---------------------------------------------------------------------*


*&---------------------------------------------------------------------*
*& Form frm_screen_initial
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_screen_initial .
  functxt-icon_id   = icon_xls.
  functxt-quickinfo = '下载模板'.
  functxt-icon_text = '下载模板'.
  functxt-quickinfo = '下载模板'.
  functxt-text      = '下载模板'.
  sscrfields-functxt_01 = functxt.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_download_module
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_download_module .

  DATA:l_folder TYPE string.
  DATA:l_dest LIKE rlgrap-filename.
  DATA:l_rc LIKE sy-subrc.
  DATA:lo_objdata LIKE wwwdatatab.

  CALL METHOD cl_gui_frontend_services=>directory_browse( CHANGING selected_folder = l_folder ).

  IF l_folder IS NOT INITIAL.
    l_dest = l_folder && '\检验计划批导模板.XLSX'.
    SELECT SINGLE relid objid FROM wwwdata
    INTO CORRESPONDING FIELDS OF lo_objdata
    WHERE srtf2    = 0
    AND relid    = 'MI'
    AND objid    = 'ZPPR0031'.
    IF sy-subrc NE 0 OR lo_objdata-objid EQ space.
      MESSAGE '模板文件:物料主数据收集模板不存在,请用TCODE:SMW0进行加载' TYPE 'E'.
    ELSE.
      CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
        EXPORTING
          key         = lo_objdata
          destination = l_dest
        IMPORTING
          rc          = l_rc.
      IF l_rc NE 0.
        MESSAGE '模板文件下载失败!' TYPE 'S' DISPLAY LIKE 'E'.
      ENDIF.
    ENDIF.
  ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_get_fielpath
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_get_fielpath .


  DATA:
    lv_subrc      TYPE i,
    ls_filename   TYPE file_table,
    lt_filetables TYPE filetable. "路径列表
  CONSTANTS:
   cns_open_filter TYPE string VALUE 'MICROSOFT EXCEL文件(*.XLS;*.XLSX)|*.XLS;*.XLSX|(*.*)|*.*|'.


  CALL METHOD cl_gui_frontend_services=>file_open_dialog
    EXPORTING
*     WINDOW_TITLE            =
*     DEFAULT_EXTENSION       =
*     DEFAULT_FILENAME        =
      file_filter             = cns_open_filter
      initial_directory       = 'C:\'
*     multiselection          = ''
    CHANGING
      file_table              = lt_filetables[]
      rc                      = lv_subrc
*     USER_ACTION             =
    EXCEPTIONS
      file_open_dialog_failed = 1
      cntl_error              = 2
      error_no_gui            = 3
      OTHERS                  = 4.
  IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ELSE.
    LOOP AT lt_filetables INTO ls_filename.
      pa_path = ls_filename-filename.
    ENDLOOP.
  ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_upload_data
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_upload_data .
  DATA: lt_excel  TYPE STANDARD TABLE OF zsalsmex_tabline,
        ls_data   TYPE ty_data,
        lv_column TYPE i.

  FIELD-SYMBOLS:
    <fs_field> TYPE any,
    <fs_excel> TYPE zsalsmex_tabline.

  CALL FUNCTION 'ZALSM_EXCEL_TO_INTERNAL_TABLEX'
    EXPORTING
      filename                = pa_path
      i_begin_col             = 1
      i_begin_row             = 5
      i_end_col               = 16
      i_end_row               = 100000
    TABLES
      intern                  = lt_excel
    EXCEPTIONS
      inconsistent_parameters = 1
      upload_ole              = 2
      OTHERS                  = 3.
* 导入失败
  IF sy-subrc <> 0.
    MESSAGE 'EXCEL文件上传失败' TYPE 'E'.
    LEAVE LIST-PROCESSING.
  ENDIF.

  IF lt_excel IS INITIAL.
    MESSAGE '导入数据为空,请检查您的数据' TYPE 'E'.
    LEAVE LIST-PROCESSING.
  ENDIF.

  SORT lt_excel BY row ASCENDING col ASCENDING.

  CLEAR:wa_data,gt_data[].
  LOOP AT lt_excel INTO DATA(ls_line).
    CASE ls_line-col.
      WHEN 1.  gt_data-werks = ls_line-value."工厂
      WHEN 2.  gt_data-matnr = ls_line-value."物料
      WHEN 3.  gt_data-gueltigab = ls_line-value."有效起始日期
      WHEN 4.  gt_data-merknr = ls_line-value."编号
      WHEN 5.  gt_data-verwmerkm = ls_line-value."主检验特征
      WHEN 6.  gt_data-kurztext = ls_line-value."短文本
      WHEN 7.  gt_data-stichprver = ls_line-value."采样程序
      WHEN 8.  gt_data-stellen = ls_line-value."小数位数
      WHEN 9.  gt_data-sollwert = ls_line-value."目标值
      WHEN 10.  gt_data-toleranzun = ls_line-value."规格下限
      WHEN 11 . gt_data-toleranzob = ls_line-value."规格上限
      WHEN 12. gt_data-pmethode = ls_line-value."检验方法
      WHEN 13. gt_data-werkpm = ls_line-value."检验方法的工厂
    ENDCASE.
    AT END OF row.
      APPEND gt_data.
      CLEAR gt_data.
    ENDAT.
  ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_deal_data
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_deal_data .
  SORT gt_data BY werks matnr merknr .
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_alv_layout_build
*&---------------------------------------------------------------------*
*& text`
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_alv_layout_build .
  CLEAR: gs_layout.
  gs_layout-zebra      = 'X'.     "带条纹模式,隔行换色  "
  gs_layout-cwidth_opt = 'X'.     "优化列宽
  gs_layout-detailinit = 'X'.     "是否出现细节屏幕
  gs_layout-box_fname  = 'SEL'.
  gs_layout-stylefname  ='STYLETAB'.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_alv_set_columns
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_alv_set_columns .
  REFRESH gt_fieldcat.
  PERFORM frm_set_l_fieldcat USING 'ICON'  'X' '指示灯'.
  PERFORM frm_set_l_fieldcat USING 'ZMESS' 'X' '返回消息'.
  PERFORM frm_set_l_fieldcat USING 'PLNNR' 'X' '物料清单'.

  PERFORM frm_set_l_fieldcat USING 'WERKS' '' '工厂'.
  PERFORM frm_set_l_fieldcat USING 'MATNR' '' '物料'.
  PERFORM frm_set_l_fieldcat USING 'GUELTIGAB' '' '有效起始日期'.
  PERFORM frm_set_l_fieldcat USING 'MERKNR' '' '编号'.
  PERFORM frm_set_l_fieldcat USING 'VERWMERKM' '' '主检验特征'.
  PERFORM frm_set_l_fieldcat USING 'KURZTEXT' '' '短文本'.
  PERFORM frm_set_l_fieldcat USING 'STICHPRVER' '' '采样程序'.
  PERFORM frm_set_l_fieldcat USING 'STELLEN' '' '小数位数'.
  PERFORM frm_set_l_fieldcat USING 'SOLLWERT' '' '目标值'.
  PERFORM frm_set_l_fieldcat USING 'TOLERANZUN' '' '规格下限'.
  PERFORM frm_set_l_fieldcat USING 'TOLERANZOB' '' '规格上限'.
  PERFORM frm_set_l_fieldcat USING 'PMETHODE' '' '检验方法'.
  PERFORM frm_set_l_fieldcat USING 'WERKPM' '' '检验方法的工厂'.


ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_SET_L_FIELDCAT
*&---------------------------------------------------------------------*
*       将值赋给每一个列
*----------------------------------------------------------------------*
*      -->L_POS      列数
*      -->NAME       列的名称也就是对应的内表的名称
*      -->TEXTL      列的抬头文本
*----------------------------------------------------------------------*
FORM frm_set_l_fieldcat  USING  name fix_col textl.

  gs_fieldcat-fieldname = name.
  gs_fieldcat-coltext = textl.
  gs_fieldcat-fix_column = fix_col.

  IF name = 'ICON'.
    gs_fieldcat-icon = 'X'.
  ENDIF.
*  IF name = 'ZLGPBE_1' OR  name = 'ZLGPBE_2' OR  name = 'ZLGPBE_3' OR
*     name = 'ZLGPBE_4' OR  name = 'ZLGPBE_5' OR  name = 'ZLGPBE_6' OR
*     name = 'MATNR' OR  name = 'WERKS' OR  name = 'LGORT' OR  name = 'SOBKZ'.
*    gs_fieldcat-edit = 'X'.
*  ENDIF.
  APPEND gs_fieldcat TO gt_fieldcat.
  CLEAR gs_fieldcat.
ENDFORM.                    " FRM_SET_L_FIELDCAT
*&---------------------------------------------------------------------*
*& Form frm_alv_display_data
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_alv_display_data .

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      i_callback_program       = sy-repid
      i_callback_pf_status_set = 'FRM_PF_STATUS_SET'
      i_callback_user_command  = 'FRM_USER_COMMAND'
      is_layout_lvc            = gs_layout
      it_fieldcat_lvc          = gt_fieldcat[]
    TABLES
      t_outtab                 = gt_data
    EXCEPTIONS
      program_error            = 1
      OTHERS                   = 2.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_PF_STATUS_SET
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
FORM frm_pf_status_set USING lt_extab TYPE slis_t_extab.
  DATA:rs_extab TYPE slis_extab.
  "设置GUI状态栏
  DATA:lv_text TYPE cua_tit_tx.
  DATA l_num   TYPE i.
  DATA l_num1  TYPE char10.
  CLEAR:l_num1,l_num,lv_text.

  lv_text = '目录录入'.
  SET PF-STATUS 'PF_STATUS' EXCLUDING lt_extab.
  SET TITLEBAR 'PF_TITLE'  WITH lv_text.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_USER_COMMAND
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
FORM frm_user_command USING ucomm LIKE sy-ucomm
  rs_selfield TYPE slis_selfield.

  DATA: lt_rows TYPE lvc_t_row,
        ls_row  TYPE lvc_s_row.

  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    IMPORTING
      e_grid = g_grid.

  CALL METHOD g_grid->check_changed_data.
  rs_selfield-refresh    = 'X'.
  rs_selfield-row_stable = 'X'.
  rs_selfield-col_stable = 'X'.

  CALL METHOD g_grid->get_frontend_layout
    IMPORTING
      es_layout = gs_layout.

  gs_layout-cwidth_opt = 'X'.

  CALL METHOD g_grid->set_frontend_layout
    EXPORTING
      is_layout = gs_layout.

  CASE ucomm.
    WHEN '&F12' OR '&F15' OR '&F03'.
      LEAVE TO SCREEN 0.
    WHEN 'SAVE'.
      PERFORM frm_save USING ''.
    WHEN 'CHANGE'.
*      PERFORM frm_change USING ''.
      CALL METHOD g_grid->check_changed_data.
    WHEN OTHERS.
  ENDCASE.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_save
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_save USING test TYPE char1.

  DATA:gt_head LIKE TABLE OF gt_data .

  DATA:gt_task                   TYPE TABLE OF bapi1191_tsk_c,
       gs_task                   TYPE bapi1191_tsk_c,
       gt_materialtaskallocation TYPE TABLE OF bapi1191_mtk_c,
       gs_materialtaskallocation TYPE bapi1191_mtk_c,
       gt_return                 TYPE TABLE OF bapiret2,
       gs_return                 TYPE bapiret2,
       gt_operation              TYPE TABLE OF bapi1191_opr_c,
       gs_operation              TYPE bapi1191_opr_c,
       gt_inspcharacteristic     TYPE TABLE OF bapi1191_cha_c,
       gs_inspcharacteristic     TYPE bapi1191_cha_c.

  DATA:lv_plnnr TYPE plnnr.
  DATA:gv_group TYPE plnnr.
  DATA:gv_groupcounter TYPE plnal.
  DATA:lv_zerof TYPE qsollwerte.
  DATA:lv_dec TYPE qstellen.
  DATA:lv_str1 TYPE char20.
  DATA:lv_str2 TYPE char20.


  LOOP AT gt_data ASSIGNING FIELD-SYMBOL(<fs_item>).
    <fs_item>-verwe = '5'.
    <fs_item>-statu = '4'.

    SELECT SINGLE meins
      INTO @<fs_item>-meins
      FROM mara
      WHERE matnr = @<fs_item>-matnr.

    SELECT SINGLE maktx
      INTO @<fs_item>-maktx
      FROM makt
      WHERE matnr = @<fs_item>-matnr AND spras = '1'.

    IF <fs_item>-kurztext IS INITIAL.
      SELECT SINGLE kurztext INTO <fs_item>-kurztext
        FROM qpmt WHERE zaehler = <fs_item>-werks
                    AND mkmnr = <fs_item>-verwmerkm
                    AND version = '000001'
                    AND sprache = '1'.
    ENDIF.

    SELECT SINGLE *
      FROM qpmk WHERE zaehler = @<fs_item>-werks
                  AND mkmnr = @<fs_item>-verwmerkm
                  AND version = '000001'
      INTO @DATA(ls_qpmk).
    IF sy-subrc = 0.
*      IF <fs_item>-stellen    IS INITIAL.
*        <fs_item>-stellen    = ls_qpmk-stellen    .
*      ENDIF.
      IF <fs_item>-masseinhsw IS INITIAL.
        <fs_item>-masseinhsw = ls_qpmk-masseinhsw .
      ENDIF.
      IF <fs_item>-verwmerkm+0(1) = 'L'.

        IF <fs_item>-toleranzun IS INITIAL.
          <fs_item>-toleranzun = '0'.
        ENDIF.
        IF <fs_item>-stellen IS INITIAL.
          <fs_item>-stellen = 0.
        ENDIF.

        CLEAR:lv_str1, lv_str2, lv_dec.
        SPLIT <fs_item>-toleranzun AT '.' INTO lv_str1 lv_str2.
        lv_dec = strlen( lv_str2 ).
        IF lv_dec > <fs_item>-stellen.
          <fs_item>-stellen = lv_dec.
        ENDIF.

        CLEAR:lv_str1, lv_str2, lv_dec.
        SPLIT <fs_item>-toleranzob AT '.' INTO lv_str1 lv_str2.
        lv_dec = strlen( lv_str2 ).
        IF lv_dec > <fs_item>-stellen.
          <fs_item>-stellen = lv_dec.
        ENDIF.

      ENDIF.
      <fs_item>-steuerkz   = ls_qpmk-steuerkz   .
    ENDIF.

    SELECT SINGLE *
      FROM qpmz WHERE zaehler = @<fs_item>-werks
                  AND mkmnr = @<fs_item>-verwmerkm
                  AND version = '000001'
                  AND werkpm = @<fs_item>-werks
                  AND pmethode IS NOT INITIAL
      INTO @DATA(ls_qpmz).
    IF sy-subrc = 0.
      IF <fs_item>-pmethode   IS INITIAL. <fs_item>-pmethode   = ls_qpmz-pmethode   .   ENDIF.
      IF <fs_item>-werkpm     IS INITIAL. <fs_item>-werkpm     = ls_qpmz-werkpm     .   ENDIF.
    ENDIF.

    SELECT SINGLE *
      FROM qpmz WHERE zaehler = @<fs_item>-werks
                  AND mkmnr = @<fs_item>-verwmerkm
                  AND version = '000001'
                  AND pmethode IS INITIAL
      INTO @DATA(ls_qpmz2).
    IF sy-subrc = 0.
      <fs_item>-katab1     = ls_qpmz2-katab1     .
      <fs_item>-katalgart1     = ls_qpmz2-katalgart1     .
      <fs_item>-auswmenge1     = ls_qpmz2-auswmenge1     .
      <fs_item>-version1     = ls_qpmz2-version1     .
      <fs_item>-auswmgwrk1     = ls_qpmz2-auswmgwrk1     .
    ENDIF.

  ENDLOOP.

  gt_head[] = gt_data[].
  SORT gt_head BY werks matnr plnnr gueltigab verwe statu .
  DELETE ADJACENT DUPLICATES FROM gt_head COMPARING werks matnr plnnr gueltigab verwe statu.

  LOOP AT gt_head ASSIGNING FIELD-SYMBOL(<fs_head>).

    PERFORM frm_deltask USING <fs_head>-matnr <fs_head>-werks.

    REFRESH gt_task .
    REFRESH gt_materialtaskallocation .
    REFRESH gt_operation .
    REFRESH gt_inspcharacteristic .
    REFRESH gt_return.
    CLEAR gv_group.
    CLEAR gv_groupcounter.
    CLEAR gs_task .
    CLEAR gs_materialtaskallocation .
    CLEAR gs_operation .
    CLEAR gs_inspcharacteristic .
    CLEAR gs_return.
    CLEAR lv_plnnr .

    gs_task-group_counter = '1'.
    gs_task-valid_from = <fs_head>-gueltigab ."有效起始日
    gs_task-valid_to_date = '99991231' .
    gs_task-task_list_usage = <fs_head>-verwe ."用途
    gs_task-plant = <fs_head>-werks."工厂
    gs_task-task_list_status = <fs_head>-statu ."状态
    gs_task-task_measure_unit = <fs_head>-meins ."基本单位
    gs_task-lot_size_to = '99999999' .
    gs_task-description = <fs_head>-maktx ."物料描述
    APPEND gs_task TO gt_task .

    gs_materialtaskallocation-material = <fs_head>-matnr ."物料编码
    gs_materialtaskallocation-plant = <fs_head>-werks ."工厂
    gs_materialtaskallocation-group_counter = '1'.
    gs_materialtaskallocation-valid_from = <fs_head>-gueltigab ."有效起始日
    APPEND gs_materialtaskallocation TO gt_materialtaskallocation .

    gs_operation-group_counter = '1'.
    gs_operation-valid_from = <fs_head>-gueltigab ."有效起始日
    gs_operation-valid_to_date = '99991231' .
    gs_operation-activity = '0010' .
    gs_operation-control_key = 'QM01' .
    gs_operation-plant = <fs_head>-werks ."工厂
    gs_operation-operation_measure_unit = <fs_head>-meins ."基本单位
    gs_operation-denominator = '1' .
    gs_operation-nominator = '1' .
    gs_operation-base_quantity = '1' .
    APPEND gs_operation TO gt_operation .

    LOOP AT gt_data ASSIGNING FIELD-SYMBOL(<fs_data>) WHERE werks = <fs_head>-werks
                                                         AND matnr = <fs_head>-matnr .
      CLEAR gs_inspcharacteristic .
      gs_inspcharacteristic-group_counter = '1' .
      gs_inspcharacteristic-activity = '0010' .
      gs_inspcharacteristic-inspchar = <fs_data>-merknr ."特性序号
      gs_inspcharacteristic-valid_from = <fs_data>-gueltigab ."有效起始日
      gs_inspcharacteristic-valid_to_date = '99991231' .
      gs_inspcharacteristic-mstr_char = <fs_data>-verwmerkm ."检验特性编码
      gs_inspcharacteristic-pmstr_char = <fs_data>-werks ."工厂
      gs_inspcharacteristic-cha_master_import_modus = 'N' .
      gs_inspcharacteristic-char_descr = <fs_data>-kurztext ."特性名称
      gs_inspcharacteristic-method = <fs_data>-pmethode .
      gs_inspcharacteristic-pmethod = <fs_data>-werkpm .
      gs_inspcharacteristic-scope_ind = '=' .
      gs_inspcharacteristic-confirmation_category = 'X' .
      gs_inspcharacteristic-sampling_procedure_ind = 'X' .
      gs_inspcharacteristic-smpl_procedure = <fs_data>-stichprver ."采样过程
      gs_inspcharacteristic-smpl_unit = <fs_data>-meins ."基本单位
      gs_inspcharacteristic-smpl_quant = '1' .
      gs_inspcharacteristic-dec_places = <fs_data>-stellen ."小数位
      gs_inspcharacteristic-meas_unit = <fs_data>-masseinhsw ."计量单位
      gs_inspcharacteristic-target_val = <fs_data>-sollwert ."目标值
      gs_inspcharacteristic-up_tol_lmt = <fs_data>-toleranzob ."规范上限
      gs_inspcharacteristic-lw_tol_lmt = <fs_data>-toleranzun ."规范下限
      IF <fs_data>-sollwert <> '' .
        gs_inspcharacteristic-target_val_check_ind = 'X' .
      ENDIF.
      IF <fs_data>-toleranzob <> '' .
        gs_inspcharacteristic-up_tol_lmt_ind = 'X'.
      ENDIF.
      IF <fs_data>-toleranzun <> ''.
        gs_inspcharacteristic-lw_tol_lmt_ind = 'X' .
      ENDIF.
      IF <fs_data>-steuerkz+0(2) = 'XX'.
        gs_inspcharacteristic-quantitative_ind = 'X'.
        gs_inspcharacteristic-meas_value_confirm_ind = 'X' .
        gs_inspcharacteristic-result_recording_type = '+' .
      ENDIF.
      IF <fs_data>-verwmerkm+0(1) = 'X'.
        gs_inspcharacteristic-attribute_required_ind = 'X'.
*        gs_inspcharacteristic-sel_set1    = <fs_data>-katalgart1.
        gs_inspcharacteristic-sel_set1    = <fs_data>-auswmenge1.
        gs_inspcharacteristic-psel_set1   = <fs_data>-auswmgwrk1.
*        gs_inspcharacteristic-cat_type2   = <fs_data>-katab1.
*        gs_inspcharacteristic-code_group2   = <fs_data>-auswmenge1.
      ENDIF.
      APPEND gs_inspcharacteristic TO gt_inspcharacteristic .
    ENDLOOP .

    CALL FUNCTION 'BAPI_INSPECTIONPLAN_CREATE'
*     EXPORTING
*       TESTRUN                      = ' '
*       PROFILE                      =
      IMPORTING
        group                  = gv_group
        groupcounter           = gv_groupcounter
      TABLES
        task                   = gt_task
        materialtaskallocation = gt_materialtaskallocation
        operation              = gt_operation
*       REFERENCEOPERATION     =
*       PRODUCTIONRESOURCE     =
        inspcharacteristic     = gt_inspcharacteristic
*       TEXTALLOCATION         =
*       TEXT                   =
        return                 = gt_return
*       INSP_CHAR_VALUES       =
      .
    DATA:lc_err TYPE char1.
    CLEAR:lc_err.
    READ TABLE gt_return INTO gs_return WITH KEY type = 'E' .
    IF sy-subrc = 0 .
      CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
      lc_err = 'X'.
      DATA:lv_ermsg TYPE string.
      LOOP AT gt_return INTO gs_return WHERE type = 'E' OR type = 'A'.
        CALL FUNCTION 'MESSAGE_TEXT_BUILD'
          EXPORTING
            msgid               = gs_return-id
            msgnr               = gs_return-number
            msgv1               = gs_return-message_v1
            msgv2               = gs_return-message_v2
            msgv3               = gs_return-message_v3
            msgv4               = gs_return-message_v4
          IMPORTING
            message_text_output = lv_ermsg.
        <fs_data>-zmess = <fs_data>-zmess && lv_ermsg.
      ENDLOOP.
    ELSE.
      CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
        EXPORTING
          wait = 'X'.
    ENDIF.

    LOOP AT gt_data ASSIGNING <fs_data> WHERE werks = <fs_head>-werks AND matnr = <fs_head>-matnr .
      IF lc_err = 'X'.
        <fs_data>-icon = 'E'.
        <fs_data>-zmess = '执行失败' && <fs_data>-zmess.
      ELSE.
        <fs_data>-icon = 'S'.
        <fs_data>-zmess = '执行成功'.
        <fs_data>-plnnr = gv_group.
      ENDIF.
    ENDLOOP.
  ENDLOOP.


ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_DELTASK
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*&      --> <FS_HEAD>_MATNR
*&      --> <FS_HEAD>_WERKS
*&---------------------------------------------------------------------*
FORM frm_deltask  USING    p_matnr TYPE matnr
                           p_werks TYPE werks_d.

  DATA:lv_mseg    TYPE string,
       lv_message TYPE string,
       lv_err     TYPE c.
  DATA:lv_mode TYPE char1 VALUE 'N'.

  SELECT plnnr
    FROM mapl
    WHERE plnty = 'Q'
    AND werks = @p_werks
    AND matnr = @p_matnr
    AND loekz <> 'X'
    INTO TABLE @DATA(lt_mapl).

  LOOP AT lt_mapl INTO DATA(ls_mapl).

    CLEAR:bdcdata1,bdcdata1[],msgtab,msgtab[].
    CLEAR:lv_message,lv_mseg.

    PERFORM bdc_dynpro USING 'SAPLCPDI' '8010'.
    PERFORM bdc_field  USING 'BDC_OKCODE' '=ALUE'.
    PERFORM bdc_field  USING 'RC27M-MATNR' ''.
    PERFORM bdc_field  USING 'RC27M-WERKS' p_werks.
    PERFORM bdc_field  USING 'RC271-PLNNR' ls_mapl-plnnr.
    PERFORM bdc_field  USING 'RC271-STTAG' sy-datum.
    PERFORM bdc_dynpro USING 'SAPLCPDI' '1200'.
    PERFORM bdc_field  USING 'BDC_OKCODE' '=LOE'.
    PERFORM bdc_field  USING 'RC27X-ENTRY_ACT' '1'.
    PERFORM bdc_field  USING 'RC27X-FLG_SEL(01)' 'X'.
    PERFORM bdc_dynpro USING 'SAPLSPO1' '0100'.
    PERFORM bdc_field  USING 'BDC_OKCODE' '=YES'.
    PERFORM bdc_dynpro USING 'SAPLCPDI' '1200'.
    PERFORM bdc_field  USING 'BDC_OKCODE' '=BU'.
    CALL TRANSACTION 'QP02' USING bdcdata1 MODE lv_mode UPDATE 'L' MESSAGES INTO msgtab.

    LOOP AT msgtab INTO DATA(wa_prot) WHERE msgtyp = 'A' OR msgtyp = 'E'.
      lv_err = abap_true.
      CALL FUNCTION 'MESSAGE_TEXT_BUILD'
        EXPORTING
          msgid               = wa_prot-msgid
          msgnr               = wa_prot-msgnr
          msgv1               = wa_prot-msgv1
          msgv2               = wa_prot-msgv2
          msgv3               = wa_prot-msgv3
          msgv4               = wa_prot-msgv4
        IMPORTING
          message_text_output = lv_message.
      IF lv_mseg IS INITIAL.
        lv_mseg = lv_message.
      ELSE.
        lv_mseg = lv_mseg && lv_message.
      ENDIF.
      CLEAR lv_message.
    ENDLOOP.
    COMMIT WORK AND WAIT.

  ENDLOOP.


ENDFORM.

FORM bdc_dynpro USING program dynpro.
  CLEAR bdcdata1.
  bdcdata1-program = program.
  bdcdata1-dynpro   = dynpro.
  bdcdata1-dynbegin = 'X'.
  APPEND bdcdata1.
ENDFORM.
FORM bdc_field USING fnam fval.
  CLEAR bdcdata1.
  bdcdata1-fnam = fnam.
  bdcdata1-fval = fval.
  APPEND bdcdata1.
ENDFORM.

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值