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

oracle----存储过程相关推荐

  1. Oracle 存储过程 无法编译 解决方法(转载)

    声明:本文为转载,如果有侵犯知识版本,请通知本人,本人将即刻停止侵权行为: http://blog.csdn.net/tianlesoftware/article/details/7412555 Or ...

  2. oracle字段大段字符串,ORACLE存储过程,参数目字符串太长

    ORACLE存储过程,参数字符串太长 在做存储过程开发的时候,需要拼SQL语句,比如 DECLARE V_SQL VARCHAR2(32000); BEGIN V_SQL := 'INSERT INT ...

  3. 存储过程while_超详细的Oracle存储过程基础入门介绍

    概述 前面已经对存储过程.函数.包做了个介绍,但是毕竟是写成了一篇,所以没那么细,今天单独介绍一下存储过程基础方面,后面再说遍历什么游标啊,数组啊~ 1.语法 CREATE [OR REPLACE] ...

  4. [转]oracle 存储过程的基本语法 及注意事项

    oracle 存储过程的基本语法 1.基本结构 CREATE OR REPLACE PROCEDURE 存储过程名字 (     参数1 IN NUMBER,     参数2 IN NUMBER ) ...

  5. oracle存储过程、声明变量、for循环|转|

    oracle存储过程.声明变量.for循环 1.创建存储过程 create or replace procedure test(var_name_1 in type,var_name_2 out ty ...

  6. mybatis调用oracle存储过程

    有输入与输出参数的存储过程 oracle存储过程部分代码: create or replace procedure PT_copy_Shipment_One_Data( oldShipmentId i ...

  7. Oracle --存储过程,输入不定个数参数

    2019独角兽企业重金招聘Python工程师标准>>> 一般来说,写存储过程时,输入的参数个数是固定的,但最近业务需求,输入的参数不固定. 思路:oracle存储过程的输入参数个数. ...

  8. Oracle存储过程中异常Exception的捕捉和处理

    Oracle存储过程中异常的捕捉和处理 CREATE OR REPLACE Procedure Proc_error_process ( v_IN in Varchar2, v_OUT Out Var ...

  9. [oracle] Oracle存储过程里操作BLOB的字节数据的办法,例如写入32位整数

    作者: zyl910 一.缘由 BLOB是指二进制大对象,也就是英文Binary Large Object的缩写. 在很多时候,我们是通过其他编程语言(如Java)访问BLOB的字节数据,进行字节级的 ...

  10. oracle存储过程参考资料(网上转载)

    网址一:http://www.cnblogs.com/hero4china/articles/base_rule_oracle_procedure.html 给朋友讲解oracle proc的记录: ...

最新文章

  1. javascript 面试题
  2. mysql 程序迁移_如何从MySQL数据库程序中迁移数据库文件
  3. 常考数据结构与算法:二叉树的最大深度
  4. SQL Server数据库字符集、版本类型、版本号、所在服务器名、语言SQL语句查询语法演示
  5. python 基础教程(第二版)
  6. KVM NAT模式 恢复virbr0
  7. springboot链接数据库的bug
  8. php+oracle新增数据类型,Oracle 修改某个字段的数据类型三种方式
  9. 语法错误: leftparen 应在 colon 之前
  10. Java String startsWith()方法
  11. Git拉分支及合并分支
  12. [生存志] 第71节 阖闾五战入郢
  13. HCL实验:用VRRP实现路由备份及负载分担
  14. pycharm连接数据库步骤
  15. Python数据分析高薪实战第十二天 网络服务用户流失预测分析和国产电视剧评分预测分析
  16. ‘settings.xml’ has syntax errors less… 和Parent ‘org.springframework.boot’has problems less…的问题解决
  17. ES系列二之常见问题解决
  18. EclipseADT在虚拟机上运行Helloworld程序
  19. 差分相干解调 matlab,2DPSK差分相干解调器Simulink仿真
  20. 数字电子钟 1Hz 秒脉冲信号的设计

热门文章

  1. 运输公司对用户计算运输费用。
  2. ubuntu 18使用国内版firefox
  3. 设置命令提示符显示符行数
  4. 网管用计算机上岗证书,普通高中校园网计算机教室建设标准
  5. 解决WES 7 中Composite Bus找不到驱动的bug
  6. Bean named '' is expected to be of type '' but was actually of type 'com.sun.proxy.$Proxy30' 异常解决
  7. 配置管理-使用SVN创建分支
  8. CSS、JavaScript学习过程
  9. echarts渲染一个风向图
  10. Learning Human-Object Interactions by Graph Parsing Neural Networks阅读笔记