17. Juni 2008 15:19
fnZeigeMonatsdaten(parMANr : Code[10];parMonat : Integer;parJahr : Integer)
//********************************************************************************
//*****
//********************************************************************************
varStartdatumL := fnHoleGrenzDatum(parMonat,parJahr,'ERSTER');
varEndeDatumL := fnHoleGrenzDatum(parMonat,parJahr,'LETZTER');
AnzahlWerktage := hFunktionen.fnArbeitstageImMonat(parMonat,parJahr);
varSuchDatumL := varStartdatumL;
tmpArbeitszeiten.RESET;
tmpArbeitszeiten.DELETEALL;
WHILE varSuchDatumL <= varEndeDatumL DO BEGIN
  varZEArbeitszeitenL.RESET;
  varZEArbeitszeitenL.SETRANGE("Personal Nr.", parMANr);
  varZEArbeitszeitenL.SETRANGE(Datum, varSuchDatumL);
  IF varZEArbeitszeitenL.FINDSET(FALSE) THEN BEGIN
    tmpArbeitszeiten.INIT;
    tmpArbeitszeiten."Personal Nr." := parMANr;
    tmpArbeitszeiten.Datum := varSuchDatumL;
    tmpArbeitszeiten.Mitarbeiter := varZEArbeitszeitenL.fnHoleMitarbeiterName(parMANr);
    tmpArbeitszeiten.Erfassungszeit := fnLetzteArbeitszeitBuchung(parMANr,varSuchDatumL);
    tmpArbeitszeiten.Startzeit := fnHoleMinStartzeit(parMANr,varSuchDatumL);
    tmpArbeitszeiten.Endezeit := fnHoleMaxEndezeit(parMANr,varSuchDatumL);
    tmpArbeitszeiten."Startzeit Abrechnung" := 
                              tmpArbeitszeiten.fnRundeAbrechnungszeit(TRUE,
                              CREATEDATETIME(varSuchDatumL,tmpArbeitszeiten.Startzeit));
    tmpArbeitszeiten."Endezeit Abrechnung" := 
                              tmpArbeitszeiten.fnRundeAbrechnungszeit(FALSE,
                              CREATEDATETIME(varSuchDatumL,tmpArbeitszeiten.Endezeit));
    IF varZEArbeitszeitenL.COUNT > 1 THEN BEGIN
      tmpArbeitszeiten.Buchungsnotiz := 'mehrere Einträge';
      tmpArbeitszeiten.Typ := '?';
      tmpArbeitszeiten."Typ-Bezeichung" := 'Mehrfacheintrag';
    END ELSE BEGIN
      tmpArbeitszeiten.Buchungsnotiz := varZEArbeitszeitenL.Buchungsnotiz;
      tmpArbeitszeiten.Typ := Typ;
      tmpArbeitszeiten."Typ-Bezeichung" := varZEArbeitszeitenL."Typ-Bezeichung";
    END;
    tmpArbeitszeiten.Gruppierung := varZEArbeitszeitenL.Gruppierung;
    tmpArbeitszeiten.Funktion := varZEArbeitszeitenL.Funktion;
    tmpArbeitszeiten.INSERT;
  END ELSE BEGIN
     //Leerzeilen (fürs Wochenende /Feiertage) eintragen
     tmpArbeitszeiten.INIT;
     tmpArbeitszeiten."Personal Nr." := parMANr;
     tmpArbeitszeiten.Mitarbeiter := tmpArbeitszeiten.fnHoleMitarbeiterName(parMANr);
     tmpArbeitszeiten.Erfassungszeit := CREATEDATETIME(varSuchDatumL,TIME);
     tmpArbeitszeiten.Datum := varSuchDatumL;
     tmpArbeitszeiten.INSERT;
  END;
  varSuchDatumL := CALCDATE('1T',varSuchDatumL);
END;
//Anzeige der Daten per Messagebox
tmpArbeitszeiten.FINDFIRST;
REPEAT
  msg := 'Datum: ' + FORMAT(tmpArbeitszeiten.Datum) + '\';
  msg := msg + 'Mitarbeiter: ' + tmpArbeitszeiten.Mitarbeiter + '\';
  msg := msg + 'Start: ' + FORMAT(tmpArbeitszeiten.Startzeit) + ' Ende: ' + FORMAT(tmpArbeitszeiten.Endezeit) + '\';
  MESSAGE(msg);
UNTIL tmpArbeitszeiten.NEXT = 0;
tmpArbeitszeiten.SETVIEW('SORTING(Datum) ORDER(Ascending)');
CurrForm.UPDATE(FALSE);17. Juni 2008 20:19
18. Juni 2008 07:29
18. Juni 2008 08:12
Natalie hat geschrieben:Hast du die Form genauso gemacht, wie die Form der Artikelverfolgungszeilen (6510 glaub ich) mit temp. Records umgeht? Achte dort auf die Form-Trigger.
Wenn du die Messagebox nicht anzeigst - erfolgt dann noch irgendwo ein FIND('-') auf die temp. Recordvariable?
Form - OnFindRecord(Which : Text[1024]) : Boolean
tmpArbeitszeiten := Rec;
IF NOT tmpArbeitszeiten.FIND(Which) THEN
  EXIT(FALSE);
