Inhaltsverzeichnis

Schnittstelle 6050: Plan-/Stempelzeiten atomisieren

Dokumentiert / statisch geprüft: 2026-10-02. Statisch dokumentiert; Nutzerprüfung offen. Keine Schnittstelle ausgeführt.

Identität und Quellenstand

eProgramm.IstZeitenAtomisieren = 6050. Aktive feste Registrierung → cSchnittTransfer.IstZeitenAtomisieren (E,P). Registrierung und erreichbare Quellen geprüft; installierte Binärdateien ungeprüft. Active=True, InAutomatik=true, ManuellerAufruf=true, 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.

Parameter und drei alternative Verträge

DATVON/DATBIS: Datumsmuster, registriert−100/0. BASE wertet sie aus; SQL-Fenster einschließlich. DATBIS um Mitternacht kann Gehen am Endtag ausschließen. Kein Dateiinput/-output und kein anschließendes Calc/CalcPep. Berechnete Ist-/Planwerte müssen bereits vorliegen.

Art1 TRANS_ATOM_PEP: zuerst globale Korrektur von Pep2.AnteilStempelzeit (InIstzeit1, Minutenanteile), globales TRUNCATE Istzeiten und StundenAtomar-Löschung im Fenster. Puffer aus Angerechnet und gewähltem positiven Anwesenheitswert. Plan-only: Summe(Netto)×24/Faktor aus PepBerechnet. Ohne Istplan erfolgt direkte Verteilung aus ITPEP.Anteil; restliche Puffer werden über alle Pep2-Anteile verteilt, nicht nur InIstzeit1. Danach globale KZNetto0-Korrektur bei Kennzeichen.Netto0, auch außerhalb des Fensters.

Art2 TRANS_ATOM_STEMPEL: Angerechnet>0 und gewählte Nettoquelle>0. Fehlende Arbeitszeit wird nur nach DATUM, nicht Person geprüft: Buchung einer anderen Person kann Direktverteilung blockieren. Netto2-Anteile je Person/Filiale/Tag; bei Gesamtsumme0 wird der volle Tageswert jeder Filiale zugeordnet. Gruppe erhält die Filiale, nicht eine PEP-Gruppen-ID. Plan-only-Person−1/Summe(Pep2.Netto) ohne ×24, anders als Art1.

Art3 TRANS_ATOM_PEP_DECKUNG: Planzeiten auf Datum rebased; Pause zunächst Gruppe−1, dann Nachbargruppe links/rechts zugeordnet, verwaiste Pause und Nullintervalle entfernt. Öffnungsrahmen aus Umsätze oder ganzer Tag, erweitert durch Minutenparameter; erstes/letztes Planintervall erweitert und auf Schnitt begrenzt. Arbeitszeiten.Netto1 wird gegen Rahmen geschnitten. Mehrfachüberschneidungen können mehrfach zählen. Pause ist keine Planzeit, kann aber über Rahmen Istzuordnung erhalten. Atom/AtomStunde unabhängig; Verdichtung Person−1, Faktor1.

Stunden, Wiederholung und Befunde

Art1/2 liest Arbeitszeiten für Stunden separat, unabhängig von gewählter Nettoquelle: Kommen>=Von und Gehen⇐Bis, kein Geloeschtfilter. Mitternacht ist bei Stunde(Gehen)<Stunde(Kommen) nicht robust. Stundenanteile Minuten/60. Art3 zählt pro überlappender Stunde das ganze Planintervall per DATEDIFF, nicht nur den Stundenschnitt: Überzählungsrisiko.

Art1/2 liest AtomStunde/Verdichten und Art1 Quelle als SQL-Rohwerte; Art3 nutzt geladene VB-Werte. Reload/Validierung kann daher abweichende Stände ergeben. Kein Gesamtrollback/Lock über Puffer, DELETE/INSERT und Anteilsupdates. Parallele Läufe teilen Istzeiten. Deaktivierte Flags lassen Altbestand stehen; Wiederholung ersetzt nur jeweilige Zielbereiche. Nicht unterstützte Art → leere CommandText/Fehler, da CaseElse fehlt. CALC_Atomisieren_Rahmen_InPep wird hier nicht gelesen. Temp-Rahmen/-Resultate sind sitzungsintern.

Einstellungen und gemeinsame Nebenwirkungen

Gemeinsames Profil: BASE (interne Referenz).

