Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Berechnung von Produktionsintervallen (https://www.delphipraxis.net/153160-berechnung-von-produktionsintervallen.html)

Bonimahoni 23. Jul 2010 08:46


Berechnung von Produktionsintervallen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Servus,

ich verzweifel gerade ein bisschen an einem Programm was ich schreibe.

Die GUI sieht folgendermaßen aus:

http://img175.imageshack.us/f/guicu.jpg/

Die Funktion sollte so sein:

Mitarbeiter gibt in das Feld Anfangszeit eine Uhrzeit ein [Format in zB. 0630 da keine Ahnung wie ich mit TTime Format rechnen kann.] Die Zeit wird in Industriezeit umgerechnet damit ich rechnen kann.

Wenn der Mitarbeiter z.B. 0730 eingibt muss in das Label Montag_1_Impuls_1 07:30 eingegeben werden und in das nächste Montag_1_Impuls_2 09:30.

Dabei gibt es aber noch feste Pausen und eine festen Arbeitszeitraum die bedacht werden müssen.
Gearbeitet wird immer nur von 06:00 bis 14:00 Uhr. Pausen sind einmal von 07:30 bis 07:35, 09:00 bis 09:15 und 11:30 bis 12:10.

Eigentlich muss noch dazu das Schulungen bedacht werden müssen. Ist z.B. am Montag eine Schulung von 8:00 bis 8:30 sollte der zweite Taktimpuls um eine halbe Stunden verschoben werden. Das hab ich aber mal nicht beachtet, da ich so schon Probleme habe.


Meine Fragen:
  • Wie bekomme ich es hin das ich eine Normale Uhrzeit eingeben kann ala 07:30 und damit die einzelnen Impulse berechnet werden können.
  • Wie mache ich es das die Restzeit richtig übernommen wird? Findet mein Taktimpuls zB. um 13:30 statt muss zum nächsten Tag 30min mit übernommen werden also fängt der erste Impuls erst um 7:30 statt
  • Wie beachte ich Schulungen?

Gebe ich zB. 0600 an rechnet er alles richtig durch sollte aber 0630 angegeben werden stimmts nicht :(

Hier der Code für Montag und Dienstag sonst wird es unübersichtlich:

Delphi-Quellcode:
procedure TForm_Dateneingabe.Ausfuehren_TaktplanungClick(Sender: TObject);

var

Intzeit : integer ;
Startzeit : real;
i : integer;
Summe : real ;       //entspr. Taktimpuls i
Taktzeit : real;
Anfangszeit : integer;
Pause1 : real ;
Pause2 : real ;
Pause3 : real  ;

a : real ;       //Hilfsvariable
b : real ;       //Hilfsvariable
h : real;        //Hilfsvariable
Uebertrag : real ;

begin

Pause1 := 0.08 ;
Pause2 := 0.33 ;
Pause3 := 1.00 ;


Intzeit := StrToInt(Eingabe_Anfangszeit_h.text) ;

Startzeit := Intzeit ;

Startzeit := Startzeit / 100  ;

a := trunc(Startzeit);
    b := Startzeit - a ;
   Startzeit := a + b * 10/6 ;

//Montag


for i := 0 to 3 do
begin

  Taktzeit := 2 ;
  Summe := Startzeit + Taktzeit * i ;

  if (Summe >= 7.50) and (Summe < 9.00) then Summe := Summe + Pause1 else
  if (Summe >= 9.00) and (Summe <= 11.50) then Summe := Summe + Pause2 ;
  if (Summe > 11.50) then Summe := Summe + Pause3 ;

  if i = 0 then
          begin
          a := trunc(Startzeit);
          b := Startzeit - a ;
          h := a + b * 6/10 ;
          Mo_1_Impuls_1.caption := FloatToStr(h*100) ;
        end;

  if i = 1 then
    begin
    a := trunc(Summe);
    b := Summe - a ;
    Summe := a + b * 6/10 ;
    Mo_1_Impuls_2.caption := FloatToStr(round(Summe*100));
   end;

  if i = 2 then
    begin
    a := trunc(Summe);
    b := Summe - a ;
    Summe := a + b * 6/10 ;
    Mo_1_Impuls_3.caption := FloatToStr(round(Summe*100)) ;
   end;

   if i = 3 then
    begin
    a := trunc(Summe);
    b := Summe - a ;
    Summe := a + b * 6/10 ;
    //if Summe*100 >= 1400 then
    //Mo_1_Impuls_4.caption := '' else
    Mo_1_Impuls_4.caption := FloatToStr(round(Summe*100)) ;
   end;
end;

//Dienstag

a := trunc(Summe);
b := Summe - a ;
Summe := a + b * 10/6 ;

uebertrag := sqrt(sqr(Summe-14)) ;
if uebertrag >= 2 then uebertrag := uebertrag - 2;
Startzeit := 6 ;
Startzeit := uebertrag + Startzeit ;

for i := 0 to 3 do
begin

  Taktzeit := 2 ;
  Summe := Startzeit + Taktzeit * i ;

  if (Summe >= 7.50) and (Summe < 9.00) then Summe := Summe + Pause1 else
  if (Summe >= 9.00) and (Summe <= 11.50) then Summe := Summe + Pause2 ;
  if (Summe > 11.50) then Summe := Summe + Pause3 ;

  if i = 0 then
    begin
          a := trunc(Startzeit);
          b := Startzeit - a ;
          h := a + b * 6/10 ;
          Di_1_Impuls_1.caption := FloatToStr(h*100) ;
    end;

  if i = 1 then
    begin
    a := trunc(Summe);
    b := Summe - a ;
    Summe := a + b * 6/10 ;
    Di_1_Impuls_2.caption := FloatToStr(round(Summe*100));
   end;

  if i = 2 then
    begin
    a := trunc(Summe);
    b := Summe - a ;
    Summe := a + b * 6/10 ;
    Di_1_Impuls_3.caption := FloatToStr(round(Summe*100)) ;
   end;

   if i = 3 then
    begin
    a := trunc(Summe);
    b := Summe - a ;
    Summe := a + b * 6/10 ;
    if Summe*100 >= 1400 then
    Di_1_Impuls_4.caption := '' else
    Di_1_Impuls_4.caption := FloatToStr(round(Summe*100)) ;
   end;
end.
Vielen Dank für eure Hilfe!

DeddyH 23. Jul 2010 08:50

AW: Berechnung von Produktionsintervallen
 
Keine fertige Lösung, aber schau einmal in die Unit DateUtils, da sind viele der benötigten Funktionen bereits implementiert (MinutesBetween z.B.).

DelphiBandit 23. Jul 2010 09:13

AW: Berechnung von Produktionsintervallen
 
Für die Eingabe würde ich an Deiner Stelle TMaskEdit mit einer EditMask für das kurze Zeitformat vorsehen. Das minimiert die Fehler, welche man bei der Eingabe so anstellen kann.

Hilft zwar nicht bei 25:98, aber solche Fehler bekommst Du spätestens bei der Umrechnung raus und springst bei Fehlern nach einer Meldung wieder in das fehlerhafte Edit zurück.

wicht 23. Jul 2010 09:34

AW: Berechnung von Produktionsintervallen
 
[OT]
Seitdem auf einem SAP Ausdruck was meine Arbeitszeiten angeht einmal die Endzeit 28:04 stand, ist für mich 25:98 eine gültige Zeitangabe. Die Premium-Software hat schließlich immer recht.
[/OT]

Bonimahoni 23. Jul 2010 10:03

AW: Berechnung von Produktionsintervallen
 
Gut dann werde ich mich da mal reinarbeiten. Erstmal die Unit finden :D

Die Eingabe kann sowieso nur zwischen 06:00:00 und 14:00:00 Uhr geschehen da nur in dieser Zeit gearbeitet wird. Dann immer Taktzeit 2h dazu außer es gibt eine Schulung um eine Uhrzeit dann wird es um die Zeit erweitert oder wenn die Summe von Anfangszeit und der Taktzeit die Pausen überschreitet halt die Pausenzeit dazu.

Ich versuch mal etwas mit der MinutesBetween Funktion vielleicht kommt damit was raus. Zumindest die Darstellung würde besser aussehen als gerade also nicht 0600 sondern 06:00

Bonimahoni 26. Jul 2010 14:08

AW: Berechnung von Produktionsintervallen
 
So ich hab doch mit Industriezeit berechnet nach dem ich im Forum gefunden habe wie man Zeit decoded und endcoded.

Könnte sich jemand den Code anschauen und sagen ob man daran noch etwas verbessern kann?

Aso hat jemand noch zufällig einen Link für ein Tutorial über das Laden von Frames in Frames? Möchte gerne eine Hauptseite mit einem Hauptmenu machen wo ich mein Datengrundladeframe reinlade. Habe leider nichts konkretes dazu gefunden :(

Die GUI: http://img265.imageshack.us/f/guicw.jpg/

Hier der Code:

Delphi-Quellcode:
procedure TForm_Dateneingabe.Ausfuehren_TaktplanungClick(Sender: TObject);

var

Eingabezeit,Darstellung : Ttime ;
Fr_1_Schulung_Von , Fr_1_Schulung_Bis , Do_1_Schulung_Von, Do_1_Schulung_Bis ,Mi_1_Schulung_Von ,Mi_1_Schulung_Bis, Di_1_Schulung_Bis , Di_1_Schulung_Von, Mo_1_Schulung_Bis, Mo_1_Schulung_Von : Ttime ;
i,hour, minute, Arbeitsanfang : integer;
Dauerschulung, Pause1, Pause2, Pause3, Uebertrag, Taktzeit, Taktimpuls, Startzeit : real ;
h, m, s, ms: Word;

Dauerschulung1, Dauerschulung2 , Dauerschulung3 , Dauerschulung4 , Dauerschulung5 : real ;

begin

Pause1 := 0.08 ;       // 5min
Pause2 := 0.33 ;       // 15min
Pause3 := 1.00 ;       // = Pause1 + 2 + 40min Mittag
Taktzeit := 2 ;        // 2h
Arbeitsanfang := 6  ;  // 6 Uhr


Eingabezeit := StrToTime(Eingabe_Anfangszeit.text) ;
DecodeTime(Eingabezeit, h, m, s, ms);
Startzeit := h + (m * 10/6)/100 ;

//Montag Schulung

if Mo_1_Schulung.checked then
begin
Mo_1_Schulung_Bis := StrToTime(Eingabe_Mo_1_Schulung_Bis.text) ;
DecodeTime(Mo_1_Schulung_Bis, h, m, s, ms);
Mo_1_Schulung_Bis := h + (m * 10/6)/100 ;

Mo_1_Schulung_Von := StrToTime(Eingabe_Mo_1_Schulung_Von.text) ;
DecodeTime(Mo_1_Schulung_Von, h, m, s, ms);
Mo_1_Schulung_Von := h + (m * 10/6)/100 ;

Dauerschulung1 := Mo_1_Schulung_Bis - Mo_1_Schulung_Von ;
end;

//Dienstag Schulung

if Di_1_Schulung.checked then
begin
Di_1_Schulung_Bis := StrToTime(Eingabe_Di_1_Schulung_Bis.text) ;
DecodeTime(Di_1_Schulung_Bis, h, m, s, ms);
Di_1_Schulung_Bis := h + (m * 10/6)/100 ;

Di_1_Schulung_Von := StrToTime(Eingabe_Di_1_Schulung_Von.text) ;
DecodeTime(Di_1_Schulung_Von, h, m, s, ms);
Di_1_Schulung_Von := h + (m * 10/6)/100 ;

Dauerschulung2 := Di_1_Schulung_Bis - Di_1_Schulung_Von ;
end;

//Mittwoch Schulung

if Mi_1_Schulung.checked then
begin
Mi_1_Schulung_Bis := StrToTime(Eingabe_Mi_1_Schulung_Bis.text) ;
DecodeTime(Mi_1_Schulung_Bis, h, m, s, ms);
Mi_1_Schulung_Bis := h + (m * 10/6)/100 ;

Mi_1_Schulung_Von := StrToTime(Eingabe_Mi_1_Schulung_Von.text) ;
DecodeTime(Mi_1_Schulung_Von, h, m, s, ms);
Mi_1_Schulung_Von := h + (m * 10/6)/100 ;
Dauerschulung3 := Mi_1_Schulung_Bis - Mi_1_Schulung_Von ;
end;

//Donnerstag Schulung

if Do_1_Schulung.checked then
begin
Do_1_Schulung_Bis := StrToTime(Eingabe_Do_1_Schulung_Bis.text) ;
DecodeTime(Do_1_Schulung_Bis, h, m, s, ms);
Do_1_Schulung_Bis := h + (m * 10/6)/100 ;

Do_1_Schulung_Von := StrToTime(Eingabe_Do_1_Schulung_Von.text) ;
DecodeTime(Do_1_Schulung_Von, h, m, s, ms);
Do_1_Schulung_Von := h + (m * 10/6)/100 ;
Dauerschulung4 := Do_1_Schulung_Bis - Do_1_Schulung_Von ;
end;

//Freitag Schulung

if Fr_1_Schulung.checked then
begin
Fr_1_Schulung_Bis := StrToTime(Eingabe_Fr_1_Schulung_Bis.text) ;
DecodeTime(Fr_1_Schulung_Bis, h, m, s, ms);
Fr_1_Schulung_Bis := h + (m * 10/6)/100 ;

Fr_1_Schulung_Von := StrToTime(Eingabe_Fr_1_Schulung_Von.text) ;
DecodeTime(Fr_1_Schulung_Von, h, m, s, ms);
Fr_1_Schulung_Von := h + (m * 10/6)/100 ;
Dauerschulung5 := Fr_1_Schulung_Bis - Fr_1_Schulung_Von ;
end;


//Berechnung Taktimpulse Montag

For i:=0 to 3 do

begin

  Taktimpuls := Startzeit + Taktzeit * i ;

  if Mo_1_Schulung_Von < Taktimpuls then Taktimpuls := Taktimpuls + Dauerschulung1 ;

  if (Taktimpuls > 7.50) and (Taktimpuls < 9.00) then Taktimpuls := Taktimpuls + Pause1 else
  if (Taktimpuls >= 9.00) and (Taktimpuls < 11.50) then Taktimpuls := Taktimpuls + Pause2 ;
  if (Taktimpuls >= 11.50) then Taktimpuls := Taktimpuls + Pause3 ;

  if i = 0 then
    begin
    hour := trunc(Taktimpuls);
    minute := round( (Taktimpuls - hour) * 6/10 * 100);
    Darstellung := EncodeTime(hour, minute, s, ms) ;
    Mo_1_Impuls_1.caption := FormatDateTime('hh:nn:ss', Darstellung);
    end;

  if i = 1 then
    begin
    hour := trunc(Taktimpuls);
    minute := round( (Taktimpuls - hour) * 6/10 * 100);
    Darstellung := EncodeTime(hour, minute, s, ms) ;
    Mo_1_Impuls_2.caption := FormatDateTime('hh:nn:ss', Darstellung)
   end;

  if i = 2 then
    begin
    hour := trunc(Taktimpuls);
    minute := round( (Taktimpuls - hour) * 6/10 * 100);
    Darstellung := EncodeTime(hour, minute, s, ms) ;
    Mo_1_Impuls_3.caption := FormatDateTime('hh:nn:ss', Darstellung)
   end;

   if i = 3 then
    begin
    hour := trunc(Taktimpuls);
    minute := round( (Taktimpuls - hour) * 6/10 * 100);
    Darstellung := EncodeTime(hour, minute, s, ms) ;
    Mo_1_Impuls_4.caption := FormatDateTime('hh:nn:ss', Darstellung) ;
    if Taktimpuls > 14 then Mo_1_Impuls_4.visible := false ;
    end;

end;

if taktimpuls < 14 then uebertrag := 2 - (14 - Taktimpuls)
else uebertrag := taktimpuls - 14 ;

Startzeit := uebertrag + Arbeitsanfang ;

//Berechnung Taktimpulse Dienstag

for i := 0 to 3 do

begin

  Taktimpuls := Startzeit + Taktzeit * i ;

  if Di_1_Schulung_Von < Taktimpuls then Taktimpuls := Taktimpuls + Dauerschulung2 ;

  if (Taktimpuls > 7.50) and (Taktimpuls < 9.00) then Taktimpuls := Taktimpuls + Pause1 else
  if (Taktimpuls >= 9.00) and (Taktimpuls < 11.50) then Taktimpuls := Taktimpuls + Pause2 ;
  if (Taktimpuls >= 11.50) then Taktimpuls := Taktimpuls + Pause3 ;

  if i = 0 then
    begin
    hour := trunc(Taktimpuls);
    minute := round( (Taktimpuls - hour) * 6/10 * 100);
    Darstellung := EncodeTime(hour, minute, s, ms) ;
    Di_1_Impuls_1.caption := FormatDateTime('hh:nn:ss', Darstellung);
    end;

  if i = 1 then
    begin
    hour := trunc(Taktimpuls);
    minute := round( (Taktimpuls - hour) * 6/10 * 100);
    Darstellung := EncodeTime(hour, minute, s, ms) ;
    Di_1_Impuls_2.caption := FormatDateTime('hh:nn:ss', Darstellung);
    end;

  if i = 2 then
    begin
    hour := trunc(Taktimpuls);
    minute := round( (Taktimpuls - hour) * 6/10 * 100);
    Darstellung := EncodeTime(hour, minute, s, ms) ;
    Di_1_Impuls_3.caption := FormatDateTime('hh:nn:ss', Darstellung);
    end;

   if i = 3 then
    begin
    hour := trunc(Taktimpuls);
    minute := round( (Taktimpuls - hour) * 6/10 * 100);
    Darstellung := EncodeTime(hour, minute, s, ms) ;
    Di_1_Impuls_4.caption := FormatDateTime('hh:nn:ss', Darstellung);
    if Taktimpuls > 14 then Di_1_Impuls_4.visible := false ;
    end;
end;


if taktimpuls < 14 then uebertrag := 2 - (14 - Taktimpuls)
else uebertrag := taktimpuls - 14 ;

Startzeit := uebertrag + Arbeitsanfang ;

//Berechnung Taktimpulse Mittwoch

for i := 0 to 3 do

begin

  Taktimpuls := Startzeit + Taktzeit * i ;

  if Mi_1_Schulung_Von < Taktimpuls then Taktimpuls := Taktimpuls + Dauerschulung3 ;

  if (Taktimpuls > 7.50) and (Taktimpuls < 9.00) then Taktimpuls := Taktimpuls + Pause1 else
  if (Taktimpuls >= 9.00) and (Taktimpuls < 11.50) then Taktimpuls := Taktimpuls + Pause2 ;
  if (Taktimpuls >= 11.50) then Taktimpuls := Taktimpuls + Pause3 ;

  if i = 0 then
    begin
    hour := trunc(Taktimpuls);
    minute := round( (Taktimpuls - hour) * 6/10 * 100);
    Darstellung := EncodeTime(hour, minute, s, ms) ;
    Mi_1_Impuls_1.caption := FormatDateTime('hh:nn:ss', Darstellung);
    end;

  if i = 1 then
    begin
    hour := trunc(Taktimpuls);
    minute := round( (Taktimpuls - hour) * 6/10 * 100);
    Darstellung := EncodeTime(hour, minute, s, ms) ;
    Mi_1_Impuls_2.caption := FormatDateTime('hh:nn:ss', Darstellung);
    end;

  if i = 2 then
    begin
    hour := trunc(Taktimpuls);
    minute := round( (Taktimpuls - hour) * 6/10 * 100);
    Darstellung := EncodeTime(hour, minute, s, ms) ;
    Mi_1_Impuls_3.caption := FormatDateTime('hh:nn:ss', Darstellung);
    end;

   if i = 3 then
    begin
    hour := trunc(Taktimpuls);
    minute := round( (Taktimpuls - hour) * 6/10 * 100);
    Darstellung := EncodeTime(hour, minute, s, ms) ;
    Mi_1_Impuls_4.caption := FormatDateTime('hh:nn:ss', Darstellung);
    if Taktimpuls > 14 then Mi_1_Impuls_4.visible := false ;
    end;
end;


if taktimpuls < 14 then uebertrag := 2 - (14 - Taktimpuls)
else uebertrag := taktimpuls - 14 ;

Startzeit := uebertrag + Arbeitsanfang ;

//Berechnung Taktimpulse Donnerstag

for i := 0 to 3 do

begin

  Taktimpuls := Startzeit + Taktzeit * i ;

  if Mi_1_Schulung_Von < Taktimpuls then Taktimpuls := Taktimpuls + Dauerschulung4 ;

  if (Taktimpuls > 7.50) and (Taktimpuls < 9.00) then Taktimpuls := Taktimpuls + Pause1 else
  if (Taktimpuls >= 9.00) and (Taktimpuls < 11.50) then Taktimpuls := Taktimpuls + Pause2 ;
  if (Taktimpuls >= 11.50) then Taktimpuls := Taktimpuls + Pause3 ;

  if i = 0 then
    begin
    hour := trunc(Taktimpuls);
    minute := round( (Taktimpuls - hour) * 6/10 * 100);
    Darstellung := EncodeTime(hour, minute, s, ms) ;
    Do_1_Impuls_1.caption := FormatDateTime('hh:nn:ss', Darstellung);
    end;

  if i = 1 then
    begin
    hour := trunc(Taktimpuls);
    minute := round( (Taktimpuls - hour) * 6/10 * 100);
    Darstellung := EncodeTime(hour, minute, s, ms) ;
    Do_1_Impuls_2.caption := FormatDateTime('hh:nn:ss', Darstellung);
    end;

  if i = 2 then
    begin
    hour := trunc(Taktimpuls);
    minute := round( (Taktimpuls - hour) * 6/10 * 100);
    Darstellung := EncodeTime(hour, minute, s, ms) ;
    Do_1_Impuls_3.caption := FormatDateTime('hh:nn:ss', Darstellung);
    end;

   if i = 3 then
    begin
    hour := trunc(Taktimpuls);
    minute := round( (Taktimpuls - hour) * 6/10 * 100);
    Darstellung := EncodeTime(hour, minute, s, ms) ;
    Do_1_Impuls_4.caption := FormatDateTime('hh:nn:ss', Darstellung);
    if Taktimpuls > 14 then Do_1_Impuls_4.visible := false ;
    end;
end;


if taktimpuls < 14 then uebertrag := 2 - (14 - Taktimpuls)
else uebertrag := taktimpuls - 14 ;

Startzeit := uebertrag + Arbeitsanfang ;

//Berechnung Taktimpulse Freitag

for i := 0 to 3 do

begin

  Taktimpuls := Startzeit + Taktzeit * i ;

  if Fr_1_Schulung_Von < Taktimpuls then Taktimpuls := Taktimpuls + Dauerschulung5 ;

  if (Taktimpuls > 7.50) and (Taktimpuls < 9.00) then Taktimpuls := Taktimpuls + Pause1 else
  if (Taktimpuls >= 9.00) and (Taktimpuls < 11.50) then Taktimpuls := Taktimpuls + Pause2 ;
  if (Taktimpuls >= 11.50) then Taktimpuls := Taktimpuls + Pause3 ;

  if i = 0 then
    begin
    hour := trunc(Taktimpuls);
    minute := round( (Taktimpuls - hour) * 6/10 * 100);
    Darstellung := EncodeTime(hour, minute, s, ms) ;
    Fr_1_Impuls_1.caption := FormatDateTime('hh:nn:ss', Darstellung);
    end;

  if i = 1 then
    begin
    hour := trunc(Taktimpuls);
    minute := round( (Taktimpuls - hour) * 6/10 * 100);
    Darstellung := EncodeTime(hour, minute, s, ms) ;
    Fr_1_Impuls_2.caption := FormatDateTime('hh:nn:ss', Darstellung);
    end;

  if i = 2 then
    begin
    hour := trunc(Taktimpuls);
    minute := round( (Taktimpuls - hour) * 6/10 * 100);
    Darstellung := EncodeTime(hour, minute, s, ms) ;
    Fr_1_Impuls_3.caption := FormatDateTime('hh:nn:ss', Darstellung);
    end;

   if i = 3 then
    begin
    hour := trunc(Taktimpuls);
    minute := round( (Taktimpuls - hour) * 6/10 * 100);
    Darstellung := EncodeTime(hour, minute, s, ms) ;
    Fr_1_Impuls_4.caption := FormatDateTime('hh:nn:ss', Darstellung);
    if Taktimpuls > 14 then Fr_1_Impuls_4.visible := false ;
    end;
end;

if taktimpuls < 14 then uebertrag := 2 - (14 - Taktimpuls)
else uebertrag := taktimpuls - 14 ;
hour := trunc(uebertrag);
minute := round( (uebertrag - hour) * 6/10 * 100);
Darstellung := EncodeTime(hour, minute, s, ms) ;
Uebertrag_auf_Montag.caption := FormatDateTime('hh:nn:ss', Darstellung);

end;

end.

jfheins 26. Jul 2010 14:50

AW: Berechnung von Produktionsintervallen
 
Zitat:

Zitat von Bonimahoni (Beitrag 1037652)
So ich hab doch mit Industriezeit berechnet nach dem ich im Forum gefunden habe wie man Zeit decoded und endcoded.
Könnte sich jemand den Code anschauen und sagen ob man daran noch etwas verbessern kann?

Ja, kein Problem. Da ist noch jede Menge Potenzial.

Delphi-Quellcode:
if Mo_1_Schulung.checked then
begin
...
if Di_1_Schulung.checked then
begin
...
if Mi_1_Schulung.checked then
begin
...
if Do_1_Schulung.checked then
begin
...
if Fr_1_Schulung.checked then
begin
Ahja .. hast du dir schon mal überlegt, da eine Funktion herauszuziehen??
Oder die Steuerelemente in Arrays zu verpacken?
Sogar FindComponent() ließe sich hier noch vertreten... aber das ist ja nicht mehr schön was du da gemacht hast...

Delphi-Quellcode:
For i:=0 to 3 do
begin
  if i = 0 then
  if i = 1 then
  if i = 2 then
  if i = 3 then
end;
Ahja ... das bewährte for-if Statement. ist ja auch fast sinnvoll :P
O
M
G
Einmal reicht nicht, du hast das ganze 5 mal gemacht :shock:

blackfin 26. Jul 2010 16:18

AW: Berechnung von Produktionsintervallen
 
Nicht nur das, der ganze Code strotzt nur so vor doppelten Sachen, z.B.

Delphi-Quellcode:
hour := trunc(Taktimpuls);
minute := round( (Taktimpuls - hour) * 6/10 * 100);
Darstellung := EncodeTime(hour, minute, s, ms) ;
Wieso rufst du das ganze x-Mal auf? :) Einmal reicht doch, ist ja immer das gleiche.
Lager das doch in eine Funktion aus, die du einmal aufrufst.
Sonst bekommst du das Problem, dass du zig Zeilen gleichen Codes ändern musst, wenn du mal etwas an der Berechnung verändern willst....

Ich glaube, den Code könnte man durch Arrays, oder sei es nur, die Labels durch deren Tag-Wert zu suchen (anstatt auf Fr_1_Impuls_1, Fr_1_Impuls_2 usw. zuzugreifen), auf ein paar Zeilen strippen :)

Bonimahoni 27. Jul 2010 07:02

AW: Berechnung von Produktionsintervallen
 
Mein erstes Prog seit 7 Jahren oder so seid gnädig :D Alles durchs Internet in ner Woche gelernt, da kennt man so viele Sachen noch nicht. Leider. Jo weiß das es vor doppelten Sachen strotzt deshalb frag ich ja wie man es verändern kann ^^

Das mit den Arrays hab ich mir auch überlegt. Auch ein durchschalten der Labels mit einer for to schleife hab ich versucht aber nicht hinbekommen. Mal schauen was es da gibt.

Nichts gegen if! Das Programm an sich funktioniert wunderbar ^^

Ich werde erstmal
Delphi-Quellcode:
hour := trunc(Taktimpuls);
minute := round( (Taktimpuls - hour) * 6/10 * 100);
Darstellung := EncodeTime(hour, minute, s, ms) ;
auslagern.

Beim Rest muss ich mich mal mehr bei Arrays einlesen und wie ich die ganze if kacke losbekomme.

Thx für eure Hilfe!


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:45 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz