模板见文件
*&---------------------------------------------------------------------* *& Report ZMMR004 *&---------------------------------------------------------------------* *& 版本号 日期 作者 修改描述 ReqID *& V001 2016.9.29 刘容 物料主数据批导 * 如果模板更新请到SMW0更新 ZMMR004.XLS模板 *&---------修改记录 *&------- 未来计划价格 ZPLPR --> ZPLP1 *&-------物料主数据添加 *&---------------------------------------------------------------------* REPORT zmmr004. INCLUDE zmmr004_top. INCLUDE zmmr004_sel. INCLUDE zmmr004_frm. INITIALIZATION. functxt-icon_id = icon_export. functxt-quickinfo = '模版下载'(001). functxt-icon_text = '模版下载'(001). sscrfields-functxt_01 = functxt. AT SELECTION-SCREEN ON VALUE-REQUEST FOR material. *&------------选择路径 PERFORM select_path. AT SELECTION-SCREEN. *&--------------模板下载 IF sscrfields-ucomm = 'FC01'. PERFORM temp_excel_get USING 'ZMMR004.XLS'. ELSEIF sscrfields-ucomm = 'ONLI'. *&--------------执行上传EXCEL IF material IS NOT INITIAL. *&--------------数据导入 PERFORM upload_material_data. *&-------------ALV展示批导的数据 *&-------------清空fieldcatalog clear fieldcatalog[]. PERFORM build_fieldcatalog_before. PERFORM build_layout. PERFORM display_alv_report. ENDIF. ENDIF.
*&---------------------------------------------------------------------* *& 包含 ZMMR004_TOP *&---------------------------------------------------------------------* TABLES: sscrfields. TYPE-POOLS: slis. DATA: functxt TYPE smp_dyntxt. *&-------alv类型定义 DATA: fieldcatalog TYPE slis_t_fieldcat_alv WITH HEADER LINE, gd_tab_group TYPE slis_t_sp_group_alv, gd_layout TYPE slis_layout_alv, gd_repid LIKE sy-repid. *&---------出错标识 DATA:l_flag TYPE c. DATA: t_land1 TYPE t001w-land1. DATA:gt_data TYPE STANDARD TABLE OF alsmex_tabline WITH HEADER LINE."保存EXCEL数据的内表 FIELD-SYMBOLS: <fls_data> TYPE alsmex_tabline."同上,结构 *&---------bapi参考的类型 DATA: headdata TYPE bapimathead, clientdata TYPE bapi_mara, clientdatax TYPE bapi_marax, plantdata TYPE bapi_marc, plantdatax TYPE bapi_marcx, storagelocationdata TYPE bapi_mard, storagelocationdatax TYPE bapi_mardx, salesdata TYPE bapi_mvke, salesdatax TYPE bapi_mvkex, valuationdata TYPE bapi_mbew, valuationdatax TYPE bapi_mbewx, return TYPE bapiret2. DATA: materialdescription TYPE bapi_makt OCCURS 0 WITH HEADER LINE, taxclassifications TYPE bapi_mlan OCCURS 0 WITH HEADER LINE, unitsofmeasure TYPE bapi_marm OCCURS 0 WITH HEADER LINE, unitsofmeasurex TYPE bapi_marmx OCCURS 0 WITH HEADER LINE. *&------------批导类型定义 TYPES : BEGIN OF ty_base, material(40) TYPE c, "物料号 y matl_desc_zh(40) TYPE c, "物料描述(中文)y matl_type(4) TYPE c, "物料类型 base_uom(3) TYPE c, "基本计量单位y matl_group(9) TYPE c, "物料组y extmatlgrp(18) TYPE c , "外部物料组 (系列) division(2) TYPE c, "产品组(品牌) old_mat_no(18) TYPE c, "旧物料号 y mstae(2) TYPE c, groes(32) TYPE c, zsku(18) TYPE c, "SKU号 zfbm(20) TYPE c, "父编码 zwzfn(20) TYPE c, "物资分类/柜台分类 zcknx(20) TYPE c, "仓库类型 zggxh(20) TYPE c, "规格型号s ztysj TYPE mara-ztysj , "停用时间 /备注一 zpm(1) TYPE c , "P/M码 zpsdj(10) TYPE c, " 配送等级 /备注2 zbzq(10) TYPE c, "保质期 numerator(5) TYPE c, "单位分子(包装数量) meinh(3) TYPE c, "包装单位 *&-----------附加数据 message(60) TYPE c, "消息 light(4) TYPE c, "执行情况 num(3) TYPE c, "当前行数 type(1) TYPE c, "执行结果 END OF ty_base. DATA : gs_base TYPE ty_base. DATA : gt_base LIKE TABLE OF gs_base. *&---------指向 GT_BASE的指针 FIELD-SYMBOLS : <lfs_base> LIKE LINE OF gt_base. TYPES : BEGIN OF ty_sale, material(40) TYPE c, "物料号 y plant(4) TYPE c, "工厂 sales_org(4) TYPE c, "销售组织 distr_chan(2) TYPE c, "分销渠道 delyg_plnt(4) TYPE c, "交货工厂 vmstd(8) TYPE c, "停用日期 acct_assgt(2) TYPE c , "科目设置组 provg(2) TYPE c , "配送等级 mvgr1(3) TYPE c, "渠道分类 mvgr2(3) TYPE c, "系列 mvgr3(3) TYPE c, "功能 mvgr4(3) TYPE c, "停用状态 mvgr5(3) TYPE c , "单品/套装 taxclass_1(1) TYPE c, "物料的税分类 loadinggrp(4) TYPE c, " 装载组 :CLIENTDATA" prat1(4) TYPE c, "产品属性1 *&-----------附加数据 message(60) TYPE c, "消息 light(4) TYPE c, "执行情况 type(1) TYPE c, "执行结果 END OF ty_sale. DATA : gs_sale TYPE ty_sale. DATA : gt_sale LIKE TABLE OF gs_sale. *&---------指向 GT_sale的指针 FIELD-SYMBOLS : <lfs_sale> LIKE LINE OF gt_sale. TYPES : BEGIN OF ty_werks , material(40) TYPE c, "物料号 y plant(4) TYPE c, "工厂 *&-----------采购视图 pur_group(3) TYPE c, "采购组 * fabkz(1) TYPE c, "JIT交货计划 kordb(1) TYPE c, "源清单 kautb(1) TYPE c, "自动采购订单 bstme(3) TYPE c, "采购单位 ekwsl(4) TYPE c, "采购价值码 *&-----------生产视图 dismm(2) TYPE c, " 物料需求计划类型 CHAR 2 disgr(4) TYPE c, "MRP组 "新增 dispo(3) TYPE c, " MRP控制者 CHAR 3 plifz(3) TYPE c, " 计划交货时间以天计 DEC 3 disls(2) TYPE c, " 批量 (物料计划) CHAR 2 0 ausss(5) TYPE c, " 装配报废百分比 DEC 5 2 beskz(1) TYPE c, " 采购类型 CHAR 1 0 sobsl(2) TYPE c, " 特殊采购类型 CHAR 2 0 eisbe(13) TYPE c, " 安全库存 QUAN 13 3 bstmi(13) TYPE c, " 最小批量 QUAN 13 3 bstma(13) TYPE c, " 最大批量大小 QUAN 13 3 lgpro(4) TYPE c, " 生产仓储地点 CHAR 4 lgfsb(4) TYPE c, " 外部仓储地点 CHAR 4 strgr(2) TYPE c, " 策略组 CHAR 2 vrmod(1) TYPE c, " 消耗模式 CHAR 1 vint1(3) TYPE c, " 消耗期间:逆向 NUMC 3 0 vint2(3) TYPE c, " 消耗时期-向前 NUMC 3 0 mtvfp(2) TYPE c, " 可用性检查的检查组 CHAR 2 kzaus(1) TYPE c, " 中止指示符 CHAR 1 0 ausdt(8) TYPE c, " 中断日期 DATS 8 0 nfmat(40) TYPE c, " 后续物料 CHAR 40 0 fevor(3) TYPE c, " 生产管理员 CHAR 3 bearz(5) TYPE c, " 处理时间 DEC 5 2 basmg(13) TYPE c, " 基准数量 QUAN 13 3 *&---------------质量视图 art1(8) TYPE c , "检验类型 aktiv1(1) TYPE c, "活动的 art2(8) TYPE c , "检验类型 aktiv2(1) TYPE c, "活动的 art3(8) TYPE c , "检验类型 aktiv3(1) TYPE c, "活动的 qmata(6) TYPE c, "QM授权组 *&---------------财务会计 losgr(13) TYPE c , " 批量产品成本核算 QUAN 13 vprsv(1) TYPE c , " 价格控制指示符 CHAR 1 0 stprs(11) TYPE c , " 标准价格 CURR 11 2 peinh(5) TYPE c , " 价格单位 DEC 5 0 bklas(4) TYPE c , " 评估类 CHAR 4 0 bwprh(11) TYPE c , " 基于商法的估价价格 CURR 11 2 bwph1(11) TYPE c , " 基于商业法律的估价价格 CURR 11 2 vjbwh(11) TYPE c , " 基于商业法律的估价价格 CURR 11 2 ekalr(1) TYPE c , " 用QS的成本估算 CHAR 1 hkmat(1) TYPE c , " 物料来源 CHAR 1 zplp1(11) TYPE c , " 未来计划价格 CURR 11 2 zpld1(8) TYPE c , "计划价格日期 *&-----------附加数据 message(60) TYPE c, "消息 light(4) TYPE c, "执行情况 type(1) TYPE c, "执行结果 END OF ty_werks. DATA : gs_werks TYPE ty_werks. DATA : gt_werks LIKE TABLE OF gs_werks. *&---------指向 GT_sale的指针 FIELD-SYMBOLS : <lfs_werks> LIKE LINE OF gt_werks. DATA: BEGIN OF gt_mara OCCURS 0, matnr TYPE mara-matnr, END OF gt_mara. DATA : gt_zmmt000 TYPE TABLE OF zmmt000. DATA : gs_zmmt000 LIKE LINE OF gt_zmmt000. DATA : gt_zmmt001 TYPE TABLE OF zmmt001. DATA : gs_zmmt001 LIKE LINE OF gt_zmmt001. DATA : gt_zmmt002 TYPE TABLE OF zmmt002. DATA : gs_zmmt002 LIKE LINE OF gt_zmmt002. DATA : gt_zmmt003 TYPE TABLE OF zmmt003. DATA : gs_zmmt003 LIKE LINE OF gt_zmmt003. DATA : gt_zmmt004 TYPE TABLE OF zmmt004. DATA : gs_zmmt004 LIKE LINE OF gt_zmmt004. DATA : g_click TYPE c . DATA: gd_count TYPE string, "上传内表的总行数 l_index TYPE sy-index, "当前处理的行数 l_text(50) TYPE c. "拼接字符串
*&---------------------------------------------------------------------* *& 包含 ZMMR004_SEL *&---------------------------------------------------------------------* SELECTION-SCREEN BEGIN OF BLOCK blk1 WITH FRAME TITLE text-002. PARAMETERS: material LIKE rlgrap-filename. "物料导入摸版 SELECTION-SCREEN END OF BLOCK blk1. SELECTION-SCREEN COMMENT 01(20) TEXT-h01. SELECTION-SCREEN: FUNCTION KEY 1. SELECTION-SCREEN BEGIN OF BLOCK blk2 WITH FRAME TITLE text-003. PARAMETERS: p_base RADIOBUTTON GROUP G2."基本视图 PARAMETERS: p_sale RADIOBUTTON GROUP G2."销售视图 PARAMETERS: p_werks RADIOBUTTON GROUP G2."工厂视图 SELECTION-SCREEN END OF BLOCK blk2.
*----------------------------------------------------------------------* ***INCLUDE ZMMR004_FRM. *----------------------------------------------------------------------* *&---------------------------------------------------------------------* *& Form SELECT_PATH *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM select_path . DATA v_material LIKE rlgrap-filename. CALL FUNCTION 'WS_FILENAME_GET' EXPORTING mask = ',*.* ,*.*.' mode = '0' title = '请选择要上传的信息文件' IMPORTING filename = v_material EXCEPTIONS inv_winsys = 1 no_batch = 2 selection_cancel = 3 selection_error = 4 OTHERS = 5. IF sy-subrc <> 0. ENDIF. material = v_material. ENDFORM. FORM temp_excel_get USING p_objid TYPE wwwdata-objid. DATA: l_objdata LIKE wwwdatatab, l_destination LIKE rlgrap-filename, l_rc LIKE sy-subrc, l_errtxt TYPE string. DATA: l_fullpath TYPE string, l_extension TYPE string, l_fname LIKE rlgrap-filename, l_formkey LIKE wwwdatatab. l_extension = p_objid. PERFORM get_file_name USING '.xls' 'Excel|*.xls;' CHANGING l_fullpath. IF l_fullpath = space. MESSAGE '请选择下载文件名' TYPE 'E'. ELSE. CONCATENATE l_fullpath '' INTO l_fname. SELECT SINGLE relid objid FROM wwwdata INTO CORRESPONDING FIELDS OF l_objdata WHERE relid = 'MI' AND objid = p_objid . IF sy-subrc NE 0 OR l_objdata-objid = space. MESSAGE e001(00) WITH '文件不存在!'. ELSE. CALL FUNCTION 'DOWNLOAD_WEB_OBJECT' EXPORTING key = l_objdata destination = l_fname IMPORTING rc = l_rc CHANGING temp = l_fname. IF l_rc NE 0. MESSAGE e001(00) WITH '文件下载失败!'. ENDIF. ENDIF. ENDIF. ENDFORM. FORM get_file_name USING p_extension p_file_filter CHANGING p_fullpath. DATA: l_filename TYPE string, l_path TYPE string, l_fullpath TYPE string, l_titile TYPE string, l_init_dir TYPE string. CLEAR p_fullpath. l_titile = TEXT-t04. l_init_dir = TEXT-t03. CALL METHOD cl_gui_frontend_services=>file_save_dialog EXPORTING window_title = l_titile default_extension = '.xls' initial_directory = l_init_dir prompt_on_overwrite = 'X' file_filter = p_file_filter CHANGING filename = l_filename path = l_path fullpath = l_fullpath EXCEPTIONS cntl_error = 1 error_no_gui = 2 not_supported_by_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. ENDIF. p_fullpath = l_fullpath. ENDFORM. *&---------------------------------------------------------------------* *& Form UPLOAD_MATERIAL_DATA *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM upload_material_data . *&-------------清空所有数据 CLEAR : gt_base , gt_werks , gt_sale ,gt_data. IF p_base = 'X'. CALL FUNCTION 'ZXXX001' EXPORTING filename = material i_begin_col = '1' "起始列号 i_begin_row = '4' "起始行号 i_end_col = '24' "终止列号 i_end_row = '65535' "终止行号 im_sheet_name = 1 TABLES intern = gt_data[] EXCEPTIONS inconsistent_parameters = 1 upload_ole = 2 OTHERS = 3. IF gt_data[] IS INITIAL. MESSAGE '清单中无数据' TYPE 'E'. ENDIF. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. *格式转化 LOOP AT gt_data ASSIGNING <fls_data>. CASE <fls_data>-col. WHEN '0001'. gs_base-material = <fls_data>-value. WHEN '0002'. gs_base-matl_desc_zh = <fls_data>-value. WHEN '0003'. gs_base-matl_type = <fls_data>-value. WHEN '0004'. gs_base-base_uom = <fls_data>-value. WHEN '0005'. gs_base-matl_group = <fls_data>-value. WHEN '0006'. gs_base-extmatlgrp = <fls_data>-value. WHEN '0007'. gs_base-division = <fls_data>-value. WHEN '0008'. gs_base-old_mat_no = <fls_data>-value. WHEN '0009'. gs_base-mstae = <fls_data>-value. WHEN '0010'. gs_base-groes = <fls_data>-value. WHEN '0011'. gs_base-zsku = <fls_data>-value. WHEN '0012'. gs_base-zfbm = <fls_data>-value. WHEN '0013'. gs_base-zwzfn = <fls_data>-value. WHEN '0014'. gs_base-zcknx = <fls_data>-value. WHEN '0015'. gs_base-zggxh = <fls_data>-value. WHEN '0016'. gs_base-ztysj = <fls_data>-value. WHEN '0017'. gs_base-zpm = <fls_data>-value. WHEN '0018'. gs_base-zpsdj = <fls_data>-value. WHEN '0019'. gs_base-zbzq = <fls_data>-value. WHEN '0020'. gs_base-numerator = <fls_data>-value. WHEN '0021'. gs_base-meinh = <fls_data>-value. ENDCASE. AT END OF row. APPEND gs_base TO gt_base. CLEAR gs_base. ENDAT. ENDLOOP. gd_count = lines( gt_base ). ENDIF. IF p_sale = 'X'. CALL FUNCTION 'ZXXX001' EXPORTING filename = material i_begin_col = '1' "起始列号 i_begin_row = '4' "起始行号 i_end_col = '20' "终止列号 i_end_row = '65535' "终止行号 im_sheet_name = 2 TABLES intern = gt_data[] EXCEPTIONS inconsistent_parameters = 1 upload_ole = 2 OTHERS = 3. IF gt_data[] IS INITIAL. MESSAGE '清单中无数据' TYPE 'E'. ENDIF. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. gd_count = lines( gt_data ). *格式转化 LOOP AT gt_data ASSIGNING <fls_data>. CASE <fls_data>-col. WHEN '0001'. gs_sale-material = <fls_data>-value. WHEN '0002'. gs_sale-plant = <fls_data>-value. WHEN '0003'. gs_sale-sales_org = <fls_data>-value. WHEN '0004'. gs_sale-distr_chan = <fls_data>-value. WHEN '0005'. gs_sale-delyg_plnt = <fls_data>-value. WHEN '0006'. gs_sale-vmstd = <fls_data>-value. WHEN '0007'. gs_sale-acct_assgt = <fls_data>-value. WHEN '0008'. gs_sale-provg = <fls_data>-value. WHEN '0009'. gs_sale-mvgr1 = <fls_data>-value. WHEN '0010'. gs_sale-mvgr2 = <fls_data>-value. WHEN '0011'. gs_sale-mvgr3 = <fls_data>-value. WHEN '0012'. gs_sale-mvgr4 = <fls_data>-value. WHEN '0013'. gs_sale-mvgr5 = <fls_data>-value. WHEN '0014'. gs_sale-taxclass_1 = <fls_data>-value. WHEN '0015'. gs_sale-loadinggrp = <fls_data>-value. WHEN '016'. gs_sale-prat1 = <fls_data>-value. ENDCASE. AT END OF row. APPEND gs_sale TO gt_sale. CLEAR gs_sale. ENDAT. ENDLOOP. gd_count = lines( gt_sale ). ENDIF. IF p_werks = 'X'. CALL FUNCTION 'ZXXX001' EXPORTING filename = material i_begin_col = '1' "起始列号 i_begin_row = '4' "起始行号 i_end_col = '53' "终止列号 i_end_row = '65535' "终止行号 im_sheet_name = 3 TABLES intern = gt_data[] EXCEPTIONS inconsistent_parameters = 1 upload_ole = 2 OTHERS = 3. IF gt_data[] IS INITIAL. MESSAGE '清单中无数据' TYPE 'E'. ENDIF. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. gd_count = lines( gt_data ). *格式转化 LOOP AT gt_data ASSIGNING <fls_data>. CASE <fls_data>-col. WHEN '0001'. gs_werks-material = <fls_data>-value. WHEN '0002'. gs_werks-plant = <fls_data>-value. WHEN '0003'. gs_werks-pur_group = <fls_data>-value. WHEN '0004'. gs_werks-kordb = <fls_data>-value. WHEN '0005'. gs_werks-kautb = <fls_data>-value. WHEN '0006'. gs_werks-bstme = <fls_data>-value. WHEN '0007'. gs_werks-ekwsl = <fls_data>-value. WHEN '0008'. gs_werks-dismm = <fls_data>-value. WHEN '0009'. gs_werks-disgr = <fls_data>-value. WHEN '0010'. gs_werks-dispo = <fls_data>-value. WHEN '0011'. gs_werks-plifz = <fls_data>-value. WHEN '0012'. gs_werks-disls = <fls_data>-value. WHEN '0013'. gs_werks-ausss = <fls_data>-value. WHEN '0014'. gs_werks-beskz = <fls_data>-value. WHEN '0015'. gs_werks-sobsl = <fls_data>-value. WHEN '0016'. gs_werks-eisbe = <fls_data>-value. WHEN '0017'. gs_werks-bstmi = <fls_data>-value. WHEN '0018'. gs_werks-bstma = <fls_data>-value. WHEN '0019'. gs_werks-lgpro = <fls_data>-value. WHEN '0020'. gs_werks-lgfsb = <fls_data>-value. WHEN '0021'. gs_werks-strgr = <fls_data>-value. WHEN '0022'. gs_werks-vrmod = <fls_data>-value. WHEN '0023'. gs_werks-vint1 = <fls_data>-value. WHEN '0024'. gs_werks-vint2 = <fls_data>-value. WHEN '0025'. gs_werks-mtvfp = <fls_data>-value. WHEN '0026'. gs_werks-kzaus = <fls_data>-value. WHEN '0027'. gs_werks-ausdt = <fls_data>-value. WHEN '0028'. gs_werks-nfmat = <fls_data>-value. WHEN '0029'. gs_werks-fevor = <fls_data>-value. WHEN '0020'. gs_werks-bearz = <fls_data>-value. WHEN '0031'. gs_werks-basmg = <fls_data>-value. WHEN '0032'. gs_werks-art1 = <fls_data>-value. WHEN '0033'. gs_werks-aktiv1 = <fls_data>-value. WHEN '0034'. gs_werks-art2 = <fls_data>-value. WHEN '0035'. gs_werks-aktiv2 = <fls_data>-value. WHEN '0036'. gs_werks-art3 = <fls_data>-value. WHEN '0037'. gs_werks-aktiv3 = <fls_data>-value. WHEN '0038'. gs_werks-qmata = <fls_data>-value. WHEN '0039'. gs_werks-losgr = <fls_data>-value. WHEN '0040'. gs_werks-vprsv = <fls_data>-value. WHEN '0041'. gs_werks-stprs = <fls_data>-value. WHEN '0042'. gs_werks-peinh = <fls_data>-value. WHEN '0043'. gs_werks-bklas = <fls_data>-value. WHEN '0044'. gs_werks-bwprh = <fls_data>-value. WHEN '0045'. gs_werks-bwph1 = <fls_data>-value. WHEN '0046'. gs_werks-vjbwh = <fls_data>-value. WHEN '0047'. gs_werks-ekalr = <fls_data>-value. WHEN '0048'. gs_werks-hkmat = <fls_data>-value. WHEN '0049'. gs_werks-zplp1 = <fls_data>-value. WHEN '0050'. gs_werks-zpld1 = <fls_data>-value. ENDCASE. AT END OF row. APPEND gs_werks TO gt_werks. CLEAR gs_werks. ENDAT. ENDLOOP. gd_count = lines( gt_werks ). ENDIF. ENDFORM. *&-------------单位转换 FORM conversion_exit_cunit_input CHANGING p_i_data. CALL FUNCTION 'CONVERSION_EXIT_CUNIT_INPUT' EXPORTING input = p_i_data language = sy-langu IMPORTING output = p_i_data EXCEPTIONS unit_not_found = 1 OTHERS = 2. ENDFORM. *&-------------单位转换 FORM conversion_exit_cunit_output CHANGING p_i_data. CALL FUNCTION 'CONVERSION_EXIT_CUNIT_OUTPUT' EXPORTING input = p_i_data language = sy-langu IMPORTING output = p_i_data EXCEPTIONS unit_not_found = 1 OTHERS = 2. ENDFORM. *&---------------------------------------------------------------------* *& Form SAVE_MATERIAL_DATA *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM save_material_data . DATA: lt_number LIKE TABLE OF bapimatinr, ls_number LIKE LINE OF lt_number. DATA : l_num TYPE i VALUE 1. DATA :lv_idx TYPE string. *&---------------基本视图 IF p_base = 'X' AND g_click NE 'X'. *&------------取自建表里面的数据 SELECT mandt zfbm zfbmmc INTO CORRESPONDING FIELDS OF TABLE gt_zmmt000 FROM zmmt000. SELECT madnt zcknx zcknxmc INTO CORRESPONDING FIELDS OF TABLE gt_zmmt001 FROM zmmt001. SELECT mandt zwzfn zwzfnmc INTO CORRESPONDING FIELDS OF TABLE gt_zmmt002 FROM zmmt002 . SELECT mandt zpm zpmmc INTO CORRESPONDING FIELDS OF TABLE gt_zmmt003 FROM zmmt003 . SELECT mandt zsyb zpsdj INTO TABLE gt_zmmt004 FROM zmmt004 . *&--------------物料主数据加前导零 LOOP AT gt_base ASSIGNING <lfs_base>. *&-----单位装换 基本单位 PERFORM conversion_exit_cunit_input CHANGING <lfs_base>-base_uom. "基本单位 PERFORM conversion_exit_cunit_input CHANGING <lfs_base>-meinh. "订单单位 *&--------------物料主数据加前导零 CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT' EXPORTING input = <lfs_base>-material IMPORTING output = <lfs_base>-material. ENDLOOP. *&---------------取出物料数据 IF p_base IS NOT INITIAL. SELECT matnr INTO TABLE gt_mara FROM mara FOR ALL ENTRIES IN gt_base WHERE matnr = gt_base-material. ENDIF. LOOP AT gt_base ASSIGNING <lfs_base>. lv_idx = sy-tabix. "进度条 l_text = l_index. CONDENSE l_text. CONCATENATE '处理第' l_text '条数据/' gd_count INTO l_text. PERFORM set_indicator USING '' l_text. l_index = l_index + 1. *&---------------初始化BAPI变量 *&---------------初始化标识 l_flag = 0. " l_num = 1. <lfs_base>-num = l_num. l_num = l_num + 1. *&-------------检查物资分类,仓库类型 ,P/M码, 父编码 IF <lfs_base>-zpm IS NOT INITIAL. READ TABLE gt_zmmt003 INTO gs_zmmt003 WITH KEY zpm = <lfs_base>-zpm. IF sy-subrc <> 0 . l_flag = 1. <lfs_base>-message = 'P/M错误填写错误'. <lfs_base>-light = '@5C@'. "红灯 <lfs_base>-type = 'E'. ENDIF. ENDIF. IF <lfs_base>-zwzfn IS NOT INITIAL. READ TABLE gt_zmmt002 INTO gs_zmmt002 WITH KEY zwzfn = <lfs_base>-zwzfn. IF sy-subrc <> 0 . l_flag = 1. <lfs_base>-message = '物资分类填写错误'. <lfs_base>-light = '@5C@'. "红灯 <lfs_base>-type = 'E'. ENDIF. ENDIF. IF <lfs_base>-zcknx IS NOT INITIAL. READ TABLE gt_zmmt001 INTO gs_zmmt001 WITH KEY zcknx = <lfs_base>-zcknx. IF sy-subrc <> 0 . l_flag = 1. <lfs_base>-message = '仓库类型填写错误'. <lfs_base>-light = '@5C@'. "红灯 <lfs_base>-type = 'E'. ENDIF. ENDIF. IF <lfs_base>-zfbm IS NOT INITIAL. READ TABLE gt_zmmt000 INTO gs_zmmt000 WITH KEY zfbm = <lfs_base>-zfbm. IF sy-subrc <> 0 . l_flag = 1. <lfs_base>-message = '父编码填写错误'. <lfs_base>-light = '@5C@'. "红灯 <lfs_base>-type = 'E'. ENDIF. ENDIF. IF <lfs_base>-zpsdj IS NOT INITIAL. READ TABLE gt_zmmt004 INTO gs_zmmt004 WITH KEY zpsdj = <lfs_base>-zpsdj. IF sy-subrc <> 0 . l_flag = 1. <lfs_base>-message = '配送等级填写错误'. <lfs_base>-light = '@5C@'. "红灯 <lfs_base>-type = 'E'. ENDIF. ENDIF. *&--------------如果物料类型没给不执行BAPI IF <lfs_base>-matl_type IS INITIAL. l_flag = 1. <lfs_base>-message = '物料类型不能为空'. <lfs_base>-light = '@5C@'. "红灯 *&-----------------------外部给号 ELSEIF <lfs_base>-matl_type = 'ZDYL' OR <lfs_base>-matl_type = 'ZBCP' OR <lfs_base>-matl_type = 'ZDBC' OR <lfs_base>-matl_type = 'ZSBP' OR <lfs_base>-matl_type = 'ZSYL' . *&--------物料为空 IF <lfs_base>-material IS INITIAL. l_flag = 1. <lfs_base>-message = '外部编码类型请给物料号'. <lfs_base>-light = '@5C@'. "红灯 <lfs_base>-type = 'E'. ELSE. *&--------物料号存在也报错 READ TABLE gt_mara WITH KEY matnr = <lfs_base>-material. IF sy-subrc = 0. l_flag = 1. <lfs_base>-message = '物料号已存在'. <lfs_base>-light = '@5C@'. "红灯 <lfs_base>-type = 'E'. ELSE. *&---------截取物料号的后面18位 " <lfs_base>-material = <lfs_base>-material+22(18). headdata-material = <lfs_base>-material . ENDIF. ENDIF. ELSE. IF <lfs_base>-material IS NOT INITIAL . READ TABLE gt_mara WITH KEY matnr = <lfs_base>-material. IF sy-subrc = 0. l_flag = 1. <lfs_base>-message = '物料号已存在'. <lfs_base>-light = '@5C@'. "红灯 <lfs_base>-type = 'E'. ENDIF. headdata-material = <lfs_base>-material . ELSE. *&--------系统流水号 CLEAR : lt_number. CALL FUNCTION 'BAPI_MATERIAL_GETINTNUMBER' EXPORTING material_type = <lfs_base>-matl_type TABLES material_number = lt_number. READ TABLE lt_number INTO ls_number INDEX 1. IF sy-subrc = 0. <lfs_base>-material = ls_number-material. headdata-material = <lfs_base>-material."物料号 ENDIF. ENDIF. ENDIF. *&---------------基本视图 headdata-basic_view = 'X'. headdata-ind_sector = 'C'."行业类型【组织级别】 headdata-matl_type = <lfs_base>-matl_type."物料类型【组织级别】 materialdescription-langu = '1'. materialdescription-matl_desc = <lfs_base>-matl_desc_zh. APPEND materialdescription. clientdata-base_uom = <lfs_base>-base_uom. "基本计量单位 clientdatax-base_uom = 'X'. clientdata-matl_group = <lfs_base>-matl_group."物料组 clientdatax-matl_group = 'X'. clientdata-extmatlgrp = <lfs_base>-extmatlgrp."外部物料组(系列) clientdatax-extmatlgrp = 'X'. clientdata-old_mat_no = <lfs_base>-old_mat_no."旧物料号 clientdatax-old_mat_no = 'X'. clientdata-pur_status = <lfs_base>-mstae. clientdatax-pur_status = 'X'. clientdata-size_dim = <lfs_base>-groes. clientdatax-size_dim = 'X'. " clientdata-old_mat_no_long = <lfs_base>-old_mat_no."旧物料号 LONG " clientdatax-old_mat_no_long = 'X'. clientdata-division = <lfs_base>-division. "产品组 clientdatax-division = 'X'. *&-----------------------------------------------------------------------&* ***20.01.2017 21:37:02 HANDLR********************新增开始* *&-----------科目设置组 clientdata-item_cat = 'NORM'. clientdatax-item_cat = 'X'. ***20.01.2017 21:37:02 HANDLR********************新增结束* *&-----------------------------------------------------------------------&* *&--------------单位 IF <lfs_base>-meinh IS NOT INITIAL. unitsofmeasure-alt_unit = <lfs_base>-meinh. unitsofmeasure-alt_unit_iso = <lfs_base>-meinh. unitsofmeasure-numerator = <lfs_base>-numerator. unitsofmeasure-denominatr = 1. "分母固定为1 unitsofmeasure-gross_wt = 0 . "毛重 APPEND unitsofmeasure. unitsofmeasurex-alt_unit = <lfs_base>-meinh. unitsofmeasurex-alt_unit_iso = <lfs_base>-meinh. unitsofmeasurex-numerator = 'X'. unitsofmeasurex-denominatr = 'X'. unitsofmeasurex-gross_wt = 'X'. APPEND unitsofmeasurex. ENDIF. *&-----------------------防止重复提交 IF l_flag = 0 AND <lfs_base>-type IS INITIAL. CALL FUNCTION 'BAPI_MATERIAL_SAVEDATA' EXPORTING headdata = headdata "表头数据 clientdata = clientdata " 基本数据 clientdatax = clientdatax " plantdata = plantdata " 生产 " plantdatax = plantdatax " salesdata = salesdata "销售 " salesdatax = salesdatax " storagelocationdata = storagelocationdata "库存 " storagelocationdatax = storagelocationdatax " valuationdata = valuationdata "评估 " valuationdatax = valuationdatax IMPORTING return = return TABLES materialdescription = materialdescription "物料描述 unitsofmeasure = unitsofmeasure " 单位 unitsofmeasurex = unitsofmeasurex " taxclassifications = taxclassifications. "税 . <lfs_base>-type = return-type. <lfs_base>-message = return-message. IF return-type = 'S'. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = 'X'. *&-------------将附加数据MODIFY到MARA里面去. UPDATE mara SET zsku = <lfs_base>-zsku zfbm = <lfs_base>-zfbm zwzfn = <lfs_base>-zwzfn zcknx = <lfs_base>-zcknx zggxh = <lfs_base>-zggxh ztysj = <lfs_base>-ztysj zpm = <lfs_base>-zpm zbzq = <lfs_base>-zbzq zpsdj = <lfs_base>-zpsdj WHERE matnr = headdata-material. IF sy-subrc = 0. COMMIT WORK AND WAIT. ELSE. ROLLBACK WORK. ENDIF. ELSE . CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. ENDIF. IF return-type IS NOT INITIAL. CASE return-type. WHEN 'S'. <lfs_base>-light = '@5B@'. "绿灯 WHEN 'E'. <lfs_base>-light = '@5C@'. "红灯 WHEN 'W'. <lfs_base>-light = '@5D@'. "黄灯 ENDCASE. ENDIF. CALL FUNCTION 'CONVERSION_EXIT_MATN1_OUTPUT' EXPORTING input = <lfs_base>-material IMPORTING output = <lfs_base>-material. ENDIF. CLEAR: headdata,clientdata,clientdatax,return, materialdescription,materialdescription[],unitsofmeasure,unitsofmeasure[], unitsofmeasurex,unitsofmeasurex[]. PERFORM conversion_exit_cunit_output CHANGING <lfs_base>-base_uom. "基本单位 PERFORM conversion_exit_cunit_output CHANGING <lfs_base>-meinh. "订单单位 ENDLOOP. ENDIF. *&----------------销售视图 IF p_sale = 'X' AND g_click NE 'X'. LOOP AT gt_sale ASSIGNING <lfs_sale>. "进度条 l_text = l_index. CONDENSE l_text. CONCATENATE '处理第' l_text '条数据/' gd_count INTO l_text. PERFORM set_indicator USING '' l_text. l_index = l_index + 1. *&---------------初始化标识 l_flag = 0. *&--------------物料号加前导零 CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT' EXPORTING input = <lfs_sale>-material IMPORTING output = <lfs_sale>-material. *&----------物料号 工厂 销售组织 分销渠道为必输 IF <lfs_sale>-material IS INITIAL OR <lfs_sale>-plant IS INITIAL OR <lfs_sale>-sales_org IS INITIAL OR <lfs_sale>-distr_chan IS INITIAL . l_flag = 1. <lfs_sale>-message = '必输字段为空'. <lfs_sale>-light = '@5C@'. "红灯 <lfs_sale>-type = 'C'. ENDIF. headdata-material = <lfs_sale>-material."物料号 *&--------销售视图 headdata-sales_view = 'X'. plantdata-plant = <lfs_sale>-plant. "工厂 plantdatax-plant = <lfs_sale>-plant. salesdata-sales_org = <lfs_sale>-sales_org. "销售组织 salesdatax-sales_org = <lfs_sale>-sales_org. salesdata-distr_chan = <lfs_sale>-distr_chan. "分销渠道 salesdatax-distr_chan = <lfs_sale>-distr_chan. * clientdata-division = <lfs_sale>-division. "产品组 * clientdatax-division = 'X'. salesdata-delyg_plnt = <lfs_sale>-delyg_plnt. "交货工厂 salesdatax-delyg_plnt = 'X'. salesdata-acct_assgt = <lfs_sale>-acct_assgt. "科目设置组 可能为空 salesdatax-acct_assgt = 'X'. salesdata-matl_grp_1 = <lfs_sale>-mvgr1."物料组1 salesdatax-matl_grp_1 = 'X'. salesdata-matl_grp_2 = <lfs_sale>-mvgr2."物料组2 salesdatax-matl_grp_2 = 'X'. salesdata-matl_grp_3 = <lfs_sale>-mvgr3."物料组3 salesdatax-matl_grp_3 = 'X'. salesdata-matl_grp_4 = <lfs_sale>-mvgr4."物料组4 salesdatax-matl_grp_4 = 'X'. salesdata-matl_grp_5 = <lfs_sale>-mvgr5."物料组5 salesdatax-matl_grp_5 = 'X'. *&------------停用日期 salesdata-valid_from = <lfs_sale>-vmstd. salesdatax-valid_from = 'X'. *&------------配送等级 salesdata-comm_group = <lfs_sale>-provg. salesdatax-comm_group = 'X'. salesdata-prod_att_1 = <lfs_sale>-prat1. "P码 salesdatax-prod_att_1 = 'X'. * * salesdata-prod_att_2 = <lfs_sale>-prat2. "M码 * salesdatax-prod_att_2 = 'X'. * salesdata-prod_att_1 = <lfs_sale>-prat1. "停用标识 * salesdatax-prod_att_1 = 'X'. plantdata-loadinggrp = <lfs_sale>-loadinggrp."装载组 plantdatax-loadinggrp = 'X'. *&-----------------------------------------------------------------------&* ***20.01.2017 21:44:55 HANDLR********************新增开始* *&-------------销售视图科目设置组, salesdata-item_cat = 'NORM'. salesdatax-item_cat = 'X'. ***20.01.2017 21:44:55 HANDLR********************新增结束* *&-----------------------------------------------------------------------&* *&---------- 科目设置组 为空时 IF <lfs_sale>-acct_assgt = '' . <lfs_sale>-message = '科目设置组/项目类别组不能为空'. <lfs_sale>-light = '@5C@'. "红灯 l_flag = 1. ENDIF. IF <lfs_sale>-taxclass_1 = ''."物料的税分类为空时赋值 <lfs_sale>-taxclass_1 = '1'. ENDIF. "税分类1 SELECT SINGLE land1 INTO t_land1 FROM t001w WHERE werks = <lfs_sale>-plant. taxclassifications-depcountry = t_land1. taxclassifications-tax_type_1 = 'MWST'. taxclassifications-taxclass_1 = <lfs_sale>-taxclass_1. APPEND taxclassifications. *&-----------------------防止重复提交 IF l_flag = 0 AND <lfs_sale>-type IS INITIAL. CALL FUNCTION 'BAPI_MATERIAL_SAVEDATA' EXPORTING headdata = headdata "表头数据 clientdata = clientdata " 基本数据 clientdatax = clientdatax plantdata = plantdata " 生产 plantdatax = plantdatax salesdata = salesdata "销售 salesdatax = salesdatax storagelocationdata = storagelocationdata "库存 storagelocationdatax = storagelocationdatax valuationdata = valuationdata "评估 valuationdatax = valuationdatax IMPORTING return = return TABLES materialdescription = materialdescription "物料描述 unitsofmeasure = unitsofmeasure " 单位 unitsofmeasurex = unitsofmeasurex taxclassifications = taxclassifications. "税 . <lfs_sale>-type = return-type. <lfs_sale>-message = return-message. IF return-type = 'S'. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = 'X'. ELSE . CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. ENDIF. IF return-type IS NOT INITIAL. CASE return-type. WHEN 'S'. <lfs_sale>-light = '@5B@'. "绿灯 WHEN 'E'. <lfs_sale>-light = '@5C@'. "红灯 WHEN 'W'. <lfs_sale>-light = '@5D@'. "黄灯 ENDCASE. CALL FUNCTION 'CONVERSION_EXIT_MATN1_OUTPUT' EXPORTING input = <lfs_sale>-material IMPORTING output = <lfs_sale>-material. ENDIF. ENDIF. CLEAR: headdata,clientdata,clientdatax,plantdata,plantdatax,salesdata,salesdatax, storagelocationdata,storagelocationdatax,valuationdata,valuationdatax,return, materialdescription,materialdescription[],unitsofmeasure,unitsofmeasure[], unitsofmeasurex,unitsofmeasurex[],taxclassifications,taxclassifications[]. ENDLOOP. ENDIF. *&---------------工厂视图 IF p_werks = 'X' AND g_click NE 'X'. LOOP AT gt_werks ASSIGNING <lfs_werks>. "进度条 l_text = l_index. CONDENSE l_text. CONCATENATE '处理第' l_text '条数据/' gd_count INTO l_text. PERFORM set_indicator USING '' l_text. l_index = l_index + 1. *&---------------初始化标识 l_flag = 0. *&-----单位装换 订单单位和价格单位 PERFORM conversion_exit_cunit_input CHANGING <lfs_werks>-bstme. "订单单位 PERFORM conversion_exit_cunit_input CHANGING <lfs_werks>-peinh. "价格单位 *&--------------物料号加前导零 CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT' EXPORTING input = <lfs_werks>-material IMPORTING output = <lfs_werks>-material. *&--------------如果物料号和工厂为空不执行BAPI IF <lfs_werks>-material IS INITIAL OR <lfs_werks>-plant IS INITIAL. <lfs_werks>-message = '必输字段为空'. <lfs_werks>-light = '@5C@'. "红灯 <lfs_werks>-type = 'E'. l_flag = 1. ELSE. headdata-material = <lfs_werks>-material."物料号 ENDIF. plantdata-plant = <lfs_werks>-plant. "工厂 plantdatax-plant = <lfs_werks>-plant. * unitsofmeasure-alt_unit = <lfs_werks>-bstme. * unitsofmeasure-alt_unit_iso = <lfs_werks>-bstme. * unitsofmeasure-numerator = 1. * unitsofmeasure-denominatr = 1. * unitsofmeasure-gross_wt = 0 . "毛重 * APPEND unitsofmeasure. * unitsofmeasurex-alt_unit = <lfs_werks>-bstme. * unitsofmeasurex-alt_unit_iso = <lfs_werks>-bstme. * unitsofmeasurex-numerator = 'X'. * unitsofmeasurex-denominatr = 'X'. * unitsofmeasurex-gross_wt = 'X'. * APPEND unitsofmeasurex. *&--------------采购视图 IF <lfs_werks>-pur_group IS NOT INITIAL OR <lfs_werks>-bstme IS NOT INITIAL OR * <lfs_werks>-fabkz IS NOT INITIAL OR <lfs_werks>-kautb IS NOT INITIAL OR <lfs_werks>-kordb IS NOT INITIAL . headdata-purchase_view = 'X'. ENDIF. " set_unit gs_input-bstme gs_input-numerator gs_input-denominatr 0. "单位分子/单位分母 plantdata-pur_group = <lfs_werks>-pur_group . "采购组 plantdatax-pur_group = 'X'. clientdata-po_unit = <lfs_werks>-bstme. "订单单位 clientdatax-po_unit = 'X'. clientdata-pur_valkey = <lfs_werks>-ekwsl. " 采购价值代码 clientdatax-pur_valkey = 'X'. * plantdata-jit_relvt = <lfs_werks>-fabkz. "JIT交货计划 * plantdatax-jit_relvt = 'X'. plantdata-auto_p_ord = <lfs_werks>-kautb . "自动采购订单 plantdatax-auto_p_ord = 'X'. plantdata-sourcelist = <lfs_werks>-kordb. "源清单 plantdatax-sourcelist = 'X'. *&--------------生产视图 IF <lfs_werks>-dismm IS NOT INITIAL . *&---------如果物料需求类型不为空的话就创建生产视图。 headdata-mrp_view = 'X'. ENDIF. plantdata-mrp_group = <lfs_werks>-disgr. "MRP组 plantdatax-mrp_group = 'X'. " production_scheduler plantdata-mrp_type = <lfs_werks>-dismm."MRP类型 plantdatax-mrp_type = 'X'. plantdata-mrp_ctrler = <lfs_werks>-dispo. "MRP控制者 plantdatax-mrp_ctrler = 'X'. plantdata-plnd_delry = <lfs_werks>-plifz."计划交货时间 plantdatax-plnd_delry = 'X'. plantdata-lotsizekey = <lfs_werks>-disls."批量(物料计划) plantdatax-lotsizekey = 'X'. plantdata-assy_scrap = <lfs_werks>-ausss."装配报废百分比 plantdatax-assy_scrap = 'X'. plantdata-proc_type = <lfs_werks>-beskz ." 采购类型 plantdatax-proc_type = 'X'. plantdata-spproctype = <lfs_werks>-sobsl." 特殊采购类型 plantdatax-spproctype = 'X'. plantdata-safety_stk = <lfs_werks>-eisbe ."安全库存 plantdatax-safety_stk = 'X'. plantdata-minlotsize = <lfs_werks>-bstmi ." 最小批量 plantdatax-minlotsize = 'X'. plantdata-maxlotsize = <lfs_werks>-bstma." 最大批量大小 plantdatax-maxlotsize = 'X'. plantdata-iss_st_loc = <lfs_werks>-lgpro."生产仓储地点 plantdatax-iss_st_loc = 'X'. plantdata-sloc_exprc = <lfs_werks>-lgfsb."外部采购仓储地点 plantdatax-sloc_exprc = 'X'. plantdata-plan_strgp = <lfs_werks>-strgr."策略组 plantdatax-plan_strgp = 'X'. plantdata-consummode = <lfs_werks>-vrmod."消耗模式 plantdatax-consummode = 'X'. plantdata-bwd_cons = <lfs_werks>-vint1. "消耗期间:逆向 plantdatax-bwd_cons = 'X'. plantdata-fwd_cons = <lfs_werks>-vint2."消耗时期-向前 plantdatax-fwd_cons = 'X'. plantdata-availcheck = <lfs_werks>-mtvfp."可用性检查的检查组 plantdatax-availcheck = 'X'. plantdata-discontinu = <lfs_werks>-kzaus ."中止指示符 plantdatax-discontinu = 'X'. plantdata-eff_o_day = <lfs_werks>-ausdt. "中断日期 plantdatax-eff_o_day = 'X'. *&--------后继物料要加前导零 PERFORM frm_add_qdl_matnr CHANGING <lfs_werks>-nfmat. plantdata-follow_up = <lfs_werks>-nfmat."后续物料 plantdatax-follow_up = 'X'. *&--------------工作计划视图 IF <lfs_werks>-fevor IS NOT INITIAL. headdata-work_sched_view = 'X'. ENDIF. plantdata-production_scheduler = <lfs_werks>-fevor ."生产管理员 plantdatax-production_scheduler = 'X'. plantdata-proc_time = <lfs_werks>-bearz ."处理时间 plantdatax-proc_time = 'X'. plantdata-base_qty = <lfs_werks>-basmg . "基准数量 plantdatax-base_qty = 'X' . *&--------------质量视图 未定????? IF <lfs_werks>-art1 IS NOT INITIAL OR <lfs_werks>-art2 IS NOT INITIAL OR <lfs_werks>-art3 IS NOT INITIAL. headdata-quality_view = 'X'. plantdata-qm_authgrp = <lfs_werks>-qmata. plantdatax-qm_authgrp = 'X'. ENDIF. *&--------------财务视图 IF <lfs_werks>-vprsv IS NOT INITIAL . headdata-account_view = 'X'. ENDIF. *&------------成本视图 IF <lfs_werks>-hkmat IS NOT INITIAL. headdata-cost_view = 'X'. ENDIF. *&-----------------------------------------------------------------------&* ***23.01.2017 01:56:24 HANDLR********************新增开始* *&--------工厂储存视图 headdata-storage_view = 'X'. ***23.01.2017 01:56:24 HANDLR********************新增结束* *&-----------------------------------------------------------------------&* plantdata-lot_size = <lfs_werks>-losgr. "批量产品成本核算 plantdatax-lot_size = 'X'. valuationdata-val_area = <lfs_werks>-plant. "评估范围 valuationdatax-val_area = <lfs_werks>-plant. valuationdata-price_ctrl = <lfs_werks>-vprsv ."价格控制指示符 valuationdatax-price_ctrl = 'X'. valuationdata-std_price = <lfs_werks>-stprs." 标准价格 valuationdatax-std_price = 'X'. valuationdata-price_unit = <lfs_werks>-peinh." "价格单位 valuationdatax-price_unit = 'X'. valuationdata-val_class = <lfs_werks>-bklas."评估类 valuationdatax-val_class = 'X'. valuationdata-qty_struct = <lfs_werks>-ekalr. "用QS的成本估算 valuationdatax-qty_struct = 'X'. valuationdata-orig_mat = <lfs_werks>-hkmat."物料来源 valuationdatax-orig_mat = 'X'. valuationdata-commprice1 = <lfs_werks>-bwprh. "基于商法的估价价格 - 级别 1 valuationdatax-commprice1 = 'X'. valuationdata-commprice2 = <lfs_werks>-bwph1." valuationdatax-commprice2 = 'X'. valuationdata-commprice3 = <lfs_werks>-vjbwh. "基于商业法律的估价价格 - 级别3 valuationdatax-commprice3 = 'X'. valuationdata-plndprice1 = <lfs_werks>-zplp1."未来计划价格 valuationdatax-plndprice1 = 'X'. valuationdata-plndprdate1 = <lfs_werks>-zpld1. "未来计划价格 valuationdatax-plndprdate1 = 'X'. *&-----------------------防止重复提交 IF l_flag = 0 AND <lfs_werks>-type IS INITIAL. CALL FUNCTION 'BAPI_MATERIAL_SAVEDATA' EXPORTING headdata = headdata "表头数据 clientdata = clientdata " 基本数据 clientdatax = clientdatax plantdata = plantdata " 生产 plantdatax = plantdatax salesdata = salesdata "销售 salesdatax = salesdatax storagelocationdata = storagelocationdata "库存 storagelocationdatax = storagelocationdatax valuationdata = valuationdata "评估 valuationdatax = valuationdatax IMPORTING return = return TABLES materialdescription = materialdescription "物料描述 unitsofmeasure = unitsofmeasure " 单位 unitsofmeasurex = unitsofmeasurex taxclassifications = taxclassifications. "税 . IF return-type = 'S'. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = 'X'. IF <lfs_werks>-art1 IS NOT INITIAL AND headdata-quality_view = 'X'. PERFORM bapi_matinspctrl_savereplica USING <lfs_werks>-material <lfs_werks>-art1 <lfs_werks>-aktiv1 <lfs_werks>-plant CHANGING return . WAIT UP TO '0.05' SECONDS. ENDIF. IF <lfs_werks>-art2 IS NOT INITIAL AND headdata-quality_view = 'X'. PERFORM bapi_matinspctrl_savereplica USING <lfs_werks>-material <lfs_werks>-art2 <lfs_werks>-aktiv2 <lfs_werks>-plant CHANGING return . WAIT UP TO '0.05' SECONDS. ENDIF. IF <lfs_werks>-art3 IS NOT INITIAL AND headdata-quality_view = 'X'. PERFORM bapi_matinspctrl_savereplica USING <lfs_werks>-material <lfs_werks>-art3 <lfs_werks>-aktiv3 <lfs_werks>-plant CHANGING return . WAIT UP TO '0.05' SECONDS. ENDIF. ELSE . CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. ENDIF. IF return-type IS NOT INITIAL. CASE return-type. WHEN 'S'. <lfs_werks>-light = '@5B@'. "绿灯 WHEN 'E'. <lfs_werks>-light = '@5C@'. "红灯 WHEN 'W'. <lfs_werks>-light = '@5D@'. "黄灯 ENDCASE. CALL FUNCTION 'CONVERSION_EXIT_MATN1_OUTPUT' EXPORTING input = <lfs_werks>-material IMPORTING output = <lfs_werks>-material. ENDIF. <lfs_werks>-type = return-type. <lfs_werks>-message = return-message. ENDIF. CLEAR: headdata,clientdata,clientdatax,plantdata,plantdatax,salesdata,salesdatax, storagelocationdata,storagelocationdatax,valuationdata,valuationdatax,return, materialdescription,materialdescription[],unitsofmeasure,unitsofmeasure[], unitsofmeasurex,unitsofmeasurex[],taxclassifications,taxclassifications[]. PERFORM conversion_exit_cunit_output CHANGING <lfs_werks>-bstme. "订单单位 PERFORM conversion_exit_cunit_output CHANGING <lfs_werks>-peinh. "价格单位 ENDLOOP. ENDIF. ENDFORM. FORM build_layout. gd_layout-colwidth_optimize = 'X'. gd_layout-zebra = 'X'. gd_layout-header_text = '导入结果查询'. ENDFORM. *&---------------------------------------------------------------------* *& Form DISPLAY_ALV_REPORT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM display_alv_report . IF p_base = 'X'. gd_repid = sy-repid. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING i_callback_program = gd_repid is_layout = gd_layout it_fieldcat = fieldcatalog[] "输出的列信息 i_save = 'A' "变式可保存 i_callback_pf_status_set = 'FRM_SET_STATUS' "状态栏 i_callback_user_command = 'FRM_USER_COMMAND' "按钮处理 TABLES t_outtab = gt_base "输出内容内表 EXCEPTIONS program_error = 1 OTHERS = 2. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. ENDIF. IF p_sale = 'X'. gd_repid = sy-repid. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING i_callback_program = gd_repid is_layout = gd_layout it_fieldcat = fieldcatalog[] "输出的列信息 i_save = 'A' "变式可保存 * it_events = it_events "事件内表 i_callback_pf_status_set = 'FRM_SET_STATUS' "状态栏 i_callback_user_command = 'FRM_USER_COMMAND' "按钮处理 TABLES t_outtab = gt_sale "输出内容内表 EXCEPTIONS program_error = 1 OTHERS = 2. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. ENDIF. IF p_werks = 'X'. gd_repid = sy-repid. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING i_callback_program = gd_repid is_layout = gd_layout it_fieldcat = fieldcatalog[] "输出的列信息 i_save = 'A' "变式可保存 * it_events = it_events "事件内表 i_callback_pf_status_set = 'FRM_SET_STATUS' "状态栏 i_callback_user_command = 'FRM_USER_COMMAND' "按钮处理 TABLES t_outtab = gt_werks "输出内容内表 EXCEPTIONS program_error = 1 OTHERS = 2. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. ENDIF. ENDFORM. FORM frm_add_qdl_matnr CHANGING matnr. CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT' EXPORTING input = matnr IMPORTING output = matnr EXCEPTIONS length_error = 1 OTHERS = 2. IF sy-subrc <> 0. * Implement suitable error handling here ENDIF. ENDFORM. *----------------------------------------------------------------------* FORM bapi_matinspctrl_savereplica USING f_matnr TYPE mara-matnr f_itype TYPE tq30t-art f_aktiv3 TYPE qmat-aktiv f_werks TYPE marc-werks CHANGING return TYPE bapiret2. DATA: l_return TYPE bapiret2 OCCURS 0 WITH HEADER LINE, inspectionctrl TYPE bapi1001004_qmat OCCURS 0 WITH HEADER LINE. inspectionctrl-insptype = f_itype. "检验类型 inspectionctrl-material = f_matnr. "物料号 inspectionctrl-plant = f_werks. "工厂 inspectionctrl-ind_insptype_mat_active = f_aktiv3. "检验类型 - 物料合并已激活 * inspectionctrl-preferred_insptype = 'X'. "首选的检验类型 * SELECT SINGLE qkzverf * FROM tq34 * INTO inspectionctrl-qual_score_procedure * WHERE art = f_itype. inspectionctrl-qual_score_procedure = '06'. "质量计分过程 inspectionctrl-ind_insp_with_tsk_list = 'X'."有任务清单的检验 IND_INSP_WITH_TSK_LIST inspectionctrl-ind_auto_assign = 'X'."自动分配 IND_AUTO_ASSIGN inspectionctrl-ind_insp_by_charac = 'X'."检验特征 IND_INSP_BY_CHARAC inspectionctrl-ind_skips_allowed = 'X'."略过允许 IND_SKIPS_ALLOWED inspectionctrl-ind_automatic_ud = 'X'."自动使用决策 IND_AUTOMATIC_UD inspectionctrl-ind_single_units_possible = 'X'."可能序列号 IND_SINGLE_UNITS_POSSIBLE inspectionctrl-contr_insp_lot_create = ''."控制检验批 CONTR_INSP_LOT_CREATE " Z01 Z03都有值 Z02 过账到检验库存没有 IF f_itype = 'Z01' OR f_itype = 'Z03' OR f_itype = 'Z02'. inspectionctrl-ind_post_to_insp_stock = 'X'. "过账到检验库存 INSMK IND_POST_TO_INSP_STOCK ENDIF. APPEND inspectionctrl. CLEAR inspectionctrl. CALL FUNCTION 'BAPI_MATINSPCTRL_SAVEREPLICA' TABLES return = l_return inspectionctrl = inspectionctrl. LOOP AT l_return WHERE type = 'E' OR type = 'A'. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = 'X'. return-type = l_return-type. return-message = l_return-message. ENDLOOP. * IF sy-subrc <> 0. * READ TABLE l_return WITH KEY type = 'S'. * IF sy-subrc = 0. * return-type = l_return-type. * return-message = l_return-message. * CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. * ELSE. * return-type = 'W'. * return-message = l_return-message. * ENDIF. * ENDIF. ENDFORM. *&---------------------------------------------------------------------* *& Form BUILD_FIELDCATALOG_BEFORE *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM build_fieldcatalog_before . CLEAR: fieldcatalog. DEFINE build_fieldcat. fieldcatalog-fieldname = &1. fieldcatalog-seltext_m = &2. fieldcatalog-outputlen = &3. IF fieldcatalog-fieldname = 'LIGHT'. fieldcatalog-key = 'X'. ENDIF. IF fieldcatalog-fieldname = 'MESSAGE'. fieldcatalog-emphasize = 'X'. fieldcatalog-key = 'X'. ENDIF. IF fieldcatalog-fieldname = 'MATERIAL'. fieldcatalog-key = 'X'. ENDIF. IF fieldcatalog-fieldname = 'NUM'. fieldcatalog-key = 'X'. ENDIF. APPEND fieldcatalog TO fieldcatalog. CLEAR fieldcatalog. END-OF-DEFINITION. IF p_base = 'X'. build_fieldcat 'NUM' '序号' 1. build_fieldcat 'MATERIAL' '物料号' 1. build_fieldcat 'MATL_DESC_ZH' '物料描述' 1. build_fieldcat 'MATL_TYPE' '物料类型' 1. build_fieldcat 'BASE_UOM' '基本计量单位' 1. build_fieldcat 'MATL_GROUP' '物料组' 1. build_fieldcat 'EXTMATLGRP' '系列' 1. build_fieldcat 'DIVISION' '品牌' 1. build_fieldcat 'OLD_MAT_NO' '旧物料号' 1. build_fieldcat 'MSTAE' '停用标识' 1. build_fieldcat 'GROES' '中箱' 1. build_fieldcat 'ZSKU' 'SKU号' 1. build_fieldcat 'ZFBM' '父编码' 1. build_fieldcat 'ZWZFN' '柜台分类' 1. build_fieldcat 'ZCKNX' '仓库类型' 1. build_fieldcat 'ZGGXH' '规格型号' 1. build_fieldcat 'ZTYSJ' '备注1' 1. build_fieldcat 'ZPM' 'P/M码' 1. build_fieldcat 'ZPSDJ' '备注2' 1. build_fieldcat 'ZBZQ' '保质期' 1. build_fieldcat 'NUMERATOR' '包装数量' 1. build_fieldcat 'MEINH' '包装单位' 1. build_fieldcat 'LIGHT' '执行结果' 1. build_fieldcat 'MESSAGE' '消息' 1. build_fieldcat 'TYPE' '结果' 1. ENDIF. IF p_sale = 'X'. build_fieldcat 'MATERIAL' '物料号' 1. build_fieldcat 'PLANT' '工厂' 1. build_fieldcat 'SALES_ORG' '销售组织' 1. build_fieldcat 'DISTR_CHAN' '分销渠道' 1. build_fieldcat 'DELYG_PLNT' '交货工厂' 1. build_fieldcat 'VMSTD' '停用日期' 1. build_fieldcat 'ACCT_ASSGT' '科目设置组' 1. build_fieldcat 'PROVG' '配送等级' 1. build_fieldcat 'MVGR1' '渠道分类' 1. build_fieldcat 'MVGR2' '系列' 1. build_fieldcat 'MVGR3' '功能' 1. build_fieldcat 'MVGR4' '停用状态' 1. build_fieldcat 'MVGR5' '单品/套装' 1. build_fieldcat 'TAXCLASS_1' '税分类' 1. build_fieldcat 'LOADINGGRP' '装载组' 1. build_fieldcat 'PRAT1' '产品属性1' 1. build_fieldcat 'LIGHT' '执行结果' 1. build_fieldcat 'MESSAGE' '消息' 1. build_fieldcat 'TYPE' '结果' 1. ENDIF. IF p_werks = 'X'. build_fieldcat 'LIGHT' '执行结果' 1. build_fieldcat 'MESSAGE' '消息' 1. build_fieldcat 'TYPE' '结果' 1. build_fieldcat 'MATERIAL' '物料号' 1. build_fieldcat 'PLANT' '工厂' 1. build_fieldcat 'PUR_GROUP' '采购组' 1. build_fieldcat 'KORDB' '源清单' 1. build_fieldcat 'KAUTB' '自动采购订单' 1. build_fieldcat 'BSTME' '采购单位' 1. build_fieldcat 'EKWSL' '采购价值码' 1. build_fieldcat 'DISMM' '物料需求计划类型' 1. build_fieldcat 'DISGR' 'MRP组' 1. build_fieldcat 'DISPO' 'MRP控制者' 1. build_fieldcat 'PLIFZ' '计划交货时间' 1. build_fieldcat 'DISLS' '批量' 1. build_fieldcat 'AUSSS' '装配报废百分比' 1. build_fieldcat 'BESKZ' '采购类型' 1. build_fieldcat 'SOBSL' '特殊采购类型' 1. build_fieldcat 'EISBE' '安全库存' 1. build_fieldcat 'BSTMI' '最小批量' 1. build_fieldcat 'BSTMA' '最大批量大小' 1. build_fieldcat 'LGPRO' '生产库存地点' 1. build_fieldcat 'LGFSB' '外部库存地点' 1. build_fieldcat 'STRGR' '策略组' 1. build_fieldcat 'VRMOD' '消耗模式' 1. build_fieldcat 'VINT1' '消耗期间:逆向' 1. build_fieldcat 'VINT2' '消耗期间:向前' 1. build_fieldcat 'MTVFP' '可用性检查的检查组' 1. build_fieldcat 'KZAUS' '中止指示符' 1. build_fieldcat 'AUSDT' '中断日期' 1. build_fieldcat 'NFMAT' '后续物料 ' 1. build_fieldcat 'FEVOR' '生产管理员' 1. build_fieldcat 'BEARZ' '处理时间 ' 1. build_fieldcat 'BASMG' '基准数量 ' 1. build_fieldcat 'ART1' '检验类型1' 1. build_fieldcat 'AKTIV1' '活动的1' 1. build_fieldcat 'ART2' '检验类型2' 1. build_fieldcat 'AKTIV2' '活动的1' 1. build_fieldcat 'ART3' '检验类型3' 1. build_fieldcat 'AKTIV3' '活动的1' 1. build_fieldcat 'QMATA' 'QM授权组' 1. build_fieldcat 'LOSGR' '批量成本核算' 1. build_fieldcat 'VPRSV' '价格控指示符' 1. build_fieldcat 'STPRS' '标准价格' 1. build_fieldcat 'PEINH' '价格单位' 1. build_fieldcat 'BKLAS' '评估类' 1. build_fieldcat 'BWPRH' '价格1' 1. build_fieldcat 'BWPH1' '价格2' 1. build_fieldcat 'VJBWH' '价格3' 1. build_fieldcat 'EKALR' '用QS的成本核算' 1. build_fieldcat 'HKMAT' '物料来源' 1. build_fieldcat 'ZPLP1' '未来计划价格' 1. build_fieldcat 'ZPLD1' '未来计划日期' 1. ENDIF. ENDFORM. FORM frm_set_status USING pt_extab TYPE slis_t_extab . SET PF-STATUS 'STANDARD'. ENDFORM. "Frm_SET_STATUS FORM frm_user_command USING r_ucomm LIKE sy-ucomm rs_selfield TYPE slis_selfield. DATA: l_grid TYPE REF TO cl_gui_alv_grid, l_subrc TYPE sy-subrc. CASE r_ucomm. WHEN 'SAVE'. PERFORM save_material_data. g_click = 'X'. *&-------------刷新 rs_selfield-refresh = 'X'. *&----------------ALV展示结果 * CLEAR fieldcatalog[]. * PERFORM build_fieldcatalog. * PERFORM build_layout. * PERFORM display_alv_report. WHEN OTHERS. ENDCASE. ENDFORM. "user_command FORM set_indicator USING p_par p_text. CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR' EXPORTING percentage = p_par text = p_text. ENDFORM.
^_^很多人都把资料锁进了note里,以后还怎么百度呢^_^
浙公网安备 33010602011771号