Beziehung Schlüssel / Variable Default Einflussweg Wirkung Beleg
6050-S001 SQL_TIMEOUT / SQLTimeOut 60 VB SQLCommand Ausführungstimeout B,ZW
6050-S002 CALC_Atomisieren_Art / tmpLong 1 VB SelectCase 1PEP,2Stempelung,3PEPDeckung; andereWerteleereCommandText→Fehler B,ZW
6050-S003 CALC_Atomisieren_Quelle / CALC_Atomisieren_Quelle 4 PEP SQLRohwert;Stempelung VBParameter 1Anwesend,2AnwesendKZNetto,3AnwesendCut,4CutKZNetto,5Bezahlt,sonst0 P1,P2,ZW
6050-S004 CALC_Atomisieren_RahmenAuf / CALC_Atomisieren_RahmenAuf 0 NurDeckung VBParameter Minuten-Erweiterung Rahmen/erstesKommen/letztesGehen B,P3,ZW
6050-S005 CALC_Atomisieren_RahmenZu / CALC_Atomisieren_RahmenZu 0 NurDeckung VBParameter Minuten-Erweiterung Rahmen/erstesKommen/letztesGehen B,P3,ZW
6050-S006 CALC_Atomisieren_RahmenPepAuf / CALC_Atomisieren_RahmenPepAuf 0 NurDeckung VBParameter Minuten-Erweiterung Rahmen/erstesKommen/letztesGehen B,P3,ZW
6050-S007 CALC_Atomisieren_RahmenPepZu / CALC_Atomisieren_RahmenPepZu 0 NurDeckung VBParameter Minuten-Erweiterung Rahmen/erstesKommen/letztesGehen B,P3,ZW
6050-S008 CALC_Atomisieren_Verdichten / CALC_Atomisieren_Verdichten False DeckungVB,PEP/StempelungSQLRohwert PersonID-1/Faktor1, Dauer*Faktor; beiPEP/StempelungnurStundentabelle B,P1,P2,P3,ZW
6050-S009 CALC_Atomisieren_Atom / CALC_Atomisieren_Atom True NurDeckung VBParameter Tagestabelle löschen/neuschreiben; PEP/StempelungTagimmer B,P3,ZW
6050-S010 CALC_Atomisieren_AtomStunde / CALC_Atomisieren_AtomStunde True DeckungVB,PEP/StempelungSQLRohwert Stundentabelle löschen/neuschreiben; FalsebehältaltenStand B,P1,P2,P3,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
6050-D001 EinstellungenZw.Einstellung SELECT SQLGetEinstellungZw PEPQuelle und1/2Stunde/Verdichten Rohwert, keinVBHashcheck P1,P2,GET
6050-D002 EinstellungenZw.Wert SELECT SQLGetEinstellungZw PEPQuelle und1/2Stunde/Verdichten Rohwert, keinVBHashcheck P1,P2,GET
6050-D003 BerechneteZeiten.Person SELECT Istzeitenpuffer 1/2Tag,Quelle>0;PEPAngerechnet<>0,Stempel>0 P1,P2
6050-D004 BerechneteZeiten.Datum SELECT Istzeitenpuffer 1/2Tag,Quelle>0;PEPAngerechnet<>0,Stempel>0 P1,P2
6050-D005 BerechneteZeiten.Angerechnet SELECT Istzeitenpuffer 1/2Tag,Quelle>0;PEPAngerechnet<>0,Stempel>0 P1,P2
6050-D006 BerechneteZeiten.Anwesend SELECT Istzeitenpuffer 1/2Tag,Quelle>0;PEPAngerechnet<>0,Stempel>0 P1,P2
6050-D007 BerechneteZeiten.AnwesendKZNetto SELECT Istzeitenpuffer 1/2Tag,Quelle>0;PEPAngerechnet<>0,Stempel>0 P1,P2
6050-D008 BerechneteZeiten.AnwesendCut SELECT Istzeitenpuffer 1/2Tag,Quelle>0;PEPAngerechnet<>0,Stempel>0 P1,P2
6050-D009 BerechneteZeiten.AnwesendCutKZNetto SELECT Istzeitenpuffer 1/2Tag,Quelle>0;PEPAngerechnet<>0,Stempel>0 P1,P2
6050-D010 BerechneteZeiten.AnwesendBezahlt SELECT Istzeitenpuffer 1/2Tag,Quelle>0;PEPAngerechnet<>0,Stempel>0 P1,P2
6050-D011 BerechneteZeiten.NettoFaktor SELECT Istzeitenpuffer 1/2Tag,Quelle>0;PEPAngerechnet<>0,Stempel>0 P1,P2
6050-D012 Istzeiten.— TRUNCATE GlobalgemeinsamerPuffer Nur1/2;keineTaskisolation P1,P2
6050-D013 Istzeiten.Zeilen TRUNCATE GlobalgemeinsamerPuffer Nur1/2;keineTaskisolation P1,P2
6050-D014 Istzeiten.Name INSERT/SELECT Angerechnet/gewähltesAnwesend/Faktor Nur1/2Datumbereich P1,P2
6050-D015 Istzeiten.Datum INSERT/SELECT Angerechnet/gewähltesAnwesend/Faktor Nur1/2Datumbereich P1,P2
6050-D016 Istzeiten.Brutto INSERT/SELECT Angerechnet/gewähltesAnwesend/Faktor Nur1/2Datumbereich P1,P2
6050-D017 Istzeiten.Netto INSERT/SELECT Angerechnet/gewähltesAnwesend/Faktor Nur1/2Datumbereich P1,P2
6050-D018 Istzeiten.Faktor INSERT/SELECT Angerechnet/gewähltesAnwesend/Faktor Nur1/2Datumbereich P1,P2
6050-D019 Istzeiten.— DELETE Bereitsdirektverteiltentfernen 1keinIstPlan,2KEINEArbeitszeitamDatum vonIRGENDEINERPerson P1,P2
6050-D020 Istzeiten.Zeilen DELETE Bereitsdirektverteiltentfernen 1keinIstPlan,2KEINEArbeitszeitamDatum vonIRGENDEINERPerson P1,P2
6050-D021 Pep2.Name SELECT Planverteilung/Deckung undAnteile 1 AnteilkorrekturGLOBAL,2Nettoohne*24,3PlanminutennachDatumrebased P1,P2,P3,ANTEIL
6050-D022 Pep2.Datum SELECT Planverteilung/Deckung undAnteile 1 AnteilkorrekturGLOBAL,2Nettoohne*24,3PlanminutennachDatumrebased P1,P2,P3,ANTEIL
6050-D023 Pep2.Kommen SELECT Planverteilung/Deckung undAnteile 1 AnteilkorrekturGLOBAL,2Nettoohne*24,3PlanminutennachDatumrebased P1,P2,P3,ANTEIL
6050-D024 Pep2.Gehen SELECT Planverteilung/Deckung undAnteile 1 AnteilkorrekturGLOBAL,2Nettoohne*24,3PlanminutennachDatumrebased P1,P2,P3,ANTEIL
6050-D025 Pep2.Status SELECT Planverteilung/Deckung undAnteile 1 AnteilkorrekturGLOBAL,2Nettoohne*24,3PlanminutennachDatumrebased P1,P2,P3,ANTEIL
6050-D026 Pep2.Bereich SELECT Planverteilung/Deckung undAnteile 1 AnteilkorrekturGLOBAL,2Nettoohne*24,3PlanminutennachDatumrebased P1,P2,P3,ANTEIL
6050-D027 Pep2.Netto SELECT Planverteilung/Deckung undAnteile 1 AnteilkorrekturGLOBAL,2Nettoohne*24,3PlanminutennachDatumrebased P1,P2,P3,ANTEIL
6050-D028 Pep2.AnteilStempelzeit SELECT Planverteilung/Deckung undAnteile 1 AnteilkorrekturGLOBAL,2Nettoohne*24,3PlanminutennachDatumrebased P1,P2,P3,ANTEIL
6050-D029 Pep2.AnteilStempelzeit UPDATE Minutenanteil proPersonTag Nur1GLOBALungefiltertDatum;InIstzeit1,Tagminuten<>0 ANTEIL
6050-D030 PepBerechnet.PersonID SELECT Plan-only-Faktor Nur1; bestehenderCachejoin P1
6050-D031 PepBerechnet.Datum SELECT Plan-only-Faktor Nur1; bestehenderCachejoin P1
6050-D032 PepBerechnet.Faktor SELECT Plan-only-Faktor Nur1; bestehenderCachejoin P1
6050-D033 ITPEP.PersonenStammID SELECT DirektverteilungohnePlan/Arbeitszeit 1/2IstzeitenDatumgültig P1,P2
6050-D034 ITPEP.von SELECT DirektverteilungohnePlan/Arbeitszeit 1/2IstzeitenDatumgültig P1,P2
6050-D035 ITPEP.bis2 SELECT DirektverteilungohnePlan/Arbeitszeit 1/2IstzeitenDatumgültig P1,P2
6050-D036 ITPEP.PepGruppe SELECT DirektverteilungohnePlan/Arbeitszeit 1/2IstzeitenDatumgültig P1,P2
6050-D037 ITPEP.Anteil SELECT DirektverteilungohnePlan/Arbeitszeit 1/2IstzeitenDatumgültig P1,P2
6050-D038 ITZeit.PersonenStammID SELECT Plan-/Stundenfaktor 2/3und1StundeGültigkeit;keinAktivfilter P1,P2,P3
6050-D039 ITZeit.von SELECT Plan-/Stundenfaktor 2/3und1StundeGültigkeit;keinAktivfilter P1,P2,P3
6050-D040 ITZeit.bis2 SELECT Plan-/Stundenfaktor 2/3und1StundeGültigkeit;keinAktivfilter P1,P2,P3
6050-D041 ITZeit.NettoFaktor SELECT Plan-/Stundenfaktor 2/3und1StundeGültigkeit;keinAktivfilter P1,P2,P3
6050-D042 Arbeitszeiten.Person SELECT Stempelverteilung/Stunden/Deckung Keingeloeschtfilter inAtom-SPs; 2ExistenzprüfungenurDatum nichtPerson P1,P2,P3
6050-D043 Arbeitszeiten.Filiale SELECT Stempelverteilung/Stunden/Deckung Keingeloeschtfilter inAtom-SPs; 2ExistenzprüfungenurDatum nichtPerson P1,P2,P3
6050-D044 Arbeitszeiten.Kommen SELECT Stempelverteilung/Stunden/Deckung Keingeloeschtfilter inAtom-SPs; 2ExistenzprüfungenurDatum nichtPerson P1,P2,P3
6050-D045 Arbeitszeiten.Gehen SELECT Stempelverteilung/Stunden/Deckung Keingeloeschtfilter inAtom-SPs; 2ExistenzprüfungenurDatum nichtPerson P1,P2,P3
6050-D046 Arbeitszeiten.Kennzeichen SELECT Stempelverteilung/Stunden/Deckung Keingeloeschtfilter inAtom-SPs; 2ExistenzprüfungenurDatum nichtPerson P1,P2,P3
6050-D047 Arbeitszeiten.Netto2 SELECT Stempelverteilung/Stunden/Deckung Keingeloeschtfilter inAtom-SPs; 2ExistenzprüfungenurDatum nichtPerson P1,P2,P3
6050-D048 Kennzeichen.Kennzeichen SELECT Plananteile/Nettofilter/Pause 1InIstzeitanteile,1/2StundenNetto1,3Anwesenheit+NettooderPause P1,P2,P3,ANTEIL
6050-D049 Kennzeichen.InIstzeit SELECT Plananteile/Nettofilter/Pause 1InIstzeitanteile,1/2StundenNetto1,3Anwesenheit+NettooderPause P1,P2,P3,ANTEIL
6050-D050 Kennzeichen.Netto SELECT Plananteile/Nettofilter/Pause 1InIstzeitanteile,1/2StundenNetto1,3Anwesenheit+NettooderPause P1,P2,P3,ANTEIL
6050-D051 Kennzeichen.Anwesenheit SELECT Plananteile/Nettofilter/Pause 1InIstzeitanteile,1/2StundenNetto1,3Anwesenheit+NettooderPause P1,P2,P3,ANTEIL
6050-D052 Kennzeichen.IstPause SELECT Plananteile/Nettofilter/Pause 1InIstzeitanteile,1/2StundenNetto1,3Anwesenheit+NettooderPause P1,P2,P3,ANTEIL
6050-D053 PepGruppen.PEPGruppenID SELECT Plan-/Stunden-/Öffnungszuordnung FilialGruppe1nur1/2Stunden;3Bereichjoin P1,P2,P3
6050-D054 PepGruppen.Filiale SELECT Plan-/Stunden-/Öffnungszuordnung FilialGruppe1nur1/2Stunden;3Bereichjoin P1,P2,P3
6050-D055 PepGruppen.FilialGruppe SELECT Plan-/Stunden-/Öffnungszuordnung FilialGruppe1nur1/2Stunden;3Bereichjoin P1,P2,P3
6050-D056 PepGruppen.SchnittÖffnung SELECT Plan-/Stunden-/Öffnungszuordnung FilialGruppe1nur1/2Stunden;3Bereichjoin P1,P2,P3
6050-D057 Filialen.FilialID SELECT Pausenplanfreigabe Nur3,NULLPauseStempelAb→2000 P3
6050-D058 Filialen.PauseStempelAb SELECT Pausenplanfreigabe Nur3,NULLPauseStempelAb→2000 P3
6050-D059 Umsätze.GruppenID SELECT Deckungsrahmen Nur3SchnittÖffnung1 sonst0..1440;fehlenderUmsatz→RahmenNULL P3
6050-D060 Umsätze.Datum SELECT Deckungsrahmen Nur3SchnittÖffnung1 sonst0..1440;fehlenderUmsatz→RahmenNULL P3
6050-D061 Umsätze.Auf SELECT Deckungsrahmen Nur3SchnittÖffnung1 sonst0..1440;fehlenderUmsatz→RahmenNULL P3
6050-D062 Umsätze.Zu SELECT Deckungsrahmen Nur3SchnittÖffnung1 sonst0..1440;fehlenderUmsatz→RahmenNULL P3
6050-D063 StundenAtomar.— DELETE ZielTageersetzen 1/2immer;3nurAtomTrue;inklusivDatVonBis P1,P2,P3
6050-D064 StundenAtomar.Zeilen DELETE ZielTageersetzen 1/2immer;3nurAtomTrue;inklusivDatVonBis P1,P2,P3
6050-D065 StundenAtomar.Datum INSERT Tagesaggregate 1PEP/ITPEPAnteile,2Stempelanteile,3Deckung; einigeFelderjeBranchunset P1,P2,P3
6050-D066 StundenAtomar.PersonID INSERT Tagesaggregate 1PEP/ITPEPAnteile,2Stempelanteile,3Deckung; einigeFelderjeBranchunset P1,P2,P3
6050-D067 StundenAtomar.Gruppe INSERT Tagesaggregate 1PEP/ITPEPAnteile,2Stempelanteile,3Deckung; einigeFelderjeBranchunset P1,P2,P3
6050-D068 StundenAtomar.Tätigkeit INSERT Tagesaggregate 1PEP/ITPEPAnteile,2Stempelanteile,3Deckung; einigeFelderjeBranchunset P1,P2,P3
6050-D069 StundenAtomar.StundenPlanNetto INSERT Tagesaggregate 1PEP/ITPEPAnteile,2Stempelanteile,3Deckung; einigeFelderjeBranchunset P1,P2,P3
6050-D070 StundenAtomar.StundenIstNettoKZNetto INSERT Tagesaggregate 1PEP/ITPEPAnteile,2Stempelanteile,3Deckung; einigeFelderjeBranchunset P1,P2,P3
6050-D071 StundenAtomar.StundenIstNetto INSERT Tagesaggregate 1PEP/ITPEPAnteile,2Stempelanteile,3Deckung; einigeFelderjeBranchunset P1,P2,P3
6050-D072 StundenAtomar.StundenBrutto INSERT Tagesaggregate 1PEP/ITPEPAnteile,2Stempelanteile,3Deckung; einigeFelderjeBranchunset P1,P2,P3
6050-D073 StundenAtomar.Faktor INSERT Tagesaggregate 1PEP/ITPEPAnteile,2Stempelanteile,3Deckung; einigeFelderjeBranchunset P1,P2,P3
6050-D074 StundenAtomar.Tätigkeit SELECT Kennzeichen.Netto-Prüfung Nur1 globalUPDATE ohneDatumfilter P1
6050-D075 StundenAtomar.StundenIstNettoKZNetto UPDATE Auf0 beiKennzeichen.Netto0 Nur1GLOBALauchandereTage P1
6050-D076 StundenAtomarStunde.— DELETE StundenStandersetzen NurAtomStundeTrue,inklusivDatumfenster P1,P2,P3
6050-D077 StundenAtomarStunde.Zeilen DELETE StundenStandersetzen NurAtomStundeTrue,inklusivDatumfenster P1,P2,P3
6050-D078 StundenAtomarStunde.Datum INSERT Stunden0..23 ausDauern VerdichtenPerson-1/Faktor1;1/2mitITZeitFilialgruppen P1,P2,P3
6050-D079 StundenAtomarStunde.Stunde INSERT Stunden0..23 ausDauern VerdichtenPerson-1/Faktor1;1/2mitITZeitFilialgruppen P1,P2,P3
6050-D080 StundenAtomarStunde.PersonID INSERT Stunden0..23 ausDauern VerdichtenPerson-1/Faktor1;1/2mitITZeitFilialgruppen P1,P2,P3
6050-D081 StundenAtomarStunde.Gruppe INSERT Stunden0..23 ausDauern VerdichtenPerson-1/Faktor1;1/2mitITZeitFilialgruppen P1,P2,P3
6050-D082 StundenAtomarStunde.StundenIstNettoKzNetto INSERT Stunden0..23 ausDauern VerdichtenPerson-1/Faktor1;1/2mitITZeitFilialgruppen P1,P2,P3
6050-D083 StundenAtomarStunde.Faktor INSERT Stunden0..23 ausDauern VerdichtenPerson-1/Faktor1;1/2mitITZeitFilialgruppen P1,P2,P3
6050-D084 StundenAtomarStunde.StundenPlanNetto INSERT Deckungsplan proStunde Nur3;ganzePlanintervallDauer wirdproerreichteStunde wiederholt stattanteil P3

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 BASE

