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

📄 c_uom_convert.sql

📁 Java写的ERP系统
💻 SQL
字号:
CREATE OR REPLACE FUNCTION C_UOM_Convert
(
	p_Qty				IN	NUMBER,
	p_UOMFrom_ID		IN	NUMBER,
	p_UOMTo_ID			IN	NUMBER,
	p_StdPrecision		IN 	VARCHAR -- DEFAULT 'Y'
)
RETURN NUMBER
/*************************************************************************
 * 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+CPM
 * Copyright (C) 1999-2001 Jorg Janke, ComPiere, Inc. All Rights Reserved.
 *************************************************************************
 * $Id: C_UOM_Convert.sql,v 1.3 2002/10/21 04:49:45 jjanke Exp $
 ***
 * Title:	Convert Quantity
 * Description:
 *		from UOMFrom_ID to UOMTo_ID
 *		standard or costing precision based on target UOM
 * Test:
 *		SELECT C_UOM_Convert (11,101,102, 'Y') FROM DUAL => 1.38
 ************************************************************************/
AS
	v_Result			NUMBER := NULL;
	v_Rate				NUMBER := NULL;
	v_StdPrecision		NUMBER;
	v_CostingPrecision	NUMBER;
BEGIN
	--	Nothing to do
	IF (p_UOMFrom_ID = p_UOMTo_ID 
			OR p_UOMFrom_ID IS NULL OR p_UOMTo_ID IS NULL
			OR p_Qty IS NULL OR p_Qty = 0) THEN
		RETURN p_Qty;
	END IF;

	--	Get Multiply Rate
	BEGIN
		SELECT	MultiplyRate
		  INTO	v_Rate
		FROM	C_UOM_Conversion
		WHERE	C_UOM_ID=p_UOMFrom_ID AND C_UOM_TO_ID=p_UOMTo_ID;
		--	We have it
		v_Result := p_Qty * v_Rate;
	EXCEPTION
		WHEN OTHERS THEN NULL;
	END;

	--	Get Divide Rate
	IF (v_Result IS NULL) THEN
		BEGIN
			SELECT	DivideRate
			  INTO	v_Rate
			FROM	C_UOM_Conversion
			WHERE	C_UOM_ID=p_UOMFrom_ID AND C_UOM_TO_ID=p_UOMTo_ID;
			--	We have it
			v_Result := p_Qty / v_Rate;
		EXCEPTION
			WHEN OTHERS THEN NULL;
		END;
	END IF;

	--	Round
	IF (v_Result IS NOT NULL) THEN
		BEGIN
			SELECT	StdPrecision, CostingPrecision
			  INTO	v_StdPrecision, v_CostingPrecision
			FROM C_UOM
			WHERE C_UOM_ID=p_UOMTo_ID;
			--	We have a precision
			IF (p_StdPrecision = 'Y') THEN
				v_Result := ROUND(v_Result, v_StdPrecision);
			ELSE
				v_Result := ROUND(v_Result, v_CostingPrecision);
			END IF;
		EXCEPTION
			WHEN OTHERS THEN NULL;
		END;
	END IF;

	RETURN v_Result;
END C_UOM_Convert;
/

⌨️ 快捷键说明

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