日記帳導入API

PROCEDURE IMPORT_GL_INTERFACE IS
CURSOR CUR_GL_TEMP IS
SELECT GL.REFERENCE1, --批名
GL.REFERENCE2, --批說明
GL.GL_NAME, --日記帳
GL.DESCRIPTION, --日記帳說明
GL.SET_BOOK_NAME, --分類帳套
GL.PERIOD_NAME, --期間
GL.DATE_CREATED, --建立時間
GL.CURRENCY_CODE, --幣別
TRIM(GL.CODE_COMBINATIONS) CODE_COMBINATIONS, --帳戶
GL.ACCOUNTED_DR, --借項
GL.ACCOUNTED_CR, --貸項
GL.LINE_DESCRIPTION, --行說明
GL.CE_FLOW --現金流
FROM GL.GL_INTERFACE_TEMP GL;
E_CHECK_HEADER_FAILURE EXCEPTION;
V_LEDGER_COUNT NUMBER := 0;
V_SET_BOOK_NAME VARCHAR2(100);
V_ERR_MESSAGE VARCHAR2(100);
L_SET_OF_BOOKS_ID NUMBER := 0;
L_IFACE_REC GL_INTERFACE%ROWTYPE;
V_PERIOD_COUNT NUMBER := 0;
V_PERIOD_NAME VARCHAR2(100);
L_COUNT NUMBER := 0;
L_REQUEST_ID NUMBER;
--L_SET_OF_BOOKS_ID NUMBER := 2052;
L_USER_JE_SOURCE_NAME GL_JE_SOURCES_TL.USER_JE_SOURCE_NAME%TYPE := 'Manual';
L_USER_JE_CATEGORY_NAME GL_JE_CATEGORIES_TL.USER_JE_CATEGORY_NAME%TYPE := '記帳憑證';
L_JE_SOURCE_NAME GL_JE_SOURCES_TL.JE_SOURCE_NAME%TYPE;
L_INTERFACE_RUN_ID NUMBER;
L_RESP_ID NUMBER;
L_RESP_APPL_ID NUMBER;
V_SUM_DR NUMBER;
V_SUM_CR NUMBER;
V_GROUP_ID NUMBER;
L_CURRENCY_COUNT NUMBER;
L_CURRENCY_CODE VARCHAR2(100);
V_REFERENCE1_COUNT NUMBER;
V_REFERENCE1 VARCHAR2(100);
V_REFERENCE2 VARCHAR2(100);
V_NAME_COUNT NUMBER;
L_DATE_COUNT NUMBER;
L_DATE_CREATED DATE;
L_DESCRIPTION VARCHAR2(100); --公司
L_FLEX_COUNT NUMBER;
BEGIN
DELETE FROM CUX_IMPORT_DATA_ERROR WHERE COLUMN_VALUES = '日記帳導入';
COMMIT;
BEGIN
--驗證批
BEGIN
--驗證是否只有一個批
SELECT COUNT(DISTINCT REFERENCE1)
INTO V_REFERENCE1_COUNT
FROM GL.GL_INTERFACE_TEMP CWI;
IF V_REFERENCE1_COUNT <> 1 THEN
V_ERR_MESSAGE := V_ERR_MESSAGE || '-導入數據只能是一個批,不能爲多個批-';
RAISE E_CHECK_HEADER_FAILURE;
ELSE
--獲取批
SELECT TRIM(REFERENCE1), TRIM(REFERENCE2)
INTO V_REFERENCE1, V_REFERENCE2
FROM GL.GL_INTERFACE_TEMP CWI
WHERE ROWNUM = 1;
END IF;
END;
BEGIN
--總體驗證
--驗證是否只有一個帳套
SELECT COUNT(DISTINCT SET_BOOK_NAME)
INTO V_LEDGER_COUNT
FROM GL.GL_INTERFACE_TEMP CWI;
IF V_LEDGER_COUNT <> 1 THEN
V_ERR_MESSAGE := V_ERR_MESSAGE || '-導入數據只能是一個帳套,不能爲多個帳套-';
RAISE E_CHECK_HEADER_FAILURE;
ELSE
--獲取帳套
SELECT SET_BOOK_NAME
INTO V_SET_BOOK_NAME
FROM GL.GL_INTERFACE_TEMP CWI
WHERE ROWNUM = 1;
END IF;
END;
--取帳套ID
BEGIN
SELECT LEDGER_ID, DESCRIPTION
INTO L_SET_OF_BOOKS_ID, L_DESCRIPTION
FROM GL_LEDGERS
WHERE NAME = V_SET_BOOK_NAME;
EXCEPTION
WHEN OTHERS THEN
V_ERR_MESSAGE := V_ERR_MESSAGE || '-不存在這個帳套-' || V_SET_BOOK_NAME;
RAISE E_CHECK_HEADER_FAILURE;
END;
BEGIN
--總體驗證
--驗證是否只有一個帳套
SELECT COUNT(DISTINCT PERIOD_NAME)
INTO V_PERIOD_COUNT
FROM GL.GL_INTERFACE_TEMP CWI;
IF V_PERIOD_COUNT <> 1 THEN
V_ERR_MESSAGE := V_ERR_MESSAGE || '-導入數據只能是一個期間,不能爲多個期間-';
RAISE E_CHECK_HEADER_FAILURE;
ELSE
--獲取期間
SELECT PERIOD_NAME
INTO V_PERIOD_NAME
FROM GL.GL_INTERFACE_TEMP CWI
WHERE ROWNUM = 1;
END IF;
END;
--驗證幣別
BEGIN
--總體驗證
--驗證是否只有一個幣別
SELECT COUNT(DISTINCT CURRENCY_CODE)
INTO L_CURRENCY_COUNT
FROM GL.GL_INTERFACE_TEMP CWI;
IF L_CURRENCY_COUNT <> 1 THEN
V_ERR_MESSAGE := V_ERR_MESSAGE || '-導入數據只能是一個幣別,不能爲多個幣別-';
RAISE E_CHECK_HEADER_FAILURE;
ELSE
--獲取幣別
SELECT CURRENCY_CODE
INTO L_CURRENCY_CODE
FROM GL.GL_INTERFACE_TEMP CWI
WHERE ROWNUM = 1;
--是否有效
SELECT COUNT(*)
INTO L_CURRENCY_COUNT
FROM GL_CURRENCIES GC
WHERE ENABLED_FLAG = 'Y'
AND GC.CURRENCY_CODE = L_CURRENCY_CODE;
IF L_CURRENCY_COUNT = 0 THEN
V_ERR_MESSAGE := V_ERR_MESSAGE || '-導入數據幣別是無效的-';
RAISE E_CHECK_HEADER_FAILURE;
END IF;
END IF;
END;
--判斷GL期間是否打開
BEGIN
SELECT COUNT(*)
INTO L_COUNT
FROM GL_PERIOD_STATUSES
WHERE SET_OF_BOOKS_ID = L_SET_OF_BOOKS_ID
AND CLOSING_STATUS = 'O' --打開狀態
AND PERIOD_NAME = V_PERIOD_NAME; --期間
IF L_COUNT = 0 THEN
V_ERR_MESSAGE := V_ERR_MESSAGE || '-期間-' || V_PERIOD_NAME ||
'不是打開狀態';
RAISE E_CHECK_HEADER_FAILURE;
ELSE
L_IFACE_REC.PERIOD_NAME := V_PERIOD_NAME;
END IF;
END;
--日期
BEGIN
--總體驗證
--驗證是否只有一個幣別
SELECT COUNT(DISTINCT DATE_CREATED)
INTO L_DATE_COUNT
FROM GL.GL_INTERFACE_TEMP CWI;
IF L_CURRENCY_COUNT <> 1 THEN
V_ERR_MESSAGE := V_ERR_MESSAGE || '-導入數據只能是一個有效日期,不能爲多個有效日期-';
RAISE E_CHECK_HEADER_FAILURE;
ELSE
--獲取有效日期
SELECT DATE_CREATED
INTO L_DATE_CREATED
FROM GL.GL_INTERFACE_TEMP CWI
WHERE ROWNUM = 1;
SELECT COUNT(*)
INTO L_COUNT
FROM GL_PERIOD_STATUSES T
WHERE SET_OF_BOOKS_ID = L_SET_OF_BOOKS_ID
AND CLOSING_STATUS = 'O' --打開狀態
AND PERIOD_NAME = V_PERIOD_NAME
AND T.START_DATE <= L_DATE_CREATED
AND T.END_DATE >= L_DATE_CREATED; --期間
IF L_COUNT = 0 THEN
V_ERR_MESSAGE := V_ERR_MESSAGE || '-導入有效日期和期間不在同個範圍內-';
RAISE E_CHECK_HEADER_FAILURE;
END IF;
END IF;
END;
--借項是否等於貸項
BEGIN
--總體驗證
SELECT SUM(round(NVL(CWI.ACCOUNTED_DR, 0),2)), SUM(round(NVL(CWI.ACCOUNTED_CR, 0),2))
INTO V_SUM_DR, V_SUM_CR
FROM GL.GL_INTERFACE_TEMP CWI;
IF V_SUM_DR <> V_SUM_CR THEN
V_ERR_MESSAGE := V_ERR_MESSAGE || '-借項不等於貸項-';
RAISE E_CHECK_HEADER_FAILURE;
END IF;
END;
FND_GLOBAL.SET_NLS_CONTEXT('AMERICAN');
SELECT FAP.APPLICATION_ID
INTO L_RESP_APPL_ID
FROM FND_APPLICATION FAP
WHERE FAP.APPLICATION_SHORT_NAME = 'SQLGL';
-- DBMS_OUTPUT.PUT_LINE('l_resp_appl_id:=' || L_RESP_APPL_ID);
--這部分是爲了肯定模擬登錄中職責ID
SELECT FR.RESPONSIBILITY_ID
INTO L_RESP_ID
FROM FND_RESPONSIBILITY_TL FR
WHERE FR.RESPONSIBILITY_NAME = '40ZZDQ_GL_SUPERUSER' --這個是我總帳職責的名字
AND FR.APPLICATION_ID = L_RESP_APPL_ID
AND FR.LANGUAGE = 'ZHS';
-- DBMS_OUTPUT.PUT_LINE('l_resp_id:=' || L_RESP_ID);
FND_GLOBAL.APPS_INITIALIZE(USER_ID => 4467, --FND_GLOBAL.USER_ID,
RESP_ID => L_RESP_ID,
RESP_APPL_ID => L_RESP_APPL_ID);
--日記帳
--頭說明
BEGIN
SELECT DESCRIPTION
INTO L_IFACE_REC.REFERENCE5
FROM GL.GL_INTERFACE_TEMP CWI
WHERE ROWNUM = 1;
EXCEPTION
WHEN OTHERS THEN
L_IFACE_REC.REFERENCE5 := NULL;
END;
SELECT GL_INTERFACE_CONTROL_S.NEXTVAL INTO V_GROUP_ID FROM DUAL;
L_IFACE_REC.GROUP_ID := V_GROUP_ID;
L_IFACE_REC.STATUS := 'NEW';
L_IFACE_REC.SET_OF_BOOKS_ID := L_SET_OF_BOOKS_ID;
/*L_IFACE_REC.ACCOUNTING_DATE := SYSDATE;
L_IFACE_REC.DATE_CREATED := SYSDATE;*/
L_IFACE_REC.CREATED_BY := FND_GLOBAL.USER_ID; --FND_GLOBAL.USER_ID;
L_IFACE_REC.ACTUAL_FLAG := 'A';
L_IFACE_REC.USER_JE_SOURCE_NAME := L_USER_JE_SOURCE_NAME;
L_IFACE_REC.USER_JE_CATEGORY_NAME := L_USER_JE_CATEGORY_NAME;
L_IFACE_REC.REFERENCE1 := V_REFERENCE1;
L_IFACE_REC.REFERENCE2 := V_REFERENCE2;
-- L_IFACE_REC.REFERENCE4 :='日記帳的名字';
-- L_IFACE_REC.REFERENCE5 := '頭說明';
-- L_IFACE_REC.REFERENCE10 := '行說明';
L_IFACE_REC.CURRENCY_CODE := L_CURRENCY_CODE; -- 'CNY';
-- L_IFACE_REC.CURRENCY_CODE := 'CNY';
-- L_IFACE_REC.PERIOD_NAME := 'SEP-20';
FOR REC_GL_TEMP IN CUR_GL_TEMP LOOP
--日記帳
IF REC_GL_TEMP.GL_NAME IS NOT NULL THEN
L_IFACE_REC.REFERENCE4 := REC_GL_TEMP.GL_NAME;
ELSE
V_ERR_MESSAGE := V_ERR_MESSAGE || '-日記帳不能爲空-';
RAISE E_CHECK_HEADER_FAILURE;
END IF;

