⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 m_product_check.sql

📁 Java写的ERP系统
💻 SQL
字号:
/*************************************************************************
 * The contents of this file are subject to the Compiere License.  You may
 * obtain a copy of the License at    http://www.compiere.org/license.html
 * Software is on an  "AS IS" basis,  WITHOUT WARRANTY OF ANY KIND, either
 * express or implied. See the License for details. Code: Compiere ERP+CRM
 * Copyright (C) 1999-2002 Jorg Janke, ComPiere, Inc. All Rights Reserved.
 *************************************************************************
 * $Id: M_Product_Check.sql,v 1.8 2003/02/09 21:55:55 jjanke Exp $
 ***
 * Title:	M_Product check
 * Description:
 *	- Activate Products with QtyOnHand/Reserved/Ordered
 *	- For M_Product create missing
 *		-	Costing Records
 *		-	Translations
 *		-	Product Tree Structure(s)
 *	- Update Product_PO Statistics
 ************************************************************************/

--	Activate Products with QtyOnHand/Reserved/Ordered
UPDATE M_Product p
	SET IsActive='Y'
WHERE IsActive='N'
  AND (SELECT NVL(SUM(QtyOnHand)+SUM(QtyReserved)*.111+SUM(QtyOrdered)*999, 0)
		FROM M_Storage s WHERE s.M_Product_ID=p.M_Product_ID) <> 0
/

--	Insert missing Costing Records
INSERT INTO M_Product_Costing
	(M_Product_ID, C_AcctSchema_ID,
	AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy,
	CurrentCostPrice, CostStandard, FutureCostPrice, 
	CostStandardPOQty,CostStandardPOAmt,CostStandardCumQty,CostStandardCumAmt,
	CostAverage, CostAverageCumQty, CostAverageCumAmt,
	PriceLastPO, PriceLastInv,
	TotalInvQty, TotalInvAmt)
SELECT	p.M_Product_ID, a.C_AcctSchema_ID,
	p.AD_Client_ID, p.AD_Org_ID, 'Y', p.Created, p.CreatedBy, SysDate, 0,
	0,0,0, 0,0,0,0, 0,0,0, 0,0, 0,0
FROM C_AcctSchema a, M_Product p
WHERE	p.AD_Client_ID=a.AD_Client_ID
  AND NOT EXISTS
	(SELECT * FROM M_Product_Costing pc 
	WHERE pc.C_AcctSchema_ID=a.C_AcctSchema_ID 
	  AND pc.M_Product_ID=p.M_Product_ID
	  AND p.AD_Client_ID=a.AD_Client_ID)
/

--	Insert missing Translations
INSERT INTO M_Product_Trl (M_Product_ID, AD_Language, AD_Client_ID, AD_Org_ID,
	IsActive, Created, CreatedBy, Updated, UpdatedBy,
	Name, DocumentNote, IsTranslated)
SELECT m.M_Product_ID, l.AD_Language, m.AD_Client_ID, m.AD_Org_ID,
	m.IsActive, m.Created, m.CreatedBy, m.Updated, m.UpdatedBy,
	m.Name, m.DocumentNote, 'N'
FROM	AD_Language l, M_Product m 
WHERE	l.IsActive = 'Y' AND l.IsSystemLanguage = 'Y'
AND	M_Product_ID || AD_Language NOT IN 
	(SELECT M_Product_ID || AD_Language FROM M_Product_Trl)
AND EXISTS (SELECT * FROM AD_Client 
	WHERE AD_Client_ID=m.AD_Client_ID AND IsMultiLingualDocument='Y');
/


--	COMMIT
COMMIT
/

--	Add missing Tree Nodes
BEGIN
	DBMS_OUTPUT.PUT_LINE('Adding to Base Product Tree');
	DECLARE
		CURSOR	Cur_Tree IS
			SELECT	*
			FROM	AD_ClientInfo;
		CURSOR Cur_Product (Client NUMBER, Tree NUMBER) IS
			SELECT *
			FROM M_Product
			WHERE M_Product_ID NOT IN 
				(SELECT Node_ID FROM AD_TreeNodePR WHERE AD_Tree_ID=Tree)
			AND AD_Client_ID=Client;
	BEGIN
		FOR CT IN Cur_Tree LOOP
			DBMS_OUTPUT.PUT_LINE('  For Tree ' || CT.AD_Tree_Product_ID
				|| ' Client=' || CT.AD_Client_ID);
			FOR CP IN Cur_Product (CT.AD_Client_ID, CT.AD_Tree_Product_ID) LOOP
				INSERT INTO AD_TreeNodePR
					(AD_Client_ID, AD_Org_ID,
					IsActive, Created, CreatedBy, Updated, UpdatedBy,
					AD_Tree_ID, Node_ID, Parent_ID, SeqNo)
				VALUES
					(CP.AD_Client_ID, CP.AD_Org_ID, 
					CP.IsActive, CP.Created, CP.CreatedBy, CP.Updated, CP.UpdatedBy,
					CT.AD_Tree_Product_ID, CP.M_Product_ID, 0, 999);
				DBMS_OUTPUT.PUT_LINE('    added: ' || CP.NAME);
			END LOOP;	-- Product Loop
		END LOOP;	--	Tree Loop
		COMMIT;
	END;	-- Adding to Tree
	COMMIT;
END;
/
--	Product_PO Update
DECLARE
	CURSOR	Cur_PO	IS
		SELECT	*
		FROM	M_Product_PO
		FOR UPDATE OF PriceLastPO, PriceLastInv;
	--
	v_PriceLastPO		NUMBER;
	v_PriceLastInv		NUMBER;
	v_no				NUMBER := 0;
BEGIN
	FOR po IN Cur_PO LOOP
		SELECT	NVL(MAX (C_Currency_Convert (ol.PriceActual, 
			o.C_Currency_ID, po.C_Currency_ID, o.DateOrdered, null)), 0)
		  INTO	v_PriceLastPO
		FROM	C_Order o, C_OrderLine ol
		WHERE	o.C_BPartner_ID=po.C_BPartner_ID
		  AND	ol.M_Product_ID=po.M_Product_ID
		  AND	o.C_Order_ID=ol.C_Order_ID
		  AND	o.IsSOTrx='N' AND ROWNUM=1
		ORDER BY o.DateOrdered DESC;

		SELECT	NVL(MAX(C_Currency_Convert (il.PriceActual,
			i.C_Currency_ID, po.C_Currency_ID, i.DateInvoiced, null)), 0)
		  INTO	v_PriceLastInv
		FROM	C_Invoice i, C_InvoiceLine il	--	no need to use _v
		WHERE	i.C_BPartner_ID=po.C_BPartner_ID
		  AND	il.M_Product_ID=po.M_Product_ID
		  AND	i.C_Invoice_ID=il.C_Invoice_ID
		  AND	i.IsSOTrx='N' AND ROWNUM=1
		ORDER BY i.DateInvoiced DESC;

		UPDATE	M_Product_PO
		  SET	PriceLastPO = v_PriceLastPO,
				PriceLastInv = v_PriceLastInv
		WHERE CURRENT OF Cur_PO;
		v_no := v_no + 1;
	END LOOP;
	COMMIT;
	DBMS_OUTPUT.PUT_LINE('Product_PO Rows=' || v_no);
END;
/

--	Product_Costing Update
DECLARE
	CURSOR	Cur_Costing	IS
		SELECT	*
		FROM	M_Product_Costing
		FOR UPDATE;
	--
	v_PriceLastPO		NUMBER;
	v_PriceLastInv		NUMBER;
	v_no				NUMBER := 0;
	v_C_Currency_ID		NUMBER;
BEGIN
	FOR c IN Cur_Costing LOOP
		--	Get Currency
		SELECT	C_Currency_ID
		  INTO	v_C_Currency_ID
		FROM	C_AcctSchema
		WHERE	C_AcctSchema_ID=c.C_AcctSchema_ID;
		--
		SELECT	NVL(MAX (C_Currency_Convert (ol.PriceActual,
			o.C_Currency_ID, v_C_Currency_ID, o.DateOrdered, null)), 0)
		  INTO	v_PriceLastPO
		FROM	C_Order o, C_OrderLine ol
		WHERE	ol.M_Product_ID=c.M_Product_ID
		  AND	o.C_Order_ID=ol.C_Order_ID
		  AND	o.IsSOTrx='N' AND ROWNUM=1
		ORDER BY o.DateOrdered DESC;

		SELECT	NVL(MAX (C_Currency_Convert (il.PriceActual,
			i.C_Currency_ID, v_C_Currency_ID, i.DateInvoiced, null)), 0)
		  INTO	v_PriceLastInv
		FROM	C_Invoice i, C_InvoiceLine il	-- no need to use _v
		WHERE	il.M_Product_ID=c.M_Product_ID
		  AND	i.C_Invoice_ID=il.C_Invoice_ID
		  AND	i.IsSOTrx='N' AND ROWNUM=1
		ORDER BY i.DateInvoiced DESC;

		UPDATE	M_Product_Costing
		  SET	PriceLastPO = v_PriceLastPO,
				PriceLastInv = v_PriceLastInv
		WHERE CURRENT OF Cur_Costing;
		v_no := v_no + 1;
	END LOOP;
	COMMIT;
	DBMS_OUTPUT.PUT_LINE('Product_Costing Rows=' || v_no);
END;
/
--	Product Costing Update
UPDATE	M_Product_Costing c
	SET	
		--	Not corrected for receipts