Block17 ergänzt explizit5314/5315/5316/5317/5318/5319/5323/5324/5325/5326/5327/5328/6000/6006/6007/6008/6009. Alle nutzen BASE-Start/Ende;6001/6002/6003/6004/6005 verwenden LEGACY statt BASE. Fachverträge jeID, keine automatische gemeinsame Kunden-/Dateiwirkung.

Stand: 2026-10-02 · Commit f1d82a003b62f2658f06eaa943dc685ab219bdf3. Gilt ausdrücklich für Block 01: 1012, 1013, 1016, 1017, 1018, 1019, 1079, 1080, 1082, 2016 sowie Block 02: 2011, 2012, 2014, 2015, 2017, 2018, 2019, 2033, 2034, 2041 sowie Block 03: 1057, 1058, 1059, 1060, 2030, 2035, 2040, 2042, 2044 sowie Block 04: 2053, 2054, 1081, 2031, 2052 sowie Block 05: 2045, 2050 sowie Block 06: 3044, Block 08: 1010, 1011, 1015 und Block 10: 1047, 1051 sowie Block 12: 1064. 2024, 1020, 1030, 1048, 1049, 1050, 1052, 1053, 1054, 1061, 1062 und 1063 verwenden diese Basis nicht. 1078 enthält die gleichversionierten Beziehungen weiterhin in seiner Einzelbeschreibung; keine Doppelzählung für 1078. Kein Test-/Deploymentnachweis.

