private void btn_Save_Click(object sender, EventArgs e)
        {
            if (txt_DocNoTran.Text == "")
            {
                MessageBox.Show("คุณยังไม่ได้กรอกข้อมูล [เลขที่เอกสารโอน] ...กรุณากรอกข้อมูลก่อนทำการบันทึก", "ข้อมูลไม่ครบ", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }
            if (gridView1.RowCount > 0)
            {
                if (DEntRun == null)
                {
                    Utility.MessageError("ไม่พบข้อมูล [เลข Running] กรุณาทำการเลือกข้อมูล Running ใหม่อีกครั้งครับ");
                    return;
                }

                //------ Check การเปลี่ยน Running
                if (Fn_CheckRunningChange(Convert.ToInt32(_RunningID), _Menu_ID) == false)//True : มีการเปลี่ยน Running พร้อม Reset เป็น 0
                {
                    return;
                }

                if (Utility.MessageQuestion("คุณต้องการที่จะทำการโอนข้อมูลหรือไม่... กด Yes เพื่อยินยันการโอน?") == DialogResult.No)
                {
                    return;
                }

                List <Stock_TranferArInvoice> Item_Source = (List <Stock_TranferArInvoice>)gridView1.DataSource;
                string   TranDocNo       = txt_DocNoTran.Text.Trim();
                DateTime TranDate        = dtp_Tranfer.DateTime;
                string   sRunningCurrent = "";

                List <Stock_TranferArInvoice> Item_Result = new List <Stock_TranferArInvoice>();
                foreach (Stock_TranferArInvoice ItemSet in Item_Source)
                {
                    ItemSet.Tran_DocNo       = TranDocNo;
                    ItemSet.Tran_DocDate     = TranDate;
                    ItemSet.QtyRemain        = ItemSet.Qty - ItemSet.QtyActual; // [Qty] - [QtyActual]
                    ItemSet.Tran_StatusClear = 0;                               //0 : รายการปกติ ยอดคงค้างใช้คำนวณ   1 : รายการที่ถูกยกเลิก ยอดคงค้างจะไม่คำนวณ
                    ItemSet.Status           = ItemSet.QtyRemain == 0 ? 0 : 1;  //0 : โอนสำเร็จ  1 : ค้างโอน  2 : ยกเลิก
                    //ItemSet.Tran_Attribute01 = ItemSet.Tran_Attribute01;
                    ItemSet.Tran_UpdateBy   = Utility._UserDB;
                    ItemSet.Tran_UpdateDate = DateTime.Now;
                    ItemSet.Tran_CreateBy   = Utility._UserDB;
                    ItemSet.Tran_CreateDate = DateTime.Now;
                    //ItemSet.Tran_Attribute01 = "Delete Test where Tran_DocNo=('sdsdsd-0102-3')";
                    Item_Result.Add(ItemSet);
                }

                List <Stock_TranferAccrual> ItemLog = new List <Stock_TranferAccrual>();
                foreach (Stock_TranferArInvoice Iset in Item_Result)
                {
                    Stock_TranferAccrual ILog = new Stock_TranferAccrual();
                    ILog.TranferAccrual_Date   = Iset.Tran_DocDate;
                    ILog.TranferAccual_QtyReam = Iset.QtyActual;
                    ILog.Tran_DocNo            = Iset.Tran_DocNo;
                    ILog.Tran_DocDate          = Iset.Tran_DocDate;
                    ILog.DocNo            = Iset.DocNo;
                    ILog.ItemCode         = Iset.ItemCode;
                    ILog.DocDate          = Iset.DocDate;
                    ILog.ArCode           = Iset.ArCode;
                    ILog.SaleCode         = Iset.SaleCode;
                    ILog.MyDescription    = Iset.MyDescription;
                    ILog.ItemName         = Iset.ItemName;
                    ILog.WHCode           = Iset.WHCode;
                    ILog.ShelfCode        = Iset.ShelfCode;
                    ILog.Qty              = Iset.Qty;
                    ILog.QtyActual        = Iset.QtyActual;
                    ILog.QtyRemain        = Iset.QtyRemain;
                    ILog.Price            = Iset.Price;
                    ILog.Amount           = Iset.Amount;
                    ILog.UnitCode         = Iset.UnitCode;
                    ILog.LineNumber       = Iset.LineNumber;
                    ILog.Tran_StatusClear = Iset.Tran_StatusClear;
                    ILog.Tran_Attribute01 = Iset.Tran_Attribute01;
                    ILog.Tran_Attribute02 = Iset.Tran_Attribute02;
                    ILog.Tran_Attribute03 = Iset.Tran_Attribute03;
                    ILog.Tran_Attribute04 = Iset.Tran_Attribute04;
                    ILog.Tran_Attribute05 = Iset.Tran_Attribute05;
                    ILog.Status           = Iset.Status;
                    ILog.Tran_CreateBy    = Iset.Tran_CreateBy;
                    ILog.Tran_CreateDate  = Iset.Tran_CreateDate;
                    ILog.Tran_UpdateBy    = Iset.Tran_UpdateBy;
                    ILog.Tran_UpdateDate  = Iset.Tran_UpdateDate;
                    ItemLog.Add(ILog);
                }

                try
                {
                    using (var srv = new StockTranferArInvoiceService(Utility.ConnSDB))
                    {
                        using (var srv2 = new StockTranferAccrualService(Utility.ConnSDB))
                        {
                            if (srv.CheckUseDocNo(TranDocNo) == false)
                            {
                                if (Utility.MessageQuestion("ข้อมูลการโอน : " + TranDocNo + " ถูกใช้บันทึกไปแล้ว\nคุณต้องการทำการบันทึกหรือไม่...โดยระบบจะทำการ Running รหัสเอกสารลำดับต่อไป") == DialogResult.Yes)
                                {
                                    //::::::::::: Manage Running Duplicate [Start] :::::::::::::::::::::::
                                    using (var db2 = new DocumentRunningService(Utility.ConnSDB))
                                    {
                                        DEntRun = db2.GetRunning(Convert.ToInt32(_RunningID), _Menu_ID);
                                        do
                                        {
                                            DEntRun         = db2.SetNextRunning(DEntRun); //---- IncreaseNextNumber 1
                                            sRunningCurrent = Db_Run.GetRunningDisplay(DEntRun);
                                        } while (!srv.CheckUseDocNo(sRunningCurrent));     //วนเช็ค Running และ Update Running ไปเรื่อยๆจนกว่าจะเจอ Running ที่ไม่ได้ใช้

                                        foreach (var item in Item_Result)
                                        {
                                            item.Tran_DocNo = sRunningCurrent;
                                        }
                                    }
                                    //::::::::::: Manage Running Duplicate [END] :::::::::::::::::::::::
                                }
                                else
                                {
                                    return;
                                }
                            }

                            bool result     = srv.Insert(Item_Result, DEntRun);
                            bool result_log = srv2.Insert(ItemLog);
                            if (result && result_log)
                            {
                                Utility.MessageInformation("บันทึกข้อมูลเรียบร้อย...");
                                //Fn_ScreenClear();
                                Fn_ClearData();
                            }
                            else
                            {
                                Utility.MessageError("ไม่สามารถบันทึกข้อมูลได้...เนื่องจาก : " + srv.ErrorMessage);
                                Utility.MessageError("ไม่สามารถบันทึกข้อมูลได้...เนื่องจาก : " + srv2.ErrorMessage);
                            }
                        }
                    }
                }
                catch (ApplicationException ex)
                {
                    Utility.MessageError("Error : " + ex.Message);
                    if (ex.InnerException != null)
                    {
                        Utility.MessageError("Error Inner : " + ex.InnerException.Message);
                    }
                }
            }
        }