YUPLOAD_INSPECTION_PLAN

<< Click to Display Table of Contents >>

Navigation:  All About ABAP Technique > ABAP Source Code >

YUPLOAD_INSPECTION_PLAN

*&---------------------------------------------------------------------*
*& Report  YO_UPLOAD_INSPECTION_PLAN
*&
*&---------------------------------------------------------------------*
*& Module : PP
*&
*&---------------------------------------------------------------------*
 
REPORT  yo_upload_inspection_plan.
*&---------------------------------------------------------------------*
*&  Include           YO_CPP019_UPLOAD_ROUTING_TOP
*&---------------------------------------------------------------------*
 
*------------------standard common includes----------------------------*
* ALV common functions
INCLUDE yo_alv_hier_common"<< You can found in ABAP Tutorial from SAP Interface Community
 
 
TABLES t001lmarcmara.
 
DATABEGIN OF gi_data OCCURS 0,
       task_grp(6),
       matnr(18),
       descr1(40),
       plant(4),
       valid(8),
       usage(3),
       status(3),
      unit(5),
       cokey(4),
       woctr(8),
       insno(6),
       mic(8),
       im(8),
 
 
 
      exp,
       chbox,
      icon(4),
       msg(200),
       msg1(200),
       msg2(200),
       msg3(200),
    END OF gi_data.
 
DATA gi_detail LIKE STANDARD TABLE OF gi_data WITH HEADER LINE,
      gi_header LIKE STANDARD TABLE OF gi_data WITH HEADER LINE.
 
DATAgw_header LIKE gi_data,
     gv_string(256),
     gv_test LIKE bapiflag.
 
DATABEGIN OF gi_xls OCCURS 1,
         tx_line LIKE gv_string.
DATAEND OF gi_xls.
DATA gi_excel LIKE STANDARD TABLE OF alsmex_tabline WITH HEADER LINE.
DATA gi_zemp LIKE STANDARD TABLE OF gi_xls WITH HEADER LINE.
 
 
*----------------------------------------------------------*
* Global Variable                                          *
*----------------------------------------------------------*
TYPE-POOLSiconole2.
 
FIELD-SYMBOLS <mnam> TYPE ANY.
FIELD-SYMBOLS <intab> TYPE ANY.
 
