BAPI:BAPI_MATERIAL_SAVEDATA
*&---------------------------------------------------------------------* *& Report ZMMU001 *&---------------------------------------------------------------------* *&---------------------------------------------------------------------* *& Remark:期初物料主数据批量导入 *&---------------------------------------------------------------------* *& Change Record: *& Date Developer ReqNo Descriptions *& ========== ================== ========== ========================* *& 2020.10.09 JT-WUW S4DK900125 初始开发 *&---------------------------------------------------------------------* REPORT zmmu001. TABLES: sscrfields, marc, mara. TYPES: BEGIN OF ty_alv, *&---------------------------------------------------------------------* *& 创建界面 *&---------------------------------------------------------------------* * MBRSH TYPE MARA-MBRSH, "行业领域 * ztywl TYPE char10, "同一物料 mtart TYPE mara-mtart, "物料类型 *&---------------------------------------------------------------------* *& 工厂 *&---------------------------------------------------------------------* werks TYPE marc-werks, "工厂 *&---------------------------------------------------------------------* *& 基本视图1 *&---------------------------------------------------------------------* matnr TYPE mara-matnr, "物料号 maktx TYPE makt-maktx, "物料描述 * zltxt TYPE char200, "长物料 zeinr TYPE mara-zeinr, "图号 meins TYPE mara-meins, "基本计量单位 matkl TYPE mara-matkl, "物料组 * mstae TYPE mara-mstae, "跨工厂物料状态 bismt TYPE mara-bismt, "旧物料号 groes TYPE mara-groes, "大小量纲 brgew TYPE char17, "毛重 ntgew TYPE char17, "净重 gewei TYPE mara-gewei, "重量单位 *&---------------------------------------------------------------------* *& 基本视图2 *&---------------------------------------------------------------------* normt TYPE mara-normt, "内部订单 ferth TYPE mara-ferth, "模穴 msbookpartno TYPE mara-msbookpartno, "产品系列 zspras TYPE langu_iso, "语言代码 zltxt TYPE char300, "长描述 *&---------------------------------------------------------------------* *& 分类视图 *&---------------------------------------------------------------------* klart TYPE klah-klart, "分类类型 class TYPE klah-class, "分类编号 *&---------------------------------------------------------------------* *& 销售1 *&---------------------------------------------------------------------* vkorg TYPE mvke-vkorg, "销售组织 vtweg TYPE mvke-vtweg, "分销渠道 spart TYPE mara-spart, "产品组 * vrkme TYPE mvke-vrkme, "销售单位 * umren TYPE char05, "订单单位分母 * umrez TYPE char05, "订单单位分子 dwerk TYPE mvke-dwerk, "交货工厂 taxm1 TYPE mlan-taxm1, "税分类 * tatyp TYPE tstl-lfdnr, "各国家可能的征税顺序 *&---------------------------------------------------------------------* *& 销售2 *&---------------------------------------------------------------------* ktgrm TYPE mvke-ktgrm, "科目设置组 mtpos_mara TYPE mara-mtpos_mara, "普通项目类别组 mtpos TYPE mvke-mtpos, "项目类别组 *&---------------------------------------------------------------------* *& 销售:一般工厂 *&---------------------------------------------------------------------* tragr TYPE mara-tragr, "运输组 ladgr TYPE marc-ladgr, "装载组 aland TYPE mg03steuer-aland, "国家 vmsta TYPE mvke-vmsta, "分销链特定的物料状态 vmstd TYPE mvke-vmstd, "分销链状态的有效起始日期 *&---------------------------------------------------------------------* *& 采购 *&---------------------------------------------------------------------* bstme TYPE mara-bstme, "采购单位 pmren TYPE char05, "分母 pmrez TYPE char05, "分子 vabme TYPE mara-vabme, "可变单位 ekgrp TYPE marc-ekgrp, "采购组 * MMSTA TYPE MARC-MMSTA, "特定工厂的物料状态 * KAUTB TYPE MARC-KAUTB, "自动采购订单 * insmk TYPE marc-insmk, "过账到检验库存 kordb TYPE marc-kordb, "标识: 源清单要求 *&---------------------------------------------------------------------* *& MRP1 *&---------------------------------------------------------------------* disgr TYPE marc-disgr, "MRP组 * maabc TYPE marc-maabc, "ABC标识 dismm TYPE marc-dismm, "MRP类型 * minbe TYPE char17, "再订货点 dispo TYPE marc-dispo, "MRP控制者 disls TYPE marc-disls, "批量程序 * bstma TYPE char17, "最大批量大小 bstmi TYPE char17, "最小批量大小 * bstfe TYPE char17, "固定批量大小 * mabst TYPE char17, "最大库存水平 bstrf TYPE char17, "舍入值 berid TYPE mdma-berid, "MRP范围 ausss TYPE char07, "装配报废 *&---------------------------------------------------------------------* *& MRP2 *&---------------------------------------------------------------------* beskz TYPE marc-beskz, "采购类型 sobsl TYPE marc-sobsl, "特殊采购类型 rgekz TYPE marc-rgekz, "反冲 lgpro TYPE marc-lgpro, "生产仓储地点 lgfsb TYPE marc-lgfsb, "外部采购仓储地点 plifz TYPE char03, "计划交货时间 dzeit TYPE char03, "自制生产时间 webaz TYPE char03, "收货处理时间 * mrppp TYPE marc-mrppp, "计划日历 fhori TYPE marc-fhori, "计划边际码 eisbe TYPE char17, "安全库存 * SCHGT TYPE MARC-SCHGT, "散装物料 *&---------------------------------------------------------------------* *& MRP3 *&---------------------------------------------------------------------* * strgr TYPE marc-strgr, "策略组 * vrmod TYPE marc-vrmod, "消耗模式 * vint1 TYPE char03, "逆向消耗期间 * vint2 TYPE char03, "向前消耗期间 * miskz TYPE marc-miskz, "综合MRP标识 mtvfp TYPE marc-mtvfp, "可用性检查 *&---------------------------------------------------------------------* *& MRP4 *&---------------------------------------------------------------------* sbdkz TYPE marc-sbdkz, "独立/集中 kausf TYPE marc-kausf, "部件废品百分数 * KZAUS TYPE MARC-KZAUS, "非连续标识 * AUSDT TYPE MARC-AUSDT, "生效期 * NFMAT TYPE MARC-NFMAT, "后继的物料 *&---------------------------------------------------------------------* *& 工作计划视图 *&---------------------------------------------------------------------* * frtme TYPE marc-frtme, "生产单位 * plren TYPE char05, "生产单位分母 * plrez TYPE char05, "生产单位分子 fevor TYPE marc-fevor, "生产管理员 sfcpf TYPE marc-sfcpf, "生成计划参数文件 * matgr TYPE marc-matgr, "物料分组 * uneto TYPE char04, "不足交货容差限制 ueeto TYPE char04, "超量交货容差限制 * ueetk TYPE marc-ueetk, "标识:允许未限制的过量交货 * bearz TYPE char07, "处理时间 * basmg TYPE char17, "基本数量 *&---------------------------------------------------------------------* *& 工厂数据/存储1 *&---------------------------------------------------------------------* loggr TYPE marc-loggr, "是否启用条码 lgort TYPE mard-lgort, "库存地点 ausme TYPE marc-ausme, "发货单位 isren TYPE char05, "发货单位分母 isrez TYPE char05, "发货单位分子 * tempb TYPE mara-tempb, "WMS管理 * raube TYPE mara-raube, "ROHS * behvo TYPE mara-behvo, "HF标识 xchpf TYPE marc-xchpf, "批次管理 * maxlz TYPE char05, "最大存储期间 * lzeih TYPE marc-lzeih, "最大库存期间单位 mhdrz TYPE char04, "最小剩余货架寿命 mhdhb TYPE char04, "总货架寿命 iprkz TYPE mara-iprkz, "期间标识 * RAUBE TYPE MARA-RAUBE, "存储条件 * LGPBE TYPE MARD-LGPBE, "库存仓位 *&---------------------------------------------------------------------* *& 会计1 *&---------------------------------------------------------------------* * bwtty TYPE mbew-bwtty, "评估类别 * bwtar TYPE mbew-bwtar, "评估类型 bklas TYPE mbew-bklas, "评估分类 mlmaa TYPE mbew-mlmaa, "ML作业 mlast TYPE mbew-mlast, "价格确定 stprs TYPE char17, "标准价格 peinh TYPE char05, "价格单位 vprsv TYPE mbew-vprsv, "价格控制 *&---------------------------------------------------------------------* *& 成本1 *&---------------------------------------------------------------------* ekalr TYPE mbew-ekalr, "用QS的成本估算 hkmat TYPE mbew-hkmat, "物料来源 hrkft TYPE mbew-hrkft, "原始组 kosgr TYPE mbew-kosgr, "间接费分组 * awsls TYPE marc-awsls, "差异码 prctr TYPE marc-prctr, "利润中心 losgr TYPE char17, "成本核算批量 mmstd TYPE marc-mmstd, "有效起始日期 mmsta TYPE marc-mmsta, "工厂特定物料状态 ncost TYPE marc-ncost, "不计算成本 sobsk TYPE marc-sobsk, "特殊采购成本核算 * kzkup TYPE marc-kzkup, "联产品 * fxpru TYPE marc-fxpru, "固定价格 *&---------------------------------------------------------------------* *& 成本2 *&---------------------------------------------------------------------* zplp1 TYPE char17, "计划价格1 zpld1 TYPE mbew-zpld1, "计划价格日期1 *&---------------------------------------------------------------------* *& 质检视图 *&---------------------------------------------------------------------* art TYPE char20, "检验类型 apa TYPE qmat-apa, "首选检验 aktiv TYPE qmat-aktiv, "活动 qmpur TYPE mara-qmpur, "QM采购激活 ssqss TYPE marc-ssqss, "QM控制码 prfrq TYPE char07, "检验间隔 *&---------------------------------------------------------------------* *& 仓库视图 *&---------------------------------------------------------------------* lgnum TYPE mlgt-lgnum, "仓库号 lgtyp TYPE mlgt-lgtyp, "存储类型 lgpla TYPE mlgt-lgpla, "仓位 ltkza TYPE mlgn-ltkza, "库存出库 ltkze TYPE mlgn-ltkze, "上架 lgbkz TYPE mlgn-lgbkz, "仓储区标识 plkpt TYPE mlgn-plkpt, "领货存储类型 *&---------------------------------------------------------------------* *& 模板不传 默认 *&---------------------------------------------------------------------* spras TYPE makt-spras, *&---------------------------------------------------------------------* *& ALV默认结构 *&---------------------------------------------------------------------* zbox TYPE char01, "选择框 zcheck TYPE char01, "侧边栏 zmask TYPE char01, "遮罩层 style TYPE lvc_t_styl, "STYLE参数 light TYPE icon_d, "指示灯 msg TYPE char200, "消息 END OF ty_alv. DATA: ls_alv TYPE ty_alv, lt_alv TYPE TABLE OF ty_alv. FIELD-SYMBOLS: <fs_alv> TYPE ty_alv, <field1> TYPE data, <field2> TYPE data. *&----------调用BAPI参数定义--------(S) DATA: ls_headdata TYPE bapimathead, ls_mara TYPE bapi_mara, ls_marax TYPE bapi_marax, ls_marc TYPE bapi_marc, ls_marcx TYPE bapi_marcx, ls_mpop TYPE bapi_mpop, ls_mpopx TYPE bapi_mpopx, ls_mpgd TYPE bapi_mpgd, ls_mpgdx TYPE bapi_mpgdx, ls_mard TYPE bapi_mard, ls_mardx TYPE bapi_mardx, ls_mlgn TYPE bapi_mlgn, ls_mlgnx TYPE bapi_mlgnx, ls_mvke TYPE bapi_mvke, ls_mvkex TYPE bapi_mvkex, ls_mlgt TYPE bapi_mlgt, ls_mlgtx TYPE bapi_mlgtx, ls_mbew TYPE bapi_mbew, ls_mbewx TYPE bapi_mbewx, lt_return TYPE STANDARD TABLE OF bapiret2, ls_return LIKE LINE OF lt_return, lt_makt TYPE TABLE OF bapi_makt WITH HEADER LINE, lt_mlan TYPE TABLE OF bapi_mlan WITH HEADER LINE, lt_mltx TYPE TABLE OF bapi_mltx WITH HEADER LINE, lt_returnmessages TYPE TABLE OF bapi_matreturn2, lt_marm TYPE TABLE OF bapi_marm WITH HEADER LINE, lt_marmx TYPE TABLE OF bapi_marmx WITH HEADER LINE, lt_mean TYPE TABLE OF bapi_mean WITH HEADER LINE, lt_extensionin TYPE TABLE OF bapiparex WITH HEADER LINE, lt_extensioninx TYPE TABLE OF bapiparexx WITH HEADER LINE. DATA: it_fieldcat TYPE lvc_t_fcat, wa_layout TYPE lvc_s_layo. DATA: wa_fieldcat TYPE lvc_s_fcat, gv_field1 TYPE char50, gv_field2 TYPE char50, gv_line TYPE i. DATA: functxt TYPE smp_dyntxt, c_icon_red TYPE icon_d VALUE '@0A@', c_icon_green TYPE icon_d VALUE '@08@', c_icon_yellow TYPE icon_d VALUE '@09@'. *&---------------------------------------------------------------------* *& 定义宏 *&---------------------------------------------------------------------* DEFINE macro_fill_fcat. CLEAR wa_fieldcat. &1 = &1 + 1. wa_fieldcat-col_pos = &1. wa_fieldcat-fieldname = &2. wa_fieldcat-ref_table = &3. wa_fieldcat-ref_field = &4. " 内表中数量参照字段 wa_fieldcat-coltext = &5. APPEND wa_fieldcat TO it_fieldcat. END-OF-DEFINITION. DEFINE macro_fill_bapi. gv_field2 = gv_field1 && '-' && &2. CONDENSE gv_field2 NO-GAPS. ASSIGN (gv_field2) TO <field1>. gv_field2 = gv_field1 && 'X' && '-' && &2. CONDENSE gv_field2 NO-GAPS. ASSIGN (gv_field2) TO <field2>. IF &1 IS NOT INITIAL. IF &1 <> '#'. <field1> = &1. ENDIF. <field2> = abap_true. ENDIF. UNASSIGN: <field1>, <field2>. END-OF-DEFINITION. DEFINE macro_fill_zfield. IF &1 IS INITIAL. &1 = &2. ELSEIF &1 = '#'. CLEAR: &1. ENDIF. END-OF-DEFINITION. SELECTION-SCREEN: FUNCTION KEY 1. SELECTION-SCREEN BEGIN OF BLOCK blk1 WITH FRAME TITLE TEXT-001. PARAMETERS: p_file LIKE rlgrap-filename MODIF ID mi1. SELECTION-SCREEN END OF BLOCK blk1. SELECTION-SCREEN BEGIN OF BLOCK blk2 WITH FRAME TITLE TEXT-002. PARAMETERS: p_a AS CHECKBOX DEFAULT 'X', p_b AS CHECKBOX DEFAULT 'X', p_c AS CHECKBOX DEFAULT 'X', p_d AS CHECKBOX DEFAULT 'X', p_e AS CHECKBOX DEFAULT 'X', p_f AS CHECKBOX DEFAULT 'X', p_g AS CHECKBOX DEFAULT 'X', p_h AS CHECKBOX DEFAULT 'X', p_i AS CHECKBOX DEFAULT 'X', p_j AS CHECKBOX DEFAULT 'X'. SELECTION-SCREEN END OF BLOCK blk2. *&---------------------------------------------------------------------* *& INITIALIZATION. *&---------------------------------------------------------------------* INITIALIZATION. functxt-icon_id = icon_export. functxt-quickinfo = '模板下载'. functxt-icon_text = '模板下载'. sscrfields-functxt_01 = functxt. *&---------------------------------------------------------------------* *& AT SELECTION-SCREEN OUTPUT *&---------------------------------------------------------------------* AT SELECTION-SCREEN OUTPUT. PERFORM frm_init_screen. *&---------------------------------------------------------------------* *& 选择屏幕控制 *&---------------------------------------------------------------------* AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file. PERFORM frm_select_file. *&---------------------------------------------------------------------* *& AT SELECTION-SCREEN *&---------------------------------------------------------------------* AT SELECTION-SCREEN. IF sy-ucomm = 'FC01'. PERFORM frm_download_template. ENDIF. *&---------------------------------------------------------------------* *& START-OF-SELECTION *&---------------------------------------------------------------------* START-OF-SELECTION. * PERFORM frm_check_screen. PERFORM frm_get_upload. PERFORM frm_init_layout. PERFORM frm_init_fieldcat. PERFORM frm_display_alv. *&---------------------------------------------------------------------* *& END-OF-SELECTION *&---------------------------------------------------------------------* END-OF-SELECTION. *&---------------------------------------------------------------------* *& Form FRM_INIT_SCREEN *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM frm_init_screen . ENDFORM. " FRM_CHECK_SCREEN *&---------------------------------------------------------------------* *& Form FRM_INIT_LAYOUT *&---------------------------------------------------------------------* * 设置ALV输出格式 *----------------------------------------------------------------------* FORM frm_init_layout . CLEAR wa_layout. wa_layout-box_fname = 'ZCHECK'. "侧边栏 wa_layout-zebra = 'X'. "斑马线 wa_layout-cwidth_opt = 'X'. "自动调整宽度 wa_layout-stylefname = 'STYLE'. "样式参数 ENDFORM. "FRM_INIT_LAYOUT *&---------------------------------------------------------------------* *& Form FRM_INIT_FIELDCAT *&---------------------------------------------------------------------* * 设置输出屏幕的ALV输出字段 *----------------------------------------------------------------------* FORM frm_init_fieldcat. DATA: l_colpos TYPE lvc_s_fcat-col_pos VALUE 0. FIELD-SYMBOLS: <fs_fieldcat> TYPE lvc_s_fcat. CLEAR it_fieldcat. macro_fill_fcat: l_colpos 'LIGHT' '' '' '指示灯', l_colpos 'MSG' '' '' '消息', l_colpos 'MTART' 'MARA' 'MTART' '物料类型', l_colpos 'WERKS' 'MARC' 'WERKS' '工厂', l_colpos 'MATNR' 'MARA' 'MATNR' '物料号', l_colpos 'MAKTX' 'MAKT' 'MAKTX' '物料描述', l_colpos 'ZEINR' 'MARA' 'ZEINR' '图号', l_colpos 'MEINS' 'MARA' 'MEINS' '基本计量单位', l_colpos 'MATKL' 'MARA' 'MATKL' '物料组', * l_colpos 'MSTAE' 'MARA' 'MSTAE' '跨工厂物料状态', l_colpos 'BISMT' 'MARA' 'MATNR' '旧物料号', l_colpos 'GROES' 'MARA' 'GROES' '大小量纲', l_colpos 'BRGEW' '' '' '毛重', l_colpos 'NTGEW' '' '' '净重', l_colpos 'GEWEI' 'MARA' 'GEWEI' '重量单位', l_colpos 'NORMT' 'MARA' 'NORMT' '内部订单', l_colpos 'FERTH' 'MARA' 'FERTH' '模穴', l_colpos 'MSBOOKPARTNO' 'MARA' 'MSBOOKPARTNO' '产品系列', l_colpos 'SPRAS' 'MAKT' 'SPRAS' '语言代码', l_colpos 'ZLTXT' '' '' '物料长描述', l_colpos 'KLART' 'KLAH' 'KLART' '分类类型', l_colpos 'CLASS' 'KLAH' 'CLASS' '分类编号', l_colpos 'VKORG' 'MVKE' 'VKORG' '销售组织', l_colpos 'VTWEG' 'MVKE' 'VTWEG' '分销渠道', l_colpos 'SPART' 'MARA' 'SPART' '产品组', * l_colpos 'VRKME' 'MVKE' 'VRKME' '销售单位', * l_colpos 'PMREN' '' '' '销售单位分母', * l_colpos 'PMREZ' '' '' '销售单位分子', l_colpos 'DWERK' 'MVKE' 'DWERK' '交货工厂', l_colpos 'TAXM1' 'MLAN' 'TAXM1' '税分类', l_colpos 'KTGRM' 'MVKE' 'KTGRM' '科目设置组', l_colpos 'MTPOS_MARA' 'MARA' 'MTPOS_MARA' '普通项目类别组', l_colpos 'MTPOS' 'MVKE' 'MTPOS' '项目类别组', l_colpos 'TRAGR' 'MARA' 'TRAGR' '运输组', l_colpos 'LADGR' 'MARC' 'LADGR' '装载组', l_colpos 'ALAND' 'MG03STEUER' 'ALAND' '国家代码', l_colpos 'BSTME' 'MARA' 'BSTME' '采购单位', l_colpos 'PMREN' '' '' '分母', l_colpos 'PMREZ' '' '' '分子', l_colpos 'VABME' 'MARA' 'VABME' '可变单位', l_colpos 'EKGRP' 'MARC' 'EKGRP' '采购组', * l_colpos 'INSMK' 'MARC' 'INSMK' '过账到检验库存', l_colpos 'KORDB' 'MARC' 'KORDB' '标识: 源清单要求', l_colpos 'DISGR' 'MARC' 'DISGR' 'MRP组', * l_colpos 'MAABC' 'MARC' 'MAABC' 'ABC标识', l_colpos 'DISMM' 'MARC' 'DISMM' 'MRP类型', * l_colpos 'MINBE' 'MARC' 'MINBE' '再订货点', l_colpos 'DISPO' 'MARC' 'DISPO' 'MRP控制者', l_colpos 'DISLS' 'MARC' 'DISLS' '批量程序', * l_colpos 'BSTMA' 'MARC' 'BSTMA' '最大批量大小', l_colpos 'BSTMI' 'MARC' 'BSTMI' '最小批量大小', * l_colpos 'BSTFE' 'MARC' 'BSTFE' '固定批量大小', * l_colpos 'MABST' 'MARC' 'MABST' '最大库存水平', l_colpos 'BSTRF' 'MARC' 'BSTRF' '舍入值', l_colpos 'BERID' 'MDMA' 'BERID' 'MRP范围', l_colpos 'AUSSS' 'MARC' 'AUSSS' '装配报废', l_colpos 'BESKZ' 'MARC' 'BESKZ' '采购类型', l_colpos 'SOBSL' 'MARC' 'SOBSL' '特殊采购类型', l_colpos 'RGEKZ' 'MARC' 'RGEKZ' '反冲', l_colpos 'LGPRO' 'MARC' 'LGPRO' '生产仓储地点', l_colpos 'LGFSB' 'MARC' 'LGFSB' '外部采购仓储地点', l_colpos 'PLIFZ' 'MARC' 'PLIFZ' '计划交货时间', l_colpos 'DZEIT' 'MARC' 'DZEIT' '自制生产时间', l_colpos 'WEBAZ' 'MARC' 'WEBAZ' '收货处理时间', * l_colpos 'MRPPP' 'MARC' 'MRPPP' '计划日历', l_colpos 'FHORI' 'MARC' 'FHORI' '计划边际码', l_colpos 'EISBE' 'MARC' 'EISBE' '安全库存', * l_colpos 'STRGR' 'MARC' 'STRGR' '策略组', * l_colpos 'VRMOD' 'MARC' 'VRMOD' '消耗模式', * l_colpos 'VINT1' 'MARC' 'VINT1' '逆向消耗期间', * l_colpos 'VINT2' 'MARC' 'VINT2' '向前消耗期间', * l_colpos 'MISKZ' 'MARC' 'MISKZ' '综合MRP标识', l_colpos 'MTVFP' 'MARC' 'MTVFP' '可用性检查', l_colpos 'SBDKZ' 'MARC' 'SBDKZ' '独立/集中', l_colpos 'KAUSF' 'MARC' 'KAUSF' '部件废品百分数', * l_colpos 'FRTME' 'MARC' 'FRTME' '生产单位', * l_colpos 'PLREN' '' '' '生产单位分母', * l_colpos 'PLREZ' '' '' '生产单位分子', l_colpos 'FEVOR' 'MARC' 'FEVOR' '生产管理员', l_colpos 'SFCPF' 'MARC' 'SFCPF' '生产计划参数文件', * l_colpos 'MATGR' 'MARC' 'MATGR' '物料分组', * l_colpos 'UNETO' 'MARC' 'UNETO' '不足交货容差限制', l_colpos 'UEETO' 'MARC' 'UEETO' '超量交货容差限制', * l_colpos 'UEETK' 'MARC' 'UEETK' '标识:允许未限制的过量交货', * l_colpos 'BEARZ' 'MARC' 'BEARZ' '处理时间', * l_colpos 'BASMG' 'MARC' 'BASMG' '基本数量', l_colpos 'LOGGR' 'MARC' 'LOGGR' '是否启用条码', l_colpos 'LGORT' 'MARD' 'LGORT' '库存地点', l_colpos 'AUSME' 'MARC' 'AUSME' '发货单位', l_colpos 'ISREN' '' '' '发货单位分母', l_colpos 'ISREZ' '' '' '发货单位分子', * l_colpos 'TEMPB' 'MARA' 'TEMPB' 'WMS管理', * l_colpos 'RAUBE' 'MARA' 'RAUBE' 'ROHS', * l_colpos 'BEHVO' 'MARA' 'BEHVO' 'HF标识', l_colpos 'XCHPF' 'MARC' 'XCHPF' '批次管理', * l_colpos 'MAXLZ' 'MARC' 'MAXLZ' '最大存储期间', * l_colpos 'LZEIH' 'MARC' 'LZEIH' '最大库存期间单位', l_colpos 'MHDRZ' 'MARA' 'MHDRZ' '最小剩余货架寿命', l_colpos 'MHDHB' 'MARA' 'MHDHB' '总货架寿命', l_colpos 'IPRKZ' 'MARA' 'IPRKZ' '期间标识', * l_colpos 'BWTTY' 'MBEW' 'BWTTY' '评估类别', * l_colpos 'BWTAR' 'MBEW' 'BWTAR' '评估类型', l_colpos 'BKLAS' 'MBEW' 'BKLAS' '评估分类', l_colpos 'MLMAA' 'MBEW' 'MLMAA' 'ML作业', l_colpos 'MLAST' 'MBEW' 'MLAST' '价格确定', l_colpos 'STPRS' 'MBEW' 'STPRS' '标准价格', l_colpos 'PEINH' 'MBEW' 'PEINH' '价格单位', l_colpos 'VPRSV' 'MBEW' 'VPRSV' '价格控制', l_colpos 'EKALR' 'MBEW' 'EKALR' '用QS的成本估算', l_colpos 'HKMAT' 'MBEW' 'HKMAT' '物料来源', l_colpos 'HRKFT' 'MBEW' 'HRKFT' '原始组', l_colpos 'KOSGR' 'MBEW' 'KOSGR' '间接费分组', * l_colpos 'AWSLS' 'MARC' 'AWSLS' '差异码', l_colpos 'PRCTR' 'MARC' 'PRCTR' '利润中心', l_colpos 'LOSGR' 'MARC' 'LOSGR' '成本核算批量', l_colpos 'MMSTD' 'MARC' 'MMSTD' '起始日期', l_colpos 'MMSTA' 'MARC' 'MMSTA' '工厂特定物料状态', l_colpos 'VMSTA' 'MVKE' 'VMSTA' '分销链特定的物料状态', l_colpos 'VMSTD' 'MVKE' 'VMSTD' '分销链状态的有效起始日期', l_colpos 'NCOST' 'MARC' 'NCOST' '不计算成本', l_colpos 'SOBSK' 'MARC' 'SOBSK' '特殊采购成本核算', * l_colpos 'KZKUP' 'MARC' 'KZKUP' '联产品', * l_colpos 'FXPRU' 'MARC' 'FXPRU' '固定价格', l_colpos 'ZPLP1' 'MBEW' 'ZPLP1' '计划价格1', l_colpos 'ZPLD1' 'MBEW' 'ZPLD1' '计划价格日期1', l_colpos 'ART' '' '' '检验类型', l_colpos 'APA' 'QMAT' 'APA' '首选检验', l_colpos 'AKTIV' 'QMAT' 'AKTIV' '活动', l_colpos 'QMPUR' 'MARA' 'QMPUR' 'QM采购激活', l_colpos 'SSQSS' 'MARC' 'SSQSS' 'QM控制码', l_colpos 'PRFRQ' 'MARC' 'PRFRQ' '检验间隔', l_colpos 'LGNUM' 'MLGT' 'LGNUM' '仓库号', l_colpos 'LGTYP' 'MLGT' 'LGTYP' '存储类型', l_colpos 'LGPLA' 'MLGT' 'LGPLA' '仓位', l_colpos 'LTKZA' 'MLGN' 'LTKZA' '库存出库', l_colpos 'LTZKE' 'MLGN' 'LTZKE' '上架', l_colpos 'LGBKZ' 'MLGN' 'LGBKZ' '仓储区标识', l_colpos 'PLKPT' 'MLGN' 'PLKPT' '领货存储类型'. ENDFORM. "FRM_INIT_FIELDCAT *&---------------------------------------------------------------------* *& Form frm_display_alv *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM frm_display_alv. DATA: gs_grid_settings TYPE lvc_s_glay. * SORT it_alv BY vbeln posnr. gs_grid_settings-edt_cll_cb = 'X'. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC' EXPORTING i_callback_program = sy-repid i_callback_pf_status_set = 'SET_PF_STATUS' i_grid_settings = gs_grid_settings i_callback_user_command = 'USER_COMMAND' is_layout_lvc = wa_layout * IS_VARIANT = GS_VARIANT it_fieldcat_lvc = it_fieldcat i_save = 'A' TABLES t_outtab = lt_alv 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. ENDFORM. "FRM_ALV_OUTPUT *&---------------------------------------------------------------------* *& Form SET_PF_STATUS *&---------------------------------------------------------------------* * 设置标准工具栏按钮,并添加一个打印按钮 *----------------------------------------------------------------------* * -->RT_EXTAB text *----------------------------------------------------------------------* FORM set_pf_status USING rt_extab TYPE slis_t_extab. DATA: rs_extab LIKE LINE OF rt_extab. gv_line = lines( lt_alv ). SET PF-STATUS 'STATUS' EXCLUDING rt_extab. SET TITLEBAR 'TITLE' WITH gv_line. ENDFORM. "SET_PF_STATUS *&---------------------------------------------------------------------* *& Form USER_COMMAND *&---------------------------------------------------------------------* * 用户指令 *----------------------------------------------------------------------* * -->RT_EXTAB text *----------------------------------------------------------------------* FORM user_command USING r_ucomm LIKE sy-ucomm rs_selfield TYPE slis_selfield. CASE r_ucomm. WHEN '&ZPOST'. PERFORM frm_post_data. WHEN OTHERS. ENDCASE. PERFORM frm_refresh_display. ENDFORM. "FM_USER_COMMAND *&---------------------------------------------------------------------* *& Form FRM_DOWNLOAD_TEMPLATE *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM frm_download_template . DATA: lo_objdata LIKE wwwdatatab, lo_mime LIKE w3mime, lc_filename TYPE string, lc_fullpath TYPE string VALUE'c:\', lc_path TYPE string VALUE'c:\', ls_destination LIKE rlgrap-filename, ls_objnam TYPE string, l_rc LIKE sy-subrc, ls_errtxt TYPE string, lv_title TYPE string. DATA:l_objid TYPE wwwdatatab-objid, l_dest LIKE sapb-sappfad. " 对象名称 l_objid = 'ZMMU001'. lc_filename = '物料主数据批导模板'. lv_title = '物料主数据批导模板'. CALL METHOD cl_gui_frontend_services=>file_save_dialog EXPORTING window_title = lv_title default_extension = 'xlsx' default_file_name = lc_filename * WITH_ENCODING = * FILE_FILTER = * INITIAL_DIRECTORY = * PROMPT_ON_OVERWRITE = 'X' CHANGING filename = lc_filename path = lc_path fullpath = lc_fullpath * USER_ACTION = * FILE_ENCODING = EXCEPTIONS cntl_error = 0 error_no_gui = 0 not_supported_by_gui = 0 OTHERS = 0. IF sy-subrc = 0. l_dest = lc_fullpath. SELECT SINGLE relid objid FROM wwwdata INTO CORRESPONDING FIELDS OF lo_objdata WHERE srtf2 = 0 AND relid = 'MI' AND objid = l_objid. IF sy-subrc <> 0 OR lo_objdata-objid IS INITIAL. * 请输入有效值: &1 MESSAGE e004(zca) WITH l_objid. ENDIF. ls_destination = l_dest. CALL FUNCTION 'DOWNLOAD_WEB_OBJECT' EXPORTING key = lo_objdata destination = ls_destination IMPORTING rc = l_rc. IF l_rc <> 0. * 下载模板失败! MESSAGE e005(zca). ENDIF. ENDIF. ENDFORM. " FRM_DOWNLOAD_TEMPLATE *&---------------------------------------------------------------------* *& Form FRM_SELECT_FILE *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM frm_select_file . * 定义局部变量 DATA: l_filetab TYPE filetable, l_waftab LIKE LINE OF l_filetab, l_rc TYPE i, lv_title TYPE string. lv_title = TEXT-003. * 调用类方法,打开文件 CALL METHOD cl_gui_frontend_services=>file_open_dialog EXPORTING window_title = lv_title * DEFAULT_EXTENSION = * DEFAULT_FILENAME = * FILE_FILTER = * WITH_ENCODING = initial_directory = 'C:/' * MULTISELECTION = CHANGING file_table = l_filetab rc = l_rc * USER_ACTION = * FILE_ENCODING = EXCEPTIONS file_open_dialog_failed = 1 cntl_error = 2 error_no_gui = 3 not_supported_by_gui = 4 OTHERS = 5. IF sy-subrc <> 0. EXIT. ENDIF. * 打开文件成功 READ TABLE l_filetab INTO l_waftab INDEX 1. p_file = l_waftab-filename. CLEAR: l_filetab, l_waftab. ENDFORM. "frm_select_file *&---------------------------------------------------------------------* *& Form FRM_GET_UPLOAD *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM frm_get_upload . DATA: lt_intern TYPE TABLE OF zalsmex_tabline, ls_intern TYPE zalsmex_tabline. FIELD-SYMBOLS <fs> TYPE any . CALL FUNCTION 'ZALSM_EXCEL_TO_INTERNAL_TABLE' EXPORTING filename = p_file i_begin_col = 1 i_begin_row = 6 i_end_col = 200 i_end_row = 65000 TABLES intern = lt_intern EXCEPTIONS inconsistent_parameters = 1 upload_ole = 2 OTHERS = 3. IF sy-subrc = 0. LOOP AT lt_intern INTO ls_intern. ASSIGN COMPONENT ls_intern-col OF STRUCTURE ls_alv TO <fs>. IF <fs> IS ASSIGNED. <fs> = ls_intern-value. ENDIF. AT END OF row. APPEND ls_alv TO lt_alv. CLEAR ls_alv. ENDAT. ENDLOOP. ENDIF. IF lt_alv IS INITIAL. * 未解析到数据,请关闭EXCEL后重试! MESSAGE s006(zca) DISPLAY LIKE 'E'. STOP. ELSE. * 前导零补充与内外转换 LOOP AT lt_alv ASSIGNING <fs_alv>. CONDENSE <fs_alv>-matnr NO-GAPS. PERFORM frm_matn1_input(zpub_f01) IF FOUND CHANGING <fs_alv>-matnr. PERFORM frm_matn1_input(zpub_f01) IF FOUND CHANGING <fs_alv>-msbookpartno. PERFORM frm_cunit_input(zpub_f01) IF FOUND CHANGING <fs_alv>-meins. PERFORM frm_cunit_input(zpub_f01) IF FOUND CHANGING <fs_alv>-gewei. * PERFORM frm_cunit_input(zpub_f01) IF FOUND CHANGING <fs_alv>-vrkme. PERFORM frm_cunit_input(zpub_f01) IF FOUND CHANGING <fs_alv>-bstme. * PERFORM frm_cunit_input(zpub_f01) IF FOUND CHANGING <fs_alv>-frtme. PERFORM frm_cunit_input(zpub_f01) IF FOUND CHANGING <fs_alv>-ausme. PERFORM frm_alpha_input(zpub_f01) IF FOUND CHANGING <fs_alv>-prctr. * PERFORM frm_cunit_input(zpub_f01) IF FOUND CHANGING <fs_alv>-lzeih. PERFORM frm_perkz_input(zpub_f01) IF FOUND CHANGING <fs_alv>-iprkz. * PERFORM frm_cunit_input(zpub_f01) IF FOUND CHANGING <fs_alv>-zdldw. CALL FUNCTION 'CONVERSION_EXIT_ISOLA_INPUT' EXPORTING input = <fs_alv>-zspras IMPORTING output = <fs_alv>-spras EXCEPTIONS unknown_language = 1 OTHERS = 2. ENDLOOP. ENDIF. PERFORM frm_check_input. ENDFORM. " FRM_GET_UPLOAD *&---------------------------------------------------------------------* *& Form FRM_CHECK_DATA *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM frm_check_input. SELECT matnr, mtart INTO TABLE @DATA(lt_mara) FROM mara FOR ALL ENTRIES IN @lt_alv WHERE matnr = @lt_alv-matnr. SORT lt_mara BY matnr. SELECT DISTINCT werks, matnr INTO TABLE @DATA(lt_mseg) FROM mseg FOR ALL ENTRIES IN @lt_alv WHERE matnr = @lt_alv-matnr. SORT lt_mseg BY werks matnr. LOOP AT lt_alv ASSIGNING <fs_alv>. CONDENSE: <fs_alv>-brgew, <fs_alv>-ntgew, * <fs_alv>-umren, * <fs_alv>-umrez, * <fs_alv>-bstma, <fs_alv>-bstmi, * <fs_alv>-bstfe, * <fs_alv>-mabst, <fs_alv>-bstrf, <fs_alv>-ausss, * <fs_alv>-vint2, * <fs_alv>-vint1, * <fs_alv>-uneto, <fs_alv>-ueeto, * <fs_alv>-maxlz, <fs_alv>-mhdrz, <fs_alv>-mhdhb, <fs_alv>-plifz, <fs_alv>-dzeit, <fs_alv>-webaz, <fs_alv>-eisbe, <fs_alv>-losgr, <fs_alv>-zplp1, <fs_alv>-prfrq. * <fs_alv>-zdren, * <fs_alv>-zdrez. READ TABLE lt_mara INTO DATA(ls_mara) WITH KEY matnr = <fs_alv>-matnr BINARY SEARCH. IF sy-subrc = 0. <fs_alv>-mtart = ls_mara-mtart. <fs_alv>-light = c_icon_yellow. <fs_alv>-msg = '物料已经存在,如果确认确实需要导入,再点击“过账”'. ENDIF. READ TABLE lt_mseg INTO DATA(ls_mseg) WITH KEY werks = <fs_alv>-werks matnr = <fs_alv>-matnr BINARY SEARCH. IF sy-subrc = 0 AND <fs_alv>-xchpf IS NOT INITIAL. <fs_alv>-light = c_icon_red. <fs_alv>-msg = '已进行货物移动,不允许更改批次管理'. CONTINUE. ENDIF. IF <fs_alv>-mtart = 'Z004' AND p_j IS NOT INITIAL. <fs_alv>-light = c_icon_red. <fs_alv>-msg = '物料类型Z004,不允许导入检验数据'. CONTINUE. ENDIF. IF <fs_alv>-prctr IS INITIAL AND p_g IS NOT INITIAL. <fs_alv>-light = c_icon_red. <fs_alv>-msg = '扩充财务视图,利润中心必填'. CONTINUE. ENDIF. ENDLOOP. ENDFORM. " FRM_CHECK_DATA *&---------------------------------------------------------------------* *& Form FRM_REFRESH_DISPLAY *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM frm_refresh_display . DATA: lr_grid TYPE REF TO cl_gui_alv_grid. DATA: stbl TYPE lvc_s_stbl. "稳定刷新 stbl-row = 'X'." 基于行的稳定刷新 stbl-col = 'X'." 基于列稳定刷新 CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR' IMPORTING e_grid = lr_grid. CALL METHOD lr_grid->check_changed_data. * RS_SELFIELD-REFRESH = 'X'. "自动刷新,当使用稳定刷新后就不能使用自动刷新了 * 使用排序、过滤器等,定位在当前行、列 CALL METHOD lr_grid->refresh_table_display EXPORTING is_stable = stbl i_soft_refresh = 'X' EXCEPTIONS finished = 1 OTHERS = 2. ENDFORM. " FRM_REFRESH_DISPLAY *&---------------------------------------------------------------------* *& Form FRM_POST_DATA *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM frm_post_data. TYPES: BEGIN OF ty_matnr, ztywl TYPE char10, matnr TYPE mara-matnr, END OF ty_matnr. DATA: ls_matnr TYPE ty_matnr, lt_matnr TYPE TABLE OF ty_matnr. DATA: lt_number LIKE TABLE OF bapimatinr, ls_number LIKE LINE OF lt_number, lv_msg TYPE string, lv_index TYPE i. DATA: ls_te_mara TYPE bapi_te_mara, ls_te_marax TYPE bapi_te_marax. READ TABLE lt_alv TRANSPORTING NO FIELDS WITH KEY light = c_icon_red. IF sy-subrc = 0. * 请先处理报错数据! MESSAGE i007(zca). RETURN. ENDIF. * BREAK jt-wuw. LOOP AT lt_alv ASSIGNING <fs_alv> WHERE zmask = abap_false. ADD 1 TO lv_index. lv_msg = '导入中...' && lv_index && '/' && gv_line. PERFORM frm_show_process(zpub_f01) IF FOUND USING 0 lv_msg. * 视图选择 IF p_a = 'X'. ls_headdata-basic_view = 'X'."基本数据视图 ENDIF. IF p_b = 'X'. ls_headdata-sales_view = 'X'."销售视图 ENDIF. IF p_c = 'X' . ls_headdata-purchase_view = 'X'."采购视图 ENDIF. IF p_d = 'X'. ls_headdata-mrp_view = 'X'."MRP视图 ENDIF. IF p_e = 'X' . ls_headdata-work_sched_view = 'X'."工作计划视图 ENDIF. IF p_f = 'X'. ls_headdata-warehouse_view = 'X'."仓库管理视图 ENDIF. IF p_g = 'X'. ls_headdata-account_view = 'X'."会计 ls_headdata-cost_view = 'X'."成本 ENDIF. IF p_h = 'X'. ls_headdata-storage_view = 'X'. "工厂、存储视图 ENDIF. IF p_j = 'X'. ls_headdata-quality_view = 'X'. "质量管理视图 ENDIF. ls_headdata-ind_sector = 'M'. "行业领域 ls_headdata-matl_type = <fs_alv>-mtart. "物料类型 * IF <fs_alv>-matnr IS INITIAL. * * READ TABLE lt_matnr INTO ls_matnr WITH KEY ztywl = <fs_alv>-ztywl. * IF sy-subrc = 0. * <fs_alv>-matnr = ls_matnr-matnr. * ELSE. * CLEAR: lt_number[]. * CALL FUNCTION 'BAPI_MATERIAL_GETINTNUMBER' * EXPORTING * material_type = <fs_alv>-mtart * required_numbers = 1 * TABLES * material_number = lt_number. * * READ TABLE lt_number INTO ls_number INDEX 1. * IF sy-subrc = 0. * CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'. * * <fs_alv>-matnr = ls_number-material. * ls_matnr-ztywl = <fs_alv>-ztywl. * ls_matnr-matnr = <fs_alv>-matnr. * APPEND ls_matnr TO lt_matnr. * ENDIF. * ENDIF. * ENDIF. ls_headdata-material = <fs_alv>-matnr. ls_headdata-material_long = <fs_alv>-matnr. * 基础视图 IF p_a IS NOT INITIAL. IF <fs_alv>-maktx IS NOT INITIAL . lt_makt-langu = <fs_alv>-spras. lt_makt-matl_desc = <fs_alv>-maktx. APPEND lt_makt. ENDIF. gv_field1 = 'LS_MARA'. macro_fill_bapi: <fs_alv>-meins 'BASE_UOM' , "单位 <fs_alv>-matkl 'MATL_GROUP', "物料组 <fs_alv>-bismt 'OLD_MAT_NO_LONG', "旧物料号 * <fs_alv>-extwg 'EXTMATLGRP', "外部物料组 * <fs_alv>-prdha 'PROD_HIER', "销售产品线 * <fs_alv>-mstae 'PUR_STATUS', "跨工厂物料状态 <fs_alv>-zeinr 'DOCUMENT', "图号 <fs_alv>-groes 'SIZE_DIM', "大小量纲 <fs_alv>-ferth 'PROD_MEMO', "模穴 <fs_alv>-normt 'STD_DESCR', "内部订单 * <fs_alv>-formt 'PAGEFORMAT', "最小倍数MOQ <fs_alv>-zeinr 'DOCUMENT', "图号 <fs_alv>-ntgew 'NET_WEIGHT', "净重 <fs_alv>-gewei 'UNIT_OF_WT'. "重量单位 * <fs_alv>-brgew '' ENDIF. ls_marc-plant = <fs_alv>-werks. ls_marcx-plant = <fs_alv>-werks. * 销售视图 IF p_b IS NOT INITIAL. ls_mvke-sales_org = <fs_alv>-vkorg. ls_mvke-distr_chan = <fs_alv>-vtweg. ls_mvkex-sales_org = <fs_alv>-vkorg. ls_mvkex-distr_chan = <fs_alv>-vtweg. gv_field1 = 'LS_MVKE'. macro_fill_bapi: * <fs_alv>-vrkme 'SALES_UNIT', "销售单位 <fs_alv>-dwerk 'DELYG_PLNT', "交货工厂 <fs_alv>-ktgrm 'ACCT_ASSGT', "科目设置组 <fs_alv>-mtpos 'ITEM_CAT', "项目类别 <fs_alv>-vmsta 'SAL_STATUS', "分销链特定的物料状态 <fs_alv>-vmstd 'VALID_FROM'. "分销链状态的有效起始日期 gv_field1 = 'LS_MARA'. macro_fill_bapi: <fs_alv>-spart 'DIVISION', "产品组 <fs_alv>-mtpos_mara 'ITEM_CAT', "普通项目类别组 <fs_alv>-tragr 'TRANS_GRP'. "运输组 gv_field1 = 'LS_MARC'. macro_fill_bapi: <fs_alv>-ladgr 'LOADINGGRP', "装载组 <fs_alv>-mtvfp 'AVAILCHECK'. "可用性检查 * IF <fs_alv>-vrkme IS NOT INITIAL. * READ TABLE lt_marm WITH KEY alt_unit = <fs_alv>-vrkme. * IF sy-subrc <> 0. * lt_marm-alt_unit = <fs_alv>-vrkme. * lt_marm-numerator = <fs_alv>-umrez. * lt_marm-denominatr = <fs_alv>-umren. * APPEND lt_marm. * * lt_marmx-alt_unit = <fs_alv>-vrkme. * lt_marmx-numerator = abap_true. * lt_marmx-denominatr = abap_true. * APPEND lt_marmx. * ENDIF. * ENDIF. lt_mlan-depcountry = <fs_alv>-aland. "国家 lt_mlan-tax_type_1 = 'MWST'. "税 lt_mlan-taxclass_1 = <fs_alv>-taxm1. "税分类 APPEND lt_mlan. ENDIF. * 采购视图 IF p_c IS NOT INITIAL. gv_field1 = 'LS_MARA'. macro_fill_bapi: <fs_alv>-bstme 'PO_UNIT', "采购单位 <fs_alv>-vabme 'VAR_ORD_UN'. "可变单位 IF <fs_alv>-bstme IS NOT INITIAL. READ TABLE lt_marm WITH KEY alt_unit = <fs_alv>-bstme. IF sy-subrc <> 0. lt_marm-alt_unit = <fs_alv>-bstme. lt_marm-numerator = <fs_alv>-pmrez. lt_marm-denominatr = <fs_alv>-pmren. APPEND lt_marm. lt_marmx-alt_unit = <fs_alv>-bstme. lt_marmx-numerator = abap_true. lt_marmx-denominatr = abap_true. APPEND lt_marmx. ENDIF. ENDIF. gv_field1 = 'LS_MARC'. macro_fill_bapi: <fs_alv>-ekgrp 'PUR_GROUP', "采购组 * <fs_alv>-insmk 'IND_POST_TO_INSP_STOCK', "过账到检验库存 <fs_alv>-kordb 'SOURCELIST'. "启用货源清单 ENDIF. * MRP视图 IF p_d IS NOT INITIAL. gv_field1 = 'LS_MARC'. macro_fill_bapi: <fs_alv>-disgr 'MRP_GROUP', "MRP组 * <fs_alv>-maabc 'ABC_ID', "ABC标识 <fs_alv>-dismm 'MRP_TYPE', "MRP类型 * <fs_alv>-minbe 'REORDER_PT', "再订货点 <fs_alv>-dispo 'MRP_CTRLER', "MRP控制者 <fs_alv>-disls 'LOTSIZEKEY', "批量程序 * <fs_alv>-bstma 'MAXLOTSIZE', "最大批量 <fs_alv>-bstmi 'MINLOTSIZE', "最小批量 * <fs_alv>-bstfe 'FIXED_LOT', "固定批量 * <fs_alv>-mabst 'MAX_STOCK', "最大库存 <fs_alv>-bstrf 'ROUND_VAL', "舍入值 <fs_alv>-ausss 'ASSY_SCRAP', "装配报废 <fs_alv>-beskz 'PROC_TYPE', "采购类型 <fs_alv>-sobsl 'SPPROCTYPE', "特殊采购类 <fs_alv>-rgekz 'BACKFLUSH', "反冲 <fs_alv>-lgpro 'ISS_ST_LOC', "生产仓储地点 <fs_alv>-lgfsb 'SLOC_EXPRC', "外部采购仓储地点 <fs_alv>-plifz 'PLND_DELRY', "计划交货时间 <fs_alv>-dzeit 'INHSEPRODT', "自制生产时间 <fs_alv>-webaz 'GR_PR_TIME', "收货处理时间 * <fs_alv>-mrppp 'PPC_PL_CAL', "计划日历 <fs_alv>-fhori 'SM_KEY', "计划边际码 <fs_alv>-eisbe 'SAFETY_STK', "安全库存 * <fs_alv>-strgr 'PLAN_STRGP', "策略组 * <fs_alv>-vrmod 'CONSUMMODE', "消耗模式 * <fs_alv>-vint2 'FWD_CONS', "向前消耗区间 * <fs_alv>-vint1 'BWD_CONS', "逆向消耗区间 * <fs_alv>-miskz 'MIXED_MRP', "综合MRP <fs_alv>-mtvfp 'AVAILCHECK', "可用性检查 <fs_alv>-sbdkz 'DEP_REQ_ID', "独立/集中 <fs_alv>-kausf 'COMP_SCRAP'. "部件废品百分率 ENDIF. * 工作计划视图 IF p_e IS NOT INITIAL. gv_field1 = 'LS_MARC'. macro_fill_bapi: * <fs_alv>-frtme 'PROD_UNIT', "生产单位 <fs_alv>-fevor 'PRODUCTION_SCHEDULER', "生产管理员 <fs_alv>-sfcpf 'PRODPROF', "生产计划参数文件 * <fs_alv>-matgr 'MAT_GRP_TRANS', "物料分组 * <fs_alv>-uneto 'UNDER_TOL', "不足交货允差 <fs_alv>-ueeto 'OVER_TOL'. "过量交货允差 * <fs_alv>-ueetk 'UNLIMITED', "允许过量交货 * <fs_alv>-bearz 'PROC_TIME', "处理时间 * <fs_alv>-basmg 'BASE_QTY'. "基本数量 * IF <fs_alv>-frtme IS NOT INITIAL. * READ TABLE lt_marm WITH KEY alt_unit = <fs_alv>-frtme. * IF sy-subrc <> 0. * lt_marm-alt_unit = <fs_alv>-frtme. * lt_marm-numerator = <fs_alv>-plren. * lt_marm-denominatr = <fs_alv>-plrez. * APPEND lt_marm. * * lt_marmx-alt_unit = <fs_alv>-frtme. * lt_marmx-numerator = abap_true. * lt_marmx-denominatr = abap_true. * APPEND lt_marmx. * ENDIF. * ENDIF. ENDIF. * 工厂数据/存储视图 IF p_h IS NOT INITIAL. IF <fs_alv>-lgort IS NOT INITIAL. ls_mard-plant = <fs_alv>-werks. "工厂 ls_mard-stge_loc = <fs_alv>-lgort. "库存地点 ls_mardx-plant = <fs_alv>-werks. ls_mardx-stge_loc = <fs_alv>-lgort. ENDIF. gv_field1 = 'LS_MARC'. macro_fill_bapi: <fs_alv>-ausme 'ISSUE_UNIT', "生产单位 <fs_alv>-xchpf 'BATCH_MGMT', "批次管理 * <fs_alv>-maxlz 'STGEPERIOD', "最大存储期间 * <fs_alv>-lzeih 'STGE_PD_UN', "最大存储期间时间单位 <fs_alv>-loggr 'HANDLG_GRP'. "是否启用条码 gv_field1 = 'LS_MARA'. macro_fill_bapi: <fs_alv>-xchpf 'BATCH_MGMT', "批次管理 * <fs_alv>-tempb 'TEMP_CONDS', "WMS管理 * <fs_alv>-raube 'STOR_CONDS', "ROHS * <fs_alv>-behvo 'CONTAINER', "HF标识 <fs_alv>-mhdrz 'MINREMLIFE', "最小剩余货架寿命 <fs_alv>-mhdhb 'SHELF_LIFE', "总货架寿命 <fs_alv>-iprkz 'PERIOD_IND_EXPIRATION_DATE'. "期间标识 IF <fs_alv>-ausme IS NOT INITIAL. READ TABLE lt_marm WITH KEY alt_unit = <fs_alv>-ausme. IF sy-subrc <> 0. lt_marm-alt_unit = <fs_alv>-ausme. lt_marm-numerator = <fs_alv>-isren. lt_marm-denominatr = <fs_alv>-isrez. APPEND lt_marm. lt_marmx-alt_unit = <fs_alv>-ausme. lt_marmx-numerator = abap_true. lt_marmx-denominatr = abap_true. APPEND lt_marmx. ENDIF. ENDIF. ENDIF. * 会计/成本视图 IF p_g IS NOT INITIAL. ls_mbew-val_area = <fs_alv>-werks. * ls_mbew-val_type = <fs_alv>-bwtar. ls_mbewx-val_area = <fs_alv>-werks. * ls_mbewx-val_type = <fs_alv>-bwtar. gv_field1 = 'LS_MBEW'. macro_fill_bapi: * <fs_alv>-bwtty 'VAL_CAT', "评估类别 * <fs_alv>-bwtar 'VAL_TYPE', "评估类型 <fs_alv>-bklas 'VAL_CLASS', "评估类 <fs_alv>-mlmaa 'ML_ACTIVE', "ML作业 <fs_alv>-mlast 'ML_SETTLE', "价格确定 <fs_alv>-stprs 'STD_PRICE', "标准价格 <fs_alv>-peinh 'PRICE_UNIT', "价格单位 <fs_alv>-vprsv 'PRICE_CTRL', "价格控制 <fs_alv>-ekalr 'QTY_STRUCT', "用QS的成本估算 <fs_alv>-hkmat 'ORIG_MAT', "物料来源 <fs_alv>-hrkft 'ORIG_GROUP', "原始组 <fs_alv>-kosgr 'OVERHEAD_GRP', "间接费分组 <fs_alv>-zplp1 'PLNDPRICE1', "计划价格1 <fs_alv>-zpld1 'PLNDPRDATE1'. "计划价格生效日期 gv_field1 = 'LS_MARC'. macro_fill_bapi: * <fs_alv>-awsls 'VARIANCE_KEY', "差异码 <fs_alv>-prctr 'PROFIT_CTR', "利润中心 <fs_alv>-losgr 'LOT_SIZE', "成本核算批量 <fs_alv>-mmstd 'PVALIDFROM', "起始日期 <fs_alv>-mmsta 'PUR_STATUS', "工厂特定物料状态 <fs_alv>-ncost 'NO_COSTING', "无成本核算 <fs_alv>-sobsk 'SPECPROCTY'. "特殊采购成本核算 * <fs_alv>-kzkup 'CO_PRODUCT', "联产品 * <fs_alv>-fxpru 'FXD_PRICE'. "固定价格 ENDIF. * 质检视图 IF p_j IS NOT INITIAL. gv_field1 = 'LS_MARA'. macro_fill_bapi: <fs_alv>-qmpur 'QM_PROCMNT'. "QM采购激活 gv_field1 = 'LS_MARC'. macro_fill_bapi: <fs_alv>-ssqss 'CTRL_KEY', "QM控制码 <fs_alv>-prfrq 'INSP_INT'. "检验间隔 ENDIF. * 仓库视图 IF p_f IS NOT INITIAL. ls_mlgt-whse_no = <fs_alv>-lgnum. "仓库号 ls_mlgt-stge_type = <fs_alv>-lgtyp. "仓储类型 ls_mlgtx-whse_no = <fs_alv>-lgnum. ls_mlgtx-stge_type = <fs_alv>-lgtyp. gv_field1 = 'LS_MLGT'. macro_fill_bapi: <fs_alv>-lgpla 'STGE_BIN'. "仓位 ls_mlgn-whse_no = <fs_alv>-lgnum. ls_mlgnx-whse_no = <fs_alv>-lgnum. gv_field1 = 'LS_MLGN'. macro_fill_bapi: <fs_alv>-ltkza 'WITHDRAWAL', "库存出库 <fs_alv>-ltkze 'PLACEMENT', "上架 <fs_alv>-lgbkz 'STGESECTOR', "存储区标识 <fs_alv>-plkpt 'STGE_TYPE'. "领货存储类型 ENDIF. IF p_a IS NOT INITIAL. * 增强字段 IF <fs_alv>-brgew IS NOT INITIAL. ls_te_mara-material = <fs_alv>-matnr. ls_te_mara-brgew = <fs_alv>-brgew. ls_te_marax-material = <fs_alv>-matnr. ls_te_marax-brgew = abap_true. ENDIF. IF <fs_alv>-msbookpartno IS NOT INITIAL. ls_te_mara-material = <fs_alv>-matnr. ls_te_mara-msbookpartno = <fs_alv>-msbookpartno. ls_te_marax-material = <fs_alv>-matnr. ls_te_marax-msbookpartno = abap_true. ENDIF. IF <fs_alv>-brgew IS NOT INITIAL OR <fs_alv>-msbookpartno IS NOT INITIAL. lt_extensionin-structure = 'BAPI_TE_MARA'. lt_extensionin-valuepart1 = ls_te_mara. APPEND lt_extensionin. CLEAR lt_extensionin. lt_extensioninx-structure = 'BAPI_TE_MARAX'. lt_extensioninx-valuepart1 = ls_te_marax. APPEND lt_extensioninx. CLEAR lt_extensioninx. ENDIF. ENDIF. * BREAK JT-WUW. CALL FUNCTION 'BAPI_MATERIAL_SAVEDATA' EXPORTING headdata = ls_headdata clientdata = ls_mara clientdatax = ls_marax plantdata = ls_marc plantdatax = ls_marcx storagelocationdata = ls_mard storagelocationdatax = ls_mardx valuationdata = ls_mbew valuationdatax = ls_mbewx warehousenumberdata = ls_mlgn warehousenumberdatax = ls_mlgnx salesdata = ls_mvke salesdatax = ls_mvkex storagetypedata = ls_mlgt storagetypedatax = ls_mlgtx IMPORTING return = ls_return TABLES materialdescription = lt_makt unitsofmeasure = lt_marm unitsofmeasurex = lt_marmx * MATERIALLONGTEXT = LT_MLTX taxclassifications = lt_mlan returnmessages = lt_returnmessages extensionin = lt_extensionin extensioninx = lt_extensioninx. IF ls_return-id = 'MM' AND ls_return-number = '356'. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = abap_true. <fs_alv>-light = c_icon_green. <fs_alv>-msg = ls_return-message. ELSE. CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. LOOP AT lt_returnmessages INTO DATA(ls_returnmessages) WHERE type = 'E'. <fs_alv>-light = c_icon_red. <fs_alv>-msg = ls_return-message. ENDLOOP. RETURN. ENDIF. IF <fs_alv>-light = c_icon_green. DO 20 TIMES. SELECT COUNT(*) FROM mara WHERE matnr = <fs_alv>-matnr. IF sy-subrc = 0. IF <fs_alv>-class IS NOT INITIAL AND p_i IS NOT INITIAL. "分类视图 PERFORM frm_objcl_create. ENDIF. PERFORM frm_update_mara. * 质量视图 IF <fs_alv>-art IS NOT INITIAL AND p_j IS NOT INITIAL. PERFORM frm_insptype_create. ENDIF. * 存长文本 IF <fs_alv>-zltxt IS NOT INITIAL. DATA: lv_name TYPE thead-tdname, lv_langu TYPE makt-spras. EXPORT lv_langu TO MEMORY ID 'ZMM_LANGU'. lv_name = <fs_alv>-matnr. PERFORM frm_save_text(zpub_f01) IF FOUND USING 'GRUN' lv_name 'MATERIAL' space <fs_alv>-zltxt. ENDIF. * 创建MRP范围 IF <fs_alv>-berid IS NOT INITIAL. PERFORM frm_create_mrp. ENDIF. * MR21创建集团价格 IF <fs_alv>-peinh > 1. PERFORM frm_create_mr21. ENDIF. EXIT. ELSE. WAIT UP TO '0.1' SECONDS. ENDIF. ENDDO. ENDIF. CLEAR: ls_headdata, ls_mara, ls_marax, ls_marc, ls_marcx, ls_mard, ls_mardx, ls_mbew, ls_mbewx, ls_mvke, ls_mvkex, ls_return, lt_makt[], lt_marm[], lt_marmx[], lt_mlan[], lt_returnmessages, lt_extensionin[], lt_extensioninx[], ls_mlgn, ls_mlgnx, ls_mlgt, ls_mlgtx, ls_te_mara, ls_te_marax. IF <fs_alv>-light = c_icon_red. RETURN. ENDIF. ENDLOOP. ENDFORM. " FRM_POST_DATA *&---------------------------------------------------------------------* *& Form frm_objcl_create *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* *& --> p1 text *& <-- p2 text *&---------------------------------------------------------------------* FORM frm_objcl_create. DATA : ls_return TYPE bapireturn1, lt_return TYPE TABLE OF bapiret2, wa_return TYPE bapiret2, lv_objectkey TYPE objnum, lt_class TYPE TABLE OF bapi1003_alloc_values_char, wa_class TYPE bapi1003_alloc_values_char, lv_line TYPE i, allocvaluesnum TYPE TABLE OF bapi1003_alloc_values_num, allocvaluescurr TYPE TABLE OF bapi1003_alloc_values_curr. lv_objectkey = <fs_alv>-matnr. CALL FUNCTION 'BAPI_OBJCL_EXISTENCECHECK' EXPORTING objectkey = lv_objectkey objecttable = 'MARA' classnum = <fs_alv>-class classtype = <fs_alv>-klart TABLES return = lt_return. READ TABLE lt_return INTO wa_return INDEX 1 . IF wa_return-type EQ 'S'. CALL FUNCTION 'BAPI_OBJCL_CHANGE' EXPORTING objectkey = lv_objectkey objecttable = 'MARA' classnum = <fs_alv>-class classtype = <fs_alv>-klart standardclass = 'X' TABLES allocvaluesnumnew = allocvaluesnum allocvaluescharnew = lt_class allocvaluescurrnew = allocvaluescurr return = lt_return. ELSE . CALL FUNCTION 'BAPI_OBJCL_CREATE' EXPORTING objectkeynew = lv_objectkey objecttablenew = 'MARA' classnumnew = <fs_alv>-class classtypenew = <fs_alv>-klart standardclass = 'X' TABLES allocvaluesnum = allocvaluesnum allocvalueschar = lt_class allocvaluescurr = allocvaluescurr return = lt_return. ENDIF. READ TABLE lt_return INTO wa_return WITH KEY type = 'E'. IF sy-subrc EQ 0 . CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK' . ELSE . CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = 'X'. ENDIF. ENDFORM. *&---------------------------------------------------------------------* *& Form frm_update_mara *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* *& --> PS_HEAD_HEAD *&---------------------------------------------------------------------* FORM frm_update_mara. * UPDATE 增强字段 ENDFORM. *&---------------------------------------------------------------------* *& Form frm_quality_create *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* *& --> p1 text *& <-- p2 text *&---------------------------------------------------------------------* FORM frm_insptype_create . DATA: ls_qmat TYPE bapi1001004_qmat, lt_qmat TYPE TABLE OF bapi1001004_qmat, lt_return TYPE TABLE OF bapiret2. SPLIT <fs_alv>-art AT '/' INTO TABLE DATA(arts). IF arts[] IS NOT INITIAL. LOOP AT arts INTO DATA(art). SELECT SINGLE * INTO @DATA(ls_tq34) FROM tq34 WHERE art = @art. * ls_qmat-function = '004'. ls_qmat-insptype = art. "检验类型 ls_qmat-material = <fs_alv>-matnr. "物料编码 ls_qmat-material_long = <fs_alv>-matnr. ls_qmat-plant = <fs_alv>-werks. "工厂 ls_qmat-ind_insp_with_tsk_list = ls_tq34-ppl. "有任务清单的检验 ls_qmat-ind_spec_matspec = ls_tq34-spezueber. "使用物料说明的检验 ls_qmat-ind_spec_config = ls_tq34-conf. "来自配置的检验规范 ls_qmat-ind_spec_batch = ls_tq34-tls. "批次确定的检验规范 ls_qmat-ind_auto_assign = ls_tq34-app. "自动规格分配 ls_qmat-ind_insp_by_charac = ls_tq34-mer. "按特性检验 ls_qmat-ind_post_to_insp_stock = ls_tq34-insmk. "过账到检验库存 ls_qmat-ind_automatic_ud = ls_tq34-ave. "计划的自动用途确定 ls_qmat-sampling_procedure = ls_tq34-stichprver. "采样程序 ls_qmat-dyn_modif_rule = ls_tq34-dynregel. "动态修改规则 ls_qmat-insp_percentage = ls_tq34-sproz. "检验百分比 ls_qmat-ind_100_percent_inspection = ls_tq34-hpz. "100%检验 ls_qmat-ind_skips_allowed = ls_tq34-dyn. "允许略过 ls_qmat-ind_manual_sample = ls_tq34-mpb. "手工输入采样 ls_qmat-ind_manual_sample_calc = ls_tq34-mst. "手动触发采样计算 ls_qmat-ind_single_units_possible = ls_tq34-ein. "可能的序列号管理 ls_qmat-ave_insp_duration = ls_tq34-mpdau. "平均检验期 ls_qmat-contr_insp_lot_create = ls_tq34-chg. "控制检验批创建(批次摘要) ls_qmat-qual_score_procedure = ls_tq34-qkzverf. "质量计分过程 ls_qmat-allowed_scrap_share = ls_tq34-qpmat. "检验批中允许的废品份额(百分比) ls_qmat-ind_hu_inspection = ls_tq34-apa. "处理单位的检验 ls_qmat-ms_flag = ls_tq34-ms_flag. "标识:多个规范 ls_qmat-preferred_insptype = <fs_alv>-apa. "首选的检验类型 ls_qmat-ind_insptype_mat_active = <fs_alv>-aktiv. "活动的 APPEND ls_qmat TO lt_qmat. CLEAR ls_qmat. CALL FUNCTION 'BAPI_MATINSPCTRL_SAVEREPLICA' TABLES return = lt_return inspectionctrl = lt_qmat. READ TABLE lt_return INTO DATA(ls_return) WITH KEY type = 'E'. IF sy-subrc = 0. CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. ELSE. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = abap_true. ENDIF. CLEAR: lt_qmat, lt_return. ENDLOOP. ENDIF. ENDFORM. *&---------------------------------------------------------------------* *& Form frm_create_mrp *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* *& --> p1 text *& <-- p2 text *&---------------------------------------------------------------------* FORM frm_create_mrp . DATA: ls_selfields TYPE sdibe_massfields, ls_mdma TYPE mdma, ls_dpop TYPE dpop, ls_return TYPE bapireturn1. ls_selfields-xdismm = abap_true. ls_mdma-dismm = 'ND'. CALL FUNCTION 'MD_MRP_LEVEL_CREATE_DATA' EXPORTING i_matnr = <fs_alv>-matnr i_werk = <fs_alv>-werks i_mrp_area = <fs_alv>-berid i_selfields = ls_selfields i_mdma = ls_mdma i_dpop = ls_dpop i_external_commit = abap_true IMPORTING e_error_return = ls_return. IF ls_return-type CA 'AEX'. CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. ELSE. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = abap_true. ENDIF. ENDFORM. *&---------------------------------------------------------------------* *& Form frm_create_mr21 *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* *& --> p1 text *& <-- p2 text *&---------------------------------------------------------------------* FORM frm_create_mr21 . DATA: iv_mode TYPE char01 VALUE 'N', is_input TYPE zsmr21, lt_return TYPE TABLE OF bapiret2. is_input-matnr = <fs_alv>-matnr. is_input-werks = <fs_alv>-werks. is_input-stprs = <fs_alv>-stprs. is_input-peinh = <fs_alv>-peinh. CALL FUNCTION 'ZFUNC_CREATE_MR21' EXPORTING iv_mode = iv_mode is_input = is_input TABLES return = lt_return. READ TABLE lt_return TRANSPORTING NO FIELDS WITH KEY id = 'CKPRCH' number = '019'. IF sy-subrc = 0. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = abap_true. ELSE. CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. ENDIF. ENDFORM.