private void ImportLoadCarrierToStorageLocation_Execute(object sender, SimpleActionExecuteEventArgs e) { IList listSlocation = View.ObjectSpace.GetObjects(typeof(StorageLocation)); SplashScreenManager.ShowForm(typeof(Splash)); SplashScreenManager.Default.SendCommand(Splash.SplashScreenCommand.SetProcessText, "Tárhelyek feltöltése üres ládákkal"); int maxSize = 100; int counter = listSlocation.Count; for (int i = 0; i < counter; i++) { int szazalek = Convert.ToInt32((i + 1) / counter * 100); StorageLocation sloc = (StorageLocation)listSlocation[i]; CriteriaOperator cop = new BinaryOperator("Oid", i + 1); LoadCarrier lc = (LoadCarrier)View.ObjectSpace.FindObject(typeof(LoadCarrier), cop); sloc.StatusCode = 1; sloc.LoadCarrier = lc; sloc.LcIsEmpty = true; SplashScreenManager.Default.SendCommand(Splash.SplashScreenCommand.SetProgress, Math.Min(maxSize, szazalek)); } ObjectSpace.CommitChanges(); SplashScreenManager.CloseForm(false); MessageBox.Show("Táblázatok importálása megtörtént!"); }
public void SendLoadCarrierBack(int ctrH, int ctrD, int lc, int IocpId, int weight) { IObjectSpace os = null; try { os = GetNewObjectSpace(); LoadCarrier lca = os.FindObject <LoadCarrier>(new BinaryOperator("Oid", lc)); StorageLocation targetLocation = FindEmptyLocation(lca); if (targetLocation != null) { CreateTransportOrder(1, ctrH, ctrD, lca.Oid, IocpId, weight, null, targetLocation); } else { throw new Exception("Nem talált tárolóhelyet"); } } catch { log.Error("ObjectSpace not found"); } finally { DisposeObjectSpace(os); } }
public void CreateTransportOrder(int type, int ctrH, int ctrD, LoadCarrier lc, int IocpId, int weight, StorageLocation sourceLocation, StorageLocation targetLocation) { //Csinálunk egy sessiont Session workSession = new Session(); //Megkeressük az erőforrásokat CommonTrHeader ctrHeader = workSession.FindObject <CommonTrHeader>(new BinaryOperator("Oid", ctrH)); CommonTrDetail cdetail = workSession.FindObject <CommonTrDetail>(new BinaryOperator("Oid", ctrD)); Iocp iocp = workSession.FindObject <Iocp>(new BinaryOperator("Oid", IocpId)); //Osztumk egy új sorszámot ushort UjTransportID = GetNewSorszam("TPO"); //Létrehozzuk az új transzportot az adatbázisban TransportOrder transportOrder = new TransportOrder(workSession); transportOrder.Iocp = iocp; transportOrder.TpId = UjTransportID; transportOrder.LC = lc; transportOrder.CommonTrHeader = ctrHeader; transportOrder.CommonDetail = cdetail; transportOrder.Type = type; transportOrder.TargetTag = iocp.TargetTag; transportOrder.SourceLocation = sourceLocation; transportOrder.TargetLocation = targetLocation; transportOrder.Weight = weight; transportOrder.Save(); // Hozzáadjuk a megfelelő iocp zsák queue-hoz this.opcClient.addJob(transportOrder); }
public StorageLocation FindEmptyLocation(LoadCarrier loadCarrier) { lock (findLocationLock) { /* * Üres tárolóhelyet úgy kell megtalálni, hogy meg kell próbálni azokon a folyosókon ahol a termék tárolható egyenlő mértékben elosztani. * Ez azt jelenti, hogy meg kell nézni hogy eddig melyik folyosón mennyit tároltunk és növekvő sorrendben megpróbálni kiszolgálni. * A kiválasztást a láda mérete és a termék ABC besorolása is befolyásolja. * Üres láda beküldésénél ezeket csak részben kell figyelembe venni. */ StorageLocation sl = null; bool talalt = false; List <int> meretek = null; List <Aisle> folyosok = null; List <string> abcBesorolasok = null; if (loadCarrier.Stocks.Count == 0) { // Folyosók default listája, inicialitzáláskor feltöltődik meretek = GetStorageHeightListByLc(loadCarrier.LcType.Height); folyosok = aisleList; abcBesorolasok = abcTypeList; } else { //Ez azért kell, mert ha a ládában több termék van, akkor is csak 1 termék adataiból indulunk ki, mégpedig a legelső termék adataiból for (int i = 0; i < 1; i++) { Product pr = loadCarrier.Stocks[i].Product; meretek = GetStorageHeightListByLc(loadCarrier.LcType.Height); folyosok = GetProductAisleByStock(pr); abcBesorolasok = GetAbcListByProduct(pr.AbcClass.Code); } } for (int i = 0; i < meretek.Count || !talalt; i++) { for (int j = 0; j < folyosok.Count || !talalt; j++) { for (int k = 0; k < abcBesorolasok.Count || !talalt; k++) { sl = AdottTarolohelykeresesFolyoson(meretek[i], folyosok[j], abcBesorolasok[k], 0); if (sl != null) { ChangeLocationStatus(sl, 3); talalt = true; } } } } return(sl); } }
private void LogX_TarhelyGeneralas_Execute(object sender, SimpleActionExecuteEventArgs e) { numberOfAisle = 2; numberOfColumn = 50; numberOFRow = 10; abcType = View.ObjectSpace.FindObject <AbcType>(new BinaryOperator("Code", "A")); LcT = View.ObjectSpace.FindObject <LoadCarrierType>(new BinaryOperator("Name", "MAGAS")); for (int i = 0; i < numberOfAisle; i++) { CriteriaOperator criteria = CriteriaOperator.Parse("Oid = ?", i + 1); Aisle aisle = View.ObjectSpace.FindObject <Aisle>(criteria); for (int j = 0; j < numberOfLine; j++) { tomb++; for (int k = 0; k < numberOfColumn; k++) { for (int l = 0; l < numberOFRow; l++) { //Láda létrehozása loadCarriers = View.ObjectSpace.CreateObject <LoadCarrier>(); barCode++; loadCarriers.BarCode = barCode; loadCarriers.RFID1 = Convert.ToString(1000 + barCode); loadCarriers.RFID2 = Convert.ToString(2000 + barCode); loadCarriers.LcType = LcT; //Tárolóhely létrehozása storageLocation = View.ObjectSpace.CreateObject <StorageLocation>(); storageLocation.Aisle = aisle; storageLocation.Block = tomb; storageLocation.Column = Convert.ToUInt16(k + 1); storageLocation.Row = Convert.ToByte(l + 1); storageLocation.Name = storageLocation.Aisle.Name + "_" + storageLocation.Block + "_" + storageLocation.Column + "_" + storageLocation.Row; storageLocation.AbcClass = abcType;; storageLocation.LHU1X = 10; storageLocation.LHU1Y = 10; storageLocation.LHU2X = 10; storageLocation.LHU2Y = 10; storageLocation.LoadCarrier = loadCarriers; storageLocation.LcIsEmpty = true; } } } } //View.ObjectSpace.CommitChanges(); MessageBox.Show("Finished!" + ciklus.ToString()); }
public void SendLoadCarrierBack(int ctrH, int ctrD, int lc, int IocpId, int weight) { Session workSession = new Session(); LoadCarrier lca = workSession.FindObject <LoadCarrier>(new BinaryOperator("Oid", lc)); StorageLocation targetLocation = FindEmptyLocation(lca); if (targetLocation != null) { CreateTransportOrder(1, ctrH, ctrD, lca, IocpId, weight, null, targetLocation); } else { throw new Exception("Nem talált tárolóhelyet"); } }
private void LogX_LcIsHere(string newLcRfid1) { LoadCarrier lc = null; CriteriaOperator c = new BinaryOperator("RFID1", newLcRfid1); lc = View.ObjectSpace.FindObject <LoadCarrier>(c); //if (lc != null) //{ // TransportOrder tpo = (TransportOrder)tpoList[0]; // iocp.ActiveLc = lc; // iocp.ActiveCtrD = tpo.CommonDetail; // iocp.ActiveProduct = tpo.CommonDetail.Product; // StorageLocation sl = tpo.SourceLocation; // CriteriaOperator copQtyE = new GroupOperator(GroupOperatorType.And, new BinaryOperator("In", true), new BinaryOperator("Product", iocp.ActiveProduct)); // QtyExchange qtye = View.ObjectSpace.FindObject<QtyExchange>(copQtyE); // iocp.Qexchange = qtye; // iocp.StoredUnit = qtye.SourceQty; // double recentQty = iocp.ActiveCtrD.GetRecentQuantity(); // iocp.StoredQty = Math.Min(qtye.SourceQty * qtye.TargetQty, recentQty); // LokacioFelszabadítas(sl); // iocp.LcCallingOK = true; // //myOpcClient.DeleteTransport(ObjectSpace,tpo.TpId); // DeleteTransport(tpo.Oid); // foreach (Stock stock in iocp.ActiveLc.Stocks) // { // stock.StorageLocation = null; // } //} //else //{ // MessageBox.Show("Nincs több láda!"); //} //View.ObjectSpace.CommitChanges(); //View.Refresh(); }
private void ResetStorageLocation() { //CriteriaOperator cSto = new BinaryOperator("Aisle", 1); IList listSlocation = View.ObjectSpace.GetObjects(typeof(StorageLocation)); int counter = listSlocation.Count; for (int i = 0; i < counter; i++) { StorageLocation sloc = (StorageLocation)listSlocation[i]; CriteriaOperator cop = new BinaryOperator("Oid", sloc.Oid); LoadCarrier lc = (LoadCarrier)View.ObjectSpace.FindObject(typeof(LoadCarrier), cop); sloc.StatusCode = 1; sloc.LoadCarrier = lc; sloc.LcIsEmpty = true; } //View.ObjectSpace.CommitChanges(); }
private void Import_LoadCarrier() { int rekord = 0; using (var fileStream = new FileStream(@"C:\Users\Halász Alexandra\OneDrive\LogX\halaszalexandra\LOGX\Imports\LogX_LoadCarrier.csv", FileMode.Open, FileAccess.Read)) { StreamReader reader = new StreamReader(fileStream); while (!reader.EndOfStream) { string line = reader.ReadLine(); var values = line.Split(';'); if (rekord > 0) { CriteriaOperator criteriaLctType = new BinaryOperator("Types", values[1]); LoadCarrierType lct = (LoadCarrierType)View.ObjectSpace.FindObject(typeof(LoadCarrierType), criteriaLctType, true); if (values[0] != "") { LoadCarrier lc = View.ObjectSpace.CreateObject <LoadCarrier>(); lc.BarCode = Convert.ToDecimal(values[0]); lc.LcType = lct; lc.RFID1 = Convert.ToString(values[2]); lc.RFID2 = Convert.ToString(values[3]); lc.StatusCode = 0; lc.isEmpty = true; lc.Save(); } } rekord++; } View.ObjectSpace.CommitChanges(); } }
// A készlet napló létrehozása még nem mozgratja a termék kélszletét, csak azt jelzi, hogy a ládába bekerült vagy kikerült a termék // A termék készlet könyvelése a transzport sor státuszváltozása alapján történik private void CreateStockHistory(int direction, int LoadCarrierId, int ProductId, int ctrDId, double quantity, string section, int type) { Session workSession = new Session(); //Láda LoadCarrier Lc = workSession.FindObject <LoadCarrier>(new BinaryOperator("Oid", LoadCarrierId)); //Termék Product product = workSession.FindObject <Product>(new BinaryOperator("Oid", ProductId)); //Tételsor CommonTrDetail ctrD = workSession.FindObject <CommonTrDetail>(new BinaryOperator("Oid", ctrDId)); StockHistory stockhistory = new StockHistory(workSession); stockhistory.Product = product; stockhistory.LC = Lc; stockhistory.Section = section; stockhistory.Quantity = quantity; stockhistory.CommonDetail = ctrD; stockhistory.Time = DateTime.Now; stockhistory.Type = type; stockhistory.Direction = direction; stockhistory.Processed = false; stockhistory.Booked = false; stockhistory.Save(); }
// Bejővő paraméterek (Ügylet száma, Komissiózó pont azonosítója, Komissiózó pont plc azonosítója) public void CallLoadCarriers(int ctrH, string commonType, int iocp, int weight, int lcTypeHeight) { // Megkeressük a bizonylat tételsorait Session session = new Session(); XPQuery <CommonTrDetail> details = session.Query <CommonTrDetail>(); IQueryable <CommonTrDetail> list = (from c in details where (c.CommonTrHeader.Oid == ctrH) select c); //Végigmegyünk minden tételsoron foreach (CommonTrDetail ctrD in list) { //Ládákat keresünk az ügylettípus szerint: //BETÁROLÁS //1 Betárolásnál annyi ÜRES!!! ládát kell hívnunk amennyit előkalkuláltunk if (commonType == "BETAR") { for (int i = 0; i < ctrD.CalcLcNumber; i++) { // Keresünk egy üres ládát lehetőleg onnan ahová vissza is akarjuk küldeni és le is foglaljuk az erőforrást. StorageLocation sourceLocation = FindEmptyLoadcarrier(ctrD.Product, lcTypeHeight); if (sourceLocation != null) { CreateTransportOrder(2, ctrH, ctrD.Oid, sourceLocation.LoadCarrier, iocp, weight, sourceLocation, null); } else { throw new Exception("Hiba - Nem talált kihívható ládát!"); } } } //KITÁROLÁS ÉS KOMISSIÓ // 2 Kitárolásnál és Komissiónál Allokálnunk kell és FIFO szerint kihívni a terméket tartalmazó ládákat if (commonType == "KITAR" || commonType == "KOMISSIO") { double szuksegesMennyiseg = ctrD.Quantity - ctrD.PerformedQty; double maradekMennyiseg = szuksegesMennyiseg; double allokaltMennyiseg = 0; if (szuksegesMennyiseg > 0) { foreach (Stock stock in ctrD.Product.Stocks) { if (stock.StorageLocation != null && stock.StorageLocation.StatusCode == 1) { allokaltMennyiseg = Math.Min(stock.NormalQty, maradekMennyiseg); if (allokaltMennyiseg > 0) { LoadCarrier lc = stock.LC; stock.StorageLocation.StatusCode = 2; maradekMennyiseg -= allokaltMennyiseg; CreateTransportOrder(2, ctrH, ctrD.Oid, lc, iocp, weight, stock.StorageLocation, null); ctrD.CalcLcNumber++; } } } } } //LELTÁR // 2 Kitárolásnál és Komissiónál Allokálnunk kell és FIFO szerint kihívni a terméket tartalmazó ládákat if (commonType == "LELTAR") { foreach (Stock stock in ctrD.Product.Stocks) { if (stock.StorageLocation != null && stock.StorageLocation.StatusCode == 1) { ChangeLocationStatus(stock.StorageLocation, 3); CreateTransportOrder(2, ctrH, ctrD.Oid, stock.LC, iocp, weight, stock.StorageLocation, null); ctrD.CalcLcNumber++; } } } } }
// Bejővő paraméterek (Ügylet száma, Komissiózó pont azonosítója, Komissiózó pont plc azonosítója) public void CallLoadCarriers(int ctrH, string commonType, int iocp, int weight) { IObjectSpace os = null; try { os = GetNewObjectSpace(); //Megkeressük a bizonylat tételsorait IQueryable <CommonTrDetail> details = os.GetObjectsQuery <CommonTrDetail>(); var list = (from c in details where (c.CommonTrHeader.Oid == ctrH) orderby c.ItemNum ascending select c); //Végigmegyünk minden tételsoron és ládákat keresünk az ügylettípus szerint: foreach (CommonTrDetail ctrD in list) { //BETÁROLÁS - annyi ÜRES!!! ládát kell hívnunk amennyit előkalkuláltunk if (commonType == "BETAR") { for (int i = 0; i < ctrD.CalcLcNumber; i++) { // Keresünk egy üres ládát lehetőleg onnan ahová vissza is akarjuk küldeni és le is foglaljuk az erőforrást. StorageLocation sourceLocation = FindEmptyLoadcarrier(ctrD.Product); if (sourceLocation != null) { CreateTransportOrder(2, ctrH, ctrD.Oid, sourceLocation.LoadCarrier.Oid, iocp, weight, sourceLocation, null); } else { throw new Exception("Hiba - Nem talált kihívható ládát!"); } } } //KITÁROLÁS ÉS KOMISSIÓ - Allokálnunk kell és FIFO szerint kihívni a terméket tartalmazó ládákat if (commonType == "KITAR" || commonType == "KOMISSIO") { double szuksegesMennyiseg = ctrD.Quantity - ctrD.PerformedQty; double maradekMennyiseg = szuksegesMennyiseg; double allokaltMennyiseg = 0; if (szuksegesMennyiseg > 0) { foreach (Stock stock in ctrD.Product.Stocks) { if (stock.StorageLocation != null && stock.StorageLocation.StatusCode == 1) { allokaltMennyiseg = Math.Min(stock.NormalQty, maradekMennyiseg); if (allokaltMennyiseg > 0) { LoadCarrier lc = stock.LC; stock.StorageLocation.StatusCode = 2; maradekMennyiseg -= allokaltMennyiseg; CreateTransportOrder(2, ctrH, ctrD.Oid, lc.Oid, iocp, weight, stock.StorageLocation, null); ctrD.CalcLcNumber++; } } } } } //LELTÁR minden ládát kihozunk amia terméket tartalmazza if (commonType == "LELTAR") { foreach (Stock stock in ctrD.Product.Stocks) { if (stock.StorageLocation != null && stock.StorageLocation.StatusCode == 1) { ChangeLocationStatus(stock.StorageLocation, 3); CreateTransportOrder(2, ctrH, ctrD.Oid, stock.LC.Oid, iocp, weight, stock.StorageLocation, null); ctrD.CalcLcNumber++; } } } } } catch { log.Error("hiba"); } finally { DisposeObjectSpace(os); } }