Zeiterfassung "gehen" nur möglich, AG beendet

Allgemeine Diskussionen um die ERP Software AvERP

Moderator: SYNERPY

Antworten
Thomas Rogge
Beiträge: 149
Registriert: Mi Mär 04, 2009 10:45 am

Zeiterfassung "gehen" nur möglich, AG beendet

Beitrag von Thomas Rogge »

Moinsen,

wir möchten die Maske FRMV_BSMBMAN (Zeiterfassung-Manuell) erweitern, sodass man sich nur abmelden kann, wenn in ausgelösten Fertigungsaufträgen keine Arbeitsgänge mehr für den jeweiligen Mitarbeiter unbeendet vorliegen.
Damit soll man gezwungen werden, spätestens zum Feierabend seine unbeendeten Arbeitsgänge ordentlich (mit evtl. Zeitverteilung) in der BDE Rückerfassung zu beenden.

Evtl. vorhandene Arbeitsgänge werden ja in die Tabelle BFAACUR geschrieben.

Wenn ich mich nicht irre, müsste man doch in der Maske FRMV_BSMBMAN ja das OnExit Script anpassen, sodass zuerst abgefragt wird, ob für den Mitarbeiter (BSM_ID) noch irgendwelche Eintragungen in der Tabelle BFAACUR vorhanden sind. Wenn ja, kommt eine Art Messagebox mit dem Hinweis, die AG vorab korrekt zu beenden und dann springt der Cursor wieder ins Feld ohne eine Zeitspeicherung vorzunehmen.

Hat das schon mal jemand angedacht / probiert?
Ich wüsste nicht, wie ich eine Messagebox programmiere und liege ich überhaupt richtig?

Viele Grüße
Thomas
Software-Version: 6.6.10.0
DB-Version: AVERP2018.03
Server: Windows 10 Pro Intel Xeon E3-1230v6 - 16GB RAM
50 User
admin
Site Admin
Beiträge: 2673
Registriert: Di Feb 10, 2004 5:48 am
Wohnort: Bayreuth

Beitrag von admin »

Aha, eine besondere Art der elektronischen Fußfessel.

Kommen-Button

Code: Alles auswählen

Begin
  // letzter Stand: 2009-07-29 HB
  INCLUDE(PROC0003);
  LB_Meldung.Caption := '';
  if LB_MERK_BSM_ID.Caption <> '' then
  begin
    dDatumZeit := Now();
    dMerkdatumzeit := Now() - 1; // nächster Tag, damit false, wenn LB_MERK_KOMMEN.caption = ''
    iZeit := 1.2345; // initialisieren
			
    if LB_MERK_KOMMEN.caption <> '' then
      dMerkdatumzeit := StrToDateTime(LB_MERK_KOMMEN.caption);     
      
    iZeit := dDatumZeit - dMerkdatumzeit;   
    
    // Meldung bringen, wenn weniger als 15 Sekunden Zeit seit der letzten
    // Stempelung vergangen sind
    if ((dDatumZeit - dMerkdatumzeit) < 0.0001736) then 
      //MessageBox('Als Vorsichtsmaßnahme nur jede Minute ein Kommen/Gehen-Datensatz zulässig !','Manuelle Istzeitbuchung',0)
      LB_Meldung.Caption := lb_nureinmalbuchen.caption // Als Vorsichtsmaßnahme ist jede Minute nur ein Stempeln zulässig!
    else
    begin 
      sKommenGehen := 'K';
      nBSLO_ID := 0;
      // Stundensaldo, Urlaub für ? sek. anzeigen - nur bei regularer Mitarbeiter-ID, da sonst viele Mta. am Terminal hintereinander stempeln
      if BTN_KOMMEN.visible then
      begin
        MyQ := frmdata.universal;
        MyQ.Sql.Text := 'SELECT MASKENKEY, LOHNBEZ, ID FROM BSLO WHERE KATEGORIE IN (1, 4, 7) ORDER BY MASKENKEY';
        MyQ.Open();
        bOK := UNIVERSALAUFLIST(lb_auswlohn.caption);  //Auswahl Lohnkennzeichen
        if bOK then
          nBSLO_ID := AsInteger(MyQ.FieldByName('ID'));
        MyQ.Close();
      end;
      INCLUDE(PROC0001);
      q_2.Refresh();
      if BTN_KOMMEN.visible then
        INCLUDE(PROC0005)
      else  
        TIMER_1.Enabled := true; 
    end;
  end
  else
    LB_Meldung.Caption := lb_mtanrfehlt.caption; // MtaNr. fehlt. Diese ist nur für ein Kommen/Gehen gültig!
