/// <summary>
        /// 傳入參數:@畫面上有異動欄位List
        /// 
        /// 處理:
        /// 【繳款資訊】
        /// 判斷其繳款別:1=電匯(專案代收)、2=支票/本票/匯票、3=應收付調整
        /// IF 繳款別=1 THEN
        ///   依COLL_NO = @收款單號 異動資料庫VDS_CAA_COLL_MAIN欄位如下:
        ///   (1)DIFF_AMT = @沖尾差
        ///   (2)OTHER_DIFF = @其他差異
        ///   (3)REMIT_DIFF = @匯兌差異
        ///   (4)COLL_REMAIN_AMT = @沖帳餘額
        ///   (5)最後沖帳日=系統日(AP)
        ///   (6)IF COLL_AMT <> COLL_REMAIN_AMT THEN
        ///          WASH_STATUS = 1
        ///      END IF
        /// ELSEIF 繳款別=2 THEN
        ///   依BOND_NO = @收款單號 異動資料庫VDS_CAA_BOND_MAIN欄位如下:
        ///   (1)DIFF_AMT = @沖尾差
        ///   (2)OTHER_DIFF = @其他差異
        ///   (3)REMIT_DIFF = @匯兌差異
        ///   (4)BOND_REMAIN_AMT = @沖帳餘額
        ///   (5)最後沖帳日=系統日(AP)
        ///   (6)IF BOND_AMT <> BOND_REMAIN_AMT THEN
        ///          WASH_STATUS = 1
        ///      END IF
        /// ELSE
        ///   依DUE_NO = @收款單號 異動資料庫VDS_CAA_DUE_MAIN欄位如下:
        ///   (1)DIFF_AMT = @沖尾差
        ///   (2)OTHER_DIFF = @其他差異
        ///   (3)REMIT_DIFF = @匯兌差異
        ///   (4)DUE_REMAIN_AMT = @沖帳餘額
        ///   (5)最後沖帳日=系統日(AP)
        ///   (6) SUM_DUE_AMT = DUE_AMT - DUE_REMAIN_AMT
        ///   (7) IF DUE_AMT <> DUE_REMAIN_AMT THEN
        ///          WASH_STATUS = 1
        ///       END IF
        /// 
        /// 【發票/折讓/暫收資訊】
        /// 判斷其單別:1=發票、2=折讓、3=暫收
        /// IF 單別=1 THEN
        ///   依INV_NO = @發票/折讓/暫收單號 異動資料庫VDS_CAA_INV_MAIN欄位如下:
        ///   (1)INV_REMAIN_AMT = @沖帳餘額
        ///   (2)INDEED_DATE = @確認付款日
        ///   (3)MEMO= @備註
        ///   (4) IF INV_UAMT <> INV_REMAIN_AMT THEN
        ///          WASH_STATUS = 1
        ///       END IF
        /// ELSEIF 單別=2 THEN
        ///   依DISC_NO = @發票/折讓/暫收單號 異動資料庫VDS_CAA_DISC_MAIN欄位如下:
        ///   (1)DISC_REMAIN_AMT = @沖帳餘額
        ///   (2)MEMO= @備註
        ///   (3) IF DISC_UAMT <> DISC_REMAIN_AMT THEN
        ///          WASH_STATUS = 1
        ///       END IF
        /// ELSE
        ///   依TEMP_NO = @發票/折讓/暫收單號 異動資料庫VDS_CAA_TEMP_MAIN欄位如下:
        ///   (1)TEMP_REMAIN_AMT = @沖帳餘額
        ///   (2)MEMO= @備註
        ///   (3) IF TEMP_AMT <> TEMP_REMAIN_AMT THEN
        ///          WASH_STATUS = 1
        ///       END IF
        ///   (4) SUM_TEMP_AMT = TEMP_AMT - TEMP_REMAIN_AMT
        /// END IF
        /// 
        /// 【發票/折讓/暫收資訊】
        /// 將畫面之資料新增、刪除、異動至資料庫VDS_CAA_CONNECT_MAIN
        /// CUBE_NO = @發票/折讓/暫收單號
        /// CUBE_TYPE = @單別(1=發票、2=折讓、3=暫收)
        /// WASH_NO = @收款單號
        /// WASH_TYPE = @繳款別(1=電匯(專案代收)、2=支票/本票/匯票、3=應收付調整)
        /// WASH_AMT = @沖帳金額
        /// WASH_DATE = @沖帳日期
        /// CREATEDATE=系統日(AP)
        /// CREATEUID=登入之使用者
        /// 
        /// 回傳:
        /// 新增是否成功
        /// </summary>
        public bool SaveAccountRecord(ArrayList ParameterList)
        {
            bool bResult = false;
            ArrayList Param = new ArrayList();
            DbTransaction RootDBT = null;
            int iResult = 0;
            try
            {
                DataRow[] drPays = (DataRow[])ParameterList[0];
                DataRow[] drInvDisTmps = (DataRow[])ParameterList[1];
                DataTable dtConnectDel = (DataTable)ParameterList[2];
                DataRow[] drConnects = (DataRow[])ParameterList[3];
                DataTable dtInvDisTmpReCal = (DataTable)ParameterList[4];

                string strUPDATEUID = ParameterList[5].ToString();
                string strUPDATEDATE = ParameterList[6].ToString();
                string strPAY_TYPE = "";
                string strCUBE_TYPE = "";
                string strLINK_NO = "";
                string strLINK_TYPE = "";
                CAA_AccountRecordDBO DBO = new CAA_AccountRecordDBO(ref USEDB);

                string strAPL_DATE = GetAPLDATE();

                //獨立呼叫啟動Transcation
                Conn = USEDB.CreateConnection();
                Conn.Open();
                DBT = Conn.BeginTransaction();

                //先更新立沖資訊 再更新繳款資訊 因為要取得最大沖帳日

                #region 先刪除有異動過的立沖資訊
                foreach (DataRow drDel in dtConnectDel.Rows)
                {
                    Param.Clear();
                    Param.Add(drDel["LINK_NO"].ToString()); //1.收款單號                    
                    Param.Add("1");                         //SOURCE_TYPE (1)=>立沖帳 (2)=>轉暫收 (3)=>前期餘額                    
                    iResult = DBO.DelConnect(DBT, Param);
                }
                #endregion

                #region 更新立沖資訊
                string strTempNo = "";
                double iTempAmt = 0;
                foreach (DataRow drConnect in drConnects)
                {
                    strCUBE_TYPE = Get_CubeTypeNo(drConnect["CUBE_TYPE"].ToString());
                    if (strCUBE_TYPE == "1") //只有新增CUBE_TYPE為發票的資料到 VDS_CAA_CONNECT_MAIN
                    {
                        if (strTempNo != drConnect["LINK_NO"].ToString()) //因為要用CREATEDATE時間來排序 所以多加這個判斷
                        {
                            iTempAmt = 0;
                            strTempNo = drConnect["LINK_NO"].ToString();
                        }
                        iTempAmt++;
                        strPAY_TYPE = Get_WashTypeNo(drConnect["WASH_TYPE"].ToString());
                        strLINK_TYPE = Get_WashTypeNo(drConnect["LINK_TYPE"].ToString());
                        Param.Clear();
                        Param.Add(drConnect["CUBE_NO"].ToString());                     //0.發票
                        Param.Add(strCUBE_TYPE);                                        //1.單別(1.發票)
                        Param.Add(drConnect["WASH_NO"].ToString());                     //2.沖帳單號
                        Param.Add(strPAY_TYPE);                                         //3.沖帳別(1.電匯 2.支票 3.應收付調整 4.折讓 5.暫收)
                        Param.Add(drConnect["WASH_AMT"].ToString());                    //4.沖帳金額
                        Param.Add(ConvertDB_Date(drConnect["WASH_DATE"].ToString()));   //5.沖帳日期                    
                        Param.Add(ConvertDB_Date_Add(drConnect["CREATEDATE"].ToString(), iTempAmt));  //6.CREATEDATE
                        Param.Add(drConnect["CREATEUID"].ToString());                   //7.CREATEUID                    
                        Param.Add(drConnect["LINK_NO"].ToString());                     //8.收款單號
                        Param.Add(strLINK_TYPE);                                        //9.繳款別(0.發票與繳款直接沖 =>發票與暫收折讓沖 1.電匯 2.支票 3.應收付調整)
                        Param.Add(drConnect["SOURCE_TYPE"].ToString());                 //10.source_type (1)=>立沖帳 (2)=>轉暫收 (3)=>前期餘額
                        iResult = DBO.UpdateConnect(DBT, Param);
                    }
                }
                #endregion

                #region 更新繳款資訊

                foreach (DataRow drPay in drPays)
                {
                    strPAY_TYPE = Get_WashTypeNo(drPay["PAY_TYPE"].ToString());
                    Param.Clear();
                    Param.Add(strPAY_TYPE);                      //1.繳款別
                    Param.Add(drPay["COLL_NO"].ToString());      //2.收款單號
                    Param.Add(drPay["DIFF_AMT"].ToString());     //3.沖尾差
                    Param.Add(drPay["OTHER_DIFF"].ToString());   //4.其他差異
                    Param.Add(drPay["REMIT_DIFF"].ToString());   //5.匯兌差異
                    Param.Add(drPay["REMAIN_AMT"].ToString());   //6.沖帳餘額
                    Param.Add(strAPL_DATE);                      //7.最後沖帳日
                    //8.狀態
                    Param.Add(Get_WashStatus(int.Parse(drPay["COLL_AMT"].ToString()) + int.Parse(drPay["CHARGE"].ToString()), int.Parse(drPay["REMAIN_AMT"].ToString())));
                    Param.Add(strUPDATEUID);    //9.UPDATEUID                    
                    Param.Add(ConvertDB_Date(strUPDATEDATE));    //10.UPDATEDATE
                    iResult = DBO.UpdatePay(DBT, Param);
                }

                #endregion

                #region 更新發票/折讓/暫收資訊

                foreach (DataRow drInvDisTmp in drInvDisTmps)
                {
                    strCUBE_TYPE = Get_CubeTypeNo(drInvDisTmp["CUBE_TYPE"].ToString());
                    Param.Clear();
                    Param.Add(strCUBE_TYPE);                                            //1.單別
                    Param.Add(drInvDisTmp["CUBE_NO"].ToString());                       //2.單號
                    Param.Add(drInvDisTmp["REMIT_AMT"].ToString());                     //3.沖帳餘額
                    Param.Add(ConvertDB_Date(drInvDisTmp["INDEED_DATE"].ToString()));   //4.確認付款日
                    Param.Add(drInvDisTmp["MEMO"].ToString());                          //5.備註                    
                    Param.Add(Get_WashStatus(int.Parse(drInvDisTmp["INV_AMT"].ToString()), int.Parse(drInvDisTmp["REMIT_AMT"].ToString()))); //6.狀態                                        
                    Param.Add(strUPDATEUID);                     //7.UPDATEUID                    
                    Param.Add(ConvertDB_Date(strUPDATEDATE));    //8.UPDATEDATE
                    iResult = DBO.UpdateInvDisTemp(DBT, Param);
                }

                #endregion

                #region 所有異動過立沖的發票/折讓/暫收單號 重算餘額

                foreach (DataRow dr in dtInvDisTmpReCal.Rows)
                {
                    strCUBE_TYPE = Get_CubeTypeNo(dr["CUBE_TYPE"].ToString());
                    Param.Clear();
                    Param.Add(dr["CUBE_NO"].ToString());        //單號
                    Param.Add(strCUBE_TYPE);                    //單別
                    Param.Add(ConvertDB_Date(strUPDATEDATE));   //UPDATEDATE                    
                    Param.Add(strUPDATEUID);                    //UPDATEUID                                        
                    iResult = DBO.ReCalInvDisTemp(DBT, Param);
                }

                #endregion

                #region 刪除金額為零的立沖資訊

                foreach (DataRow drDel in dtConnectDel.Rows)
                {
                    Param.Clear();
                    Param.Add(drDel["LINK_NO"].ToString());                     //1.收款單號                          
                    iResult = DBO.DelConnectZero(DBT, Param);
                }

                #endregion

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

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

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

                #endregion

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