Rec := tmpArbeitszeiten;
EXIT(TRUE);tmpArbeitszeiten.FINDFIRST;
REPEAT
  msg := 'Datum: ' + FORMAT(tmpArbeitszeiten.Datum) + '\';
  msg := msg + 'Mitarbeiter: ' + tmpArbeitszeiten.Mitarbeiter + '\';
  msg := msg + 'Start: ' + FORMAT(tmpArbeitszeiten.Startzeit) + ' Ende: ' + FORMAT(tmpArbeitszeiten.Endezeit) + '\';
  MESSAGE(msg);
UNTIL tmpArbeitszeiten.NEXT = 0;
tmpArbeitszeiten.RESET;
tmpArbeitszeiten.SETVIEW('SORTING(Datum) ORDER(Ascending)');
tmpArbeitszeiten.FIND('-');
CurrForm.UPDATE(FALSE);18. Juni 2008 08:15
mespelage hat geschrieben:Versuche es mal mit einem "tmpArbeitszeiten.RESET;",
bevor du die tmp Tabelle abrufts.
Michael
18. Juni 2008 08:21
tmpArbeitszeiten.RESET; 
tmpArbeitszeiten.FINDFIRST; 
REPEAT 
  msg := 'Datum: ' + FORMAT(tmpArbeitszeiten.Datum) + '\'; 
  msg := msg + 'Mitarbeiter: ' + tmpArbeitszeiten.Mitarbeiter + '\'; 
  msg := msg + 'Start: ' + FORMAT(tmpArbeitszeiten.Startzeit) + ' Ende: ' + FORMAT(tmpArbeitszeiten.Endezeit) + '\'; 
  MESSAGE(msg); 
UNTIL tmpArbeitszeiten.NEXT = 0; 
18. Juni 2008 08:28
mespelage hat geschrieben:ich meinte allerdings vor dem FINFIRST
18. Juni 2008 08:32
TempRec:= Rec;
IF NOT TempRec.FIND(Which) THEN
  EXIT(FALSE);
Rec := TempRec;
EXIT(TRUE);TempRec := Rec;
CurrentSteps := TempRec.NEXT(Steps);
IF CurrentSteps <> 0 THEN
  Rec := TempRec;
EXIT(CurrentSteps);18. Juni 2008 08:58
18. Juni 2008 09:04
18. Juni 2008 09:19
18. Juni 2008 10:41
18. Juni 2008 12:05
fnSetAbwesendeMitarbeiter()
//**********************************************************************
//***** Ermittlung von Nicht-Anwesenden Mitarbeitern.
//***** Definiton "Nicht anwesend":
//***** - Letzter Eintrag ist kein Eintragstyp 'A' an dem Tag
//***** - Letzte Endezeit < Ansichtszeit
//**********************************************************************
fnSetzeUeberschrift('Abwesende Mitarbeiter (Heute)');
varPruefZeitpunkt := TIME;
NAPAMitarbeiterL.SETRANGE(Status,NAPAMitarbeiterL.Status::anlegen,NAPAMitarbeiterL.Status::Aktiv);
IF NAPAMitarbeiterL.FINDSET(FALSE,FALSE) THEN BEGIN
  REPEAT
    varIstAbwesend := FALSE;
    ArbeitszeitenL.RESET;
    //Alles Anzeigen, was nicht Arbeitszeit ist
    ArbeitszeitenL.SETRANGE("Personal Nr.",NAPAMitarbeiterL."Nr.");
    ArbeitszeitenL.SETRANGE(Datum,TODAY);
    ArbeitszeitenL.SETFILTER(Typ,'<>%1','A');
    IF ArbeitszeitenL.FINDLAST THEN BEGIN
       tmpArbeitszeiten.INIT;
       tmpArbeitszeiten := ArbeitszeitenL;
       tmpArbeitszeiten.INSERT;
      varIstAbwesend := TRUE;
    END;
    IF NOT varIstAbwesend THEN BEGIN
      ArbeitszeitenL.RESET;
      ArbeitszeitenL.SETRANGE("Personal Nr.", NAPAMitarbeiterL."Nr.");
      ArbeitszeitenL.SETRANGE(Datum, TODAY);
      ArbeitszeitenL.SETRANGE(Typ, 'A');
      ArbeitszeitenL.SETFILTER(Endezeit, '<>%1', 0T);
      IF ArbeitszeitenL.FINDLAST THEN BEGIN
        IF ArbeitszeitenL.Endezeit < varPruefZeitpunkt THEN BEGIN
          tmpArbeitszeiten.INIT;
          tmpArbeitszeiten := ArbeitszeitenL;
          tmpArbeitszeiten.INSERT;
          varIstAbwesend := TRUE;
        END;
      END;
    END;
  UNTIL NAPAMitarbeiterL.NEXT = 0;
END;
CurrForm.UPDATE(FALSE);
18. Juni 2008 13:13
18. Juni 2008 13:31
19. Juni 2008 10:51
19. Juni 2008 11:01