Autor
|
Thema: Tabelle, abfrage (7770 mal gelesen)
|
SnopyPlant Mitglied
Beiträge: 21 Registriert: 03.11.2011 Plant Simulation Student Version 10.0.2
|
erstellt am: 21. Dez. 2011 21:56 <-- editieren / zitieren --> Unities abgeben:
Hallo Planterteam, in meinem Lagermodell wird in konstanten Zeitabstände eine zufällige Anzahl von BEs entnommen. Jeder Auslagerungsvorgang soll in einer Tabelle (Zeitpunkt,Menge,Auslagerungsbestätigung (Ja bzw. Nein) dokumentiert werden: Code: Tab_LagerAusgang.schreibeZeile(1,Tab_LagerAusgang.yDim+1,Ereignisverwalter.Zeit,Ausgelagertes_Los,"Ja");
bzw.
Code: Tab_LagerAusgang.schreibeZeile(1,Tab_LagerAusgang.yDim+1,Ereignisverwalter.Zeit,Ausgelagertes_Los,"Nein");
Das "Ja" entspricht einer erfolgreichen Auslagerung und das "Nein" steht für den Fall, wenn nicht genügend BEs im Lager vorhanden sind um die zufällig erzeugte Anzahl von BEs auszulagern. Vor jeder Auslagerung soll in der Tabelle nachgeschaut werden, ob noch nicht ausgelagerte Lose vorhanden sind (Nein´s): Code: Tab_LagerAusgang.ZeigerY:=Tab_LagerAusgang.findeAttr("Nachfragebestätigung","Nein");
Falls diese so ist, soll natürlich erst dieses Los ausgelagert werden, bevor ein weiteres zufälliges Los erzeugt wird: Code: altes_Los:=Tab_Lagerausgang.setzeDatenTyp({2,Tab_LagerAusgang.ZeigerY});
Nachdem das "wartende" Los ausgelagert wurde, sollte dies auch am besten dokumentiert werden. Um hierbei die Übersicht nicht zu verlieren habe ich an eine Art "Auftragnummer" gedacht, welche fortlaufend vor der Spalte des Auslagerungszeitpunktes mitgeschrieben wird. Nr Zeitpkt Menge Bestätigung (z.B. Zeile 10: 15 10:10 10 Nein 11: 15 11:12 10 Ja Die Idee mit der Auftragsnummer ist mir eben erst gekommen und ist deshalb noch nicht im Screenshot (Anhang) zu sehen. Ist es sinnvoll oder wie kann ich die Tabellen-Abfrage und Dokumentation am besten realisieren? Für jegliche Anregungen und Tipps bin ich wie so oft sehr dankbar! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bon Simul Mitglied Simulant
Beiträge: 1250 Registriert: 08.08.2011 Plant Simulation 10.1, 11 ff Professional
|
erstellt am: 22. Dez. 2011 11:41 <-- editieren / zitieren --> Unities abgeben: Nur für SnopyPlant
Das Suchen in der Tabelle funktioniert so nicht. Mit findeAttr können Sie benutzerdefinierte Attribute suchen. Wenn Sie in der Tabelle den Wert "Nein" suchen wollen, müssen Sie zuerst den Zeiger auf die Anfangsposition setzen (setzeZeiger) und dann den Wert suchen (Methode finden). Das würde dann wie folgt aussehen:
Code:
Tab_LagerAusgang.setzeZeiger(3,1); gefunden:=Tab_LagerAusgang.finden({3,1}..{3,*},"Nein"); if gefunden then --etwas gefunden altes_Los:=Tab_Lagerausgang.setzeDatenTyp({2,Tab_LagerAusgang.ZeigerY}); end;
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
SnopyPlant Mitglied
Beiträge: 21 Registriert: 03.11.2011 Plant Simulation Student Version 10.0.2
|
erstellt am: 22. Dez. 2011 14:53 <-- editieren / zitieren --> Unities abgeben:
Das Durchsuchen durch die Tabelle funktioniert schon mal. Nur der Code: Code: altes_Los:=Tab_Lagerausgang.setzeDatenTyp({2,Tab_LagerAusgang.ZeigerY});
funkioniert noch nicht so ganz. So wie der Code steht erwartet er bei der Simulation noch einen weiteren Parameter (den Datentyp, den ich zuweisen möchte, siehe Hilfe). Wenn der Zeile beispielsweise ein "integer" zuweise und altes_Los ebenfalls ein integer ist, bekomme ich wiederum eine Fehlermeldung "linke und rechte Seite sind nicht kompatibel". Ist "setzeDatenTyp" in meinem Fall überhaupt die richtige Funktion? (Wert(2,Tab_LagerAusgang.ZeigerY) aus einer Tabelle lesen und einer anderen Variable (altes_Los) übergeben) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bon Simul Mitglied Simulant
Beiträge: 1250 Registriert: 08.08.2011 Plant Simulation 10.1, 11 ff Professional
|
erstellt am: 22. Dez. 2011 18:37 <-- editieren / zitieren --> Unities abgeben: Nur für SnopyPlant
So kompliziert ist das nicht, Sie können Tab_LagerAusgang.ZeigerY als Zeilenindex verwenden. Zugriff auf Daten einer Tabellenzelle erhalten Sie mit [x,y]. Müsste dann so aussehen:
Code:
altes_Los:=Tab_Lagerausgang[2,Tab_LagerAusgang.ZeigerY];
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
SnopyPlant Mitglied
Beiträge: 21 Registriert: 03.11.2011 Plant Simulation Student Version 10.0.2
|
erstellt am: 23. Dez. 2011 10:17 <-- editieren / zitieren --> Unities abgeben:
Es funktioniert! Gibt es die Möglichkeit, dass der Zeiger immer auf dem letzt gefunden "Nein" seine Suche nach unbedienten Losen fortsetzt? (Probleme siehe Screenshot) Ansonsten müsste ich die "Nein"´s mit einem "Ja" überschreiben (finde ich nicht so schön). Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bon Simul Mitglied Simulant
Beiträge: 1250 Registriert: 08.08.2011 Plant Simulation 10.1, 11 ff Professional
|
erstellt am: 28. Dez. 2011 21:47 <-- editieren / zitieren --> Unities abgeben: Nur für SnopyPlant
Der Zeiger bleibt nach einem Suchvorgang an der "Trefferposition" stehen, Sie können danach einfach noch einmal die Methode finden aufrufen, bis nichts mehr gefunden wurde (Rückgabewert false). Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
SnopyPlant Mitglied
Beiträge: 21 Registriert: 03.11.2011 Plant Simulation Student Version 10.0.2
|
erstellt am: 29. Dez. 2011 13:47 <-- editieren / zitieren --> Unities abgeben:
Habe es nun doch anders gelöst und zwar indem ich mir immer den letzten Datensatz in der Tabelle angucke und das entsprechende Ereignis ausgeführt wird. Diese Idee ist zwar wohl etwas Rechenaufwändig und nicht so elegant, aber sie funktioniert. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
SnopyPlant Mitglied
Beiträge: 21 Registriert: 03.11.2011 Plant Simulation Student Version 10.0.2
|
erstellt am: 02. Jan. 2012 15:11 <-- editieren / zitieren --> Unities abgeben:
|