Пример #1
0
        private bool FunCreateNewCmdSno(string sCmdSno, string sLoc, string sLocID)
        {
            #region 預約儲位
            string sMsg = "";
            //預約儲位為入庫預約
            if (clsASRS.FunSetLocIsPreStkIn(sLoc, "", ref sMsg) == false)
            {
                return(false);
            }
            #endregion

            #region 產生命令主檔
            cls_CmdMst aCmdMst = new cls_CmdMst();

            aCmdMst.FunCmdMstClear();   //Clear()
            aCmdMst.CMDSNO = sCmdSno;
            aCmdMst.SNO1   = "1";
            aCmdMst.LOC1   = sLoc;
            aCmdMst.LOCID1 = sLocID;
            aCmdMst.SCAN1  = "Y";   //己確認

            aCmdMst.SNO2    = "";
            aCmdMst.LOC2    = "";
            aCmdMst.LOCID2  = "";
            aCmdMst.SCAN2   = "N";
            aCmdMst.CMDMODE = "1";   //入庫

            aCmdMst.CMDSTS = "0";
            aCmdMst.PRT    = "5";
            aCmdMst.STNNO  = "D04";
            aCmdMst.IOTYP  = clsASRS.gsIOTYPE_EmptyIn;

            aCmdMst.AVAIL  = "0"; // 彰化廠
            aCmdMst.MIXQTY = "0"; // 彰化廠

            aCmdMst.NEWLOC     = "";
            aCmdMst.PROGID     = clsASRS.gsIOTYPE_EmptyIn_PID;
            aCmdMst.USERID     = txtIQC_ID.Text;
            aCmdMst.TRACE      = "0";
            aCmdMst.STORAGETYP = "";
            if (aCmdMst.FunInsCmdMst() == false)
            {
                return(false);
            }

            #endregion

            return(true);
        }
Пример #2
0
        private void btnExecute_Click(object sender, EventArgs e)
        {
            int    iFosb = 0; //0:None, 1:Left, 2:Right, 3:ALL
            string sLocID1 = ""; string sLocID2 = "";
            string sGetLoc1 = ""; string sGetLoc2 = ""; string sGetLocID1 = ""; string sGetLocID2 = "";
            int    iCrn     = 0;
            int    iBayDesc = 1;

            #region 防呆
            if (clsASRS.FunChkStnNo(cboStnNo.Text.Trim()) == false)
            {
                return;
            }

            if (cboStnNo.Text == "D04")
            {
                iBayDesc = 2;   //由後面找起
            }
            else
            {
                iBayDesc = 1;
            }

            txtLocID1.Text = txtLocID1.Text.Trim().ToUpper();
            txtLocID2.Text = txtLocID2.Text.Trim().ToUpper();
            sLocID1        = txtLocID1.Text;
            sLocID2        = txtLocID2.Text;

            if (sLocID1 != "")
            {
                if (sLocID2 == "")
                {
                    iFosb = 1;
                }
                else
                {
                    iFosb = 3;

                    //判斷左右的條碼要相同的第一碼
                    string sLocID_H1 = ""; string sLocID_H2 = "";
                    if (txtLocID1.Text.Length > 0)
                    {
                        sLocID_H1 = txtLocID1.Text.Substring(0, 1);
                    }
                    if (txtLocID2.Text.Length > 0)
                    {
                        sLocID_H2 = txtLocID2.Text.Substring(0, 1);
                    }
                    if (sLocID_H1 != sLocID_H2)
                    {
                        clsMSG.ShowWarningMsg("左右兩側的料盒條碼,第一碼要相同的編號");
                        return;
                    }
                }
            }
            else if (sLocID2 != "")
            {
                iFosb = 2;
                clsMSG.ShowWarningMsg("不允許由右側,進行空料盒入庫作業");
                return;
            }
            else
            {
                iFosb = 0;
                clsMSG.ShowWarningMsg("請輸入空料盒條碼");
                return;
            }
            #endregion


            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 判斷料盤ID是否有建檔
            if (txtLocID1.Text != "")
            {
                if (clsASRS.FunGetWMSLocByLocID(txtLocID1.Text) == "")
                {
                    clsDB.FunClsDB();
                    clsMSG.ShowWarningMsg("料盤編號 (" + txtLocID1.Text + ") 不正確!!, 請確認系統是否有建立料盤編號.");
                    return;
                }
            }
            if (txtLocID2.Text != "")
            {
                if (clsASRS.FunGetWMSLocByLocID(txtLocID2.Text) == "")
                {
                    clsDB.FunClsDB();
                    clsMSG.ShowWarningMsg("料盤編號 (" + txtLocID2.Text + ") 不正確!!, 請確認系統是否有建立料盤編號.");
                    return;
                }
            }
            #endregion


            #region 判別料盤ID是否己存在儲位中或命令中
            string sTmpMsg = "";
            if (sLocID1 != "")
            {
                if (clsASRS.FunChkLocIdIsExist(sLocID1, ref sTmpMsg) == false)
                {
                    clsMSG.ShowWarningMsg(sTmpMsg);
                    clsDB.FunClsDB();
                    return;
                }
            }
            if (sLocID2 != "")
            {
                if (clsASRS.FunChkLocIdIsExist(sLocID2, ref sMsg) == false)
                {
                    clsMSG.ShowWarningMsg(sMsg);
                    clsDB.FunClsDB();
                    return;
                }
            }
            #endregion

            #region 系統指派空儲位
            iCrn = clsASRS.FunGetCraneNoByLocID(sLocID1); //由料盒ID取得是那一座Crane
            if (iFosb == 3)                               //ALL
            {
                if (clsASRS.FunGetLocForDoubleListByLocSts(iCrn, "N", ref sGetLoc1, ref sGetLocID1, ref sGetLoc2, ref sGetLocID2) == false)
                {
                    clsMSG.ShowWarningMsg("無空儲位!!"); clsDB.FunClsDB(); return;
                }
            }
            else if (iFosb == 1)
            {
                if (clsASRS.FunGetLocN_ByE(iCrn, ref sGetLoc1, ref sGetLocID1, iBayDesc) == false)
                {
                    clsMSG.ShowWarningMsg("無合適之空儲位!!"); clsDB.FunClsDB(); return;
                }

                ////只有入一個
                ////(1)先找內側儲位為N,外側儲位為E
                //if (clsASRS.FunGetLocForSingleListByInOutLoc(iCrn, "N", "E", 1, ref sGetLoc1, ref sGetLocID1) == false)
                //{
                //    //(2)找內側儲位為N,外側儲位為E. (TEMP 儲位)
                //    if (clsASRS.FunGetLocForSingleListByInOutLoc_StorageTyp_Temp(iCrn, "N", "E", 1, ref sGetLoc1, ref sGetLocID1, iBayDesc) == false)
                //    {
                //        //(3)找外側儲位為N,內側儲位為N. (TEMP 儲位)
                //        if (clsASRS.FunGetLocForSingleListByInOutLoc_StorageTyp_Temp(iCrn, "N", "N", 2, ref sGetLoc1, ref sGetLocID1, iBayDesc) == false)
                //        {
                //            //(4)找外側儲位為N,內側儲位為N,
                //            if (clsASRS.FunGetLocForSingleListByInOutLoc(iCrn, "N", "N", 2, ref sGetLoc1, ref sGetLocID1) == false)
                //            {
                //                clsMSG.ShowWarningMsg("無合適之空儲位!!"); clsDB.FunClsDB(); return;
                //            }
                //        }
                //    }
                //}
            }
            #endregion

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

            clsDB.FunCommitCtrl("BEGIN");

            //預約儲位
            sMsg = "";
            if (clsASRS.FunSetLocIsPreStkIn(sGetLoc1, sGetLoc2, ref sMsg) == false)
            {
                clsDB.FunCommitCtrl("ROLLBACK");
                clsMSG.ShowWarningMsg(sMsg);
                clsDB.FunClsDB(); return;
            }

            //產生入庫命令
            cls_CmdMst aCmdMst = new cls_CmdMst();
            aCmdMst.FunCmdMstClear();               //Clear()
            aCmdMst.CMDSNO  = sCmdSno;
            aCmdMst.CMDMODE = clsASRS.gsCmdMode_In; //1

            aCmdMst.SNO1   = "1";
            aCmdMst.LOC1   = sGetLoc1;
            aCmdMst.LOCID1 = sLocID1;
            aCmdMst.SCAN1  = "Y";
            if (sGetLoc2 == "")
            {
                aCmdMst.SNO2   = "";
                aCmdMst.LOC2   = "";
                aCmdMst.LOCID2 = "";
                aCmdMst.SCAN2  = "";
            }
            else
            {
                aCmdMst.SNO2   = "2";
                aCmdMst.LOC2   = sGetLoc2;
                aCmdMst.LOCID2 = sLocID2;
                aCmdMst.SCAN2  = "Y";
            }
            aCmdMst.CMDSTS = "0";
            aCmdMst.PRT    = "5";

            //中科廠-站號依儲位
            aCmdMst.STNNO = cboStnNo.Text;
            if (cboStnNo.Text == "D04")
            {
                aCmdMst.STNNO = cboStnNo.Text;
            }
            else
            {
                aCmdMst.STNNO = clsASRS.FunGetStnNoByLoc_SPIL_ZX(sGetLoc1);
            }

            aCmdMst.IOTYP      = clsASRS.gsIOTYPE_EmptyIn;
            aCmdMst.AVAIL      = "0";
            aCmdMst.MIXQTY     = "0";
            aCmdMst.NEWLOC     = "";
            aCmdMst.PROGID     = clsASRS.gsIOTYPE_EmptyIn_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;
            }

            clsDB.FunCommitCtrl("COMMIT");
            clsDB.FunClsDB();

            clsMSG.ShowInformationMsg(clsMSG.MSG.Msg_Run_Finish);
            FormCls();
        }
