物料导入 Inventory Item Migration

--INV Items

--Concurrent programs:Import Items  N: INV/Items/Import/Import Items

SELECT *
  FROM mtl_system_items_interface
 WHERE TRUNC (creation_date) = TRUNC (SYSDATE);

SELECT *
  FROM mtl_item_revisions_interface
 WHERE TRUNC (creation_date) = TRUNC (SYSDATE);

SELECT *
  FROM mtl_interface_errors
 WHERE TRUNC (creation_date) = TRUNC (SYSDATE);

--Delete
DELETE FROM mtl_system_items_interface
      WHERE TRUNC (creation_date) = TRUNC (SYSDATE);

DELETE FROM mtl_item_revisions_interface
      WHERE TRUNC (creation_date) = TRUNC (SYSDATE);

DELETE FROM mtl_interface_errors
      WHERE TRUNC (creation_date) = TRUNC (SYSDATE);

--******************************************************************************
SELECT *
  FROM mtl_system_items_b
 WHERE TRUNC (creation_date) = TRUNC (SYSDATE);

SELECT *
  FROM mtl_system_items_tl
 WHERE TRUNC (creation_date) = TRUNC (SYSDATE);

SELECT *
  FROM mtl_item_revisions_b
 WHERE TRUNC (creation_date) = TRUNC (SYSDATE);

SELECT *
  FROM mtl_item_revisions_tl
 WHERE TRUNC (creation_date) = TRUNC (SYSDATE);

--******************************************************************************
--Table Relation:
/*mtl_system_items_interface.organization_code = mtl_item_revisions_interface.organization_code
AND
mtl_system_items_interface.item_number = mtl_item_revisions_interface.item_number
mtl_interface_errors*/
SELECT mie.error_message
  FROM mtl_system_items_interface mii, mtl_interface_errors mie
 WHERE mii.transaction_id = mie.transaction_id;

--******************************************************************************
--Use templete creat item

DECLARE
   l_iface_rec        inv.mtl_system_items_interface%ROWTYPE;
   l_user_id          NUMBER                                   := 1318;
   --User ID, Sysadmin here
   l_mst_mfg_org_id   NUMBER                                   := 204;
   --Master Inv Organization
   l_cur_mfg_org_id   NUMBER                                   := 207;
--Current Inv Organization
BEGIN
   l_iface_rec.last_update_date := SYSDATE;
   l_iface_rec.last_updated_by := l_user_id;
   l_iface_rec.creation_date := SYSDATE;
   l_iface_rec.created_by := l_user_id;
   l_iface_rec.last_update_login := -1;
   l_iface_rec.process_flag := 1;
   l_iface_rec.transaction_type := 'CREATE';
   l_iface_rec.set_process_id := 987654321;
   l_iface_rec.segment1 := 'MON_TEST_ITEM_0001';
   l_iface_rec.primary_uom_code := 'Ea';
   l_iface_rec.description := 'For Interface Test';
   l_iface_rec.template_id := 259;
                                --Purchased Item?table inv.mtl_item_templates
   --Master Inv Organization
   l_iface_rec.organization_id := l_mst_mfg_org_id;

   INSERT INTO mtl_system_items_interface
        VALUES l_iface_rec;

   --Current Inv Organization
   l_iface_rec.organization_id := l_cur_mfg_org_id;

   INSERT INTO inv.mtl_system_items_interface
        VALUES l_iface_rec;

   COMMIT;
END;

--******************************************************************************
SELECT *
  FROM inv.mtl_item_templates mit
 WHERE mit.template_name LIKE 'Purchased%';

--******************************************************************************
SELECT mp.*
  FROM inv.mtl_parameters mp
 WHERE mp.organization_id = 84;
--******************************************************************************
--Assign organization

SELECT *
  FROM mtl_parameters mp
 WHERE mp.organization_id = 84;

DECLARE
   l_iface_rec        inv.mtl_system_items_interface%ROWTYPE;
   l_user_id          NUMBER                                   := 1318;
   --User ID, Sysadmin here
   l_cur_mfg_org_id   NUMBER                                   := 208;