End;
Gehen-Button

Code: Alles auswählen

Begin
  // letzter Stand: 2009-07-29  HB
  LB_Meldung.Caption := '';
  INCLUDE(PROC0003);
  if LB_MERK_BSM_ID.Caption <> '' then
  begin
    dDatumZeit := Now();
    dMerkdatumzeit := Now() - 1; // nächster Tag, damit false, wenn LB_MERK_KOMMEN.caption = ''
    iZeit := 1.2345; // initialisieren
			
    if LB_MERK_GEHEN.caption <> '' then
      dMerkdatumzeit := StrToDateTime(LB_MERK_GEHEN.caption);     
      
    iZeit := dDatumZeit - dMerkdatumzeit;   
    
    // Meldung bringen, wenn weniger als 15 Sekunden Zeit seit der letzten
    // Stempelung vergangen sind
    if ((dDatumZeit - dMerkdatumzeit) < 0.0001736) then 
      //MessageBox('Als Vorsichtsmaßnahme nur jede Minute ein Kommen/Gehen-Datensatz zulässig !','Manuelle Istzeitbuchung',0)
      LB_Meldung.Caption := lb_nureinmalbuchen.caption // Als Vorsichtsmaßnahme ist jede Minute nur ein Stempeln zulässig!
    else
    begin 
      LB_Meldung.Caption := lb_nureinmalbuchen.caption   // Als Vorsichtsmaßnahme ist jede Minute nur ein Stempeln zulässig!
    else
    begin
			// Prüfen, ob es für den Mitarbeiter noch offene Arbeitsgangrückmeldungen gibt
			LB_BFAACUR_ID.caption := '0';
			Include(PROC0006);
			if ((LB_BFAACUR_ID.caption <> '0') and (LB_BFAACUR_ID.caption <> '')) then
			Begin               
        LB_Meldung.Caption := lb_bfaacur_beenden.caption;  // 'Bitte beenden Sie vor dem Gehen alle gestarteten Arbeitsgänge (BDE)'; 			  
			  Goto 1;
      end;
    
      sKommenGehen := 'G';
      nBSLO_ID := 0;
      INCLUDE(PROC0001);
      //LB_MERK_BSM_ID.Caption := '';
      q_2.Refresh();
      // Stundensaldo, Urlaub für ? sek. anzeigen - nur bei regularer Mitarbeiter-ID, da sonst viele Mta. am Terminal hintereinander stempeln
      IF BTN_GEHEN.visible then
        INCLUDE(PROC0005)
      else  
        TIMER_1.Enabled := true; 
    end;
  end
  else
  begin
    LB_Meldung.Caption := lb_mtanrfehlt.caption; // MtaNr. fehlt. Diese ist nur für ein Kommen/Gehen gültig!
  end;
  1:
End;
und neue Prozedur 0006

Code: Alles auswählen

Begin
  // Prüfen, ob es für den Mitarbeiter noch offene Arbeitsgangrückmeldungen gibt
  // letzter Stand: 2009-07-29  HB
  
  iBFAACUR_ID := 0;
  myQ := frmdata.universal;
  myQ.Close();
	myQ.SQL.Text := 'SELECT FIRST 1 ID FROM BFAACUR WHERE BSM_ID = ' + LB_MERK_BSM_ID.Caption;
  myQ.Open();
  LB_BFAACUR_ID.caption := AsString(MyQ.FieldByName('ID'));
  myQ.Close();
End;
Zusätzlich müssen noch einige Labels auf die Maske, zwecks Übersetzung der alten Nachrichten.

