采购信息记录维护

1、概念

SAP的采购信息记录(Purchase Info Record)是SAP系统中用于管理供应商、物料和采购条件的记录。它包含了与某个特定供应商相关的物料采购的详细信息,如价格、交货条件、折扣、支付条件等。

采购信息记录的主要目的是简化采购订单的创建过程,减少手工输入的工作量,并确保采购订单的一致性和准确性。

采购信息记录包括

  1. 基本信息:

    • 供应商主数据:包括供应商的代码、名称等。
    • 物料主数据:包括物料的代码、描述、规格等。
    • 采购组织:指定采购活动的组织单元。
    • 采购组:负责特定物料或供应商的采购团队。
  2. 价格信息:

    • 净价:不包含税和折扣的物料价格。
    • 税:适用的税种和税率。
    • 总价:包含税和折扣的最终价格。
    • 有效期:价格信息的有效时间段。
  3. 交货条件:

    • 交货地点:物料需要送达的地点。
    • 运输条件:运输方式和相关费用。
    • 交货时间:供应商承诺的交货时间。
  4. 折扣和返利:

    • 数量折扣:根据采购数量的不同,给予不同的折扣。
    • 价值折扣:根据采购金额的不同,给予不同的折扣。
    • 返利:供应商提供的奖励或返点。
  5. 支付条件:

    • 支付条款:如现金支付、信用支付、分期支付等。
    • 信用期限:供应商允许的信用支付期限。
    • 支付方式:如银行转账、支票等。
  6. 附加信息:

    • 最低订购量:供应商要求的最低订购数量。
    • 包装规格:物料的包装方式和数量。
    • 货币:采购交易使用的货币类型。

采购信息记录的主要用途包括:

  • 简化采购订单创建:在创建采购订单时,系统可以直接引用采购信息记录中的内容,自动填充价格、交货条件等信息,减少手工输入错误。
  • 确保采购一致性:通过标准化采购条件,避免因不同人员操作导致的采购条件不一致。
  • 提高采购效率:减少重复性工作,加快采购流程。
  • 供应商评估:通过对采购信息记录的分析,可以评估供应商的绩效,如交货准时率、价格竞争力等。

采购信息记录的维护

为了确保采购信息记录的准确性和有效性,需要定期进行维护,包括:

  • 更新价格和条件:当供应商提供新的价格或条件时,需要及时更新采购信息记录。
  • 审查有效期:检查采购信息记录的有效期,过期的记录需要更新或删除。
  • 校验数据准确性:定期检查数据的准确性,确保与供应商提供的实际情况一致。

通过有效的管理,采购信息记录可以显著提高采购过程的效率和准确性,帮助企业更好地控制采购成本和供应商关系。

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.
"--------------------@斌将军--------------------

 

定期更文,欢迎关注

 

 

 

 

 

 
 
 
 
 
posted @ 2024-07-10 16:55  斌将军  阅读(83)  评论(0编辑  收藏  举报