DECLARE LE_API_ERROR EXCEPTION; -- ASSET TO BE RETIRED LV_ASSET_NUMBER VARCHAR2(100) DEFAULT 'TEST0912-3'; LV_BOOK_TYPE_CODE VARCHAR2(15) DEFAULT 'TJ资产帐'; --帳本 TW资产帐、TJ资产帐 LN_ASSET_ID NUMBER; LN_USER_ID NUMBER := 0; --SYSADMIN LN_COST_RETIRED NUMBER; LN_PROCEEDS_OF_SALE NUMBER := 0; --實際收入預設0 LN_COST_OF_REMOVAL NUMBER := 0; --拆遷成本預設0 LN_REQUEST_ID NUMBER; LR_TRANS_REC FA_API_TYPES.TRANS_REC_TYPE; LR_DIST_TRANS_REC FA_API_TYPES.TRANS_REC_TYPE; LR_ASSET_HDR_REC FA_API_TYPES.ASSET_HDR_REC_TYPE; LR_ASSET_RETIRE_REC FA_API_TYPES.ASSET_RETIRE_REC_TYPE; LT_ASSET_DIST_TBL FA_API_TYPES.ASSET_DIST_TBL_TYPE; LT_SUBCOMP_TBL FA_API_TYPES.SUBCOMP_TBL_TYPE; LT_INV_TBL FA_API_TYPES.INV_TBL_TYPE; LN_API_VERSION NUMBER := 1; LV_INIT_MSG_LIST VARCHAR2(1) := FND_API.G_FALSE; LV_COMMIT VARCHAR2(1) := FND_API.G_TRUE; LV_VALIDATION_LEVEL NUMBER := FND_API.G_VALID_LEVEL_FULL; LV_CALLING_FUNC VARCHAR2(80) := 'Shareoracleapps Wrapper'; LV_RETURN_STS VARCHAR2(1) := FND_API.G_FALSE; LN_MSG_CNT NUMBER := 0; LV_MESSAGE VARCHAR2(512); LN_COUNT NUMBER; I NUMBER := 0; LV_DUMMY VARCHAR2(512); LN_MESSAGE_COUNT NUMBER; CURSOR CUR_FA_ADDITION IS SELECT A.ASSET_NUMBER, A.ASSET_ID, B.COST FROM FA_ADDITIONS_B A, FA_BOOKS_V B WHERE A.ASSET_ID = B.ASSET_ID AND A.ASSET_NUMBER = LV_ASSET_NUMBER --AND A.CREATION_DATE > SYSDATE - 300 AND B.BOOK_TYPE_CODE = LV_BOOK_TYPE_CODE --AND ROWNUM < 5 AND NOT EXISTS (SELECT 1 FROM FA_RETIREMENTS FR WHERE FR.ASSET_ID = A.ASSET_ID); BEGIN FND_GLOBAL.APPS_INITIALIZE(USER_ID => 0, --SYSADMIN RESP_ID => 50244, --ACETJ_FA_KeyUser RESP_APPL_ID => 140); FOR I IN CUR_FA_ADDITION LOOP BEGIN FA_SRVR_MSG.INIT_SERVER_MESSAGE; FA_DEBUG_PKG.SET_DEBUG_FLAG(DEBUG_FLAG => 'YES'); DBMS_OUTPUT.PUT_LINE('Asset_id :' || I.ASSET_ID); LN_ASSET_ID := I.ASSET_ID; LN_COST_RETIRED := I.COST; --處分成本 = 成本 -- GET STANDARD WHO INFO LN_REQUEST_ID := FND_GLOBAL.CONC_REQUEST_ID; FND_PROFILE.GET('LOGIN_ID', LR_TRANS_REC.WHO_INFO.LAST_UPDATE_LOGIN); FND_PROFILE.GET('USER_ID', LR_TRANS_REC.WHO_INFO.LAST_UPDATED_BY); IF (LR_TRANS_REC.WHO_INFO.LAST_UPDATED_BY IS NULL) THEN LR_TRANS_REC.WHO_INFO.LAST_UPDATED_BY := -1; END IF; IF (LR_TRANS_REC.WHO_INFO.LAST_UPDATE_LOGIN IS NULL) THEN LR_TRANS_REC.WHO_INFO.LAST_UPDATE_LOGIN := -1; END IF; LR_TRANS_REC.WHO_INFO.LAST_UPDATE_DATE := SYSDATE; LR_TRANS_REC.WHO_INFO.CREATION_DATE := SYSDATE; LR_TRANS_REC.WHO_INFO.CREATED_BY := LR_TRANS_REC.WHO_INFO.LAST_UPDATED_BY; LR_ASSET_HDR_REC.ASSET_ID := LN_ASSET_ID; LR_ASSET_HDR_REC.BOOK_TYPE_CODE := LV_BOOK_TYPE_CODE; LR_TRANS_REC.TRANSACTION_TYPE_CODE := NULL; -- THIS WILL BE DETERMINED INSIDE API LR_TRANS_REC.TRANSACTION_DATE_ENTERED := NULL; LR_ASSET_HDR_REC.PERIOD_OF_ADDITION := NULL; LR_ASSET_RETIRE_REC.RETIREMENT_PRORATE_CONVENTION := NULL; LR_ASSET_RETIRE_REC.DATE_RETIRED := NULL; -- WILL BE CURRENT PERIOD BY DEFAULT LR_ASSET_RETIRE_REC.UNITS_RETIRED := 1; LR_ASSET_RETIRE_REC.COST_RETIRED := LN_COST_RETIRED; LR_ASSET_RETIRE_REC.PROCEEDS_OF_SALE := LN_PROCEEDS_OF_SALE; LR_ASSET_RETIRE_REC.COST_OF_REMOVAL := LN_COST_OF_REMOVAL; LR_ASSET_RETIRE_REC.RETIREMENT_TYPE_CODE := 'SALE'; --SELECT * FROM FA_LOOKUPS_VL WHERE LOOKUP_TYPE = 'RETIREMENT' LR_ASSET_RETIRE_REC.TRADE_IN_ASSET_ID := NULL; LR_ASSET_RETIRE_REC.CALCULATE_GAIN_LOSS := FND_API.G_FALSE; FND_PROFILE.PUT('USER_ID', LN_USER_ID); LT_ASSET_DIST_TBL.DELETE; DBMS_OUTPUT.PUT_LINE('CALL API'); FA_RETIREMENT_PUB.DO_RETIREMENT(P_API_VERSION => LN_API_VERSION, P_INIT_MSG_LIST => LV_INIT_MSG_LIST, P_COMMIT => LV_COMMIT, P_VALIDATION_LEVEL => LV_VALIDATION_LEVEL, P_CALLING_FN => LV_CALLING_FUNC, X_RETURN_STATUS => LV_RETURN_STS, X_MSG_COUNT => LN_MSG_CNT, X_MSG_DATA => LV_MESSAGE, PX_TRANS_REC => LR_TRANS_REC, PX_DIST_TRANS_REC => LR_DIST_TRANS_REC, PX_ASSET_HDR_REC => LR_ASSET_HDR_REC, PX_ASSET_RETIRE_REC => LR_ASSET_RETIRE_REC, P_ASSET_DIST_TBL => LT_ASSET_DIST_TBL, P_SUBCOMP_TBL => LT_SUBCOMP_TBL, P_INV_TBL => LT_INV_TBL); IF LV_RETURN_STS = FND_API.G_FALSE THEN RAISE LE_API_ERROR; ELSE DBMS_OUTPUT.PUT_LINE('lv_return_sts :' || LV_RETURN_STS); END IF; DBMS_OUTPUT.PUT_LINE('Asset Retirement Done: id: ' || LR_ASSET_RETIRE_REC.RETIREMENT_ID); IF (FA_DEBUG_PKG.PRINT_DEBUG) THEN FA_DEBUG_PKG.WRITE_DEBUG_LOG; END IF; FA_SRVR_MSG.ADD_MESSAGE(CALLING_FN => LV_CALLING_FUNC, NAME => 'FA_SHARED_END_SUCCESS', TOKEN1 => 'PROGRAM', VALUE1 => 'RETIREMENT_API'); LN_MESSAGE_COUNT := FND_MSG_PUB.COUNT_MSG; IF (LN_MESSAGE_COUNT > 0) THEN LV_DUMMY := FND_MSG_PUB.GET(FND_MSG_PUB.G_FIRST, FND_API.G_FALSE); DBMS_OUTPUT.PUT_LINE('dump: ' || LV_DUMMY); FOR I IN 1 .. (LN_MESSAGE_COUNT - 1) LOOP LV_DUMMY := FND_MSG_PUB.GET(FND_MSG_PUB.G_NEXT, FND_API.G_FALSE); DBMS_OUTPUT.PUT_LINE('dump: ' || LV_DUMMY); END LOOP; ELSE DBMS_OUTPUT.PUT_LINE('dump: NO MESSAGE !'); END IF; EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('Error :' || SQLERRM); END; END LOOP; EXCEPTION WHEN LE_API_ERROR THEN ROLLBACK WORK; FA_SRVR_MSG.ADD_MESSAGE(CALLING_FN => LV_CALLING_FUNC, NAME => 'FA_SHARED_PROGRAM_FAILED', TOKEN1 => 'PROGRAM', VALUE1 => LV_CALLING_FUNC); LN_MESSAGE_COUNT := FND_MSG_PUB.COUNT_MSG; IF (LN_MESSAGE_COUNT > 0) THEN LV_DUMMY := FND_MSG_PUB.GET(FND_MSG_PUB.G_FIRST, FND_API.G_FALSE); DBMS_OUTPUT.PUT_LINE('DUMP: ' || LV_DUMMY); FOR I IN 1 .. (LN_MESSAGE_COUNT - 1) LOOP LV_DUMMY := FND_MSG_PUB.GET(FND_MSG_PUB.G_NEXT, FND_API.G_FALSE); DBMS_OUTPUT.PUT_LINE('DUMP: ' || LV_DUMMY); END LOOP; ELSE DBMS_OUTPUT.PUT_LINE('dump: NO MESSAGE !'); END IF; COMMIT; END; / /* 觀念:當執行折舊或關閉期間時會觸發請求集"折舊執行請求集 (財務帳本 - 將期間關帳)" 計算損益(Calculate Gains and Losses) 折舊執行(Depreciation Run) 日記帳分錄準備分類帳報表(Journal Entry Reserve Ledger Report) 處理暫緩交易(Process Pending Transactions) */ DECLARE LV_BOOK_TYPE_CODE VARCHAR2(15) := 'TJ资产帐'; --帳本 TW资产帐、TJ资产帐 LN_REQUEST_ID NUMBER; BEGIN FND_GLOBAL.APPS_INITIALIZE(USER_ID => 0, --SYSADMIN RESP_ID => 50244, --ACETJ_FA_KeyUser RESP_APPL_ID => 140); LN_REQUEST_ID := FND_REQUEST.SUBMIT_REQUEST('OFA', 'FARET', --計算損益/Calculate Gains and Losses NULL, NULL, FALSE, LV_BOOK_TYPE_CODE); COMMIT; DBMS_OUTPUT.PUT_LINE(LN_REQUEST_ID); END; /
2023-09-12
[Oracle]How to Retire Asset
參考資料http://www.shareoracleapps.com/2022/12/api-to-retire-asset-in-oracle-apps-R12-FARETIREMENTPUB.html
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言