-2

我想使用 Oracle 过程将数据从视图插入到表中。该视图称为VW_INVPART. 该视图由来自不同表的列组成:

(M_Product table)
AD_ORG_ID,
AD_Client_ID,
Name,
M_Product_ID,

(M_Storage table)
QtyOnHand,

(M_Replenish table)
level_min

(M_Product_PO table)
order_min

我要插入的表是M_RequisitionLine.

我的情况是有货物数量定义在QtyOnHand. QtyOnHand是动态的,因此可以根据物流进出过程进行更改。然后是定义的最低级别level_min。当商品缺货时,我们可以重新订购,并且有定义的最小订购数量order_min

因此,当数量QtyOnHand小于 level_min,我们可以在列Qty中添加数据M_RequisitionLine以请求库存。但是有最小数量要放入M_RequisitionLine.Qtyorder_min)。

如果level_min - QtyOnHand <= Order_min,则设置M_RequisitionLine.QtyOrder_min。但是,如果level_min - QtyOnHand >= Order_min,则设置为和M_RequisitionLine.Qty之间的差异。level_minQtyOnHand

我怎样才能在Oracle中制作程序?我已经尝试安排代码,但仍然感到困惑,因为我是 Oracle SQL 的新手。

4

2 回答 2

0

此功能已存在于标准 Adempiere 中。

对于产品,在产品窗口的补货选项卡上定义最小、最大和补货规则。在同一窗口的采购选项卡上,您可以为每个供应商定义最小订单数量

现在,如果您在物料管理菜单下运行补货报告,您可以运行报告并生成采购订单以根据您定义的规则完成补货,这将遵守在采购选项卡上设置的最小订单数量,

这不是一个技术解决方案,但它有效。

现在,如果您的需求是比标准更复杂的履行方法,您可以定义自定义补货规则。这是一个简单的 java 类,它必须实现接口 org.compiere.util.ReplenishInterface 并要求您实现一个函数... getQtyToOrder。

一旦你定义了你的类,你就可以在Warehouse 窗口中指定这个类。

现在,在“产品”窗口->“补货”选项卡上,您可以选择“自定义”作为“补货类型” ,该类将用于计算要补货的数量。

这种方法会更好,因为它可以保持您使用任何受支持的数据库而不仅仅是 Oracle 的能力。

于 2015-09-10T08:42:58.587 回答
0

您可以使用 case 命令以下列方式将其写入 PL/SQL 存储过程。下面是非常基本的示例。请记住,我不知道您的表的实体关系是什么或它们的 cadinality 是什么,所以我所做的很多事情都是基于奇异值假设。如果选择数据返回多于一行,则必须使用 oracle 集合。

  Declare
  t  M_Storage.QtyOnHand%TYPE;
  v  M_Replenish.Level_min%TYPE;
  o  M_Product_PO.order_min%TYPE; 

Begin
SELECT QtyOnHand INTO t FROM M_Storage;
SELECT Level_min INTO v FROM M_Replenish;
SELECT Order_min INTO o FROM M_Product_PO;

CASE 
   When t-v <  o Then UPDATE M_RequisitionLine set qty = o;
   When t-v >= o then UPDATE M_RequisitionLine set qty = t-v;
END CASE;
END;
/
于 2015-09-09T13:56:34.867 回答