Autor
|
Thema: Produktionsplan (4747 mal gelesen)
|
newplant Mitglied
Beiträge: 10 Registriert: 07.01.2008
|
erstellt am: 14. Jan. 2008 15:56 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, ich bin neu hier im Forum und möchte gleich eine Frage an die Profis stellen, da ich zu meinem Thema nicht passentes gefunden habe. Ich möchte einen Produktionsplan nach Forcast erstellen. Hier zu habe ich eine Tabelle Forcast in der die Menge der zu fertigen Typen eingetragen sind (für 12 Monate, 4 Typen) (siehe Bild forcast.gif). In einem ersten Schritt berechne ich die Gesamtmenge pro Monat und schreibe diese in die Tabelle Kundentakt (siehe Bild kundentakt.gif). Im zweiten Schritt schreibt mir die Methode MetProdpl an Hand der Forcast die einzeln zu fertigen Typen (Typenweise) in die Tabelle ProdPlan (Spalte; Typ und Menge). Bis zu diesem Schritt habe ich es noch gebracht. Nun möchte ich aber die Spalte Los füllen an Hand einer Zufallszahl. Das stelle ich mir so vor. Im ersten Monat sind 76 Teile zu fertigen (siehe Kundentakt) hier sollen dann Zufallszahlen 1 -76 in die Spalte Los eingetragen werden. Im zweiten Monat sind dann 107 teile zu fertigen hier müssen dann die zufallszahlen beginnen mit 77 - 183 was aus dem Resultiert (76 +107) und so weiter bis der letzte monat eingetragen ist. Dann soll die Tabelle sortiert werden nach der Spalte Los und zwar so Los 1 2 3 ... Ich weis nicht wie man eine Zufallszahl erstell und wie man eine Tabelle sortiert. Vielen dank für eure Hilfe. ------------------ MfG Stefan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 15. Jan. 2008 00:16 <-- editieren / zitieren -->
wenn ich Dich richtig verstanden habe, sollen die Zahlen (1.Bsp 1-76) sich nicht wiederholen, oder ? dann geht es so : is r :real; i,j :integer; do tab.initialisieren(`[2,1]..`[2,*],1.00); for i:=1 to tab.ydim loop j :=z_demp(1,tab); print i,chr(9), j; tab[2,j]:=0.0; next; end; tab hat 2 Spalten: integer,real Spalte 1 beinhaltet die Zahlen die 1 X Mal gezogen werden sollen, also 1..76. oder 77.. 183. Tabellen sortieren kannst Du ueber die Methode "Tabelle.sortieren..." ------------------ Der Simulator WSL, Bruxelles
[Diese Nachricht wurde von Simulator am 15. Jan. 2008 editiert.] |
newplant Mitglied
Beiträge: 10 Registriert: 07.01.2008
|
erstellt am: 15. Jan. 2008 08:04 <-- editieren / zitieren --> Unities abgeben:
Erstmal vielen Dank für die schnelle Antwort. Nach dem ich den Code etwas modifiziert habe, kam ich auch nicht zu dem gewünschten Ergebnis. Ich glaube da habe ich das ganze nicht richtig erklärt. Noch einversuch. Nach dem ich die Typen und Mengen in die Tabelle ProPlan geschrieben (Typenweise) habe möchte ich nach dem zufallsprinzip eine Zahl in die Spalte Los schreiben. Wie du schon festgestellt hast darf die zahl nur einmal vorkommen. Hierzu ist dabei zu beachten das das Füllen der Spalte "Los" zeilenweise erfolgen sollte da hier die Gesamtmenge pro Monat (Tabelle Kundentakt) berücksichtigt werden muß. (siehe Bild dor habe ich die Spalte manuell mal gefüllt) Beisp. 1 Monat Menge 76 Los 1-76 2 Monat Menge 107 Los 77-183 und so weiter... Anschließend möchte ich die Tabelle nach der Spalte "Los" sortieren und erhalte eine neue Reihenfolge der zu fertigen Typen. ------------------ MfG Stefan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 15. Jan. 2008 08:34 <-- editieren / zitieren -->
Zeig mal Deine Methode! ------------------ Der Simulator WSL, Bruxelles |
newplant Mitglied
Beiträge: 10 Registriert: 07.01.2008
|
erstellt am: 15. Jan. 2008 14:00 <-- editieren / zitieren --> Unities abgeben:
Dies ist der Code für die befüllung der Tabelle ProdPlan -- is local zaehler : integer; Typ : integer; aktZeile: integer; Mon : integer; do --Tabell leeren .Daten.ProdPlan.loeschen(`[1,1]..`[*,*]); -- Schleife für die Monate From Mon := 1; Until Mon > .Daten.Forcast_t.xDim Loop -- Schleife für die Typenanzahl From Typ := 1; Until Typ > .Daten.Forcast_t.yDim Loop -- Einlesen der Menge je Typ aktZeile := .Daten.ProdPlan.yDim + 1; From zaehler := 1; Until zaehler > .Daten.Forcast_t[Mon,Typ] Loop .Daten.ProdPlan["Typ",aktZeile] := num_to_str(Typ); .Daten.ProdPlan["Menge",aktZeile] := 1; aktZeile := aktZeile + 1; zaehler := zaehler +1; end; Typ := Typ + 1; end; Mon := Mon + 1; end; end; ------------------ MfG Stefan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 15. Jan. 2008 15:28 <-- editieren / zitieren -->
versuchs mal so is tab: table[integer,real]; -------neu i,j :integer; -------neu do . . . ------------- neu
tab.create; for i:=1 to .Daten.Forcast_t[Mon,Typ] loop tab[1,i]:=i; tab[2,i]:=1.0; next; ------ neu
From zaehler := 1; Until zaehler > .Daten.Forcast_t[Mon,Typ] Loop .Daten.ProdPlan["Typ",aktZeile] := num_to_str(Typ); .Daten.ProdPlan["Menge",aktZeile] := 1; j:=z_demp[1,tab]; -------neu .Daten.ProdPlan["Los",aktZeile] := j+aktZeile-1; -------neu tab[2,j]:=0.0; -------neu aktZeile := aktZeile + 1; zaehler := zaehler +1; end;
------------------ Der Simulator WSL, Bruxelles [Diese Nachricht wurde von Simulator am 15. Jan. 2008 editiert.] |
newplant Mitglied
Beiträge: 10 Registriert: 07.01.2008
|
erstellt am: 15. Jan. 2008 15:44 <-- editieren / zitieren --> Unities abgeben:
|
Ex-Mitglied
|
erstellt am: 15. Jan. 2008 15:52 <-- editieren / zitieren -->
Tausche mal die eckigen Klammern gegen runde Klammern ! ------------------ Der Simulator WSL, Bruxelles |
newplant Mitglied
Beiträge: 10 Registriert: 07.01.2008
|
erstellt am: 15. Jan. 2008 16:07 <-- editieren / zitieren --> Unities abgeben:
|
newplant Mitglied
Beiträge: 10 Registriert: 07.01.2008
|
erstellt am: 15. Jan. 2008 16:09 <-- editieren / zitieren --> Unities abgeben:
|
Ex-Mitglied
|
erstellt am: 15. Jan. 2008 16:32 <-- editieren / zitieren -->
das ist keine Fehlermeldung! Der gelbe Balken zeigt die aktuelle Debug-Zeile der Methode an und keinen Fehler. Sonst wäre die Zeile rot und der Fehler wuerde am unteren Bildrand ausgegeben ! tab ist erst nach tab.create instanziert ! Du solltest die Änderungen in Deine Methode einbauen und nicht versuchen sie einzeln zu testen. Die lokalen Variablen "mon" "Typ".. sind beispielsweise noch ohne einen Wert ! ------------------ Der Simulator WSL, Bruxelles [Diese Nachricht wurde von Simulator am 15. Jan. 2008 editiert.] |
newplant Mitglied
Beiträge: 10 Registriert: 07.01.2008
|
erstellt am: 16. Jan. 2008 08:30 <-- editieren / zitieren --> Unities abgeben:
|
Ex-Mitglied
|
erstellt am: 16. Jan. 2008 09:23 <-- editieren / zitieren -->
Code:
tab.create; for i:=1 to .Daten.Forcast_t[Mon,Typ] loop tab[1,i]:=i; tab[2,i]:=1.0; next;
gehört direkt vor die entsprechende Schleife und nicht am Programmanfang!
------------------ Der Simulator WSL, Bruxelles |
newplant Mitglied
Beiträge: 10 Registriert: 07.01.2008
|
erstellt am: 16. Jan. 2008 09:45 <-- editieren / zitieren --> Unities abgeben:
Danke für den Hinweis. Das habe ich jetzt umgesetz. Die Spalte los wird jetzt gefüllt. Es tritt nun folgendes Problem auf. Die Zahlen in der Spalte Los kommen nun mehrfach vor (siehe Bild.) Code: is local zaehler : integer; Typ : integer; aktZeile: integer; Mon : integer; tab: table[integer,real]; i,j: integer; do --Tabell leeren .Daten.ProdPlan.loeschen(`[1,1]..`[*,*]); -- Schleife für die Monate From Mon := 1; Until Mon > .Daten.Forcast_t.xDim Loop -- Schleife für die Typenanzahl From Typ := 1; Until Typ > .Daten.Forcast_t.yDim Loop tab.create; for i:= 1 to .Daten.Forcast_t[Mon,Typ] Loop tab[1,i] := i; tab[2,i] := 1.0; next; -- Einlesen der Menge je Typ aktZeile := .Daten.ProdPlan.yDim + 1; From zaehler := 1; Until zaehler > .Daten.Forcast_t[Mon,Typ] Loop .Daten.ProdPlan["Typ",aktZeile] := num_to_str(Typ); .Daten.ProdPlan["Menge",aktZeile] := 1; j := z_demp(1,tab); .Daten.ProdPlan["Los",aktZeile] := j+aktZeile-1; tab[2,j] := 0.0; aktZeile := aktZeile + 1; zaehler := zaehler +1; end; Typ := Typ + 1; end; Mon := Mon + 1; end; ProdPlan.sortieren(1,2,"auf"); end; ------------------ MfG Stefan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 16. Jan. 2008 10:48 <-- editieren / zitieren -->
was steht in .Daten.Forcast_t ? ------------------ Der Simulator WSL, Bruxelles |
newplant Mitglied
Beiträge: 10 Registriert: 07.01.2008
|
erstellt am: 16. Jan. 2008 11:09 <-- editieren / zitieren --> Unities abgeben:
In der Tabelle Forcast_t stehen die Mengen für 12 Monate je Typ (4 Typen sind es). Der Code funktioniert auch soweit das er genau so viele Zeilen in der Tabelle (ProdPlan) befüllt wie die Tabelle (Forcast_t) vorgibt. Es werden genau 1005 Zeilen befüllt, nur es kommen Zahlen mehrfach vor und somit fehlen auch andere. In der Tabelle Kundentakt habe ich die Mengen pro Monat summiert, addiert man die Spalte kommt man auf 1005. ------------------ MfG Stefan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 16. Jan. 2008 11:36 <-- editieren / zitieren -->
O.K. Versuchs mal so:
Code: is zaehler : integer; Typ : integer; aktZeile: integer; Mon : integer; tab: table[integer,real]; i,j,offset: integer; do --Tabell leeren .Daten.ProdPlan.loeschen(`[1,1]..`[*,*]); -- Schleife für die Monate From Mon := 1; Until Mon > .Daten.Forcast_t.xDim Loop tab.create; for i:= 1 to .Daten.Kundentakt["Gesamtmenge",Mon] Loop tab[1,i] := i; tab[2,i] := 1.0; next; -- Schleife für die Typenanzahl From Typ := 1; Until Typ > .Daten.Forcast_t.yDim Loop -- Einlesen der Menge je Typ aktZeile := .Daten.ProdPlan.yDim + 1; From zaehler := 1; Until zaehler > .Daten.Forcast_t[Mon,Typ] Loop .Daten.ProdPlan["Typ",aktZeile] := num_to_str(Typ); .Daten.ProdPlan["Menge",aktZeile] := 1; j := z_demp(1,tab); .Daten.ProdPlan["Los",aktZeile] := offset+j; tab[2,j] := 0.0; aktZeile := aktZeile + 1; zaehler := zaehler +1; end; Typ := Typ + 1; end; offset:= offset+.Daten.Kundentakt["Gesamtmenge",Mon]; Mon := Mon + 1; end; .ProdPlan.sortieren(1,2,"auf"); end;
------------------ Der Simulator WSL, Bruxelles |
newplant Mitglied
Beiträge: 10 Registriert: 07.01.2008
|
erstellt am: 16. Jan. 2008 13:10 <-- editieren / zitieren --> Unities abgeben:
Vielen Dank für die schnelle Unterstützung. Der Code funktioniert prima. Jedoch hätte ich eine kleine Bitte. Ein paar Erklärungen zum Code um ihn besser zu verstehen. 1. tab: table[integer,real]; --> variable , tempuräre Tabelle? 2. tab.create; --> erzeugt die tempuräre Tabelle? for i:= 1 to .Daten.Kundentakt["Gesamtmenge",Mon] Loop tab[1,i] := i; --> Spalte für die Zahlen Bsp. 1 Monat, Menge 76; 1-76 tab[2,i] := 1.0; --> Haäufigkeit 1mal???? next; 3. j := z_demp(1,tab); --> ???? .Daten.ProdPlan["Los",aktZeile] := offset+j; --> offset ???? tab[2,j] := 0.0; --> ???? 4. offset:= offset+.Daten.Kundentakt["Gesamtmenge",Mon]; --> Versatz zum nächsten monat? Bsp. 1. monat 76 ??
------------------ MfG Stefan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 16. Jan. 2008 15:13 <-- editieren / zitieren -->
1. tab: table[integer,real]; --> lokale Tabelle?, Ja 2. tab.create; --> erzeugt die temporäre Tabelle?, s. Hilfe for i:= 1 to .Daten.Kundentakt["Gesamtmenge",Mon] Loop tab[1,i] := i; --> Spalte für die Zahlen Bsp. 1 Monat, Menge 76; 1-76, Ja tab[2,i] := 1.0; --> gleiche Häufigkeit(z.b. 1.0) fuer alle Werte (1-76) next; 3. j := z_demp(1,tab); --> s. Hilfe .Daten.ProdPlan["Los",aktZeile] := offset+j; --> S. 4 tab[2,j] := 0.0; --> Häufigkeit= 0 damit diese Zahl nicht nochmal gezogen wird! 4. offset:= offset+.Daten.Kundentakt["Gesamtmenge",Mon]; --> Versatz zum nächsten monat? Bsp. 1. monat= 0, 2. monat = 76 ------------------ Der Simulator WSL, Bruxelles |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|