印象笔记: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;
 

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