SAP ABAP 信息记录批量修改

ABAP程序段:处理采购信息记录
该ABAP代码段主要用于处理采购信息记录。它首先根据条件设置活动类型,然后遍历表格(it_tab),调用函数进行供应商主数据的前导零处理,接着创建或更新采购信息记录,并进行事务提交。
DATA : l_activity  TYPE   c .

*  IF r1 = 'X'.
*    l_activity = 'H'.
*  ELSE.
*    l_activity = 'V'.
*  ENDIF.

   LOOP   AT  it_tab  INTO  st_tab.

**供应商主数据加前导零
     CALL   FUNCTION   'CONVERSION_EXIT_ALPHA_INPUT'
       EXPORTING
         input   = st_tab-lifnr
       IMPORTING
         output  = st_tab-lifnr.

    wa_eina-matnr = st_tab-matnr.   "物料,

    wa_eina-lifnr = st_tab-lifnr.   "供应商

    wa_eine-ekorg =  'WYPO' .         "采购组织
    wa_eine-werks =  'SH01' .         "工厂

    wa_eine-netpr = st_tab-netpr.    "单位价格

    wa_eina-lifab = st_tab-kdatb.   "有效开始日期
    wa_eina-lifbi = st_tab-kdate.   "有效结束日期

    wa_eine-norbm =  '1' .             "标准采购订单数量
    wa_eine-aplfz =  '1' .             "计划的天数内交货
    wa_eine-effpr =  '100' .           "采购信息记录中的有效价格

     CALL   FUNCTION   'ME_DIRECT_INPUT_INFORECORD'
       EXPORTING
        activity         = l_activity  "v 修改,h创建
        i_eina           = wa_eina
        i_eine           = wa_eine
        i_no_suppose     =  ''
        i_vorga          =  'A'
       IMPORTING
        e_eina           = wa_eina_new
        e_eine           = wa_eine_new
       TABLES
        t_head           = it_head
        t_line           = it_line
       EXCEPTIONS
        textname_invalid =  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 .



     CALL   FUNCTION   'ME_POST_INFORECORD'
       EXPORTING
        i_matnr  = wa_eina-matnr
        o_matnr  = wa_eina-matnr
       TABLES
        t_eina_i = it_eina.



*APPEND wa_eine_new to it_eine.
     CALL   FUNCTION   'ME_UPDATE_INFORECORD_COND'
       TABLES
        reine = it_eine.


     CALL   FUNCTION   'BAPI_TRANSACTION_COMMIT' .

   ENDLOOP 