Пример #3
0
        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();
        }
Пример #4
0
        //處理命令
        private bool FunDelwithCmd()
        {
            if (clsDB.FunOpenDB() == false)
            {
                clsMSG.ShowErrMsg(clsMSG.MSG.OPEN_DB_NG); return(false);
            }
            ;


            //找出命令模式
            #region 找出命令模式
            string sSQL = ""; DbDataReader dbRS = null;
            string sCmdMode = ""; string sIOTYP = ""; string sStnNo = ""; string sProgID = ""; string sUserID = "";
            sSQL = "SELECT * FROM CMD_MST WHERE CMDSNO = '" + get_CmdSno + "' AND LOCID = '" + get_LocID + "' ";
            if (clsDB.FunRsSql(sSQL, ref dbRS))
            {
                while (dbRS.Read())
                {
                    sCmdMode = dbRS["CMDMODE"].ToString();
                    sIOTYP   = dbRS["IOTYP"].ToString();
                    sStnNo   = dbRS["STNNO"].ToString();
                    sProgID  = dbRS["PROGID"].ToString();
                    sUserID  = dbRS["USERID"].ToString();
                }
                dbRS.Close();
            }
            #endregion

            if (sCmdMode == "2")
            {
                #region 找儲位
                //尋找空儲位 (一定是一個空儲位) 只有入一個
                int iCrn = 0;
                iCrn = clsASRS.FunGetCraneNoByLocID(get_LocID); //由料盒ID取得是那一座Crane
                int iBayDesc = 1;                               //從前面找起

                string sGetLoc1 = ""; string sGetLocID1 = "";
                //(1)先找內側儲位為N,外側儲位為S
                if (clsASRS.FunGetLocForSingleListByInOutLoc(iCrn, "N", "S", 1, ref sGetLoc1, ref sGetLocID1) == false)
                {
                    //(2)找內側儲位為N,外側儲位為S. (TEMP 儲位)
                    if (clsASRS.FunGetLocForSingleListByInOutLoc_StorageTyp_Temp(iCrn, "N", "S", 1, ref sGetLoc1, ref sGetLocID1, iBayDesc) == false)
                    {
                        //(3)找外側儲位為N,內側儲位為N. (TEMP 儲位)
                        if (clsASRS.FunGetLocForSingleListByInOutLoc_StorageTyp_Temp(iCrn, "N", "N", 2, ref sGetLoc1, ref sGetLocID1, iBayDesc) == false)
                        {
                            //(4)找外側儲位為N,內側儲位為N,
                            if (clsASRS.FunGetLocForSingleListByInOutLoc(iCrn, "N", "N", 2, ref sGetLoc1, ref sGetLocID1) == false)
                            {
                                clsMSG.ShowWarningMsg("無合適之空儲位!!"); clsDB.FunClsDB(); return(false);
                            }
                        }
                    }
                }
                #endregion

                #region 找命令
                string sCmdSnoNew = clsASRS.FunGetCmdSno();
                if (sCmdSnoNew == "")
                {
                    clsMSG.ShowErrMsg("系統錯誤!!"); clsDB.FunClsDB(); return(false);
                }
                #endregion

                string sMsg = "";
                clsDB.FunCommitCtrl("BEGIN");
                #region 預約儲位
                //預約儲位為入庫預約
                if (clsASRS.FunSetLocIsPreStkIn(sGetLoc1, "", ref sMsg) == false)
                {
                    clsDB.FunCommitCtrl("ROLLBACK");
                    clsMSG.ShowWarningMsg(sMsg);
                    clsDB.FunClsDB(); return(false);
                }
                #endregion

                //產生命令主檔
                #region 產生命令主檔
                cls_CmdMst aCmdMst = new cls_CmdMst();

                aCmdMst.FunCmdMstClear();   //Clear()
                aCmdMst.CMDSNO = sCmdSnoNew;
                aCmdMst.SNO1   = "1";
                aCmdMst.LOC1   = sGetLoc1;
                aCmdMst.LOCID1 = get_LocID;
                aCmdMst.SCAN1  = "Y";   //己確認

                aCmdMst.SNO2    = "";
                aCmdMst.LOC2    = "";
                aCmdMst.LOCID2  = "";
                aCmdMst.SCAN2   = "N";
                aCmdMst.CMDMODE = clsASRS.gsCmdMode_In;   //入庫

                aCmdMst.CMDSTS     = "0";
                aCmdMst.PRT        = "5";
                aCmdMst.STNNO      = sStnNo;
                aCmdMst.IOTYP      = sIOTYP;
                aCmdMst.AVAIL      = "100"; // 彰化廠
                aCmdMst.MIXQTY     = "1";   // 彰化廠
                aCmdMst.NEWLOC     = "";
                aCmdMst.PROGID     = sProgID;
                aCmdMst.USERID     = sUserID;
                aCmdMst.TRACE      = "0";
                aCmdMst.STORAGETYP = "";
                if (aCmdMst.FunInsCmdMst() == false)
                {
                    clsDB.FunCommitCtrl("ROLLBACK");
                    clsMSG.ShowWarningMsg("處理失敗");
                    clsDB.FunClsDB(); return(false);
                }

                #endregion

                //產生命令明細檔
                #region 產生命令明細檔
                sSQL = "INSERT INTO CMD_DTL (CMDSNO,LocID,SNO,ITEMNO,CUSTOMER,DEVICE,LOTNO,STORE,";
                sSQL = sSQL + "OFFQTY,WAFERQTY,SHIPQTY,OFFACTQTY,WAFERACTQTY,SHIPACTQTY,";
                sSQL = sSQL + "FLAGQTY,CHKIQC,FOSBID,IQC_ID,ACC_ID,INDATE,REMARK,TRANSACTION_DATE,";
                sSQL = sSQL + "GIB_CUSTOMER,FAB_LOT_NO,FAB_TYPE,TYPENO,LOT_TYPE,WAFER_SIZE,YIELD,";
                sSQL = sSQL + "APP_NO,REL_DATE,REASON_NAME,TRANSACTION_REFERENCE,TRANSACTION_SOURCE_ID,";
                sSQL = sSQL + "TRANSACTION_TYPE_ID,FROM_ORG,TO_ORG,FROM_BANK,TO_BANK,CYCLENO,COID,SNID,DOCID,DOCID2) ";
                sSQL = sSQL + "SELECT '" + sCmdSnoNew + "',LocID,SNO,ITEMNO,CUSTOMER,DEVICE,LOTNO,STORE,";
                sSQL = sSQL + "OFFQTY,WAFERQTY,SHIPQTY,OFFACTQTY,WAFERACTQTY,SHIPACTQTY,";
                sSQL = sSQL + "FLAGQTY,CHKIQC,FOSBID,IQC_ID,ACC_ID,INDATE,REMARK,TRANSACTION_DATE,";
                sSQL = sSQL + "GIB_CUSTOMER,FAB_LOT_NO,FAB_TYPE,TYPENO,LOT_TYPE,WAFER_SIZE,YIELD,";
                sSQL = sSQL + "APP_NO,REL_DATE,REASON_NAME,TRANSACTION_REFERENCE,TRANSACTION_SOURCE_ID,";
                sSQL = sSQL + "TRANSACTION_TYPE_ID,FROM_ORG,TO_ORG,FROM_BANK,TO_BANK,CYCLENO,COID,SNID,DOCID,DOCID2 ";
                sSQL = sSQL + "FROM CMD_DTL WHERE CMDSNO = '" + get_CmdSno + "' AND LOCID = '" + get_LocID + "' ";
                if (clsDB.FunExecSql(sSQL) == false)
                {
                    clsDB.FunCommitCtrl("ROLLBACK");
                    clsMSG.ShowWarningMsg(clsMSG.MSG.Msg_Run_Error);
                    clsDB.FunClsDB();
                    return(false);
                }
                #endregion

                //更新盤點檔
                #region 更新盤點檔
                if (FunDelWithCYCLE() == false)
                {
                    clsDB.FunCommitCtrl("ROLLBACK");
                    clsMSG.ShowWarningMsg(clsMSG.MSG.Msg_Run_Error);
                    clsDB.FunClsDB();
                    return(false);
                }
                #endregion

                //更新old命令為 Y且結束
                #region 更新old命令為 Y且結束
                sSQL = "UPDATE CMD_MST SET SCAN = 'Y',CMDSTS = '7' ";
                sSQL = sSQL + "WHERE CMDSNO = '" + get_CmdSno + "' ";
                sSQL = sSQL + "AND LOCID = '" + get_LocID + "' ";
                sSQL = sSQL + "AND CMDSTS <= '7' ";
                if (clsDB.FunExecSql(sSQL) == false)
                {
                    clsDB.FunCommitCtrl("ROLLBACK");
                    clsMSG.ShowWarningMsg(clsMSG.MSG.Msg_Run_Error);
                    clsDB.FunClsDB();
                    return(false);
                }
                #endregion

                clsDB.FunCommitCtrl("COMMIT");    // 'COMMIT
                clsDB.FunClsDB();
                return(true);
            }
            else
            {
                clsDB.FunCommitCtrl("BEGIN");

                //更新盤點檔
                if (FunDelWithCYCLE() == false)
                {
                    clsDB.FunCommitCtrl("ROLLBACK");
                    clsMSG.ShowWarningMsg(clsMSG.MSG.Msg_Run_Error);
                    clsDB.FunClsDB();
                    return(false);
                }

                //更新 CMD_MST
                if (FunDelWithCmd_CMD_MST() == false)
                {
                    clsDB.FunCommitCtrl("ROLLBACK");
                    clsMSG.ShowWarningMsg(clsMSG.MSG.Msg_Run_Error);
                    clsDB.FunClsDB();
                    return(false);
                }

                clsDB.FunCommitCtrl("COMMIT");    // 'COMMIT
                clsDB.FunClsDB();
                return(true);
            }

            //return false;
        }
        private void SubExecute()
        {
            string     sSQL = ""; DbDataReader dbRS = null;
            int        i = 0; int j = 0; bool bCmdFlag = false;
            cls_CmdMst aCmdMst = new cls_CmdMst();
            string     sLoc1 = ""; string sLocOther = ""; string sLocIDOther = "";

            //判斷站號是否正確
            if (clsASRS.FunChkStnNo(cboStnNo.Text.Trim()) == false)
            {
                return;
            }

            //讀取要出庫的儲位資料
            string[] aLoc = new string[1]; aLoc[0] = "";
            if (clsASRS.FunGetLocList(ref aLoc, ref Grid1, iCol_Loc) == false)
            {
                return;
            }

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

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

            #region 讀取命令序號
            string[] sCmdSno = new string[aLoc.Length];
            for (i = 0; i <= aLoc.Length - 1; i++)
            {
                sCmdSno[i] = clsASRS.FunGetCmdSno();
                if (sCmdSno[i] == "")
                {
                    clsMSG.ShowErrMsg("系統錯誤,無命令序號可使用!!");
                    clsDB.FunClsDB(); return;
                }
            }
            #endregion


            for (i = 0; i <= aLoc.Length - 1; i++)
            {
                if (aLoc[i] != "")
                {
                    #region 1. 複製 Loc 資訊
                    tmpGrid1.RowCount = 0;
                    tmpGrid2.RowCount = 0;
                    sLoc1             = ""; sLocOther = ""; sLocIDOther = "";
                    if (FunGetLocToTmpGrid(aLoc[i]) == false)
                    {
                        clsMSG.ShowErrMsg("系統錯誤");
                        clsDB.FunClsDB();
                        return;
                    }
                    #endregion

                    #region 2. 取得另一個 Loc (sLocOther/sLocIDOther)
                    string sCrane_Row = "";
                    string sSNO1 = ""; string sSNO2 = "";
                    sSQL = "SELECT LOC1,CRANE_ROW FROM LOC_MST WHERE LOC = '" + aLoc[i] + "' ";
                    if (clsDB.FunRsSql(sSQL, ref dbRS))
                    {
                        while (dbRS.Read())
                        {
                            sLoc1      = dbRS["LOC1"].ToString();
                            sCrane_Row = dbRS["CRANE_ROW"].ToString();
                        }
                        dbRS.Close();
                    }

                    bool bFlagTmp = false;
                    for (j = 0; j <= aLoc.Length - 1; j++)
                    {
                        if (sLoc1 == aLoc[j])
                        {
                            aLoc[j]  = ""; //Clear
                            bFlagTmp = true;
                            break;
                        }
                    }
                    if (bFlagTmp == true)
                    {
                        sLocOther = sLoc1;
                        sSQL      = "SELECT LOCID FROM LOC_MST WHERE LOC = '" + sLocOther + "' ";
                        if (clsDB.FunRsSql(sSQL, ref dbRS))
                        {
                            while (dbRS.Read())
                            {
                                sLocIDOther = dbRS["LOCID"].ToString();
                            }
                            dbRS.Close();
                        }

                        if (FunGetLocToTmpGrid2(sLocOther) == false)
                        {
                            clsMSG.ShowErrMsg("系統錯誤");
                            clsDB.FunClsDB();
                            return;
                        }

                        //判斷左右
                        if ((sCrane_Row == "2") || (sCrane_Row == "3"))
                        {
                            sSNO1 = "1";
                            sSNO2 = "2";
                        }
                        else
                        {
                            sSNO1 = "2";
                            sSNO2 = "1";
                        }
                    }
                    else
                    {
                        sSNO1 = "1";
                        sSNO2 = "";
                    }
                    #endregion


                    #region BEGIN
                    bCmdFlag = true;
                    clsDB.FunCommitCtrl("BEGIN");
                    #endregion

                    #region 4. 預約儲位
                    if (bCmdFlag == true)
                    {
                        sSQL = "UPDATE LOC_MST SET LOCSTS = 'O' WHERE LOC = '" + aLoc[i] + "' AND LOCSTS = 'S' ";
                        if (clsDB.FunExecSql(sSQL) == false)
                        {
                            bCmdFlag = false;
                        }
                    }
                    if (bCmdFlag == true)
                    {
                        if (sLocOther != "")
                        {
                            sSQL = "UPDATE LOC_MST SET LOCSTS = 'O' WHERE LOC = '" + sLocOther + "' AND LOCSTS = 'S' ";
                            if (clsDB.FunExecSql(sSQL) == false)
                            {
                                bCmdFlag = false;
                            }
                        }
                    }
                    #endregion

                    #region 5. 產生命令主檔
                    if (bCmdFlag == true)
                    {
                        aCmdMst.FunCmdMstClear();                                  //Clear()
                        aCmdMst.CMDSNO = sCmdSno[i];
                        aCmdMst.SNO1   = sSNO1;                                    // "1";
                        aCmdMst.LOC1   = aLoc[i];
                        aCmdMst.LOCID1 = tmpGrid1[iCol_LocID, 0].Value.ToString(); //LOCID
                        aCmdMst.SCAN1  = "N";
                        if (sLocOther == "")
                        {
                            aCmdMst.SNO2    = "";
                            aCmdMst.CMDMODE = clsASRS.gsCmdMode_Out;   //2
                        }
                        else
                        {
                            aCmdMst.SNO2    = sSNO2;
                            aCmdMst.LOC2    = sLocOther;
                            aCmdMst.LOCID2  = sLocIDOther;
                            aCmdMst.CMDMODE = clsASRS.gsCmdMode_Pack;   //3
                            aCmdMst.SCAN2   = "N";
                        }
                        aCmdMst.CMDSTS     = "0";
                        aCmdMst.PRT        = "5";
                        aCmdMst.STNNO      = cboStnNo.Text;
                        aCmdMst.IOTYP      = clsASRS.gsIOTYPE_ERP_Out;
                        aCmdMst.AVAIL      = tmpGrid1[iCol_AVAIL, 0].Value.ToString();  // "100";  // 彰化廠
                        aCmdMst.MIXQTY     = tmpGrid1[iCol_MIXQTY, 0].Value.ToString(); //"1";   // 彰化廠
                        aCmdMst.NEWLOC     = "";
                        aCmdMst.PROGID     = clsASRS.gsIOTYPE_ERP_Out_PID;
                        aCmdMst.USERID     = clsASRS.gstrLoginUser;
                        aCmdMst.TRACE      = "0";
                        aCmdMst.STORAGETYP = "";
                        if (aCmdMst.FunInsCmdMst() == false)
                        {
                            bCmdFlag = false;
                        }
                    }
                    #endregion

                    #region 6. 產生命令明細檔
                    if (bCmdFlag == true)
                    {
                        if (SubGetCmdDtl(ref tmpGrid1, sCmdSno[i], aCmdMst.SNO1) == false)
                        {
                            bCmdFlag = false;
                        }

                        if ((bCmdFlag == true) && (sLocOther != ""))
                        {
                            if (SubGetCmdDtl(ref tmpGrid2, sCmdSno[i], aCmdMst.SNO2) == false)
                            {
                                bCmdFlag = false;
                            }
                        }
                    }
                    #endregion


                    #region COMMIT/ROLLBACK
                    if (bCmdFlag == true)
                    {
                        clsDB.FunCommitCtrl("COMMIT");
                    }
                    else
                    {
                        clsDB.FunCommitCtrl("ROLLBACK");
                        clsDB.FunClsDB();
                        clsMSG.ShowErrMsg(clsMSG.MSG.Msg_Run_Error);
                        return;
                    }
                    #endregion
                }
            }

            FormCls();


            clsDB.FunClsDB();
        }
