This document describes procedures for updating finished goods (FG) standard costs in the ORION ERP system. It includes:
1. A procedure that runs every 3 minutes to insert FG standard costs for items without a cost, using data from production orders.
2. A procedure to insert a new FG standard cost record based on item code, grade, and shade. It calculates costs based on chip and conversion costs.
3. A procedure to update the chip cost field in existing FG standard cost records based on current chip valuation costs.
1. FG Costing update in ORION ERP.
For FG standard cost for AX grade inputted by the finance team in below window.
Menu Path- Mgt Customised costing sheet for PTY/POY/ITY/ACY.
For all other grade system will input entry using this procedure STD_FG_VALUE_INSERT.
In system, we have scheduled a procedure (STD_FG_COST_UPD_PRD) to run on interval of 3
minutes.
You can see it using this command.
Select * from all_jobs.
Note:- when the production is generated and that combination of item with grade and
shade code are not available in Standard costing sheet ,system will send daily alert of
pending item for costing.
2. 1. CREATE OR REPLACE PROCEDURE MGTDAT.STD_FG_COST_UPD_PRD AS
CURSOR C1 IS
SELECT DISTINCT
ADJI_ITEM_CODE,adji_item_desc,ADJI_GRADE_CODE_1,ADJI_GRADE_CODE_2
FROM OT_ADJ_HEAD,OT_ADJ_ITEM
WHERE ADJI_ADJH_SYS_ID=ADJH_SYS_ID
AND TRUNC(ADJH_DT) between'01-JUL-2015' and TRUNC(SYSDATE)
AND ADJH_TXN_CODE='INVADJ'
AND NVL(ADJI_RATE,0)<=0
AND ADJH_POST_STATUS IS NULL
AND NOT EXISTS
(SELECT * FROM OT_STD_COST_PRODUCTS_MGT WHERE
ADJI_ITEM_CODE = FG_ITEM_CODE AND
ADJI_GRADE_CODE_1 = FG_ITEM_GRADE AND
ADJI_GRADE_CODE_2 = FG_ITEM_SHADE
);
BEGIN
IF C1%ISOPEN THEN
CLOSE C1;
END IF;
FOR R1 IN C1 LOOP
MGTDAT.STD_FG_VALUE_INSERT (R1.ADJI_ITEM_CODE, R1.ADJI_GRADE_CODE_1,
R1.ADJI_GRADE_CODE_2);
END LOOP;
END;
/
2. CREATE OR REPLACE PROCEDURE MGTDAT.STD_FG_VALUE_INSERT(P_ITEM_CODE
VARCHAR2,P_GRADE_CODE VARCHAR2,P_SHADE_CODE VARCHAR2) AS
M_FG_ITEM_CODE OT_STD_COST_PRODUCTS_MGT.FG_ITEM_CODE%TYPE;
M_FG_ITEM_NAME OT_STD_COST_PRODUCTS_MGT.FG_ITEM_NAME%TYPE;
M_FG_CONVER_COST OT_STD_COST_PRODUCTS_MGT.FG_CONVER_COST%TYPE;
M_FG_SHADE_NAME OT_STD_COST_PRODUCTS_MGT.FG_SHADE_NAME%TYPE;
M_FG_CHP_ITEM_CODE OT_STD_COST_PRODUCTS_MGT.FG_CHP_ITEM_CODE%TYPE;
M_FG_CHP_CON_KG OT_STD_COST_PRODUCTS_MGT.FG_CHP_CON_KG%TYPE;
M_FG_CHP_COST OT_STD_COST_PRODUCTS_MGT.FG_CHP_COST%TYPE;
M_FG_COST_PER_KG OT_STD_COST_PRODUCTS_MGT.FG_COST_PER_KG%TYPE;
M_FG_ITEM_TYPE OT_STD_COST_PRODUCTS_MGT.FG_ITEM_TYPE%TYPE;
M_ITEM_GRADE_CODE OT_STD_COST_PRODUCTS_MGT.FG_ITEM_GRADE%TYPE;
M_ITEM_SHADE OT_STD_COST_PRODUCTS_MGT.FG_ITEM_SHADE%TYPE;
M_ITEM_VALUE NUMBER;
M_ITEM_STD_VAL NUMBER:=0;
M_CONVER_COST NUMBER;
P_CONVER_COST NUMBER;
P_FLAG NUMBER;
P_FLAG_FOUND NUMBER;
M_CGCV_COST NUMBER;
FG_SHADE_NAME VARCHAR2(200);
FG_ITEM_NAME VARCHAR2(200);
M_FG_PRD_PER_DAY NUMBER;
CURSOR C1 IS
SELECT FG_ITEM_CODE, FG_ITEM_NAME, FG_CONVER_COST, FG_SHADE_NAME,
FG_CHP_ITEM_CODE, FG_CHP_CON_KG, FG_CHP_COST, FG_COST_PER_KG,
FG_ITEM_TYPE,NVL(FG_MS_BATCH_ITEM,0) FROM OT_STD_COST_PRODUCTS_MGT
3. WHERE FG_ITEM_GRADE ='AX' AND FG_ITEM_CODE = P_ITEM_CODE
AND FG_ITEM_SHADE = P_SHADE_CODE;
BEGIN
SELECT ROUND(SUM(CGCV_VALUE_1)/SUM(CGCV_STK_QTY_BU/1000),3) INTO
M_CGCV_COST
FROM OS_COST_GROUP_CURR_VAL WHERE CGCV_ITEM_CODE='CHP0000030' AND
CGCV_GRADE_CODE_2 IN ('APF','IND','SLD','SPL','SGP');
--Manually add the chip grade code 2, if it is belong to new supplier. If
not set then all chip cost goes wrong and fg cost is wrong.
SELECT GRADE_NAME INTO FG_SHADE_NAME FROM OM_GRADE_CODE_2 WHERE
GRADE_CODE=P_SHADE_CODE;
SELECT ITEM_NAME INTO FG_ITEM_NAME FROM OM_ITEM WHERE ITEM_CODE =
P_ITEM_CODE;
M_FG_ITEM_CODE:=P_ITEM_CODE;
M_ITEM_GRADE_CODE :=P_GRADE_CODE ;
M_ITEM_SHADE :=P_SHADE_CODE;
IF C1%ISOPEN THEN
CLOSE C1;
END IF;
OPEN C1;
FETCH C1 INTO M_FG_ITEM_CODE, M_FG_ITEM_NAME, M_FG_CONVER_COST,
M_FG_SHADE_NAME,
M_FG_CHP_ITEM_CODE, M_FG_CHP_CON_KG, M_FG_CHP_COST, M_FG_COST_PER_KG,
M_FG_ITEM_TYPE ,M_FG_PRD_PER_DAY;
IF C1%FOUND THEN
P_FLAG:=1;
ELSE
P_FLAG:=0;
END IF;
CLOSE C1;
SELECT FG_CONVER_COST INTO P_CONVER_COST FROM OT_STD_COST_PRODUCTS_MGT
WHERE FG_ITEM_GRADE ='AX' AND FG_ITEM_CODE = 'PTY0000138'
AND FG_ITEM_SHADE ='NL' ; -- FOR DSD/OSD
IF SUBSTR(M_FG_ITEM_CODE,0,3) ='PTY' THEN -- FOR POY
IF P_SHADE_CODE IN ('NL','Z114S','Z414S','IR453') THEN -- FOR SD/BSD
PRODUCT
IF P_GRADE_CODE ='AE' THEN
M_ITEM_VALUE:= 0;
ELSIF P_GRADE_CODE ='AM' THEN
M_ITEM_VALUE:= 0.05;
ELSIF P_GRADE_CODE IN ('B','C') THEN
M_ITEM_VALUE:= 0.25;
ELSIF P_GRADE_CODE IN ('JLT','RW') THEN
M_ITEM_VALUE:= 0.35;
END IF;
ELSE
4. IF P_GRADE_CODE IN('AE','AM') THEN
M_ITEM_VALUE:= 0;
ELSIF P_GRADE_CODE IN ('B','C','JLT','RW') THEN
M_FG_CONVER_COST := P_CONVER_COST;
M_ITEM_VALUE:= 0;
END IF;
END IF;
END IF;
IF SUBSTR(M_FG_ITEM_CODE,0,3) ='ACY' THEN -- FOR ACY PRODUCT
IF P_GRADE_CODE IN('AE','AM') THEN
M_ITEM_VALUE:= 0;
ELSIF P_GRADE_CODE IN ('B','C','JLT') THEN
M_FG_CONVER_COST := P_CONVER_COST;
M_ITEM_VALUE:= 0;
END IF;
END IF;
IF SUBSTR(M_FG_ITEM_CODE,0,3) ='ITY' THEN -- FOR ITY PRODUCT
IF P_GRADE_CODE IN('AE','AM') THEN
M_ITEM_VALUE:= 0;
ELSIF P_GRADE_CODE IN ('B','C') THEN
M_ITEM_VALUE:= 0.25;
ELSIF P_GRADE_CODE IN ('JLT') THEN
M_ITEM_VALUE:= 0.35;
END IF;
END IF;
IF SUBSTR(M_FG_ITEM_CODE,0,3) ='POY' THEN -- FOR POY
IF P_GRADE_CODE IN ('B','B1','BB','B2','C','JLT') THEN
M_FG_ITEM_NAME :=FG_ITEM_NAME;
M_FG_CONVER_COST := 0;
M_FG_SHADE_NAME := FG_SHADE_NAME;
M_FG_CHP_ITEM_CODE := 'REG';
M_FG_CHP_CON_KG:=1;
M_FG_CHP_COST := M_CGCV_COST ;
M_FG_ITEM_TYPE:=SUBSTR(P_ITEM_CODE,0,3);
M_ITEM_VALUE:= 0;
P_FLAG:=1;
END IF;
IF P_GRADE_CODE LIKE 'A%' THEN
M_ITEM_VALUE:= 0;
END IF;
END IF;
M_CONVER_COST := ROUND(NVL(M_FG_CONVER_COST - (M_ITEM_VALUE*100),0),2);
M_ITEM_STD_VAL := ROUND((M_FG_CHP_COST * M_FG_CHP_CON_KG) +
(M_CONVER_COST/100),3);
IF P_FLAG <> 0 THEN
5. INSERT INTO OT_STD_COST_PRODUCTS_MGT(FG_ITEM_CODE, FG_ITEM_NAME,
FG_CONVER_COST, FG_ITEM_GRADE, FG_ITEM_SHADE, FG_SHADE_NAME,
FG_CHP_ITEM_CODE,
FG_CHP_CON_KG, FG_CHP_COST, FG_COST_PER_KG, FG_MS_BATCH_ITEM,
FG_ITEM_CR_DT, FG_ITEM_CR_UID, FG_ITEM_TYPE)
VALUES( M_FG_ITEM_CODE,
M_FG_ITEM_NAME,M_CONVER_COST,M_ITEM_GRADE_CODE,P_SHADE_CODE,
M_FG_SHADE_NAME, M_FG_CHP_ITEM_CODE,
M_FG_CHP_CON_KG, M_FG_CHP_COST,M_ITEM_STD_VAL
,M_FG_PRD_PER_DAY,SYSDATE,'SYSADMIN',M_FG_ITEM_TYPE);
END IF;
COMMIT;
END ;
/
3. CREATE OR REPLACE PROCEDURE MGTDAT.CHP_WAC_UPD
AS
M_CGCV_COST NUMBER;
M_STD_CHP_COST NUMBER;
M_CGCV_COST_BRT NUMBER;
M_STD_CHP_COST_BRT NUMBER;
-- Written by jitendra IT MGT ,for update the stand costing table fo chip
wac feild.
BEGIN
SELECT ROUND(SUM(CGCV_VALUE_1)/SUM(CGCV_STK_QTY_BU/1000),3) INTO
M_CGCV_COST
FROM OS_COST_GROUP_CURR_VAL WHERE CGCV_ITEM_CODE='CHP0000030' AND
CGCV_GRADE_CODE_2 IN ('APF','IND','SLD','SPL','SGP');
SELECT ROUND(SUM(CGCV_VALUE_1)/SUM(CGCV_STK_QTY_BU/1000),3) INTO
M_CGCV_COST_BRT
FROM OS_COST_GROUP_CURR_VAL WHERE CGCV_ITEM_CODE='CHP0000031' AND
CGCV_GRADE_CODE_2 IN ('APF','IND','SLD','SPL','SGP');
--Manually add the chip grade code 2, if it is belong to new supplier. If
not set then all chip cost goes wrong and fg cost is wrong.
UPDATE OT_STD_COST_PRODUCTS_MGT
SET FG_CHP_COST= ROUND(NVL(M_CGCV_COST,0),3)
WHERE FG_ITEM_CODE IS NOT NULL
AND FG_CHP_ITEM_CODE='REG'
AND FG_ITEM_TYPE IN ('POY','PTY','ACY','ITY');
--END IF;
--IF M_CGCV_COST_BRT <>M_STD_CHP_COST_BRT THEN
UPDATE OT_STD_COST_PRODUCTS_MGT
SET FG_CHP_COST= ROUND(NVL(M_CGCV_COST_BRT,0),3)
WHERE FG_ITEM_CODE IS NOT NULL
AND FG_CHP_ITEM_CODE='BRT'
AND FG_ITEM_TYPE IN ('POY','PTY','ACY','ITY');
--END IF;