--Current Inv Organization
BEGIN
   l_iface_rec.last_update_date := SYSDATE;
   l_iface_rec.last_updated_by := l_user_id;
   l_iface_rec.creation_date := SYSDATE;
   l_iface_rec.created_by := l_user_id;
   l_iface_rec.last_update_login := -1;
   l_iface_rec.process_flag := 1;
   l_iface_rec.transaction_type := 'CREATE';
   l_iface_rec.set_process_id := 987654321;
   l_iface_rec.organization_id := l_cur_mfg_org_id;
   l_iface_rec.segment1 := 'MON_TEST_ITEM_0001';

   INSERT INTO inv.mtl_system_items_interface
        VALUES l_iface_rec;

   COMMIT;
END;

--******************************************************************************
--Use API Create item templete

DECLARE
   l_item_rec         inv_item_grp.item_rec_type;
   x_item_rec         inv_item_grp.item_rec_type;
   x_error_tbl        inv_item_grp.error_tbl_type;
   l_template_id      NUMBER                      := 259;
   --Purchased Item£table inv.mtl_item_templates
   x_return_status    VARCHAR2 (1);
   l_user_id          NUMBER                      := 1318;
   --User ID, Sysadmin here
   l_mst_mfg_org_id   NUMBER                      := 204;
   --Master Inv Organization
   l_cur_mfg_org_id   NUMBER                      := 207;
--Current Inv Organization
BEGIN
   --Initialize first, or create_by will be -1
   fnd_global.apps_initialize (user_id           => l_user_id,
                               resp_id           => 50583,
                               resp_appl_id      => 401
                              );
   --Item
   l_item_rec.item_number := 'MON_TEST_ITEM_0002';
   l_item_rec.description := 'For API Test';
   l_item_rec.primary_uom_code := 'Ea';
   --Master Inv Organization first, then Current Inv Organization
   --l_item_rec.organization_id := l_mst_mfg_org_id;
   l_item_rec.organization_id := l_cur_mfg_org_id;
   --API
   inv_item_grp.create_item (p_commit             => fnd_api.g_false,
                             p_item_rec           => l_item_rec,
                             x_item_rec           => x_item_rec,
                             x_return_status      => x_return_status,
                             x_error_tbl          => x_error_tbl,
                             p_template_id        => l_template_id
                            );

   --Result
   IF x_return_status <> fnd_api.g_ret_sts_success
   THEN
      ROLLBACK;

      FOR i IN 1 .. x_error_tbl.COUNT
      LOOP
         DBMS_OUTPUT.put_line (   'Transaction ID   :'
                               || x_error_tbl (i).transaction_id
                              );
         DBMS_OUTPUT.put_line (   'Unique ID           :'
                               || x_error_tbl (i).unique_id
                              );
         DBMS_OUTPUT.put_line (   'Message Name  :'
                               || x_error_tbl (i).message_name
                              );
         DBMS_OUTPUT.put_line (   'Message Text:     :'
                               || x_error_tbl (i).MESSAGE_TEXT
                              );
         DBMS_OUTPUT.put_line (   'Table Name        :'
                               || x_error_tbl (i).table_name
                              );
         DBMS_OUTPUT.put_line ('Column Name   :'
                               || x_error_tbl (i).column_name
                              );
         DBMS_OUTPUT.put_line (   'Organization ID :'
                               || x_error_tbl (i).organization_id
                              );
      END LOOP;

      IF (x_return_status = fnd_api.g_ret_sts_unexp_error)
      THEN
         RAISE fnd_api.g_exc_unexpected_error;
      ELSIF (x_return_status = fnd_api.g_ret_sts_error)
      THEN
         RAISE fnd_api.g_exc_error;
      END IF;
   ELSE
      COMMIT;
      DBMS_OUTPUT.put_line (x_item_rec.inventory_item_id);
   END IF;

   COMMIT;
END;

--******************************************************************************
--use API Update Item flag

DECLARE
   l_item_rec         inv_item_grp.item_rec_type;
   x_item_rec         inv_item_grp.item_rec_type;
   x_error_tbl        inv_item_grp.error_tbl_type;
   x_return_status    VARCHAR2 (1);
   l_user_id          NUMBER                      := 1318;
   --User ID, Sysadmin here
   l_cur_mfg_org_id   NUMBER                      := 208;
