/// <summary>
        /// 新增在途單主檔(VDS_PUR_ONWAY_MAIN)及明細檔(VDS_PUR_ONWAY_ITEM)資料
        /// * 處理原則:
        /// 1.在途單新增時,需call CheckVendorAccountClose.CheckVendorCloseStatus(在途日期) ,
        /// 檢查在途日期是否已進行供應商帳務日結,若已日結,則需顯示訊息"在途日XXX已日結,不可新增在途單"。
        /// 
        /// 2.在途單號第一碼於代號控制檔取得,'E'+YMMDD+XXXX
        /// 
        /// 3.若在途商品為正常品,Call this.UpdatePeriodInTransitData(品號,期別,
        /// 在途量)更新期別屬性檔(VDS_PERIOD_PROFILE)的下列欄位:在途量(Onway_Qty)
        /// 
        /// 4.若採購商品為贈品,則Call this.UpdateGiftInTransitData(品號,期別,虛擬品號,
        /// 在途量)更新贈品屬性檔(VDS_MKT_GIFT_PERIOD)的在途量資料
        /// 
        /// 5.新增時,預設ONWAY_QTY(在途數量) = PETITION_QTY(申請數量)
        /// 6.若新增不成功則全部rollback
        /// </summary>
        public bool CreateGoodsInTransit(ArrayList ParameterList, out string ONWAY_NO, DbTransaction RootDBT)
        {
            bool IsRootTranscation = false;           
            int iResult = 0;
            bool bResult = false;
            bool bAllClose = true;
            string strUpdateQty = "0";
            try
            {

                PUR_05_DBO DBO = new PUR_05_DBO(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

                //0.Item DataTable
                //1.Gift DataTable        
                //2.VENDOR
                //3.PURCHASE_NO
                //4.ONWAY_DATE
                //5.CREATEDATE
                //6.CREATEUID
                //7.UPDATEDATE
                //8.UPDATEUID
                //9.STATUS
                //out ONWAY_NO

                ArrayList Para = new ArrayList();

                DataTable dtItem = (DataTable)ParameterList[0];
                DataTable dtGift = (DataTable)ParameterList[1];

                string strVENDOR = ParameterList[2].ToString();
                string strPURCHASE_NO = ParameterList[3].ToString();
                string strONWAY_DATE = ParameterList[4].ToString().Substring(0, 10);
                string strCREATEDATE = ParameterList[5].ToString();
                string strCREATEUID = ParameterList[6].ToString();
                string strUPDATEDATE = ParameterList[7].ToString();
                string strUPDATEUID = ParameterList[8].ToString();
                string strSTATUS = ParameterList[9].ToString();

                //主檔儲存
                Para.Clear();
                Para.Add(strVENDOR);        //0
                Para.Add(strPURCHASE_NO);   //1
                Para.Add(strONWAY_DATE);    //2
                Para.Add(strCREATEDATE);    //3
                Para.Add(strCREATEUID);     //4
                Para.Add(strUPDATEDATE);    //5
                Para.Add(strUPDATEUID);     //6            
                Para.Add(strSTATUS);        //7
                string strID = string.Empty;
                iResult = DBO.CreateMain(DBT, Para, out ONWAY_NO, out strID);

                //0.PID
                //1.ONWAY_NO
                //2.ITEM
                //3.PERIOD
                //4.VIRTUAL_CODE
                //5.PETITION_QTY
                //6.ONWAY_QTY
                //7.CREATEDATE
                //8.CREATEUID
                //9.UPDATEDATE
                //10.UPDATEUID
                //11.CLOSE_DATE
                //12.CLOSE_TYPE

                //一般Item儲存                
                foreach (DataRow dr in dtItem.Rows)
                {
                    if (dr["ENABLE"].ToString() == "1")
                    {
                        Para.Clear();
                        Para.Add(strID);                        //0
                        Para.Add(ONWAY_NO);                     //1
                        Para.Add(dr["ITEM"].ToString());        //2
                        Para.Add(dr["PERIOD"].ToString());      //3
                        Para.Add(dr["VIRTUAL_CODE"].ToString());//4
                        Para.Add(dr["PETITION_QTY"].ToString());//5
                        Para.Add(dr["ONWAY_QTY"].ToString());   //6
                        Para.Add(strCREATEDATE);                //7            
                        Para.Add(strCREATEUID);                 //8
                        Para.Add(strUPDATEDATE);                //9            
                        Para.Add(strUPDATEUID);                 //10
                        Para.Add(dr["CLOSE_DATE"].ToString());  //11            
                        Para.Add(GetStatus(dr["CLOSE_TYPE"].ToString().Trim()));  //12   

                        if (dr["CLOSE_TYPE"].ToString().Trim() == "")
                            bAllClose = false;

                        iResult = DBO.CreateItem(DBT, Para);

                        if (GetStatus(dr["CLOSE_TYPE"].ToString().Trim()) == "")
                            strUpdateQty = dr["ONWAY_QTY"].ToString();
                        else
                            strUpdateQty = "0";

                        UpdatePeriodInTransitData(DBO,
                                                   DBT,
                                                   dr["ITEM"].ToString(),
                                                   dr["PERIOD"].ToString(),
                                                   strUpdateQty,
                                                   strUPDATEDATE,
                                                   strUPDATEUID);
                    }
                }

                //贈品儲存                
                foreach (DataRow dr in dtGift.Rows)
                {
                    if (dr["ENABLE"].ToString() == "1")
                    {
                        Para.Clear();
                        Para.Add(strID);                        //0
                        Para.Add(ONWAY_NO);                     //1
                        Para.Add(dr["ITEM"].ToString());        //2
                        Para.Add(dr["PERIOD"].ToString());      //3
                        Para.Add(dr["VIRTUAL_CODE"].ToString());//4
                        Para.Add(dr["PETITION_QTY"].ToString());//5
                        Para.Add(dr["ONWAY_QTY"].ToString());   //6
                        Para.Add(strCREATEDATE);                //7            
                        Para.Add(strCREATEUID);                 //8
                        Para.Add(strUPDATEDATE);                //9            
                        Para.Add(strUPDATEUID);                 //10
                        Para.Add(dr["CLOSE_DATE"].ToString());  //11            
                        Para.Add(GetStatus(dr["CLOSE_TYPE"].ToString().Trim()));  //12     

                        if (dr["CLOSE_TYPE"].ToString().Trim() == "")
                            bAllClose = false;

                        iResult = DBO.CreateItem(DBT, Para);

                        if (GetStatus(dr["CLOSE_TYPE"].ToString().Trim()) == "")
                            strUpdateQty = dr["ONWAY_QTY"].ToString();
                        else
                            strUpdateQty = "0";

                        UpdateGiftInTransitData(DBO,
                                                DBT,
                                                dr["ITEM"].ToString(),
                                                dr["PERIOD"].ToString(),
                                                dr["VIRTUAL_CODE"].ToString(),
                                                strUpdateQty,
                                                strUPDATEDATE,
                                                strUPDATEUID);
                    }
                }


                //假如細項都結案的話 主檔也要結案
                if (bAllClose == true)
                {
                    //0.V_ONWAY_NO
                    //1.V_STATUS                 
                    //2.V_ONWAY_DATE             
                    //3.V_UPDATEUID              
                    //4.V_UPDATEDATE             
                    //5.V_OLD_UPDATEUID          
                    //6.V_OLD_UPDATEDATE 
                    //7.V_ENABLE
                    Para.Clear();
                    Para.Add(ONWAY_NO);         //0
                    Para.Add("75");             //1
                    Para.Add(strONWAY_DATE);    //2                    
                    Para.Add(strUPDATEUID);     //3            
                    Para.Add(strUPDATEDATE);    //4                    
                    Para.Add(strUPDATEUID);     //5            
                    Para.Add(strUPDATEDATE);    //6
                    Para.Add("1");    //7
                    iResult = DBO.UpdateMain(DBT, Para);

                }
                #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;
        }