oracle----存储过程
印象笔记:QQ邮箱 MyEclipse+SVN+Maven存储过程:PL/SQLACTIVITI工作流:JavaScript+JQuery+Nginx+Vue.js:SSM项目:本地搭建一个JAVA系统,Linux布署一个系统。 Web.xmlConf.xmlServer.xml 日常软件:EV录屏软件Team Viewer远程软件...
印象笔记:QQ邮箱
MyEclipse+SVN+Maven
存储过程:PL/SQL
ACTIVITI工作流:
JavaScript+JQuery+Nginx+Vue.js:
SSM项目:
本地搭建一个JAVA系统,Linux布署一个系统。
Web.xml
Conf.xml
Server.xml
日常软件:
EV录屏软件
Team Viewer远程软件
向日葵远程软件
BCompare代码比对软件
jd-gui.exe反编译软件
存储过程
CREATE OR REPLACE PACKAGE BODY P_CEM_VOUCHER IS
/** ========================================================================== **/
/**********************************************************************
* + ===== ===== + *
* ********************************************************************
* *
* 类型:procedure *
* 名称:createVoucher(i_billno in varchar2, *
* i_id in varchar2, *
* i_voucherno in varchar2 *
* o_sucount out number,); *
* 参数:_billno *
* i_id *
* i_voucherno *
* i_billstatus *
* o_sucount *
* *
**********************************************************************/
PROCEDURE CREATEVOUCHER(I_BILLNO IN VARCHAR2,
I_ID IN VARCHAR2,
I_VOUCHERNO IN VARCHAR2,
I_BILLSTATUS IN VARCHAR2,
O_SUCOUNT OUT NUMBER) AS
SUCOUNT NUMBER;
BEGIN
O_SUCOUNT := 0;
-- 普通凭证
CREATECOMMVOUCHER(I_BILLNO, I_ID, I_VOUCHERNO, I_BILLSTATUS, SUCOUNT);
O_SUCOUNT := O_SUCOUNT + SUCOUNT;
-- 进项税转出凭证(目前单独调用)
CREATEOUTVOUCHER(I_BILLNO, I_ID, I_VOUCHERNO, I_BILLSTATUS, SUCOUNT);
O_SUCOUNT := O_SUCOUNT + SUCOUNT;
-- 视同销售凭证(目前单独调用)
CREATESALEVOUCHER(I_BILLNO, I_ID, I_VOUCHERNO, I_BILLSTATUS, SUCOUNT);
O_SUCOUNT := O_SUCOUNT + SUCOUNT;
-- 实付凭证
CREATEPAYVOUCHER(I_BILLNO, I_ID, I_VOUCHERNO, I_BILLSTATUS, SUCOUNT);
O_SUCOUNT := O_SUCOUNT + SUCOUNT;
--
--CREATEBACKVOUCHER(I_BILLNO, I_ID, I_VOUCHERNO, I_BILLSTATUS, SUCOUNT);
--O_SUCOUNT := O_SUCOUNT + SUCOUNT;
LOGINFO('createVoucher', '总共影响条数>>' || O_SUCOUNT);
EXCEPTION
WHEN OTHERS THEN
LOGINFO('createVoucher', 'CREATEVOUCHER调用异常...');
END CREATEVOUCHER;
/** ========================================================================== **/
/**********************************************************************
* + ===== ===== + *
* ********************************************************************
* *
* procedure 创建普通凭证 *
* createCommVoucher(i_billno in varchar2, *
* i_mdid in varchar2, *
* o_sucount out number); *
* i_billno *
* i_mdid *
* o_sucount *
* *
**********************************************************************/
PROCEDURE CREATECOMMVOUCHER(I_BILLNO IN VARCHAR2,
I_MDID IN VARCHAR2,
I_VOUCHERNO IN VARCHAR2,
I_BILLSTATUS IN VARCHAR2,
O_SUCOUNT OUT NUMBER) AS
--获取生成单据数据游标
CURSOR CUR_VOUCHER_BILL IS
SELECT *
FROM V_CEM_VOUCHER
WHERE MD_VOUCHERFLAG IS NULL
AND MD_BILLNO = NVL(I_BILLNO, MD_BILLNO)
AND MD_ID = NVL(I_MDID, MD_ID);
VOUCHER_BILL V_CEM_VOUCHER%ROWTYPE;
EXCUTE_SQL VARCHAR2(4000);
EXCUTE_SQL_INSERT VARCHAR2(4000);
EXCUTE_SQL_COUNT VARCHAR2(4000);
EXCUTE_COL VARCHAR2(4000);
EXCUTE_TAB VARCHAR2(4000);
EXCUTE_COND VARCHAR2(4000);
EXCUTE_COUNT NUMBER;
EXCUTE_COUNT_TEMP NUMBER;
BEGIN
O_SUCOUNT := 0;
EXCUTE_COUNT := 0;
--打开游标cur_voucher_bill
OPEN CUR_VOUCHER_BILL;
LOOP
FETCH CUR_VOUCHER_BILL
INTO VOUCHER_BILL;
EXIT WHEN CUR_VOUCHER_BILL%NOTFOUND;
--匹配凭证规则生成凭证
FOR VOUCHER_RULE IN (SELECT R.*,
M.VOUCHERTYPECODE COA_TYPE_CODE,
M.VOUCHERTYPE COA_TYPE_NAME,
M.CORPID
FROM T_CEM_VOUCHER_RULE R, T_CEM_VOUCHER_MAIN M
WHERE R.MAINID = M.ID
AND M.RULETYPE = 'COMM'
AND M.CORPID = VOUCHER_BILL.MD_CORPID
AND R.ENABLE = '000'
AND M.ENABLE = '000'
AND INSTR(M.PERTAINBILL,
'@(' || VOUCHER_BILL.MD_BILLTYPE || ')') > 0
AND M.TRIGGERNODE = I_BILLSTATUS
/*VOUCHER_BILL.md_billstatus*/
) LOOP
EXCUTE_COUNT_TEMP := 0;
EXCUTE_TAB := '';
EXCUTE_COL := ' null ledger_id, ''' ||
VOUCHER_RULE.COA_TYPE_CODE ||
''' coa_type_code, ''' ||
VOUCHER_RULE.COA_TYPE_NAME ||
''' coa_type_name,
CASE WHEN md_finishtasktime IS NULL THEN SYSDATE
ELSE md_finishtasktime END accounting_date,
nvl(md_originalcurrency, ''CNY'') currency_code, ''A'' actual_flag, null doc_seq_num, null je_header_id, null je_line_num, ';
-- segment段值获取
EXCUTE_COL := EXCUTE_COL ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT1,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment1'),
'segment1',
VOUCHER_RULE.CORPID) || ' segment1,' ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT2,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment2'),
'segment2',
VOUCHER_RULE.CORPID) || ' segment2,' ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT3,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment3'),
'segment3',
VOUCHER_RULE.CORPID) || ' segment3,' ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT4,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment4'),
'segment4',
VOUCHER_RULE.CORPID) || ' segment4,' ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT5,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment5'),
'segment5',
VOUCHER_RULE.CORPID) || ' segment5,' ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT6,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment6'),
'segment6',
VOUCHER_RULE.CORPID) || ' segment6,' ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT7,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment7'),
'segment7',
VOUCHER_RULE.CORPID) || ' segment7,' ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT8,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment8'),
'segment8',
VOUCHER_RULE.CORPID) || ' segment8,' ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT9,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment9'),
'segment9',
VOUCHER_RULE.CORPID) || ' segment9,' ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT10,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment10'),
'segment10',
VOUCHER_RULE.CORPID) ||
' segment10,' ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT11,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment11'),
'segment11',
VOUCHER_RULE.CORPID) ||
' segment11,' ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT12,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment12'),
'segment12',
VOUCHER_RULE.CORPID) ||
' segment12,' ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT13,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment13'),
'segment13',
VOUCHER_RULE.CORPID) ||
' segment13,' ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT14,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment14'),
'segment14',
VOUCHER_RULE.CORPID) ||
' segment14,' ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT15,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment15'),
'segment15',
VOUCHER_RULE.CORPID) ||
' segment15,' ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT16,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment16'),
'segment16',
VOUCHER_RULE.CORPID) ||
' segment16,' ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT17,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment17'),
'segment17',
VOUCHER_RULE.CORPID) ||
' segment17,' ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT18,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment18'),
'segment18',
VOUCHER_RULE.CORPID) ||
' segment18,' ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT19,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment19'),
'segment19',
VOUCHER_RULE.CORPID) ||
' segment19,' ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT20,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment20'),
'segment20',
VOUCHER_RULE.CORPID) ||
' segment20,' || (CASE VOUCHER_RULE.DRCR
WHEN 'DR' THEN
GETCOLUMNBYRULESETTING(VOUCHER_RULE.AMOUNT,
'AMOUNT',
VOUCHER_RULE.VIEWTYPE,
NULL)
ELSE
'0'
END) || ' accounted_dr,' || (CASE VOUCHER_RULE.DRCR
WHEN 'CR' THEN
GETCOLUMNBYRULESETTING(VOUCHER_RULE.AMOUNT,
'AMOUNT',
VOUCHER_RULE.VIEWTYPE,
NULL)
ELSE
'0'
END) || ' accounted_cr,' ||
GETCOLUMNBYRULESETTING(VOUCHER_RULE.REMARK,
'REMARK',
VOUCHER_RULE.VIEWTYPE,
NULL) || ' remark,' ||
' md_billno billno';
-- 从那个表获取数据
IF VOUCHER_RULE.VIEWTYPE = 'SHARE' THEN
EXCUTE_COL := EXCUTE_COL ||
', ''v_cem_voucher_share'' table_name, ''es_id'' col_id, es_id id';
EXCUTE_TAB := 'v_cem_voucher_share';
ELSIF VOUCHER_RULE.VIEWTYPE = 'PAY' THEN
EXCUTE_COL := EXCUTE_COL ||
', ''v_cem_voucher_pay'' table_name, ''pm_id'' col_id, pm_id id';
EXCUTE_TAB := 'v_cem_voucher_pay';
ELSIF VOUCHER_RULE.VIEWTYPE = 'RESERVE' THEN
EXCUTE_COL := EXCUTE_COL ||
', ''v_cem_voucher_reversal'' table_name, ''rs_id'' col_id, rs_id id';
EXCUTE_TAB := 'v_cem_voucher_reversal';
ELSIF VOUCHER_RULE.VIEWTYPE = 'REPAY' THEN
EXCUTE_COL := EXCUTE_COL ||
', ''v_cem_voucher_repay'' table_name, ''rp_id'' col_id, rp_id id';
EXCUTE_TAB := 'v_cem_voucher_repay';
ELSIF VOUCHER_RULE.VIEWTYPE = 'BORROW' THEN
EXCUTE_COL := EXCUTE_COL ||
', ''v_cem_voucher_detail'' table_name, ''dd_id'' col_id, dd_id id';
EXCUTE_TAB := 'v_cem_voucher_detail';
ELSIF VOUCHER_RULE.VIEWTYPE = 'TAXROLLOUT' THEN
EXCUTE_COL := EXCUTE_COL ||
', ''v_cem_voucher_taxrollout'' table_name, ''tr_id'' col_id, tr_id id';
EXCUTE_TAB := 'v_cem_voucher_taxrollout';
ELSIF VOUCHER_RULE.VIEWTYPE = 'LEND' THEN
EXCUTE_COL := EXCUTE_COL ||
', ''v_cem_voucher_lend'' table_name, ''tr_id'' col_id, NULL id';
EXCUTE_TAB := 'v_cem_voucher_lend';
END IF;
EXCUTE_COL := EXCUTE_COL ||
', ''N'' status, null errormsg, ''system'' creater_id, null checker_id,
null item01, null item02, null item03, null item04, null item05, null item06, null item07,
null item08, null item09, null item10, sysdate createtime, sysdate modifytime, ''system'' modifier_id ,''' ||
I_VOUCHERNO || ''' voucherno, 0,null,null';
-- 使用条件
EXCUTE_COND := GETCONDBYRULEID(VOUCHER_RULE.ID);
--LOGINFO('createCommonVoucher---规则ID', VOUCHER_RULE.ID);
-- 拼ql
EXCUTE_SQL := EXCUTE_COL || '
from ' || EXCUTE_TAB || '
where md_id = ''' ||
VOUCHER_BILL.MD_ID || '''';
IF TRIM(EXCUTE_COND) IS NOT NULL THEN
EXCUTE_SQL := EXCUTE_SQL || ' and (' || EXCUTE_COND || ')';
END IF;
EXCUTE_SQL_INSERT := 'insert into t_cem_voucher_interface select SEQ_VOUCHER.NEXTVAL id,' ||
EXCUTE_SQL;
EXCUTE_SQL_COUNT := 'select count(*) from ( select ' || EXCUTE_SQL || ')';
LOGINFO('createPayVoucher', EXCUTE_SQL_INSERT);
-- 执行sql voucher_interface插入表
EXECUTE IMMEDIATE EXCUTE_SQL_COUNT
INTO EXCUTE_COUNT_TEMP;
EXECUTE IMMEDIATE EXCUTE_SQL_INSERT;
COMMIT;
EXCUTE_COUNT := EXCUTE_COUNT + EXCUTE_COUNT_TEMP;
O_SUCOUNT := O_SUCOUNT + EXCUTE_COUNT_TEMP;
--LOGINFO('createPayVoucher', '执行影响条数>>' || EXCUTE_COUNT_TEMP);
LOGINFO('createPayVoucher', '执行影响条数>>' || EXCUTE_COUNT_TEMP || '---->' || EXCUTE_SQL_INSERT );
END LOOP;
--更新主表
IF EXCUTE_COUNT > 0 THEN
UPDATE T_CEM_BILL_MAINDATA
SET VOUCHERFLAG = 'Y'
WHERE ID = VOUCHER_BILL.MD_ID;
COMMIT;
END IF;
END LOOP;
-- 关闭游标 cur_voucher_bill
CLOSE CUR_VOUCHER_BILL;
--插入凭证临时表
/*IF O_SUCOUNT > 0 THEN
INSERTVOUCHERINTERFACETEMP(I_MDID, I_BILLNO);
END IF;*/
END CREATECOMMVOUCHER;
/** ========================================================================== **/
/**********************************************************************
* + ===== ===== + *
* ********************************************************************
* *
* 进项税转出凭证procedure *
* createOutVoucher(i_billno in varchar2, *
* i_trid in varchar2, *
* o_sucount out number); *
* *
* *
* *
**********************************************************************/
PROCEDURE CREATEOUTVOUCHER(I_BILLNO IN VARCHAR2,
I_TRID IN VARCHAR2, --明细区id
I_VOUCHERNO IN VARCHAR2,
I_BILLSTATUS IN VARCHAR2,
O_SUCOUNT OUT NUMBER) AS
CURSOR CUR_VOUCHER_BILL IS
SELECT *
FROM V_CEM_VOUCHER_TAXROLLOUT
WHERE TR_VOUCHERFLAG = 'N'
AND DD_ID = NVL(I_TRID, DD_ID)
AND MD_BILLNO = NVL(I_BILLNO, MD_BILLNO);
VOUCHER_BILL V_CEM_VOUCHER_TAXROLLOUT%ROWTYPE;
EXCUTE_SQL VARCHAR2(4000);
EXCUTE_SQL_INSERT VARCHAR2(4000);
EXCUTE_SQL_COUNT VARCHAR2(4000);
EXCUTE_COL VARCHAR2(4000);
EXCUTE_TAB VARCHAR2(4000);
EXCUTE_COND VARCHAR2(4000);
EXCUTE_COUNT NUMBER;
EXCUTE_COUNT_TEMP NUMBER;
TEMP_COL VARCHAR2(1000);
V_COUNT NUMBER := 0;
BEGIN
EXCUTE_COUNT := 0;
O_SUCOUNT := 0;
-- 打开 cur_voucher_bill
OPEN CUR_VOUCHER_BILL;
-- 循环
LOOP
FETCH CUR_VOUCHER_BILL
INTO VOUCHER_BILL;
EXIT WHEN CUR_VOUCHER_BILL%NOTFOUND;
--
FOR VOUCHER_RULE IN (SELECT R.*,
M.VOUCHERTYPECODE COA_TYPE_CODE,
M.VOUCHERTYPE COA_TYPE_NAME,
M.CORPID
FROM T_CEM_VOUCHER_RULE R, T_CEM_VOUCHER_MAIN M
WHERE R.MAINID = M.ID
AND M.RULETYPE = 'OUT'
AND R.ENABLE = '000'
AND M.ENABLE = '000'
AND M.CORPID = VOUCHER_BILL.MD_CORPID
AND INSTR(M.PERTAINBILL,
'@(' || VOUCHER_BILL.MD_BILLTYPE || ')') > 0
/*and (select cd.key from t_cem_comm_dictionary cd where cd.batchcode = 'BS' and cd.id = m.triggernode) = voucher_bill.md_billstatus*/
/* AND (SELECT CD.KEY
FROM T_CEM_COMM_DICTIONARY CD
WHERE CD.BATCHCODE = 'BS'
AND CD.ID = M.TRIGGERNODE) = '-1'*/
) LOOP
EXCUTE_COUNT_TEMP := 0;
EXCUTE_TAB := '';
EXCUTE_COL := ' null ledger_id, ''' ||
VOUCHER_RULE.COA_TYPE_CODE ||
''' coa_type_code, ''' ||
VOUCHER_RULE.COA_TYPE_NAME ||
''' coa_type_name,
CASE WHEN tr_modifytime IS NULL THEN SYSDATE
ELSE tr_modifytime END accounting_date,
nvl(md_originalcurrency, ''CNY'') currency_code, ''A'' actual_flag, null doc_seq_num, null je_header_id, null je_line_num, ';
EXCUTE_COL := EXCUTE_COL ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT1,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment1'),
'segment1',
VOUCHER_RULE.CORPID) || ' segment1,' ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT2,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment2'),
'segment2',
VOUCHER_RULE.CORPID) || ' segment2,' ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT3,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment3'),
'segment3',
VOUCHER_RULE.CORPID) || ' segment3,' ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT4,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment4'),
'segment4',
VOUCHER_RULE.CORPID) || ' segment4,' ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT5,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment5'),
'segment5',
VOUCHER_RULE.CORPID) || ' segment5,' ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT6,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment6'),
'segment6',
VOUCHER_RULE.CORPID) || ' segment6,' ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT7,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment7'),
'segment7',
VOUCHER_RULE.CORPID) || ' segment7,' ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT8,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment8'),
'segment8',
VOUCHER_RULE.CORPID) || ' segment8,' ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT9,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment9'),
'segment9',
VOUCHER_RULE.CORPID) || ' segment9,' ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT10,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment10'),
'segment10',
VOUCHER_RULE.CORPID) ||
' segment10,' ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT11,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment11'),
'segment11',
VOUCHER_RULE.CORPID) ||
' segment11,' ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT12,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment12'),
'segment12',
VOUCHER_RULE.CORPID) ||
' segment12,' ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT13,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment13'),
'segment13',
VOUCHER_RULE.CORPID) ||
' segment13,' ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT14,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment14'),
'segment14',
VOUCHER_RULE.CORPID) ||
' segment14,' ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT15,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment15'),
'segment15',
VOUCHER_RULE.CORPID) ||
' segment15,' ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT16,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment16'),
'segment16',
VOUCHER_RULE.CORPID) ||
' segment16,' ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT17,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment17'),
'segment17',
VOUCHER_RULE.CORPID) ||
' segment17,' ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT18,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment18'),
'segment18',
VOUCHER_RULE.CORPID) ||
' segment18,' ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT19,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment19'),
'segment19',
VOUCHER_RULE.CORPID) ||
' segment19,' ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT20,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment20'),
'segment20',
VOUCHER_RULE.CORPID) ||
' segment20,' || (CASE VOUCHER_RULE.DRCR
WHEN 'DR' THEN
-- GETCOLUMNBYRULESETTING(VOUCHER_RULE.AMOUNT,'AMOUNT', VOUCHER_RULE.VIEWTYPE, NULL)
--'AMOUNT' edit by YouGuoqing 2018/01/10 15:36
VOUCHER_BILL.TR_AMOUNT
ELSE
'0'
END) || ' accounted_dr,'
|| (CASE VOUCHER_RULE.DRCR
WHEN 'CR' THEN
-- GETCOLUMNBYRULESETTING(VOUCHER_RULE.AMOUNT,
-- 'AMOUNT',
-- VOUCHER_RULE.VIEWTYPE,
-- NULL)
--' ' edit by YouGuoqing 2018/01/10 15:36
VOUCHER_BILL.TR_AMOUNT
ELSE
'0'
END) || ' accounted_cr,' ||
GETCOLUMNBYRULESETTING(VOUCHER_RULE.REMARK,
'REMARK',
VOUCHER_RULE.VIEWTYPE,
NULL) || ' remark,' ||
' md_billno billno';
--
IF VOUCHER_RULE.VIEWTYPE = 'SHARE' THEN
EXCUTE_COL := EXCUTE_COL ||
', ''v_cem_voucher_share'' table_name, ''es_id'' col_id, es_id id';
EXCUTE_TAB := 'v_cem_voucher_share';
ELSIF VOUCHER_RULE.VIEWTYPE = 'PAY' THEN
EXCUTE_COL := EXCUTE_COL ||
', ''v_cem_voucher_pay'' table_name, ''pm_id'' col_id, pm_id id';
EXCUTE_TAB := 'v_cem_voucher_pay';
ELSIF VOUCHER_RULE.VIEWTYPE = 'RESERVE' THEN
EXCUTE_COL := EXCUTE_COL ||
', ''v_cem_voucher_reversal'' table_name, ''rs_id'' col_id, rs_id id';
EXCUTE_TAB := 'v_cem_voucher_reversal';
ELSIF VOUCHER_RULE.VIEWTYPE = 'REPAY' THEN
EXCUTE_COL := EXCUTE_COL ||
', ''v_cem_voucher_repay'' table_name, ''rp_id'' col_id, rp_id id';
EXCUTE_TAB := 'v_cem_voucher_repay';
ELSIF VOUCHER_RULE.VIEWTYPE = 'BORROW' THEN
EXCUTE_COL := EXCUTE_COL ||
', ''v_cem_voucher_detail'' table_name, ''dd_id'' col_id, dd_id id';
EXCUTE_TAB := 'v_cem_voucher_detail';
ELSIF VOUCHER_RULE.VIEWTYPE = 'TAXROLLOUT' THEN
--TEMP_COL := GETSTRINARRSTR(VOUCHER_RULE.AMOUNT, '#', 1);
--IF TEMP_COL = 'out_sharetaxamount' THEN
EXCUTE_COL := EXCUTE_COL ||
', ''v_cem_voucher_taxrollout'' table_name, ''tr_id'' col_id, tr_id id';
EXCUTE_TAB := 'v_cem_voucher_taxrollout';
END IF;
EXCUTE_COL := EXCUTE_COL ||
', ''N'' status, null errormsg, ''system'' creater_id, null checker_id,
null item01, null item02, null item03, null item04, null item05, null item06, null item07,
null item08, null item09, null item10, sysdate createtime, sysdate modifytime, ''system'' modifier_id,''' ||
I_VOUCHERNO || ''' voucherno,0,null,null';
--
EXCUTE_COND := GETCONDBYRULEID(VOUCHER_RULE.ID);
LOGINFO('creattaxoutVoucher--规则id-', VOUCHER_RULE.ID);
--
EXCUTE_SQL := EXCUTE_COL || '
from ' || EXCUTE_TAB || '
where md_id = ''' ||
VOUCHER_BILL.MD_ID || ''' and tr_id = ''' ||
VOUCHER_BILL.TR_ID || '''';
IF EXCUTE_COND IS NOT NULL THEN
EXCUTE_SQL := EXCUTE_SQL || ' and (' || EXCUTE_COND || ')';
END IF;
EXCUTE_SQL_INSERT := 'insert into t_cem_voucher_interface select SEQ_VOUCHER.NEXTVAL id,' ||
EXCUTE_SQL;
EXCUTE_SQL_COUNT := 'select count(*) from ( select ' || EXCUTE_SQL || ')';
LOGINFO('createPayVoucher插入表!', EXCUTE_SQL_INSERT);
--
EXECUTE IMMEDIATE EXCUTE_SQL_COUNT
INTO EXCUTE_COUNT_TEMP;
EXECUTE IMMEDIATE EXCUTE_SQL_INSERT;
COMMIT;
LOGINFO('createPayVoucher', '创建付款凭证>>' || EXCUTE_COUNT_TEMP);
EXCUTE_COUNT := EXCUTE_COUNT + EXCUTE_COUNT_TEMP;
O_SUCOUNT := O_SUCOUNT + EXCUTE_COUNT_TEMP;
LOGINFO('createtaxoutVoucher影响条数-->', O_SUCOUNT);
END LOOP;
--
IF EXCUTE_COUNT > 0 THEN
UPDATE T_CEM_BILL_TAXROLLOUT
SET VOUCHERFLAG = 'Y'
WHERE ID = VOUCHER_BILL.TR_ID;
COMMIT;
END IF;
END LOOP;
-- 关闭 cur_voucher_bill
CLOSE CUR_VOUCHER_BILL;
--插入凭证临时表
/*INSERTVOUCHERINTERFACETEMP(NULL, I_BILLNO);*/
EXCEPTION
WHEN OTHERS THEN
LOGINFO('createOutVoucher', '创建进项税转出凭证异常...');
END CREATEOUTVOUCHER;
/** ========================================================================== **/
/**********************************************************************
* + ===== ===== + *
* ********************************************************************
*
* 视同销售凭证procedure
* createOutVoucher(i_billno in varchar2,
* i_trid in varchar2,
* o_sucount out number);
* *
* *
* *
**********************************************************************/
PROCEDURE CREATESALEVOUCHER(I_BILLNO IN VARCHAR2,
I_TRID IN VARCHAR2, --明细区id
I_VOUCHERNO IN VARCHAR2,
I_BILLSTATUS IN VARCHAR2,
O_SUCOUNT OUT NUMBER) AS
CURSOR CUR_VOUCHER_BILL IS
SELECT *
FROM V_CEM_VOUCHER_TAXROLLOUT
WHERE TR_VOUCHERFLAG = 'N'
AND DD_ID = NVL(I_TRID, DD_ID)
AND MD_BILLNO = NVL(I_BILLNO, MD_BILLNO);
VOUCHER_BILL V_CEM_VOUCHER_TAXROLLOUT%ROWTYPE;
EXCUTE_SQL VARCHAR2(4000);
EXCUTE_SQL_INSERT VARCHAR2(4000);
EXCUTE_SQL_COUNT VARCHAR2(4000);
EXCUTE_COL VARCHAR2(4000);
EXCUTE_TAB VARCHAR2(4000);
EXCUTE_COND VARCHAR2(4000);
EXCUTE_COUNT NUMBER;
EXCUTE_COUNT_TEMP NUMBER;
TEMP_COL VARCHAR2(1000);
V_COUNT NUMBER := 0;
BEGIN
EXCUTE_COUNT := 0;
O_SUCOUNT := 0;
-- 打开 cur_voucher_bill
OPEN CUR_VOUCHER_BILL;
-- 循环
LOOP
FETCH CUR_VOUCHER_BILL
INTO VOUCHER_BILL;
EXIT WHEN CUR_VOUCHER_BILL%NOTFOUND;
--
FOR VOUCHER_RULE IN (SELECT R.*,
M.VOUCHERTYPECODE COA_TYPE_CODE,
M.VOUCHERTYPE COA_TYPE_NAME,
M.CORPID
FROM T_CEM_VOUCHER_RULE R, T_CEM_VOUCHER_MAIN M
WHERE R.MAINID = M.ID
AND M.RULETYPE = 'SALE'
AND R.ENABLE = '000'
AND M.ENABLE = '000'
AND M.CORPID = VOUCHER_BILL.MD_CORPID
AND INSTR(M.PERTAINBILL,
'@(' || VOUCHER_BILL.MD_BILLTYPE || ')') > 0
/*and (select cd.key from t_cem_comm_dictionary cd where cd.batchcode = 'BS' and cd.id = m.triggernode) = voucher_bill.md_billstatus*/
/* AND (SELECT CD.KEY
FROM T_CEM_COMM_DICTIONARY CD
WHERE CD.BATCHCODE = 'BS'
AND CD.ID = M.TRIGGERNODE) = '-1'*/
) LOOP
EXCUTE_COUNT_TEMP := 0;
EXCUTE_TAB := '';
EXCUTE_COL := ' null ledger_id, ''' ||
VOUCHER_RULE.COA_TYPE_CODE ||
''' coa_type_code, ''' ||
VOUCHER_RULE.COA_TYPE_NAME ||
''' coa_type_name,
CASE WHEN tr_modifytime IS NULL THEN SYSDATE
ELSE tr_modifytime END accounting_date,
nvl(md_originalcurrency, ''CNY'') currency_code, ''A'' actual_flag, null doc_seq_num, null je_header_id, null je_line_num, ';
EXCUTE_COL := EXCUTE_COL ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT1,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment1'),
'segment1',
VOUCHER_RULE.CORPID) || ' segment1,' ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT2,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment2'),
'segment2',
VOUCHER_RULE.CORPID) || ' segment2,' ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT3,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment3'),
'segment3',
VOUCHER_RULE.CORPID) || ' segment3,' ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT4,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment4'),
'segment4',
VOUCHER_RULE.CORPID) || ' segment4,' ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT5,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment5'),
'segment5',
VOUCHER_RULE.CORPID) || ' segment5,' ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT6,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment6'),
'segment6',
VOUCHER_RULE.CORPID) || ' segment6,' ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT7,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment7'),
'segment7',
VOUCHER_RULE.CORPID) || ' segment7,' ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT8,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment8'),
'segment8',
VOUCHER_RULE.CORPID) || ' segment8,' ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT9,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment9'),
'segment9',
VOUCHER_RULE.CORPID) || ' segment9,' ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT10,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment10'),
'segment10',
VOUCHER_RULE.CORPID) ||
' segment10,' ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT11,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment11'),
'segment11',
VOUCHER_RULE.CORPID) ||
' segment11,' ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT12,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment12'),
'segment12',
VOUCHER_RULE.CORPID) ||
' segment12,' ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT13,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment13'),
'segment13',
VOUCHER_RULE.CORPID) ||
' segment13,' ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT14,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment14'),
'segment14',
VOUCHER_RULE.CORPID) ||
' segment14,' ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT15,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment15'),
'segment15',
VOUCHER_RULE.CORPID) ||
' segment15,' ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT16,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment16'),
'segment16',
VOUCHER_RULE.CORPID) ||
' segment16,' ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT17,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment17'),
'segment17',
VOUCHER_RULE.CORPID) ||
' segment17,' ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT18,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment18'),
'segment18',
VOUCHER_RULE.CORPID) ||
' segment18,' ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT19,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment19'),
'segment19',
VOUCHER_RULE.CORPID) ||
' segment19,' ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT20,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment20'),
'segment20',
VOUCHER_RULE.CORPID) ||
' segment20,' || (CASE VOUCHER_RULE.DRCR
WHEN 'DR' THEN
-- GETCOLUMNBYRULESETTING(VOUCHER_RULE.AMOUNT,'AMOUNT', VOUCHER_RULE.VIEWTYPE, NULL)
--'AMOUNT' edit by YouGuoqing 2018/01/10 15:36
VOUCHER_BILL.TR_AMOUNT
ELSE
'0'
END) || ' accounted_dr,'
|| (CASE VOUCHER_RULE.DRCR
WHEN 'CR' THEN
-- GETCOLUMNBYRULESETTING(VOUCHER_RULE.AMOUNT,
-- 'AMOUNT',
-- VOUCHER_RULE.VIEWTYPE,
-- NULL)
--' ' edit by YouGuoqing 2018/01/10 15:36
VOUCHER_BILL.TR_AMOUNT
ELSE
'0'
END) || ' accounted_cr,' ||
GETCOLUMNBYRULESETTING(VOUCHER_RULE.REMARK,
'REMARK',
VOUCHER_RULE.VIEWTYPE,
NULL) || ' remark,' ||
' md_billno billno';
--
IF VOUCHER_RULE.VIEWTYPE = 'SHARE' THEN
EXCUTE_COL := EXCUTE_COL ||
', ''v_cem_voucher_share'' table_name, ''es_id'' col_id, es_id id';
EXCUTE_TAB := 'v_cem_voucher_share';
ELSIF VOUCHER_RULE.VIEWTYPE = 'PAY' THEN
EXCUTE_COL := EXCUTE_COL ||
', ''v_cem_voucher_pay'' table_name, ''pm_id'' col_id, pm_id id';
EXCUTE_TAB := 'v_cem_voucher_pay';
ELSIF VOUCHER_RULE.VIEWTYPE = 'RESERVE' THEN
EXCUTE_COL := EXCUTE_COL ||
', ''v_cem_voucher_reversal'' table_name, ''rs_id'' col_id, rs_id id';
EXCUTE_TAB := 'v_cem_voucher_reversal';
ELSIF VOUCHER_RULE.VIEWTYPE = 'REPAY' THEN
EXCUTE_COL := EXCUTE_COL ||
', ''v_cem_voucher_repay'' table_name, ''rp_id'' col_id, rp_id id';
EXCUTE_TAB := 'v_cem_voucher_repay';
ELSIF VOUCHER_RULE.VIEWTYPE = 'BORROW' THEN
EXCUTE_COL := EXCUTE_COL ||
', ''v_cem_voucher_detail'' table_name, ''dd_id'' col_id, dd_id id';
EXCUTE_TAB := 'v_cem_voucher_detail';
ELSIF VOUCHER_RULE.VIEWTYPE = 'TAXROLLOUT' THEN
--TEMP_COL := GETSTRINARRSTR(VOUCHER_RULE.AMOUNT, '#', 1);
--IF TEMP_COL = 'out_sharetaxamount' THEN
EXCUTE_COL := EXCUTE_COL ||
', ''v_cem_voucher_taxrollout'' table_name, ''tr_id'' col_id, tr_id id';
EXCUTE_TAB := 'v_cem_voucher_taxrollout';
ELSIF VOUCHER_RULE.VIEWTYPE = 'SAMEASSALE' THEN
EXCUTE_COL := EXCUTE_COL ||
', ''v_cem_voucher_taxrollout'' table_name, ''tr_id'' col_id, tr_id id';
EXCUTE_TAB := 'v_cem_voucher_taxrollout';
END IF;
EXCUTE_COL := EXCUTE_COL ||
', ''N'' status, null errormsg, ''system'' creater_id, null checker_id,
null item01, null item02, null item03, null item04, null item05, null item06, null item07,
null item08, null item09, null item10, sysdate createtime, sysdate modifytime, ''system'' modifier_id,''' ||
I_VOUCHERNO || ''' voucherno,0,null,null';
--
EXCUTE_COND := GETCONDBYRULEID(VOUCHER_RULE.ID);
LOGINFO('creattaxoutVoucher--规则id-', VOUCHER_RULE.ID);
--
EXCUTE_SQL := EXCUTE_COL || '
from ' || EXCUTE_TAB || '
where md_id = ''' ||
VOUCHER_BILL.MD_ID || ''' and tr_id = ''' ||
VOUCHER_BILL.TR_ID || '''';
IF EXCUTE_COND IS NOT NULL THEN
EXCUTE_SQL := EXCUTE_SQL || ' and (' || EXCUTE_COND || ')';
END IF;
EXCUTE_SQL_INSERT := 'insert into t_cem_voucher_interface select SEQ_VOUCHER.NEXTVAL id,' ||
EXCUTE_SQL;
EXCUTE_SQL_COUNT := 'select count(*) from ( select ' || EXCUTE_SQL || ')';
LOGINFO('createPayVoucher插入表!', EXCUTE_SQL_INSERT);
--
EXECUTE IMMEDIATE EXCUTE_SQL_COUNT
INTO EXCUTE_COUNT_TEMP;
EXECUTE IMMEDIATE EXCUTE_SQL_INSERT;
COMMIT;
LOGINFO('createPayVoucher', '创建付款凭证>>' || EXCUTE_COUNT_TEMP);
EXCUTE_COUNT := EXCUTE_COUNT + EXCUTE_COUNT_TEMP;
O_SUCOUNT := O_SUCOUNT + EXCUTE_COUNT_TEMP;
LOGINFO('createtaxoutVoucher影响条数-->', O_SUCOUNT);
END LOOP;
--
IF EXCUTE_COUNT > 0 THEN
UPDATE T_CEM_BILL_TAXROLLOUT
SET VOUCHERFLAG = 'Y'
WHERE ID = VOUCHER_BILL.TR_ID;
COMMIT;
END IF;
END LOOP;
-- 关闭 cur_voucher_bill
CLOSE CUR_VOUCHER_BILL;
--插入凭证临时表
/*INSERTVOUCHERINTERFACETEMP(NULL, I_BILLNO);*/
EXCEPTION
WHEN OTHERS THEN
LOGINFO('createOutVoucher', '创建视同销售凭证异常...');
END CREATESALEVOUCHER;
/** ========================================================================== **/
/**********************************************************************
* + ===== 创建付款/退票凭证 ===== + *
* ********************************************************************
* *
* procedure 创建付款凭证 *
* createPayVoucher(i_billno in varchar2, *
* i_pmid in varchar2, *
* o_sucount out number); *
* i_billno *
* o_sucount *
* *
**********************************************************************/
PROCEDURE CREATEPAYVOUCHER(I_BILLNO IN VARCHAR2,
I_ID IN VARCHAR2,
I_VOUCHERNO IN VARCHAR2,
I_BILLSTATUS IN VARCHAR2,
O_SUCOUNT OUT NUMBER) AS
--付款游标
CURSOR CUR_VOUCHER_BILL IS
SELECT *
FROM V_CEM_VOUCHER
WHERE MD_BILLNO = NVL(I_BILLNO, MD_BILLNO)
AND MD_ID = NVL(I_ID, MD_ID)
AND MD_FUNDBACKSTATUS = I_BILLSTATUS;
VOUCHER_BILL V_CEM_VOUCHER%ROWTYPE;
EXCUTE_SQL VARCHAR2(4000);
EXCUTE_SQL_INSERT VARCHAR2(4000);
EXCUTE_SQL_COUNT VARCHAR2(4000);
EXCUTE_COL VARCHAR2(4000);
EXCUTE_TAB VARCHAR2(4000);
EXCUTE_COND VARCHAR2(4000);
EXCUTE_COUNT NUMBER;
EXCUTE_COUNT_TEMP NUMBER;
BEGIN
EXCUTE_COUNT := 0;
O_SUCOUNT := 0;
-- 开启 cur_voucher_bill
OPEN CUR_VOUCHER_BILL;
--
LOOP
FETCH CUR_VOUCHER_BILL
INTO VOUCHER_BILL;
EXIT WHEN CUR_VOUCHER_BILL%NOTFOUND;
FOR VOUCHER_RULE IN (SELECT R.*,
M.VOUCHERTYPECODE COA_TYPE_CODE,
M.VOUCHERTYPE COA_TYPE_NAME,
M.CORPID
FROM T_CEM_VOUCHER_RULE R, T_CEM_VOUCHER_MAIN M
WHERE R.MAINID = M.ID
AND M.RULETYPE = 'PAY'
AND R.ENABLE = '000'
AND M.ENABLE = '000'
AND M.CORPID = VOUCHER_BILL.MD_CORPID
AND INSTR(M.PERTAINBILL,
'@(' || VOUCHER_BILL.MD_BILLTYPE || ')') > 0
/*and (select cd.key from t_cem_comm_dictionary cd where cd.batchcode = 'BS' and cd.id = m.triggernode) = voucher_bill.md_billstatus*/
AND M.TRIGGERNODE = I_BILLSTATUS
/*VOUCHER_BILL.PM_PAYSTATUS*/
) LOOP
EXCUTE_COUNT_TEMP := 0;
EXCUTE_TAB := '';
EXCUTE_COL := 'null ledger_id, ''' ||
VOUCHER_RULE.COA_TYPE_CODE ||
''' coa_type_code, ''' ||
VOUCHER_RULE.COA_TYPE_NAME ||
''' coa_type_name,
CASE WHEN md_modifytime IS NULL THEN SYSDATE
ELSE md_modifytime END accounting_date,
nvl(md_originalcurrency, ''CNY'') currency_code, ''A'' actual_flag, null doc_seq_num, null je_header_id, null je_line_num, ';
-- 获取segment段值
EXCUTE_COL := EXCUTE_COL ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT1,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment1'),
'segment1',
VOUCHER_RULE.CORPID) || ' segment1,' ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT2,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment2'),
'segment2',
VOUCHER_RULE.CORPID) || ' segment2,' ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT3,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment3'),
'segment3',
VOUCHER_RULE.CORPID) || ' segment3,' ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT4,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment4'),
'segment4',
VOUCHER_RULE.CORPID) || ' segment4,' ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT5,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment5'),
'segment5',
VOUCHER_RULE.CORPID) || ' segment5,' ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT6,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment6'),
'segment6',
VOUCHER_RULE.CORPID) || ' segment6,' ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT7,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment7'),
'segment7',
VOUCHER_RULE.CORPID) || ' segment7,' ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT8,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment8'),
'segment8',
VOUCHER_RULE.CORPID) || ' segment8,' ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT9,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment9'),
'segment9',
VOUCHER_RULE.CORPID) || ' segment9,' ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT10,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment10'),
'segment10',
VOUCHER_RULE.CORPID) ||
' segment10,' ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT11,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment11'),
'segment11',
VOUCHER_RULE.CORPID) ||
' segment11,' ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT12,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment12'),
'segment12',
VOUCHER_RULE.CORPID) ||
' segment12,' ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT13,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment13'),
'segment13',
VOUCHER_RULE.CORPID) ||
' segment13,' ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT14,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment14'),
'segment14',
VOUCHER_RULE.CORPID) ||
' segment14,' ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT15,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment15'),
'segment15',
VOUCHER_RULE.CORPID) ||
' segment15,' ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT16,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment16'),
'segment16',
VOUCHER_RULE.CORPID) ||
' segment16,' ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT17,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment17'),
'segment17',
VOUCHER_RULE.CORPID) ||
' segment17,' ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT18,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment18'),
'segment18',
VOUCHER_RULE.CORPID) ||
' segment18,' ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT19,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment10'),
'segment19',
VOUCHER_RULE.CORPID) ||
' segment19,' ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT20,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment20'),
'segment20',
VOUCHER_RULE.CORPID) ||
' segment20,' || (CASE VOUCHER_RULE.DRCR
WHEN 'DR' THEN
GETCOLUMNBYRULESETTING(VOUCHER_RULE.AMOUNT,
'AMOUNT',
VOUCHER_RULE.VIEWTYPE,
NULL)
ELSE
'0'
END) || ' accounted_dr,' || (CASE VOUCHER_RULE.DRCR
WHEN 'CR' THEN
GETCOLUMNBYRULESETTING(VOUCHER_RULE.AMOUNT,
'AMOUNT',
VOUCHER_RULE.VIEWTYPE,
NULL)
ELSE
'0'
END) || ' accounted_cr,' ||
GETCOLUMNBYRULESETTING(VOUCHER_RULE.REMARK,
'REMARK',
VOUCHER_RULE.VIEWTYPE,
NULL) || ' remark,' ||
' md_billno billno';
-- 判断查询数据源
IF VOUCHER_RULE.VIEWTYPE = 'SHARE' THEN
EXCUTE_COL := EXCUTE_COL ||
', ''v_cem_voucher_share'' table_name, ''es_id'' col_id, es_id id';
EXCUTE_TAB := 'v_cem_voucher_share';
ELSIF VOUCHER_RULE.VIEWTYPE = 'PAY' THEN
EXCUTE_COL := EXCUTE_COL ||
', ''v_cem_voucher_pay'' table_name, ''pm_id'' col_id, pm_id id';
EXCUTE_TAB := 'v_cem_voucher_pay';
ELSIF VOUCHER_RULE.VIEWTYPE = 'RESERVE' THEN
EXCUTE_COL := EXCUTE_COL ||
', ''v_cem_voucher_reversal'' table_name, ''rs_id'' col_id, rs_id id';
EXCUTE_TAB := 'v_cem_voucher_reversal';
ELSIF VOUCHER_RULE.VIEWTYPE = 'REPAY' THEN
EXCUTE_COL := EXCUTE_COL ||
', ''v_cem_voucher_repay'' table_name, ''rp_id'' col_id, rp_id id';
EXCUTE_TAB := 'v_cem_voucher_repay';
ELSIF VOUCHER_RULE.VIEWTYPE = 'BORROW' THEN
EXCUTE_COL := EXCUTE_COL ||
', ''v_cem_voucher_detail'' table_name, ''dd_id'' col_id, dd_id id';
EXCUTE_TAB := 'v_cem_voucher_detail';
ELSIF VOUCHER_RULE.VIEWTYPE = 'TAXROLLOUT' THEN
EXCUTE_COL := EXCUTE_COL ||
', ''v_cem_voucher_taxrollout'' table_name, ''tr_id'' col_id, tr_id id';
EXCUTE_TAB := 'v_cem_voucher_taxrollout';
ELSIF VOUCHER_RULE.VIEWTYPE = 'LEND' THEN
EXCUTE_COL := EXCUTE_COL ||
', ''v_cem_voucher_lend'' table_name, ''tr_id'' col_id, NULL id';
EXCUTE_TAB := 'v_cem_voucher_lend';
END IF;
EXCUTE_COL := EXCUTE_COL ||
', ''N'' status, null errormsg, ''system'' creater_id, null checker_id,
null item01, null item02, null item03, null item04, null item05, null item06, null item07,
null item08, null item09, null item10, sysdate createtime, sysdate modifytime, ''system'' modifier_id,''' ||
I_VOUCHERNO || ''' voucherno,0,null,null';
--拼接适用条件
EXCUTE_COND := GETCONDBYRULEID(VOUCHER_RULE.ID);
LOGINFO('拼接适用条件,规则DI:', VOUCHER_RULE.ID);
-- sql拼接
EXCUTE_SQL := EXCUTE_COL || '
from ' || EXCUTE_TAB || '
where md_id = ''' ||
VOUCHER_BILL.MD_ID || '''';
IF trim(EXCUTE_COND) IS NOT NULL THEN
EXCUTE_SQL := EXCUTE_SQL || ' and (' || EXCUTE_COND || ')';
END IF;
-- 处理付款区数据
/* IF EXCUTE_TAB = 'v_cem_voucher_pay' THEN
EXCUTE_SQL := EXCUTE_SQL ||
' and (pm_voucherflag = ''N'' or (pm_paystatus = ''7'' and pm_voucherflag!=''P'') or (pm_paystatus = ''9'' and pm_voucherflag!=''Z''))';
END IF;*/
EXCUTE_SQL_INSERT := 'insert into t_cem_voucher_interface select SEQ_VOUCHER.NEXTVAL id,' ||
EXCUTE_SQL;
EXCUTE_SQL_COUNT := 'select count(*) from ( select ' || EXCUTE_SQL || ')';
LOGINFO('createPayVoucher', EXCUTE_SQL_INSERT);
-- 执行sql
EXECUTE IMMEDIATE EXCUTE_SQL_COUNT
INTO EXCUTE_COUNT_TEMP;
EXECUTE IMMEDIATE EXCUTE_SQL_INSERT;
COMMIT;
LOGINFO('createPayVoucher', '执行插入条数>>' || EXCUTE_COUNT_TEMP);
EXCUTE_COUNT := EXCUTE_COUNT + EXCUTE_COUNT_TEMP;
O_SUCOUNT := O_SUCOUNT + EXCUTE_COUNT_TEMP;
END LOOP;
IF EXCUTE_COUNT > 0 THEN
UPDATE T_CEM_BILL_PAYMENT P
SET P.VOUCHERFLAG = DECODE(P.PAYSTATUS, '7', 'P', '9', 'Z')
WHERE P.MAINID = VOUCHER_BILL.md_id;
COMMIT;
END IF;
END LOOP;
-- 关闭游标 cur_voucher_bill
CLOSE CUR_VOUCHER_BILL;
--插入凭证临时表 第一个参数主表区的ID 第二个billno
/*IF O_SUCOUNT > 0 THEN
INSERTVOUCHERINTERFACETEMP(I_ID, I_BILLNO);
END IF;*/
/*EXCEPTION
WHEN OTHERS THEN
LOGINFO('createPayVoucher',
'创建实付/退票凭证异常,mainid=' || I_ID || SQLERRM);*/
END CREATEPAYVOUCHER;
/** ========================================================================== **/
/**********************************************************************
* + ===== 退票凭证 ===== + *
* ********************************************************************
* *
* 类型:procedure *
* 名称:createBackVoucher(i_billno in varchar2, *
* i_pmid in varchar2, *
* o_sucount out number); *
* 参数:i_billno *
* o_sucount *
* *
**********************************************************************/
PROCEDURE CREATEBACKVOUCHER(I_BILLNO IN VARCHAR2,
I_PMID IN VARCHAR2,
I_VOUCHERNO IN VARCHAR2,
I_BILLSTATUS IN VARCHAR2,
O_SUCOUNT OUT NUMBER) AS
--
CURSOR CUR_VOUCHER_BILL IS
SELECT t.*
FROM V_CEM_VOUCHER_PAY t, t_cem_bill_maindata t1
WHERE t.md_billno = t1.billno
and t1.billstatus = '9'
and PM_VOUCHERFLAG <> 'Z'
AND MD_BILLNO = NVL(I_BILLNO, MD_BILLNO)
AND PM_ID = NVL(I_PMID, PM_ID);
VOUCHER_BILL V_CEM_VOUCHER_PAY%ROWTYPE;
EXCUTE_SQL VARCHAR2(4000);
EXCUTE_SQL_INSERT VARCHAR2(4000);
EXCUTE_SQL_COUNT VARCHAR2(4000);
EXCUTE_COL VARCHAR2(4000);
EXCUTE_TAB VARCHAR2(4000);
EXCUTE_COND VARCHAR2(4000);
EXCUTE_COUNT NUMBER;
EXCUTE_COUNT_TEMP NUMBER;
BEGIN
EXCUTE_COUNT := 0;
O_SUCOUNT := 0;
-- cur_voucher_bill
OPEN CUR_VOUCHER_BILL;
--
LOOP
FETCH CUR_VOUCHER_BILL
INTO VOUCHER_BILL;
EXIT WHEN CUR_VOUCHER_BILL%NOTFOUND;
--
FOR VOUCHER_RULE IN (SELECT R.*,
M.VOUCHERTYPECODE COA_TYPE_CODE,
M.VOUCHERTYPE COA_TYPE_NAME,
M.CORPID
FROM T_CEM_VOUCHER_RULE R, T_CEM_VOUCHER_MAIN M
WHERE R.MAINID = M.ID
AND M.RULETYPE = 'PAY'
AND R.ENABLE = '000'
AND M.ENABLE = '000'
AND M.CORPID = VOUCHER_BILL.MD_CORPID
AND INSTR(M.PERTAINBILL,
'@(' || VOUCHER_BILL.MD_BILLTYPE || ')') > 0
/*and (select cd.key from t_cem_comm_dictionary cd where cd.batchcode = 'BS' and cd.id = m.triggernode) = voucher_bill.md_billstatus*/
AND M.TRIGGERNODE = 'T') LOOP
EXCUTE_COUNT_TEMP := 0;
EXCUTE_TAB := '';
EXCUTE_COL := 'null ledger_id, ''' ||
VOUCHER_RULE.COA_TYPE_CODE ||
''' coa_type_code, ''' ||
VOUCHER_RULE.COA_TYPE_NAME ||
''' coa_type_name,
CASE WHEN md_finishtasktime IS NULL THEN SYSDATE
ELSE md_finishtasktime END accounting_date,
nvl(md_originalcurrency, ''CNY'') currency_code, ''A'' actual_flag, null doc_seq_num, null je_header_id, null je_line_num, ';
--
EXCUTE_COL := EXCUTE_COL ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT1,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment1'),
'segment1',
VOUCHER_RULE.CORPID) || ' segment1,' ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT2,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment2'),
'segment2',
VOUCHER_RULE.CORPID) || ' segment2,' ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT3,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment3'),
'segment3',
VOUCHER_RULE.CORPID) || ' segment3,' ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT4,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment4'),
'segment4',
VOUCHER_RULE.CORPID) || ' segment4,' ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT5,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment5'),
'segment5',
VOUCHER_RULE.CORPID) || ' segment5,' ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT6,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment6'),
'segment6',
VOUCHER_RULE.CORPID) || ' segment6,' ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT7,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment7'),
'segment7',
VOUCHER_RULE.CORPID) || ' segment7,' ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT8,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment8'),
'segment8',
VOUCHER_RULE.CORPID) || ' segment8,' ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT9,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment9'),
'segment9',
VOUCHER_RULE.CORPID) || ' segment9,' ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT10,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment10'),
'segment10',
VOUCHER_RULE.CORPID) ||
' segment10,' ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT11,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment11'),
'segment11',
VOUCHER_RULE.CORPID) ||
' segment11,' ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT12,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment12'),
'segment12',
VOUCHER_RULE.CORPID) ||
' segment12,' ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT13,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment13'),
'segment13',
VOUCHER_RULE.CORPID) ||
' segment13,' ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT14,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment14'),
'segment14',
VOUCHER_RULE.CORPID) ||
' segment14,' ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT15,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment15'),
'segment15',
VOUCHER_RULE.CORPID) ||
' segment15,' ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT16,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment16'),
'segment16',
VOUCHER_RULE.CORPID) ||
' segment16,' ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT17,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment17'),
'segment17',
VOUCHER_RULE.CORPID) ||
' segment17,' ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT18,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment18'),
'segment18',
VOUCHER_RULE.CORPID) ||
' segment18,' ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT19,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment19'),
'segment19',
VOUCHER_RULE.CORPID) ||
' segment19,' ||
SETVOUCHERDIMVAL(GETCOLUMNBYRULESETTING(VOUCHER_RULE.SEGMENT20,
'COL',
VOUCHER_RULE.VIEWTYPE,
'segment20'),
'segment20',
VOUCHER_RULE.CORPID) ||
' segment20,' || (CASE VOUCHER_RULE.DRCR
WHEN 'DR' THEN
GETCOLUMNBYRULESETTING(VOUCHER_RULE.AMOUNT,
'AMOUNT',
VOUCHER_RULE.VIEWTYPE,
NULL)
ELSE
'0'
END) || ' accounted_dr,' || (CASE VOUCHER_RULE.DRCR
WHEN 'CR' THEN
GETCOLUMNBYRULESETTING(VOUCHER_RULE.AMOUNT,
'AMOUNT',
VOUCHER_RULE.VIEWTYPE,
NULL)
ELSE
'0'
END) || ' accounted_cr,' ||
GETCOLUMNBYRULESETTING(VOUCHER_RULE.REMARK,
'REMARK',
VOUCHER_RULE.VIEWTYPE,
NULL) || ' remark,' ||
' md_billno billno';
--
IF VOUCHER_RULE.VIEWTYPE = 'SHARE' THEN
EXCUTE_COL := EXCUTE_COL ||
', ''v_cem_voucher_share'' table_name, ''es_id'' col_id, es_id id';
EXCUTE_TAB := 'v_cem_voucher_share';
ELSIF VOUCHER_RULE.VIEWTYPE = 'PAY' THEN
EXCUTE_COL := EXCUTE_COL ||
', ''v_cem_voucher_pay'' table_name, ''pm_id'' col_id, pm_id id';
EXCUTE_TAB := 'v_cem_voucher_pay';
ELSIF VOUCHER_RULE.VIEWTYPE = 'RESERVE' THEN
EXCUTE_COL := EXCUTE_COL ||
', ''v_cem_voucher_reversal'' table_name, ''rs_id'' col_id, rs_id id';
EXCUTE_TAB := 'v_cem_voucher_reversal';
ELSIF VOUCHER_RULE.VIEWTYPE = 'REPAY' THEN
EXCUTE_COL := EXCUTE_COL ||
', ''v_cem_voucher_repay'' table_name, ''rp_id'' col_id, rp_id id';
EXCUTE_TAB := 'v_cem_voucher_repay';
ELSIF VOUCHER_RULE.VIEWTYPE = 'BORROW' THEN
EXCUTE_COL := EXCUTE_COL ||
', ''v_cem_voucher_detail'' table_name, ''dd_id'' col_id, dd_id id';
EXCUTE_TAB := 'v_cem_voucher_detail';
ELSIF VOUCHER_RULE.VIEWTYPE = 'TAXROLLOUT' THEN
EXCUTE_COL := EXCUTE_COL ||
', ''v_cem_voucher_taxrollout'' table_name, ''tr_id'' col_id, tr_id id';
EXCUTE_TAB := 'v_cem_voucher_taxrollout';
END IF;
EXCUTE_COL := EXCUTE_COL ||
', ''N'' status, null errormsg, ''system'' creater_id, null checker_id,
null item01, null item02, null item03, null item04, null item05, null item06, null item07,
null item08, null item09, null item10, sysdate createtime, sysdate modifytime, ''system'' modifier_id,''' ||
I_VOUCHERNO || ''' voucherno,0,null,null';
--
EXCUTE_COND := GETCONDBYRULEID(VOUCHER_RULE.ID);
--
EXCUTE_SQL := EXCUTE_COL || '
from ' || EXCUTE_TAB || '
where md_id = ''' ||
VOUCHER_BILL.MD_ID || ''' and pm_id = ''' ||
VOUCHER_BILL.PM_ID || '''';
IF EXCUTE_COND IS NOT NULL THEN
EXCUTE_SQL := EXCUTE_SQL || ' and (' || EXCUTE_COND || ')';
END IF;
EXCUTE_SQL_INSERT := 'insert into t_cem_voucher_interface select SEQ_VOUCHER.NEXTVAL id,' ||
EXCUTE_SQL;
EXCUTE_SQL_COUNT := 'select count(*) from ( select ' || EXCUTE_SQL || ')';
LOGINFO('createPayVoucher', EXCUTE_SQL);
--
EXECUTE IMMEDIATE EXCUTE_SQL_COUNT
INTO EXCUTE_COUNT_TEMP;
EXECUTE IMMEDIATE EXCUTE_SQL_INSERT;
COMMIT;
LOGINFO('createPayVoucher', '执行sql>>' || EXCUTE_COUNT_TEMP);
EXCUTE_COUNT := EXCUTE_COUNT + EXCUTE_COUNT_TEMP;
O_SUCOUNT := O_SUCOUNT + EXCUTE_COUNT_TEMP;
END LOOP;
--
IF EXCUTE_COUNT > 0 THEN
UPDATE T_CEM_BILL_PAYMENT
SET VOUCHERFLAG = 'Z'
WHERE ID = VOUCHER_BILL.PM_ID;
COMMIT;
END IF;
END LOOP;
--
CLOSE CUR_VOUCHER_BILL;
EXCEPTION
WHEN OTHERS THEN
LOGINFO('createPayVoucher', '执行sql>>' || SQLERRM);
END CREATEBACKVOUCHER;
/* PROCEDURE POSTACCOUNT(O_SUCOUNT OUT NUMBER) as
VOUCHER_LINE LI_EC_TEMP%ROWTYPE;
BEGIN
-- 日志
LOGINFO('postAccount', '凭证过账开始....');
-- 删除接口表中上次生成的错误数据
DELETE FROM LI_EC@CEMREFLI WHERE WB_FLAG = 'V';
-- 插入临时表
-- INSERTVOUCHERINTERFACETEMP;
-- 根据生成的凭证信息,进行交叉验证
FOR VOUCHER_LINE IN (SELECT *
from LI_EC_TEMP T
WHERE PUSH_FLAG IS NULL
ORDER BY T.SERIAL_NO) LOOP
INSERT INTO LI_EC@CEMREFLI
VALUES
(VOUCHER_LINE.SERIAL_NO, VOUCHER_LINE.DBCODE, VOUCHER_LINE.BOOK, VOUCHER_LINE.ACCNT_CODE, VOUCHER_LINE.PERIOD, VOUCHER_LINE.TRANS_DATE, VOUCHER_LINE.BATCH_NO, VOUCHER_LINE.BATCH_LINE, VOUCHER_LINE.AMOUNT, VOUCHER_LINE.D_C, VOUCHER_LINE.ALLOCATION, VOUCHER_LINE.JRNAL_TYPE, VOUCHER_LINE.JRNAL_SRCE, VOUCHER_LINE.TREFERENCE, VOUCHER_LINE.DESCRIPTN, VOUCHER_LINE.DUE_DATE, VOUCHER_LINE.ALLOC_REF, VOUCHER_LINE.ALLOC_DATE, VOUCHER_LINE.ALLOC_PERIOD, VOUCHER_LINE.ASSET_IND, VOUCHER_LINE.ASSET_CODE, VOUCHER_LINE.ASSET_SUB, VOUCHER_LINE.CONV_CODE, VOUCHER_LINE.CONV_RATE, VOUCHER_LINE.OTHER_AMT, VOUCHER_LINE.ANAL_T0, VOUCHER_LINE.ANAL_T1, VOUCHER_LINE.ANAL_T2, VOUCHER_LINE.ANAL_T3, VOUCHER_LINE.ANAL_T4, VOUCHER_LINE.ANAL_T5, VOUCHER_LINE.ANAL_T6, VOUCHER_LINE.ANAL_T7, VOUCHER_LINE.ANAL_T8, VOUCHER_LINE.ANAL_T9, VOUCHER_LINE.WB_FLAG, VOUCHER_LINE.WB_ERR_DESC, VOUCHER_LINE.WB_JRNAL_NO, VOUCHER_LINE.WB_TREFERENCE, NULL, 0);
COMMIT;
--改费控凭证中间表状态为已导入
UPDATE LI_EC_TEMP TEMP
SET PUSH_FLAG = 'Y'
WHERE TEMP.SERIAL_NO = VOUCHER_LINE.SERIAL_NO;
COMMIT;
END LOOP;
O_SUCOUNT := 0;
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('凭证过账发生异常....');
ROLLBACK; -- 所有数据回滚
LOGINFO('createVoucher', '凭证过账到接口表中失败....');
O_SUCOUNT := 1;
END POSTACCOUNT; */
--回写过账状态
/* PROCEDURE BACKACCOUNT(O_SUCOUNT OUT NUMBER) as
BEGIN
-- 日志
LOGINFO('backAccount', '凭证回写开始....');
--回写费控临时表
FOR RECORD IN(SELECT SERIAL_NO,WB_FLAG,
WB_ERR_DESC,
WB_JRNAL_NO,
WB_TREFERENCE
FROM LI_EC@CEMREFLI
WHERE WB_FLAG IN ('V', 'Y', 'X', 'E'))LOOP
UPDATE LI_EC_TEMP T
SET T.WB_FLAG=RECORD.WB_FLAG,
T.WB_ERR_DESC=RECORD.WB_ERR_DESC,
T.WB_JRNAL_NO=RECORD.WB_JRNAL_NO,
T.WB_TREFERENCE=RECORD.WB_TREFERENCE,
T.BACK_FLAG='Y',
T.Wb_Datetime=to_char(sysdate)
WHERE T.SERIAL_NO=RECORD.SERIAL_NO
AND T.PUSH_FLAG = 'Y'
AND T.BACK_FLAG = 'N';
END LOOP;
--回写费控接口表
UPDATE T_CEM_VOUCHER_INTERFACE TI
SET (TI.ERRORMSG, TI.VOUCHERNUM1, TI.VOUCHERDATE1) =
(SELECT WB_ERR_DESC, WB_TREFERENCE, WB_DATETIME
FROM LI_EC_TEMP L
WHERE TI.ID = L.VI_ID)
WHERE (TI.VOUCHERNUM1 IS NULL OR TI.VOUCHERNUM1 = '')
AND TI.ID IN (SELECT VI_ID FROM LI_EC_TEMP WHERE BACK_FLAG = 'Y');
COMMIT;
O_SUCOUNT := 0;
EXCEPTION
WHEN NO_DATA_FOUND THEN
LOGINFO('backAccount', '凭证回写失败....');
O_SUCOUNT := 1;
END BACKACCOUNT;*/
/** ========================================================================== **/
/**********************************************************************
* + ===== ===== + *
* ********************************************************************
* *
* function *
* getColumnByRuleSetting(i_segment in varchar2, *
* i_manid in varchar2, *
* i_coltype in varchar2); *
* i_segment: *
* i_manid: *
*
* *
**********************************************************************/
FUNCTION GETCOLUMNBYRULESETTING(I_SEGMENT IN VARCHAR2,
I_COLTYPE IN VARCHAR2,
VOUCHER_TYPE IN VARCHAR2,
SEGMENT_CONSTANT IN VARCHAR2)
RETURN VARCHAR2 AS
RET_STR VARCHAR2(100);
AREA_TYPE VARCHAR2(100);
COL_STR VARCHAR2(100);
BEGIN
IF I_SEGMENT IS NOT NULL THEN
AREA_TYPE := GETSTRINARRSTR(I_SEGMENT, '#', 0);
IF AREA_TYPE = 'TEXT' THEN
RET_STR := '''' || GETSTRINARRSTR(I_SEGMENT, '#', 2) || '''';
ELSE
COL_STR := GETSTRINARRSTR(I_SEGMENT, '#', 1);
IF COL_STR IS NOT NULL THEN
IF I_COLTYPE = 'COL' THEN
IF (GETCOLPREFIXBYAREA(GETSTRINARRSTR(I_SEGMENT, '#', 0)) =
'es_' OR
GETCOLPREFIXBYAREA(GETSTRINARRSTR(I_SEGMENT, '#', 0)) =
'dd_') AND VOUCHER_TYPE = 'SHARE' THEN
RET_STR := 'p_cem_voucher.getObjCode(' ||
GETCOLPREFIXBYAREA(GETSTRINARRSTR(I_SEGMENT,
'#',
0)) ||
GETSTRINARRSTR(GETSTRINARRSTR(I_SEGMENT, '#', 1),
'_',
1) || ', ''' ||
GETSTRINARRSTR(I_SEGMENT, '#', 3) || ''',' ||
'md_id,' || 'es_id,''' || SEGMENT_CONSTANT ||
''')';
ELSE
RET_STR := 'p_cem_voucher.getObjCode(' ||
GETCOLPREFIXBYAREA(GETSTRINARRSTR(I_SEGMENT,
'#',
0)) ||
GETSTRINARRSTR(GETSTRINARRSTR(I_SEGMENT, '#', 1),
'_',
1) || ', ''' ||
GETSTRINARRSTR(I_SEGMENT, '#', 3) || ''',''' ||
''',' || '''''' || ',''' || SEGMENT_CONSTANT ||
''')';
END IF;
ELSIF I_COLTYPE = 'AMOUNT' THEN
IF GETSTRINARRSTR(I_SEGMENT, '#', 3) = 'N' THEN
RET_STR := '-' || NVL(GETCOLPREFIXBYAREA(GETSTRINARRSTR(I_SEGMENT,
'#',
0)) ||
GETSTRINARRSTR(GETSTRINARRSTR(I_SEGMENT,
'#',
1),
'_',
1),
'0');
ELSE
RET_STR := NVL(GETCOLPREFIXBYAREA(GETSTRINARRSTR(I_SEGMENT,
'#',
0)) ||
GETSTRINARRSTR(GETSTRINARRSTR(I_SEGMENT,
'#',
1),
'_',
1),
'0');
END IF;
ELSIF I_COLTYPE = 'REMARK' THEN
RET_STR := NVL(GETCOLPREFIXBYAREA(GETSTRINARRSTR(I_SEGMENT,
'#',
0)) ||
GETSTRINARRSTR(GETSTRINARRSTR(I_SEGMENT, '#', 1),
'_',
1),
'null');
RET_STR := RET_STR || ' || ' ||
NVL(GETCOLPREFIXBYAREA(GETSTRINARRSTR(SUBSTR(I_SEGMENT,
INSTR(I_SEGMENT,
'#',
1,
3) + 1,
LENGTH(SUBSTR(I_SEGMENT,
INSTR(I_SEGMENT,
'#',
1,
3) + 1,
INSTR(I_SEGMENT,
'#',
1,
5))) - 2),
'#',
0)) ||
GETSTRINARRSTR(GETSTRINARRSTR(SUBSTR(I_SEGMENT,
INSTR(I_SEGMENT,
'#',
1,
3) + 1,
LENGTH(SUBSTR(I_SEGMENT,
INSTR(I_SEGMENT,
'#',
1,
3) + 1,
INSTR(I_SEGMENT,
'#',
1,
5))) - 2),
'#',
1),
'_',
1),
'null');
END IF;
END IF;
END IF;
END IF;
IF RET_STR IS NULL THEN
RET_STR := 'null';
END IF;
RETURN RET_STR;
EXCEPTION
WHEN OTHERS THEN
LOGINFO('getColumnByRuleSetting', 'getColumnByRuleSetting...');
END GETCOLUMNBYRULESETTING;
/** ========================================================================== **/
/**********************************************************************
* + ===== ===== *
* ********************************************************************
* *
* function *
* setVoucherDimVal(i_dimVal in varchar2, *
* i_dbcolumn in varchar2), *
* i_dimVal *
* i_dbcolumn *
* *
**********************************************************************/
FUNCTION SETVOUCHERDIMVAL(I_DIMVAL IN VARCHAR2,
I_DBCOLUMN IN VARCHAR2,
I_CORPID IN VARCHAR2) RETURN VARCHAR2 AS
RET_STR VARCHAR2(100);
ENABLE_FLAG VARCHAR2(100);
DBCOUNT NUMBER;
BEGIN
SELECT COUNT(1)
INTO DBCOUNT
FROM T_CEM_VOUCHER_DIMDEFINE
WHERE CORPID = I_CORPID
AND SEGMENT = I_DBCOLUMN;
IF DBCOUNT = 0 THEN
RET_STR := I_DIMVAL;
ELSE
SELECT ENABLE
INTO ENABLE_FLAG
FROM T_CEM_VOUCHER_DIMDEFINE
WHERE CORPID = I_CORPID
AND SEGMENT = I_DBCOLUMN;
IF ENABLE_FLAG = '000' THEN
RET_STR := I_DIMVAL;
ELSE
RET_STR := 'null';
END IF;
END IF;
RETURN RET_STR;
EXCEPTION
WHEN OTHERS THEN
LOGINFO('setVoucherDimVal', 'setVoucherDimVal...');
END SETVOUCHERDIMVAL;
/** ========================================================================== **/
/**********************************************************************
* + ===== 根据规则ID,拼接适用条件 ===== *
* ********************************************************************
* *
* function *
* getCondByRuleId(i_ruleid in varchar2); *
* i_ruleid *
* *
**********************************************************************/
FUNCTION GETCONDBYRULEID(I_RULEID IN VARCHAR2) RETURN VARCHAR2 AS
RET_STR VARCHAR2(4000);
BEGIN
FOR VOUCHER_RULE_COND IN (SELECT RC.*
FROM T_CEM_VOUCHER_RULECODITION RC
WHERE RC.RULEID = I_RULEID
ORDER BY LISTNUM) LOOP
IF VOUCHER_RULE_COND.VALUETYPE = 'OBJVAL' THEN
IF VOUCHER_RULE_COND.EXPRESSION = '=' THEN
IF INSTR('coaCompany,coaDept,coaContacts',
VOUCHER_RULE_COND.BILLAREACOLTYPE) > 0 THEN
RET_STR := RET_STR || ' instr(''' || VOUCHER_RULE_COND.VALUE ||
''', ''@('' || (select ' ||
VOUCHER_RULE_COND.BILLAREACOLTYPE ||
' from t_cem_sys_dept d where d.id = ' ||
GETCOLPREFIXBYAREA(VOUCHER_RULE_COND.BILLAREA) ||
GETSTRINARRSTR(VOUCHER_RULE_COND.BILLAREACOL, '_', 1) ||
' )|| '')'') > 0';
ELSE
if VOUCHER_RULE_COND.BILLAREACOL = 'detail_isShare' THEN
if VOUCHER_RULE_COND.VALUE = '@(Y)' then
RET_STR := RET_STR || ' dd_isShare > 0';
else
RET_STR := RET_STR || ' dd_isShare = 0';
end if;
else
RET_STR := RET_STR || ' instr(''' || VOUCHER_RULE_COND.VALUE ||
''', ''@('' || ' ||
GETCOLPREFIXBYAREA(VOUCHER_RULE_COND.BILLAREA) ||
GETSTRINARRSTR(VOUCHER_RULE_COND.BILLAREACOL, '_', 1) ||
' || '')'') > 0';
end if;
END IF;
ELSE
IF VOUCHER_RULE_COND.EXPRESSION = '!=' AND
INSTR('coaCompany,coaDept,coaContacts',
VOUCHER_RULE_COND.BILLAREACOLTYPE) > 0 THEN
RET_STR := RET_STR || ' instr(''' || VOUCHER_RULE_COND.VALUE ||
''', ''@('' || (select ' ||
VOUCHER_RULE_COND.BILLAREACOLTYPE ||
' from t_cem_sys_dept d where d.id = ' ||
GETCOLPREFIXBYAREA(VOUCHER_RULE_COND.BILLAREA) ||
GETSTRINARRSTR(VOUCHER_RULE_COND.BILLAREACOL, '_', 1) ||
' )|| '')'') = 0';
ELSE
RET_STR := RET_STR || ' instr(''' || VOUCHER_RULE_COND.VALUE ||
''', ''@('' || ' ||
GETCOLPREFIXBYAREA(VOUCHER_RULE_COND.BILLAREA) ||
GETSTRINARRSTR(VOUCHER_RULE_COND.BILLAREACOL, '_', 1) ||
' || '')'') = 0';
END IF;
END IF;
ELSIF VOUCHER_RULE_COND.VALUETYPE = 'TEXT' THEN
RET_STR := RET_STR || ' p_cem_voucher.getCondObjByBillColl(' ||
GETCOLPREFIXBYAREA(VOUCHER_RULE_COND.BILLAREA) ||
GETSTRINARRSTR(VOUCHER_RULE_COND.BILLAREACOL, '_', 1) ||
', ''' || VOUCHER_RULE_COND.BILLAREACOLTYPE || ''') ' ||
VOUCHER_RULE_COND.EXPRESSION || ' ''' ||
VOUCHER_RULE_COND.VALUE || '''';
ELSIF VOUCHER_RULE_COND.VALUETYPE = 'BILLCOL' THEN
IF VOUCHER_RULE_COND.BILLAREACOLTYPE IS NOT NULL THEN
--(select d.coacompany from t_cem_sys_dept d where d.id = es_ownerdept) = (select d.coacompany from t_cem_sys_dept d where d.id = md_reqDept)
RET_STR := RET_STR || ' ' ||
'(select d.coacompany from t_cem_sys_dept d where d.id = ' ||
GETCOLPREFIXBYAREA(VOUCHER_RULE_COND.BILLAREA) ||
GETSTRINARRSTR(VOUCHER_RULE_COND.BILLAREACOL, '_', 1) || ' ' || ')' ||
VOUCHER_RULE_COND.EXPRESSION || ' ' ||
'(select d.coacompany from t_cem_sys_dept d where d.id = ' ||
GETCOLPREFIXBYAREA(GETSTRINARRSTR(VOUCHER_RULE_COND.VALUE,
'#',
0)) ||
GETSTRINARRSTR(GETSTRINARRSTR(VOUCHER_RULE_COND.VALUE,
'#',
1),
'_',
1) || ')';
ELSE
RET_STR := RET_STR || ' ' ||
GETCOLPREFIXBYAREA(VOUCHER_RULE_COND.BILLAREA) ||
GETSTRINARRSTR(VOUCHER_RULE_COND.BILLAREACOL, '_', 1) || ' ' ||
VOUCHER_RULE_COND.EXPRESSION || ' ' ||
GETCOLPREFIXBYAREA(GETSTRINARRSTR(VOUCHER_RULE_COND.VALUE,
'#',
0)) ||
GETSTRINARRSTR(GETSTRINARRSTR(VOUCHER_RULE_COND.VALUE,
'#',
1),
'_',
1);
END IF;
END IF;
IF RET_STR IS NOT NULL THEN
RET_STR := RET_STR || ' ' || VOUCHER_RULE_COND.RELATIONTYPE;
end if;
END LOOP;
RETURN RET_STR;
EXCEPTION
WHEN OTHERS THEN
LOGINFO('根据规则ID获取使用条件异常:ruleId--->', I_RULEID);
END GETCONDBYRULEID;
/** ========================================================================== **/
/**********************************************************************
* + ===== GETCONDOBJBYBILLCOLL ===== *
* ********************************************************************
* *
* function *
* getObjCode(i_id in varchar2, *
* i_idtype in varchar2); *
* *
**********************************************************************/
FUNCTION GETCONDOBJBYBILLCOLL(I_ID IN VARCHAR2, I_IDTYPE IN VARCHAR2)
RETURN VARCHAR2 AS
RET_STR VARCHAR2(100);
DEPT_COUNT NUMBER;
OBJ_COUNT NUMBER;
AREA VARCHAR2(8);
BEGIN
--
SELECT COUNT(*)
INTO DEPT_COUNT
FROM T_CEM_SYS_DEPT D
WHERE ENABLE = '000'
AND STS = 'Y'
AND ID = I_ID;
SELECT COUNT(*)
INTO OBJ_COUNT
FROM T_CEM_SYS_OBJECT
WHERE ENABLE = '000'
AND STS = 'Y'
AND ID = I_ID;
--
IF DEPT_COUNT > 0 THEN
--
IF I_IDTYPE = 'COACOMPANY' THEN
--
SELECT NVL(D.COACOMPANY, D.PARENTID)
INTO RET_STR
FROM T_CEM_SYS_DEPT D
WHERE D.ENABLE = '000'
AND D.STS = 'Y'
AND D.ID = I_ID;
ELSIF I_IDTYPE = 'COADEPT' THEN
--
SELECT NVL(D.COADEPT, D.ID)
INTO RET_STR
FROM T_CEM_SYS_DEPT D
WHERE D.ENABLE = '000'
AND D.STS = 'Y'
AND D.ID = I_ID;
ELSIF I_IDTYPE = 'COACONTACTS' THEN
--
SELECT NVL(D.COACONTACTS, NVL(D.COACOMPANY, D.PARENTID))
INTO RET_STR
FROM T_CEM_SYS_DEPT D
WHERE D.ENABLE = '000'
AND D.STS = 'Y'
AND D.ID = I_ID;
ELSIF I_IDTYPE = 'DEPTTYPE' THEN
--
SELECT NVL(TO_CHAR(D.BUSTYPE), D.ID)
INTO RET_STR
FROM T_CEM_SYS_DEPT D
WHERE D.ENABLE = '000'
AND D.STS = 'Y'
AND D.ID = I_ID;
ELSE
RET_STR := I_ID;
END IF;
END IF;
IF OBJ_COUNT > 0 THEN
RET_STR := I_ID;
END IF;
--
IF RET_STR IS NULL THEN
RET_STR := I_ID;
END IF;
RETURN RET_STR;
EXCEPTION
WHEN NO_DATA_FOUND THEN
RETURN '0';
END GETCONDOBJBYBILLCOLL;
/** ========================================================================== **/
/**********************************************************************
* + ===== GETCOLPREFIXBYAREA ===== *
* ********************************************************************
* *
* function *
* getColPrefixByArea(i_areaCode in varchar2); *
* i_areaCode *
* *
**********************************************************************/
FUNCTION GETCOLPREFIXBYAREA(I_AREACODE IN VARCHAR2) RETURN VARCHAR2 AS
RET_STR VARCHAR2(20);
BEGIN
IF I_AREACODE = '000' THEN
--
RET_STR := 'dd_';
ELSIF I_AREACODE = '000R' THEN
--
RET_STR := 'rel_dd_';
ELSIF I_AREACODE = '001' THEN
--
RET_STR := 'pm_';
ELSIF I_AREACODE = '001R' THEN
--
RET_STR := 'rel_pm_';
ELSIF I_AREACODE = '002' THEN
--
RET_STR := 'rp_';
ELSIF I_AREACODE = '003' THEN
--
RET_STR := 'rs_';
ELSIF I_AREACODE = '004' THEN
--
RET_STR := 'es_';
ELSIF I_AREACODE = '005' THEN
--
RET_STR := 'md_';
ELSIF I_AREACODE = '005R' THEN
--
RET_STR := 'rel_md_';
ELSIF I_AREACODE = '008' THEN
--
RET_STR := 'lend_';
ELSIF I_AREACODE = '009' THEN
--
RET_STR := 'dd_';
ELSIF I_AREACODE = 'OUT' THEN
--
RET_STR := 'tr_';
END IF;
RETURN RET_STR;
EXCEPTION
WHEN OTHERS THEN
LOGINFO('getColPrefixByArea', 'getColPrefixByArea...');
END GETCOLPREFIXBYAREA;
/** ========================================================================== **/
/**********************************************************************
* + ===== ===== *
* ********************************************************************
* *
* function *
* getStrInArrStr(i_arrStr in varchar2, *
* i_splitStr in varchar2, *
* i_index in number); *
* i_arrStr: *
* i_splitStr: *
* i_index *
* *
**********************************************************************/
FUNCTION GETSTRINARRSTR(I_ARRSTR IN VARCHAR2,
I_SPLITSTR IN VARCHAR2,
I_INDEX IN NUMBER) RETURN VARCHAR2 AS
RET_STR VARCHAR2(100);
BEGIN
IF INSTR(I_ARRSTR, I_SPLITSTR, 1, 1) > 0 THEN
IF I_INDEX = 0 THEN
RET_STR := SUBSTR(I_ARRSTR,
0,
INSTR(I_ARRSTR, I_SPLITSTR, 1, I_INDEX + 1) - 1);
ELSIF I_INDEX > 0 THEN
IF INSTR(I_ARRSTR, I_SPLITSTR, 1, I_INDEX + 1) > 0 THEN
RET_STR := SUBSTR(I_ARRSTR,
INSTR(I_ARRSTR, I_SPLITSTR, 1, I_INDEX) + 1,
INSTR(I_ARRSTR, I_SPLITSTR, 1, I_INDEX + 1) -
INSTR(I_ARRSTR, I_SPLITSTR, 1, I_INDEX) - 1);
ELSE
RET_STR := SUBSTR(I_ARRSTR,
INSTR(I_ARRSTR, I_SPLITSTR, 1, I_INDEX) + 1);
END IF;
END IF;
ELSE
RET_STR := '';
END IF;
RETURN RET_STR;
EXCEPTION
WHEN OTHERS THEN
LOGINFO('getStrInArrStr', 'getStrInArrStr...');
END GETSTRINARRSTR;
/** ========================================================================== **/
/**********************************************************************
* + ===== GETOBJCODE ===== *
* ********************************************************************
* *
* function *
* getObjCode(i_id in varchar2, *
* i_idtype in varchar2); *
* i_id: *
* i_idtype: *
* COACOMPANY: *
* COADEPT: *
* COACONTACTS: *
* *
**********************************************************************/
FUNCTION GETOBJCODE(I_ID IN VARCHAR2,
I_IDTYPE IN VARCHAR2,
I_MAINID IN VARCHAR2,
I_SHAREID IN VARCHAR2,
SEGMENT_CONSTANT IN VARCHAR2) RETURN VARCHAR2 AS
RET_STR VARCHAR2(100);
DEPT_COUNT NUMBER;
OBJ_COUNT NUMBER;
SHARE_COLUMNNAME VARCHAR2(32); --
BUSTYPE VARCHAR2(32); --
SELECT_SQL VARCHAR2(4000);
DD_ID VARCHAR2(32);
BEGIN
--
SELECT COUNT(*)
INTO DEPT_COUNT
FROM T_CEM_SYS_DEPT D
WHERE ENABLE = '000'
AND STS = 'Y'
AND ID = I_ID;
SELECT COUNT(*)
INTO OBJ_COUNT
FROM T_CEM_SYS_OBJECT
WHERE ENABLE = '000'
AND STS = 'Y'
AND ID = I_ID;
--
IF DEPT_COUNT > 0 THEN
--
IF I_IDTYPE = 'COACOMPANY' THEN
--
SELECT NVL((SELECT O.CODE
FROM T_CEM_SYS_OBJECT O
WHERE O.ID = D.COACOMPANY),
(SELECT DP.CODE
FROM T_CEM_SYS_DEPT DP
WHERE DP.ID = D.PARENTID))
INTO RET_STR
FROM T_CEM_SYS_DEPT D
WHERE D.ENABLE = '000'
AND D.STS = 'Y'
AND D.ID = I_ID;
ELSIF I_IDTYPE = 'COADEPT' THEN
--
SELECT NVL((SELECT O.CODE
FROM T_CEM_SYS_OBJECT O
WHERE O.ID = D.COADEPT),
D.CODE)
INTO RET_STR
FROM T_CEM_SYS_DEPT D
WHERE D.ENABLE = '000'
AND D.STS = 'Y'
AND D.ID = I_ID;
ELSIF I_IDTYPE = 'COACONTACTS' THEN
--
SELECT NVL(D.COACONTACTS,
NVL((SELECT O.CODE
FROM T_CEM_SYS_OBJECT O
WHERE O.ID = D.COACOMPANY),
(SELECT DP.CODE
FROM T_CEM_SYS_DEPT DP
WHERE DP.ID = D.PARENTID)))
INTO RET_STR
FROM T_CEM_SYS_DEPT D
WHERE D.ENABLE = '000'
AND D.STS = 'Y'
AND D.ID = I_ID;
ELSE
SELECT D.CODE
INTO RET_STR
FROM T_CEM_SYS_DEPT D
WHERE D.ENABLE = '000'
AND D.STS = 'Y'
AND D.ID = I_ID;
END IF;
END IF;
IF OBJ_COUNT > 0 THEN
--
BEGIN
SELECT 'es' || SUBSTR(R.DBCOLUMN,
INSTR(R.DBCOLUMN, '_'),
LENGTH(R.DBCOLUMN) - 1)
INTO SHARE_COLUMNNAME
FROM T_CEM_BILL_BILLREFDEFINE R,
T_CEM_SYS_OBJECTTYPE T,
T_CEM_BILL_MAINDATA M
WHERE M.BILLTYPE = R.BILLID
AND M.ID = I_MAINID
AND R.DATATYPE = T.ID
AND T.TYPECODE = 'dept'
AND AREA = '004'
AND ROWNUM = 1;
EXCEPTION
WHEN NO_DATA_FOUND THEN
SHARE_COLUMNNAME := '';
END;
--
SELECT COUNT(1)
INTO OBJ_COUNT
FROM T_CEM_BILL_MAINDATA M, T_CEM_BILL_EXPENSESHARE E
WHERE M.ID = E.MAINID
AND M.ID = I_MAINID;
IF SHARE_COLUMNNAME IS NULL OR OBJ_COUNT = 0 THEN
SELECT NVL((SELECT IO.CODE
FROM T_CEM_SYS_OBJECT IO, T_CEM_VOUCHER_COAMAPPING IC
WHERE IO.ID = IC.REFOBJEVAL
AND IC.OBJEVAL = O.ID
AND IC.DEPTBUSYTYPE IS NULL
AND IC.VOUCHERDIM = SEGMENT_CONSTANT),
O.CODE)
INTO RET_STR
FROM T_CEM_SYS_OBJECT O
WHERE O.ENABLE = '000'
AND O.STS = 'Y'
AND O.ID = I_ID;
/*SELECT IO.CODE
INTO RET_STR
FROM T_CEM_SYS_OBJECT IO, T_CEM_VOUCHER_COAMAPPING IC
WHERE IC.REFOBJEVAL = IO.ID
AND IC.OBJEVAL = I_ID
AND IO.ENABLE = '000'
AND IO.STS = 'Y'
AND IC.VOUCHERDIM = SEGMENT_CONSTANT;*/
ELSE
SELECT_SQL := 'select o.bustype from v_cem_voucher_share v,t_cem_sys_dept o
where v.es_id = ''' || '' || I_SHAREID || '' ||
''' and v.md_id = ''' || '' || I_MAINID || '' ||
''' and o.id = ' || SHARE_COLUMNNAME || '';
BEGIN
EXECUTE IMMEDIATE SELECT_SQL
INTO BUSTYPE;
EXCEPTION
WHEN NO_DATA_FOUND THEN
BUSTYPE := '';
END;
IF BUSTYPE IS NULL THEN
--
SELECT D.ID
INTO DD_ID
FROM T_CEM_BILL_DETAILDATA D, T_CEM_BILL_EXPENSESHARE E
WHERE D.MAINID = E.MAINID
AND D.NO = E.CONNNO
AND D.MAINID = I_MAINID
AND E.ID = I_SHAREID;
SELECT_SQL := 'select o.bustype from v_cem_voucher_share v,t_cem_sys_dept o
where v.es_id = ''' || '' || I_SHAREID || '' ||
''' and v.dd_id = ''' || '' || DD_ID || '' ||
''' and v.md_id = ''' || '' || I_MAINID || '' ||
''' and o.id = ' || SHARE_COLUMNNAME || '';
BEGIN
EXECUTE IMMEDIATE SELECT_SQL
INTO BUSTYPE;
EXCEPTION
WHEN NO_DATA_FOUND THEN
BUSTYPE := '';
END;
END IF;
--
SELECT COUNT(1)
INTO OBJ_COUNT
FROM T_CEM_SYS_OBJECT IO, T_CEM_VOUCHER_COAMAPPING IC
WHERE IO.ID = IC.REFOBJEVAL
AND IC.OBJEVAL = I_ID
AND IC.DEPTBUSYTYPE = BUSTYPE;
IF OBJ_COUNT > 0 THEN
SELECT IO.CODE
INTO RET_STR
FROM T_CEM_SYS_OBJECT IO, T_CEM_VOUCHER_COAMAPPING IC
WHERE IO.ID = IC.REFOBJEVAL
AND IC.OBJEVAL = I_ID
AND IC.DEPTBUSYTYPE = BUSTYPE
AND IC.VOUCHERDIM = SEGMENT_CONSTANT;
ELSE
SELECT NVL((SELECT IO.CODE
FROM T_CEM_SYS_OBJECT IO,
T_CEM_VOUCHER_COAMAPPING IC
WHERE IO.ID = IC.REFOBJEVAL
AND IC.OBJEVAL = O.ID
AND IC.DEPTBUSYTYPE IS NULL
AND IC.VOUCHERDIM = SEGMENT_CONSTANT),
O.CODE)
INTO RET_STR
FROM T_CEM_SYS_OBJECT O
WHERE O.ENABLE = '000'
AND O.STS = 'Y'
AND O.ID = I_ID;
END IF;
END IF;
END IF;
IF RET_STR IS NULL THEN
RET_STR := I_ID; --
END IF;
--
RETURN RET_STR;
EXCEPTION
WHEN NO_DATA_FOUND THEN
RETURN '0';
END GETOBJCODE;
/** ========================================================================== **/
/**********************************************************************
* + == == *
* == == *
* ********************************************************************
* *
* function *
* getRuleSegName(i_segment in varchar2, *
* i_rulemainid in varchar2); *
* _segment:segment *
* i_rulemainid *
* *
**********************************************************************/
FUNCTION GETRULESEGNAME(I_SEGMENT IN VARCHAR2, I_RULEMAINID IN VARCHAR2)
RETURN VARCHAR2 AS
O_SEGMENT_NAME VARCHAR2(128);
AREA VARCHAR2(64);
AREA_SELECT VARCHAR2(64);
AREA_INPUT VARCHAR2(64);
AREA_SELECT_TYPE VARCHAR2(64);
SEGMENTNAMETEMP VARCHAR2(64);
BEGIN
IF I_SEGMENT IS NOT NULL THEN
AREA := GETSTRINARRSTR(I_SEGMENT, '#', 0);
AREA_SELECT := GETSTRINARRSTR(I_SEGMENT, '#', 1);
AREA_INPUT := GETSTRINARRSTR(I_SEGMENT, '#', 2);
AREA_SELECT_TYPE := GETSTRINARRSTR(I_SEGMENT, '#', 3);
IF AREA = 'TEXT' THEN
O_SEGMENT_NAME := '指定值|' || AREA_INPUT;
ELSIF AREA = 'OUT' THEN
O_SEGMENT_NAME := '进项税转出';
IF AREA_SELECT = 'out_rate' THEN
O_SEGMENT_NAME := O_SEGMENT_NAME || '|转出比例';
ELSIF AREA_SELECT = 'out_amount' THEN
O_SEGMENT_NAME := O_SEGMENT_NAME || '|转出金额';
ELSIF AREA_SELECT = 'out_type' THEN
O_SEGMENT_NAME := O_SEGMENT_NAME || '|转出类型';
ELSIF AREA_SELECT = 'out_lender' THEN
O_SEGMENT_NAME := O_SEGMENT_NAME || '|转出借方科目';
ELSIF AREA_SELECT = 'out_taxamount' THEN
O_SEGMENT_NAME := O_SEGMENT_NAME || '|转出金额';
END IF;
ELSE
IF AREA = '000R' THEN
O_SEGMENT_NAME := '关联明细区';
ELSIF AREA = '001R' THEN
O_SEGMENT_NAME := '关联付款区';
ELSIF AREA = '005R' THEN
O_SEGMENT_NAME := '关联主表区';
ELSE
IF AREA = '000' THEN
O_SEGMENT_NAME := '预算区';
ELSIF AREA = '001' THEN
O_SEGMENT_NAME := '付款区';
ELSIF AREA = '002' THEN
O_SEGMENT_NAME := '还款区';
ELSIF AREA = '003' THEN
O_SEGMENT_NAME := '核销区';
ELSIF AREA = '004' THEN
O_SEGMENT_NAME := '分摊区';
ELSIF AREA = '005' THEN
O_SEGMENT_NAME := '主表区';
ELSIF AREA = '008' THEN
O_SEGMENT_NAME := '借款区';
ELSIF AREA = '009' THEN
O_SEGMENT_NAME := '发票区';
ELSE
O_SEGMENT_NAME := '';
END IF;
END IF;
IF AREA_SELECT IS NOT NULL THEN
IF AREA_SELECT = 'main_remark' THEN
SEGMENTNAMETEMP := '描述';
ELSE
SELECT D.FIELDNAME
INTO SEGMENTNAMETEMP
FROM T_CEM_BILL_DEFINECOLUMN D, T_CEM_VOUCHER_MAIN VM
WHERE D.CORPID = VM.CORPID
AND D.ENABLE = '000'
AND VM.ENABLE = '000'
AND VM.ID = I_RULEMAINID
AND D.AREANUM = SUBSTR(AREA, 0, 3)
AND D.AREA_FIELDCOL = AREA_SELECT
AND ROWNUM <= 1;
END IF;
IF SEGMENTNAMETEMP IS NOT NULL THEN
O_SEGMENT_NAME := O_SEGMENT_NAME || '|' || SEGMENTNAMETEMP;
END IF;
END IF;
IF AREA_SELECT_TYPE = 'COACOMPANY' THEN
O_SEGMENT_NAME := O_SEGMENT_NAME || '|' || '核算机构';
ELSIF AREA_SELECT_TYPE = 'COADEPT' THEN
O_SEGMENT_NAME := O_SEGMENT_NAME || '|' || '核算部门';
ELSIF AREA_SELECT_TYPE = 'COACONTACTS' THEN
O_SEGMENT_NAME := O_SEGMENT_NAME || '|' || '机构往来';
ELSIF AREA_SELECT_TYPE = 'Y' THEN
O_SEGMENT_NAME := O_SEGMENT_NAME || '|' || '正';
ELSIF AREA_SELECT_TYPE = 'N' THEN
O_SEGMENT_NAME := O_SEGMENT_NAME || '|' || '负';
END IF;
END IF;
END IF;
RETURN O_SEGMENT_NAME;
EXCEPTION
WHEN NO_DATA_FOUND THEN
-- logInfo('getRuleSegName', 'getRuleSegName...');
RETURN '';
END GETRULESEGNAME;
/** ========================================================================== **/
/**********************************************************************
* + == == *
* == == *
* ********************************************************************
* *
* 类型:function *
* 名称:getReportSegName(i_segment_code in varchar2, *
* i_segment in varchar2); *
* 参数:_segment_code *
* i_segment *
* i_corpid *
* *
**********************************************************************/
FUNCTION GETREPORTSEGNAME(I_SEGMENT_CODE IN VARCHAR2,
I_SEGMENT IN VARCHAR2,
I_CORPID IN VARCHAR2) RETURN VARCHAR2 AS
O_SEGMENT_NAME VARCHAR2(128);
OBJECT_TYPE_CODE VARCHAR2(32);
OBJECT_TYPE_ID VARCHAR2(32);
BEGIN
IF I_SEGMENT IS NOT NULL THEN
IF I_SEGMENT_CODE = '0' THEN
O_SEGMENT_NAME := '指定值(0)';
ELSE
SELECT NVL(O.TYPECODE, 'NULL')
INTO OBJECT_TYPE_CODE
FROM T_CEM_SYS_OBJECTTYPE O, T_CEM_VOUCHER_DIMDEFINE DD
WHERE DD.CORPID = I_CORPID
AND O.ID = DD.OBJTYPEID
AND O.ENABLE = '000'
AND O.STS = 'Y'
AND DD.SEGMENT = I_SEGMENT;
IF OBJECT_TYPE_CODE = 'dept' THEN
SELECT D.NAME || '(' || D.CODE || ')'
INTO O_SEGMENT_NAME
FROM T_CEM_SYS_DEPT D
WHERE D.CORPID = I_CORPID
AND D.ENABLE = '000'
AND D.STS = 'Y'
AND D.CODE = I_SEGMENT_CODE;
ELSE
SELECT O.NAME || '(' || O.CODE || ')'
INTO O_SEGMENT_NAME
FROM T_CEM_SYS_OBJECT O, T_CEM_VOUCHER_DIMDEFINE DD
WHERE DD.CORPID = I_CORPID
AND O.ENABLE = '000'
AND O.STS = 'Y'
AND O.OBJECTTYPEID = DD.OBJTYPEID
AND DD.SEGMENT = I_SEGMENT
AND O.CODE = I_SEGMENT_CODE;
END IF;
END IF;
END IF;
IF O_SEGMENT_NAME IS NULL OR O_SEGMENT_NAME = '' THEN
O_SEGMENT_NAME := I_SEGMENT_CODE;
END IF;
RETURN O_SEGMENT_NAME;
EXCEPTION
WHEN NO_DATA_FOUND THEN
RETURN '指定值' || I_SEGMENT_CODE;
END GETREPORTSEGNAME;
PROCEDURE LOGINFO(I_PROCNAME IN VARCHAR2, I_MSG IN VARCHAR2) AS
BEGIN
--DBMS_OUTPUT.PUT_LINE(SYSDATE || '>>>>' || I_PROCNAME || '描述:' || I_MSG);
/*INSERT INTO T_CEM_VOUCHER_LOG
VALUES
(SEQ_VOUCHER_LOG.NEXTVAL, I_PROCNAME, I_MSG, SYSDATE);*/
INSERT INTO T_CEM_VOUCHER_LOG_cux
VALUES
(SEQ_VOUCHER_LOG.NEXTVAL, I_PROCNAME, I_MSG, SYSDATE);
commit;
END LOGINFO;
--插入凭证中间表
PROCEDURE INSERTVOUCHERINTERFACETEMP AS
BEGIN
--插入临时表
INSERT INTO LI_EC_TEMP
SELECT TO_CHAR(SYSDATE, 'yyyymmddhh24miss') ||
LPAD(S_VOUCHERINTERFACE.NEXTVAL, 4, 0), --前台批次行号
substr(VI.SEGMENT1, 0, 3), --帐套代码
'A', --账本代码
VI.SEGMENT3, --会计科目
TO_CHAR(VI.ACCOUNTING_DATE, 'YYYY') || '0' ||
TO_CHAR(VI.ACCOUNTING_DATE, 'MM'), --记账期间YYYYMMM
TO_CHAR(VI.ACCOUNTING_DATE, 'YYYYMMDD'), --凭证日期YYYYMMDD
' ', --批次号码,可不传
0, --批次行号,可不传
NVL(DECODE(TO_NUMBER(VI.ACCOUNTED_DR),
0,
TO_NUMBER(ACCOUNTED_CR),
TO_NUMBER(ACCOUNTED_DR)),
0), --本币金额
DECODE(TO_NUMBER(VI.ACCOUNTED_DR), 0, 'C', 'D'), --借贷方,借D贷C
' ', --冲账注记,可不传
-- 'GJ', --凭证类型代码
VI.Coa_Type_Code,--凭证类型代码
'FK', --凭证来源
'GJ00001', --凭证号码
VI.Remark, --凭证说明 ,12个汉字 --更改摘要为单据号 edit by YouGuoqing 2017/11/14
0, --到期日,可不传
0, --冲账号码,可不传
0, --冲账日期,可不传
0, --冲账期间,可不传
' ', --资产型态,可不传
' ', --资产代码,可不传
' ', --资产次码,可不传
'CNY', --币别
1, --汇率
NVL(DECODE(TO_NUMBER(VI.ACCOUNTED_DR),
0,
TO_NUMBER(ACCOUNTED_CR),
TO_NUMBER(ACCOUNTED_DR)),
0), --外币金额
NVL(VI.SEGMENT5, ' '), --险种
NVL(VI.SEGMENT6, ' '), --渠道
NVL(VI.SEGMENT2, ' '), --部门
NVL(VI.SEGMENT4, ' '), --现金流量
NVL(VI.SEGMENT7, ' '), --往来机构
'A', --分析码5(缴别)
' ', --分析码6
'41', --分析码7(费用类别-前台)
' ', --分析码8
NVL(VI.SEGMENT1, ' '), --分析码9(分支机构代码)
' ', --导入回写标志
' ', --错误原因
0, --过账号码
0, --凭证号码
' ', --汇入时间
NULL, --前台资料下传时间
NULL, --导入标识
'N', --待回写
VI.Billno, --单据号
VI.ID, --费控凭证表ID
VI.Billno||VI.Coa_Type_Name --billno||凭证类型名称
FROM T_CEM_VOUCHER_INTERFACE VI
where vi.accounting_date
between
to_date(TO_CHAR(LAST_DAY(ADD_MONTHS(SYSDATE, -2)) + 1, 'YYYYMMDD'),'yyyymmdd')
and
to_date(TO_CHAR(LAST_DAY(ADD_MONTHS(SYSDATE, -1)), 'YYYYMMDD'),'yyyymmdd')
and VI.STATUS = 'N';
--更新T_CEM_VOUCHER_INTERFACE
UPDATE T_CEM_VOUCHER_INTERFACE UPINTERFACE
SET UPINTERFACE.STATUS = 'Y', UPINTERFACE.MODIFYTIME = SYSDATE
WHERE UPINTERFACE.STATUS = 'N'
and UPINTERFACE.accounting_date
between
to_date(TO_CHAR(LAST_DAY(ADD_MONTHS(SYSDATE, -2)) + 1, 'YYYYMMDD'),'yyyymmdd')
and
to_date(TO_CHAR(LAST_DAY(ADD_MONTHS(SYSDATE, -1)), 'YYYYMMDD'),'yyyymmdd');
commit;
EXCEPTION
WHEN OTHERS THEN
LOGINFO('insertVoucherInterface','插入临时表异常');
END;
--印花税
PROCEDURE STAMPDUTYTAX(I_STAMPID IN VARCHAR2,
I_ACCOUNT IN VARCHAR2,
I_CASHFLOW IN VARCHAR2) AS
--
CURSOR CUR_STAMP_CONTRACT IS
SELECT * FROM V_STAMP_CONTRACT VS WHERE VS.ID = I_STAMPID;
STAMPCONTRACTTEMP V_STAMP_CONTRACT%ROWTYPE;
V_NUM VARCHAR2(255);
V_SEGMENT_1 VARCHAR2(255);
V_SEGMENT_2 VARCHAR2(255);
V_SEGMENT_3 VARCHAR2(255);
V_SEGMENT_7 VARCHAR2(255);
V_PAYSTATUS VARCHAR2(10);
BEGIN
OPEN CUR_STAMP_CONTRACT;
LOOP
FETCH CUR_STAMP_CONTRACT
INTO STAMPCONTRACTTEMP;
EXIT WHEN CUR_STAMP_CONTRACT%NOTFOUND;
--印花税
V_PAYSTATUS := STAMPCONTRACTTEMP.PAYSTATE;
IF V_PAYSTATUS = '0' THEN
--segment1
SELECT CODE
INTO V_SEGMENT_1
FROM T_CEM_SYS_OBJECT O
WHERE ID = (SELECT COACOMPANY
FROM T_CEM_SYS_DEPT DEPT
WHERE DEPT.ID = STAMPCONTRACTTEMP.DEPT);
--segment2
SELECT CODE
INTO V_SEGMENT_2
FROM T_CEM_SYS_OBJECT O
WHERE ID = (SELECT COADEPT
FROM T_CEM_SYS_DEPT DEPT
WHERE DEPT.ID = STAMPCONTRACTTEMP.DEPT);
--印花税-借方
INSERTVOUCHERINTERFACE('FKYT008',
'计提印花税',
V_SEGMENT_1,
V_SEGMENT_2,
'6403025001',
'0',
STAMPCONTRACTTEMP.TAXAMOUNT,
'0',
'印花税计提',
STAMPCONTRACTTEMP.ID);
--印花税-贷方
INSERTVOUCHERINTERFACE('FKYT008',
'计提印花税',
V_SEGMENT_1,
V_SEGMENT_2,
'2221025001',
'0',
'0',
STAMPCONTRACTTEMP.TAXAMOUNT,
'印花税计提',
STAMPCONTRACTTEMP.ID);
--支付印花税
ELSIF STAMPCONTRACTTEMP.PAYSTATE = '1' THEN
--segment1
SELECT CODE
INTO V_SEGMENT_1
FROM T_CEM_SYS_OBJECT O
WHERE ID = (SELECT COACOMPANY
FROM T_CEM_SYS_DEPT DEPT
WHERE DEPT.ID = STAMPCONTRACTTEMP.DEPT);
--segment2
SELECT CODE
INTO V_SEGMENT_2
FROM T_CEM_SYS_OBJECT O
WHERE ID = (SELECT COADEPT
FROM T_CEM_SYS_DEPT DEPT
WHERE DEPT.ID = STAMPCONTRACTTEMP.DEPT);
--segment3
SELECT O.NAME
INTO V_SEGMENT_3
FROM T_CEM_SYS_OBJECT O
WHERE O.ID = I_ACCOUNT;
--segment7
SELECT O.NAME
INTO V_SEGMENT_7
FROM T_CEM_SYS_OBJECT O
WHERE O.ID = I_CASHFLOW;
--支付印花税-借方
INSERTVOUCHERINTERFACE('FKZY009',
'支付印花税',
V_SEGMENT_1,
V_SEGMENT_2,
'2221025001',
'0',
STAMPCONTRACTTEMP.TAXAMOUNT,
'0',
'支付印花税',
STAMPCONTRACTTEMP.ID);
--支付印花税-贷方
INSERTVOUCHERINTERFACE('FKZY009',
'支付印花税',
V_SEGMENT_1,
V_SEGMENT_2,
V_SEGMENT_3,
V_SEGMENT_7,
'0',
STAMPCONTRACTTEMP.TAXAMOUNT,
'支付印花税',
STAMPCONTRACTTEMP.ID);
END IF;
END LOOP;
CLOSE CUR_STAMP_CONTRACT;
COMMIT;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('------->印花税创建凭证异常');
DBMS_OUTPUT.PUT_LINE(DBMS_UTILITY.FORMAT_ERROR_BACKTRACE);
END;
--插入t_cem_voucher_interface
PROCEDURE INSERTVOUCHERINTERFACE(COATYPECODE IN VARCHAR2,
COATYPENAME IN VARCHAR2,
SEGMENT_1 IN VARCHAR2,
SEGMENT_2 IN VARCHAR2,
SEGMENT_3 IN VARCHAR2,
SEGMENT_7 IN VARCHAR2,
ACCOUNTEDDR IN VARCHAR2,
ACCOUNTEDCR IN VARCHAR2,
REMARK IN VARCHAR2,
STAMPNO IN VARCHAR2) AS
BEGIN
INSERT INTO T_CEM_VOUCHER_INTERFACE
SELECT SEQ_VOUCHER.NEXTVAL,
NULL,
COATYPECODE,
COATYPENAME,
SYSDATE,
'CNY',
'T',
NULL,
NULL,
NULL,
SEGMENT_1,
SEGMENT_2,
SEGMENT_3,
'0',
'0',
'0',
SEGMENT_7,
'0',
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
ACCOUNTEDDR,
ACCOUNTEDCR,
REMARK,
STAMPNO,
't_cem_contract_stampduty',
'印花税表Id',
'STAMPID',
'N',
NULL,
'system',
'system',
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
SYSDATE,
SYSDATE,
'system',
NULL,
'0',
NULL,
NULL
FROM DUAL;
COMMIT;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('------->插入voucherIntrefac异常');
DBMS_OUTPUT.PUT_LINE(DBMS_UTILITY.FORMAT_ERROR_BACKTRACE);
END;
PROCEDURE POSTACCOUNTTOEBS_CUX(O_SUCOUNT OUT NUMBER) as
VOUCHER_LINE LI_EC_TEMP%ROWTYPE;
v_sqlcode number;
v_sqlerrm varchar2(4000);
BEGIN
-- 日志
LOGINFO('postAccount', '凭证过账开始....');
/* -- 将数据插入临时表中,并提交事物
BEGIN
--插入临时表
INSERT INTO LI_EC_TEMP
SELECT TO_CHAR(SYSDATE, 'yyyymmddhh24miss') ||
LPAD(S_VOUCHERINTERFACE.NEXTVAL, 4, 0), --前台批次行号
substr(VI.SEGMENT1, 0, 3), --帐套代码
'A', --账本代码
VI.SEGMENT3, --会计科目
TO_CHAR(VI.ACCOUNTING_DATE, 'YYYY') || '0' ||
TO_CHAR(VI.ACCOUNTING_DATE, 'MM'), --记账期间YYYYMMM
TO_CHAR(VI.ACCOUNTING_DATE, 'YYYYMMDD'), --凭证日期YYYYMMDD
' ', --批次号码,可不传
0, --批次行号,可不传
NVL(DECODE(TO_NUMBER(VI.ACCOUNTED_DR),
0,
TO_NUMBER(ACCOUNTED_CR),
TO_NUMBER(ACCOUNTED_DR)),
0), --本币金额
DECODE(TO_NUMBER(VI.ACCOUNTED_DR), 0, 'C', 'D'), --借贷方,借D贷C
' ', --冲账注记,可不传
-- 'GJ', --凭证类型代码
VI.Coa_Type_Code,--凭证类型代码
'FK', --凭证来源
'GJ00001', --凭证号码
VI.Remark, --凭证说明 ,12个汉字 --更改摘要为单据号 edit by YouGuoqing 2017/11/14
0, --到期日,可不传
0, --冲账号码,可不传
0, --冲账日期,可不传
0, --冲账期间,可不传
' ', --资产型态,可不传
' ', --资产代码,可不传
' ', --资产次码,可不传
'CNY', --币别
1, --汇率
NVL(DECODE(TO_NUMBER(VI.ACCOUNTED_DR),
0,
TO_NUMBER(ACCOUNTED_CR),
TO_NUMBER(ACCOUNTED_DR)),
0), --外币金额
NVL(VI.SEGMENT5, ' '), --险种
NVL(VI.SEGMENT6, ' '), --渠道
NVL(VI.SEGMENT2, ' '), --部门
NVL(VI.SEGMENT4, ' '), --现金流量
NVL(VI.SEGMENT7, ' '), --往来机构
'A', --分析码5(缴别)
' ', --分析码6
'41', --分析码7(费用类别-前台)
' ', --分析码8
NVL(VI.SEGMENT1, ' '), --分析码9(分支机构代码)
' ', --导入回写标志
' ', --错误原因
0, --过账号码
0, --凭证号码
' ', --汇入时间
NULL, --前台资料下传时间
NULL, --导入标识
'N', --待回写
VI.Billno, --单据号
VI.ID, --费控凭证表ID
VI.Billno||VI.Coa_Type_Name --billno||凭证类型名称
FROM T_CEM_VOUCHER_INTERFACE VI
where vi.accounting_date >= sysdate-1
and vi.accounting_date <= sysdate
and VI.STATUS = 'N';
--修改费控产生的凭证号
update LI_EC_TEMP t1
set t1.treference =
(select t2.treference
from LI_EC_TEMP t2
where t1.billno_coa_type_name = t2.billno_coa_type_name
and t2.push_flag is null
and rownum = 1)
where t1.push_flag is null;
--更新T_CEM_VOUCHER_INTERFACE
UPDATE T_CEM_VOUCHER_INTERFACE UPINTERFACE
SET UPINTERFACE.STATUS = 'Y', UPINTERFACE.MODIFYTIME = SYSDATE
WHERE UPINTERFACE.STATUS = 'N'
and UPINTERFACE.accounting_date >= sysdate-1
and UPINTERFACE.accounting_date <= sysdate
commit;
EXCEPTION
WHEN OTHERS THEN
rollback;
--异常记录日志
v_sqlcode :=sqlcode;
v_sqlerrm :=SUBSTR(sqlerrm, 1, 4000);
LOGINFO_CUX('POSTACCOUNTTOEBS_CUX_1',v_sqlcode,v_sqlerrm);
END;
begin
-- 删除接口表中上次生成的错误数据
--DELETE FROM LI_EC@CEMREFLI WHERE WB_FLAG = 'V';
-- 根据生成的凭证信息,进行交叉验证
FOR VOUCHER_LINE IN (SELECT *
from LI_EC_TEMP T
WHERE PUSH_FLAG IS NULL
ORDER BY T.SERIAL_NO) LOOP
INSERT INTO LI_EC@CEMREFLI
VALUES
(VOUCHER_LINE.SERIAL_NO,
VOUCHER_LINE.DBCODE,
VOUCHER_LINE.BOOK,
VOUCHER_LINE.ACCNT_CODE,
VOUCHER_LINE.PERIOD,
VOUCHER_LINE.TRANS_DATE,
VOUCHER_LINE.BATCH_NO,
VOUCHER_LINE.BATCH_LINE,
VOUCHER_LINE.AMOUNT,
VOUCHER_LINE.D_C,
VOUCHER_LINE.ALLOCATION,
VOUCHER_LINE.JRNAL_TYPE,
VOUCHER_LINE.JRNAL_SRCE,
VOUCHER_LINE.TREFERENCE,
VOUCHER_LINE.DESCRIPTN,
VOUCHER_LINE.DUE_DATE,
VOUCHER_LINE.ALLOC_REF,
VOUCHER_LINE.ALLOC_DATE,
VOUCHER_LINE.ALLOC_PERIOD,
VOUCHER_LINE.ASSET_IND,
VOUCHER_LINE.ASSET_CODE,
VOUCHER_LINE.ASSET_SUB,
VOUCHER_LINE.CONV_CODE,
VOUCHER_LINE.CONV_RATE,
VOUCHER_LINE.OTHER_AMT,
VOUCHER_LINE.ANAL_T0,
VOUCHER_LINE.ANAL_T1,
VOUCHER_LINE.ANAL_T2,
VOUCHER_LINE.ANAL_T3,
VOUCHER_LINE.ANAL_T4,
VOUCHER_LINE.ANAL_T5,
VOUCHER_LINE.ANAL_T6,
VOUCHER_LINE.ANAL_T7,
VOUCHER_LINE.ANAL_T8,
VOUCHER_LINE.ANAL_T9,
VOUCHER_LINE.WB_FLAG,
VOUCHER_LINE.WB_ERR_DESC,
VOUCHER_LINE.WB_JRNAL_NO,
VOUCHER_LINE.WB_TREFERENCE,
NULL,
0);
--改费控凭证中间表状态为已导入
UPDATE LI_EC_TEMP TEMP
SET PUSH_FLAG = 'Y'
WHERE TEMP.SERIAL_NO = VOUCHER_LINE.SERIAL_NO;
END LOOP;
COMMIT;
EXCEPTION
WHEN OTHERS THEN
rollback;
--异常记录日志
v_sqlcode :=sqlcode;
v_sqlerrm :=SUBSTR(sqlerrm, 1, 4000);
LOGINFO_CUX('POSTACCOUNTTOEBS_CUX_2',v_sqlcode,v_sqlerrm);
END;*/
O_SUCOUNT := 0;
EXCEPTION
WHEN OTHERS THEN
O_SUCOUNT := 1;
END POSTACCOUNTTOEBS_CUX;
--回写过账状态
PROCEDURE BACKACCOUNT_CUX(O_SUCOUNT OUT NUMBER) as
v_sqlcode number;
v_sqlerrm varchar2(4000);
BEGIN
-- 日志
LOGINFO('backAccount', '凭证回写开始....');
LOGINFO_CUX('BACKACCOUNT_CUX','1','1');
--回写费控临时表
/* FOR RECORD IN(SELECT SERIAL_NO,WB_FLAG,
WB_ERR_DESC,
WB_JRNAL_NO,
WB_TREFERENCE
FROM LI_EC@CEMREFLI_PRO
WHERE WB_FLAG IN ('V', 'Y', 'X', 'E'))LOOP
UPDATE LI_EC_TEMP T
SET T.WB_FLAG=RECORD.WB_FLAG,
T.WB_ERR_DESC=RECORD.WB_ERR_DESC,
T.WB_JRNAL_NO=RECORD.WB_JRNAL_NO,
T.WB_TREFERENCE=RECORD.WB_TREFERENCE,
T.BACK_FLAG='Y',
T.Wb_Datetime=to_char(sysdate)
WHERE T.SERIAL_NO=RECORD.SERIAL_NO
AND T.PUSH_FLAG = 'Y'
AND T.BACK_FLAG = 'N';
END LOOP;
--回写费控接口表
UPDATE T_CEM_VOUCHER_INTERFACE TI
SET (TI.ERRORMSG, TI.VOUCHERNUM1, TI.VOUCHERDATE1) =
(SELECT WB_ERR_DESC, WB_TREFERENCE, WB_DATETIME
FROM LI_EC_TEMP L
WHERE TI.ID = L.VI_ID
and L.BACK_FLAG = 'Y'
AND L.BILLNO = TI.BILLNO)
WHERE (TI.VOUCHERNUM1 IS NULL OR TI.VOUCHERNUM1 = '')
AND TI.ID IN (SELECT VI_ID FROM LI_EC_TEMP WHERE BACK_FLAG = 'Y');
COMMIT;
*/
O_SUCOUNT := 0;
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
LOGINFO('backAccount', '凭证回写失败....');
O_SUCOUNT := 1;
--异常记录日志
v_sqlcode :=sqlcode;
v_sqlerrm :=SUBSTR(sqlerrm, 1, 4000);
LOGINFO_CUX('BACKACCOUNT_CUX',v_sqlcode,v_sqlerrm);
END BACKACCOUNT_CUX;
-- 保存异常 这一步不可能报错的
PROCEDURE LOGINFO_CUX (I_PROCNAME IN VARCHAR2 , I_CODE IN number, I_MSG IN VARCHAR2) AS
BEGIN
INSERT INTO T_CEM_VOUCHER_LOG_Error (
id ,
procname ,
sqlcode ,
sqlerrm ,
creation_date
)
VALUES
(SEQ_VOUCHER_LOG.NEXTVAL, I_PROCNAME, I_CODE , I_MSG , SYSDATE);
commit;
EXCEPTION
WHEN OTHERS THEN
LOGINFO('backAccount', '凭证回写失败....');
END LOGINFO_CUX ;
END P_CEM_VOUCHER;
更多推荐
所有评论(0)