--Current Inv Organization
BEGIN
   --Initialize first, or create_by will be -1
   fnd_global.apps_initialize (user_id           => l_user_id,
                               resp_id           => 50583,
                               resp_appl_id      => 401
                              );
   --Item
   l_item_rec.item_number := '100E033L';
   l_item_rec.inventory_item_status_code := 'Inactive';      --Active Inactive
   --Master Inv Organization first, then Current Inv Organization
   l_item_rec.organization_id := l_cur_mfg_org_id;
   --API
   inv_item_grp.update_item (p_commit             => fnd_api.g_false,
                             p_item_rec           => l_item_rec,
                             x_item_rec           => x_item_rec,
                             x_return_status      => x_return_status,
                             x_error_tbl          => x_error_tbl
                            );

   --Result
   IF x_return_status <> fnd_api.g_ret_sts_success
   THEN
      ROLLBACK;

      FOR i IN 1 .. x_error_tbl.COUNT
      LOOP
         DBMS_OUTPUT.put_line (   'Transaction ID   :'
                               || x_error_tbl (i).transaction_id
                              );
         DBMS_OUTPUT.put_line (   'Unique ID           :'
                               || x_error_tbl (i).unique_id
                              );
         DBMS_OUTPUT.put_line (   'Message Name  :'
                               || x_error_tbl (i).message_name
                              );
         DBMS_OUTPUT.put_line (   'Message Text:     :'
                               || x_error_tbl (i).MESSAGE_TEXT
                              );
         DBMS_OUTPUT.put_line (   'Table Name        :'
                               || x_error_tbl (i).table_name
                              );
         DBMS_OUTPUT.put_line ('Column Name   :'
                               || x_error_tbl (i).column_name
                              );
         DBMS_OUTPUT.put_line (   'Organization ID :'
                               || x_error_tbl (i).organization_id
                              );
      END LOOP;

      IF (x_return_status = fnd_api.g_ret_sts_unexp_error)
      THEN
         RAISE fnd_api.g_exc_unexpected_error;
      ELSIF (x_return_status = fnd_api.g_ret_sts_error)
      THEN
         RAISE fnd_api.g_exc_error;
      END IF;
   ELSE
      COMMIT;
      DBMS_OUTPUT.put_line (x_item_rec.item_number);
   END IF;
END;

### 关于SAP S/4HANA中的开放项迁移 在讨论SAP S/4HANA的开放项迁移(Open Item Migration)时,需关注其业务场景推荐工具以及最佳实践方法。通过访问SAP官方提供的 **S/4HANA Business Scenario Recommendation 工具**[^1],可以获取针对特定行业和需求量身定制的建议方案。 #### 开放项迁移的关键概念 开放项通常指未清账项或待处理财务记录,在迁移到SAP S/4HANA的过程中需要特别注意数据一致性和准确性。为了实现这一目标,企业应采用以下策略: - 数据清理:在迁移之前执行全面的数据质量评估并清除冗余或不必要项目。 - 测试环境准备:创建独立测试实例来模拟实际生产条件下的迁移过程,从而验证流程的有效性。 - 自动化脚本开发:利用ABAP编程或其他自动化手段简化重复操作步骤,提高效率的同时减少人为错误风险。 以下是用于管理此类任务的一个简单示例程序片段: ```abap REPORT z_open_item_migration. DATA: lt_open_items TYPE TABLE OF /sfi/openitem, ls_open_item LIKE LINE OF lt_open_items. SELECT * FROM /sfi/openitem INTO TABLE @lt_open_items WHERE company_code = 'YOUR_COMPANY_CODE'. LOOP AT lt_open_items INTO ls_open_item. " Process each open item record here ENDLOOP. ``` 此代码仅作为起点供参考;具体实施细节可能依据客户的具体情况有所调整。 #### 平台兼容性与未来展望 随着商业智能(BI)平台被赋予更多样化的数据分析职责[^2],选择具备高度开放性的解决方案变得尤为重要。根据Gartner发布的《2020年分析与BI平台魔力象限》报告指出,“厂商产品愿景”的开放程度是一个核心考量因素[^3]。对于计划升级至最新版本的企业而言,确保所选技术栈能够无缝对接第三方应用将是长期成功的重要保障之一。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值