/// <summary>
        /// 功能說明:作廢發票資料
        /// 
        /// 傳入參數:@發票號碼
        /// 
        /// 回傳:是否作廢成功
        /// 
        /// 資料庫:VDS_CAA_INV_MAIN(銷項發票檔)
        /// 
        /// 說明:
        /// 
        /// (1)依INV_NO=@發票號碼 AND ENABLE=1 AND CANCEL_FLG=0,查詢資料庫VDS_CAA_INV_MAIN之資料
        ///   (1.1)判斷此筆資料是否存在
        ///     不存在:回傳訊息(此筆發票資料不存在或已作廢,請重新輸入)
        ///        存在:判斷查詢此筆資料是否己折讓或沖帳
        ///                若INV_UAMT = NON_INV_UAMT 且 INV_TAX = NON_INV_TAX INV_AMT =
        /// INV_REMAIN_AMT
        ///                則執行呼叫流程(1.2)
        ///                若有不符合的,則回傳訊息:(此筆發票資料己折讓或沖帳,故無法換開、作廢)
        ///   (1.2)異動欄位如下:
        ///        CANCEL_FLG=1
        ///        CANCEL_DATE=取目前系統日期
        ///        INV_VERSION = 流程(1)查詢之欄位INV_VERSION資料 +1
        /// </summary>
        public int CancelInvByChange(ArrayList ParameterList, DbTransaction RootDBT)
        {
            int iResult;
            bool IsRootTranscation = false;
            try
            {
                CAA_22DBO DBO = new CAA_22DBO(ref USEDB);

                //判斷是否有傳入Root Transcation 
                IsRootTranscation = (RootDBT == null) ? true : false;

                #region 啟動交易或指定RootTranscation

                if (IsRootTranscation)
                {
                    //獨立呼叫啟動Transcation
                    Conn = USEDB.CreateConnection();
                    Conn.Open();
                    DBT = Conn.BeginTransaction();
                }
                else
                {
                    DBT = RootDBT;
                }

                #endregion

                iResult = DBO.CancelInvByChange(ParameterList, RootDBT);

                #region 交易成功

                if (IsRootTranscation)
                {
                    //獨立呼叫Transcation成立
                    DBT.Commit();
                }

                #endregion
            }
            catch (Exception ex)
            {
                #region 交易失敗

                if (IsRootTranscation)
                {
                    //獨立呼叫Transcation失敗
                    DBT.Rollback();
                }

                #endregion

                throw ex;
            }
            finally
            {
                #region 判斷是否關閉交易連線

                if (IsRootTranscation)
                {
                    //獨立呼叫Transcation,關閉連線
                    if (Conn.State == ConnectionState.Connecting)
                    {
                        Conn.Close();
                    }
                }

                #endregion

            }
            return iResult;
        }
        /// <summary>
        /// 功能說明:檢核1對多換開金額是否符合且執行換開發票作業
        /// 
        /// 傳入參數:LIST資料
        /// 
        /// 回傳:是否異動成功
        /// 
        /// TABLE:
        /// VDS_CAA_INV_MAIN(銷項發票檔)
        /// 
        /// 說明:
        /// 1判斷是否字軌月結(呼叫ChanMonthCloseYN.ChanMonthCloseYN<傳入CAA15、@結帳年月>)
        /// 已月結:回傳訊息(字軌已月結,無法金額換開)
        /// 未月結:依INV_NO=@發票號碼 AND ENABLE=1,查詢資料庫VDS_CAA_INV_MAIN欄位CANCEL_FLG之資料
        /// 1.1 判斷CANCEL_FLG
        ///   1.1.1 CANCEL_FLG=0:(回傳訊息:此筆發票尚未作廢,請先執行發票作廢作業)
        ///   1.1.2 是:判斷加總@LIST之銷售金額 是否等於 流程1取得之欄位 INV_UAMT
        ///     1.1.2.1 是:一筆一筆新增直至結束
        ///        新增資料庫VDS_CAA_INV_MAIN之資料,欄位如下:
        ///             CLOSE_MONTH=流程1取得之CLOSE_MONTH
        ///             INV_DATE=取系統內此月份最後一筆資料之發票日期
        ///             INV_NO=@新發票號碼
        ///             IS_SCHEDULE=流程1取得IS_SCHEDULE
        ///             INV_CHKNO=發票各數字相加*7/4取餘數
        ///             INVOICE_DATE_RANGE=流程1取得INVOICE_DATE_RANGE
        /// 			 FORM_NO=2(人工開立)
        /// 			 SOURCE_TYPE=1(營業系統)
        /// 			 INV_KIND=流程1取得INV_KIND
        /// 			 TAX_TYPE=流程1取得TAX_TYPE
        /// 			 ITEM_NAME=流程1取得ITEM_NAME
        /// 			 INV_UAMT=@銷售金額
        /// 			 INV_TAX=@稅額
        /// 			 INV_AMT=@銷售金額 +@稅額
        /// 			 MEMO=流程1取得MEMO
        /// 			 CANCEL_FLG=0
        /// 			 PRINT_FLG=0
        /// 			 JUMP_FLG=0
        /// 			 CANCEL_DATE=''
        /// 			 OLD_INV_NO=''
        /// 			 STORE_ID= 流程1取得STORE_ID
        /// 			 ROOT_NO=流程1取得ROOT_NO
        /// 	   		 KEYIN_DATE=''
        /// 			 CHG_INV_TYPE=''
        /// 			 CREATEDATE=系統日
        /// 			 CREATEUID=登入之使用者ID
        /// 			 UPDATEDATE=系統日
        /// 			 UPDATEUID=登入之使用者ID
        /// 			 ENABLE=1
        /// 			 INV_FORM=31
        ///             NON_INV_UAMT=@銷售金額
        /// 			 NON_INV_TAX=@稅額
        /// 			 INV_VERSION=0
        ///   			 INV_REMAIN_AMT=@銷售金額 +@稅額
        /// 			 DUE_DATE=INV_DATE + INVOICE_DATE_RANGE(票期)
        /// 			 INDEED_DATE=''
        /// 			 WASH_STATUS=0
        ///             VOUCH_DOC=流程1取得VOUCH_DOC
        ///             VOUCH_RFNO=流程1取得VOUCH_RFNO
        ///         1.1.2.1.1 判斷整批是否新增成功:
        ///             是:回傳Y(Y表示:異動成功)
        ///             否:ROLLBACK資料並回傳N(N表示:資料庫異動失敗,請重新執行)
        ///     1.1.2.2 否:回傳1(1表示:異動失敗,換開發票之銷售金額總合需與原發票金額相同)
        /// </summary>
        public bool CHGInvOneToMore(ArrayList ParameterList)
        {
            bool bResult = false;
            bool IsRootTranscation = false;
            ArrayList Param = new ArrayList();
            DbTransaction RootDBT = null;
            int iResult = 0;
            try
            {
                CAA_22DBO DBO = new CAA_22DBO(ref USEDB);

                string strOLD_INV_NO = ParameterList[0].ToString();
                string strUPDATEDATE = ParameterList[1].ToString();
                string strUPDATEUID = ParameterList[2].ToString();
                string strOLD_UPDATEDATE = ParameterList[3].ToString();
                string strOLD_UPDATEUID = ParameterList[4].ToString();
                DataTable dtInv = (DataTable)ParameterList[5];
                string strOLD_INV_DATE = ParameterList[6].ToString();
                string strINV_INVOICE_TYPE = ParameterList[7].ToString();

                //判斷是否有傳入Root Transcation 
                IsRootTranscation = (RootDBT == null) ? true : false;

                #region 啟動交易或指定RootTranscation

                if (IsRootTranscation)
                {
                    //獨立呼叫啟動Transcation
                    Conn = USEDB.CreateConnection();
                    Conn.Open();
                    DBT = Conn.BeginTransaction();
                }
                else
                {
                    DBT = RootDBT;
                }

                #endregion

                #region 更新原始發票的CHG_INV_TYPE=1
                Param.Clear();
                Param.Add(strOLD_INV_NO);
                Param.Add(strUPDATEDATE);
                Param.Add(strUPDATEUID);
                Param.Add(strOLD_UPDATEDATE);
                Param.Add(strOLD_UPDATEUID);
                iResult = DBO.CHGInvOneToMore1(DBT, Param);
                #endregion

                #region 建立一對多發票資料

                for (int i = 0; i < dtInv.Rows.Count; i++)
                {
                    Param.Clear();
                    Param.Add(strOLD_INV_NO);
                    Param.Add(strOLD_INV_DATE.Replace("/", "").Substring(0, 6));
                    Param.Add(dtInv.Rows[i]["INV_UAMT"].ToString());
                    Param.Add(dtInv.Rows[i]["INV_TAX"].ToString());
                    Param.Add(dtInv.Rows[i]["INV_AMT"].ToString());
                    Param.Add(strUPDATEDATE);
                    Param.Add(strUPDATEUID);
                    Param.Add(strINV_INVOICE_TYPE);
                    iResult = DBO.CHGInvOneToMore2(DBT, Param);
                }

                #endregion

                #region 交易成功

                if (IsRootTranscation)
                {
                    //獨立呼叫Transcation成立
                    DBT.Commit();
                    bResult = true;
                }

                #endregion


            }
            catch (Exception ex)
            {
                #region 交易失敗

                if (IsRootTranscation)
                {
                    //獨立呼叫Transcation失敗
                    DBT.Rollback();
                }

                #endregion

                throw ex;
            }
            finally
            {
                #region 判斷是否關閉交易連線

                if (IsRootTranscation)
                {
                    //獨立呼叫Transcation,關閉連線
                    if (Conn.State == ConnectionState.Connecting)
                    {
                        Conn.Close();
                    }
                }

                #endregion
            }
            return bResult;
        }
 //取得一對多換開的發票資料
 public DataTable QueryInvoiceByMore(ArrayList ParameterList)
 {
     try
     {
         CAA_22DBO DBO = new CAA_22DBO(ref USEDB);
         DataTable dt = DBO.QueryInvoiceByMore(ParameterList);
         return dt;
     }
     catch (Exception ex)
     {
         throw ex;
     }
 }
 /// <summary>
 /// 檢查發票是否己折讓或沖帳
 /// </summary>
 /// <param name="ParameterList"></param>
 /// <returns></returns>
 public DataTable CheckInvData(ArrayList ParameterList)
 {
     try
     {
         CAA_22DBO DBO = new CAA_22DBO(ref USEDB);
         DataTable dt = DBO.CheckInvData(ParameterList);
         return dt;
     }
     catch (Exception ex)
     {
         throw ex;
     }
 }