Zeiterfassung "gehen" nur möglich, AG beendet
Moderator: SYNERPY
-
- Beiträge: 149
- Registriert: Mi Mär 04, 2009 10:45 am
Zeiterfassung "gehen" nur möglich, AG beendet
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
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
DB-Version: AVERP2018.03
Server: Windows 10 Pro Intel Xeon E3-1230v6 - 16GB RAM
50 User
-
- Site Admin
- Beiträge: 2673
- Registriert: Di Feb 10, 2004 5:48 am
- Wohnort: Bayreuth
Aha, eine besondere Art der elektronischen Fußfessel.
Kommen-Button
Gehen-Button
und neue Prozedur 0006
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!!!)
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;
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;
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;
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!!!)
-
- Beiträge: 149
- Registriert: Mi Mär 04, 2009 10:45 am
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.:
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
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
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
DB-Version: AVERP2018.03
Server: Windows 10 Pro Intel Xeon E3-1230v6 - 16GB RAM
50 User
-
- Beiträge: 515
- Registriert: Di Okt 19, 2004 5:45 am
- Wohnort: Diepholz
Hallo Thomas Rogge
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.
das Label wird auf dem Formular an einer unsichtbaren Stelle platziert (Beisp.: Maske größer ziehen, Label platzieren, Maske wieder auf Ursprungsgröße).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...
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.
KDP
----------------------------------------------------------
Durch den Computer spart der Mensch so viel Zeit,
dass er diese am Computer verbringen kann.
-
- Beiträge: 149
- Registriert: Mi Mär 04, 2009 10:45 am
-
- Beiträge: 149
- Registriert: Mi Mär 04, 2009 10:45 am
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):
Das Kommen funktioniert, aber beim Klick auf gehen meldet sich der Interpreter jetzt immer:
...
Viele Grüße
Thomas
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;
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
DB-Version: AVERP2018.03
Server: Windows 10 Pro Intel Xeon E3-1230v6 - 16GB RAM
50 User
-
- Beiträge: 149
- Registriert: Mi Mär 04, 2009 10:45 am