private void btnExecute_Click(object sender, EventArgs e)
        {
            string sSQL = "";                     //DbDataReader dbRS = null;
            string sLoc = ""; string sLocID = ""; //string sLocSts = "";

            if (FunChkData() == false)
            {
                return;
            }

            sLoc   = txtLoc.Text;
            sLocID = txtLocID.Text;

            if (clsDB.FunOpenDB() == false)
            {
                clsMSG.ShowErrMsg(clsMSG.MSG.OPEN_DB_NG); return;
            }
            ;

            #region 判斷是否有儲位重整中
            string sMsg = "";
            if (clsASRS.FunChkCycleStsIsRunning(ref sMsg) == false)
            {
                clsMSG.ShowInformationMsg(sMsg);
                clsDB.FunClsDB();
                return;
            }
            #endregion

            #region 取得命令序號
            string sCmdSno = clsASRS.FunGetCmdSno();
            if (sCmdSno == "")
            {
                clsMSG.ShowErrMsg("系統錯誤,無命令序號可使用!!");
                clsDB.FunClsDB(); return;
            }
            #endregion

            clsDB.FunCommitCtrl("BEGIN");

            #region 判斷是否有儲位重整中
            string sTmpMsg = "";
            if (clsASRS.FunChkCycleStsIsRunning(ref sTmpMsg) == false)
            {
                clsMSG.ShowInformationMsg(sTmpMsg);
                clsDB.FunClsDB();
                return;
            }
            #endregion

            #region 產生命令主檔
            cls_CmdMst aCmdMst = new cls_CmdMst();
            aCmdMst.FunCmdMstClear();                //Clear()
            aCmdMst.CMDSNO  = sCmdSno;
            aCmdMst.CMDMODE = clsASRS.gsCmdMode_Out; //2

            aCmdMst.SNO1   = "1";
            aCmdMst.LOC1   = sLoc;
            aCmdMst.LOCID1 = sLocID;
            aCmdMst.SCAN1  = "Y";

            aCmdMst.SNO2   = "";
            aCmdMst.LOC2   = "";
            aCmdMst.LOCID2 = "";
            aCmdMst.SCAN2  = "Y";

            aCmdMst.CMDSTS     = "0";
            aCmdMst.PRT        = "5";
            aCmdMst.STNNO      = cboStnNo.Text;
            aCmdMst.IOTYP      = clsASRS.gsIOTYPE_Offline_In;
            aCmdMst.AVAIL      = "0";
            aCmdMst.MIXQTY     = "0";
            aCmdMst.NEWLOC     = "";
            aCmdMst.PROGID     = clsASRS.gsIOTYPE_Offline_In_PID;
            aCmdMst.USERID     = clsASRS.gstrLoginUser;
            aCmdMst.TRACE      = "0";
            aCmdMst.STORAGETYP = "";
            if (aCmdMst.FunInsCmdMst() == false)
            {
                clsDB.FunCommitCtrl("ROLLBACK");
                clsMSG.ShowErrMsg(clsMSG.MSG.COMMAND_ERROR);
                clsDB.FunClsDB();
                this.Cursor = Cursors.Default;
                return;
            }
            #endregion


            #region 產生命令明細檔
            cls_CmdDtl aCmdDtl = new cls_CmdDtl();
            int        i       = 0;
            for (i = 0; i <= Grid1.RowCount - 1; i++)
            {
                #region Get出庫明細 objGridTmp Data
                aCmdDtl.CMDSNO = sCmdSno;
                aCmdDtl.SNO    = "1";
                //aCmdDtl.LOC = objGridTmp[iCol_Loc, 0].Value.ToString();
                aCmdDtl.LOCID    = sLocID;
                aCmdDtl.SUBLOC   = ""; //No Use
                aCmdDtl.ITEMNO   = Grid1[iCol_ITEM, i].Value.ToString();
                aCmdDtl.CUSTOMER = Grid1[iCol_CUST, i].Value.ToString();
                aCmdDtl.DEVICE   = Grid1[iCol_DEV, i].Value.ToString();
                aCmdDtl.LOTNO    = Grid1[iCol_LotNo, i].Value.ToString();
                aCmdDtl.STORE    = Grid1[iCol_Store, i].Value.ToString();
                aCmdDtl.OFFQTY   = clsTool.INT(Grid1[iCol_OffQty, i].Value.ToString());
                aCmdDtl.WAFERQTY = clsTool.INT(Grid1[iCol_WaferQty, i].Value.ToString());
                aCmdDtl.SHIPQTY  = clsTool.INT(Grid1[iCol_ShipQty, i].Value.ToString());

                aCmdDtl.OFFACTQTY   = clsTool.INT(Grid1[iCol_OffQty, i].Value.ToString());
                aCmdDtl.WAFERACTQTY = clsTool.INT(Grid1[iCol_WaferQty, i].Value.ToString());
                aCmdDtl.SHIPACTQTY  = clsTool.INT(Grid1[iCol_ShipQty, i].Value.ToString());
                aCmdDtl.FLAGQTY     = "A";

                aCmdDtl.CHKIQC           = Grid1[iCol_ChkIQC, i].Value.ToString();
                aCmdDtl.FOSBID           = Grid1[iCol_FOSBID, i].Value.ToString();
                aCmdDtl.IQC_ID           = "";
                aCmdDtl.ACC_ID           = Grid1[iCol_ACCID, i].Value.ToString();
                aCmdDtl.INDATE           = Grid1[iCol_InDate, i].Value.ToString();
                aCmdDtl.REMARK           = Grid1[iCol_Remark, i].Value.ToString();
                aCmdDtl.TRANSACTION_DATE = Grid1[iCol_TRANSACTION_DATE, i].Value.ToString();
                if (aCmdDtl.TRANSACTION_DATE == "")
                {
                    aCmdDtl.TRANSACTION_DATE = clsTool.GetDateTime(); //Format(Now, "yyyy/MM/dd HH:mm:ss")
                }
                aCmdDtl.GIB_CUSTOMER          = Grid1[iCol_GIB_CUSTOMER, i].Value.ToString();
                aCmdDtl.FAB_LOT_NO            = Grid1[iCol_FAB_LOT_NO, i].Value.ToString();
                aCmdDtl.FAB_TYPE              = Grid1[iCol_FAB_TYPE, i].Value.ToString();
                aCmdDtl.TYPENO                = Grid1[iCol_TYPENO, i].Value.ToString();
                aCmdDtl.LOT_TYPE              = Grid1[iCol_LOT_TYPE, i].Value.ToString();
                aCmdDtl.WAFER_SIZE            = Grid1[iCol_WAFER_SIZE, i].Value.ToString();
                aCmdDtl.YIELD                 = Grid1[iCol_YIELD, i].Value.ToString();
                aCmdDtl.APP_NO                = Grid1[iCol_APP_NO, i].Value.ToString();
                aCmdDtl.REL_DATE              = Grid1[iCol_REL_DATE, i].Value.ToString();
                aCmdDtl.REASON_NAME           = Grid1[iCol_REASON_NAME, i].Value.ToString();
                aCmdDtl.TRANSACTION_REFERENCE = Grid1[iCol_TRANSACTION_REFERENCE, i].Value.ToString();
                aCmdDtl.TRANSACTION_SOURCE_ID = Grid1[iCol_TRANSACTION_SOURCE_ID, i].Value.ToString();
                aCmdDtl.TRANSACTION_TYPE_ID   = Grid1[iCol_TRANSACTION_TYPE_ID, i].Value.ToString();
                aCmdDtl.FROM_ORG              = Grid1[iCol_FROM_ORG, i].Value.ToString();
                aCmdDtl.TO_ORG                = Grid1[iCol_TO_ORG, i].Value.ToString();
                aCmdDtl.FROM_BANK             = Grid1[iCol_FROM_BANK, i].Value.ToString();
                aCmdDtl.TO_BANK               = Grid1[iCol_TO_BANK, i].Value.ToString();
                aCmdDtl.CYCLENO               = ""; //'WMS
                aCmdDtl.COID   = "";                // objGridTmp[iCol_COID, j].Value.ToString();
                aCmdDtl.DOCID  = "";                // 'WMS
                aCmdDtl.DOCID2 = "";                //? objGridTmp[iCol_DOCID2, j].Value.ToString();       // 'WMS
                #endregion

                if (aCmdDtl.FunInsCmdDtl() == false)
                {
                    clsDB.FunCommitCtrl("ROLLBACK");
                    clsMSG.ShowErrMsg(clsMSG.MSG.COMMAND_ERROR);
                    clsDB.FunClsDB();
                    this.Cursor = Cursors.Default;
                    return;
                }

                sSQL = "DELETE FROM TRNTKT_ACC ";
                sSQL = sSQL + "WHERE ACC_ID = '" + Grid1[iCol_ACCID, i].Value.ToString() + "' ";
                if (clsDB.FunExecSql(sSQL) == false)
                {
                    clsDB.FunCommitCtrl("ROLLBACK");
                    clsMSG.ShowErrMsg(clsMSG.MSG.COMMAND_ERROR);
                    clsDB.FunClsDB();
                    this.Cursor = Cursors.Default;
                    return;
                }
            }
            #endregion

            clsDB.FunCommitCtrl("COMMIT");
            clsMSG.ShowInformationMsg(clsMSG.MSG.Msg_Run_Finish);
            clsDB.FunClsDB();

            FormClear();
            SubClrForm();
        }
        private bool SubGetCmdDtl(ref DataGridView objGridTmp, string sCmdSno, string sSno)
        {
            int        j       = 0;
            cls_CmdDtl aCmdDtl = new cls_CmdDtl();

            for (j = 0; j <= objGridTmp.RowCount - 1; j++)
            {
                #region Get出庫明細 objGridTmp Data
                aCmdDtl.CMDSNO = sCmdSno;
                aCmdDtl.SNO    = sSno;
                //aCmdDtl.LOC = objGridTmp[iCol_Loc, 0].Value.ToString();
                aCmdDtl.LOCID    = objGridTmp[iCol_LocID, 0].Value.ToString();
                aCmdDtl.SUBLOC   = ""; //No Use
                aCmdDtl.ITEMNO   = objGridTmp[iCol_ITEM, j].Value.ToString();
                aCmdDtl.CUSTOMER = objGridTmp[iCol_Cust, j].Value.ToString();
                aCmdDtl.DEVICE   = objGridTmp[iCol_Dev, j].Value.ToString();
                aCmdDtl.LOTNO    = objGridTmp[iCol_LotNo, j].Value.ToString();
                aCmdDtl.STORE    = objGridTmp[iCol_Store, j].Value.ToString();
                aCmdDtl.OFFQTY   = clsTool.INT(objGridTmp[iCol_OffQty, j].Value.ToString());
                aCmdDtl.WAFERQTY = clsTool.INT(objGridTmp[iCol_WaferQty, j].Value.ToString());
                aCmdDtl.SHIPQTY  = clsTool.INT(objGridTmp[iCol_ShipQty, j].Value.ToString());

                aCmdDtl.OFFACTQTY   = 0;
                aCmdDtl.WAFERACTQTY = 0;
                aCmdDtl.SHIPACTQTY  = 0;

                //if (tmpGrid1.Rows[j].HeaderCell.Value.ToString() == "*")
                //{
                aCmdDtl.FLAGQTY = clsASRS.gsFlagQty_OUT;
                //}
                //else
                //{
                //    aCmdDtl.FLAGQTY = clsASRS.gsFlagQty_Limit;
                //}

                aCmdDtl.CHKIQC                = objGridTmp[iCol_ChkIQC, j].Value.ToString();
                aCmdDtl.FOSBID                = objGridTmp[iCol_FOSBID, j].Value.ToString();
                aCmdDtl.IQC_ID                = objGridTmp[iCol_IQCID, j].Value.ToString();
                aCmdDtl.ACC_ID                = objGridTmp[iCol_ACCID, j].Value.ToString();
                aCmdDtl.INDATE                = objGridTmp[iCol_InDate, j].Value.ToString();
                aCmdDtl.REMARK                = objGridTmp[iCol_REMARK, j].Value.ToString();
                aCmdDtl.TRANSACTION_DATE      = objGridTmp[iCol_TRANSACTION_DATE, j].Value.ToString();
                aCmdDtl.GIB_CUSTOMER          = objGridTmp[iCol_GIB_CUSTOMER, j].Value.ToString();
                aCmdDtl.FAB_LOT_NO            = objGridTmp[iCol_FAB_LOT_NO, j].Value.ToString();
                aCmdDtl.FAB_TYPE              = objGridTmp[iCol_FAB_TYPE, j].Value.ToString();
                aCmdDtl.TYPENO                = objGridTmp[iCol_TYPENO, j].Value.ToString();
                aCmdDtl.LOT_TYPE              = objGridTmp[iCol_LOT_TYPE, j].Value.ToString();
                aCmdDtl.WAFER_SIZE            = objGridTmp[iCol_WAFER_SIZE, j].Value.ToString();
                aCmdDtl.YIELD                 = objGridTmp[iCol_YIELD, j].Value.ToString();
                aCmdDtl.APP_NO                = objGridTmp[iCol_APP_NO, j].Value.ToString();
                aCmdDtl.REL_DATE              = objGridTmp[iCol_REL_DATE, j].Value.ToString();
                aCmdDtl.REASON_NAME           = objGridTmp[iCol_REASON_NAME, j].Value.ToString();
                aCmdDtl.TRANSACTION_REFERENCE = objGridTmp[iCol_TRANSACTION_REFERENCE, j].Value.ToString();
                aCmdDtl.TRANSACTION_SOURCE_ID = objGridTmp[iCol_TRANSACTION_SOURCE_ID, j].Value.ToString();
                aCmdDtl.TRANSACTION_TYPE_ID   = objGridTmp[iCol_TRANSACTION_TYPE_ID, j].Value.ToString();
                aCmdDtl.FROM_ORG              = objGridTmp[iCol_FROM_ORG, j].Value.ToString();
                aCmdDtl.TO_ORG                = objGridTmp[iCol_TO_ORG, j].Value.ToString();
                aCmdDtl.FROM_BANK             = objGridTmp[iCol_FROM_BANK, j].Value.ToString();
                aCmdDtl.TO_BANK               = objGridTmp[iCol_TO_BANK, j].Value.ToString();
                aCmdDtl.CYCLENO               = ""; //盤點單號
                aCmdDtl.COID   = "";
                aCmdDtl.DOCID  = objGridTmp[iCol_DOCID, j].Value.ToString();
                aCmdDtl.DOCID2 = "";
                #endregion

                if (aCmdDtl.FunInsCmdDtl() == false)
                {
                    return(false);
                }
            }

            return(true);
        }