*&---------------------------------------------------------------------*
*& Report zpprp010.
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zpprp010.
TYPE-POOLS:slis,icon.
"加载需要表
TABLES: anlb.
"Excel上传标准内表
DATA: iexcel LIKE alsmex_tabline OCCURS 0 WITH HEADER LINE.
"导入Excel转换后内表格式
DATA: BEGIN OF wa_excel,
icon TYPE char4, "图标
werks TYPE werks_d, "工厂
zwjtx TYPE char8, "主文件检验特性
zqdat TYPE dats, "有效起始日期
ztext TYPE char40, "短文本
zjszd TYPE char40, "搜索字段
zfwxj TYPE c, "固定X规范下限
zfwsj TYPE c, "固定X规范上限
zmbsz TYPE c, "固定X检查目标值
zhzjl TYPE c, "汇总特性记录
zdzjl TYPE c, "单值特性记录
zxsws TYPE char3, "小数位数
zjldw TYPE char6, "计量单位
zmbz TYPE char13, "目标值
zfwxjz TYPE char13, "规范下限值
zfwsjz TYPE char13, "规范上限值
zinfro TYPE char2, "信息字段1
zfloor1 TYPE char2, "第一个下限值
zupper1 TYPE char2, "第一上限值
zjyfs TYPE char3, "检验方法
zfsgc TYPE werks_d, "检验方法的工厂
message TYPE bapi_msg,"消息
END OF wa_excel,
gt_alv LIKE STANDARD TABLE OF wa_excel WITH HEADER LINE.
DATA: BEGIN OF wa_bdc,
werks TYPE bdc_fval, "工厂
zwjtx TYPE bdc_fval, "主文件检验特性
zqdat TYPE dats, "有效起始日期
ztext TYPE bdc_fval, "短文本
zjszd TYPE bdc_fval, "搜索字段
zfwxj TYPE bdc_fval, "固定X规范下限
zfwsj TYPE bdc_fval, "固定X规范上限
zmbsz TYPE bdc_fval, "固定X检查目标值
zhzjl TYPE bdc_fval, "汇总特性记录
zdzjl TYPE bdc_fval, "单值特性记录
zxsws TYPE bdc_fval, "小数位数
zjldw TYPE bdc_fval, "计量单位
zmbz TYPE qsollwerte, "目标值
zfwxjz TYPE qsollwerte, "规范下限值
zfwsjz TYPE qsollwerte, "规范上限值
zinfro TYPE bdc_fval, "信息字段1
zfloor1 TYPE bdc_fval, "第一个下限值
zupper1 TYPE bdc_fval, "第一上限值
zjyfs TYPE bdc_fval, "检验方法
zfsgc TYPE bdc_fval, "检验方法的工厂
zmbz1 TYPE char16, "目标值
zfwxjz1 TYPE char16, "规范下限值
zfwsjz1 TYPE char16, "规范上限值
zmbz2 TYPE bdc_fval, "目标值
zfwxjz2 TYPE bdc_fval, "规范下限值
zfwsjz2 TYPE bdc_fval, "规范上限值
zqdat1 TYPE bdc_fval, "有效起始日期
END OF wa_bdc,
gt_bdc LIKE STANDARD TABLE OF wa_bdc WITH HEADER LINE.
"定义ALV输出所需变量
DATA: s_layout TYPE slis_layout_alv,
gt_fieldcat TYPE slis_t_fieldcat_alv.
"定义临时变量
DATA msg TYPE string.
"导入文件选择
SELECTION-SCREEN BEGIN OF BLOCK 1 WITH FRAME TITLE TEXT-001.
PARAMETERS: p_fname LIKE rlgrap-filename MEMORY ID m01 OBLIGATORY. " 获取文件路径
* PARAMETERS: p_fname LIKE rlgrap-filename OBLIGATORY. " 获取文件路径
SELECTION-SCREEN END OF BLOCK 1.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_fname.
PERFORM get_p_fname. " 把需要导入的文件的路径 存放在P_name 中
INITIALIZATION.
START-OF-SELECTION.
PERFORM frm_upload. "通过路径 把EXCEL中的数据导入到 内表iexcel中
PERFORM frm_display. "结果输出显示
FORM get_p_fname. " 获取文件路径
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
mask = ',Excel Files,*.xls,All Files,*.csv,*.*.'
title = '请选择要导入的文件'
IMPORTING
filename = p_fname
EXCEPTIONS
inv_winsys = 1
no_batch = 2
selection_cancel = 3
selection_error = 4
OTHERS = 5.
IF sy-subrc <> 0 AND sy-subrc <> 3.
MESSAGE e100(zdev) WITH 'error'(007).
ENDIF.
ENDFORM.
FORM frm_upload.
DATA:gv_zgc TYPE znetpr .
DATA:gv_fgc TYPE znetpr .
DATA:gv_chack TYPE znetpr .
DATA:gv_zgcon TYPE char13 .
DATA:gv_fgcon TYPE char13 .
DATA:gv_un TYPE c .
DATA:gs_dljc_01 TYPE ztpp_dljc_01 .
"状态栏显示
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
text = TEXT-s01.
DATA i_while TYPE char10 .
CLEAR i_while .
* WHILE i_while < 700000.
* ADD 1 TO i_while .
* ENDWHILE.
"上载文件
CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
EXPORTING
filename = p_fname
i_begin_col = 1
i_begin_row = 2
i_end_col = 20
i_end_row = 9998
TABLES
intern = iexcel
EXCEPTIONS
inconsistent_parameters = 1
upload_ole = 2
OTHERS = 3.
"检查Excel数据内表
IF sy-subrc <> 0.
MESSAGE '文件读取失败,请确保该文件未被占用!' TYPE 'S'DISPLAY LIKE 'E'.
STOP.
ENDIF.
IF iexcel IS INITIAL.
MESSAGE TEXT-m03 TYPE 'S'DISPLAY LIKE 'E'.
STOP.
ENDIF.
* "转换数据提示
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
text = TEXT-s02.
LOOP AT iexcel.
CASE iexcel-col.
* WHEN '0001'.
* MOVE iexcel-value TO wa_excel-werks. "工厂
* WHEN '0002'.
* MOVE iexcel-value TO wa_excel-zwjtx. "主文件检验特性
* WHEN '0003'.
* MOVE iexcel-value TO wa_excel-zqdat. "有效起始日期
* WHEN '0004'.
* MOVE iexcel-value TO wa_excel-ztext. "短文本
* WHEN '0005'.
* MOVE iexcel-value TO wa_excel-zjszd. "搜索字段
* WHEN '0006'.
* MOVE iexcel-value TO wa_excel-zfwxj. "固定X规范下限
* WHEN '0007'.
* MOVE iexcel-value TO wa_excel-zfwsj. "固定X规范上限
* WHEN '0008'.
* MOVE iexcel-value TO wa_excel-zmbsz. "固定X检查目标值
* WHEN '0009'.
* MOVE iexcel-value TO wa_excel-zhzjl. "汇总特性记录
* WHEN '0010'.
* MOVE iexcel-value TO wa_excel-zdzjl. "单值特性记录
* WHEN '0011'.
* MOVE iexcel-value TO wa_excel-zxsws. "小数位数
WHEN '0012'.
MOVE iexcel-value TO wa_excel-zjldw. "计量单位
WHEN '0013'.
MOVE iexcel-value TO wa_excel-zmbz. "目标值
WHEN '0014'.
MOVE iexcel-value TO wa_excel-zfwxjz. "规范下限值
WHEN '0015'.
MOVE iexcel-value TO wa_excel-zfwsjz. "规范上限值
WHEN '0016'.
MOVE iexcel-value TO wa_excel-zinfro. "信息字段1
* WHEN '0017'.
* MOVE iexcel-value TO wa_excel-zfloor1. "第一个下限值
* WHEN '0018'.
* MOVE iexcel-value TO wa_excel-zupper1. "第一上限值
WHEN '0019'.
MOVE iexcel-value TO wa_excel-zjyfs. "检验方法
* WHEN '0020'.
* MOVE iexcel-value TO wa_excel-zfsgc. "检验方法的工厂
ENDCASE.
AT END OF row. " 在每一行结束的时候 把工作区域WA_EXCEL中的值写到内表GT_ALV中
*------------------------------------------------------------------------------------
* 数据检查
*------------------------------------------------------------------------------------
CASE ''.
WHEN wa_excel-zjldw.
MESSAGE '计量单位不能为空!' TYPE 'S'DISPLAY LIKE 'E'.
STOP.
WHEN wa_excel-zmbz.
MESSAGE '目标值不能为空!' TYPE 'S'DISPLAY LIKE 'E'.
STOP.
WHEN wa_excel-zfwxjz.
MESSAGE '规范下限值不能为空!' TYPE 'S'DISPLAY LIKE 'E'.
STOP.
WHEN wa_excel-zfwsjz.
MESSAGE '规范上限值不能为空!' TYPE 'S'DISPLAY LIKE 'E'.
STOP.
WHEN wa_excel-zinfro.
MESSAGE '信息字段1不能为空!' TYPE 'S'DISPLAY LIKE 'E'.
STOP.
WHEN wa_excel-zjyfs.
MESSAGE '检验方法不能为空!' TYPE 'S'DISPLAY LIKE 'E'.
STOP.
WHEN OTHERS.
ENDCASE.
CLEAR:gv_chack .
gv_chack = wa_excel-zfwsjz - wa_excel-zfwxjz .
IF gv_chack < 0.
MESSAGE '范围下限值大于范围上限值!' TYPE 'S'DISPLAY LIKE 'E'.
STOP.
ENDIF.
wa_excel-werks = '1011'. "工厂
wa_excel-zqdat = '20180101'. "有效起始日期
wa_excel-zdzjl = 'X'. "单值特性记录
wa_excel-zxsws = '3'. "小数位数
CLEAR:gv_zgc .
CLEAR:gv_fgc .
CLEAR:gv_zgcon .
CLEAR:gv_fgcon .
gv_zgc = wa_excel-zfwsjz - wa_excel-zmbz .
gv_fgc = wa_excel-zfwxjz - wa_excel-zmbz .
gv_zgcon = wa_excel-zfwsjz - wa_excel-zmbz .
gv_fgcon = wa_excel-zfwxjz - wa_excel-zmbz .
*------------------------------------------------------------------------------------
* 固定值'X'处理
*------------------------------------------------------------------------------------
*只有无公差的时候zfwxj/zfwsj为空否则为'X'
IF gv_zgc IS NOT INITIAL OR gv_fgc IS NOT INITIAL.
wa_excel-zfwxj = 'X'."固定X规范下限
wa_excel-zfwsj = 'X'."固定X规范上限
ENDIF.
*只有正正公差或负负公差时wa_excel-zmbsz为空否则为‘X’
IF gv_zgc * gv_fgc <= 0.
wa_excel-zmbsz = 'X' ."固定X检查目标值
ENDIF.
*------------------------------------------------------------------------------------
* 字符串处理
*------------------------------------------------------------------------------------
CLEAR:gv_un .
CASE wa_excel-zjldw.
WHEN '毫米'.
gv_un = 'H'.
WHEN '微米'.
gv_un = 'D'.
WHEN '厘米'.
gv_un = 'P'.
WHEN '度'.
gv_un = 'W'.
WHEN '动平衡'.
gv_un = 'L'.
WHEN OTHERS.
gv_un = 'N'.
ENDCASE.
IF gv_zgc IS NOT INITIAL.
IF gv_zgc >= 0.
CONCATENATE '+' gv_zgcon INTO gv_zgcon .
ELSE.
gv_zgcon = gv_zgcon * -1 .
CONCATENATE '-' gv_zgcon INTO gv_zgcon .
ENDIF.
CONDENSE gv_zgcon NO-GAPS.
ENDIF.
IF gv_fgc IS NOT INITIAL.
IF gv_fgc >= 0.
CONCATENATE '+' gv_fgcon INTO gv_fgcon .
ELSE.
gv_fgcon = gv_fgcon * -1 .
CONCATENATE '-' gv_fgcon INTO gv_fgcon .
ENDIF.
CONDENSE gv_fgcon NO-GAPS.
ENDIF.
IF gv_zgc IS INITIAL AND gv_fgc IS INITIAL.
CONCATENATE wa_excel-zinfro wa_excel-zmbz gv_un wa_excel-zjyfs INTO wa_excel-zjszd .
ELSEIF gv_zgc IS NOT INITIAL AND gv_fgc IS INITIAL.
CONCATENATE wa_excel-zinfro wa_excel-zmbz gv_un gv_zgcon gv_un wa_excel-zjyfs INTO wa_excel-zjszd .
ELSEIF gv_zgc IS INITIAL AND gv_fgc IS NOT INITIAL.
CONCATENATE wa_excel-zinfro wa_excel-zmbz gv_un gv_fgcon gv_un wa_excel-zjyfs INTO wa_excel-zjszd .
ELSE.
CONCATENATE wa_excel-zinfro wa_excel-zmbz gv_un gv_zgcon gv_un '/' gv_fgcon gv_un wa_excel-zjyfs INTO wa_excel-zjszd .
ENDIF.
CONDENSE wa_excel-zjszd NO-GAPS.
wa_excel-ztext = wa_excel-zjszd .
SELECT SINGLE zwjtx INTO wa_excel-zwjtx FROM ztpp_dljc_01
WHERE zjszd = wa_excel-zjszd .
IF wa_excel-zwjtx IS INITIAL.
CALL FUNCTION 'NUMBER_GET_NEXT'
EXPORTING
nr_range_nr = '01'
object = 'ZWJTX_NO1'
IMPORTING
number = wa_excel-zwjtx
EXCEPTIONS
interval_not_found = 1
number_range_not_intern = 2
object_not_found = 3
quantity_is_0 = 4
quantity_is_not_1 = 5
interval_overflow = 6
buffer_overflow = 7
OTHERS = 8.
CLEAR gs_dljc_01 .
gs_dljc_01-zjszd = wa_excel-zjszd .
gs_dljc_01-zwjtx = wa_excel-zwjtx .
MODIFY ztpp_dljc_01 FROM gs_dljc_01 .
COMMIT WORK .
ENDIF.
wa_excel-icon = '@9R@'.
APPEND wa_excel TO gt_alv.
CLEAR wa_excel.
ENDAT.
ENDLOOP.
SORT gt_alv[] BY zwjtx .
ENDFORM.
FORM frm_display .
CLEAR s_layout.
s_layout-zebra = 'X'.
s_layout-colwidth_optimize = 'X'.
* s_layout-box_fieldname = 'BOX'.
PERFORM frm_fill_field .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
is_layout = s_layout
it_fieldcat = gt_fieldcat
i_callback_program = sy-repid
i_callback_pf_status_set = 'PF_STATUS_SET'
* i_callback_html_top_of_page = 'HTML_TOP_OF_PAGE'
i_callback_user_command = 'USER_COMMAND'
TABLES
t_outtab = gt_alv.
ENDFORM. " FRM_DISPLAY
FORM frm_fill_field .
DATA: wa_fieldcat TYPE slis_fieldcat_alv.
DEFINE fill_field.
wa_fieldcat-fieldname = &1.
wa_fieldcat-seltext_l = &2.
* wa_fieldcat-checkbox = &3.
* wa_fieldcat-edit = &4.
IF wa_fieldcat-fieldname = 'ICON'.
wa_fieldcat-icon = 'X'.
ENDIF.
* IF wa_fieldcat-fieldname = 'MESSAGE'.
* wa_fieldcat-outputlen = 40 .
* ENDIF.
APPEND wa_fieldcat TO gt_fieldcat.
CLEAR wa_fieldcat.
END-OF-DEFINITION.
fill_field :
'ICON' '处理状态',
'WERKS' '工厂',
'ZWJTX' '主文件检验特性',
'ZQDAT' '有效起始日期',
'ZTEXT' '短文本',
'ZJSZD' '搜索字段',
'ZFWXJ' '固定X规范下限',
'ZFWSJ' '固定X规范上限',
'ZMBSZ' '固定X检查目标值',
'ZHZJL' '汇总特性记录',
'ZDZJL' '单值特性记录',
'ZXSWS' '小数位数',
'ZJLDW' '计量单位',
'ZMBZ' '目标值',
'ZFWXJZ' '规范下限值',
'ZFWSJZ' '规范上限值',
'ZINFRO' '信息字段1',
'ZFLOOR1' '第一个下限值',
'ZUPPER1' '第一上限值',
'ZJYFS' '检验方法',
'ZFSGC' '检验方法的工厂',
'MESSAGE' '返回消息'.
ENDFORM.
FORM pf_status_set USING rt_extab TYPE slis_t_extab.
SET PF-STATUS 'STANDARD_FULLSCREEN'.
ENDFORM.
FORM user_command USING i_ucomm LIKE sy-ucomm
is_selfield TYPE slis_selfield.
DATA: ref TYPE REF TO cl_gui_alv_grid.
DATA : lv_stable TYPE lvc_s_stbl. "刷新稳定性
RANGES: l_werks FOR t001w-werks.
RANGES: l_matnr FOR mara-matnr.
DATA:l_bukrs TYPE t001k-bukrs.
lv_stable-row = '1'.
lv_stable-col = '1'.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
e_grid = ref.
CALL METHOD ref->check_changed_data.
CASE i_ucomm.
WHEN 'DEL_DJ'.
DATA:lv_answer TYPE c.
CALL FUNCTION 'POPUP_TO_CONFIRM'
EXPORTING
text_question = '是否删除重复项?' "是否删除重复项??
icon_button_1 = '是' "是
icon_button_2 = '否' "否
default_button = '2'
display_cancel_button = 'X'
start_column = 25
start_row = 6
IMPORTING
answer = lv_answer
EXCEPTIONS
text_not_found = 1
OTHERS = 2.
IF lv_answer = '1'.
SORT gt_alv[] BY zwjtx .
DELETE ADJACENT DUPLICATES FROM gt_alv[] COMPARING zwjtx.
ENDIF.
WHEN 'TO_LEAD'.
CLEAR gt_bdc[] .
LOOP AT gt_alv.
MOVE-CORRESPONDING gt_alv TO gt_bdc .
CALL FUNCTION 'FLTP_CHAR_CONVERSION' "基本尺寸 把科学计数法转换成普通数据类型
EXPORTING
decim = gt_bdc-zxsws
expon = 0
input = gt_bdc-zmbz
ivalu = 'X '
maskn = ' '
IMPORTING
flstr = gt_bdc-zmbz1.
CALL FUNCTION 'FLTP_CHAR_CONVERSION' "基本尺寸 把科学计数法转换成普通数据类型
EXPORTING
decim = gt_bdc-zxsws
expon = 0
input = gt_bdc-zfwxjz
ivalu = 'X '
maskn = ' '
IMPORTING
flstr = gt_bdc-zfwxjz1.
CALL FUNCTION 'FLTP_CHAR_CONVERSION' "基本尺寸 把科学计数法转换成普通数据类型
EXPORTING
decim = gt_bdc-zxsws
expon = 0
input = gt_bdc-zfwsjz
ivalu = 'X '
maskn = ' '
IMPORTING
flstr = gt_bdc-zfwsjz1.
gt_bdc-zmbz2 = gt_bdc-zmbz1 .
gt_bdc-zfwxjz2 = gt_bdc-zfwxjz1 .
gt_bdc-zfwsjz2 = gt_bdc-zfwsjz1 .
CALL FUNCTION 'CONVERT_DATE_TO_EXTERNAL'
EXPORTING
date_internal = gt_bdc-zqdat
IMPORTING
date_external = gt_bdc-zqdat1
EXCEPTIONS
date_internal_is_invalid = 1
OTHERS = 2
.
APPEND gt_bdc .
CLEAR gt_alv .
CLEAR gt_bdc .
ENDLOOP.
SORT gt_bdc[] BY zwjtx .
DELETE ADJACENT DUPLICATES FROM gt_bdc[] COMPARING zwjtx.
IF gt_bdc[] IS NOT INITIAL.
PERFORM frm_to_lead .
ENDIF.
WHEN '&IC1'.
DATA gs_qpmk TYPE qpmk .
CHECK is_selfield-tabindex > 0.
READ TABLE gt_alv INDEX is_selfield-tabindex.
CLEAR gs_qpmk .
SELECT SINGLE mkmnr INTO gs_qpmk-mkmnr FROM qpmk WHERE zaehler = gt_alv-werks AND mkmnr = gt_alv-zwjtx .
IF sy-subrc = 0.
SET PARAMETER ID:'WRK' FIELD gt_alv-werks. "工厂
SET PARAMETER ID:'PMK' FIELD gt_alv-zwjtx. "主文件检验特性
CALL TRANSACTION 'QS24' AND SKIP FIRST SCREEN.
ELSE .
MESSAGE '特性'&& gt_alv-zwjtx && '(工厂'&& gt_alv-werks && ')' && ' 不存在!' TYPE 'S' DISPLAY LIKE 'E' .
ENDIF.
WHEN OTHERS.
ENDCASE.
CALL METHOD ref->refresh_table_display
EXPORTING
is_stable = lv_stable.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_TO_LEAD
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_to_lead .
DATA r_message TYPE bapi_msg .
DATA subrc TYPE syst-subrc .
DATA messtab TYPE TABLE OF bdcmsgcoll WITH HEADER LINE .
LOOP AT gt_bdc.
CLEAR subrc .
CLEAR r_message .
CLEAR messtab[] .
CALL FUNCTION 'ZRFC_QS21_SAVE'
EXPORTING
ctu = 'X'
mode = 'N'
update = 'L'
nodata = '/'
werks_001 = gt_bdc-werks
mkmnr_002 = gt_bdc-zwjtx
gueltigab_003 = gt_bdc-zqdat1
quantitaet_004 = 'X'
loekz_005 = '2'
kurztext_006 = gt_bdc-ztext
sortfeld_007 = gt_bdc-zjszd
estukz5_008 = 'X'
rzwang4_009 = 'X'
dokukz1_010 = 'X'
pumfkz4_011 = 'X'
messwerte_012 = 'X'
druck1_013 = 'X'
keineformel_014 = 'X'
quantitaet_015 = 'X'
loekz_016 = '2'
stellen_017 = gt_bdc-zxsws
masseinhsw_018 = gt_bdc-zjldw
sollwert_019 = gt_bdc-zmbz2
plausiunte_020 = gt_bdc-zfwxjz2
plausioben_021 = gt_bdc-zfwsjz2
quantitaet_022 = 'X'
loekz_023 = '2'
argument_024 = '1'
pmtnr_01_025 = gt_bdc-zjyfs
pmwerk_01_026 = gt_bdc-werks
quantitaet_027 = 'X'
loekz_028 = '2'
quantitaet_029 = 'X'
loekz_030 = '2'
IMPORTING
subrc = subrc
r_message = r_message
TABLES
messtab = messtab[]
.
IF r_message IS NOT INITIAL.
LOOP AT gt_alv WHERE zwjtx = gt_bdc-zwjtx AND werks = gt_bdc-werks .
gt_alv-message = r_message .
LOOP AT messtab WHERE msgtyp = 'E' AND msgnr = '149'.
ENDLOOP.
IF sy-subrc = 0.
gt_alv-icon = '@5D@' .
ELSE .
gt_alv-icon = '@5C@' .
ENDIF.
MODIFY gt_alv TRANSPORTING message icon.
ENDLOOP.
ENDIF.
CLEAR gt_bdc .
ENDLOOP.
LOOP AT gt_alv WHERE message IS INITIAL.
gt_alv-icon = '@5B@' .
MODIFY gt_alv TRANSPORTING icon.
ENDLOOP.
ENDFORM.
QM—定量检验特性需求程序
最新推荐文章于 2022-10-13 08:09:41 发布