Block 13 ergänzt ausdrücklich 1065,1066,1068,1069,1071,1072,1074: aktive Implementierungen bzw. Hilfsinstanzen erben BASE und rufen Start/Ende auf. Bei 1074 ist AusführungEnde nur bei unbehelligtem Abschluss erreichbar; Ressourcen-/DB-/SP-Fehler können es überspringen. 1067/1070/1073 verwenden direkte LEGACY-Meldungen.

Block14 ergänzt ausdrücklich 1104,1105,1106,1108,1109,1150,1210,1214,1215,1222. Aktive Klassen/Instanzen erben BASE und starten/beenden den Lauf; ungefangene Fehler können das Ende überspringen. Nur gemeinsame Rückmeldung, keine Gesamttransaktion oder erfolgreiche Fachwirkung. 1203 hat keinen BASE-/LEGACY-Pfad.

Block15 ergänzt ausdrücklich 2025/2026/2027/2049 mit erreichbarem Instanz-Start/Ende. Die aktiven Veraltet-Stubs 2028/2029/2032/2046/2047/2048 nutzen trotz Klassenvererbung nur den direkten LEGACY-Meldepfad; keine BASE-Ausführung. 2022 hat keinen Delegate.

Reichweite und Wiederverwendung

Block16 ergänzt ausdrücklich 2051/2055/3043/3512/3513/3520/3521/3522. WebZerf2 nutzt Multi-Start/Ende mit BASE je Teilstufe; IsMultiSchnitt reduziert Dialoge, nicht Mail-/API-Wirkungen. Nach Fehlern können weitere Teilstufen starten. 3011 ohne Delegate;3031/3032/3041/3042/3060/3500 nur LEGACY.