<think>我们正在讨论SAP ABAP批量导入供应商数据的方法。根据引用[^1],虽然引用内容是关于货源清单的,但我们可以借鉴其批量处理的思想。在SAP中,批量导入数据通常有以下几种方法: 1. 使用LSMW(Legacy System Migration Workbench):这是SAP推荐的工具,用于从旧系统迁移数据到SAP系统,也可以用于批量导入。它提供了多种导入方式,如批输入、直接输入、BAPI等。 2. 使用BAPI(Business Application Programming Interface):SAP提供了标准的BAPI来创建或更改供应商,例如`BAPI_VENDOR_CREATE`或`BAPI_VENDOR_CHANGE`。我们可以编写ABAP程序调用这些BAPI进行批量导入。 3. 使用批输入(Batch Input):通过模拟事务码的方式,录制屏幕操作,然后生成批输入会话,最后执行会话实现批量导入。 4. 使用IDoc(Intermediate Document):通过EDI方式传输数据,需要配置IDoc类型和消息类型,然后通过程序生成IDoc并发送。 下面将重点介绍使用BAPI和LSMW两种常用方法。 ### 方法一:使用BAPI编写ABAP程序 SAP提供了标准BAPI `BAPI_VENDOR_CREATE`来创建供应商。我们可以编写一个ABAP程序,读取外部文件(如Excel或文本文件),然后循环调用该BAPI。 #### 步骤: 1. 准备数据:将供应商数据整理成文本文件或Excel文件,确保字段与BAPI要求的字段匹配。 2. 上传数据:使用ABAP程序中的`ALSM_EXCEL_TO_INTERNAL_TABLE`或`TEXT_CONVERT_XLS_TO_SAP`函数将Excel文件转换为内表,或者使用OPEN DATASET读取文本文件。 3. 调用BAPI:循环内表,将每一行数据填充到BAPI的输入参数中,然后调用`BAPI_VENDOR_CREATE`。 4. 错误处理:检查BAPI返回的消息,如果有错误则记录,否则提交事务。 #### 示例代码: ```abap REPORT z_batch_create_vendor. DATA: lt_rawdata TYPE truxs_t_text_data. DATA: lt_vendor_data TYPE TABLE OF ty_vendor_data, " 自定义结构,与文件结构对应 ls_vendor_data TYPE ty_vendor_data. DATA: ls_general_info TYPE bapibus1006_head, ls_company_code TYPE bapibus1006_cc, ls_purchasing TYPE bapibus1006_purchasing, lt_return TYPE TABLE OF bapiret2. " 1. 上传Excel文件 CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP' EXPORTING i_line_header = 'X' " 如果第一行是标题 i_tab_raw_data = lt_rawdata TABLES i_tab_converted_data = lt_vendor_data EXCEPTIONS conversion_failed = 1 OTHERS = 2. IF sy-subrc <> 0. MESSAGE '上传文件失败' TYPE 'E'. ENDIF. LOOP AT lt_vendor_data INTO ls_vendor_data. " 2. 填充BAPI参数 CLEAR: ls_general_info, ls_company_code, ls_purchasing, lt_return. " 通用信息 ls_general_info-vendor = ls_vendor_data-vendor_no. " 供应商编号(如果外部给号) ls_general_info-name1 = ls_vendor_data-name1. " 名称 " 公司代码信息 ls_company_code-comp_code = ls_vendor_data-comp_code. " 公司代码 ls_company_code-acct_group = ls_vendor_data-acct_group. " 科目组 " 采购组织信息 ls_purchasing-purch_org = ls_vendor_data-purch_org. " 采购组织 ls_purchasing-pur_group = ls_vendor_data-pur_group. " 采购组 " 3. 调用BAPI创建供应商 CALL FUNCTION 'BAPI_VENDOR_CREATE' EXPORTING generalinfo = ls_general_info companycode = ls_company_code purchasing = ls_purchasing TABLES return = lt_return EXCEPTIONS vendor_already_exist = 1 vendor_created_inactive = 2 others = 3. " 4. 错误处理 IF sy-subrc = 0. " 检查返回消息 READ TABLE lt_return WITH KEY type = 'E' TRANSPORTING NO FIELDS. IF sy-subrc = 0. " 有错误,记录错误 CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. ELSE. " 成功,提交 CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = 'X'. ENDIF. ELSE. " 异常处理 CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. ENDIF. " 记录日志(略) ENDLOOP. ``` ### 方法二:使用LSMW LSMW是SAP提供的标准迁移工具,适合没有编程经验的用户。它通过以下步骤完成: 1. 创建项目、子项目和对象。 2. 定义源结构(如Excel文件格式)。 3. 字段映射:将源字段映射到SAP目标字段。 4. 指定导入方式(如批输入、直接输入或BAPI)。 5. 创建批输入会话并执行。 #### 步骤简述: 1. 事务码LSMW进入工具。 2. 创建项目(Project)、子项目(Subproject)和对象(Object)。 3. 选择导入方式:通常选择“标准批输入/录制”或“标准BAPI”。 4. 定义源文件结构。 5. 字段映射:将源文件字段映射到SAP目标字段(如供应商名称、公司代码等)。 6. 创建转换规则(如果需要)。 7. 创建批输入会话。 8. 运行会话。 ### 注意事项 - 在调用BAPI时,注意供应商编号的分配方式(内部分配或外部分配)。 - 确保提供的数据完整,特别是必填字段。 - 在正式导入前,务必在测试系统验证。 ### 结论 对于ABAP开发人员,编写程序调用BAPI更灵活;对于业务顾问或非开发人员,使用LSMW更直观。两种方法都能实现批量导入供应商数据。 §§相关问题§§ 1. 如何调试BAPI_VENDOR_CREATE导入时的错误? 2. LSMW工具的具体操作步骤是什么? 3. 供应商主数据导入需要哪些必填字段? 4. 如何通过IDoc方式导入供应商数据?</think>### SAP ABAP批量导入供应商数据方法 在SAP批量导入供应商数据主要通过以下三种方法实现,每种方法适用于不同场景: #### 1. **LSMW(Legacy System Migration Workbench)** SAP官方推荐的迁移工具,适合大规模数据迁移,无需编程基础。 **操作流程**: ```text a. 创建项目(Project) → 子项目(Subproject) → 对象(Object) b. 选择对象类型:供应商主数据(BUS0006) c. 定义源文件结构(Excel/CSV) d. 字段映射:源字段 → SAP供应商字段 e. 选择导入方式:批输入(Batch Input)或直接输入(Direct Input) f. 创建会话并执行导入 ``` **优点**:图形化界面,支持数据校验,可重复使用[^1]。 #### 2. **BAPI(Business API)编程** 适合定制化需求,通过ABAP程序调用标准API: ```abap REPORT zvendor_import. DATA: lt_return TYPE TABLE OF bapiret2. LOOP AT it_vendor_data INTO ls_data. CALL FUNCTION 'BAPI_VENDOR_CREATE' EXPORTING generalinfo = ls_data-general "公司代码/科目组等 companycode = ls_data-company "公司代码数据 purchasing = ls_data-purch "采购组织数据 TABLES return = lt_return. IF line_exists( lt_return[ type = 'E' ] ). CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. ELSE. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'. ENDIF. ENDLOOP. ``` **关键BAPI**: - `BAPI_VENDOR_CREATE`(创建供应商) - `BAPI_VENDOR_CHANGE`(修改供应商) - `BAPI_VENDOR_GETDETAIL`(校验数据) #### 3. **批输入(Batch Input)** 通过事务码录制生成脚本: ```abap DATA: bdc_tab TYPE TABLE OF bdcdata. APPEND: 'X' TO bdc_tab: " 屏幕开始 PROGRAM 'SAPMF02K' DYNPRO '0100' FNAM 'BDC_OKCODE' FVAL '=ENTR'. CALL TRANSACTION 'XK01' USING bdc_tab MODE 'N'. ``` **操作步骤**: a. 使用SHDB录制XK01/XK02事务 b. 生成ABAP程序模板 c. 修改程序读取外部文件 --- ### 关键注意事项 1. **数据准备**: - 必填字段:供应商名称、科目组、公司代码、采购组织 - 建议通过LSMW或BAPI获取字段结构模板 2. **错误处理**: - LSMW自动记录错误日志 - BAPI需检查`BAPIRET2`返回结构 ```abap LOOP AT lt_return WHERE type CA 'AEX'. WRITE: / '错误:', lt_return-message. ENDLOOP. ``` 3. **权限要求**: - 供应商主数据维护权限(事务码XK01) - LSMW执行权限(S_LSMW_ADM) 4. **性能优化**: - 大批量导入时使用`DIRECT INPUT`模式 - 分批次提交(每500条COMMIT一次) --- ### 推荐方案选择 | 场景 | 推荐方法 | 优势 | |-----------------------|---------------|------------------------------| | 一次性迁移(>1000条) | LSMW | 图形化操作,自动错误处理 | | 定期导入(<500条) | BAPI程序 | 可集成到其他系统,灵活性强 | | 特殊字段需求 | 批输入 | 支持非标准字段录入 | > 提示:首次实施建议在测试系统验证,可通过`BP`事务码检查供应商数据完整性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值