Inhaltsverzeichnis
Schnittstelle 1222: Aprocon-Istzeitdatei
Diese technische Referenz beschreibt die Eingänge, Ausgänge und aktiven Codepfade von Aprocon-Istzeitdatei. Sie ist keine Anleitung zur ungeprüften Ausführung.
Stand: 02.10.2026, Desktop-Commit f1d82a003b62f2658f06eaa943dc685ab219bdf3. Statisch dokumentiert; Nutzerprüfung offen. Kein Import, Datenbank- oder HTTP-Test.
Dokumentiert / statisch geprüft: 2026-10-02. Statisch dokumentiert; Nutzerprüfung offen. Keine Schnittstelle ausgeführt.
Identität und Quellenstand
eProgramm.ImpIstzeitenApc = 1222. Aktive feste Registrierung → cSchnittZeitenAproconFile.Ausführen; Projekteinschluss bestätigt (E,P,PRJ). Active=True, InAutomatik=True und ManuellerAufruf=True (Registrierung bzw. Klassendefault); NurAufServer=False (Default bzw. Registrierung). Keine Aussage über eingerichtete Automatik oder produktive Nutzung.
Zweck, Parameter und Dateivertrag
Aprocon-Personalzeiten-Datei → Zeitereignisse oder Buffer; kein direkter Istzeiten-INSERT. PFAD=FileImport (Dialog PERSONALZEITEN.CSV), FID=NumberLong default0. SetLongValue(FID,True) wird aufgerufen, dessen Rückgabewert ignoriert. Encoding.Default, Semikolon, Quotes/Trim, keine Kopfzeilen-/Feldzahlprüfung. Positionen ab1:1 externe Filiale,2 Personal-ApcID,3 Datum,4 Kommen,5 Gehen.
FID>0 bildet Mappingnummer=Dateifiliale*100+FID, sonst Dateifiliale. Filialen.ApcID>0→FilialID; unbekannte Filiale wird übersprungen, Dublette setzt Fehler und erste Zuordnung bleibt. Nur exakt '00:00:00' wird ausgelassen. StrToLng-Fehler→0; StrToDate-Fehler→31.12.2099, kein fachlicher Reject. K/G je eigener SP-Aufruf. VB ApcID-Parameter varchar15, SP bigint: Konvertierung beachten.
Betrieb und frühere Wiki-Hinweise
Keine Archivierung/Transaktion/Calc; Commands Standard30s. Verbindungs-/Mappingfehler liegen außerhalb Parser-Try und können BASE-Ende überspringen. Parserfehler setzt Stopp; inneres Import untypisiert, Shared liefert result als Boolean.
Bisherige Wiki nennt korrekt Filialen.ApcID, Personen.ApcID und Terminal Art allgemein(0). Die Empfehlung Terminal-ID=Filialnummer ist keine SQL-Pflicht: SP sucht per FilialID/Art0. Warnung vor paralleler Terminal-/Waagenversorgung wegen Doppelbuchungen bleibt als Betriebsregel erhalten; dieser Import enthält keine generelle Waagenverbotsprüfung.
Gemeinsame SQL-Kette und tatsächliche Wirkung
ZeitbuchungAddAprocon(@ApcID bigint,@Datum datetime,@FilialID bigint,@Kennung char1) → GetPersonIDFromApcID und GetEinstellungZw. Jede neue Kombination Datum/ApcID/Kennung wird vor Personen-/Filialprüfung in ZeitereignisseImportiert markiert; Filiale ist kein Teil des Dedupmatches. Keine Transaktion: scheitert der Folgeschritt, kann der Marker Wiederholung sperren.
GetPersonIDFromApcID reduziert Datum auf Tag und verlangt genau eine Joinzeile: Personen.ApcID, ZETage-Wochentagsbit (DATEFIRST-abhängig), Eintritt/Austritt, InZw=1/aktiv=1 sowie taggültige ITZeit.IsAktiv1 und ITORGA. Auch überlappende Historien können mehr als eine Zeile und deshalb NULL erzeugen.
Aktive Filiale bestimmen, Uhren TOP1 mit FilialID/Art0 laden (ohne Reihenfolge), dann ITUmbuchung (FilialeAlt passend, ersatzweise NULL) am Tag/Person. Terminal wird nach Umbuchung nicht neu ermittelt. Sind Person/Filiale bekannt: Kennzeichen aus SCHNITT_APC_ZE_KZStd, optional ITPEP.PepGruppe als Stammkostenstelle; Zeitereignisse INSERT. Sonst ZeitereignisseBuffer INSERT QuelleA mit ggf.NULL-Zuordnungen.
ZE-F01: Stammkostenstellen-SELECT fehlt Personenfilter (nur Datum/HauptGruppe1). ZE-F02: CStatus-UPDATE benutzt @PersonID=@PersonID statt Spaltenvergleich; es markiert alle aktiven ITZeit-Personen am Buchungstag (CStatus1/tsnow), nicht nur die buchende Person. Das ist Markierung, nicht ausgeführte Zeitberechnung.
SQLGetEinstellungZw liest EinstellungenZw.Wert nach Schlüssel; fehlender Schlüssel ergibtNULL, numerische Konvertierung kann scheitern. Keine eigene Fachtransaktion. Test: Dedup nach Teilfehler, unaufgelöste/mehrdeutige Person, Umbuchungsterminal, fremde Hauptgruppe, breite CStatus-Markierung.
Systemeinstellungen und gemeinsame Nebenwirkungen
Gemeinsames Profil: BASE (interne Referenz).
| Beziehung | Schlüssel / Variable | Default | Einflussweg | Wirkung | Beleg |
|---|---|---|---|---|---|
| 1222-S001 | SCHNITT_APC_ZE_KZStd / kein VB-Feld; SQL-Lesen | Kein VB-Default im Einstellungsinitialisierer gefunden | SQL GetEinstellungZw | Standardkennzeichen; fehlender Wert→NULL | SQL,EST,SET |
| 1222-S002 | CALC_ZE_KOSTENSTELLE_EINTRAGEN / CALCZEKostenstelleEintragen | 0 | SQL GetEinstellungZw | !=0 nutzt ungefilterte ITPEP-Hauptgruppe als Kennzeichen | SQL,EST,SET |
Nur belegte Profilzuordnung; Fachdaten und Rückmeldung sind nicht atomar. Defaults sind keine Livewerte.
Feldbeziehungen
Unqualifizierte Fachobjekte in der Anmeldedatenbank; Import.dbo ausdrücklich Importdatenbank. Dateifelder stehen separat im Dateivertrag.
| Beziehung | Tabelle.Feld | Operation | Datenfluss / Verwendung | Bedingung | Beleg |
|---|---|---|---|---|---|
| 1222-D001 | Filialen.FilialID | SELECT | ApcID>0; erste Zuordnung, Dublette setzt Fehler | Aktiver Pfad; kein Laufzeitnachweis | B |
| 1222-D002 | Filialen.ApcID | SELECT | ApcID>0; erste Zuordnung, Dublette setzt Fehler | Aktiver Pfad; kein Laufzeitnachweis | B |
| 1222-D003 | ZeitereignisseImportiert.Datum | SELECT/INSERT | Dedup und Marker: Datum/ApcID/Kennung, kein Filialschlüssel | SP erreicht | SQL |
| 1222-D004 | ZeitereignisseImportiert.Person | SELECT/INSERT | Dedup und Marker: Datum/ApcID/Kennung, kein Filialschlüssel | SP erreicht | SQL |
| 1222-D005 | ZeitereignisseImportiert.Kennung | SELECT/INSERT | Dedup und Marker: Datum/ApcID/Kennung, kein Filialschlüssel | SP erreicht | SQL |
| 1222-D006 | Personen.PersonID | SELECT | Genau eine gültige APC-Personjoinzeile; Wochentagsbit | UDF | PID |
| 1222-D007 | Personen.ApcID | SELECT | Genau eine gültige APC-Personjoinzeile; Wochentagsbit | UDF | PID |
| 1222-D008 | Personen.ZETage | SELECT | Genau eine gültige APC-Personjoinzeile; Wochentagsbit | UDF | PID |
| 1222-D009 | Personen.Eintritt | SELECT | Genau eine gültige APC-Personjoinzeile; Wochentagsbit | UDF | PID |
| 1222-D010 | Personen.Austritt | SELECT | Genau eine gültige APC-Personjoinzeile; Wochentagsbit | UDF | PID |
| 1222-D011 | Personen.InZw | SELECT | Genau eine gültige APC-Personjoinzeile; Wochentagsbit | UDF | PID |
| 1222-D012 | Personen.aktiv | SELECT | Genau eine gültige APC-Personjoinzeile; Wochentagsbit | UDF | PID |
| 1222-D013 | ITZeit.PersonenStammID | SELECT | Gültige aktive Zeitregel | UDF | PID |
| 1222-D014 | ITZeit.von | SELECT | Gültige aktive Zeitregel | UDF | PID |
| 1222-D015 | ITZeit.bis | SELECT | Gültige aktive Zeitregel | UDF | PID |
| 1222-D016 | ITZeit.IsAktiv | SELECT | Gültige aktive Zeitregel | UDF | PID |
| 1222-D017 | ITORGA.PersonenStammID | SELECT | Gültiger Organisationssatz | UDF | PID |
| 1222-D018 | ITORGA.von | SELECT | Gültiger Organisationssatz | UDF | PID |
| 1222-D019 | ITORGA.bis | SELECT | Gültiger Organisationssatz | UDF | PID |
| 1222-D020 | Filialen.FilialID | SELECT | Aktive Zielfiliale | SP | SQL |
| 1222-D021 | Filialen.aktiv | SELECT | Aktive Zielfiliale | SP | SQL |
| 1222-D022 | Uhren.ID | SELECT | TOP1 Art0 vor Umbuchung | SP | SQL |
| 1222-D023 | Uhren.FilialID | SELECT | TOP1 Art0 vor Umbuchung | SP | SQL |
| 1222-D024 | Uhren.Art | SELECT | TOP1 Art0 vor Umbuchung | SP | SQL |
| 1222-D025 | ITUmbuchung.FilialeAlt | SELECT | Person/Tag; erst passende Altfiliale, sonst NULL | SP | SQL |
| 1222-D026 | ITUmbuchung.FilialeNeu | SELECT | Person/Tag; erst passende Altfiliale, sonst NULL | SP | SQL |
| 1222-D027 | ITUmbuchung.von | SELECT | Person/Tag; erst passende Altfiliale, sonst NULL | SP | SQL |
| 1222-D028 | ITUmbuchung.bis2 | SELECT | Person/Tag; erst passende Altfiliale, sonst NULL | SP | SQL |
| 1222-D029 | ITUmbuchung.PersonID | SELECT | Person/Tag; erst passende Altfiliale, sonst NULL | SP | SQL |
| 1222-D030 | EinstellungenZw.Einstellung | SELECT | SCHNITT_APC_ZE_KZStd/CALC_ZE_KOSTENSTELLE_EINTRAGEN | SQL-UDF | EST |
| 1222-D031 | EinstellungenZw.Wert | SELECT | SCHNITT_APC_ZE_KZStd/CALC_ZE_KOSTENSTELLE_EINTRAGEN | SQL-UDF | EST |
| 1222-D032 | ITPEP.PepGruppe | SELECT | TOP1 gültige Hauptgruppe ohne Personenfilter | Stammkostenstelle-Schalter<>0 | SQL |
| 1222-D033 | ITPEP.von | SELECT | TOP1 gültige Hauptgruppe ohne Personenfilter | Stammkostenstelle-Schalter<>0 | SQL |
| 1222-D034 | ITPEP.bis | SELECT | TOP1 gültige Hauptgruppe ohne Personenfilter | Stammkostenstelle-Schalter<>0 | SQL |
| 1222-D035 | ITPEP.HauptGruppe | SELECT | TOP1 gültige Hauptgruppe ohne Personenfilter | Stammkostenstelle-Schalter<>0 | SQL |
| 1222-D036 | Zeitereignisse.Datum | INSERT | @Datum | Person und Filiale bekannt | SQL |
| 1222-D037 | Zeitereignisse.PersonID | INSERT | aufgelöste Person | Person und Filiale bekannt | SQL |
| 1222-D038 | Zeitereignisse.Terminal | INSERT | Uhren-ID vor Umbuchung | Person und Filiale bekannt | SQL |
| 1222-D039 | Zeitereignisse.Kennzeichen | INSERT | Standard/ungefilterte Hauptgruppe | Person und Filiale bekannt | SQL |
| 1222-D040 | Zeitereignisse.Kennung | INSERT | @Kennung | Person und Filiale bekannt | SQL |
| 1222-D041 | Zeitereignisse.Filiale | INSERT | aufgelöste/umgebuchte Filiale | Person und Filiale bekannt | SQL |
| 1222-D042 | ZeitereignisseBuffer.Datum | INSERT | @Datum | Person oder Filiale nicht bekannt | SQL |
| 1222-D043 | ZeitereignisseBuffer.ApcID | INSERT | @ApcID | Person oder Filiale nicht bekannt | SQL |
| 1222-D044 | ZeitereignisseBuffer.Kennzeichen | INSERT | ggf.NULL | Person oder Filiale nicht bekannt | SQL |
| 1222-D045 | ZeitereignisseBuffer.Kennung | INSERT | @Kennung | Person oder Filiale nicht bekannt | SQL |
| 1222-D046 | ZeitereignisseBuffer.PersonenStammID | INSERT | Person oder NULL | Person oder Filiale nicht bekannt | SQL |
| 1222-D047 | ZeitereignisseBuffer.Filiale | INSERT | Filiale oder NULL | Person oder Filiale nicht bekannt | SQL |
| 1222-D048 | ZeitereignisseBuffer.Terminal | INSERT | Terminal oder NULL | Person oder Filiale nicht bekannt | SQL |
| 1222-D049 | ZeitereignisseBuffer.Quelle | INSERT | A | Person oder Filiale nicht bekannt | SQL |
| 1222-D050 | CStatus.PersonenStammID | SELECT | Join ITZeit/Datum; @PersonID=@PersonID tautologisch | Alle aktiven Personen am Buchungstag | SQL |
| 1222-D051 | CStatus.Datum | SELECT | Join ITZeit/Datum; @PersonID=@PersonID tautologisch | Alle aktiven Personen am Buchungstag | SQL |
| 1222-D052 | ITZeit.bis2 | SELECT | Gültigkeitsende CStatus-Markierung | CStatus-Pfad | SQL |
| 1222-D053 | CStatus.CStatus | UPDATE | 1 | Alle aktiven Personen am Buchungstag | SQL |
| 1222-D054 | CStatus.ts | UPDATE | getdate() | Alle aktiven Personen am Buchungstag | SQL |
Teststatus und Pflege
Keine Laufzeit-/Live-Schema-/Lieferformat-Abnahme. Fachbefunde und Grenzen siehe oben und Fragen (interne Referenz); kundenspezifische Trigger/Constraints, DLLs und Jobs bleiben Q02. Nutzerprüfung offen.
Gemeinsame Rückmeldung
Die Basis kann abhängig von MAIL_SCHNITTSTELLEONSUCCESS/ONERROR, MAIL_SCHNITTSTELLETO und SMTP-Einstellungen Mail speichern/versenden (Dokumente/Outbox). SCHNITT_MELDUNG_SchnittstelleOnSuccess/OnError steuert sendmail der Rückmeldungs-API, nicht deren gesamten Aufruf. MANUELL unterdrückt Mail, SILENT beendet den Abschluss früh. GLOBAL_LOGLEVEL/GLOBAL_LOGLEVELEVLOG steuert Logging (Pep3Log/Eventlog). Keine Fachimporttransaktion und kein API-Erfolgsnachweis; Serverwirkung bleibt ungeprüft.
Quellen je Datei
Repository: seegerstefan/pep4desktop, master, obiger Commit. Je Datei ein Quellenlink; Kürzel in den Tabellen. Private Git-Quellen setzen Zugriffsrechte voraus.
Offene Abnahme
Externe Liefer-/API-Verträge und installierte Migrationen sind nicht bestätigt. Vor einem Test die beschriebenen Datenrisiken in einer isolierten Umgebung klären. Bei1214/1215 sind weitere Calc-/CalcPep-Feldwirkungen ausdrücklich noch nicht vollständig analysiert.