Inhaltsverzeichnis
Schnittstelle 7012: Gantner-Stammdaten und Fingerprints übertragen
Dokumentiert / statisch geprüft: 2026-10-02. Statisch dokumentiert; Nutzerprüfung offen. Keine Schnittstelle ausgeführt.
Identität und Quellenstand
eProgramm.TerminalStammdatenGantner = 7012. Aktive feste Registrierung → cSchnittGantner.StammdatenDelegate (E,P). Registrierung und erreichbare Quellen geprüft; installierte Binärdateien ungeprüft. Active=True, InAutomatik=true, ManuellerAufruf=false, NurAufServer=false. Kennzeichen beschreiben Registrierung/Defaults, nicht eingerichtete Jobs; Run selbst prüft keine Serverbindung.
seegerstefan/pep4desktop, master, Commit f1d82a003b62f2658f06eaa943dc685ab219bdf3. Lokale .DS_Store-/cPep/PEP-Abweichungen nicht vermischt; Fachquellen cSchnittstellen/ZW/Sqlfiles unverändert. Kein Remote-/Installationsabgleich.
Terminalwahl und Verbindung
ID=NumberLong, -1 alle Auto1-Uhren.Art6, sonst konkreteID unabhängigAuto. Delegate verwendet ausschließlich Value; fehlend/nichtnumerisch→0. Registrierter DefaultValue ist kein im Delegate aufgelöster Fallback. Adresse ist FTP-/Ping-Ziel. Relative Arbeitsdateien teilen sich alle Geräte/Prozesse; kein Lock oder separate Task-Datei.
FTP nutzt hartcodierte Credentials (Werte nicht dokumentieren), nicht FTPS. Downloadtimeout10s, Upload20s; SQL_TIMEOUT wird hier nicht gesetzt. LEGACY-Meldungen, keine BASE-Mail/API. Keine Gerätekommunikation ausgeführt.
Biometrischer Eingang vor Stammdatenexport
Je Gerät FTP_Download FingerTemplates.exp, danach FingerPrintsToDB. Download hängt '###UHR###;TerminalID' und Rohtext an relative FingerTemplates.exp, wartet 5s und löscht die Gerätedatei. Weitere Lieferungen alle 3s bis kein positiver Inhalt. Return -1 wird in Download_FingerPrints nicht zuverlässig als False behandelt; nur Exceptions ergeben False.
UTF8-/Semikolonfile, Markerzeilen werden übersprungen. Andere Zeilen brauchen mindestens vier Felder: 0 unbenutzt, 1 PersonID, 2 Fingerindex '1'/'2', 3 Template. UPDATE Personen.FP1 bzw. FP2, keine INSERTs oder Personenanlage. Weitere Fingerindices werden nicht geschrieben, trotzdem gezählt. Danach Backup ApplicationDirectory/BACKUP/yyyyMMdd_HHmmss_ffff_FingerTemplates.exp und Löschen der lokalen Quelle. Keine Gesamttransaktion: Fehler kann bereits aktualisierte FP-Felder hinterlassen. Helferbool entspricht Zeilenanzahl (0→False); Ergebnis wird außen ignoriert. Keine biometrischen Inhalte in Doku oder Logbeispiele kopieren.
Ausgang down.dat
Nach Fingerprintphase relative down.dat löschen und Export_Stamm neu erzeugen (StandardUTF8, Semikolon, keine Quotes/Escapes). dbo.SaldenTerminal() liefert globalen Bestand, nicht pro Gerätefiliale. Beginn '1012;' (Gerätekommando; Bedeutung ohne Geräteunterlage nicht bestätigt). Je Person:
- '1010;PersonID;PersonID;Nachname,Vorname;;Verifikation;Status;;;;;;;;;;'. Verifikation 1 bei V im Transponder, sonst 0; Status -1→2, 1→1, sonst 0.
- Optional '1015;PersonID;1;' für AdminTerminal.
- '1020;PersonID;Transponder;01;'; äußere '*'/'V' werden vom Transponder entfernt.
- '1030;PersonID;ausgewählte Salden…;' gemäß Bitmaske: Stunden/Monat kulturabhängig 0.00, Urlaub/FS ganzzahlig.
- '1040;PersonID;1;FP1' und '1040;PersonID;2;FP2', sofern nicht DBNull (auch leere Strings).
Am Ende 1010/1015 für synthetischen Admin ENROLLMENT, ID='987'+lokaler Tag. Keine filialspezifische Auswahl; Fingerprints und Personendaten gehen an alle gewählten Terminals. UDF wählt ITZeit mit 28 Tagen Vorlauf und Transponder>'0'/Transponder2>'0'/FP1 nichtleer; FP2 allein genügt nicht. Keine Personenaktiv-/Eintritt-/Austrittsprüfung in dieser UDF.
Fehler, Datenschutz und Wiederholung
Export_Stamm-Boolean wird ignoriert; danach FTP_Upload auf jedes Gerät. Download-/Uploadfehler werden aggregiert, FP-DB-/Exportfehler können dagegen verdeckt bleiben. UploadTrue→LastGet. SCHNITT_GanterLog schreibt komplettes down.dat einschließlich Fingerprints/Personendaten. Dateien und FTP sind unverschlüsselt; geschützter Betrieb ist erforderlich.
Keine Calc-Ausführung; Fach-UDFs lesen nur, außer FP-/LastGet-Schreiben. IsAnwesend benutzt letztes Kalendertagsereignis ohne Gelöscht-/Zukunft-/Filialfilter; Status ist kein Zeitberechnungsbeleg. Wiederholung erneuert Stamm/FP, keine atomare Eingang-/Ausgangskopplung.
Einstellungen und gemeinsame Nebenwirkungen
Gemeinsames Profil: LEGACY (interne Referenz).
| Beziehung | Schlüssel / Variable | Default | Einflussweg | Wirkung | Beleg |
|---|---|---|---|---|---|
| 7012-S001 | SCHNITT_GantnerPing / SCHNITTGantnerPing | True | FTP-Helfer ICMP vor Zugriff | Zusätzliche Erreichbarkeitsprüfung; kein Verfügbarkeitsbeleg für FTP | B,ZW |
| 7012-S002 | SCHNITT_GanterLog / SCHNITTGanterLog | False | Vor FTP Upload | Angefülltes GANTNER/yyyyMMdd_UPLOAD.log mit vollständigem Dateiinhalt; sensible Person-/FP-Daten möglich | B,ZW |
| 7012-S003 | TERMINAL_SALDOART / Terminal_SaldoArt | 0 | Bitmaske1030 | 1 Stunden, 2 StundenMonat, 4 Urlaub, 8 FS; 0 keine Saldenausgabe | B,ZW |
Defaults sind keine Livewerte. Melde-/Datei-/DB-Wirkungen sind nicht atomar.
Feldbeziehungen
DB-Rolle PEP4-Anmeldedatenbank, soweit nicht ausdrücklich Aprocon oder Import angegeben. Unqualifizierte Objektschemata nicht als Live-dbo-Vertrag behaupten. INSERT-Defaults/Computed-Spalten sind gesonderte Schemawirkung, kein explizites UPDATE.
| Beziehung | Tabelle.Feld | Operation | Datenfluss / Verwendung | Bedingung | Beleg |
|---|---|---|---|---|---|
| 7012-D001 | Uhren.ID | SELECT | GantnerArt6/ID-1Auto sonstkonkret | Keine Filialdatenselektion | B |
| 7012-D002 | Uhren.Adresse | SELECT | GantnerArt6/ID-1Auto sonstkonkret | Keine Filialdatenselektion | B |
| 7012-D003 | Uhren.Art | SELECT | GantnerArt6/ID-1Auto sonstkonkret | Keine Filialdatenselektion | B |
| 7012-D004 | Uhren.Auto | SELECT | GantnerArt6/ID-1Auto sonstkonkret | Keine Filialdatenselektion | B |
| 7012-D005 | Uhren.LastGet | UPDATE | GETDATEbeiUploadTrue | Kein bestätigter Geräteeinspielbeleg | B |
| 7012-D006 | Personen.PersonID | SELECT | UPDATE-FP-Ziel | Eingangs-Personnummer | B |
| 7012-D007 | Personen.FP1 | UPDATE | FingerTemplates.exp Felder1/2/3 bestimmen Person/Finger/Template | Kein Neuanlegen Personen, kein Historien-/Gültigkeitsfilter | B |
| 7012-D008 | Personen.FP2 | UPDATE | FingerTemplates.exp Felder1/2/3 bestimmen Person/Finger/Template | Kein Neuanlegen Personen, kein Historien-/Gültigkeitsfilter | B |
| 7012-D009 | Personen.PersonID | SELECT | SaldenTerminal-Resultat für Name,Ausweis,FP/Admin und Korrektursaldo | SQL-Quelle global, nicht proUhr/Filiale eingeschränkt | SALDO |
| 7012-D010 | Personen.Nachname | SELECT | SaldenTerminal-Resultat für Name,Ausweis,FP/Admin und Korrektursaldo | SQL-Quelle global, nicht proUhr/Filiale eingeschränkt | SALDO |
| 7012-D011 | Personen.Vorname | SELECT | SaldenTerminal-Resultat für Name,Ausweis,FP/Admin und Korrektursaldo | SQL-Quelle global, nicht proUhr/Filiale eingeschränkt | SALDO |
| 7012-D012 | Personen.FP1 | SELECT | SaldenTerminal-Resultat für Name,Ausweis,FP/Admin und Korrektursaldo | SQL-Quelle global, nicht proUhr/Filiale eingeschränkt | SALDO |
| 7012-D013 | Personen.FP2 | SELECT | SaldenTerminal-Resultat für Name,Ausweis,FP/Admin und Korrektursaldo | SQL-Quelle global, nicht proUhr/Filiale eingeschränkt | SALDO |
| 7012-D014 | Personen.Transponder | SELECT | SaldenTerminal-Resultat für Name,Ausweis,FP/Admin und Korrektursaldo | SQL-Quelle global, nicht proUhr/Filiale eingeschränkt | SALDO |
| 7012-D015 | Personen.Transponder2 | SELECT | SaldenTerminal-Resultat für Name,Ausweis,FP/Admin und Korrektursaldo | SQL-Quelle global, nicht proUhr/Filiale eingeschränkt | SALDO |
| 7012-D016 | Personen.AdminTerminal | SELECT | SaldenTerminal-Resultat für Name,Ausweis,FP/Admin und Korrektursaldo | SQL-Quelle global, nicht proUhr/Filiale eingeschränkt | SALDO |
| 7012-D017 | Personen.KorrekturSaldo | SELECT | SaldenTerminal-Resultat für Name,Ausweis,FP/Admin und Korrektursaldo | SQL-Quelle global, nicht proUhr/Filiale eingeschränkt | SALDO |
| 7012-D018 | ITZeit.PersonenStammID | SELECT | Auswahl bisHeute und bis28Tagevorlauf; LaufenderSaldo1 in TagesSaldoSumme | Kein IsAktiv-Filter in dieser UDF | SALDO |
| 7012-D019 | ITZeit.von | SELECT | Auswahl bisHeute und bis28Tagevorlauf; LaufenderSaldo1 in TagesSaldoSumme | Kein IsAktiv-Filter in dieser UDF | SALDO |
| 7012-D020 | ITZeit.bis2 | SELECT | Auswahl bisHeute und bis28Tagevorlauf; LaufenderSaldo1 in TagesSaldoSumme | Kein IsAktiv-Filter in dieser UDF | SALDO |
| 7012-D021 | ITZeit.LaufenderSaldo | SELECT | Auswahl bisHeute und bis28Tagevorlauf; LaufenderSaldo1 in TagesSaldoSumme | Kein IsAktiv-Filter in dieser UDF | SALDO |
| 7012-D022 | BerechneteZeiten.Person | SELECT | Summen vor SQLGETDATE; MonatssummeaktuellerMonat, FSaktuellesJahr | Keine Neuberechnung; NULLsummen VB Nz | SALDO |
| 7012-D023 | BerechneteZeiten.Datum | SELECT | Summen vor SQLGETDATE; MonatssummeaktuellerMonat, FSaktuellesJahr | Keine Neuberechnung; NULLsummen VB Nz | SALDO |
| 7012-D024 | BerechneteZeiten.TagesSaldo | SELECT | Summen vor SQLGETDATE; MonatssummeaktuellerMonat, FSaktuellesJahr | Keine Neuberechnung; NULLsummen VB Nz | SALDO |
| 7012-D025 | BerechneteZeiten.Urlaub | SELECT | Summen vor SQLGETDATE; MonatssummeaktuellerMonat, FSaktuellesJahr | Keine Neuberechnung; NULLsummen VB Nz | SALDO |
| 7012-D026 | BerechneteZeiten.SamstagFrei | SELECT | Summen vor SQLGETDATE; MonatssummeaktuellerMonat, FSaktuellesJahr | Keine Neuberechnung; NULLsummen VB Nz | SALDO |
| 7012-D027 | BerechneteZeiten.Angerechnet | SELECT | Summen vor SQLGETDATE; MonatssummeaktuellerMonat, FSaktuellesJahr | Keine Neuberechnung; NULLsummen VB Nz | SALDO |
| 7012-D028 | Urlaubsanspruch.Person | SELECT | Jahre⇐aktuellesJahr minus verbrauchterUrlaub | Kein GültigBis-Feldfilter | SALDO |
| 7012-D029 | Urlaubsanspruch.Anspruch | SELECT | Jahre⇐aktuellesJahr minus verbrauchterUrlaub | Kein GültigBis-Feldfilter | SALDO |
| 7012-D030 | Urlaubsanspruch.GültigVon | SELECT | Jahre⇐aktuellesJahr minus verbrauchterUrlaub | Kein GültigBis-Feldfilter | SALDO |
| 7012-D031 | CStatus.PersonenStammID | SELECT | Fehlerzählung zurückgeliefert, VB nicht serialisiert | Datum<GETDATE und CStatus<>0 | SALDO |
| 7012-D032 | CStatus.Datum | SELECT | Fehlerzählung zurückgeliefert, VB nicht serialisiert | Datum<GETDATE und CStatus<>0 | SALDO |
| 7012-D033 | CStatus.CStatus | SELECT | Fehlerzählung zurückgeliefert, VB nicht serialisiert | Datum<GETDATE und CStatus<>0 | SALDO |
| 7012-D034 | Zeitereignisse.PersonID | SELECT | IsAnwesend: letzterKalendertagsatz K/T→1,G→0;sonstParity,keineBuchung→-1 | Kein geloescht/Datum⇐Now/Filialfilter; TOP1beiGleichzeitigkeitohneOrder | ANW |
| 7012-D035 | Zeitereignisse.Datum | SELECT | IsAnwesend: letzterKalendertagsatz K/T→1,G→0;sonstParity,keineBuchung→-1 | Kein geloescht/Datum⇐Now/Filialfilter; TOP1beiGleichzeitigkeitohneOrder | ANW |
| 7012-D036 | Zeitereignisse.Kennung | SELECT | IsAnwesend: letzterKalendertagsatz K/T→1,G→0;sonstParity,keineBuchung→-1 | Kein geloescht/Datum⇐Now/Filialfilter; TOP1beiGleichzeitigkeitohneOrder | ANW |
Teststatus und Pflege
Keine Laufzeit-/Live-Schema-/Lieferformat-Abnahme, keine Codekorrektur. Q02 gilt für kundenspezifische Trigger/Constraints/DLLs/Jobs; weitere Grenzen siehe oben und Fragen (interne Referenz). Externe Betriebs-/Schemaabweichungen sind nicht durch die statische Analyse ausgeschlossen.
Gemeinsame Nebenwirkungen LEGACY
Block17 ergänzt6001/6002/6003/6004/6005 ausschließlich für direkte Info-/Dialog-/Logmeldungen; keine BASE-Mail/API. Parameter, Auswahl, Return und Fachwirkung jeID.
Block16 ergänzt explizit3031/3032/3041/3042/3060/3500 für die direkten Info-/Logmeldungen. Keine BASE-Vererbung bzw. Mail-/API-Nebenwirkung; Fachdateien/SQL/Returns pro ID prüfen. Keine pauschale Übernahme alter Dateiverträge.
Stand 2026-10-02; statisch geprüft am Commit f1d82a003b62f2658f06eaa943dc685ab219bdf3. Mitglieder ausschließlich durch expliziten Profilverweis: Block 07, IDs 2000, 2001, 2010, 2020, 3020, 3021, 3030, 3040, 3050, 3070.
Block 13: Profil für 1067,1070,1073 nur bezüglich direkter cInfoTools-Dialog-/Logmeldungen und ihrer zwei Einstellungen wiederverwendet. Deren Datei-/Rückgabe-/Timeout-/Folgeaufrufverträge stehen ausschließlich in den Einzelbeschreibungen; die nachfolgenden Block-07-PFAD-/Return-Aussagen sind keine pauschale Behauptung für diese drei neuen IDs.
Block14 nutzt LEGACY ausschließlich für direkte Info-/Logpfade von 1100,1101,1102,1103,1200,1207,1208,1209,1223. Keine pauschale Übernahme der nachfolgenden Block07-Datei-/Rückgabeverträge; konkrete Unterschiede stehen je ID. 1203 verwendet nur direkten MsgBox-Fehlerpfad und ist kein Mitglied.
Block15 ergänzt ausdrücklich 1224/1225/1226/1320/1360/1400/1401/2021/2023 sowie die Veraltet-Stubs 2028/2029/2032/2046/2047/2048. Nur direkte Info-/Logpfade; konkrete Datei-/Return-/Timeoutverträge stehen je ID. Die sechs Stubs erben als Klasse zwar BASE, instanziieren aber nichts und rufen deren Start/Ende nicht auf. 2022 hat keinen solchen Pfad.
Abgrenzung und Ablauf
Die belegten LEGACY-Einstiege rufen cSchnitt_Basis.Start/Ende nicht auf. Die ursprünglichen Block-07-Klassen erben auch nicht von der Basis; für spätere statische Stubs gilt dagegen nur die fehlende Start-/Ende-Ausführung. Deshalb keine BASE-Mail-/API-/Outboxbeziehungen übernehmen. MAILTO wird zwar von cProgramm angelegt, aber hier nicht ausgewertet; ebenso keine fachliche Auswertung von MANUELL oder SILENT. RunWithDialog setzt MANUELL. Dialogunterdrückung kommt aus Settings.Info.SupressDialogs (Clientkonstruktor False, Worker True), kein belegter ZW-Schlüssel.
Die folgenden Datei-/Return-Aussagen gelten für Block 07, nicht pauschal für spätere Profilmitglieder. PFAD ist FileImport, auch bei den Exporten 2001/3021: vorhandene Datei erforderlich, OpenFileDialog statt SaveFileDialog. Der lokale Registrywert PEP3/PFADESCHNITT/<ID> speichert den zuletzt verwendeten Ordner; dies ist keine serverseitige Systemeinstellung. Fehlender PFAD-Schlüssel ergibt False mit Fehlermeldung. Value.ToString bei Nothing liegt vor dem Fach-Try und kann ungefangen abbrechen. Datei-Existenzprüfung und Startmeldung liegen ebenfalls davor.
Meldungen: ShowProgrammStart/ShowProgrammEndeSuccessDialog mit Level 51, ShowProgrammEndeErrorDialog 102, ShowExceptionDialog 105 → ZeigeInfoEvent, ggf. Dialog, Log. Kein Nachweis über externe Event-Abonnentenwirkungen. Dialog kann unterdrückt sein, Logging bleibt separat. Die acht Ausführen-Funktionen außer 2010/3070 haben keinen abschließenden Return und liefern deshalb Boolean False, auch wenn Daten geändert wurden. 2020/3020 und die beiden Exporte haben zusätzlich im Fachhelfer keinen Return; dort wird bereits Success=False und ein Fehlerdialog gewählt. 2000/3030/3040/3050 können Erfolg melden und dennoch False liefern.
Einstellungen
| Beziehung | Schlüssel / Variable | Default | Einfluss | Wirkung | Beleg |
|---|---|---|---|---|---|
| LEGACY-S001 | GLOBAL_LOGLEVEL / GLOBAL_LOGLEVEL | 50 | Init → Info.LogLevel | Meldung ab einschließlich Grenzwert in Datei/DB; verändert keine Fachdaten | LEGACY:SET, LEGACY:INIT, LEGACY:INFO |
| LEGACY-S002 | GLOBAL_LOGLEVELEVLOG / GLOBAL_LOGLEVELEVENTLOG | 0 | Init → Info.LogLevelEvLog | Windows-Ereignisprotokoll nur bei Level > Grenze, Grenze > 0 und Level < 200 | LEGACY:SET, LEGACY:INIT, LEGACY:INFO |
Beide gezeigten Settings-Konstruktoren setzen AlwaysToFile=True. Oberhalb LogLevel werden Datei UND DB versucht; bei False nur DB, Datei als Fehlerfallback. Datei unter ApplicationData/PEP/LogFiles/yyyyMMdd_peplog.txt (Append). DB-Fehler werden als False abgefangen, verhindern nicht zwingend den Import. EventLog-Fehler werden geschluckt. Direkte Fachcommands des Block 07 setzen kein Timeout; SQL_TIMEOUT ist in diesen zehn Pfaden nicht gelesen. Keine zusätzliche fachliche ZW-Einstellung nachgewiesen, auch nicht in spCalcUmsatzPlan.
Datenbeziehungen
DB-Rolle PEP4-Anmeldedatenbank. Log schreibt über eigene Verbindung; nicht atomar mit Fachoperationen. fnUserId liest minimalen UserID zum rechten 25-Zeichen-Teil von SUSER_NAME(), sonst 0.
| Beziehung | Tabelle.Feld | Operation | Datenfluss / Verwendung | Bedingung | Beleg |
|---|---|---|---|---|---|
| LEGACY-D001 | Pep3Log.UserID | INSERT | dbo.fnUserId() | Meldungslevel erreicht DB-Log | LEGACY:INFO, LEGACY:FN |
| LEGACY-D002 | Pep3Log.Datum | INSERT | getdate() | Meldungslevel erreicht DB-Log | LEGACY:INFO |
| LEGACY-D003 | Pep3Log.Kurz | INSERT | Kurztext, maximal 255 Zeichen | Meldungslevel erreicht DB-Log | LEGACY:INFO |
| LEGACY-D004 | Pep3Log.LogText | INSERT | Detailtext einschließlich Pfad/ggf. Exception | Meldungslevel erreicht DB-Log | LEGACY:INFO |
| LEGACY-D005 | Pep3Log.Modul | INSERT | Modulbezeichnung, maximal 50 Zeichen | Meldungslevel erreicht DB-Log | LEGACY:INFO |
| LEGACY-D006 | Pep3Log.InfoLevel | INSERT | 51, 102 oder 105 je Meldung | Meldungslevel erreicht DB-Log | LEGACY:INFO |
| LEGACY-D007 | tblUser.Name | SELECT | Abgleich RIGHT(SUSER_NAME(),25) | fnUserId bei Log-INSERT | LEGACY:FN |
| LEGACY-D008 | tblUser.UserID | SELECT | MIN(UserID), fehlend → 0 | fnUserId bei Log-INSERT | LEGACY:FN |
Quellenverzeichnis
| Kürzel | Quelldatei am geprüften Commit |
|---|---|
| E | PEP4/ZW/Allgemein.vb |
| P, LEGACY:P | PEP4/cSchnittstellen/Programme/cProgramme.vb |
| PRJ | PEP4/cSchnittstellen/cSchnittstellen.vbproj |
| B | PEP4/cSchnittstellen/Programme/Schnittstellen/cSchnittGanter.vb |
| SALDO | Sqlfiles/PEP4Functions/SaldenTerminal.sql |
| ANW | Sqlfiles/PEP4Functions/IsAnwesend.sql |
| ZW, LEGACY:SET | PEP4/ZW/Einstellungen/cEinstellungenZw.vb |
| LEGACY:INFO | PEP4/cTools/cInfoTools.vb |
| LEGACY:INIT | PEP4/ZW/Einstellungen/cSetting.vb |
| LEGACY:FN | Sqlfiles/PEP4Functions/fnUserId.sql |
Siehe auch: Übersicht der Schnittstellen. Keine Ausführung oder Codekorrektur.