Die ausdrücklich zugeordneten Programmregistrierungen mit ihren Implementierungen erben cSchnitt_Basis und rufen AusführungStart/AusführungEnde auf. Gemeinsam geprüfte Basisklasse/Registrierung; Mail-/Logging-/API-Details aus der dokumentierten Pilotprüfung desselben Commits wiederverwendet. Nicht automatisch auf jede zukünftige Schnittstelle übertragen: Erreichbarkeit, Overrides, Sonderpfade und Quellenstand jeweils prüfen.

Start setzt Status/Protokoll zurück. Fehlerstatus steigt nur (0→1→2). Fehlerfrei() ist True nur bei Status 0. SILENT unterdrückt die Startanzeige und beendet AusführungEnde sofort. MANUELL wird über Schlüsselinzidenz erkannt, unterdrückt direkte Mail und API-sendmail, nicht die API-Meldung selbst. MAILTO leer → MAIL_SCHNITTSTELLETO. Bei nicht lokal gefangener Exception kann der Abschluss ausfallen (besonders 1079/1082); 2016 hat einen getrennten Rückgabe-/Fehlerstatusbefund; 2017 reicht ebenfalls den Instanzstatus nicht als Shared-Rückgabe durch. 1057–1060 besitzen untypisierte Shared-Einstiege ohne Return (Nothing) und übernehmen Modul nicht; Instanz-Abschluss separat betrachten. Die acht Exporte aus Block 02/03 verwenden cSchnittExport mit Start/Ende.