--		CostStandardPOAmt = 
--		(SELECT	NVL(SUM (C_Currency_Convert (ol.LineNetAmt, 
--			o.C_Currency_ID, acct.C_Currency_ID, o.DateOrdered, null)), 0)
--		FROM 	C_Order o, C_OrderLine ol, C_AcctSchema acct
--		WHERE 	o.C_Order_ID=ol.C_Order_ID
--		  AND	o.IsSOTrx='N'
--		  AND	c.C_AcctSchema_ID=acct.C_AcctSchema_ID
--		  AND	c.M_Product_ID=ol.M_Product_ID),
		--	Not corrected for Receipts
--		CostStandardPOQty =
--		(SELECT	NVL(SUM (C_UOM_Convert(ol.QtyOrdered, ol.C_UOM_ID, p.C_UOM_ID, 'N')), 0)
--		FROM 	C_Order o, C_OrderLine ol, M_Product p
--		WHERE 	o.C_Order_ID=ol.C_Order_ID
--		  AND	o.IsSOTrx='N'
--		  AND	p.M_Product_ID=ol.M_Product_ID
--		  AND	c.M_Product_ID=ol.M_Product_ID),
		--
		CostStandardCumAmt = 
		(SELECT	NVL(SUM (C_Currency_Convert (ol.LineNetAmt, 
			o.C_Currency_ID, acct.C_Currency_ID, o.DateOrdered, null)), 0)
		FROM	C_Order o, C_OrderLine ol, C_AcctSchema acct
		WHERE	o.C_Order_ID=ol.C_Order_ID
		  AND	o.IsSOTrx='N'
		  AND	c.C_AcctSchema_ID=acct.C_AcctSchema_ID
		  AND	c.M_Product_ID=ol.M_Product_ID),
		--
		CostStandardCumQty =
		(SELECT	NVL(SUM (C_UOM_Convert(ol.QtyOrdered, ol.C_UOM_ID, p.C_UOM_ID, null)), 0)
		FROM	C_Order o, C_OrderLine ol, M_Product p
		WHERE	o.C_Order_ID=ol.C_Order_ID
		  AND	o.IsSOTrx='N'
		  AND	p.M_Product_ID=ol.M_Product_ID
		  AND	c.M_Product_ID=ol.M_Product_ID),
		--	Invoice (Not corrected for receipts)
--		CostAverageCumAmt = 
--		(SELECT	NVL(SUM (C_Currency_Convert (il.LineNetAmt*i.Multiplier, 
--			i.C_Currency_ID, acct.C_Currency_ID, i.DateInvoiced, null)), 0)
--		FROM 	C_Invoice_v i, C_InvoiceLine il, C_AcctSchema acct
--		WHERE 	i.C_Invoice_ID=il.C_Invoice_ID
--		  AND	i.IsSOTrx='N'
--		  AND	c.C_AcctSchema_ID=acct.C_AcctSchema_ID
--		  AND	c.M_Product_ID=il.M_Product_ID),
		--	(Not corrected for receipts)
--		CostAverageCumQty =
--		(SELECT	NVL(SUM (C_UOM_Convert(il.QtyInvoiced*i.Multiplier, il.C_UOM_ID, p.C_UOM_ID, 'N')), 0)
--		FROM 	C_Invoice_v i, C_InvoiceLine il, M_Product p
--		WHERE 	i.C_Invoice_ID=il.C_Invoice_ID
--		  AND	i.IsSOTrx='N'
--		  AND	p.M_Product_ID=il.M_Product_ID
--		  AND	c.M_Product_ID=il.M_Product_ID),
		--
		TotalInvAmt = 
		(SELECT	NVL(SUM (C_Currency_Convert (il.LineNetAmt*i.Multiplier, 
			i.C_Currency_ID, acct.C_Currency_ID, i.DateInvoiced, null)), 0)
		FROM	C_Invoice_v i, C_InvoiceLine il, C_AcctSchema acct
		WHERE	i.C_Invoice_ID=il.C_Invoice_ID
		  AND	i.IsSOTrx='N'
		  AND	c.C_AcctSchema_ID=acct.C_AcctSchema_ID
		  AND	c.M_Product_ID=il.M_Product_ID),
		--	(UOM conversion)
		TotalInvQty =
		(SELECT	NVL(SUM (C_UOM_Convert(il.QtyInvoiced*i.Multiplier, il.C_UOM_ID, p.C_UOM_ID, 'N')), 0)
		FROM	C_Invoice_v i, C_InvoiceLine il, M_Product p
		WHERE	i.C_Invoice_ID=il.C_Invoice_ID
		  AND	i.IsSOTrx='N'
		  AND	p.M_Product_ID=il.M_Product_ID
		  AND	c.M_Product_ID=il.M_Product_ID)
/
COMMIT
/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -