11. Dezember 2007 14:27
//Fertigungsgaenge erzeugen mithilfe des Arbeitsplans, der in Produktstammdaten hinterlegt
// Rec49: Produktdaten (liefert Arbeitsplan)
// Rec61: Arbeitsplan (liefert Arbeitsplan)
// Rec : Fertigungsauftraege (62)
// Rec63: Arbeitsgaenge zum Auftrag (zu erzeugen)
END_LETZTER_AG := FruehestPlanTermin - 1; // Endpunkt des letzten Vorgaenger-Arbeitsganges
// gemaess Arbeitsplan
// AG_END_LAST // Endpunkt Arbeitsgang auf Betriebsmittel
// 1. Pruefe, ob Auftrag noch nicht eingeplant
IF Eingeplant THEN ERROR ('Auftrag schon eingeplant!')
ELSE
BEGIN
// Arbeitsgaenge einzeln einlasten
rec63.SETRANGE(FA_Nr,Rec.FA_Nr);
IF NOT rec63.FIND('-') THEN ERROR('keine Arbeitsgaenge einzulasten (63)');
// Evtl. vorhandene Einplanung des FA loeschen
rec64.SETRANGE(FA_Nr,Rec.FA_Nr);
rec64.DELETEALL;
rec64.SETRANGE(FA_Nr);
// Schleife ueber (63) einzulastende Arbeitsgaenge
REPEAT
//
// HIER QUELLTEXT FUER DIE EINLASTUNG EINFUEGEN !!!
//
rec64.RESET;
rec61.RESET;
//Betriebsmittel in BM_Belegnung filtern
rec64.SETRANGE(BM_Nr,rec63.BM_Nr);
rec64.SETCURRENTKEY(Start);
//Dauer im Arbeitsplan filtern
rec61.SETFILTER(AP_Nr,rec63.AP_Nr);
rec61.SETFILTER(AG_Nr,rec63.AG_Nr);
rec61.FIND('-');
// Variable geleert
AG_END_LAST := 0D;
AG_START_NEXT := 0D;
// Datensätze in Betriebsmittelbelegung vorhanden?
IF rec64.FIND('-') THEN
BEGIN
// Lücke in Betriebsmittelbelegung suchen
REPEAT
AG_END_LAST := rec64.Ende;
// Gibt es einen nächsten Datensatz?
IF rec64.NEXT > 0 THEN
BEGIN
AG_START_NEXT := rec64.Start ;
// Berechnung
Dauer := AG_START_NEXT - (AG_END_LAST);
END
// Abbruchbedingung, wenn keine DS vorhanden sind
ELSE
BEGIN
Dauer := -1;
END
UNTIL (Dauer >= rec61.AG_Dauer) OR (Dauer = -1);
// Wenn -1, dann ist das Ende der Tabelle erreicht
IF Dauer = -1 THEN
BEGIN
AG_START_NEXT := AG_END_LAST+1;
// AG_END_LAST := DMY2DATE( (DATE2DMY(AG_START_NEXT,1)+(rec61.AG_Dauer)),(DATE2DMY(AG_START_NEXT,2)),
// DATE2DMY(AG_START_NEXT,3));
AG_END_LAST := AG_START_NEXT+rec61.AG_Dauer;
END
// Lücke in der Tabelle gefunden
ELSE
BEGIN
AG_START_NEXT := AG_END_LAST+1;
//AG_END_LAST := DMY2DATE( (DATE2DMY(AG_START_NEXT,1)+(rec61.AG_Dauer)),(DATE2DMY(AG_START_NEXT,2)),
//DATE2DMY(AG_START_NEXT,3));
AG_END_LAST := AG_START_NEXT+rec61.AG_Dauer;
END
// Tabelle leer, Einfach einfügen
END
ELSE
BEGIN
AG_START_NEXT := END_LETZTER_AG+1;
//AG_END_LAST := DMY2DATE( (DATE2DMY(AG_START_NEXT,1)+(rec61.AG_Dauer)),(DATE2DMY(AG_START_NEXT,2)),
//DATE2DMY(AG_START_NEXT,3));
AG_END_LAST := AG_START_NEXT+rec61.AG_Dauer;
END;
rec64.BM_Nr := rec63.BM_Nr;
rec64.FA_Nr := FA_Nr;
rec64.AG_Nr := rec63.AG_Nr;
// START und ENDE hier eintragen !!!
rec64.Start := AG_START_NEXT;
rec64.Ende := AG_END_LAST;
rec64.INSERT;
rec63.Start := rec64.Start;
rec63.Ende := rec64.Ende;
rec63.MODIFY;
//merken, wann letzter arbeitsgang ende ist
END_LETZTER_AG := rec64.Ende;
UNTIL rec63.NEXT <= 0; // Schleife ueber Arbeitsgaenge endet
Rec.Eingeplant := TRUE;
MODIFY;
END;
rec49.RESET;
rec61.RESET;
rec63.RESET;
rec64.RESET;
11. Dezember 2007 14:37
//Fertigungsgaenge erzeugen mithilfe des Arbeitsplans, der in Produktstammdaten hinterlegt
// Rec49: Produktdaten (liefert Arbeitsplan)
// Rec61: Arbeitsplan (liefert Arbeitsplan)
// Rec : Fertigungsauftraege (62)
// Rec63: Arbeitsgaenge zum Auftrag (zu erzeugen)
END_LETZTER_AG := FruehestPlanTermin - 1; // Endpunkt des letzten Vorgaenger-Arbeitsganges
// gemaess Arbeitsplan
// AG_END_LAST // Endpunkt Arbeitsgang auf Betriebsmittel
// 1. Pruefe, ob Auftrag noch nicht eingeplant
IF Eingeplant THEN
ERROR('Auftrag schon eingeplant!');
// Arbeitsgaenge einzeln einlasten
rec63.SETRANGE(FA_Nr,Rec.FA_Nr);
IF NOT rec63.FINDSET THEN
ERROR('keine Arbeitsgaenge einzulasten (63)');
// Evtl. vorhandene Einplanung des FA loeschen
rec64.SETRANGE(FA_Nr,Rec.FA_Nr);
rec64.DELETEALL;
rec64.SETRANGE(FA_Nr);
// Schleife ueber (63) einzulastende Arbeitsgaenge
REPEAT
//
// HIER QUELLTEXT FUER DIE EINLASTUNG EINFUEGEN !!!
//
rec64.RESET;
rec61.RESET;
//Betriebsmittel in BM_Belegnung filtern
rec64.SETRANGE(BM_Nr,rec63.BM_Nr);
rec64.SETCURRENTKEY(Start);
//Dauer im Arbeitsplan filtern
rec61.SETFILTER(AP_Nr,rec63.AP_Nr);
rec61.SETFILTER(AG_Nr,rec63.AG_Nr);
rec61.FINDFIRST;
// Variable geleert
AG_END_LAST := 0D;
AG_START_NEXT := 0D;
// Datensätze in Betriebsmittelbelegung vorhanden?
IF rec64.FINDSET(FALSE) THEN BEGIN
// Lücke in Betriebsmittelbelegung suchen
REPEAT
AG_END_LAST := rec64.Ende;
// Gibt es einen nächsten Datensatz?
IF rec64.NEXT > 0 THEN BEGIN
AG_START_NEXT := rec64.Start ;
// Berechnung
Dauer := AG_START_NEXT - (AG_END_LAST);
END ELSE BEGIN
// Abbruchbedingung, wenn keine DS vorhanden sind
Dauer := -1;
END;
UNTIL (Dauer >= rec61.AG_Dauer) OR (Dauer = -1);
// Wenn -1, dann ist das Ende der Tabelle erreicht
IF Dauer = -1 THEN BEGIN
AG_START_NEXT := AG_END_LAST+1;
// AG_END_LAST := DMY2DATE( (DATE2DMY(AG_START_NEXT,1)+(rec61.AG_Dauer)),(DATE2DMY(AG_START_NEXT,2)),
// DATE2DMY(AG_START_NEXT,3));
AG_END_LAST := AG_START_NEXT+rec61.AG_Dauer;
END ELSE BEGIN
// Lücke in der Tabelle gefunden
AG_START_NEXT := AG_END_LAST+1;
//AG_END_LAST := DMY2DATE( (DATE2DMY(AG_START_NEXT,1)+(rec61.AG_Dauer)),(DATE2DMY(AG_START_NEXT,2)),
//DATE2DMY(AG_START_NEXT,3));
AG_END_LAST := AG_START_NEXT+rec61.AG_Dauer;
END;
// Tabelle leer, Einfach einfügen
END ELSE BEGIN
AG_START_NEXT := END_LETZTER_AG+1;
//AG_END_LAST := DMY2DATE( (DATE2DMY(AG_START_NEXT,1)+(rec61.AG_Dauer)),(DATE2DMY(AG_START_NEXT,2)),
//DATE2DMY(AG_START_NEXT,3));
AG_END_LAST := AG_START_NEXT+rec61.AG_Dauer;
END;
rec64.BM_Nr := rec63.BM_Nr;
rec64.FA_Nr := FA_Nr;
rec64.AG_Nr := rec63.AG_Nr;
// START und ENDE hier eintragen !!!
rec64.Start := AG_START_NEXT;
rec64.Ende := AG_END_LAST;
rec64.INSERT;
rec63.Start := rec64.Start;
rec63.Ende := rec64.Ende;
rec63.MODIFY;
//merken, wann letzter arbeitsgang ende ist
END_LETZTER_AG := rec64.Ende;
UNTIL rec63.NEXT <= 0; // Schleife ueber Arbeitsgaenge endet
Rec.Eingeplant := TRUE;
MODIFY;
rec49.RESET;
rec61.RESET;
rec63.RESET;
rec64.RESET;
11. Dezember 2007 14:45