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