*&---------------------------------------------------------------------*
*& 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.