*&---------------------------------------------------------------------*
*& selection-screen -> Selection
*&---------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK a WITH FRAME TITLE cm_tlt01.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 01(20cm_file FOR FIELD p_file.
PARAMETERSp_file(128OBLIGATORY DEFAULT 'D:.XLS'.
SELECTION-SCREEN END OF LINE.
 
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 01(31cm_col01 FOR FIELD p_col01.
PARAMETERSp_col01(4TYPE n DEFAULT 1.
SELECTION-SCREEN COMMENT 41(10cm_col02 FOR FIELD p_col02.
PARAMETERSp_col02(4TYPE n DEFAULT 25.
SELECTION-SCREEN END OF LINE.
 
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 01(31cm_row01 FOR FIELD p_row01.
PARAMETERSp_row01(4TYPE n DEFAULT 3.
SELECTION-SCREEN COMMENT 41(10cm_row02 FOR FIELD p_row02.
PARAMETERSp_row02(4TYPE n DEFAULT 9999.
SELECTION-SCREEN END OF LINE.
 
SELECTION-SCREEN END OF BLOCK a.
 
*----------------------------------------------------------------------*
* INITIALIZATION.
*----------------------------------------------------------------------*
INITIALIZATION.
PERFORM fm_initialization.
 
 
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
PERFORM fm_val_req_fname.
 
*&---------------------------------------------------------------------*
*&  Include           YO_CPP019_UPLOAD_ROUTING_F01
*&---------------------------------------------------------------------*
 
 
*&---------------------------------------------------------------------*
*&      Form  fm_val_req_fname
*&---------------------------------------------------------------------*
FORM fm_val_req_fname .
DATAlv_program_name LIKE sy-repid,
       lv_dynpro_number LIKE sy-dynnr,
       lv_field_name   LIKE dynpread-fieldname,
       lv_file_name     LIKE ibipparms-path.
 
 lv_program_name sy-repid.
 lv_dynpro_number sy-dynnr.
 lv_field_name   'P_FNAME'.
 
PERFORM fm_f4_filename
    USING    lv_program_name
             lv_dynpro_number
             lv_field_name
    CHANGING lv_file_name.
 
 p_file lv_file_name.
ENDFORM.                    " fm_val_req_fname
 
*&---------------------------------------------------------------------*
*&      Form  fm4_filename
*&---------------------------------------------------------------------*
FORM fm_f4_filename
  USING    p_e_program_name
           p_e_dynpro_number
           p_e_field_name
  CHANGING p_i_file_name.
 
CALL FUNCTION 'F4_FILENAME'
  EXPORTING
     program_name p_e_program_name
     dynpro_number p_e_dynpro_number
     field_name   p_e_field_name
  IMPORTING
     file_name     p_i_file_name.
ENDFORM.                    " fm4_filename
 
 
*&---------------------------------------------------------------------*
*&      Form  fm_gui_upload
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_T_DATA_TAB  text
*      -->P_E_FILENAME  text
*----------------------------------------------------------------------*
FORM fm_gui_upload TABLES   p_t_data_tab
                  USING    p_e_filename.
 
CALL FUNCTION 'GUI_UPLOAD'
  EXPORTING
     filename               p_e_filename
     filetype               'DAT'
*    IMPORTING
*      filelength              = p_i_filelength
*      header                  = p_i_header
  TABLES
     data_tab               p_t_data_tab
  EXCEPTIONS
     file_open_error         1
     file_read_error         2
     no_batch               3
     gui_refuse_filetransfer 4
     invalid_type           5
     no_authority           6
     unknown_error           7
     bad_data_format         8
     header_not_allowed     9
     separator_not_allowed   10
     header_too_long         11
     unknown_dp_error       12
     access_denied           13
     dp_out_of_memory       14
     disk_full               15
     dp_timeout             16
    OTHERS                  17.
 
IF sy-subrc <> 0.
  MESSAGE ID   sy-msgid TYPE sy-msgty NUMBER sy-msgno
          WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
 
ENDIF.
 
ENDFORM.                    " fm_gui_upload
 
*&---------------------------------------------------------------------*
*&      Form  FM_GET_DATA_EXCEL_OBJECT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_GI_EXCEL  text
*      -->P_PA_FNAME  text
*      -->P_PA_COL01  text
*      -->P_PA_COL02  text
*      -->P_PA_ROW01  text
*      -->P_PA_ROW02  text
*----------------------------------------------------------------------*
FORM fm_get_data_excel_object TABLES   p_gi_excel
                              USING    p_pa_fname
                                       p_pa_col01
                                       p_pa_col02
                                       p_pa_row01
                                       p_pa_row02.
DATA lv_col01 TYPE i,
        lv_col02 TYPE i,
        lv_row01 TYPE i,
        lv_row02 TYPE i.
 
 lv_col01 p_pa_col01.
 lv_col02 p_pa_col02.
 lv_row01 p_pa_row01.
 lv_row02 p_pa_row02.
 
PERFORM fm_gui_message USING 'Open Excel Files and Call Object ...' ''.
CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
  EXPORTING
     filename               p_pa_fname
     i_begin_col             lv_col01
     i_begin_row             lv_row01
     i_end_col               lv_col02
     i_end_row               lv_row02
  TABLES
     intern                 p_gi_excel
  EXCEPTIONS
     inconsistent_parameters 1
     upload_ole             2
    OTHERS                  3.
IF sy-subrc <> 0.
  MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
          WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ELSE.
  PERFORM fm_gui_message USING 'Finish Reading Excel Data ...' ''.
ENDIF.
ENDFORM.      "FM_GET_DATA_EXCEL_OBJECT
 
 
*&---------------------------------------------------------------------*
*&      Form  FM_PUT_DATA_ARRAY
*&---------------------------------------------------------------------*
FORM fm_put_data_array TABLES   p_it_zemp .
 
APPEND 'TASK_GRP' TO  p_it_zemp.
APPEND 'MATNR'    TO  p_it_zemp.
APPEND 'DESCR1'   TO p_it_zemp.
APPEND 'PLANT'    TO  p_it_zemp.
APPEND 'VALID'    TO  p_it_zemp.
APPEND 'USAGE'    TO  p_it_zemp.
APPEND 'STATUS'   TO  p_it_zemp.
*    APPEND 'UNIT' TO  p_it_zemp.
APPEND 'COKEY'    TO  p_it_zemp.
APPEND 'WOCTR'    TO  p_it_zemp.
APPEND 'INSNO'    TO  p_it_zemp.
APPEND 'MIC'      TO  p_it_zemp.
 
ENDFORM.                    " FM_PUT_DATA_ARRAY
 
*&---------------------------------------------------------------------*
*&      Form  FM_INSERT_DATA_TO_INTAB
*&---------------------------------------------------------------------*
FORM fm_insert_data_to_intab .
DATA :   li_tamp LIKE STANDARD TABLE OF gi_xls WITH HEADER LINE,
 
          lv_cntr TYPE i,
          lv_pos TYPE i,
          lv_num TYPE i,
          lv_field(20TYPE c,
          lv_table(20TYPE c VALUE 'GI_DATA',
          lv_fname(30TYPE c,
          ppterid TYPE i.
 
LOOP AT gi_excel.
  READ TABLE gi_zemp INDEX gi_excel-col.
   lv_field gi_zemp-tx_line.
  CONCATENATE lv_table '-' lv_field INTO lv_fname.
  CONDENSE lv_fname.
  ASSIGN (lv_fnameTO <mnam>.
  CONDENSE gi_excel-value.
*    TRANSLATE gi_excel-value TO UPPER CASE.
   <mnam> gi_excel-value.
 
  AT END OF row.
     lv_num 0.
    APPEND gi_data.
    CLEAR gi_data.
  ENDAT.
ENDLOOP.
ENDFORM.                    " FM_INSERT_DATA_TO_INTAB
 
 
 
*&---------------------------------------------------------------------*
*&      Form  fm_refresh_intab
*&---------------------------------------------------------------------*
FORM fm_refresh_intab.
* here free all the internal table used in the program.
REFRESHgi_data.
ENDFORM.                    " fm_refresh_intab
 
*&---------------------------------------------------------------------*
*&      Form  fm_gui_message
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->fu_text1   text
*      -->fu_text2   text
*----------------------------------------------------------------------*
FORM fm_gui_message USING    fu_text1 fu_text2.
DATAld_text1(100)    TYPE c.
 
CONCATENATE fu_text1 fu_text2 INTO ld_text1
            SEPARATED BY space.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
  EXPORTING
     percentage 0
    text       ld_text1.
ENDFORM.                    " fm_gui_message
 
 
*&---------------------------------------------------------------------*
*&      Form  fm_display_data
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM fm_display_data.
PERFORM fm_alv_reset_data.
 
*  Set ALV Parameters and Data
PERFORM fm_alv_set_layout USING 'Inspection Plan'.
PERFORM fm_alv_set_print.
PERFORM fm_alv_set_column.
 
 gv_i_default 'X'.
 gv_i_save 'A'.
 
PERFORM fm_alv_show_hier TABLES gi_header gi_detail.
 
ENDFORM.                    "fm_display_data
 
*&---------------------------------------------------------------------*
*&      Form  fm_alv_set_column
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM fm_alv_set_column.
 
*  Set Header Column
PERFORM fm_alv_add_fieldcat USING 'GI_HEADER':
  'ICON'  'GI_HEADER' 'ICON'   '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' 'X' 'X' 'X',
 
  'TASK_GRP' 'GI_HEADER'  'TASK_GRP'  '' '' '' '' '' 'Task Group' '' '' '' '' '' '' '' '' '' '' 'X' 'X',
  'MATNR'    'MARC'       'MATNR'  '' '' '' '' '' 'Material' '' '' '' '' '' '' '' '' '' '' '' '',
  'DESCR1'   'GI_HEADER'  'DESCR1' '' '' '' '' '' 'Description' '' '' '' '' '' '' '' '' '' '' '' '',
  'PLANT'    'GI_HEADER'  'PLANT'  '' '' '' '' '' 'Plant' '' '' '' '' '' '' '' '' '' '' '' '',
  'VALID'    'GI_HEADER'  'VALID'  '' '' '' '' '' 'Valid' '' '' '' '' '' '' '' '' '' '' '' '',
  'USAGE'    'GI_HEADER'  'USAGE'  '' '' '' '' '' 'Usage' '' '' '' '' '' '' '' '' '' '' '' '',
  'STATUS'   'GI_HEADER'  'STATUS'  '' '' '' '' '' 'Status' '' '' '' '' '' '' '' '' '' '' '' '',
  'UNIT'     'GI_HEADER'  'UNIT'  '' '' '' '' '' 'Unit' '' '' '' '' '' '' '' '' '' '' '' '',
  'COKEY'    'GI_HEADER'  'COKEY'  '' '' '' '' '' 'Cokey' '' '' '' '' '' '' '' '' '' '' '' '',
  'WOCTR'    'GI_HEADER'  'WOCTR'  '' '' '' '' '' 'Work Center' '' '' '' '' '' '' '' '' '' '' '' '',
 
 
  'MSG'   '' ''    '' '' '' '' '' 'Message Co Prd' '' '' '' '' '' '' '' '' '' '' '' '',
  'MSG1'   '' ''    '' '' '' '' '' 'Message BOM 1' '' '' '' '' '' '' '' '' '' '' '' '',
  'MSG2'   '' ''    '' '' '' '' '' 'Message BOM 2' '' '' '' '' '' '' '' '' '' '' '' '',
  'MSG3'   '' ''    '' '' '' '' '' 'Message BOM 3' '' '' '' '' '' '' '' '' '' '' '' ''.
 
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
    EXPORTING
      i_internal_tabname           'GI_HEADER'
*     i_structure_name             = ''
    CHANGING
      ct_fieldcat                 gi_it_fieldcat[]
    EXCEPTIONS
      inconsistent_interface       1
      program_error               2
      OTHERS                       3.
 
*  Set Detail Column
PERFORM fm_alv_add_fieldcat USING 'GI_DETAIL':
  'TASK_GRP'  'GI_HEADER'  'TASK_GRP'  '' '' '' '' '' 'Task Group' '' '' '' '' '' '' '' '' '' '' 'X' 'X',
  'INSNO'     'GI_HEADER'  'INSNO'  '' '' '' '' '' 'Ins No' '' '' '' '' '' '' '' '' '' '' 'X' 'X',
  'MIC'       'GI_HEADER'  'MIC'  '' '' '' '' '' 'Master IC' '' '' '' '' '' '' '' '' '' '' '' '',
  'IM'        'GI_HEADER'  'IM'  '' '' '' '' '' 'Ins. Method' '' '' '' '' '' '' '' '' '' '' '' '',
 
  'MSG'   '' ''    '' '' '' '' '' 'Message' '' '' '' '' '' '' '' '' '' '' '' ''.
 
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
    EXPORTING
      i_internal_tabname           'GI_DETAIL'
*     i_structure_name             = '
    CHANGING
      ct_fieldcat                 gi_it_fieldcat[]
    EXCEPTIONS
      inconsistent_interface       1
      program_error               2
      OTHERS                       3.
 
*  Sort and Group by Field
*  CLEAR gi_it_sort.
*  gi_it_sort-fieldname = 'WERKS'. ">> Filled by Fieldname
*  gi_it_sort-up        = 'X'.     ">> 'X' = Ascending ; ' ' = Descending
*  gi_it_sort-subtot    = 'X'.
*  gi_it_sort-group     = '*'.     ">> '*' = Grouped by field ; ' ' = Not grouped by this field
*  APPEND gi_it_sort.
 
 
ENDFORM.                    "fm_alv_set_column
 
 
 
*&--------------------------------------------------------------------*
 
*&      Form  FM_USER_COMMAND
 
*&--------------------------------------------------------------------*
 
*       text
 
*---------------------------------------------------------------------*
 
FORM fm_alv_user_command USING fu_ucomm   LIKE sy-ucomm
                              fu_selfield TYPE slis_selfield.
 
DATAlt_dynpread LIKE dynpread OCCURS WITH HEADER LINE,
       lv_ok_code LIKE sy-ucomm.
 
 
MOVE fu_ucomm TO lv_ok_code.
CASE lv_ok_code.
  WHEN '&UPLOAD'.
     gv_test ' '.
    PERFORM fm_upload_data.
  WHEN '&TEST'.
     gv_test 'X'.
    PERFORM fm_upload_data.
  WHEN '&IC1'.
*      PERFORM fm_alv_event_double_click.
  WHEN '&ETA'.
*      PERFORM fm_alv_event_double_click.
  WHEN '&F03' OR '&F15' OR '&F12'.
 
ENDCASE.
 
MOVE 'X' TO fu_selfield-refresh.
 
ENDFORM.                    "FM_USER_COMMAND
 
*&---------------------------------------------------------------------*
*&      Form  fm_build_keyinfo
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->FU_KEYINFO text
*----------------------------------------------------------------------*
FORM fm_build_keyinfo USING    fu_keyinfo TYPE slis_keyinfo_alv .
 
 fu_keyinfo-header01 'TASK_GRP'.
 
 fu_keyinfo-item01 'TASK_GRP'.
 
ENDFORM.                    "fm_build_keyinfo
 
*&---------------------------------------------------------------------*
*&  Include           YO_CPP019_UPLOAD_ROUTING_F02
*&---------------------------------------------------------------------*
 
 
*&---------------------------------------------------------------------*
*&      Form  fm_initialization
*&---------------------------------------------------------------------*
FORM fm_initialization .
 cm_tlt01 'File Location'.
 cm_file 'File Location'.
 cm_col01 'Start column'.
 cm_col02 'End column'.
 cm_row01 'Start Row'.
 cm_row02 'End Row'.
 
ENDFORM.                    " fm_initialization
 
*&---------------------------------------------------------------------*
*&      Form  fm_collect_data
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM fm_collect_data.
PERFORM fm_get_data_excel_object TABLES gi_excel
                                  USING p_file
                                         p_col01 p_col02
                                         p_row01 p_row02.
PERFORM fm_put_data_array TABLES gi_zemp.
PERFORM fm_insert_data_to_intab.
ENDFORM.                    " fm_collect_data
 
*&---------------------------------------------------------------------*
*&      Form  fm_process_data_im
*&---------------------------------------------------------------------*
FORM fm_process_data.
DATA li_qpmz_exp LIKE STANDARD TABLE OF qpmz WITH HEADER LINE.
DATA lv_date LIKE sy-datum.
 
LOOP AT gi_data.
 
  MOVE-CORRESPONDING gi_data TO gi_detail.
 
  CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'
    EXPORTING
      input        gi_data-matnr
    IMPORTING
      output       gi_detail-matnr
    EXCEPTIONS
       length_error 1
      OTHERS       2.
 
  CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
    EXPORTING
      input  gi_data-mic
    IMPORTING
      output gi_detail-mic.
 
  REFRESH li_qpmz_exp.
 
*    break albertusr.
  IF gi_detail-mic IS NOT INITIAL AND gi_detail-valid IS NOT INITIAL.
     lv_date gi_detail-valid.
    CALL FUNCTION 'QPSD_FEATURE_VALID_READ'
      EXPORTING
         gueltigab     lv_date
         kz_aufloesung 'X'
         merkmal       gi_detail-mic
         werk         gi_detail-plant
      IMPORTING
         qpmz_exp     li_qpmz_exp.
     gi_detail-im li_qpmz_exp-pmethode.
  ENDIF.
 
  PERFORM fm_check_auth_werks(yo_cpp020_upload_bomUSING gi_detail-plant.
  PERFORM fm_check_auth_werks2(yo_cpp020_upload_bomUSING gi_detail-plant.
 
  APPEND gi_detail.
ENDLOOP.
 
ENDFORM.                    " fm_process_data_im
 
 
*&---------------------------------------------------------------------*
*&      Form  fm_validate_data
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM fm_validate_data.
 
DATA li_marc LIKE STANDARD TABLE OF marc WITH HEADER LINE,
        li_qpmk LIKE STANDARD TABLE OF qpmk WITH HEADER LINE,
        li_mara LIKE STANDARD TABLE OF mara WITH HEADER LINE,
        li_detail LIKE STANDARD TABLE OF gi_header WITH HEADER LINE.
 
DATA lv_flag,
        lv_idnrk(18),
        lv_index LIKE sy-tabix.
 
CHECK LINESgi_detail > 0.
 
"Get Plant data for Material Info
 li_detail[] =  gi_detail[].
SORT li_detail BY matnr plant.
DELETE ADJACENT DUPLICATES FROM li_detail COMPARING matnr plant.
 
SELECT * INTO TABLE li_marc
FROM marc
  FOR ALL ENTRIES IN li_detail
WHERE matnr li_detail-matnr AND
       werks li_detail-plant.
 
"Get MIC Info
REFRESH li_detail.
 li_detail[] =  gi_detail[].
SORT li_detail BY mic.
DELETE ADJACENT DUPLICATES FROM li_detail COMPARING mic.
 
SELECT * INTO TABLE li_qpmk
FROM qpmk
  FOR ALL ENTRIES IN li_detail
WHERE mkmnr li_detail-mic.
 
"Get Material Info
REFRESH li_detail.
 li_detail[] =  gi_detail[].
SORT li_detail BY matnr.
DELETE ADJACENT DUPLICATES FROM li_detail COMPARING matnr.
 
SELECT * INTO TABLE li_mara
FROM mara
  FOR ALL ENTRIES IN li_detail
WHERE matnr li_detail-matnr.
 
SORT li_marc BY matnr werks.
SORT li_qpmk BY mkmnr.
SORT li_mara BY matnr.
LOOP AT gi_detail.
  READ TABLE li_marc WITH KEY matnr gi_detail-matnr
                               werks gi_detail-plant BINARY SEARCH.
  IF sy-subrc 0.
    READ TABLE li_qpmk WITH KEY mkmnr gi_detail-mic BINARY SEARCH.
    IF sy-subrc 0.
       gi_detail-icon icon_led_green.
       gi_detail-msg 'Ready to upload.'.
       gi_detail-chbox 'X'.
 
      READ TABLE li_mara WITH KEY matnr gi_detail-matnr BINARY SEARCH.
      IF sy-subrc 0.
         gi_detail-unit li_mara-meins.
      ENDIF.
    ELSE.
       gi_detail-icon icon_led_red.
       gi_detail-msg 'MIC not exist !!'.
      MODIFY gi_detail.
    ENDIF.
  ELSE.
     gi_detail-icon icon_led_red.
     gi_detail-msg 'Material not exist !!'.
    MODIFY gi_detail.
    CONTINUE.
  ENDIF.
 
  MODIFY gi_detail.
ENDLOOP.
 
*  Create Header Data
 gi_header[] gi_detail[].
DELETE gi_header WHERE icon ' '.
SORT gi_header BY task_grp.
DELETE ADJACENT DUPLICATES FROM gi_header
COMPARING task_grp.
 
"Check Error
LOOP AT gi_header.
  CLEAR lv_flag.
  LOOP AT gi_detail WHERE task_grp gi_header-task_grp.
    IF gi_detail-chbox ' '.
       lv_flag 'X'.
       gi_header-icon icon_led_red.
       gi_header-msg gi_detail-msg .
       gi_header-chbox ' '.
      MODIFY gi_header.
      EXIT.
    ENDIF.
  ENDLOOP.
 
ENDLOOP.
 
ENDFORM.                    "fm_validate_data
 
*&---------------------------------------------------------------------*
*&      Form  fm_upload_data_im
*&---------------------------------------------------------------------*
FORM fm_upload_data .
DATA li_detail LIKE STANDARD TABLE OF gi_detail WITH HEADER LINE,
        li_task LIKE STANDARD TABLE OF bapi1191_tsk_c WITH HEADER LINE,
        li_materialtaskallocation LIKE STANDARD TABLE OF  bapi1191_mtk_c WITH HEADER LINE,
        li_operation LIKE STANDARD TABLE OF  bapi1191_opr_c WITH HEADER LINE,
        li_inspcharacteristic LIKE STANDARD TABLE OF  bapi1191_cha_c WITH HEADER LINE,
        li_return LIKE bapiret2 OCCURS WITH HEADER LINE.
 
DATA lw_return LIKE bapiret2.
 
DATA lv_groupcounter LIKE bapi1191_tsk_c-group_counter,
        lv_message LIKE sy-lisel,
        lv_opid LIKE li_operation-operation_id,
        lv_error.
 
DATA lv_count(6),
        lv_index(6),
        lv_text(20).
 
 lv_count LINESgi_header ).
CONCATENATE '/' lv_count INTO lv_text.
 
"Upload Inspection Plan
LOOP AT gi_header WHERE chbox 'X' AND
                      icon icon_led_green.
  REFRESH li_taskli_materialtaskallocation,
             li_operationli_inspcharacteristicli_return.
 
   li_task-task_list_group   gi_header-task_grp.
   li_task-valid_from       gi_header-valid.
   li_task-task_list_usage   gi_header-usage.
   li_task-plant             gi_header-plant.
   li_task-task_list_status gi_header-status.
   li_task-task_measure_unit gi_header-unit.
  IF gi_header-descr1 IS NOT INITIAL.
     li_task-description       gi_header-descr1.
  ENDIF.
  APPEND li_task.
 
   li_materialtaskallocation-material       gi_header-matnr.
   li_materialtaskallocation-plant           gi_header-plant.
   li_materialtaskallocation-task_list_group gi_header-task_grp.
   li_materialtaskallocation-valid_from     gi_header-valid.
  APPEND li_materialtaskallocation.
 
  CONCATENATE sy-datum+7(1sy-uzeit 'M' INTO lv_opid.
   li_operation-task_list_group gi_header-task_grp.
   li_operation-valid_from     gi_header-valid.
   li_operation-operation_id   lv_opid.
   li_operation-activity '1'.
   li_operation-control_key     gi_header-cokey.
   li_operation-work_cntr       gi_header-woctr.
   li_operation-plant           gi_header-plant.
   li_operation-denominator     1.
   li_operation-nominator       1.
   li_operation-base_quantity   1.
   li_operation-acttype_01     ' '.
  APPEND li_operation.
 
  REFRESH li_inspcharacteristic.
  LOOP AT gi_detail WHERE task_grp gi_header-task_grp.
     li_inspcharacteristic-task_list_group gi_header-task_grp.
     li_inspcharacteristic-operation_id   lv_opid.
     li_inspcharacteristic-inspchar       gi_detail-insno.
     li_inspcharacteristic-valid_from     gi_detail-valid.
     li_inspcharacteristic-mstr_char       gi_detail-mic.
     li_inspcharacteristic-pmstr_char     gi_detail-plant.
     li_inspcharacteristic-cha_master_import_modus 'C'.
     li_inspcharacteristic-method          gi_detail-im.
     li_inspcharacteristic-pmethod         gi_detail-plant.
    APPEND li_inspcharacteristic.
  ENDLOOP.
 
  CALL FUNCTION 'BAPI_INSPECTIONPLAN_CREATE'
    EXPORTING
      testrun                     gv_test
*   PROFILE                      =
    IMPORTING
*   GROUP                        =
      groupcounter                 lv_groupcounter
    TABLES
      task                         li_task
       materialtaskallocation       li_materialtaskallocation
       operation                   li_operation
       inspcharacteristic           li_inspcharacteristic
      return                       li_return.
 
  CLEAR lv_error.
  LOOP AT li_return INTO lw_return.
    CALL FUNCTION 'RPY_MESSAGE_COMPOSE'
      EXPORTING
        language       sy-langu
         message_id     lw_return-id
         message_number lw_return-number
         message_var1   lw_return-message_v1
         message_var2   lw_return-message_v2
         message_var3   lw_return-message_v3
         message_var4   lw_return-message_v4
      IMPORTING
         message_text   lv_message.
    IF sy-tabix 1.
      CONCATENATE lv_message '|' INTO gi_header-msg1 SEPARATED BY space.
    ELSEIF sy-tabix 2.
      CONCATENATE lv_message '|' INTO gi_header-msg2 SEPARATED BY space.
    ELSEIF sy-tabix 3.
      CONCATENATE lv_message '|' INTO gi_header-msg3 SEPARATED BY space.
    ENDIF.
 
    IF lw_return-type 'E'.
       lv_error 1.
    ENDIF.
 
  ENDLOOP.
 
  IF lv_error 1.
     gi_header-msg 'Failed.'.
     gi_header-icon icon_incomplete.
  ELSE.
    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
     gi_header-msg 'Succeed.'.
     gi_header-icon icon_checked.
  ENDIF.
 
  MODIFY gi_header.
 
  CONCATENATE gi_header-msg '|' INTO gi_header-msg SEPARATED BY space.
 
  ADD TO lv_index.
  PERFORM fm_gui_message USING lv_index lv_text.
 
ENDLOOP.
 
ENDFORM.                    " fm_upload_data