lb_auswlohn - Auswahl Lohnkennzeichen
lb_nureinmalbuchen - Als Vorsichtsmaßnahme ist jede Minute nur ein Stempeln zulässig!
lb_mtanrfehlt - MtaNr. fehlt. Diese ist nur für ein Kommen/Gehen gültig!
lb_bfaacur_beenden - Bitte beenden Sie vor dem Gehen alle gestarteten Arbeitsgänge (BDE)

Zusätzlich wurde das Zeitintervall zwischen zwei Buchungen auf 15 Sekunden verringert.

Die fertige Maske kann ich nicht posten, da wir dies zusätzlich über ein Kennzeichen im Mandantenstamm steuerbar gemacht haben.

(Unbedingt vor dem Gebrauch der Bastelvorlage eine SICHERUNGSKOPIE der Originalmaske machen!!!)
Thomas Rogge
Beiträge: 149
Registriert: Mi Mär 04, 2009 10:45 am

Beitrag von Thomas Rogge »

Moinsen,

vielen Dank, das scheint genau das zu sein, was wir suchen.
Was sich mir noch nicht erschliesst ist die Frage, wo ich diesen Meldungsinhalte definiere? Ich meine z.B.:

Code: Alles auswählen

lb_bfaacur_beenden.caption
Da gehört ja der Meldeinhalt rein und vor allem wo speichere ich diesen ab?
Die Programmierdoku habe ich schon gelesen, aber nichts darüber gefunden...

Viele Grüße
Thomas
Software-Version: 6.6.10.0
DB-Version: AVERP2018.03
Server: Windows 10 Pro Intel Xeon E3-1230v6 - 16GB RAM
50 User
SYN26

Beitrag von SYN26 »

Hallo,

ein feldunabhängiges Label ausserhalb des sichtbaren Bereichs im Formular einfügen und die gewünschte Meldung unter Caption zuweisen.

Die gewünschten Eigenschaften (Caption, Visible, ...) können auch im onFormShow gesetzt werden.
festus01
Beiträge: 515
Registriert: Di Okt 19, 2004 5:45 am
Wohnort: Diepholz

Beitrag von festus01 »

Hallo Thomas Rogge
Thomas Rogge hat geschrieben:...
Da gehört ja der Meldeinhalt rein und vor allem wo speichere ich diesen ab?
Die Programmierdoku habe ich schon gelesen, aber nichts darüber gefunden...
das Label wird auf dem Formular an einer unsichtbaren Stelle platziert (Beisp.: Maske größer ziehen, Label platzieren, Maske wieder auf Ursprungsgröße).
Danach im Objectinspector das Label auswählen und in der Eigenschaft Caption die Meldung eintragen.
Maske speichern.

Danach kann der Inhalt über die Sprachübersetzung beliebig geändert werden ohne noch einmal die Maske zu editieren.
MfG

KDP

----------------------------------------------------------
Durch den Computer spart der Mensch so viel Zeit,
dass er diese am Computer verbringen kann.
Thomas Rogge
Beiträge: 149
Registriert: Mi Mär 04, 2009 10:45 am

Beitrag von Thomas Rogge »

:D :D vielen Dank für die Hilfe,

ich hoffe, ich kann das heute noch testen...Rückmeldung erfolgt...

Viele Grüße
Thomas
Software-Version: 6.6.10.0
DB-Version: AVERP2018.03
Server: Windows 10 Pro Intel Xeon E3-1230v6 - 16GB RAM
50 User
Thomas Rogge
Beiträge: 149
Registriert: Mi Mär 04, 2009 10:45 am

Beitrag von Thomas Rogge »

Moinsen,

so die Codes habe ich eingefügt, die Procedur angelegt und auch die Label in die Maske eingefügt.
Wenn ich den Button Gehen klicke, kam aber immer wieder die Meldung, dass nur jede Minute ein Kommen/Gehen möglich sei.
Habe mal im Code nachgesehen, die Meldung war doppelt drin (siehe Code oben), habe das mal so angepasst (Gehen Button):

Code: Alles auswählen