Erfolg: OnSuccess; Fehlerstatus 1: OnSuccess ODER OnError; Stoppstatus 2: OnError. Mail nur nicht MANUELL und nicht SILENT; API wird sonst unabhängig vom sendmail-Schalter aufgerufen. Direkte Mail speichert Body/Outbox in eigener Transaktion (keine Fachimporttransaktion). SendOutbox(5) kann ältere fällige Schnittstellenmails versenden und deren Anhänge lesen; diese Fachpfade erzeugen selbst keine Anhänge. SMTP-Testadresse kann Zieladresse ersetzen. Mail-/API-Ergebnis ist kein verlässlicher Bestandteil von Fehlerfrei().

Einstellungen

Beziehung Schlüssel / Variable Default Einfluss Wirkung Beleg
BASE-S001 MAIL_SCHNITTSTELLEONSUCCESS / MAIL_SchnittstelleOnSuccess False Basis Direkte Mail bei Result 0 oder1, nicht MANUELL/SILENT BASE:BASE, BASE:SET
BASE-S002 MAIL_SCHNITTSTELLEONERROR / MAIL_SchnittstelleOnError False Basis Direkte Mail bei Result 1 oder2, nicht MANUELL/SILENT BASE:BASE, BASE:SET
BASE-S003 SCHNITT_MELDUNG_SchnittstelleOnSuccess / SCHNITT_MELDUNG_SchnittstelleOnSuccess False Basis/API sendmail=1 bei Result 0 oder1, nicht MANUELL/SILENT; API-Meldung sonst weiterhin sendmail=0 BASE:BASE, BASE:SET
BASE-S004 SCHNITT_MELDUNG_SchnittstelleOnError / SCHNITT_MELDUNG_SchnittstelleOnError True Basis/API sendmail=1 bei Result 1 oder2, nicht MANUELL/SILENT BASE:BASE, BASE:SET
BASE-S005 MAIL_SCHNITTSTELLETO / MAIL_SchnittstelleTo leer Mail Ersatz bei leerem MAILTO; Semikolonliste BASE:MAIL, BASE:SET
BASE-S006 MAIL_SMTP_SERVER / MAIL_SMTPServer leer SMTP Server für direkten Versand BASE:MAIL, BASE:SET
BASE-S007 MAIL_USER / MAIL_User leer SMTP Nichtleer setzt NetworkCredential und überschreibt Defaultcredentials BASE:MAIL, BASE:SET
BASE-S008 MAIL_PASS / MAIL_Pass leer; verschlüsselte Einstellung SMTP Passwort für explizite Credentials; kein Geheimnis dokumentiert BASE:MAIL, BASE:SET
BASE-S009 MAIL_USEDEFAULTCREDENTIALS / MAIL_UseDefaultCredentials False SMTP SmtpClient.UseDefaultCredentials; ggf. durch MAIL_USER überschrieben BASE:MAIL, BASE:SET
BASE-S010 MAIL_SSL / MAIL_SSL True SMTP SmtpClient.EnableSsl BASE:MAIL, BASE:SET
BASE-S011 MAIL_TESTADRESSE / MAIL_TestAdresse nichtleere Testadresse im Quellcode (Wert bewusst nicht kopiert) SMTP Nichtleer ersetzt tatsächlichen To-Empfänger, auch wenn MAILTO gesetzt BASE:MAIL, BASE:SET
BASE-S012 MAIL_FROM / MAIL_From leer SMTP Absenderadresse BASE:MAIL, BASE:SET
BASE-S013 MAIL_FROM_NAME / MAIL_FromName leer SMTP Absendername BASE:MAIL, BASE:SET
BASE-S014 GLOBAL_LOGLEVEL / GLOBAL_LOGLEVEL 50 Logging Persistenz bei InfoLevel>=Schwelle; Start/Erfolg51, ImportError102 BASE:INIT, BASE:LOG, BASE:SET
BASE-S015 GLOBAL_LOGLEVELEVLOG / GLOBAL_LOGLEVELEVENTLOG 0 Logging Eventlog bei Level>Schwelle, Schwelle>0 und Level<200 BASE:INIT, BASE:LOG, BASE:SET

