MM41/MM42/MM43零售物料主数据BAPI创建示例(WRF_MATERIAL_MAINTAINDATA_RT)
1. 前言
- ZALSM_EXCEL_TO_INTERNAL_TABLE 函数实现方法参考文章:读取EXCEL数据到SAP函数重新封装为ZALSM_EXCEL_TO_INTERNAL_TABLE(解决单元格至多上传50字符 单次至多上传9999行 只能读取单个SHEET)
- 相对于 BAPI_MATERIAL_MAINTAINDATA_RT WRF_MATERIAL_MAINTAINDATA_RT 可以实现更多的物料主数据的导入
- 供应商层级的GTIN(条码导入)
- 门店数据的列表执行清单(Execute Listing)
- 采购信息记录PIR的导入(包括货源清单)
- 供应商层级的GTIN(条码导入)
- BOM组件信息等等
2. 实现
导入模板
- 基本数据
- 附加数据
代码
TYPE-POOLS: truxs. TABLES: ztmm_sfzs,sscrfields. *----------------------------------------------------------------------* * CLASS lcl_events DEFINITION *----------------------------------------------------------------------* * *----------------------------------------------------------------------* CLASS lcl_events DEFINITION. PUBLIC SECTION. METHODS: on_user_command "定义设置SALV on_user_command属性的方法 FOR EVENT added_function OF cl_salv_events_table IMPORTING e_salv_function. METHODS: on_double_click FOR EVENT double_click OF cl_salv_events_table IMPORTING row column. ENDCLASS. "lcl_events DEFINITION *----------------------------------------------------------------------* * CLASS lcl_events IMPLEMENTATION *----------------------------------------------------------------------* * *----------------------------------------------------------------------* CLASS lcl_events IMPLEMENTATION. METHOD on_user_command. PERFORM frm_on_user_command USING e_salv_function. ENDMETHOD. "on_user_command METHOD on_double_click. PERFORM frm_double_click USING row column. ENDMETHOD. "on_user_command ENDCLASS. "lcl_events IMPLEMENTATION *----------------------------------------------------------------------* * CLASS lcl_excel_uploader DEFINITION *----------------------------------------------------------------------* * *----------------------------------------------------------------------* CLASS lcl_excel_uploader DEFINITION. PUBLIC SECTION. DATA: header_rows_count TYPE i. DATA: max_rows TYPE i. DATA: filename TYPE localfile. DATA: sheet_name TYPE alsmex_tabline-value. METHODS: constructor. METHODS: upload CHANGING ct_data TYPE ANY TABLE. PRIVATE SECTION. DATA: lv_tot_components TYPE i. METHODS: do_upload IMPORTING iv_begin TYPE i iv_end TYPE i EXPORTING rv_empty TYPE flag CHANGING ct_data TYPE STANDARD TABLE. ENDCLASS. "lcl_excel_uploader DEFINITION *----------------------------------------------------------------------* * CLASS lcl_excel_uploader IMPLEMENTATION *----------------------------------------------------------------------* * *----------------------------------------------------------------------* CLASS lcl_excel_uploader IMPLEMENTATION. METHOD constructor. max_rows = 9999. ENDMETHOD. "constructor METHOD upload. DATA: lo_struct TYPE REF TO cl_abap_structdescr, lo_table TYPE REF TO cl_abap_tabledescr, lt_comp TYPE cl_abap_structdescr=>component_table. lo_table ?= cl_abap_structdescr=>describe_by_data( ct_data ). lo_struct ?= lo_table->get_table_line_type( ). lt_comp = lo_struct->get_components( ). * lv_tot_components = lines( lt_comp ). * DATA: lv_empty TYPE flag, lv_begin TYPE i, lv_end TYPE i. * lv_begin = header_rows_count + 1. lv_end = max_rows. WHILE lv_empty IS INITIAL. do_upload( EXPORTING iv_begin = lv_begin iv_end = lv_end IMPORTING rv_empty = lv_empty CHANGING ct_data = ct_data ). lv_begin = lv_end + 1. lv_end = lv_begin + max_rows. ENDWHILE. ENDMETHOD. "upload * METHOD do_upload. DATA: li_exceldata TYPE STANDARD TABLE OF zalsmex_tabline. DATA: ls_exceldata LIKE LINE OF li_exceldata. DATA: lv_tot_rows TYPE i. DATA: lv_packet TYPE i. FIELD-SYMBOLS: <struc> TYPE any, <field> TYPE any. * Upload this packet CALL FUNCTION 'ZALSM_EXCEL_TO_INTERNAL_TABLE' EXPORTING filename = filename i_begin_col = 1 i_begin_row = iv_begin i_end_col = lv_tot_components i_end_row = iv_end i_sheet_name = sheet_name TABLES intern = li_exceldata EXCEPTIONS inconsistent_parameters = 1 upload_ole = 2 OTHERS = 3. * something wrong, exit IF sy-subrc NE 0. MESSAGE '导入文件失败,请检查文件是否存在未被锁定!' TYPE 'S' DISPLAY LIKE 'E'. LEAVE LIST-PROCESSING. rv_empty = 'X'. ENDIF. * No rows uploaded, exit IF li_exceldata IS INITIAL AND sheet_name = '基本-物料主数据'. MESSAGE '模板为空,请检查模板!' TYPE 'S' DISPLAY LIKE 'E'. LEAVE LIST-PROCESSING. rv_empty = 'X'. ENDIF. * Move from Row, Col to Flat Structure LOOP AT li_exceldata INTO ls_exceldata. " Append new row AT NEW row. APPEND INITIAL LINE TO ct_data ASSIGNING <struc>. ENDAT. " component and its value ASSIGN COMPONENT ls_exceldata-col OF STRUCTURE <struc> TO <field>. IF sy-subrc EQ 0. <field> = ls_exceldata-value. ENDIF. " add the row count AT END OF row. IF <struc> IS NOT INITIAL. lv_tot_rows = lv_tot_rows + 1. ENDIF. ENDAT. ENDLOOP. * packet has more rows than uploaded rows, * no more packet left. Thus exit lv_packet = iv_end - iv_begin. IF lv_tot_rows LT lv_packet. rv_empty = 'X'. ENDIF. ENDMETHOD. "do_upload ENDCLASS. "lcl_excel_uploader IMPLEMENTATION TYPES: BEGIN OF ty_mian_upload, zsort TYPE string, "编码 matnr TYPE string, "物料编号 maktx TYPE string, "物料描述 mtart TYPE string, "商品类型 matkl TYPE string, "物料组 attyp TYPE string, "商品类别 zconv_unit TYPE string, "是否单位转换 meins TYPE string, "基本单位 umrez TYPE string, "比值 bstme TYPE string, "采购单位 zconv_cd TYPE string, "是否列出XX zconv_xm TYPE string, "是否列出XX zconv_fz TYPE string, "是否列出XX mhdhb TYPE string, "总货架寿命 zconv_deli TYPE string, "是否配货单位(用于标识现裱 /现烤) sobsl TYPE string, "特殊采购类 bklas TYPE string, "评估类 stprs TYPE string, "标准价 END OF ty_mian_upload. TYPES: BEGIN OF ty_pur_upload, zsort TYPE string, "编码 lifnr TYPE string, "供应商 werks TYPE string, "工厂 mwskz TYPE string, "税代码 netpr TYPE string, "净价 ean11 TYPE string, "GTIN END OF ty_pur_upload. TYPES: BEGIN OF ty_logistics_alv, zsort TYPE string, "编码 werks TYPE marc-werks, "工厂 dismm TYPE marc-dismm, "RP类型 disls TYPE marc-disls, "批量大小 bstrf TYPE marc-bstrf, "舍入值 dispo TYPE marc-dispo, "存货计划员/RP控制器 xchpf TYPE marc-xchpf, "批次管理 lgfsb TYPE marc-lgfsb, "库存地点/外部采购仓储地点 zmein TYPE marc-zmein, "是否配货单位(用于标识现裱 /现烤) beskz TYPE marc-beskz, "采购类型 sobsl TYPE marc-sobsl, "特殊采购类 rgekz TYPE marc-rgekz, "反冲 lgpro TYPE marc-lgpro, "生产仓储地点 webaz TYPE marc-webaz, "收货处理时间 fhori TYPE marc-fhori, "计划边际码 strgr TYPE marc-strgr, "策略组 vrmod TYPE marc-vrmod, "消耗模式 vint1 TYPE marc-vint1, "向前消耗期间 vint2 TYPE marc-vint2, "逆向消耗期间 mtvfp TYPE marc-mtvfp, "可用性检查 sbdkz TYPE marc-sbdkz, "独立/集中 fevor TYPE marc-fevor, "生产管理员 sfcpf TYPE marc-sfcpf, "生产计划参数文件 frtme TYPE marc-frtme, "生产单位 uneto TYPE marc-uneto, "不足交货允差 ueeto TYPE marc-ueeto, "过度交货允差 END OF ty_logistics_alv. TYPES: BEGIN OF ty_main_alv, icon TYPE char4, "指示 text TYPE string, "提示文本 zsort TYPE char30, "编码 matnr TYPE mara-matnr, "物料编号 mtart TYPE mara-mtart, "商品类型 matkl TYPE mara-matkl, "物料组 attyp TYPE mara-attyp, "商品类别 zconv_unit TYPE char1, "是否单位转换 maktx TYPE makt-maktx, "物料描述 meins TYPE mara-meins, "基本单位 umrez TYPE marm-umrez, "比值 bstme TYPE mara-bstme, "采购单位 taklv TYPE mara-taklv, "税收分类 mhdrz TYPE mara-mhdrz, "剩余货架寿命 mhdhb TYPE mara-mhdhb, "总货架寿命 zconv_cd TYPE char1, "是否列出XX zconv_xm TYPE char1, "是否列出XX zconv_fz TYPE char1, "是否列出XX mtpos TYPE mvke-mtpos, "项目类别组 kondm TYPE mvke-kondm, "物料定价组 ktgrm TYPE mvke-ktgrm, "科目设置组 lstfl TYPE mvke-lstfl, "列表-存储 lstvz TYPE mvke-lstvz, "列表-分销中心 zconv_deli TYPE char1, "是否配货单位(用于标识现裱 /现烤) sobsl TYPE marc-sobsl, "特殊采购类 bklas TYPE mbew-bklas, "评估类 peinh TYPE mbew-peinh, "价格单位 stprs TYPE mbew-stprs, "标准价 zconv_pur TYPE char1, "是否扩充采购组织 z_conv_sales TYPE char200,"扩充信息显示 vkorg TYPE mvke-vkorg, "销售组织 vtweg TYPE mvke-vtweg, "分销渠道 END OF ty_main_alv. TYPES: BEGIN OF ty_pur_alv, zsort TYPE char30, "编码 lifnr TYPE eina-lifnr, "供应商 ekorg TYPE eine-ekorg, "采购组织 werks TYPE eine-werks, "工厂 ekgrp TYPE eine-ekgrp, "采购组 mwskz TYPE eine-mwskz, "税代码 netpr TYPE eine-netpr, "净价 waers TYPE eine-waers, " 货币码 peinh TYPE eine-peinh, " 价格单位 bprme TYPE eine-bprme, "订单价格单位(采购) ean11 TYPE mean-ean11, "GTIN hpean TYPE mean-hpean, "主 GTIN lartn TYPE mlea-lartn, "是否分配GTIN到当前供应商 lfean TYPE mlea-lfean, "供应商的主GTIN numtp TYPE numtp, "GTIN类型 END OF ty_pur_alv. DATA: go_alv TYPE REF TO cl_salv_table. TYPES: ty_main_t TYPE TABLE OF ty_main_alv WITH KEY zsort, ty_pur_t TYPE TABLE OF ty_pur_alv WITH KEY zsort. DATA: gt_outmain TYPE ty_main_t, gt_outpur TYPE ty_pur_t, gt_logistics_alv TYPE TABLE OF ty_logistics_alv. DATA: gs_text TYPE smp_dyntxt. SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE l_title1. PARAMETERS : p_file TYPE string OBLIGATORY MODIF ID m1. SELECTION-SCREEN END OF BLOCK b1. SELECTION-SCREEN FUNCTION KEY 1. INITIALIZATION. PERFORM frm_init_funckey. p_file = 'C:\' && text-t01 && '.XLS'. l_title1 = '选择文件'. AT SELECTION-SCREEN OUTPUT. AT SELECTION-SCREEN. IF sscrfields-ucomm = 'FC01'. PERFORM frm_download_template. ENDIF. AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file. PERFORM frm_f4_request. START-OF-SELECTION. PERFORM frm_read_excel. END-OF-SELECTION. PERFORM frm_show_alv. *&---------------------------------------------------------------------* *& Form FRM_F4_REQUEST *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM frm_f4_request . DATA: lv_rc TYPE i. DATA: lt_file_table TYPE filetable, wa_file_table TYPE file_table. CALL METHOD cl_gui_frontend_services=>file_open_dialog EXPORTING window_title = '打开文件' CHANGING file_table = lt_file_table rc = lv_rc. IF sy-subrc = 0. READ TABLE lt_file_table INTO wa_file_table INDEX 1. p_file = wa_file_table-filename. ENDIF. ENDFORM. " FRM_F4_REQUEST *&---------------------------------------------------------------------* *& Form FRM_READ_EXCEL *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM frm_read_excel. DATA: lt_main_upload TYPE TABLE OF ty_mian_upload, wa_main_upload TYPE ty_mian_upload, lt_pur_upload TYPE TABLE OF ty_pur_upload, wa_pur_upload TYPE ty_pur_upload. DATA: l_main_comp TYPE i, l_pur_comp TYPE i. DATA: lo_struct TYPE REF TO cl_abap_structdescr, lo_table TYPE REF TO cl_abap_tabledescr, lt_comp TYPE cl_abap_structdescr=>component_table. DATA: lo_uploader TYPE REF TO lcl_excel_uploader. TYPES: BEGIN OF ty_logrt, lgort TYPE t001l-lgort, END OF ty_logrt. DATA: lt_t023 TYPE TABLE OF t023, "物料组 lt_t006 TYPE TABLE OF t006, "单位 lt_t001l TYPE TABLE OF ty_logrt, "库存地点 lt_lfa1 TYPE TABLE OF lfa1, "供应商 lt_kna1 TYPE TABLE OF kna1. "客户 DATA: wa_main_alv TYPE ty_main_alv, wa_outpur TYPE ty_pur_alv. DATA: l_continue_flag TYPE string. DATA: lt_ean_type TYPE TABLE OF typeinterv, wa_ean_type TYPE typeinterv. DATA: l_matnr TYPE mara-matnr. "get components numbers(RTTS) lo_table ?= cl_abap_structdescr=>describe_by_data( lt_main_upload ). "Main lo_struct ?= lo_table->get_table_line_type( ). lt_comp = lo_struct->get_components( ). l_main_comp = lines( lt_comp ). lo_table ?= cl_abap_structdescr=>describe_by_data( lt_pur_upload ). "Purchase lo_struct ?= lo_table->get_table_line_type( ). lt_comp = lo_struct->get_components( ). l_pur_comp = lines( lt_comp ). "read excel data CREATE OBJECT lo_uploader. lo_uploader->max_rows = 1000. "设置读取最大行,默认9999 lo_uploader->filename = p_file. lo_uploader->header_rows_count = 3. "Main lo_uploader->sheet_name = '基本-物料主数据'. lo_uploader->upload( CHANGING ct_data = lt_main_upload ). IF sy-subrc NE 0. MESSAGE '读取数据失败,请检查模板!' TYPE 'E'. ENDIF. "Purchase lo_uploader->sheet_name = '附加-采购视图数据'. lo_uploader->upload( CHANGING ct_data = lt_pur_upload ). IF sy-subrc NE 0. MESSAGE '读取数据失败,请检查模板!' TYPE 'E'. ENDIF. SORT lt_main_upload BY zsort ASCENDING. SORT lt_pur_upload BY zsort lifnr ASCENDING ean11 DESCENDING. "loading check data SELECT * FROM t023 INTO TABLE lt_t023 ORDER BY matkl ASCENDING. SELECT * FROM t006 INTO TABLE lt_t006 ORDER BY msehi ASCENDING. SELECT DISTINCT lgort FROM t001l INTO TABLE lt_t001l ORDER BY lgort ASCENDING. SELECT * FROM lfa1 INTO TABLE lt_lfa1 ORDER BY lifnr ASCENDING. SELECT * FROM kna1 INTO TABLE lt_kna1 ORDER BY kunnr ASCENDING. "处理导入的数据并且赋默认值 LOOP AT lt_main_upload INTO wa_main_upload. CLEAR: wa_main_alv. "condensed all field PERFORM frm_condensed_allfield USING l_main_comp CHANGING wa_main_upload. "检查序列码 IF strlen( wa_main_upload-zsort ) NE 5 OR wa_main_upload-zsort+0(1) NE 'A'. PERFORM frm_fill_outtab TABLES gt_outmain USING 'X' '排序编码不符合规范!' CHANGING wa_main_alv . "1.是否错误 2.消息文本 CONTINUE. ELSE. wa_main_alv-zsort = wa_main_upload-zsort. ENDIF. "检查商品类型 IF wa_main_upload-mtart NE 'Z001' AND wa_main_upload-mtart NE 'Z002' AND wa_main_upload-mtart NE 'Z003' AND wa_main_upload-mtart NE 'Z005' AND wa_main_upload-mtart NE 'Z007' AND wa_main_upload-mtart NE 'Z008'. PERFORM frm_fill_outtab TABLES gt_outmain USING 'X' '商品类型仅允许输入Z001/Z002/Z003/Z005/Z007/Z008!' CHANGING wa_main_alv . "1.是否错误 2.消息文本 CONTINUE. ELSE. wa_main_alv-mtart = wa_main_upload-mtart. ENDIF. "检查物料编码 CASE wa_main_alv-mtart. WHEN 'Z001' OR 'Z002'. "Z001/Z002 WHEN OTHERS. "Z003/Z005/Z007/Z008 IF wa_main_upload-matnr IS INITIAL. PERFORM frm_fill_outtab TABLES gt_outmain USING 'X' '物料编码必输!' CHANGING wa_main_alv . "1.是否错误 2.消息文本 CONTINUE. ENDIF. ENDCASE. wa_main_alv-matnr = wa_main_upload-matnr. CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' EXPORTING input = wa_main_alv-matnr IMPORTING output = wa_main_alv-matnr. "检查物料组 READ TABLE lt_t023 TRANSPORTING NO FIELDS WITH KEY matkl = wa_main_upload-matkl BINARY SEARCH. IF sy-subrc = 0. wa_main_alv-matkl = wa_main_upload-matkl. ELSE. PERFORM frm_fill_outtab TABLES gt_outmain USING 'X' '物料组在SAP中不存在!' CHANGING wa_main_alv . "1.是否错误 2.消息文本 CONTINUE. ENDIF. CASE wa_main_alv-mtart. WHEN 'Z001'. IF wa_main_upload-matkl+0(1) NE '1'. PERFORM frm_fill_outtab TABLES gt_outmain USING 'X' '物料组只允许1*!' CHANGING wa_main_alv . "1.是否错误 2.消息文本 CONTINUE. ENDIF. WHEN 'Z002'. IF wa_main_upload-matkl+0(1) NE '2'. PERFORM frm_fill_outtab TABLES gt_outmain USING 'X' '物料组只允许2*!' CHANGING wa_main_alv . "1.是否错误 2.消息文本 CONTINUE. ENDIF. WHEN 'Z003'. IF wa_main_upload-matkl+0(1) NE '4'. PERFORM frm_fill_outtab TABLES gt_outmain USING 'X' '物料组只允许4*!' CHANGING wa_main_alv . "1.是否错误 2.消息文本 CONTINUE. ENDIF. WHEN 'Z005'. IF wa_main_upload-matkl+0(1) NE '7'. PERFORM frm_fill_outtab TABLES gt_outmain USING 'X' '物料组只允许5*!' CHANGING wa_main_alv . "1.是否错误 2.消息文本 CONTINUE. ENDIF. WHEN 'Z007'. IF wa_main_upload-matkl+0(1) NE '3'. PERFORM frm_fill_outtab TABLES gt_outmain USING 'X' '物料组只允许7*!' CHANGING wa_main_alv . "1.是否错误 2.消息文本 CONTINUE. ENDIF. WHEN 'Z008'. IF wa_main_upload-matkl+0(1) NE '6'. PERFORM frm_fill_outtab TABLES gt_outmain USING 'X' '物料组只允许6*!' CHANGING wa_main_alv . "1.是否错误 2.消息文本 CONTINUE. ENDIF. ENDCASE. "检查商品类别 IF wa_main_upload-attyp NE '00' AND wa_main_upload-attyp NE '10'. PERFORM frm_fill_outtab TABLES gt_outmain USING 'X' '商品类别仅允许输入00/10!' CHANGING wa_main_alv . "1.是否错误 2.消息文本 CONTINUE. ELSE. wa_main_alv-attyp = wa_main_upload-attyp. ENDIF. "检查是否转换单位 IF wa_main_upload-zconv_unit IS NOT INITIAL AND wa_main_upload-zconv_unit NE 'X'. PERFORM frm_fill_outtab TABLES gt_outmain USING 'X' '是否单位转换仅允许输入空或X!' CHANGING wa_main_alv . "1.是否错误 2.消息文本 CONTINUE. ELSEIF wa_main_upload-zconv_unit IS NOT INITIAL. wa_main_alv-zconv_unit = wa_main_upload-zconv_unit. ENDIF. "物料描述 IF wa_main_upload-maktx IS INITIAL. PERFORM frm_fill_outtab TABLES gt_outmain USING 'X' '物料描述必输!' CHANGING wa_main_alv . "1.是否错误 2.消息文本 CONTINUE. ELSE. wa_main_alv-maktx = wa_main_upload-maktx. ENDIF. "基本单位 READ TABLE lt_t006 TRANSPORTING NO FIELDS WITH KEY msehi = wa_main_upload-meins BINARY SEARCH. IF sy-subrc NE 0. PERFORM frm_fill_outtab TABLES gt_outmain USING 'X' '基本单位在SPA中不存在!' CHANGING wa_main_alv . "1.是否错误 2.消息文本 CONTINUE. ELSE. wa_main_alv-meins = wa_main_upload-meins. ENDIF. "比值 & 采购单位 IF wa_main_alv-zconv_unit = 'X'. IF wa_main_upload-umrez IS INITIAL OR wa_main_upload-bstme IS INITIAL. PERFORM frm_fill_outtab TABLES gt_outmain USING 'X' '比值/采购单位必输!' CHANGING wa_main_alv . "1.是否错误 2.消息文本 CONTINUE. ENDIF. IF zcl_common_tools=>check_valid_number( wa_main_upload-umrez ) = abap_false. PERFORM frm_fill_outtab TABLES gt_outmain USING 'X' '比值只能输入数字!' CHANGING wa_main_alv . "1.是否错误 2.消息文本 CONTINUE. ENDIF. READ TABLE lt_t006 TRANSPORTING NO FIELDS WITH KEY msehi = wa_main_upload-bstme BINARY SEARCH. IF sy-subrc NE 0. PERFORM frm_fill_outtab TABLES gt_outmain USING 'X' '采购单位在SPA中不存在!' CHANGING wa_main_alv . "1.是否错误 2.消息文本 CONTINUE. ENDIF. wa_main_alv-umrez = wa_main_upload-umrez. wa_main_alv-bstme = wa_main_upload-bstme. ENDIF. "税收分类 IF wa_main_alv-matkl = '200112' OR wa_main_alv-matkl = '200117' OR wa_main_alv-matkl = '700701' OR wa_main_alv-matkl = '700703' OR wa_main_alv-matkl = '200118'. wa_main_alv-taklv = '7'. ELSE. wa_main_alv-taklv = '1'. ENDIF. "剩余货架寿命 & 总货架寿命 IF wa_main_upload-mhdhb IS NOT INITIAL AND zcl_common_tools=>check_valid_number( wa_main_upload-mhdhb ) = abap_false. PERFORM frm_fill_outtab TABLES gt_outmain USING 'X' '总货架寿命只能输入数字!' CHANGING wa_main_alv . "1.是否错误 2.消息文本 CONTINUE. ELSEIF wa_main_upload-mhdhb IS NOT INITIAL. wa_main_alv-mhdrz = '1'. wa_main_alv-mhdhb = wa_main_upload-mhdhb. ENDIF. "是否在列表分配CD/XM/FZ的列表 IF wa_main_upload-zconv_cd IS NOT INITIAL AND wa_main_upload-zconv_cd NE 'X'. PERFORM frm_fill_outtab TABLES gt_outmain USING 'X' '是否列出XX仅允许输入空或X!' CHANGING wa_main_alv . "1.是否错误 2.消息文本 CONTINUE. ELSEIF wa_main_upload-zconv_xm IS NOT INITIAL AND wa_main_upload-zconv_xm NE 'X'. PERFORM frm_fill_outtab TABLES gt_outmain USING 'X' '是否列出XX仅允许输入空或X!' CHANGING wa_main_alv . "1.是否错误 2.消息文本 CONTINUE. ELSEIF wa_main_upload-zconv_fz IS NOT INITIAL AND wa_main_upload-zconv_fz NE 'X'. PERFORM frm_fill_outtab TABLES gt_outmain USING 'X' '是否列出XX仅允许输入空或X!' CHANGING wa_main_alv . "1.是否错误 2.消息文本 CONTINUE. ELSEIF wa_main_upload-zconv_cd IS INITIAL AND wa_main_upload-zconv_xm IS INITIAL AND wa_main_upload-zconv_fz IS INITIAL. PERFORM frm_fill_outtab TABLES gt_outmain USING 'X' '是否列出XX/XX/XX至少选择一个!' CHANGING wa_main_alv . "1.是否错误 2.消息文本 CONTINUE. ELSE. wa_main_alv-zconv_cd = wa_main_upload-zconv_cd. wa_main_alv-zconv_xm = wa_main_upload-zconv_xm. wa_main_alv-zconv_fz = wa_main_upload-zconv_fz. ENDIF. "固定值 项目类别组 wa_main_alv-mtpos = 'NORM'. "物料定价组 CASE wa_main_alv-mtart. WHEN 'Z001'. IF wa_main_alv-matkl = '100501' OR wa_main_alv-matkl = '100502'. wa_main_alv-kondm = '50'. ELSE. wa_main_alv-kondm = '10'. ENDIF. WHEN 'Z002'. IF wa_main_alv-matkl = '200301'. wa_main_alv-kondm = '40'. ELSEIF wa_main_alv-matkl = '200110' OR wa_main_alv-matkl = '200201'. wa_main_alv-kondm = '30'. ELSE. wa_main_alv-kondm = '20'. ENDIF. WHEN OTHERS. ENDCASE. IF strlen( wa_main_alv-maktx ) >= 2. IF wa_main_alv-zconv_cd = 'X' AND wa_main_alv-maktx+0(2) = 'YW'. wa_main_alv-kondm = '70'. ENDIF. ENDIF. "科目组设置 CASE wa_main_alv-mtart. WHEN 'Z001'. wa_main_alv-ktgrm = 'Z1'. WHEN 'Z002'. IF wa_main_alv-matkl = '200112' OR wa_main_alv-matkl = '200117'. wa_main_alv-ktgrm = 'ZD'. ELSE. wa_main_alv-ktgrm = 'Z2'. ENDIF. WHEN 'Z003'. wa_main_alv-ktgrm = 'Z3'. WHEN OTHERS. wa_main_alv-ktgrm = 'Z4'. ENDCASE. "列表-存储 wa_main_alv-lstfl = '02'. "列表-分销中心 wa_main_alv-lstvz = '02'. ***后勤需要读入的值 "是否配货单位(用于标识现裱 /现烤) IF wa_main_upload-zconv_deli IS NOT INITIAL AND ( wa_main_upload-zconv_deli NE 'B' AND wa_main_upload-zconv_deli NE 'K' AND wa_main_upload-zconv_deli NE 'X' ). PERFORM frm_fill_outtab TABLES gt_outmain USING 'X' '是否配货单位仅允许输入空或B/K/N/X!' CHANGING wa_main_alv . "1.是否错误 2.消息文本 CONTINUE. ELSEIF wa_main_upload-zconv_deli IS NOT INITIAL. wa_main_alv-zconv_deli = wa_main_upload-zconv_deli. ENDIF. "特殊采购类 IF wa_main_alv-mtart = 'Z003'. wa_main_alv-sobsl = wa_main_upload-sobsl. ENDIF. "生成后勤数据 IF wa_main_alv-zconv_cd = 'X'. PERFORM frm_fill_logistics USING 'X' 'AAZ1' wa_main_alv . "X 表示生产公司 空 表示销售公司 R表示参考公司 PERFORM frm_fill_logistics USING '' 'AAY1' wa_main_alv. "X 表示生产公司 空 表示销售公司 R表示参考公司 ENDIF. IF wa_main_alv-zconv_xm = 'X'. PERFORM frm_fill_logistics USING 'X' 'BBZ1' wa_main_alv. PERFORM frm_fill_logistics USING '' 'BBY1' wa_main_alv. ENDIF. IF wa_main_alv-zconv_fz = 'X'. PERFORM frm_fill_logistics USING 'X' 'CCZ1' wa_main_alv. PERFORM frm_fill_logistics USING '' 'CCY1' wa_main_alv. ENDIF. "参考工厂数据 PERFORM frm_fill_logistics USING 'R' '99DC' wa_main_alv. PERFORM frm_fill_logistics USING 'R' '99ST' wa_main_alv. "评估类 CASE wa_main_alv-mtart. WHEN 'Z001'. wa_main_alv-bklas = '7920'. WHEN 'Z002'. IF wa_main_alv-matkl = '200112' OR wa_main_alv-matkl = '200117' OR wa_main_alv-matkl = '200118'. wa_main_alv-bklas = '7901'. ELSE. wa_main_alv-bklas = '7900'. ENDIF. WHEN 'Z003'. wa_main_alv-bklas = '3100'. WHEN 'Z005'. wa_main_alv-bklas = '3050'. WHEN 'Z007'. wa_main_alv-bklas = '7930'. WHEN 'Z008'. IF wa_main_upload-bklas IS INITIAL. PERFORM frm_fill_outtab TABLES gt_outmain USING 'X' '评估类必填!' CHANGING wa_main_alv . "1.是否错误 2.消息文本 CONTINUE. ENDIF. wa_main_alv-bklas = wa_main_upload-bklas. WHEN OTHERS. ENDCASE. "价格单位 wa_main_alv-peinh = '1000'. "标准价 IF wa_main_upload-stprs IS NOT INITIAL AND zcl_common_tools=>check_valid_number( wa_main_upload-stprs ) = abap_false. PERFORM frm_fill_outtab TABLES gt_outmain USING 'X' '标准价只能输入数字!' CHANGING wa_main_alv . "1.是否错误 2.消息文本 CONTINUE. ELSE. wa_main_alv-stprs = wa_main_upload-stprs. ENDIF. "是否扩充采购视图 IF wa_main_alv-mtart NE 'Z003'. wa_main_alv-zconv_pur = 'X'. READ TABLE lt_pur_upload TRANSPORTING NO FIELDS WITH KEY zsort = wa_main_alv-zsort BINARY SEARCH. IF sy-subrc NE 0. PERFORM frm_fill_outtab TABLES gt_outmain USING 'X' 'SHEET[附加-采购视图数据]未维护数据!' CHANGING wa_main_alv . "1.是否错误 2.消息文本 CONTINUE. ENDIF. LOOP AT lt_pur_upload INTO wa_pur_upload WHERE zsort = wa_main_alv-zsort. CLEAR: wa_outpur,lt_ean_type,wa_ean_type. l_continue_flag = sy-tabix. "condensed all field PERFORM frm_condensed_allfield USING l_pur_comp CHANGING wa_pur_upload. wa_outpur-zsort = wa_pur_upload-zsort. "供应商 wa_outpur-lifnr = wa_pur_upload-lifnr. CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' EXPORTING input = wa_outpur-lifnr IMPORTING output = wa_outpur-lifnr. READ TABLE lt_lfa1 TRANSPORTING NO FIELDS WITH KEY lifnr = wa_outpur-lifnr. IF sy-subrc NE 0. CLEAR:wa_outpur-lifnr. l_continue_flag = '附加-采购视图数据,行:' && l_continue_flag && '供应商在SAP中不存在!'. PERFORM frm_fill_outtab TABLES gt_outmain USING 'X' l_continue_flag CHANGING wa_main_alv . "1.是否错误 2.消息文本 EXIT. ENDIF. "采购组织 wa_outpur-ekorg = '1000'. "工厂 CASE wa_pur_upload-werks. WHEN 'AAZ1'OR 'AAY1' OR 'BBZ1' OR 'BBY1' OR 'CCZ1' OR 'CCY1'. wa_outpur-werks = wa_pur_upload-werks. WHEN OTHERS. l_continue_flag = '附加-采购视图数据,行:' && l_continue_flag && '工厂只允许输入AAZ1/AAY1/BBZ1/BBY1/CCZ1/CCY1!'. PERFORM frm_fill_outtab TABLES gt_outmain USING 'X' l_continue_flag CHANGING wa_main_alv . "1.是否错误 2.消息文本 EXIT. ENDCASE. "采购组 CASE wa_pur_upload-werks. WHEN 'AAZ1' OR 'BBZ1' OR 'CCZ1'. wa_outpur-ekgrp = 'B11'. WHEN OTHERS. wa_outpur-ekgrp = 'B21'. ENDCASE. "税代码 wa_outpur-mwskz = wa_pur_upload-mwskz. "净价 IF wa_pur_upload-netpr IS NOT INITIAL AND zcl_common_tools=>check_valid_number( wa_pur_upload-netpr ) = abap_false. l_continue_flag = '附加-采购视图数据,行:' && l_continue_flag && '净价只能输入数字!'. PERFORM frm_fill_outtab TABLES gt_outmain USING 'X' l_continue_flag CHANGING wa_main_alv . "1.是否错误 2.消息文本 EXIT. ELSEIF wa_pur_upload-netpr IS NOT INITIAL. wa_outpur-netpr = wa_pur_upload-netpr. ENDIF. "货币码 wa_outpur-waers = 'CNY'. "价格单位 wa_outpur-peinh = '1'. "订单价格单位(采购) IF wa_main_alv-zconv_unit = 'X'. wa_outpur-bprme = wa_main_alv-bstme. ELSE. wa_outpur-bprme = wa_main_alv-meins. ENDIF. "GTIN IF wa_pur_upload-ean11 IS NOT INITIAL. SELECT SINGLE matnr FROM mara INTO l_matnr WHERE ean11 = wa_pur_upload-ean11. IF sy-subrc = 0. SHIFT l_matnr LEFT DELETING LEADING '0'. l_continue_flag = '附加-采购视图数据,行:' && l_continue_flag && 'GTIN编码已经分配给物料:' && l_matnr && '!'. PERFORM frm_fill_outtab TABLES gt_outmain USING 'X' l_continue_flag CHANGING wa_main_alv . "1.是否错误 2.消息文本 EXIT. ENDIF. SELECT SINGLE matnr FROM mean INTO l_matnr WHERE ean11 = wa_pur_upload-ean11. IF sy-subrc = 0. SHIFT l_matnr LEFT DELETING LEADING '0'. l_continue_flag = '附加-采购视图数据,行:' && l_continue_flag && 'GTIN编码已经分配给物料:' && l_matnr && '!'. PERFORM frm_fill_outtab TABLES gt_outmain USING 'X' l_continue_flag CHANGING wa_main_alv . "1.是否错误 2.消息文本 EXIT. ENDIF. ENDIF. "EAN No. wa_outpur-ean11 = wa_pur_upload-ean11. "EAN Type CALL FUNCTION 'EAN_TYPE' EXPORTING i_ean = wa_outpur-ean11 TABLES e_tab_eantp = lt_ean_type. READ TABLE lt_ean_type INTO wa_ean_type INDEX 1. IF sy-subrc = 0. wa_outpur-numtp = wa_ean_type-eantyp. ENDIF. "主GTIN AT NEW zsort. wa_outpur-hpean = 'X'. ENDAT. "是否分配GTIN到当前供应商 wa_outpur-lartn = 'X'. "供应商的主GTIN AT NEW lifnr. wa_outpur-lfean = 'X'. ENDAT. APPEND wa_outpur TO gt_outpur. CLEAR: l_continue_flag. ENDLOOP. IF l_continue_flag IS NOT INITIAL. CONTINUE. ENDIF. ENDIF. "销售视图 IF wa_main_alv-zconv_cd = 'X'. wa_main_alv-z_conv_sales = '销售组织1001 1002#'. ENDIF. IF wa_main_alv-zconv_xm = 'X'. wa_main_alv-z_conv_sales = wa_main_alv-z_conv_sales && '销售组织2001 2002#'. ENDIF. IF wa_main_alv-zconv_fz = 'X'. wa_main_alv-z_conv_sales = wa_main_alv-z_conv_sales && '销售组织3001 3002#'. ENDIF. wa_main_alv-z_conv_sales = '将扩充:' && wa_main_alv-z_conv_sales && '(*001扩充渠道20,*002扩充渠道10 20 30 40)'. "All data ready PERFORM frm_fill_outtab TABLES gt_outmain USING '' '本数据将执行创建物料!' CHANGING wa_main_alv . "1.是否错误 2.消息文本 ENDLOOP. ENDFORM. " FRM_READ_EXCEL *&---------------------------------------------------------------------* *& Form FRM_SHOW_ALV *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM frm_show_alv . DATA: lo_columns TYPE REF TO cl_salv_columns. DATA: lo_column TYPE REF TO cl_salv_column. DATA: lo_display TYPE REF TO cl_salv_display_settings. "注册事件 DATA: lo_events_c TYPE REF TO lcl_events, lo_events TYPE REF TO cl_salv_events_table. CREATE OBJECT lo_events_c. "show data TRY. cl_salv_table=>factory( IMPORTING r_salv_table = go_alv CHANGING t_table = gt_outmain[] ). CATCH cx_salv_msg. ENDTRY. lo_columns = go_alv->get_columns( ). "获取对象 lo_columns->set_optimize( 'X' ). "设置行宽自适应 TRY. lo_column = lo_columns->get_column( 'ICON' ). "获取列 lo_column->set_long_text( '状态' ). "设置列长文本描述 lo_column->set_medium_text( '状态' ). "设置列中文本描述 lo_column->set_short_text( '状态' ). "设置列短文本描述 CATCH cx_salv_not_found. "#EC NO_HANDLER ENDTRY. TRY. lo_column = lo_columns->get_column( 'TEXT' ). "获取列 lo_column->set_long_text( '状态文本' ). "设置列长文本描述 lo_column->set_medium_text( '状态文本' ). "设置列中文本描述 lo_column->set_short_text( '状态文本' ). "设置列短文本描述 CATCH cx_salv_not_found. "#EC NO_HANDLER ENDTRY. TRY. lo_column = lo_columns->get_column( 'ZSORT' ). lo_column->set_long_text( '导入序号' ). lo_column->set_medium_text( '导入序号' ). lo_column->set_short_text( '导入序号' ). CATCH cx_salv_not_found. "#EC NO_HANDLER ENDTRY. TRY. lo_column = lo_columns->get_column( 'ATTYP' ). lo_column->set_long_text( '商品类别' ). lo_column->set_medium_text( '商品类别' ). lo_column->set_short_text( '商品类别' ). CATCH cx_salv_not_found. "#EC NO_HANDLER ENDTRY. TRY. lo_column = lo_columns->get_column( 'ZCONV_UNIT' ). lo_column->set_long_text( '是否单位转换' ). lo_column->set_medium_text( '是否单位转换' ). lo_column->set_short_text( '是否单位转换' ). CATCH cx_salv_not_found. "#EC NO_HANDLER ENDTRY. TRY. lo_column = lo_columns->get_column( 'UMREZ' ). lo_column->set_long_text( '比值' ). lo_column->set_medium_text( '比值' ). lo_column->set_short_text( '比值' ). CATCH cx_salv_not_found. "#EC NO_HANDLER ENDTRY. TRY. lo_column = lo_columns->get_column( 'Z_CONV_SALES' ). lo_column->set_long_text( '销售视图扩充信息显示' ). lo_column->set_medium_text( '销售视图扩充信息显示' ). lo_column->set_short_text( '销售视图扩充信息显示' ). CATCH cx_salv_not_found. "#EC NO_HANDLER ENDTRY. TRY. lo_column = lo_columns->get_column( 'PEINH' ). lo_column->set_long_text( '价格单位' ). lo_column->set_medium_text( '价格单位' ). lo_column->set_short_text( '价格单位' ). CATCH cx_salv_not_found. "#EC NO_HANDLER ENDTRY. TRY. lo_column = lo_columns->get_column( 'BSTME' ). lo_column->set_long_text( '采购单位' ). lo_column->set_medium_text( '采购单位' ). lo_column->set_short_text( '采购单位' ). CATCH cx_salv_not_found. "#EC NO_HANDLER ENDTRY. TRY. lo_column = lo_columns->get_column( 'ZCONV_PUR' ). lo_column->set_long_text( '是否扩充采购视图' ). lo_column->set_medium_text( '是否扩充采购视图' ). lo_column->set_short_text( '是否扩充采购视图' ). CATCH cx_salv_not_found. "#EC NO_HANDLER ENDTRY. TRY. lo_column = lo_columns->get_column( 'ZCONV_CD' ). lo_column->set_long_text( '是否列出XX' ). lo_column->set_medium_text( '是否列出XX' ). lo_column->set_short_text( '是否列出XX' ). CATCH cx_salv_not_found. "#EC NO_HANDLER ENDTRY. TRY. lo_column = lo_columns->get_column( 'ZCONV_XM' ). lo_column->set_long_text( '是否列出XX' ). lo_column->set_medium_text( '是否列出XX' ). lo_column->set_short_text( '是否列出XX' ). CATCH cx_salv_not_found. "#EC NO_HANDLER ENDTRY. TRY. lo_column = lo_columns->get_column( 'ZCONV_FZ' ). lo_column->set_long_text( '是否列出XX' ). lo_column->set_medium_text( '是否列出XX' ). lo_column->set_short_text( '是否列出XX' ). CATCH cx_salv_not_found. "#EC NO_HANDLER ENDTRY. TRY. lo_column = lo_columns->get_column( 'ZCONV_DELI' ). lo_column->set_long_text( '是否配货单位' ). lo_column->set_medium_text( '是否配货单位' ). lo_column->set_short_text( '是否配货单位' ). CATCH cx_salv_not_found. "#EC NO_HANDLER ENDTRY. "设置自定义状态栏 go_alv->set_screen_status( pfstatus = 'STANDARD_FULLSCREEN' report = sy-cprog set_functions = go_alv->c_functions_all ). lo_events = go_alv->get_event( ). "获取事件对象 SET HANDLER lo_events_c->on_user_command FOR lo_events. "注册on_user_command事件 SET HANDLER lo_events_c->on_double_click FOR lo_events. lo_display = go_alv->get_display_settings( ). "获取对象 " lo_display->set_list_header( text-t01 ). "设置GUI抬头文本 go_alv->display( ). ENDFORM. " FRM_SHOW_ALV *&---------------------------------------------------------------------* *& Form FRM_on_user_command *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->P_E_SALV_FUNCTION text *----------------------------------------------------------------------* FORM frm_on_user_command USING p_ucomm. DATA: is_stable TYPE lvc_s_stbl. FIELD-SYMBOLS: <fs_data> TYPE ty_main_alv. CASE p_ucomm. WHEN 'EXEC'. READ TABLE gt_outmain TRANSPORTING NO FIELDS WITH KEY icon = icon_green_light text = '本数据将执行创建物料!'. IF sy-subrc NE 0. MESSAGE '无可创建物料的行,请修正错误再执行创建!' TYPE 'E'. ELSE. LOOP AT gt_outmain ASSIGNING <fs_data> WHERE icon = icon_green_light AND text = '本数据将执行创建物料!'. PERFORM frm_material_creation USING <fs_data>. ENDLOOP. ENDIF. WHEN OTHERS. ENDCASE. is_stable-row = 'X'. "保持行 is_stable-col = 'X'. "保持列 CALL METHOD go_alv->refresh( EXPORTING s_stable = is_stable ). ENDFORM. " FRM_on_user_command *&---------------------------------------------------------------------* *& Form FRM_DOWNLOAD_TEMPLATE *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM frm_download_template . DATA: l_fullpath TYPE string, l_path TYPE string, l_filename TYPE string, l_default_name TYPE string, l_filter TYPE string, l_destination TYPE rlgrap-filename, ls_key TYPE wwwdatatab, l_rc TYPE sy-subrc, l_objid TYPE wwwdata-objid. CLEAR: l_fullpath,l_path,l_filename,l_filter,l_destination,ls_key. l_filter = 'XLS|*.XLS'. l_default_name = text-t01. CALL METHOD cl_gui_frontend_services=>file_save_dialog EXPORTING default_file_name = l_default_name file_filter = l_filter"cl_gui_frontend_services=>filetype_all CHANGING filename = l_filename path = l_path fullpath = l_fullpath EXCEPTIONS cntl_error = 1 error_no_gui = 2 not_supported_by_gui = 3. IF l_fullpath IS NOT INITIAL. IF strlen( l_fullpath ) GT 128. MESSAGE text-m02 TYPE 'E'. ENDIF. l_destination = l_fullpath. l_objid = sy-repid. *&**SMW0上传的方式 SELECT relid objid checkout checknew INTO ls_key UP TO 1 ROWS FROM wwwdata WHERE relid = 'MI' AND objid = l_objid ORDER BY srtf2 DESCENDING. EXIT. ENDSELECT. *&**下载模版 IF ls_key IS NOT INITIAL. CALL FUNCTION 'DOWNLOAD_WEB_OBJECT' EXPORTING key = ls_key destination = l_destination IMPORTING rc = l_rc. IF l_rc EQ 0. MESSAGE text-m08 TYPE 'S'. p_file = l_fullpath. ELSE. MESSAGE text-m10 TYPE 'E'. ENDIF. ELSE. MESSAGE text-m09 TYPE 'E'. ENDIF. ENDIF. ENDFORM. " FRM_DOWNLOAD_TEMPLATE *&---------------------------------------------------------------------* *& Form FRM_INIT_FUNCKEY *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM frm_init_funckey . DATA: ls_smp_dyntxt TYPE smp_dyntxt. ls_smp_dyntxt-text = '下载模板'. ls_smp_dyntxt-icon_id = icon_export. ls_smp_dyntxt-icon_text = '下载模板'. ls_smp_dyntxt-quickinfo = '下载导入模板'. sscrfields-functxt_01 = ls_smp_dyntxt. ENDFORM. " FRM_INIT_FUNCKEY *&---------------------------------------------------------------------* *& Form frm_fill_outtab *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->P_1006 text * -->P_1007 text * <--P_wa_main_ALV text * -->P_gt_outmain text *----------------------------------------------------------------------* FORM frm_fill_outtab TABLES gt_outmain TYPE ty_main_t USING value(p1) value(p2) CHANGING wa_main_alv TYPE ty_main_alv. IF p1 = 'X'. wa_main_alv-icon = icon_red_light. ELSE. wa_main_alv-icon = icon_green_light. ENDIF. wa_main_alv-text = p2. APPEND wa_main_alv TO gt_outmain. ENDFORM. " frm_fill_outtab *&---------------------------------------------------------------------* *& Form FRM_CONDENSED_ALLFIELD *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * <--P_wa_main_ALV text *----------------------------------------------------------------------* FORM frm_condensed_allfield USING value(p1) CHANGING wa_data. FIELD-SYMBOLS: <fs_field> TYPE any, <fs_value> TYPE any. ASSIGN wa_data TO <fs_field>. DO p1 TIMES. ASSIGN COMPONENT sy-index OF STRUCTURE wa_data TO <fs_value>. IF sy-subrc = 0. CONDENSE <fs_value> NO-GAPS. ENDIF. ENDDO. ENDFORM. " FRM_CONDENSED_ALLFIELD *&---------------------------------------------------------------------* *& Form FRM_DOUBLE_CLICK *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->P_ROW text * -->P_COLUMN text *----------------------------------------------------------------------* FORM frm_double_click USING p_row p_column. DATA : lr_detail TYPE REF TO cl_salv_table. DATA: lo_columns TYPE REF TO cl_salv_columns, lo_column TYPE REF TO cl_salv_column, lo_column_list TYPE REF TO cl_salv_column_list, lo_display TYPE REF TO cl_salv_display_settings. DATA: lo_cols_tab TYPE REF TO cl_salv_columns_table, lo_col_tab TYPE REF TO cl_salv_column_table. FIELD-SYMBOLS: <fs_outmain> TYPE ty_main_alv. DATA: lt_outpur TYPE ty_pur_t, lt_logistics TYPE TABLE OF ty_logistics_alv. DATA: lt_sellist TYPE TABLE OF spopli, wa_sellist TYPE spopli. DATA: l_antwort TYPE c. FIELD-SYMBOLS: <fs_table> TYPE STANDARD TABLE. * 选择条件 wa_sellist-varoption = '显示后勤分销数据'. APPEND wa_sellist TO lt_sellist. wa_sellist-varoption = '显示采购数据'. APPEND wa_sellist TO lt_sellist. CALL FUNCTION 'POPUP_TO_DECIDE_LIST' EXPORTING titel = '提示' textline1 = '选择显示的内容:' mark_max = 1 "最大选择数 mark_flag = 'X' "选择框标志,如果是‘X’表示是checkbox,如果是空,表示是radio IMPORTING answer = l_antwort TABLES t_spopli = lt_sellist EXCEPTIONS too_much_answers = 1 too_much_marks = 2. "取得点击物料的明显清单 READ TABLE gt_outmain ASSIGNING <fs_outmain> INDEX p_row. IF sy-subrc = 0. CASE l_antwort. WHEN '1'. lt_logistics = gt_logistics_alv. DELETE lt_logistics WHERE zsort NE <fs_outmain>-zsort. SORT lt_logistics BY zsort. ASSIGN lt_logistics TO <fs_table>. WHEN '2'. lt_outpur = gt_outpur. DELETE lt_outpur WHERE zsort NE <fs_outmain>-zsort. SORT lt_outpur BY zsort. ASSIGN lt_outpur TO <fs_table>. WHEN OTHERS. RETURN. ENDCASE. ENDIF. "check initial IF <fs_table> IS INITIAL. MESSAGE '无明细数据可显示!' TYPE 'S' DISPLAY LIKE 'E'. EXIT. ENDIF. "show details TRY. CALL METHOD cl_salv_table=>factory IMPORTING r_salv_table = lr_detail CHANGING t_table = <fs_table>. CATCH cx_salv_msg . ENDTRY. "columns setting lo_columns = lr_detail->get_columns( ). "获取对象 lo_columns->set_optimize( 'X' ). "设置行宽自适应 lo_cols_tab = lr_detail->get_columns( ). "获取对象 TRY. lo_column = lo_columns->get_column( 'ZSORT' ). lo_column->set_long_text( '导入序号' ). lo_column->set_medium_text( '导入序号' ). lo_column->set_short_text( '导入序号' ). CATCH cx_salv_not_found. "#EC NO_HANDLER ENDTRY. lo_display = lr_detail->get_display_settings( ). "获取对象 IF l_antwort = '1'. lo_display->set_list_header( '后勤分销视图明细' ). "设置GUI抬头文本 ELSEIF l_antwort = '2'. lo_display->set_list_header( '采购视图明细' ). "设置GUI抬头文本 ENDIF. " IF lr_detail IS BOUND. lr_detail->set_screen_popup( start_column = 10 end_column = 110 start_line = 4 end_line = 14 ). lr_detail->display( ). ENDIF. ENDFORM. " FRM_DOUBLE_CLICK *&---------------------------------------------------------------------* *& Form FRM_FILL_LOGISTICS *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->P_1770 text * -->P_WA_MAIN_ALV text *----------------------------------------------------------------------* FORM frm_fill_logistics USING value(p1) value(p2) wa_main_alv TYPE ty_main_alv. DATA: wa_logistics_alv TYPE ty_logistics_alv. wa_logistics_alv-zsort = wa_main_alv-zsort. "工厂 wa_logistics_alv-werks = p2. IF p1 = 'X'. "生产公司 "RP类型 CASE wa_main_alv-mtart. WHEN 'Z001'. IF wa_main_alv-matkl = '100101'. wa_logistics_alv-dismm = 'M0'. ELSE. wa_logistics_alv-dismm = 'PD'. ENDIF. WHEN 'Z002' OR 'Z008'. wa_logistics_alv-dismm = 'ND'. WHEN OTHERS. wa_logistics_alv-dismm = 'PD'. ENDCASE. "批量大小 wa_logistics_alv-disls = 'EX'. "舍入值 IF wa_main_alv-zconv_unit = 'X'. wa_logistics_alv-bstrf = wa_main_alv-umrez. ELSE. wa_logistics_alv-bstrf = '1'. ENDIF. "存货计划员/RP控制器 IF strlen( wa_main_alv-matkl ) > 1. CASE wa_main_alv-matkl+0(1). WHEN '1'. IF wa_main_alv-matkl = '100101'. wa_logistics_alv-dispo = 'C02'. ELSEIF wa_main_alv-matkl = '100501' OR wa_main_alv-matkl = '100502' OR wa_main_alv-matkl = '400401'. wa_logistics_alv-dispo = 'C03'. ELSE. wa_logistics_alv-dispo = 'C01'. ENDIF. WHEN '4'. wa_logistics_alv-dispo = 'B01'. WHEN '7'. wa_logistics_alv-dispo = 'Y01'. WHEN '3'. wa_logistics_alv-dispo = 'Y02'. WHEN OTHERS. ENDCASE. ENDIF. "批次管理 CASE wa_main_alv-mtart. WHEN 'Z003'. wa_logistics_alv-xchpf = 'X'. WHEN 'Z005'. IF strlen( wa_main_alv-matkl ) > 1 AND wa_main_alv-matkl+0(1) = '7'. IF wa_main_alv-matkl NE '700601' AND wa_main_alv-matkl NE '700701' AND wa_main_alv-matkl NE '700703'. wa_logistics_alv-xchpf = 'X'. ENDIF. ENDIF. WHEN OTHERS. ENDCASE. "库存地点/外部采购仓储地点 CASE wa_main_alv-mtart. WHEN 'Z001'. IF wa_main_alv-matkl = '100501' OR wa_main_alv-matkl = '100502'. wa_logistics_alv-lgfsb = '5002'. ELSE. wa_logistics_alv-lgfsb = '5001'. ENDIF. WHEN 'Z003'. wa_logistics_alv-lgfsb = '2001'. WHEN 'Z005'. wa_logistics_alv-lgfsb = '1001'. WHEN 'Z007'. wa_logistics_alv-lgfsb = '1002'. WHEN 'Z008'. wa_logistics_alv-lgfsb = '1003'. WHEN OTHERS. ENDCASE. "是否配货单位(用于标识现裱 /现烤)->决定配货单位 IF wa_main_alv-zconv_deli CA 'BKX'. "WHEN B/K/N IF wa_main_alv-zconv_unit = 'X'. wa_logistics_alv-zmein = wa_main_alv-bstme. ELSE. wa_logistics_alv-zmein = ''. ENDIF. ENDIF. "采购类型 CASE wa_main_alv-mtart. WHEN 'Z001' OR 'Z003'. wa_logistics_alv-beskz = 'E'. WHEN 'Z005' OR 'Z007' OR 'Z008'. wa_logistics_alv-beskz = 'F'. WHEN OTHERS. ENDCASE. "特殊采购类 wa_logistics_alv-sobsl = wa_main_alv-sobsl. "反冲 CASE wa_main_alv-mtart. WHEN 'Z002' OR 'Z003' OR 'Z005' OR 'Z007'. wa_logistics_alv-rgekz = '2'. ENDCASE. "生产仓储地点 CASE wa_main_alv-mtart. WHEN 'Z001'. IF wa_main_alv-matkl = '100501' OR wa_main_alv-matkl = '100502'. wa_logistics_alv-lgpro = '5002'. ELSE. wa_logistics_alv-lgpro = '5001'. ENDIF. WHEN 'Z003' OR 'Z005' OR 'Z007'. wa_logistics_alv-lgpro = '2001'. WHEN OTHERS. ENDCASE. "收货处理时间 IF wa_main_alv-mtart = 'Z001'. wa_logistics_alv-webaz = '1'. ENDIF. "计划边际码 CASE wa_main_alv-mtart. WHEN 'Z001' OR 'Z003' OR 'Z005' OR 'Z007'. wa_logistics_alv-fhori = '000'. ENDCASE. "策略组 IF strlen( wa_main_alv-matkl ) > 1. CASE wa_main_alv-matkl+0(1). WHEN '1' OR '3' OR '4' OR '5' OR '7'. IF wa_main_alv-matkl = '100101'. wa_logistics_alv-strgr = '50'. ELSE. wa_logistics_alv-strgr = '10'. ENDIF. WHEN OTHERS. ENDCASE. ENDIF. "消耗模式 wa_logistics_alv-vrmod = '2'. "向前消耗期间 wa_logistics_alv-vint1 = '30'. "逆向消耗期间 wa_logistics_alv-vint2 = '30'. "可用性检查 wa_logistics_alv-mtvfp = '02'. "独立/集中 wa_logistics_alv-sbdkz = '2'. "生产管理员 CASE wa_main_alv-mtart. WHEN 'Z001'. wa_logistics_alv-fevor = '001'. WHEN 'Z003'. wa_logistics_alv-fevor = '002'. ENDCASE. "生产计划参数文件 CASE wa_main_alv-mtart. WHEN 'Z001' OR 'Z003'. IF wa_main_alv-matkl NE '100101'. wa_logistics_alv-sfcpf = 'Z00001'. ENDIF. ENDCASE. "生产单位 IF wa_main_alv-mtart = 'Z003'. IF wa_main_alv-zconv_unit = 'X' AND wa_main_alv-bstme = 'BEI'. wa_logistics_alv-frtme = 'BEI'. ELSEIF wa_main_alv-zconv_unit NE 'X' AND wa_main_alv-meins = 'BEI'. wa_logistics_alv-frtme = 'BEI'. ENDIF. ENDIF. "不足交货允差 & 过度交货允差 CASE wa_main_alv-mtart. WHEN 'Z001' OR 'Z003'. wa_logistics_alv-uneto = '20'. wa_logistics_alv-ueeto = '20'. ENDCASE. ELSEIF p1 = 'R'. "参考99st 99dc "RP类型 wa_logistics_alv-dismm = 'ND'. "库存地点/外部采购仓储地点 wa_logistics_alv-lgfsb = '1001'. "采购类型 CASE wa_main_alv-mtart. WHEN 'Z001' OR 'Z003'. wa_logistics_alv-beskz = 'E'. WHEN 'Z005' OR 'Z007' OR 'Z008'. wa_logistics_alv-beskz = 'F'. WHEN OTHERS. ENDCASE. "可用性检查 wa_logistics_alv-mtvfp = '02'. ELSE. "销售公司 + "RP类型 wa_logistics_alv-dismm = 'ND'. "库存地点/外部采购仓储地点 CASE wa_main_alv-mtart. WHEN 'Z002'. wa_logistics_alv-lgfsb = '1004'. WHEN OTHERS. wa_logistics_alv-lgfsb = '1001'. ENDCASE. "采购类型 CASE wa_main_alv-mtart. WHEN 'Z001' OR 'Z003'. wa_logistics_alv-beskz = 'E'. WHEN 'Z005' OR 'Z007' OR 'Z008'. wa_logistics_alv-beskz = 'F'. WHEN OTHERS. ENDCASE. "可用性检查 wa_logistics_alv-mtvfp = '02'. ENDIF. APPEND wa_logistics_alv TO gt_logistics_alv. ENDFORM. " FRM_FILL_LOGISTICS *&---------------------------------------------------------------------* *& Form FRM_MATERIAL_CREATION *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->P_<FS_DATA> text *----------------------------------------------------------------------* FORM frm_material_creation USING ps_data TYPE ty_main_alv. FIELD-SYMBOLS: <fs_pur> TYPE ty_pur_alv, <fs_logistics> TYPE ty_logistics_alv. "ReCoding By Roger DATA: ls_headdata TYPE bapie1mathead, "Header data lt_clientdata TYPE TABLE OF bapie1marart, "Client data CLIENTEXT CLIENTEXTX 用于自定义增强的字段 lt_clientdatax TYPE TABLE OF bapie1marartx, lt_addnlclientdata TYPE TABLE OF bapie1maw1rt, "basic addition data lt_addnlclientdatax TYPE TABLE OF bapie1maw1rtx, lt_materialdescription TYPE TABLE OF bapie1maktrt, "material description data lt_plantdata TYPE TABLE OF bapie1marcrt, "plant level data PLANTEXT PLANTEXTX 用于自定义增强的字段 lt_plantdatax TYPE TABLE OF bapie1marcrtx, lt_plantext TYPE TABLE OF bapie1marcextrt, lt_plantextx TYPE TABLE OF bapie1marcextrtx, lt_valuationdata TYPE TABLE OF bapie1mbewrt, "valuation data lt_valuationdatax TYPE TABLE OF bapie1mbewrtx, lt_storagelocationdata TYPE TABLE OF bapie1mardrt, "Storage Location STORAGELOCATIONEXT STORAGELOCATIONEXTX 用于自定义增强的字段 lt_storagelocationdatax TYPE TABLE OF bapie1mardrtx, lt_unitsofmeasure TYPE TABLE OF bapie1marmrt, "多单位转换比例 & 文本 lt_unitsofmeasurex TYPE TABLE OF bapie1marmrtx, lt_internationalartnos TYPE TABLE OF bapie1meanrt, "国际商品号(GTINs) global level lt_vendorean TYPE TABLE OF bapie1mleart, "vendor level lt_inforecord_general TYPE TABLE OF bapieina, "采购信息记录 PIR lt_inforecord_purchorg TYPE TABLE OF wrfbapieine, lt_listingconditions TYPE TABLE OF wlk1_ueb, "execute listing data * lt_plantkeys TYPE TABLE OF bapie1wrkkey, " * lt_storagelocationkeys TYPE TABLE OF bapie1lgokey, * lt_valuationtypekeys TYPE TABLE OF bapie1bwakey, lt_salesdata TYPE TABLE OF bapie1mvkert, lt_salesdatax TYPE TABLE OF bapie1mvkertx, lt_return TYPE TABLE OF bapireturn1, "Global return table wa_clientdata TYPE bapie1marart, wa_clientdatax TYPE bapie1marartx, wa_addnlclientdata TYPE bapie1maw1rt, wa_addnlclientdatax TYPE bapie1maw1rtx, wa_materialdescription TYPE bapie1maktrt, wa_plantdata TYPE bapie1marcrt, wa_plantdatax TYPE bapie1marcrtx, wa_plantext TYPE bapie1marcextrt, wa_plantextx TYPE bapie1marcextrtx, wa_valuationdata TYPE bapie1mbewrt, wa_valuationdatax TYPE bapie1mbewrtx, wa_storagelocationdata TYPE bapie1mardrt, wa_storagelocationdatax TYPE bapie1mardrtx, wa_unitsofmeasure TYPE bapie1marmrt, wa_unitsofmeasurex TYPE bapie1marmrtx, wa_internationalartnos TYPE bapie1meanrt, wa_vendorean TYPE bapie1mleart, wa_layoutmoduleassgmt TYPE bapie1malgrt, wa_layoutmoduleassgmtx TYPE bapie1malgrtx, wa_inforecord_general TYPE bapieina, wa_inforecord_purchorg TYPE wrfbapieine, wa_listingconditions TYPE wlk1_ueb, * wa_plantkeys TYPE bapie1wrkkey, * wa_storagelocationkeys TYPE bapie1lgokey, * wa_valuationtypekeys TYPE bapie1bwakey, wa_return TYPE bapireturn1, wa_return_commit TYPE bapiret2. DATA: lt_bapimatinr TYPE TABLE OF bapimatinr, wa_bapimatinr TYPE bapimatinr. DATA: lt_matreturn TYPE TABLE OF merrdat, wa_matreturn TYPE merrdat. DATA: lt_stolocation_conf TYPE TABLE OF zmmr034_conf, wa_stolocation_conf TYPE zmmr034_conf. DATA: l_conditions TYPE string. DATA: lt_mean TYPE TABLE OF mean, wa_mean TYPE mean, lt_mlea TYPE TABLE OF mlea, wa_mlea TYPE mlea, l_tabix TYPE sy-tabix. DATA: ls_zallocate TYPE zallocate, ls_zallocatex TYPE zallocatex. CASE ps_data-zconv_deli. WHEN 'B'. "现裱 + 常规 l_conditions = `ZEXTEND_TYPE IN ( 'B','N' ) AND zstatus = 'X'`. WHEN 'K'. "现烤 + 常规 l_conditions = `ZEXTEND_TYPE IN ( 'K','N' ) AND zstatus = 'X'`. WHEN 'X'. "现裱 + 现烤 + 常规 l_conditions = `ZEXTEND_TYPE IN ( 'B','K','N' ) AND zstatus = 'X'`. WHEN OTHERS. l_conditions = `ZEXTEND_TYPE = 'N' AND zstatus = 'X'`. ENDCASE. SORT gt_outpur BY zsort lifnr ASCENDING. "查询已经存在的GTIN SELECT * FROM mean INTO TABLE lt_mean WHERE matnr = ps_data-matnr AND hpean = 'X'. SELECT * FROM mlea INTO TABLE lt_mlea WHERE matnr = ps_data-matnr AND lfean = 'X'. "query configuration SELECT * FROM zmmr034_conf INTO TABLE lt_stolocation_conf WHERE (l_conditions). *=======>Material Number IF ps_data-matnr IS INITIAL. CALL FUNCTION 'BAPI_MATERIAL_GETINTNUMBERRET' EXPORTING material_type = ps_data-mtart material_group = ps_data-matkl material_category = ps_data-attyp TABLES material_number = lt_bapimatinr. READ TABLE lt_bapimatinr INTO wa_bapimatinr INDEX 1. IF sy-subrc = 0. ps_data-matnr = wa_bapimatinr-material. ELSE. ps_data-icon = icon_red_light. ps_data-text = '获取物料编码失败,请稍后重试!'. RETURN. ENDIF. ENDIF. *=======>Header data * ls_headdata-function = '004'. "Function Type ls_headdata-material = ps_data-matnr. "商品编码 ls_headdata-matl_type = ps_data-mtart. "商品类型 ls_headdata-matl_group = ps_data-matkl. "物料组 ls_headdata-matl_cat = ps_data-attyp. "商品类别 * ls_headdata-no_appl_log = 'X'. "不使用SLG1输出消息,直接输出第一条错误,一般调试的时候使用可获得详细错误日志 "View Open Indicator ls_headdata-basic_view = 'X'. "基本数据视图 ls_headdata-list_view = 'X'. "列表视图 ls_headdata-sales_view = 'X'. "销售视图 ls_headdata-logdc_view = 'X'. "逻辑分销中心视图 ls_headdata-logst_view = 'X'. "后勤存储视图 * ls_HEADDATA-POS_VIEW = 'X'. "POS视图 **=======>Basic View "Retail client level * wa_clientdata-function = '004'. "Function Type wa_clientdata-material = ps_data-matnr. "商品编码 IF ps_data-zconv_unit NE 'X'. wa_clientdata-base_uom = ps_data-meins. "基本计量单位 wa_clientdata-po_unit = ''. "只有一个单位采购订单的计量单位留空 ELSE. wa_clientdata-base_uom = ps_data-meins. "基本计量单位 wa_clientdata-po_unit = ps_data-bstme. "采购订单的计量单位 ENDIF. wa_clientdata-tax_class = ps_data-taklv. "税收分类 wa_clientdata-division = '01'. "产品组 wa_clientdata-price_band = '1'. "价格标记类别 wa_clientdata-minremlife = ps_data-mhdrz. "剩余货架寿命 wa_clientdata-shelf_life = ps_data-mhdhb. "总货架寿命 APPEND wa_clientdata TO lt_clientdata. * wa_clientdatax-function = '004'. "Function Type wa_clientdatax-material = ps_data-matnr. "商品编码 wa_clientdatax-base_uom = 'X'. wa_clientdatax-po_unit = 'X'. wa_clientdatax-tax_class = 'X'. wa_clientdatax-division = 'X'. wa_clientdatax-price_band = 'X'. wa_clientdatax-minremlife = 'X'. wa_clientdatax-shelf_life = 'X'. APPEND wa_clientdatax TO lt_clientdatax. "Addition data * wa_addnlclientdata-function = '004'. "Function Type wa_addnlclientdata-material = ps_data-matnr. "商品编码 wa_addnlclientdata-val_class = ps_data-bklas. "评估类 IF ps_data-zconv_unit NE 'X'. wa_addnlclientdata-sales_unit = ''."只有一个单位销售单位留空 wa_addnlclientdata-issue_unit = ''."只有一个单位发货单位留空 ELSE. wa_addnlclientdata-sales_unit = ''. "销售单位 wa_addnlclientdata-issue_unit = ps_data-bstme."发货单位 ENDIF. wa_addnlclientdata-loadinggrp = '0001'. wa_addnlclientdata-repl_list = '1'. wa_addnlclientdata-li_proc_st = ps_data-lstfl. "列表:存储 清单程序 wa_addnlclientdata-li_proc_dc = ps_data-lstvz. "清单:分销中心 清单程序 wa_addnlclientdata-list_st_fr = sy-datum. wa_addnlclientdata-list_st_to = '99991231'. wa_addnlclientdata-list_dc_fr = sy-datum. wa_addnlclientdata-list_dc_to = '99991231'. wa_addnlclientdata-sell_st_fr = sy-datum. wa_addnlclientdata-sell_st_to = '99991231'. wa_addnlclientdata-sell_dc_fr = sy-datum. wa_addnlclientdata-sell_dc_to = '99991231'. APPEND wa_addnlclientdata TO lt_addnlclientdata. * wa_addnlclientdatax-function = '004'. "Function Type. wa_addnlclientdatax-material = ps_data-matnr. "商品编码 wa_addnlclientdatax-val_class = 'X'. wa_addnlclientdatax-sales_unit = 'X'. wa_addnlclientdatax-issue_unit = 'X'. wa_addnlclientdatax-loadinggrp = 'X'. wa_addnlclientdatax-repl_list = 'X'. wa_addnlclientdatax-li_proc_st = 'X'. wa_addnlclientdatax-li_proc_dc = 'X'. wa_addnlclientdatax-list_st_fr = 'X'. wa_addnlclientdatax-list_st_to = 'X'. wa_addnlclientdatax-list_dc_fr = 'X'. wa_addnlclientdatax-list_dc_to = 'X'. wa_addnlclientdatax-sell_st_fr = 'X'. wa_addnlclientdatax-sell_st_to = 'X'. wa_addnlclientdatax-sell_dc_fr = 'X'. wa_addnlclientdatax-sell_dc_to = 'X'. APPEND wa_addnlclientdatax TO lt_addnlclientdatax. "material Description * wa_materialdescription-function = '004'. "Function Type wa_materialdescription-material = ps_data-matnr. "商品编码 wa_materialdescription-langu = sy-langu. "语言 wa_materialdescription-matl_desc = ps_data-maktx. "物料描述 APPEND wa_materialdescription TO lt_materialdescription. LOOP AT gt_logistics_alv ASSIGNING <fs_logistics> WHERE zsort = ps_data-zsort. CLEAR:wa_plantdata,wa_plantdatax,wa_valuationdata,wa_valuationdatax. "plant data 创建物料时 必须新增99ST 99DC 两个参考工厂的数据,否则报错MARC-XXXX必输(可通过事务代码:WSS1查看配置的参考工厂 99DC = 分销中心类别的参考工厂的代码 99ST = 仓储类别的参考工厂的代码) * wa_plantdata-function = '004'. "Function Type wa_plantdata-material = ps_data-matnr. "商品编码 wa_plantdata-plant = <fs_logistics>-werks. "工厂 READ TABLE gt_outpur ASSIGNING <fs_pur> WITH KEY zsort = <fs_logistics>-zsort werks = <fs_logistics>-werks. IF sy-subrc = 0. wa_plantdata-pur_group = <fs_pur>-ekgrp. "采购组 ENDIF. wa_plantdata-mrp_type = <fs_logistics>-dismm. "RP类型 wa_plantdata-lotsizekey = <fs_logistics>-disls. "批量大小 wa_plantdata-round_val = <fs_logistics>-bstrf. "舍入值 wa_plantdata-period_ind = 'W'. "期间标识 wa_plantdata-mrp_ctrler = <fs_logistics>-dispo. "RP 控制者 wa_plantdata-batch_mgmt = <fs_logistics>-xchpf. "批次管理 wa_plantdata-sloc_exprc = <fs_logistics>-lgfsb. "库存地点/外部采购仓储地点 wa_plantdata-proc_type = <fs_logistics>-beskz. "采购类型 wa_plantdata-spproctype = <fs_logistics>-sobsl. "特殊采购类 wa_plantdata-backflush = <fs_logistics>-rgekz. "反冲标识 wa_plantdata-iss_st_loc = <fs_logistics>-lgpro. "生产仓储地点 wa_plantdata-gr_pr_time = <fs_logistics>-webaz. "收货处理时间 wa_plantdata-sm_key = <fs_logistics>-fhori. "计划边际码 wa_plantdata-plan_strgp = <fs_logistics>-strgr. "策略组 wa_plantdata-consummode = <fs_logistics>-vrmod. "消耗模式 wa_plantdata-bwd_cons = <fs_logistics>-vint1. "逆向消耗期间 wa_plantdata-fwd_cons = <fs_logistics>-vint2. "向前消耗期间 wa_plantdata-availcheck = <fs_logistics>-mtvfp. "可用性检查 wa_plantdata-dep_req_id = <fs_logistics>-sbdkz. "独立/集中 wa_plantdata-production_scheduler = <fs_logistics>-fevor. "生产管理员 wa_plantdata-prod_prof = <fs_logistics>-sfcpf. "生产计划参数文件 wa_plantdata-prod_unit = <fs_logistics>-frtme. "只有一个单位生产单位留空 wa_plantdata-under_tol = <fs_logistics>-uneto. "不足交货允差 wa_plantdata-over_tol = <fs_logistics>-ueeto. "过度交货允差 wa_plantdata-lot_size = '1000'. "批量产品成本核算 ls_zallocate-zmein = <fs_logistics>-zmein. "自定义增强字段 配货单位 wa_plantext-material = ps_data-matnr. "商品编码 wa_plantext-plant = <fs_logistics>-werks. "工厂 wa_plantext-field1 = 'ZALLOCATE'. wa_plantext+250(*) = ls_zallocate. "自定义增强字段 配货单位 =>需要CMOD增强 MGV00003-ZXMGVU07 * wa_plantdatax-function = '004'. "Function Type wa_plantdatax-material = ps_data-matnr. "商品编码 wa_plantdatax-plant = <fs_logistics>-werks. "工厂 wa_plantdatax-pur_group = 'X'. wa_plantdatax-mrp_type = 'X'. wa_plantdatax-lotsizekey = 'X'. wa_plantdatax-round_val = 'X'. wa_plantdatax-mrp_ctrler = 'X'. wa_plantdatax-batch_mgmt = 'X'. wa_plantdatax-sloc_exprc = 'X'. wa_plantdatax-proc_type = 'X'. wa_plantdatax-spproctype = 'X'. wa_plantdatax-backflush = 'X'. wa_plantdatax-iss_st_loc = 'X'. wa_plantdatax-gr_pr_time = 'X'. wa_plantdatax-sm_key = 'X'. wa_plantdatax-plan_strgp = 'X'. wa_plantdatax-consummode = 'X'. wa_plantdatax-bwd_cons = 'X'. wa_plantdatax-fwd_cons = 'X'. wa_plantdatax-availcheck = 'X'. wa_plantdatax-dep_req_id = 'X'. wa_plantdatax-production_scheduler = 'X'. wa_plantdatax-prod_prof = 'X'. wa_plantdatax-prod_unit = 'X'. wa_plantdatax-under_tol = 'X'. wa_plantdatax-over_tol = 'X'. wa_plantdatax-lot_size = 'X'. ls_zallocatex-zmein = 'X'. "自定义增强字段 配货单位 wa_plantextx-material = ps_data-matnr. "商品编码 wa_plantextx-plant = <fs_logistics>-werks. "工厂 wa_plantextx-field1 = 'ZALLOCATEX'. wa_plantextx+250(*) = ls_zallocatex. "自定义增强字段 配货单位 "Valuation data 会计/估算 * wa_valuationdata-function = '004'. "Function Type wa_valuationdata-material = ps_data-matnr. "商品编码 wa_valuationdata-val_area = <fs_logistics>-werks. "Plant wa_valuationdata-price_unit = ps_data-peinh. "价格单位 wa_valuationdata-val_class = ps_data-bklas. "评估类 CASE ps_data-mtart. WHEN 'Z001'. "自制品 wa_valuationdata-price_ctrl = 'S'. "价格控制 IF <fs_logistics>-werks = '99ST' OR <fs_logistics>-werks = 'AAY1' OR <fs_logistics>-werks = 'BBY1' OR "销售公司 Z001才设置标准价 <fs_logistics>-werks = 'CCY1'. wa_valuationdata-std_price = ps_data-stprs. "标准价格 ELSE. CLEAR: wa_valuationdata-std_price. ENDIF. WHEN 'Z002'. "外卖品 wa_valuationdata-price_ctrl = 'S'. "价格控制 wa_valuationdata-std_price = ps_data-stprs. "标准价格 WHEN OTHERS. wa_valuationdata-price_ctrl = 'V'. "价格控制 ENDCASE. * wa_valuationdatax-function = '004'. "Function Type wa_valuationdatax-material = ps_data-matnr. "商品编码 wa_valuationdatax-val_area = <fs_logistics>-werks. wa_valuationdatax-val_class = 'X'. wa_valuationdatax-price_unit = 'X'. wa_valuationdatax-price_ctrl = 'X'. wa_valuationdatax-std_price = 'X'. IF <fs_logistics>-werks = '99ST' OR <fs_logistics>-werks = '99DC'. "扩展物料工厂时,99ST 99DC不进行扩展;防止Listing改到之前的参考工厂评估数据 SELECT SINGLE COUNT(*) FROM mara WHERE matnr = ps_data-matnr. IF sy-subrc NE 0. APPEND wa_plantdata TO lt_plantdata. APPEND wa_plantdatax TO lt_plantdatax. APPEND wa_valuationdata TO lt_valuationdata. APPEND wa_valuationdatax TO lt_valuationdatax. APPEND wa_plantext TO lt_plantext. APPEND wa_plantextx TO lt_plantextx. ENDIF. ELSE. APPEND wa_plantdata TO lt_plantdata. APPEND wa_plantdatax TO lt_plantdatax. APPEND wa_valuationdata TO lt_valuationdata. APPEND wa_valuationdatax TO lt_valuationdatax. APPEND wa_plantext TO lt_plantext. APPEND wa_plantextx TO lt_plantextx. ENDIF. "销售视图 生产公司 + 销售公司 + 参考公司 IF ps_data-zconv_cd = 'X'. PERFORM frm_extend_sales TABLES lt_salesdata lt_salesdatax USING ps_data '1001' '30'. PERFORM frm_extend_sales TABLES lt_salesdata lt_salesdatax USING ps_data '1002' '10'. PERFORM frm_extend_sales TABLES lt_salesdata lt_salesdatax USING ps_data '1002' '20'. PERFORM frm_extend_sales TABLES lt_salesdata lt_salesdatax USING ps_data '1002' '30'. PERFORM frm_extend_sales TABLES lt_salesdata lt_salesdatax USING ps_data '1002' '40'. ENDIF. IF ps_data-zconv_xm = 'X'. PERFORM frm_extend_sales TABLES lt_salesdata lt_salesdatax USING ps_data '2001' '30'. PERFORM frm_extend_sales TABLES lt_salesdata lt_salesdatax USING ps_data '2002' '10'. PERFORM frm_extend_sales TABLES lt_salesdata lt_salesdatax USING ps_data '2002' '20'. PERFORM frm_extend_sales TABLES lt_salesdata lt_salesdatax USING ps_data '2002' '30'. PERFORM frm_extend_sales TABLES lt_salesdata lt_salesdatax USING ps_data '2002' '40'. ENDIF. IF ps_data-zconv_fz = 'X'. PERFORM frm_extend_sales TABLES lt_salesdata lt_salesdatax USING ps_data '3001' '30'. PERFORM frm_extend_sales TABLES lt_salesdata lt_salesdatax USING ps_data '3002' '10'. PERFORM frm_extend_sales TABLES lt_salesdata lt_salesdatax USING ps_data '3002' '20'. PERFORM frm_extend_sales TABLES lt_salesdata lt_salesdatax USING ps_data '3002' '30'. PERFORM frm_extend_sales TABLES lt_salesdata lt_salesdatax USING ps_data '3002' '40'. ENDIF. "Extend Storage Location LOOP AT lt_stolocation_conf INTO wa_stolocation_conf WHERE mtart = ps_data-mtart AND werks = <fs_logistics>-werks. IF wa_stolocation_conf-lgort = '3005' AND ( ps_data-matkl NE '100501' AND ps_data-matkl NE '100502' ). CONTINUE. ELSEIF ps_data-matkl NE '400401' AND ( wa_stolocation_conf-lgort = '3004' OR wa_stolocation_conf-lgort = '3005'). CONTINUE. ENDIF. * wa_storagelocationdata-function = '004'. "Function Type wa_storagelocationdata-material = ps_data-matnr. "商品编码 wa_storagelocationdata-plant = <fs_logistics>-werks. "工厂 wa_storagelocationdata-stge_loc = wa_stolocation_conf-lgort. "库位 APPEND wa_storagelocationdata TO lt_storagelocationdata. * wa_storagelocationdatax-function = '004'. "Function Type wa_storagelocationdatax-material = ps_data-matnr. "商品编码 wa_storagelocationdatax-plant = <fs_logistics>-werks. "工厂 wa_storagelocationdatax-stge_loc = wa_stolocation_conf-lgort. "库位 APPEND wa_storagelocationdatax TO lt_storagelocationdatax. ENDLOOP. ENDLOOP. "Units of measure * wa_unitsofmeasure-function = '004'. "Function Type wa_unitsofmeasure-material = ps_data-matnr. "商品编码 IF ps_data-zconv_unit = 'X'. wa_unitsofmeasure-alt_unit = ps_data-bstme. "采购单位 wa_unitsofmeasure-numerator = ps_data-umrez."基本计量单位转换分子 ELSE. wa_unitsofmeasure-alt_unit = ps_data-meins. "基本单位 wa_unitsofmeasure-numerator = '1'. "基本计量单位转换分子 ENDIF. wa_unitsofmeasure-denominatr = '1'. "转换为基本计量单位的分母 "全局主GTIN沿用旧的,没有旧GTIN就设置新的供应商主GITN为全局GTIN READ TABLE lt_mean INTO wa_mean WITH KEY hpean = 'X'. IF sy-subrc = 0. wa_unitsofmeasure-ean_upc = wa_mean-ean11. wa_unitsofmeasure-ean_cat = wa_mean-eantp. ELSE. READ TABLE gt_outpur ASSIGNING <fs_pur> WITH KEY zsort = ps_data-zsort hpean = 'X'. IF sy-subrc = 0 AND <fs_pur>-ean11 IS NOT INITIAL. "导入GTIN为空,则设置旧的主GTIN为主GTIN wa_unitsofmeasure-ean_upc = <fs_pur>-ean11. wa_unitsofmeasure-ean_cat = <fs_pur>-numtp. ENDIF. ENDIF. APPEND wa_unitsofmeasure TO lt_unitsofmeasure. * wa_unitsofmeasurex-function = '004'. "Function Type wa_unitsofmeasurex-material = ps_data-matnr. "商品编码 IF ps_data-zconv_unit = 'X'. wa_unitsofmeasurex-alt_unit = ps_data-bstme. "基本单位 ELSE. wa_unitsofmeasurex-alt_unit = ps_data-meins. "基本单位 ENDIF. wa_unitsofmeasurex-numerator = 'X'. wa_unitsofmeasurex-denominatr = 'X'. wa_unitsofmeasurex-ean_upc = 'X'. wa_unitsofmeasurex-ean_cat = 'X'. APPEND wa_unitsofmeasurex TO lt_unitsofmeasurex. LOOP AT gt_outpur ASSIGNING <fs_pur> WHERE zsort = ps_data-zsort. CLEAR: wa_vendorean,wa_inforecord_general,wa_inforecord_purchorg,wa_internationalartnos. IF <fs_pur>-ean11 IS NOT INITIAL. * wa_internationalartnos-function = '004'. "Function Type wa_internationalartnos-material = ps_data-matnr. "商品编码 IF ps_data-zconv_unit NE 'X'. wa_internationalartnos-unit = ps_data-meins. "基本计量单位 ELSE. wa_internationalartnos-unit = ps_data-bstme. "采购单位 ENDIF. wa_internationalartnos-ean_upc = <fs_pur>-ean11. "GTIN wa_internationalartnos-ean_cat = <fs_pur>-numtp. "GTIN类型 APPEND wa_internationalartnos TO lt_internationalartnos. ENDIF. "国际文件号(GTIN) FOR VENDOR IF <fs_pur>-lifnr IS NOT INITIAL AND <fs_pur>-ean11 IS NOT INITIAL. * wa_vendorean-function = '004'. "Function Type wa_vendorean-material = ps_data-matnr. "商品编码 IF ps_data-zconv_unit NE 'X'. wa_vendorean-unit = ps_data-meins. "基本计量单位 ELSE. wa_vendorean-unit = ps_data-bstme. "采购单位 ENDIF. wa_vendorean-vendor_no = <fs_pur>-lifnr. "供应商 wa_vendorean-ean_upc = <fs_pur>-ean11. "GTIN wa_vendorean-main_ean = <fs_pur>-lfean. "当前供应商的主GTIN APPEND wa_vendorean TO lt_vendorean. ENDIF. "采购信息记录(PIR) 生产公司 + 销售公司 IF ( <fs_pur>-werks = 'AAZ1' OR <fs_pur>-werks = 'BBZ1' OR <fs_pur>-werks = 'CCZ1' OR <fs_pur>-werks = 'AAY1' OR <fs_pur>-werks = 'BBY1' OR <fs_pur>-werks = 'CCY1' ) AND ps_data-matkl NE '200110'."此物料组不导入PIR "查询是否已经存在采购信息记录 SELECT SINGLE a~infnr INTO wa_inforecord_general-info_rec FROM eina AS a INNER JOIN eine AS b ON a~infnr = b~infnr WHERE a~lifnr = <fs_pur>-lifnr AND a~matnr = ps_data-matnr. wa_inforecord_general-material = ps_data-matnr. "物料编码 wa_inforecord_general-mat_grp = <fs_pur>-ekgrp. "采购组 wa_inforecord_general-vendor = <fs_pur>-lifnr. "供应商 IF ps_data-zconv_unit = 'X'. wa_inforecord_general-po_unit = ps_data-bstme. "采购单位 wa_inforecord_general-base_uom = ps_data-meins. "基本单位 ELSE. wa_inforecord_general-po_unit = ps_data-meins. "采购单位 wa_inforecord_general-base_uom = ps_data-meins. "基本单位 ENDIF. IF ps_data-ZCONV_UNIT = 'X'. wa_inforecord_general-CONV_NUM1 = ps_data-UMREZ. "订单价格单位转换为订单单位的分子 ELSE. wa_inforecord_general-CONV_NUM1 = '1'. "订单价格单位转换为订单单位的分子 ENDIF. wa_inforecord_general-CONV_DEN1 = '1'. "订单价格单位转换为订单单位的分母 wa_inforecord_purchorg-info_rec = wa_inforecord_general-info_rec. "采购信息记录号 wa_inforecord_purchorg-material = ps_data-matnr. "物料编码 wa_inforecord_purchorg-vendor = <fs_pur>-lifnr. "供应商 wa_inforecord_purchorg-purch_org = <fs_pur>-ekorg. "采购组织 wa_inforecord_purchorg-info_type = '0'. "采购信息记录分类 wa_inforecord_purchorg-plant = <fs_pur>-werks. "工厂 wa_inforecord_purchorg-pur_group = <fs_pur>-ekgrp. "采购组 wa_inforecord_purchorg-currency = <fs_pur>-waers. "货币码 wa_inforecord_purchorg-net_price = <fs_pur>-netpr."净价 wa_inforecord_purchorg-price_unit = <fs_pur>-peinh."价格单位 IF ps_data-zconv_unit = 'X'. wa_inforecord_purchorg-orderpr_un = ps_data-bstme."采购单位 ELSE. wa_inforecord_purchorg-orderpr_un = ps_data-meins."基本单位 ENDIF. wa_inforecord_purchorg-tax_code = <fs_pur>-mwskz. "税码 APPEND wa_inforecord_purchorg TO lt_inforecord_purchorg. AT END OF lifnr. APPEND wa_inforecord_general TO lt_inforecord_general. CLEAR: wa_inforecord_purchorg-plant. APPEND wa_inforecord_purchorg TO lt_inforecord_purchorg. "非工厂层级导入 ENDAT. ENDIF. ENDLOOP. "listing data IF ps_data-zconv_cd = abap_true. IF sy-mandt = 240. wa_listingconditions-filia = 'Z001'. "分类 ELSE. wa_listingconditions-filia = 'CD'. "分类 ENDIF. wa_listingconditions-artnr = ps_data-matnr. "物料编码 wa_listingconditions-changeid = 'J'. "修改类型 (U, I, E, D) wa_listingconditions-datab = sy-datum. "开始生效日期 wa_listingconditions-datbi = '99991231'. "有效截至日期 APPEND wa_listingconditions TO lt_listingconditions. ENDIF. IF ps_data-zconv_xm = abap_true. IF sy-mandt = 240. wa_listingconditions-filia = 'Z002'. "分类 ELSE. wa_listingconditions-filia = 'XM'. "分类 ENDIF. wa_listingconditions-artnr = ps_data-matnr. "物料编码 wa_listingconditions-changeid = 'J'. "修改类型 (U, I, E, D) wa_listingconditions-datab = sy-datum. "开始生效日期 wa_listingconditions-datbi = '99991231'. "有效截至日期 APPEND wa_listingconditions TO lt_listingconditions. ENDIF. IF ps_data-zconv_fz = abap_true. wa_listingconditions-filia = 'FZ'. "分类 wa_listingconditions-artnr = ps_data-matnr. "物料编码 wa_listingconditions-changeid = 'J'. "修改类型 (U, I, E, D) wa_listingconditions-datab = sy-datum. "开始生效日期 wa_listingconditions-datbi = '99991231'. "有效截至日期 APPEND wa_listingconditions TO lt_listingconditions. ENDIF. LOOP AT lt_vendorean INTO wa_vendorean WHERE main_ean = 'X'. "供应商主GTIN始终以旧的为主 l_tabix = sy-tabix. READ TABLE lt_mlea TRANSPORTING NO FIELDS WITH KEY matnr = wa_vendorean-material meinh = wa_vendorean-unit lifnr = wa_vendorean-vendor_no. IF sy-subrc = 0. CLEAR: wa_vendorean-main_ean. MODIFY lt_vendorean FROM wa_vendorean INDEX l_tabix. ENDIF. ENDLOOP. CALL FUNCTION 'WRF_MATERIAL_MAINTAINDATA_RT' EXPORTING headdata = ls_headdata TABLES return = lt_return clientdata = lt_clientdata clientdatax = lt_clientdatax addnlclientdata = lt_addnlclientdata addnlclientdatax = lt_addnlclientdatax materialdescription = lt_materialdescription plantdata = lt_plantdata plantdatax = lt_plantdatax plantext = lt_plantext plantextx = lt_plantextx storagelocationdata = lt_storagelocationdata storagelocationdatax = lt_storagelocationdatax unitsofmeasure = lt_unitsofmeasure unitsofmeasurex = lt_unitsofmeasurex internationalartnos = lt_internationalartnos vendorean = lt_vendorean valuationdata = lt_valuationdata valuationdatax = lt_valuationdatax salesdata = lt_salesdata salesdatax = lt_salesdatax * POSDATA = lt_POSDATA * POSDATAX = lt_POSDATAX * plantkeys = lt_plantkeys * storagelocationkeys = lt_storagelocationkeys * valuationtypekeys = lt_valuationtypekeys inforecord_general = lt_inforecord_general inforecord_purchorg = lt_inforecord_purchorg listingconditions = lt_listingconditions. CLEAR:wa_return,ps_data-text. LOOP AT lt_return INTO wa_return WHERE type = 'A' OR type = 'E' OR type = 'X' . ps_data-icon = icon_red_light. ps_data-text = ps_data-text && wa_return-id && wa_return-number && ':' && wa_return-message && '#'. ENDLOOP. IF wa_return IS INITIAL. COMMIT WORK AND WAIT. ps_data-icon = icon_green_light. ps_data-text = '物料创建成功!'. ELSE. ROLLBACK WORK. ENDIF. ENDFORM. " FRM_MATERIAL_CREATION *&---------------------------------------------------------------------* *& Form FRM_EXTEND_SALES *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->P_LT_SALESDATA text * -->P_LT_SALESDATAX text * -->P_4944 text *----------------------------------------------------------------------* FORM frm_extend_sales TABLES pt_salesdata STRUCTURE bapie1mvkert pt_salesdatax STRUCTURE bapie1mvkertx USING ps_data TYPE ty_main_alv value(p1) value(p2). DATA: wa_salesdata TYPE bapie1mvkert, wa_salesdatax TYPE bapie1mvkertx. * wa_salesdata-function = '004'. "Function Type wa_salesdata-material = ps_data-matnr. "商品编码 wa_salesdata-sales_org = p1. "销售组织 wa_salesdata-distr_chan = p2. "销售渠道 wa_salesdata-mat_pr_grp = ps_data-kondm. "物料定价组 wa_salesdata-acct_assgt = ps_data-ktgrm. "科目设置组 wa_salesdata-sales_unit = ps_data-meins. "销售单位 APPEND wa_salesdata TO pt_salesdata. * wa_salesdatax-function = '004'. "Function Type wa_salesdatax-material = ps_data-matnr. "商品编码 wa_salesdatax-sales_org = p1. "销售组织 wa_salesdatax-distr_chan = p2. "销售渠道 wa_salesdatax-mat_pr_grp = 'X'. "物料定价组 wa_salesdatax-acct_assgt = 'X'. "科目设置组 * wa_salesdatax-sales_unit = 'X'. "销售单位 APPEND wa_salesdatax TO pt_salesdatax. ENDFORM. " FRM_EXTEND_SALES
导入增强字段需要SMOD/CMOD增强:MGV00003=>EXIT_SAPL1001_003
DATA:ls_zallocate TYPE zallocate, ls_zallocatex TYPE zallocatex. FIELD-SYMBOLS: <fs_stru> TYPE any, <fs_value> TYPE any, <fs_strux> TYPE any, <fs_valuex> TYPE any. DATA: lo_struct TYPE REF TO cl_abap_structdescr, lo_table TYPE REF TO cl_abap_tabledescr, lt_comp TYPE cl_abap_structdescr=>component_table. DATA: l_main_comp TYPE i. "get components numbers(RTTS) lo_struct ?= cl_abap_structdescr=>describe_by_name( 'zallocate' ). "Main lt_comp = lo_struct->get_components( ). l_main_comp = lines( lt_comp ). ls_zallocate = f_plantext+250(*). ls_zallocatex = f_plantextx+250(*). ASSIGN ls_zallocate TO <fs_stru>. ASSIGN ls_zallocatex TO <fs_strux>. CHECK <fs_stru> IS ASSIGNED. CHECK <fs_strux> IS ASSIGNED. IF f_plantext-field1 = 'ZALLOCATE'. DO l_main_comp TIMES. "如果更新标识为空,则不处理对应字段 ASSIGN COMPONENT sy-tabix OF STRUCTURE <fs_stru> TO <fs_value>. ASSIGN COMPONENT sy-tabix OF STRUCTURE <fs_strux> TO <fs_valuex>. IF <fs_value> IS ASSIGNED AND <fs_valuex> IS ASSIGNED. IF <fs_valuex> NE 'X'. CLEAR: <fs_value>. ENDIF. ENDIF. ENDDO. MOVE-CORRESPONDING ls_zallocate TO f_marc_ueb. ENDIF.
post SAP-Garson
原文链接:https://blog.csdn.net/qq_30797051/article/details/127697661文章来自于网络,如果侵犯了您的权益,请联系站长删除!