Пример #6
0
        private void SubExecute()
        {
            string sSQL    = ""; //DbDataReader dbRS = null;
            int    iSelCrn = 0;  //指定 Crane No

            int iTrnCnt = 0; int idx = 0;

            iTrnCnt = clsTool.INT(txtTrnQty.Text);

            Grid1.RowCount = 0;

            //if (cboStnNo.Text == "") { clsMSG.ShowWarningMsg("請選擇站號"); return; }

            #region 判斷數量是否足夠
            int iEmptyFosb = 0;
            if (chkCrn.Checked == false)
            {
                iSelCrn = clsTool.INT(cboCrnNo.Text);
                switch (cboCrnNo.Text)
                {
                case "1":
                    iEmptyFosb = clsTool.INT(lblEmptyFosb1.Text);   break;

                case "2":
                    iEmptyFosb = clsTool.INT(lblEmptyFosb2.Text);   break;

                case "3":
                    iEmptyFosb = clsTool.INT(lblEmptyFosb3.Text);   break;

                default:
                    clsMSG.ShowWarningMsg("選擇的高架車錯誤"); return;
                    //MessageBox.Show("選擇的高架車錯誤","Error",MessageBoxButtons.OK,MessageBoxIcon.Error); return;
                }
                if (iTrnCnt > iEmptyFosb)
                {
                    clsMSG.ShowErrMsg("AS/RS 可存放FOSB為:" + iEmptyFosb + " \n 預計入庫存放FOSB為:" + iTrnCnt + " \n 無法存放,請再確認!!");
                    return;
                }
            }
            else
            {
                //隨機(不限高架車)
                iSelCrn = 0;

                iEmptyFosb = clsTool.INT(lblEmptyFosb1.Text) + clsTool.INT(lblEmptyFosb2.Text) + clsTool.INT(lblEmptyFosb3.Text);
                if (iTrnCnt > iEmptyFosb)
                {
                    clsMSG.ShowErrMsg("AS/RS 可存放FOSB為:" + iEmptyFosb + " \n 預計入庫存放FOSB為:" + iTrnCnt + " \n 無法存放,請再確認!!");
                    return;
                }
            }
            #endregion


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

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


            this.Cursor = Cursors.WaitCursor;

            cls_CmdMst aCmdMst = new cls_CmdMst();

            int iFosb = 0; int i = 0;
            iFosb = iTrnCnt;  //要出庫的數量
            for (i = 1; i <= iTrnCnt; i++)
            {
                #region  找 E空料盒儲位
                string sLoc1 = ""; string sLocID1 = "";
                string sLoc2 = ""; string sLocID2 = "";

                if (iFosb <= 0)
                {
                    break;
                }                           //數量己經為0,則跳出迴圈

                if (iFosb == 1)
                {
                    //剩下一個
                    #region 找單料盒儲位順序
                    //(1) 找外側儲位,內側儲位為N.
                    //(2) 找內側儲位,外側儲位為N.
                    //(3) 找內側儲位,外側儲位為S.
                    //(4) 找內側儲位,外側儲位為E.
                    //(5) 找外側儲位,內側儲位為E.
                    //(6) 找內側儲位,內側儲位不為E.
                    //(7) 找外側儲位,內側儲位不為E.
                    #endregion

                    #region 找料盒
                    //(1) 找外側儲位,內側儲位為N.
                    if (clsASRS.FunGetLocForSingleListByInOutLoc(iSelCrn, "E", "N", 2, ref sLoc1, ref sLocID1) == false)
                    {
                        //(2) 找內側儲位,外側儲位為N.
                        if (clsASRS.FunGetLocForSingleListByInOutLoc(iSelCrn, "E", "N", 1, ref sLoc1, ref sLocID1) == false)
                        {
                            //(3) 找內側儲位,外側儲位為S.
                            if (clsASRS.FunGetLocForSingleListByInOutLoc(iSelCrn, "E", "S", 1, ref sLoc1, ref sLocID1) == false)
                            {
                                //(4) 找內側儲位,外側儲位為E.
                                if (clsASRS.FunGetLocForSingleListByInOutLoc(iSelCrn, "E", "E", 1, ref sLoc1, ref sLocID1) == false)
                                {
                                    //(5) 找外側儲位,內側儲位為E.
                                    if (clsASRS.FunGetLocForSingleListByInOutLoc(iSelCrn, "E", "E", 2, ref sLoc1, ref sLocID1) == false)
                                    {
                                        //(6) 找內側儲位,內側儲位不為E.
                                        if (clsASRS.FunGetLocForSingleListByLocSts(iSelCrn, "E", 1, ref sLoc1, ref sLocID1) == false)
                                        {
                                            //(7) 找外側儲位,內側儲位不為E.
                                            if (clsASRS.FunGetLocForSingleListByLocSts(iSelCrn, "E", 2, ref sLoc1, ref sLocID1) == false)
                                            {
                                                clsDB.FunClsDB();
                                                this.Cursor = Cursors.Default;
                                                return;
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                    #endregion

                    //SLOC1,SOCID1
                }
                else
                {
                    //1. 先找儲位雙料盒皆為空料盒.
                    if (clsASRS.FunGetLocForDoubleListByLocSts(iSelCrn, "E", ref sLoc1, ref sLocID1, ref sLoc2, ref sLocID2) == true)
                    {
                        //Got LOC1,LOC2
                    }
                    else
                    {
                        //2. 無雙料盒則找單料盒.
                        #region 找單料盒儲位順序
                        //(1) 找外側儲位,內側儲位為N.
                        //(2) 找內側儲位,外側儲位為N.
                        //(3) 找內側儲位,外側儲位為S.
                        //(4) 找內側儲位,外側儲位為E.
                        //(5) 找外側儲位,內側儲位為E.
                        //(6) 找內側儲位,內側儲位不為E.
                        //(7) 找外側儲位,內側儲位不為E.
                        #endregion

                        #region 找料盒
                        //(1) 找外側儲位,內側儲位為N.
                        if (clsASRS.FunGetLocForSingleListByInOutLoc(iSelCrn, "E", "N", 2, ref sLoc1, ref sLocID1) == false)
                        {
                            //(2) 找內側儲位,外側儲位為N.
                            if (clsASRS.FunGetLocForSingleListByInOutLoc(iSelCrn, "E", "N", 1, ref sLoc1, ref sLocID1) == false)
                            {
                                //(3) 找內側儲位,外側儲位為S.
                                if (clsASRS.FunGetLocForSingleListByInOutLoc(iSelCrn, "E", "S", 1, ref sLoc1, ref sLocID1) == false)
                                {
                                    //(4) 找內側儲位,外側儲位為E.
                                    if (clsASRS.FunGetLocForSingleListByInOutLoc(iSelCrn, "E", "E", 1, ref sLoc1, ref sLocID1) == false)
                                    {
                                        //(5) 找外側儲位,內側儲位為E.
                                        if (clsASRS.FunGetLocForSingleListByInOutLoc(iSelCrn, "E", "E", 2, ref sLoc1, ref sLocID1) == false)
                                        {
                                            //(6) 找內側儲位,內側儲位不為E.
                                            if (clsASRS.FunGetLocForSingleListByLocSts(iSelCrn, "E", 1, ref sLoc1, ref sLocID1) == false)
                                            {
                                                //(7) 找外側儲位,內側儲位不為E.
                                                if (clsASRS.FunGetLocForSingleListByLocSts(iSelCrn, "E", 2, ref sLoc1, ref sLocID1) == false)
                                                {
                                                    clsDB.FunClsDB();
                                                    this.Cursor = Cursors.Default;
                                                    return;
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                        #endregion

                        //SLOC1,SOCID1
                    }
                }
                #endregion


                //產生出庫命令

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

                clsDB.FunCommitCtrl("BEGIN");

                #region 預約儲位
                sSQL = "UPDATE LOC_MST SET LOCSTS = 'O' WHERE LOC = '" + sLoc1 + "' AND LOCSTS = 'E' ";
                if (clsDB.FunExecSql(sSQL) == false)
                {
                    clsDB.FunCommitCtrl("ROLLBACK");
                    clsDB.FunClsDB();
                    this.Cursor = Cursors.Default;
                    clsMSG.ShowErrMsg(clsMSG.MSG.COMMAND_ERROR);
                    return;
                }
                if (sLoc2 != "")
                {
                    sSQL = "UPDATE LOC_MST SET LOCSTS = 'O' WHERE LOC = '" + sLoc2 + "' AND LOCSTS = 'E' ";
                    if (clsDB.FunExecSql(sSQL) == false)
                    {
                        clsDB.FunCommitCtrl("ROLLBACK");
                        clsDB.FunClsDB();
                        this.Cursor = Cursors.Default;
                        clsMSG.ShowErrMsg(clsMSG.MSG.COMMAND_ERROR);
                        return;
                    }
                }
                #endregion

                #region 產生命令主檔
                aCmdMst.FunCmdMstClear();   //Clear()
                aCmdMst.CMDSNO = sCmdSno;
                aCmdMst.SNO1   = "1";
                aCmdMst.LOC1   = sLoc1;
                aCmdMst.LOCID1 = sLocID1;
                aCmdMst.SCAN1  = "N";  aCmdMst.SCAN2 = "N";
                if (sLoc2 == "")
                {
                    aCmdMst.SNO2    = "";
                    aCmdMst.CMDMODE = clsASRS.gsCmdMode_Out; //2
                    idx             = 1;                     //1個空料盒
                }
                else
                {
                    aCmdMst.SNO2    = "2";
                    aCmdMst.LOC2    = sLoc2;
                    aCmdMst.LOCID2  = sLocID2;
                    aCmdMst.CMDMODE = clsASRS.gsCmdMode_Pack; //3
                    idx             = 2;                      //2個空料盒
                }
                aCmdMst.CMDSTS = "0";
                aCmdMst.PRT    = "5";

                //中科廠-站號依儲位
                //aCmdMst.STNNO = cboStnNo.Text;
                if (cboStnNo.Text == "D04")
                {
                    aCmdMst.STNNO = cboStnNo.Text;
                }
                else
                {
                    aCmdMst.STNNO = clsASRS.FunGetStnNoByLoc_SPIL_ZX(sLoc1);
                }

                aCmdMst.IOTYP      = clsASRS.gsIOTYPE_WMS_In;
                aCmdMst.AVAIL      = "0";
                aCmdMst.MIXQTY     = "0";
                aCmdMst.NEWLOC     = "";
                aCmdMst.PROGID     = clsASRS.gsIOTYPE_WMS_In_PID;
                aCmdMst.USERID     = clsASRS.gstrLoginUser;
                aCmdMst.TRACE      = "0";
                aCmdMst.STORAGETYP = "";


                if (aCmdMst.FunInsCmdMst() == false)
                {
                    clsDB.FunCommitCtrl("ROLLBACK");
                    clsDB.FunClsDB();
                    this.Cursor = Cursors.Default;
                    clsMSG.ShowErrMsg(clsMSG.MSG.COMMAND_ERROR);
                    return;
                }
                #endregion


                clsDB.FunCommitCtrl("COMMIT");

                //將結果寫入Grid中
                SubWriGridCmd(sCmdSno, sLoc1, sLocID1, sLoc2, sLocID2, idx);

                //計算判斷要扣除幾個FOSB空間
                iFosb = iFosb - idx;
            }


            clsDB.FunClsDB();
            this.Cursor = Cursors.Default;

            clsMSG.ShowInformationMsg(clsMSG.MSG.SET_PARAMETER_OK);
        }
Пример #7
0
        private void btnExecute_Click(object sender, EventArgs e)
        {
            string sSQL = ""; DbDataReader dbRS = null;

            #region 防呆,防止輸入空白欄位
            if (txtLoc1.Text == "")
            {
                clsMSG.ShowWarningMsg("請輸入來源儲位");
                return;
            }
            if (txtLoc2.Text == "")
            {
                clsMSG.ShowWarningMsg("請輸入目的儲位");
                return;
            }
            #endregion

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

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

            #region 防呆,防止來源儲位和目的儲位的儲位狀態是否正確
            string sLocSts_S = ""; string sLocID_S = "";
            sSQL = "SELECT * FROM LOC_MST WHERE LOC = '" + txtLoc1.Text + "' ";
            if (clsDB.FunRsSql(sSQL, ref dbRS))
            {
                while (dbRS.Read())
                {
                    sLocSts_S = dbRS["LOCSTS"].ToString();
                    sLocID_S  = dbRS["LOCID"].ToString();
                }
                dbRS.Close();
            }
            if (!((sLocSts_S == "S") || (sLocSts_S == "E")))
            {
                clsMSG.ShowWarningMsg("來源儲位不是庫存儲位或空料盒儲位!!");
                clsDB.FunClsDB();
                return;
            }

            string sLocSts_E = "";
            sSQL = "SELECT * FROM LOC_MST WHERE LOC = '" + txtLoc2.Text + "' ";
            if (clsDB.FunRsSql(sSQL, ref dbRS))
            {
                while (dbRS.Read())
                {
                    sLocSts_E = dbRS["LOCSTS"].ToString();
                }
                dbRS.Close();
            }
            if (sLocSts_E != "N")
            {
                clsMSG.ShowWarningMsg("目的儲位不是空儲位");
                clsDB.FunClsDB();
                return;
            }

            int iCrn_S = clsASRS.FunGetCraneNoByLoc(txtLoc1.Text);
            int iCrn_E = clsASRS.FunGetCraneNoByLoc(txtLoc2.Text);

            if (iCrn_S != iCrn_E)
            {
                clsMSG.ShowWarningMsg("來源儲位和目的儲位不是同一座Crane");
                clsDB.FunClsDB();
                return;
            }
            #endregion

            if (sLocID_S == "")
            {
                clsMSG.ShowWarningMsg("錯誤,料盒編號是空值");
                clsDB.FunClsDB();
                return;
            }


            //下達庫對庫命令
            #region 讀取命令序號 (sCmdSno)
            string sCmdSno = "";
            sCmdSno = clsASRS.FunGetCmdSno();
            if (sCmdSno == "")
            {
                clsMSG.ShowErrMsg("系統錯誤,產生命令失敗!!"); clsDB.FunClsDB(); return;
            }
            #endregion

            bool bFlag = true;
            clsDB.FunCommitCtrl("BEGIN");

            #region 預約 出庫儲位(O)
            if (bFlag == true)
            {
                sSQL = "UPDATE LOC_MST SET LOCSTS = 'O',OLDSTS = '" + sLocSts_S + "'  WHERE LOC = '" + txtLoc1.Text + "' AND LOCSTS = '" + sLocSts_S + "' ";
                if (clsDB.FunExecSql(sSQL) == false)
                {
                    bFlag = false;
                }
            }
            #endregion

            #region 預約 入庫儲位(I)
            if (bFlag == true)
            {
                sSQL = "UPDATE LOC_MST SET LOCSTS = 'I',OLDSTS = '" + sLocSts_E + "' WHERE LOC = '" + txtLoc2.Text + "' AND LOCSTS = 'N' ";
                if (clsDB.FunExecSql(sSQL) == false)
                {
                    bFlag = false;
                }
            }
            #endregion

            cls_CmdMst aCmdMst = new cls_CmdMst();

            #region 產生命令主檔
            if (bFlag == true)
            {
                aCmdMst.FunCmdMstClear();   //Clear()

                aCmdMst.CMDSNO = sCmdSno;
                aCmdMst.SNO1   = "1";
                aCmdMst.LOC1   = txtLoc1.Text;
                aCmdMst.LOCID1 = sLocID_S;
                aCmdMst.SCAN1  = "Y"; aCmdMst.SCAN2 = "Y";

                aCmdMst.NEWLOC = txtLoc2.Text;

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

                aCmdMst.CMDMODE = clsASRS.gsCmdMode_R2R;   //5

                aCmdMst.CMDSTS = "0";
                aCmdMst.PRT    = "5";
                aCmdMst.STNNO  = "";
                //aCmdMst.IOTYP = clsASRS.gsIOTYPE_R2R;
                if (sLocSts_S == "S")
                {
                    aCmdMst.IOTYP = "51";
                }
                else if (sLocSts_S == "E")
                {
                    aCmdMst.IOTYP = "52";
                }
                aCmdMst.AVAIL      = "0";
                aCmdMst.MIXQTY     = "0";
                aCmdMst.PROGID     = clsASRS.gsIOTYPE_R2R_PID;
                aCmdMst.USERID     = clsASRS.gstrLoginUser;
                aCmdMst.TRACE      = "0";
                aCmdMst.STORAGETYP = "";
                if (aCmdMst.FunInsCmdMst() == false)
                {
                    bFlag = false;
                }
            }
            #endregion

            if (bFlag == true)
            {
                clsDB.FunCommitCtrl("COMMIT");
                clsMSG.ShowInformationMsg("庫對庫命令產生完成!!");
                SubClear();
            }
            else
            {
                clsDB.FunCommitCtrl("ROLLBACK");
                clsMSG.ShowErrMsg("庫對庫命令產生失敗!!");
            }

            clsDB.FunClsDB();

            SubClear();
        }
Пример #8
0
        private void btnExecute_Click(object sender, EventArgs e)
        {
            //string strSql = ""; DbDataReader dbRS = null;
            string sSQL = "";

            #region 防呆
            string sLoc1 = ""; string sLocID1 = ""; string sLoc2 = ""; string sLocID2 = "";

            //中科廠-站號依儲位
            //if (clsASRS.FunChkStnNo(cboStnNo.Text.Trim()) == false) { return; }

            if ((rdbSel1.Checked == false) && (rdbSel2.Checked == false))
            {
                clsMSG.ShowWarningMsg("請選擇空料盒");
                return;
            }

            if (rdbSel1.Checked == true)
            {
                if (txtLoc.Text == "")
                {
                    clsMSG.ShowWarningMsg("請輸入空料盒儲位");
                    return;
                }
                else
                {
                    sLoc1 = txtLoc.Text.Trim();
                    sLoc2 = "";
                }
            }

            if (rdbSel2.Checked == true)
            {
                if (txtLoc1.Text == "")
                {
                    clsMSG.ShowWarningMsg("請輸入空料盒儲位 (左側)");
                    return;
                }
                if (txtLoc2.Text == "")
                {
                    clsMSG.ShowWarningMsg("請輸入空料盒儲位 (右側)");
                    return;
                }
                sLoc1 = txtLoc1.Text.Trim();
                sLoc2 = txtLoc2.Text.Trim();
            }

            #endregion

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

            #region 判斷左右的儲位一定要正確
            if ((sLoc1 != "") && (sLoc2 != ""))
            {
                bool bFlagA = false;
                if (clsTool.INT(sLoc1.Substring(4, 2)) == clsTool.INT(sLoc2.Substring(4, 2)))
                {
                    if (clsTool.INT(sLoc1.Substring(2, 2)) == clsTool.INT(sLoc2.Substring(2, 2)))
                    {
                        int iLoc1_Row = clsTool.INT(sLoc1.Substring(0, 2)) % 4;
                        int iLoc2_Row = clsTool.INT(sLoc2.Substring(0, 2)) % 4;

                        if (iLoc1_Row == 3)
                        {
                            if (iLoc2_Row == 1)
                            {
                                bFlagA = true;
                            }
                        }
                        else if (iLoc1_Row == 2)
                        {
                            if (iLoc2_Row == 0)
                            {
                                bFlagA = true;
                            }
                        }
                        else
                        {
                            bFlagA = false;
                        }
                    }
                    else
                    {
                        bFlagA = false;
                    }
                }
                else
                {
                    bFlagA = false;
                }

                if (bFlagA == false)
                {
                    clsMSG.ShowWarningMsg("空料盒儲位左右儲位不符合規定");
                    clsDB.FunClsDB();
                    return;
                }
            }

            #endregion


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

            #region 取得棧板ID
            sLocID1 = clsASRS.FunGetLocID_FromLocMst(sLoc1);
            sLocID2 = clsASRS.FunGetLocID_FromLocMst(sLoc2);
            #endregion

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


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

            clsDB.FunCommitCtrl("BEGIN");

            //產生出庫命令
            bool       bFlag   = true;
            cls_CmdMst aCmdMst = new cls_CmdMst();
            aCmdMst.FunCmdMstClear();                //Clear()
            aCmdMst.CMDSNO  = sCmdSno;
            aCmdMst.CMDMODE = clsASRS.gsCmdMode_Out; //2

            aCmdMst.SNO1   = "1";
            aCmdMst.LOC1   = sLoc1;
            aCmdMst.LOCID1 = sLocID1;
            aCmdMst.SCAN1  = "Y";
            if (sLoc2 == "")
            {
                aCmdMst.SNO2   = "";
                aCmdMst.LOC2   = "";
                aCmdMst.LOCID2 = "";
                aCmdMst.SCAN2  = "Y";
            }
            else
            {
                aCmdMst.SNO2   = "2";
                aCmdMst.LOC2   = sLoc2;
                aCmdMst.LOCID2 = sLocID2;
                aCmdMst.SCAN2  = "Y";
            }
            aCmdMst.CMDSTS = "0";
            aCmdMst.PRT    = "5";

            //中科廠-站號依儲位
            //aCmdMst.STNNO = cboStnNo.Text;
            if (cboStnNo.Text == "D04")
            {
                aCmdMst.STNNO = cboStnNo.Text;
            }
            else
            {
                aCmdMst.STNNO = clsASRS.FunGetStnNoByLoc_SPIL_ZX(sLoc1);
            }


            aCmdMst.IOTYP      = clsASRS.gsIOTYPE_EmptyOut;
            aCmdMst.AVAIL      = "0";
            aCmdMst.MIXQTY     = "0";
            aCmdMst.NEWLOC     = "";
            aCmdMst.PROGID     = clsASRS.gsIOTYPE_EmptyOut_PID;
            aCmdMst.USERID     = clsASRS.gstrLoginUser;
            aCmdMst.TRACE      = "0";
            aCmdMst.STORAGETYP = "";
            if (aCmdMst.FunInsCmdMst() == false)
            {
                bFlag = false;
            }

            if (bFlag == true)
            {
                sSQL = "UPDATE LOC_MST SET LOCSTS = 'O' WHERE LOC = '" + sLoc1 + "' AND LOCSTS = 'E' ";
                if (clsDB.FunExecSql(sSQL) == false)
                {
                    bFlag = false;
                }
            }

            if (bFlag == true)
            {
                if (sLoc2 != "")
                {
                    sSQL = "UPDATE LOC_MST SET LOCSTS = 'O' WHERE LOC = '" + sLoc2 + "' AND LOCSTS = 'E' ";
                    if (clsDB.FunExecSql(sSQL) == false)
                    {
                        bFlag = false;
                    }
                }
            }

            if (bFlag == true)
            {
                clsDB.FunCommitCtrl("COMMIT");
                clsDB.FunClsDB();
                this.Cursor = Cursors.Default;
                clsMSG.ShowInformationMsg(clsMSG.MSG.Msg_Run_Finish);
                FormCls();
            }
            else
            {
                clsDB.FunCommitCtrl("ROLLBACK");
                clsMSG.ShowErrMsg(clsMSG.MSG.COMMAND_ERROR);
                clsDB.FunClsDB();
                this.Cursor = Cursors.Default;
                return;
            }
        }