用接口开发接PO收入库程序

本文记录了在使用接口开发采购入库程序时遇到的问题及解决过程,包括SQL代码示例,错误分析,以及通过设置调试模式、更新接口状态和检查会计期间等步骤进行故障排除和修复。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

            用接口开发采购入库程序在网上一搜就会有很多,但基本上都是一样的程序,在自己的系统中操作时很有可能不成功,下面就针对这种情况,将自己操作的全过程记录下来,供大家参考:

           SQL代码(网上搜的):

        

/* Formatted on 2014-10-7 15:23:20 (QP5 v5.115.810.9015) */
/*采购接收接口开发
RCV_TRANSACTIONS_INTERFACE;

RCV_HEADERS_INTERFACE;

mtl_transaction_lots_interface; (物料属于批次控制)

**************************************************
*/

DECLARE
   V_INTERFACE_TRANSACTION_ID NUMBER;
   V_GROUP_ID     NUMBER;
   V_SHIPMENT_HEADER_ID NUMBER;
   V_SHIPMENT_LINE_ID NUMBER;
   V_LINE_LOCATION_ID NUMBER;
   V_PO_DISTRIBUTION_ID NUMBER;
   V_HEADER_INTERFACE_ID NUMBER;
   V_DELIVER_TO_PERSON_ID NUMBER;
   L_REQUEST_ID   NUMBER;
   L_REQUEST_ID2  NUMBER;
   V_DESTINATION_TYPE_CODE VARCHAR2(100);
   V_EXPECTED_RECEIPT_DATE DATE;
   V_COUNTRY_OF_ORIGIN_CODE VARCHAR2(100);
   V_LOT_CONTROL  NUMBER;
   V_USE_MTL_SERIAL NUMBER;
   V_RCV_QTY      NUMBER;
   V_TRANS_QTY    NUMBER;
   L_PHASE        VARCHAR2(10);
   L_STATUS       VARCHAR2(10);
   L_DEV_PHASE    VARCHAR2(10);
   L_DEV_STATUS   VARCHAR2(10);
   L_MESSAGE      VARCHAR2(10);
   L_REQUEST_LAUCH1_STATUS BOOLEAN;
   V_INTERFACE_ID NUMBER;

   CURSOR CUR_PO_INFO
   IS
      SELECT PHA.SEGMENT1
            ,PHA.CURRENCY_CODE
            ,PHA.SHIP_TO_LOCATION_ID
            ,PHA.VENDOR_ID
            ,PHA.VENDOR_SITE_ID
            ,PLA.*
        FROM PO_HEADERS_ALL PHA, PO_LINES_ALL PLA
       WHERE PHA.PO_HEADER_ID = PLA.PO_HEADER_ID
         AND PHA.ORG_ID = PLA.ORG_ID
         AND PHA.ORG_ID = 85                                    
         AND PHA.AUTHORIZATION_STATUS = 'APPROVED'
         AND PHA.TYPE_LOOKUP_CODE = 'STANDARD'
         AND PHA.WF_ITEM_TYPE = 'POAPPRV'
         AND PHA.SEGMENT1 = '123214060066' ;