Datenbeziehungen

DB-Rolle Anmeldung; Logging über cInfoTools-Verbindung. Keine Geheimnisse/Livewerte. Indizes verknüpfen jede Mitglieds-ID mit diesen Beziehungen, auch wenn die Details nur einmal stehen.

Beziehung Tabelle.Feld Operation Datenfluss / Verwendung Bedingung Beleg
BASE-D001 Dokumente.oFilename INSERT MAIL_BODY Direkte Rückmeldung aktiviert BASE:MAIL
BASE-D002 Dokumente.oFilesize INSERT Byteanzahl Body Direkte Rückmeldung aktiviert BASE:MAIL
BASE-D003 Dokumente.Daten INSERT cFn.StringToByteArray(MailBody) Direkte Rückmeldung aktiviert BASE:MAIL
BASE-D004 Dokumente.UserID INSERT dbo.fnUserId() Direkte Rückmeldung aktiviert BASE:MAIL
BASE-D005 Dokumente.ts INSERT getdate() Direkte Rückmeldung aktiviert BASE:MAIL
BASE-D006 Outbox.mTo INSERT MAILTO oder MAIL_SCHNITTSTELLETO; je Semikolonadresse Direkte Rückmeldung aktiviert BASE:MAIL
BASE-D007 Outbox.mCc INSERT leer Direkte Rückmeldung aktiviert BASE:MAIL
BASE-D008 Outbox.mFrom INSERT leer Direkte Rückmeldung aktiviert BASE:MAIL
BASE-D009 Outbox.mSubject INSERT Statusabhängiger Betreff Direkte Rückmeldung aktiviert BASE:MAIL
BASE-D010 Outbox.mBodyID INSERT ID des gespeicherten Bodys Direkte Rückmeldung aktiviert BASE:MAIL
BASE-D011 Outbox.mBodyHtml INSERT False Direkte Rückmeldung aktiviert BASE:MAIL
BASE-D012 Outbox.mDelayUntil INSERT getdate() Direkte Rückmeldung aktiviert BASE:MAIL
BASE-D013 Outbox.mStatus INSERT 1 Direkte Rückmeldung aktiviert BASE:MAIL
BASE-D014 Outbox.mSize INSERT Bodyzeichenanzahl (ohne Anhänge) Direkte Rückmeldung aktiviert BASE:MAIL
BASE-D015 Outbox.refArt INSERT 0 Direkte Rückmeldung aktiviert BASE:MAIL
BASE-D016 Outbox.RefID INSERT 0 Direkte Rückmeldung aktiviert BASE:MAIL
BASE-D017 Outbox.MailArt INSERT 5 (SchnittstellenMeldung) Direkte Rückmeldung aktiviert BASE:MAIL
BASE-D018 Outbox.UserID INSERT fnUserId() Direkte Rückmeldung aktiviert BASE:MAIL
BASE-D019 Outbox.ts INSERT getdate() Direkte Rückmeldung aktiviert BASE:MAIL
BASE-D020 Outbox.ID SELECT SendOutbox(5): fällige Mails; auch frühere Outbox-Einträge derselben MailArt Versandpfad BASE:MAIL
BASE-D021 Outbox.mFrom SELECT SendOutbox(5): fällige Mails; auch frühere Outbox-Einträge derselben MailArt Versandpfad BASE:MAIL
BASE-D022 Outbox.mTo SELECT SendOutbox(5): fällige Mails; auch frühere Outbox-Einträge derselben MailArt Versandpfad BASE:MAIL
BASE-D023 Outbox.mCc SELECT SendOutbox(5): fällige Mails; auch frühere Outbox-Einträge derselben MailArt Versandpfad BASE:MAIL
BASE-D024 Outbox.mBodyID SELECT SendOutbox(5): fällige Mails; auch frühere Outbox-Einträge derselben MailArt Versandpfad BASE:MAIL
BASE-D025 Outbox.mSubject SELECT SendOutbox(5): fällige Mails; auch frühere Outbox-Einträge derselben MailArt Versandpfad BASE:MAIL
BASE-D026 Outbox.mBodyHtml SELECT SendOutbox(5): fällige Mails; auch frühere Outbox-Einträge derselben MailArt Versandpfad BASE:MAIL
BASE-D027 Outbox.mStatus SELECT SendOutbox(5): fällige Mails; auch frühere Outbox-Einträge derselben MailArt Versandpfad BASE:MAIL
BASE-D028 Outbox.mDelayUntil SELECT SendOutbox(5): fällige Mails; auch frühere Outbox-Einträge derselben MailArt Versandpfad BASE:MAIL
BASE-D029 Outbox.MailArt SELECT SendOutbox(5): fällige Mails; auch frühere Outbox-Einträge derselben MailArt Versandpfad BASE:MAIL
BASE-D030 Outbox.mSent UPDATE Erfolg → getdate() Versandpfad BASE:MAIL
BASE-D031 Outbox.mStatus UPDATE Erfolg → 0; Fehler → +1, bei Status 20 pauschal -1 ohne WHERE Versandpfad BASE:MAIL
BASE-D032 Outbox.mDelayUntil UPDATE Fehler → Staffel 2/5/10/30 Minuten; ab Status 12 CASE ohne ELSE → NULL Versandpfad BASE:MAIL
BASE-D033 Dokumente.ID SELECT Body/Anhänge laden Versandpfad BASE:MAIL, BASE:DOC
BASE-D034 Dokumente.oFilename SELECT Body/Anhänge laden Versandpfad BASE:MAIL, BASE:DOC
BASE-D035 Dokumente.Daten SELECT Body/Anhänge laden Versandpfad BASE:MAIL, BASE:DOC
BASE-D036 OutboxAttachment.OutBoxID SELECT Anhangszuordnung; diese Basisaufrufe erstellt selbst keine Anhänge SendOutbox kann ältere Mailart-5-Einträge versenden BASE:MAIL
BASE-D037 OutboxAttachment.DokumenteID SELECT Anhangszuordnung; diese Basisaufrufe erstellt selbst keine Anhänge SendOutbox kann ältere Mailart-5-Einträge versenden BASE:MAIL
BASE-D038 Pep3Log.UserID INSERT fnUserId() InfoLevel >= GLOBAL_LOGLEVEL, DB-Logging möglich BASE:LOG
BASE-D039 Pep3Log.Datum INSERT getdate() InfoLevel >= GLOBAL_LOGLEVEL, DB-Logging möglich BASE:LOG
BASE-D040 Pep3Log.Kurz INSERT Kurztext max255 InfoLevel >= GLOBAL_LOGLEVEL, DB-Logging möglich BASE:LOG
BASE-D041 Pep3Log.LogText INSERT Protokoll InfoLevel >= GLOBAL_LOGLEVEL, DB-Logging möglich BASE:LOG
BASE-D042 Pep3Log.Modul INSERT Modulname max50 InfoLevel >= GLOBAL_LOGLEVEL, DB-Logging möglich BASE:LOG
BASE-D043 Pep3Log.InfoLevel INSERT Start/Erfolg=51; Importfehler=102; weitere Mail-Meldungen InfoLevel >= GLOBAL_LOGLEVEL, DB-Logging möglich BASE:LOG
BASE-D044 tblUser.Name SELECT fnUserId: min(UserID) WHERE Name=RIGHT(SUSER_NAME(),25), sonst 0 Mail-/Logpersistenz BASE:USER
BASE-D045 tblUser.UserID SELECT fnUserId: min(UserID) WHERE Name=RIGHT(SUSER_NAME(),25), sonst 0 Mail-/Logpersistenz BASE:USER

Weitere Ausgänge und Grenzen

Logdateien unter ApplicationData/PEP/LogFiles; kontextabhängig Windows-Eventlog. Start/Erfolg InfoLevel 51, Importfehler 102; Schwellen beeinflussen Persistenz. SQL-fnUserId liest tblUser anhand RIGHT(SUSER_NAME(),25). API Send(MELDUNG) nutzt Anmeldungskontext und fest codierten Endpoint; dessen Serverimplementierung fehlt in dieser Quellenbasis (Q01).

Bekannte gemeinsame Befunde aus Pilot: Outbox-Retry bei Status 20 setzt mStatus=-1 ohne WHERE; Retry-CASE ab Status 12 ohne ELSE → NULL. Nicht korrigiert. Keine Kundendaten oder Zugangswerte übertragen.

Quellenverzeichnis

Siehe auch: Übersicht der Schnittstellen. Keine Ausführung oder Codekorrektur.