1、概念
SAP的采购信息记录(Purchase Info Record)是SAP系统中用于管理供应商、物料和采购条件的记录。它包含了与某个特定供应商相关的物料采购的详细信息,如价格、交货条件、折扣、支付条件等。
采购信息记录的主要目的是简化采购订单的创建过程,减少手工输入的工作量,并确保采购订单的一致性和准确性。
采购信息记录包括
-
基本信息:
- 供应商主数据:包括供应商的代码、名称等。
- 物料主数据:包括物料的代码、描述、规格等。
- 采购组织:指定采购活动的组织单元。
- 采购组:负责特定物料或供应商的采购团队。
-
价格信息:
- 净价:不包含税和折扣的物料价格。
- 税:适用的税种和税率。
- 总价:包含税和折扣的最终价格。
- 有效期:价格信息的有效时间段。
-
交货条件:
- 交货地点:物料需要送达的地点。
- 运输条件:运输方式和相关费用。
- 交货时间:供应商承诺的交货时间。
-
折扣和返利:
- 数量折扣:根据采购数量的不同,给予不同的折扣。
- 价值折扣:根据采购金额的不同,给予不同的折扣。
- 返利:供应商提供的奖励或返点。
-
支付条件:
- 支付条款:如现金支付、信用支付、分期支付等。
- 信用期限:供应商允许的信用支付期限。
- 支付方式:如银行转账、支票等。
-
附加信息:
- 最低订购量:供应商要求的最低订购数量。
- 包装规格:物料的包装方式和数量。
- 货币:采购交易使用的货币类型。
采购信息记录的主要用途包括:
- 简化采购订单创建:在创建采购订单时,系统可以直接引用采购信息记录中的内容,自动填充价格、交货条件等信息,减少手工输入错误。
- 确保采购一致性:通过标准化采购条件,避免因不同人员操作导致的采购条件不一致。
- 提高采购效率:减少重复性工作,加快采购流程。
- 供应商评估:通过对采购信息记录的分析,可以评估供应商的绩效,如交货准时率、价格竞争力等。
采购信息记录的维护
为了确保采购信息记录的准确性和有效性,需要定期进行维护,包括:
- 更新价格和条件:当供应商提供新的价格或条件时,需要及时更新采购信息记录。
- 审查有效期:检查采购信息记录的有效期,过期的记录需要更新或删除。
- 校验数据准确性:定期检查数据的准确性,确保与供应商提供的实际情况一致。
通过有效的管理,采购信息记录可以显著提高采购过程的效率和准确性,帮助企业更好地控制采购成本和供应商关系。
2、前台创建
事务代码:ME11
采购信息记录一般数据
采购组织数据
条件
3、参考代码
调用BAPI:ME_INFORECORD_MAINTAIN
"--------------------@斌将军--------------------
DATA: lv_flag TYPE char1,
ls_eina TYPE mewieina,
ls_eine TYPE mewieine,
ls_einax TYPE mewieinax,
ls_einex TYPE mewieinex,
lt_txt TYPE mewipirtext_t,
ls_txt TYPE mewipirtext,
lt_validity TYPE TABLE OF mewivalidity,
ls_validity TYPE mewivalidity,
lt_condition TYPE TABLE OF mewicondition,
ls_condition TYPE mewicondition,
lt_value TYPE TABLE OF mewiscaleval,
ls_value TYPE mewiscaleval,
lt_quan TYPE TABLE OF mewiscalequan,
ls_quan TYPE mewiscalequan,
ls_eina1 LIKE mewieina,
ls_eine1 LIKE mewieine,
ls_return TYPE bapireturn,
lt_return TYPE mewi_t_return.
DATA: lv_infnr TYPE infnr,
lv_check TYPE char1,
lv_message TYPE char255.
CLEAR: lv_flag,ls_eina,ls_einax,ls_eine,ls_einex,
lt_txt,ls_txt,lt_validity,ls_validity,lt_condition,ls_condition,
lt_value,ls_value,lt_quan,ls_quan,
ls_eina1,ls_eine1,ls_return,lt_return.
"查询采购信息记录是否存在
SELECT SINGLE
eina~infnr
INTO lv_infnr
FROM eina
JOIN eine ON eina~infnr = eine~infnr
WHERE eina~lifnr = '0010000792'
AND eina~matnr = '000000001010008955'
AND eine~ekorg = '3060'
AND eine~esokz = '0'
AND eine~werks = '3060'.
IF sy-subrc <> 0.
lv_flag = 'I'.
"查看是否有信息记录基础数据
SELECT SINGLE
infnr
FROM eina
INTO lv_infnr
WHERE lifnr = '0010000792'
AND matnr = '000000001010008955'.
IF sy-subrc = 0.
ls_eina-info_rec = lv_infnr.
ENDIF.
ELSE.
lv_flag = 'U'.
ls_eina-info_rec = lv_infnr.
ls_eine-info_rec = lv_infnr.
ls_einex-info_rec = 'X'.
ENDIF.
*采购信息记录 - 一般数据
ls_eina-vendor = '0010000792'."gt_tab-lifnr. "供应商
ls_eina-material = '000000001010008955'."gt_tab-matnr. "物料
ls_eina-po_unit = 'BOT'."gt_tab-meins. "订单计量单位
*ls_eina-conv_num1 = ''."gt_tab-umrez. "单位转换的分子
*ls_eina-conv_den1 = ''."gt_tab-umren. "单位转换的分母
ls_einax-vendor = 'X'.
ls_einax-material = 'X'.
ls_einax-po_unit = 'X'.
*ls_einax-conv_num1 = 'X'.
*ls_einax-conv_den1 = 'X'.
*采购信息记录 - 采购组织数据
ls_eine-info_type = '0'."gt_tab-esokz. "信息记录类别
ls_eine-purch_org = '3060'."gt_tab-ekorg. "采购组织
ls_eine-plant = '3060'."gt_tab-werks. "工厂
ls_eine-pur_group = '100'."gt_tab-ekgrp. "采购组
ls_eine-gr_basediv = 'X'."gt_tab-webre. "标识:基于收货的发票验证
ls_eine-nrm_po_qty = '1'."gt_tab-norbm. "标准采购订单数量
ls_eine-min_po_qty = ''."gt_tab-minbm. "最小订单数量
ls_eine-max_po_qty = ''."gt_tab-bstma. "最大订单数量
ls_eine-net_price = '10'."gt_tab-netpr. "净价
ls_eine-currency = 'CNY'."gt_tab-waers. "币别
ls_eine-price_unit = '1'."gt_tab-peinh. "价格单位
ls_eine-orderpr_un = 'BOT'."gt_tab-meins. "订单计量单位
ls_eine-conv_num1 = '1'."1. "gt_tab-umrez. "单位转换的分子
ls_eine-conv_den1 = '1'."1. "gt_tab-umren. "单位转换的分母
ls_eine-tax_code = ''."gt_tab-mwskz. "税码
ls_eine-overdeltol = ''."gt_tab-uebto. "过量交货容差
ls_eine-under_tol = ''."gt_tab-untto. "交货不足容差
ls_eine-conf_ctrl = ''."gt_tab-bstae. "确认控制代码
ls_eine-ackn_reqd = ''."gt_tab-kzabs. "供应商需要确认订单
ls_einex-info_type = 'X'.
ls_einex-purch_org = 'X'.
ls_einex-plant = 'X'.
ls_einex-pur_group = 'X'.
ls_einex-gr_basediv = 'X'.
ls_einex-nrm_po_qty = 'X'.
ls_einex-min_po_qty = 'X'.
ls_einex-max_po_qty = 'X'.
*ls_einex-net_price = 'X'."此处不能打X
ls_einex-currency = 'X'.
ls_einex-price_unit = 'X'.
ls_einex-orderpr_un = 'X'.
ls_einex-conv_num1 = 'X'.
ls_einex-conv_den1 = 'X'.
ls_einex-tax_code = 'X'.
ls_einex-overdeltol = 'X'.
ls_einex-under_tol = 'X'.
ls_einex-conf_ctrl = 'X'.
ls_einex-ackn_reqd = 'X'.
lt_validity = VALUE #( ( plant = '3060'"gt_tab-werks
valid_from = '20240620'"gt_tab-datab
valid_to = '99991231'"gt_tab-datbi
) ).
lt_condition = VALUE #( ( cond_count = 1
cond_type = 'PB00'"gt_tab-kschl
cond_value = '10'"gt_tab-netpr
currency = 'CNY'"gt_tab-waers
cond_p_unt = '1'"gt_tab-peinh
cond_unit = 'BOT'"gt_tab-meins
calctypcon = 'C' "计算类型
vendor_no = '0010000792'"gt_tab-lifnr
change_id = lv_flag ) ).
"阶梯价
* IF gt_tab-kstb1 IS NOT INITIAL.
* CLEAR: lt_condition.
* lt_condition = VALUE #( ( cond_count = 1
* cond_type = gt_tab-kschl
* scale_type = 'A' "等级类型
* scale_base_ty = 'C' "等级基础类型
* scale_unit = gt_tab-meins "条件等级计量单位
* calctypcon = 'C' "计算类型
* cond_value = gt_tab-netpr
* currency = gt_tab-waers
* cond_p_unt = gt_tab-peinh
* cond_unit = gt_tab-meins
* vendor_no = gt_tab-lifnr
* change_id = lv_flag ) ).
*
* ls_quan-cond_count = 1.
* ls_quan-line_no = 1.
* ls_quan-scale_base_qty = '1'."gt_tab-kstb1.
* ls_quan-cond_value = '10'."gt_tab-kbet1.
* APPEND ls_quan TO lt_quan.
* CLEAR ls_quan.
* ENDIF.
*
* IF gt_tab-kstb2 IS NOT INITIAL.
* ls_quan-cond_count = 1.
* ls_quan-line_no = 2.
* ls_quan-scale_base_qty = gt_tab-kstb2.
* ls_quan-cond_value = gt_tab-kbet2.
* APPEND ls_quan TO lt_quan.
* CLEAR ls_quan.
* ENDIF.
"BAPI
CALL FUNCTION 'ME_INFORECORD_MAINTAIN'
EXPORTING
i_eina = ls_eina
i_einax = ls_einax
i_eine = ls_eine
i_einex = ls_einex
IMPORTING
e_eina = ls_eina1
e_eine = ls_eine1
TABLES
txt_lines = lt_txt
cond_validity = lt_validity
condition = lt_condition
* cond_scale_value = lt_value
* cond_scale_quan = lt_quan
return = lt_return.
CLEAR:lv_message.
LOOP AT lt_return INTO ls_return WHERE type CA 'EXA'.
lv_message = lv_message && '&' && ls_return-message.
ENDLOOP.
IF sy-subrc = 0 OR ls_eina1-info_rec IS INITIAL.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
lv_message = '采购信息记录' && ls_eina1-info_rec && '创建成功'.
WRITE:lv_message.
ENDIF.
"--------------------@斌将军--------------------