BEGIN
SELECT COUNT(1)
INTO L_FLEX_COUNT
FROM FND_FLEX_VALUES_VL
WHERE DESCRIPTION = L_DESCRIPTION
AND FLEX_VALUE = SUBSTR(REC_GL_TEMP.CODE_COMBINATIONS, 1, 2);
END;
IF L_FLEX_COUNT=0 then
V_ERR_MESSAGE := V_ERR_MESSAGE ||L_DESCRIPTION|| '不存在這公司以' ||
SUBSTR(REC_GL_TEMP.CODE_COMBINATIONS, 1, 2)||'開頭';
RAISE E_CHECK_HEADER_FAILURE;
END IF ;
BEGIN
SELECT CODE_COMBINATION_ID
INTO L_IFACE_REC.CODE_COMBINATION_ID
FROM GL_CODE_COMBINATIONS
WHERE SEGMENT1 || '-' || SEGMENT2 || '-' || SEGMENT3 || '-' ||
SEGMENT4 || '-' || SEGMENT5 || '-' || SEGMENT6 || '-' ||
SEGMENT7 = TRIM(REC_GL_TEMP.CODE_COMBINATIONS);
EXCEPTION
WHEN OTHERS THEN
V_ERR_MESSAGE := V_ERR_MESSAGE || '-不存在這帳戶-' ||
REC_GL_TEMP.CODE_COMBINATIONS;
RAISE E_CHECK_HEADER_FAILURE;
END;
IF REC_GL_TEMP.DATE_CREATED IS NULL THEN
V_ERR_MESSAGE := V_ERR_MESSAGE || '-日期不能爲空-' ||
REC_GL_TEMP.DATE_CREATED;
RAISE E_CHECK_HEADER_FAILURE;
ELSE
L_IFACE_REC.ACCOUNTING_DATE := REC_GL_TEMP.DATE_CREATED;
L_IFACE_REC.DATE_CREATED := SYSDATE;
END IF;
IF NVL(REC_GL_TEMP.ACCOUNTED_DR, 0) <> 0 AND
NVL(REC_GL_TEMP.ACCOUNTED_CR, 0) = 0 THEN
--借方
L_IFACE_REC.ENTERED_DR := round(nvl(REC_GL_TEMP.ACCOUNTED_DR,0),2);
L_IFACE_REC.ACCOUNTED_DR := round(nvl(REC_GL_TEMP.ACCOUNTED_DR,0),2);
L_IFACE_REC.ENTERED_CR := NULL;
L_IFACE_REC.ACCOUNTED_CR := NULL;