BEGIN
   FND_GLOBAL.APPS_INITIALIZE(USER_ID     => 11236  --7137
                             ,RESP_ID     => 50623
                             ,RESP_APPL_ID => 201 --Purchasing Super User , PO
                             );
   MO_GLOBAL.SET_POLICY_CONTEXT('S', 85);
   MO_GLOBAL.SET_ORG_CONTEXT(85, '', 'ONT');
   MO_GLOBAL.INIT('ONT');
   dbms_application_info.SET_CLIENT_INFO(85);

   FOR C_PO_INFO IN CUR_PO_INFO LOOP
      SELECT RCV_TRANSACTIONS_INTERFACE_S.NEXTVAL
        INTO V_INTERFACE_TRANSACTION_ID
        FROM DUAL;

      SELECT RCV_INTERFACE_GROUPS_S.NEXTVAL INTO V_GROUP_ID FROM DUAL;

      SELECT RCV_SHIPMENT_HEADERS_S.NEXTVAL
        INTO V_SHIPMENT_HEADER_ID
        FROM DUAL;

      SELECT RCV_SHIPMENT_LINES_S.NEXTVAL INTO V_SHIPMENT_LINE_ID FROM DUAL;

      SELECT RCV_HEADERS_INTERFACE_S.NEXTVAL
        INTO V_HEADER_INTERFACE_ID
        FROM DUAL;

      SELECT MTL_MATERIAL_TRANSACTIONS_S.NEXTVAL
        INTO V_INTERFACE_ID
        FROM DUAL;

      BEGIN
         SELECT MSIB.LOT_CONTROL_CODE
           INTO V_LOT_CONTROL
           FROM MTL_SYSTEM_ITEMS_B MSIB
          WHERE MSIB.INVENTORY_ITEM_ID = C_PO_INFO.ITEM_ID
            AND MSIB.ORGANIZATION_ID = 104;                             --HUTS
      EXCEPTION
         WHEN OTHERS THEN
            V_LOT_CONTROL := NULL;
      END;

      IF V_LOT_CONTROL IS NULL THEN
         V_USE_MTL_SERIAL := NULL;
      ELSE
         V_USE_MTL_SERIAL := 1;
      END IF;

      --Get po line location informations
      BEGIN
         SELECT PLLA.LINE_LOCATION_ID
               ,PLLA.NEED_BY_DATE
               ,PLLA.COUNTRY_OF_ORIGIN_CODE
               ,(PLLA.QUANTITY - PLLA.QUANTITY_RECEIVED)
           INTO V_LINE_LOCATION_ID
               ,V_EXPECTED_RECEIPT_DATE
               ,V_COUNTRY_OF_ORIGIN_CODE
               ,V_TRANS_QTY
           FROM PO_LINE_LOCATIONS_ALL PLLA
          WHERE PLLA.PO_HEADER_ID = C_PO_INFO.PO_HEADER_ID
            AND PLLA.PO_LINE_ID = C_PO_INFO.PO_LINE_ID
            AND ROWNUM = 1;
      EXCEPTION
         WHEN OTHERS THEN
            V_LINE_LOCATION_ID := NULL;
            V_EXPECTED_RECEIPT_DATE := NULL;
            V_COUNTRY_OF_ORIGIN_CODE := NULL;
            V_TRANS_QTY := 0;
      END;

      --Get po_distribution_id
      BEGIN
         SELECT PDA.PO_DISTRIBUTION_ID
               ,PDA.DESTINATION_TYPE_CODE
               ,PDA.DELIVER_TO_PERSON_ID
           INTO V_PO_DISTRIBUTION_ID
               ,V_DESTINATION_TYPE_CODE
               ,V_DELIVER_TO_PERSON_ID
           FROM PO_DISTRIBUTIONS_ALL PDA
          WHERE PDA.PO_HEADER_ID = C_PO_INFO.PO_HEADER_ID
            AND PDA.PO_LINE_ID = C_PO_INFO.PO_LINE_ID
            AND ROWNUM = 1;
      EXCEPTION
         WHEN OTHERS THEN
            V_PO_DISTRIBUTION_ID := NULL;
            V_DESTINATION_TYPE_CODE := NULL;
      END;

      IF V_TRANS_QTY > 0 THEN
         INSERT INTO RCV_TRANSACTIONS_INTERFACE(INTERFACE_TRANSACTION_ID
                                               ,GROUP_ID
                                               ,LAST_UPDATE_DATE
                                               ,LAST_UPDATED_BY
                                               ,CREATION_DATE
                                               ,CREATED_BY
                                               ,LAST_UPDATE_LOGIN
                                               ,TRANSACTION_TYPE
                                               ,TRANSACTION_DATE
                                               ,PROCESSING_STATUS_CODE
                                               ,PROCESSING_MODE_CODE
                                               ,TRANSACTION_STATUS_CODE
                                               ,QUANTITY
                                               ,UNIT_OF_MEASURE
                                               ,ITEM_ID
                                               ,EMPLOYEE_ID
                                               ,AUTO_TRANSACT_CODE
                                               ,SHIP_TO_LOCATION_ID
                                               ,RECEIPT_SOURCE_CODE
                                               ,VENDOR_ID
                 

AP Invoices应付发票【Open Interface】 7 2.1. 快速参考 7 2.2. 开发参考 7 2.3. 关键字段(参数)+最简单例子 8 2.4. 已知问题 9 3. AP Suppliers供应商【Open Interface、Unopen API】 10 3.1. 快速参考 10 3.2. 开发参考 10 3.3. 关键字段(参数)+最简单例子 10 3.4. 已知问题 12 4. AR Customers客户【Open Interface】 13 4.1. 快速参考 13 4.2. 开发参考 13 4.3. 关键字段(参数)+最简单例子 14 4.4. 已知问题 20 5. AR Transactions应收发票【Open Interface、Open API】 23 5.1. 快速参考 23 5.2. 开发参考 23 5.3. 关键字段(参数)+最简单例子 24 5.4. 已知问题 24 6. BOM Bills物料清单【Open Interface、Open API】 25 6.1. 快速参考 25 6.2. 开发参考 25 6.3. 关键字段(参数)+最简单例子 27 6.4. 已知问题 32 7. BOM Routings工艺路线【Open Interface、Open API】 33 7.1. 快速参考 33 7.2. 开发参考 33 7.3. 关键字段(参数)+最简单例子 35 7.4. 已知问题 42 8. CE Bank Statement银行对账单【Open Interface】 43 8.1. 快速参考 43 8.2. 开发参考 43 8.3. 关键字段(参数)+最简单例子 44 8.4. 已知问题 46 9. CST Costs物料成本、资源费率、费用费率【Open Interface】 48 9.1. 快速参考 48 9.2. 开发参考 48 9.3. 关键字段(参数)+最简单例子 49 9.4. 已知问题 49 10. FA Mass Addtions成批添加【Open Interface】 50 10.1. 快速参考 50 10.2. 开发参考 51 10.3. 关键字段(参数)+最简单例子 52 10.4. 已知问题 54 11. GL Journal日记账【Open Interface】 55 11.1. 快速参考 55 11.2. 开发参考 55 11.3. 关键字段(参数)+最简单例子 56 11.4. 已知问题 58 12. HR People人员&信息【Open API】 59 12.1. 快速参考 59 12.2. 开发参考 59 12.3. 关键字段(参数)+最简单例子 60 12.4. 已知问题 62 13. INV Items物料【Open Interface、Unopened API】 63 13.1. 快速参考 63 13.2. 开发参考 63 13.3. 关键字段(参数)+最简单例子 64 13.4. 已知问题 69 14. INV Item Categories物料类别【Open Interface、Unopened API】 70 14.1. 快速参考 70 14.2. 开发参考 70 14.3. 关键字段(参数)+最简单例子 71 14.4. 已知问题 72 15. INV Material Transactions物料事务处理【Open Interface】 74 15.1. 快速参考 74 15.2. 开发参考 74 15.3. 关键字段(参数)+最简单例子 76 15.4. 已知问题 80 16. INV Move Orders挑单【Open API】 81 16.1. 快速参考 81 16.2. 开发参考 82 16.3. 关键字段(参数)+最简单例子 82 16.4. 已知问题 84 17. INV MO Allocate物料搬运单分配【Open Interface】 85 17.1. 快速参考 85 17.2. 开发参考 85 17.3. 关键字段(参数)+最简单例子 86 17.4. 已知问题 86 18. INV MO Transact物料搬运单处理【Open API】 87 18.1. 快速参考 87 18.2. 开发参考 87 18.3. 关键字段(参数)+最简单例子 88 18.4. 已知问题 88 19. INV/BOM Delete Groups删除组【Simulation】 89 19.1. 快速参考 89 19.2. 开发参考 89 19.3. 关键字段(参数)+最简单例子 90 19.4. 已知问题 93 20. MRP Master Demand/Production Schedules【Open Interface】 94 20.1. 快速参考 94 20.2. 开发参考 94 20.3. 关键字段(参数)+最简单例子 94 20.4. 已知问题 96 21. OM Sales Order销售订单【Open Interface、Open API】 97 21.1. 快速参考 97 21.2. 开发参考 97 21.3. 关键字段(参数)+最简单例子 98 21.4. 已知问题 103 22. OM Pick销售挑【Open Interface、Open API】 105 22.1. 快速参考 105 22.2. 开发参考 105 22.3. 关键字段(参数)+最简单例子 106 22.4. 已知问题 106 23. OM Ship销售发运【Open API】 107 23.1. 快速参考 107 23.2. 开发参考 107 23.3. 关键字段(参数)+最简单例子 107 23.4. 已知问题 111 24. PO Requisitions请购单【Open Interface】 112 24.1. 快速参考 112 24.2. 开发参考 112 24.3. 关键字段(参数)+最简单例子 114 24.4. 已知问题 117 25. PO Purchase Orders采购订单【Open Interface、Open API】 118 25.1. 快速参考 118 25.2. 开发参考 118 25.3. 关键字段(参数)+最简单例子 120 25.4. 已知问题 130 26. PO/RMA/OSP/ASN Receiving【Open Interface、Unopen API】 131 26.1. 快速参考 131 26.2. 开发参考 131 26.3. 关键字段(参数)+最简单例子 133 26.4. 已知问题 146 27. QA Collection Results质量收集结果【Open Interface】 149 27.1. 快速参考 149 27.2. 开发参考 149 27.3. 关键字段(参数)+最简单例子 150 27.4. 已知问题 151 28. WIP Work Orders工单【Open Interface、Unopened API】 152 28.1. 快速参考 152 28.2. 开发参考 152 28.3. 关键字段(参数)+最简单例子 154 28.4. 已知问题 157 29. WIP Move Transactions工序移动【Open Interface】 158 29.1. 快速参考 158 29.2. 开发参考 158 29.3. 关键字段(参数)+最简单例子 159 29.4. 已知问题 161 30. WIP Resource Transactions资源事务【Open Interface】
<think>嗯,用户问的是关于SAP自开发接口封装PO的步骤。首先,我需要明确PO在这里指的是采购订单(Purchase Order)。用户可能是在SAP系统中需要开发一个接口,将采购订单的数据与其他系统进行集成,比如与供应商系统或者内部的其他ERP模块交互。封装接口通常意味着将复杂的逻辑隐藏起来,提供一个简单、标准的调用方式,比如通过RFC、IDoc、Web Service等方式。 下来,我应该回忆一下SAP中常见的接口开发方法。可能的步骤包括需求分析、数据模型设计、接口逻辑开发、测试和部署。用户可能想知道具体的步骤,比如如何创建函数模块,如何定义IDoc结构,或者如何生成Web Service。需要确保每个步骤都涵盖关键点,比如数据映射、错误处理、日志记录等。 然后,我需要考虑用户可能的背景。用户可能是SAP开发人员或ABAP程序员,需要实际操作的指导。因此,回答需要技术细节,但也要结构清晰,分步骤说明。可能需要提到事务码,比如SE37创建RFC函数,WE30定义IDoc类型,SOAMANAGER配置Web Service等。 同时,用户提到“自开发接口”,所以可能需要区别于标准接口,强调定制开发的部分。需要提醒用户注意数据校验、权限控制、性能优化等方面的问题,这些都是实际开发中容易遇到的挑战。 另外,用户可能关心如何确保接口的稳定性和可维护性,所以在步骤中应该包括测试和文档的部分。例如单元测试、集成测试,以及接口文档的编写。 可能还需要考虑不同场景下的接口类型选择,比如同步还是异步通信,是否需要回执确认,数据量的大小等,这些都会影响接口的设计方式。 最后,要确保回答符合之前提到的格式要求,使用中文,行内公式正确(虽然这个问题可能用不到太多数学公式,但如果有变量或代码示例,需要用$包裹),结构清晰分步骤,使用列表和加粗突出重点。需要检查是否有遗漏的关键步骤,比如错误处理机制或者日志记录,这些都是接口开发中不可或缺的部分。</think>在SAP系统中开发自定义接口封装采购订单(PO)的步骤如下,需结合ABAP开发与系统集成技术: ### **1. 需求分析与设计** - **明确接口场景**:确定接口用途(如外部系统创建/修改PO)、数据流向(输入/输出)、通信协议(RFC/IDoc/Web Service等)。 - **定义数据结构**: 使用事务码`SE11`创建Z表或结构体,映射PO关键字段(如`EBELN`(采购订单号)、`EKORG`(采购组织)、行项目数据等)。 - **设计异常处理机制**:定义错误码及消息反馈格式。 --- ### **2. 开发接口逻辑** #### **方式一:RFC函数模块封装** 1. 创建函数组(事务码`SE80`) 2. 定义RFC函数模块(`SE37`): ```abap FUNCTION Z_CREATE_PO. * 输入参数:IV_DATA(JSON/XML结构或自定义类型) * 输出参数:EV_SUCCESS, ET_RETURN(BAPIRET2消息表) * 逻辑实现: CALL BAPI 'BAPI_PO_CREATE1' PERFORM DATA_MAPPING " 数据转换 HANDLE COMMIT/ROLLBACK " 事务控制 ENDFUNCTION. ``` 3. 激活后生成Web Service(事务码`SOAMANAGER`)或直通过RFC调用。 #### **方式二:IDoc接口开发** 1. 定义IDoc类型(`WE30`): - 扩展类型如`ZPOORD`,关联基本类型`ORDERS05` 2. 创建消息类型(`WE81`)并链IDoc类型 3. 开发处理函数(`BD51`注册): ```abap FUNCTION Z_IDOC_PO_PROCESS. * 通过EDIDD结构解析IDoc数据 * 调用BAPI或直更新表(如EKKO/EKPO) ENDFUNCTION. ``` --- ### **3. 数据映射与校验** - **字段转换**:使用`CONVERSION_EXIT`处理单位/货币等格式化 - **业务逻辑校验**: ```abap IF ls_po-header-ekorg NOT IN gr_valid_ekorg. RAISE EXCEPTION TYPE zcx_po_error. ENDIF. ``` --- ### **4. 测试与调试** - **单元测试**:通过`SE37`直调试RFC函数 - **端到端测试**:使用`WE19`测试IDoc处理,或通过Postman调用Web Service - **日志记录**:在接口中嵌入`APPL_LOG`写入日志表(如ZLOG_PO) --- ### **5. 部署与监控** 1. 权限配置:通过`PFCG`角色分配接口访问权限 2. 传输请求:使用`SE10`将对象移至生产系统 3. 监控工具: - IDoc状态监控(`WE02`) - SM58(RFC错误) - SICF(Web Service状态) --- ### **关键注意事项** 1. **性能优化**:批量处理时使用`COMMIT WORK`分批次提交 2. **版本兼容性**:Web Service需考虑WSDL与外部系统匹配 3. **安全机制**:启用SAP Router或SSL加密敏感数据传输 通过以上步骤可实现高可用的PO接口封装,建议结合具体业务场景选择RFC/IDoc/REST等适配方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值