Begin
  // letzter Stand: 2009-07-29  HB
  LB_Meldung.Caption := '';
  INCLUDE(PROC0003);
  if LB_MERK_BSM_ID.Caption <> '' then
  begin
    dDatumZeit := Now();
    dMerkdatumzeit := Now() - 1; // nächster Tag, damit false, wenn LB_MERK_KOMMEN.caption = ''
    iZeit := 1.2345; // initialisieren
         
    if LB_MERK_GEHEN.caption <> '' then
      dMerkdatumzeit := StrToDateTime(LB_MERK_GEHEN.caption);     
     
    iZeit := dDatumZeit - dMerkdatumzeit;   
   
    // Meldung bringen, wenn weniger als 15 Sekunden Zeit seit der letzten
    // Stempelung vergangen sind
    if ((dDatumZeit - dMerkdatumzeit) < 0.0001736) then
      //MessageBox('Als Vorsichtsmaßnahme nur jede Minute ein Kommen/Gehen-Datensatz zulässig !','Manuelle Istzeitbuchung',0)
      LB_Meldung.Caption := lb_nureinmalbuchen.caption // Als Vorsichtsmaßnahme ist jede Minute nur ein Stempeln zulässig!
    else
    begin
         // Prüfen, ob es für den Mitarbeiter noch offene Arbeitsgangrückmeldungen gibt
         LB_BFAACUR_ID.caption := '0';
         Include(PROC0006);
         if ((LB_BFAACUR_ID.caption <> '0') and (LB_BFAACUR_ID.caption <> '')) then
         Begin               
        LB_Meldung.Caption := lb_bfaacur_beenden.caption;  // 'Bitte beenden Sie vor dem Gehen alle gestarteten Arbeitsgänge (BDE)';           
           Goto 1;
      end;
   
      sKommenGehen := 'G';
      nBSLO_ID := 0;
      INCLUDE(PROC0001);
      //LB_MERK_BSM_ID.Caption := '';
      q_2.Refresh();
      // Stundensaldo, Urlaub für ? sek. anzeigen - nur bei regularer Mitarbeiter-ID, da sonst viele Mta. am Terminal hintereinander stempeln
      IF BTN_GEHEN.visible then
        INCLUDE(PROC0005)
      else 
        TIMER_1.Enabled := true;
    end;
  end
  else
  begin
    LB_Meldung.Caption := lb_mtanrfehlt.caption; // MtaNr. fehlt. Diese ist nur für ein Kommen/Gehen gültig!
  end;
  1:
End; 
Das Kommen funktioniert, aber beim Klick auf gehen meldet sich der Interpreter jetzt immer:

Code: Alles auswählen

Information
Aktuelle Variablenwerte:
  dDatumZeit = 04.08.2009 11:02:22
  dMerkdatumzeit = 03.08.2009 11:02:22
  iBFAACUR_ID = 0
  iZeit = 1
  myQ = 19512136

Error
Laufzeitfehler: 10000 (Zeile: 7)
       "Komponente nicht gefunden"
Laufzeitfehler: 10000 (Zeile: 16)
       "Komponente nicht gefunden"
Laufzeitfehler: 10000 (Zeile: 16)
       "Komponente nicht gefunden"
:( :( ...
Viele Grüße
Thomas
Software-Version: 6.6.10.0
DB-Version: AVERP2018.03
Server: Windows 10 Pro Intel Xeon E3-1230v6 - 16GB RAM
50 User
Thomas Rogge
Beiträge: 149
Registriert: Mi Mär 04, 2009 10:45 am

Beitrag von Thomas Rogge »

:cry: :cry: keiner eine Idee?

Gruß
Thomas
Software-Version: 6.6.10.0
DB-Version: AVERP2018.03
Server: Windows 10 Pro Intel Xeon E3-1230v6 - 16GB RAM
50 User
SYN26

Beitrag von SYN26 »

hallo,

anhand der Zeilennummern kann man die fehlende Komponente nicht erkennen. Die Fehlermeldung kann auch aus einer Prozedur kommen.

Sind alle verwendeten Labels definiert?

Gruß
Antworten