L_IFACE_REC.DATE_CREATED := TO_DATE(REC_GL_TEMP.DATE_CREATED);
L_IFACE_REC.REFERENCE10 := REC_GL_TEMP.LINE_DESCRIPTION; --行說明
ELSIF NVL(REC_GL_TEMP.ACCOUNTED_DR, 0) = 0 AND
NVL(REC_GL_TEMP.ACCOUNTED_CR, 0) <> 0 THEN
--貸方
L_IFACE_REC.ENTERED_DR := NULL;
L_IFACE_REC.ACCOUNTED_DR := NULL;
L_IFACE_REC.ENTERED_CR := round(nvl(REC_GL_TEMP.ACCOUNTED_CR,0),2);
L_IFACE_REC.ACCOUNTED_CR := round(nvl(REC_GL_TEMP.ACCOUNTED_CR,0),2);
L_IFACE_REC.DATE_CREATED := TO_DATE(REC_GL_TEMP.DATE_CREATED);
L_IFACE_REC.REFERENCE10 := REC_GL_TEMP.LINE_DESCRIPTION; --行說明
END IF;
--獲取現金流
IF REC_GL_TEMP.CE_FLOW IS NULL THEN
IF MEG_CUX_ODD.GET_GL_MEG_ACCOUNT_ATTR1(L_IFACE_REC.CODE_COMBINATION_ID) = 'Y' THEN
V_ERR_MESSAGE := V_ERR_MESSAGE || '-銀行帳戶的現金流必輸-' ||
REC_GL_TEMP.CE_FLOW;
RAISE E_CHECK_HEADER_FAILURE;
ELSE
L_IFACE_REC.ATTRIBUTE5 := NULL;
END IF;
ELSE
BEGIN
SELECT FFV.FLEX_VALUE_MEANING
INTO L_IFACE_REC.ATTRIBUTE5
FROM FND_FLEX_VALUES_VL FFV
WHERE (FLEX_VALUE_SET_ID = 1013011)
AND FFV.DESCRIPTION = REC_GL_TEMP.CE_FLOW;
EXCEPTION
WHEN OTHERS THEN
L_IFACE_REC.ATTRIBUTE5 := NULL;
END;
END IF;
INSERT INTO GL_INTERFACE VALUES L_IFACE_REC;
END LOOP;
SELECT MAX(JES.JE_SOURCE_NAME)
INTO L_JE_SOURCE_NAME
FROM GL_JE_SOURCES_VL JES
WHERE JES.USER_JE_SOURCE_NAME = 'Manual'; -- L_USER_JE_SOURCE_NAME;
SELECT GL_INTERFACE_CONTROL_S.NEXTVAL
INTO L_INTERFACE_RUN_ID
FROM DUAL;
GL_JOURNAL_IMPORT_PKG.POPULATE_INTERFACE_CONTROL(USER_JE_SOURCE_NAME => 'Manual',
GROUP_ID => V_GROUP_ID, --V_GROUP_ID,
SET_OF_BOOKS_ID => L_SET_OF_BOOKS_ID,
INTERFACE_RUN_ID => L_INTERFACE_RUN_ID);
INSERT INTO GL_INTERFACE_CONTROL
(JE_SOURCE_NAME,
GROUP_ID,
INTERFACE_RUN_ID,
SET_OF_BOOKS_ID,
STATUS)
VALUES
(L_JE_SOURCE_NAME,
L_IFACE_REC.GROUP_ID,
L_INTERFACE_RUN_ID,
L_SET_OF_BOOKS_ID,
'S');
COMMIT;
L_REQUEST_ID := FND_REQUEST.SUBMIT_REQUEST('SQLGL',
'GLLEZL',
'',
TO_CHAR(SYSDATE,
'YYYY/MM/DD HH24:MI:SS'),
FALSE,
L_INTERFACE_RUN_ID,
L_SET_OF_BOOKS_ID,
'N',
NULL,
NULL,
'N',
'O',
CHR(0));

COMMIT;
-- DBMS_OUTPUT.PUT_LINE('Request ID ' || L_REQUEST_ID);
EXCEPTION
WHEN E_CHECK_HEADER_FAILURE THEN
INSERT INTO CUX_IMPORT_DATA_ERROR
(ID, ERR_MESSAGE, COLUMN_VALUES)
VALUES
(1, V_ERR_MESSAGE, '日記帳導入');
END;
COMMIT;
END IMPORT_GL_INTERFACE;app

相關文章
相關標籤/搜索