====== Schnittstelle 1014: Aprocon-Bons importieren und Umsatzaggregate erneuern ====== Dokumentiert / statisch geprüft: **2026-10-02**. Statisch dokumentiert; Nutzerprüfung offen. Keine Schnittstelle ausgeführt. ===== Identität und Quellenstand ===== ''eProgramm.ImpUmsatzBonsAprocon = 1014''. Aktive feste Registrierung → ''cSchnittKRApc.Import_Bons'' (E,P). Registrierung und erreichbare Quellen geprüft; installierte Binärdateien ungeprüft. Active=True, InAutomatik=true, ManuellerAufruf=true, NurAufServer=true. 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. ===== Eingang und Aufrufkette ===== DATUM wird als Datumsmuster ausgewertet (Untergrenze einschließlich); kein Datei-/FID-Parameter. ODBC-Verbindung über SCHNITT_APC_DSN. Bons JOIN Bonpositionen ab DATUM wird unaggregiert gelesen; Zeitstempel aus Bons.Datum und Uhrzeit. Storno/Abgeschlossen werden hier noch nicht geprüft, erst in nachfolgenden Summenfiltern. BASE → CheckApcConnect → globales TRUNCATE SCHNITT_APC_BONS → cBulkData → SCHNITT_APC_BONS_SP → CalcKrMischSteuerSatz → SCHNITT_KRUmsatzBonToGruppe → TageskurvenAusStundenUmsatz100 → Calc_UmsatzKGR_Fuellen. Kein Zeit-/PEP-Motor und kein Umsätze.Ist-Write in dieser Kette. ===== Ziele und Summen ===== KRBons wird für System A ab DATUM ersetzt; gesamtes Staging wird als System A übernommen. Mischsteuer wird für alle Systeme ab DATUM neu berechnet, ohne Storno-/Preistyp-/Abgeschlossenfilter: Netto0 → Quote1, sonst Brutto/Netto. Umsätze.IstKassenBerichtNetto wird nur über vorhandene A-Zuordnungen nachgerechnet, auch bei Fixierung; Null-/Nullsteuerfehler sind möglich. Gruppen-SP setzt IstKassenBon/Netto ab DATUM global0; anschließende gemappte Summen beachten IstFixed. IstKassenBonMenge wird nicht zurückgesetzt: alte Mengen bleiben bei leerem neuen Quellstand. Summen berücksichtigen Artikel-/Warengruppenzuordnung, Storno0, Abgeschlossen NULL→1 und Preistyp NULL→0; UmsatzVK/Stunden haben strengere Filter Abgeschlossen=1 und Preistyp<>7. Verkäuferzahl zählt Bon-Nummerngruppen. UmsatzVK/UmsätzeIstStunde werden global ab DATUM gelöscht, nicht auf das Quellsystem beschränkt. Tageskurven:100 Tage vor SQL-Now, vorhandene IDs Gruppe×100+Wochentag+90. Fehlende Stunden können NULL-Anteile ergeben; DATEFIRST beeinflusst IDs. Fehlende Umsätze/Tageskurven werden nicht angelegt. KGR löscht zuerst nichtmanuelle Werte ab DATUM; leere KRKassenGeräte führt erst danach zu RETURN. Artikel-/Warengruppen-NichtVerteilen und vierstufige Kassengruppenpriorität werden berücksichtigt. Fehlende Zuordnung kann NOTNULL/FK verletzen. BETWEEN mit bis2 als Datum schließt spätere Uhrzeiten am letzten Tag aus. Kundenupdate betrifft alle historischen Tage seit2000, nicht nur DATUM. Vorhandene manuelle KGR-Zeile verhindert INSERT. ===== Wiederholung, Schema und Fehler ===== Keine Gesamttransaktion über TRUNCATE/Bulk/SP-Folgen; Teilstand nach Fehler. cBulkData liest SQL-Systemmetadaten, mapped nach Spaltenname, Buffer75000; Dispose kann auch im Fehlerpfad restlichen Buffer schreiben. BulkCopy-Timeout ist getrennt von SQL_TIMEOUT. Unbekannte Typen werden nicht als DataColumn angelegt, Mapping dennoch erzeugt: installationsabhängiger Fehler. Parallele Importe teilen das Staging. Migrationen0767/0822/0836/0851/0864: Staging nullable, BonNummer/Gerät ergänzt; KGR mit NOTNULL/FKs und PK(PepGruppe,KassenGruppe,Datum), manuell Default0, bis2 Computed. Kein PK/Unique für KRBons/Staging in diesen Quellen. Live-Trigger/ODBC-Typen Q02/Q13 ungeprüft. Exception → BASE-Stopp/FehlerfreiFalse, kein Rollback früherer Fachwrites. ===== Einstellungen und gemeinsame Nebenwirkungen ===== Gemeinsames Profil: BASE (interne Referenz). ^ Beziehung ^ Schlüssel / Variable ^ Default ^ Einflussweg ^ Wirkung ^ Beleg ^ | 1014-S001 | ''SCHNITT_APC_DSN'' / ''SCHNITT_AproconDSN'' | (Wert bewusst nicht dokumentiert) | CheckApcConnect/ODBC | Externe Aproconquelle | BASE,ZW | | 1014-S002 | ''SQL_TIMEOUT'' / ''SQLTimeOut'' | 60 | ODBC und lokale Fachcommands | cBulkData-Metadaten/BulkCopy separat Standardtimeout | B,BULK,ZW | | 1014-S003 | ''SCHNITT_KR_UmsatzFixedBeachten'' / ''SCHNITT_KR_UmsatzFixedBeachten'' | True | Gruppen-SP | Nur Auffüllen IstKassenBon-Werte geschützt; vorheriger Reset und andere Ziele nicht geschützt | GRUPPE,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 ^ | 1014-D001 | ''Aprocon.Bons.Nummer'' | SELECT | Bonkopf→Staging | Datum>=DATUM; Datum+Uhrzeit(TimeSpan), kein Filial-/Statusfilter im ODBC | B | | 1014-D002 | ''Aprocon.Bons.Bonnummer'' | SELECT | Bonkopf→Staging | Datum>=DATUM; Datum+Uhrzeit(TimeSpan), kein Filial-/Statusfilter im ODBC | B | | 1014-D003 | ''Aprocon.Bons.Filiale'' | SELECT | Bonkopf→Staging | Datum>=DATUM; Datum+Uhrzeit(TimeSpan), kein Filial-/Statusfilter im ODBC | B | | 1014-D004 | ''Aprocon.Bons.Abteilung'' | SELECT | Bonkopf→Staging | Datum>=DATUM; Datum+Uhrzeit(TimeSpan), kein Filial-/Statusfilter im ODBC | B | | 1014-D005 | ''Aprocon.Bons.Datum'' | SELECT | Bonkopf→Staging | Datum>=DATUM; Datum+Uhrzeit(TimeSpan), kein Filial-/Statusfilter im ODBC | B | | 1014-D006 | ''Aprocon.Bons.Uhrzeit'' | SELECT | Bonkopf→Staging | Datum>=DATUM; Datum+Uhrzeit(TimeSpan), kein Filial-/Statusfilter im ODBC | B | | 1014-D007 | ''Aprocon.Bons.Storno'' | SELECT | Bonkopf→Staging | Datum>=DATUM; Datum+Uhrzeit(TimeSpan), kein Filial-/Statusfilter im ODBC | B | | 1014-D008 | ''Aprocon.Bons.abgeschlossen'' | SELECT | Bonkopf→Staging | Datum>=DATUM; Datum+Uhrzeit(TimeSpan), kein Filial-/Statusfilter im ODBC | B | | 1014-D009 | ''Aprocon.Bons.Geraet'' | SELECT | Bonkopf→Staging | Datum>=DATUM; Datum+Uhrzeit(TimeSpan), kein Filial-/Statusfilter im ODBC | B | | 1014-D010 | ''Aprocon.Bons.Verkaufstyp'' | SELECT | Bonkopf→Staging | Datum>=DATUM; Datum+Uhrzeit(TimeSpan), kein Filial-/Statusfilter im ODBC | B | | 1014-D011 | ''Aprocon.Bonpositionen.Bon'' | SELECT | Position via Bon=Bons.Nummer | Mehrere Positionen je Bon; keine Vormengenaggregation | B | | 1014-D012 | ''Aprocon.Bonpositionen.Artikel'' | SELECT | Position via Bon=Bons.Nummer | Mehrere Positionen je Bon; keine Vormengenaggregation | B | | 1014-D013 | ''Aprocon.Bonpositionen.Menge'' | SELECT | Position via Bon=Bons.Nummer | Mehrere Positionen je Bon; keine Vormengenaggregation | B | | 1014-D014 | ''Aprocon.Bonpositionen.Verkaufspersonal'' | SELECT | Position via Bon=Bons.Nummer | Mehrere Positionen je Bon; keine Vormengenaggregation | B | | 1014-D015 | ''Aprocon.Bonpositionen.Netto'' | SELECT | Position via Bon=Bons.Nummer | Mehrere Positionen je Bon; keine Vormengenaggregation | B | | 1014-D016 | ''Aprocon.Bonpositionen.Netto_Rabatt'' | SELECT | Position via Bon=Bons.Nummer | Mehrere Positionen je Bon; keine Vormengenaggregation | B | | 1014-D017 | ''Aprocon.Bonpositionen.Brutto'' | SELECT | Position via Bon=Bons.Nummer | Mehrere Positionen je Bon; keine Vormengenaggregation | B | | 1014-D018 | ''Aprocon.Bonpositionen.Brutto_Rabatt'' | SELECT | Position via Bon=Bons.Nummer | Mehrere Positionen je Bon; keine Vormengenaggregation | B | | 1014-D019 | ''Aprocon.Bonpositionen.Belastung'' | SELECT | Position via Bon=Bons.Nummer | Mehrere Positionen je Bon; keine Vormengenaggregation | B | | 1014-D020 | ''Aprocon.Bonpositionen.Preistyp'' | SELECT | Position via Bon=Bons.Nummer | Mehrere Positionen je Bon; keine Vormengenaggregation | B | | 1014-D021 | ''SCHNITT_APC_BONS.—'' | TRUNCATE | Alle Stagingzeilen | Vor Quellreader/Bulk; auch leere Quellmenge leert Staging | B | | 1014-D022 | ''SCHNITT_APC_BONS.Zeilen'' | TRUNCATE | Alle Stagingzeilen | Vor Quellreader/Bulk; auch leere Quellmenge leert Staging | B | | 1014-D023 | ''SCHNITT_APC_BONS.Nummer'' | INSERT/SELECT | Bulkfeldliste→KRBons | Buffer75000,Flush bei>75000/Dispose; alle Stagingzeilen weiterkopiert | B,BULK,SP | | 1014-D024 | ''SCHNITT_APC_BONS.Bonnummer'' | INSERT/SELECT | Bulkfeldliste→KRBons | Buffer75000,Flush bei>75000/Dispose; alle Stagingzeilen weiterkopiert | B,BULK,SP | | 1014-D025 | ''SCHNITT_APC_BONS.Filiale'' | INSERT/SELECT | Bulkfeldliste→KRBons | Buffer75000,Flush bei>75000/Dispose; alle Stagingzeilen weiterkopiert | B,BULK,SP | | 1014-D026 | ''SCHNITT_APC_BONS.Abteilung'' | INSERT/SELECT | Bulkfeldliste→KRBons | Buffer75000,Flush bei>75000/Dispose; alle Stagingzeilen weiterkopiert | B,BULK,SP | | 1014-D027 | ''SCHNITT_APC_BONS.Datum'' | INSERT/SELECT | Bulkfeldliste→KRBons | Buffer75000,Flush bei>75000/Dispose; alle Stagingzeilen weiterkopiert | B,BULK,SP | | 1014-D028 | ''SCHNITT_APC_BONS.Artikel'' | INSERT/SELECT | Bulkfeldliste→KRBons | Buffer75000,Flush bei>75000/Dispose; alle Stagingzeilen weiterkopiert | B,BULK,SP | | 1014-D029 | ''SCHNITT_APC_BONS.Menge'' | INSERT/SELECT | Bulkfeldliste→KRBons | Buffer75000,Flush bei>75000/Dispose; alle Stagingzeilen weiterkopiert | B,BULK,SP | | 1014-D030 | ''SCHNITT_APC_BONS.Verkaufspersonal'' | INSERT/SELECT | Bulkfeldliste→KRBons | Buffer75000,Flush bei>75000/Dispose; alle Stagingzeilen weiterkopiert | B,BULK,SP | | 1014-D031 | ''SCHNITT_APC_BONS.BetragNetto'' | INSERT/SELECT | Bulkfeldliste→KRBons | Buffer75000,Flush bei>75000/Dispose; alle Stagingzeilen weiterkopiert | B,BULK,SP | | 1014-D032 | ''SCHNITT_APC_BONS.BetragNettoRabatt'' | INSERT/SELECT | Bulkfeldliste→KRBons | Buffer75000,Flush bei>75000/Dispose; alle Stagingzeilen weiterkopiert | B,BULK,SP | | 1014-D033 | ''SCHNITT_APC_BONS.BetragBrutto'' | INSERT/SELECT | Bulkfeldliste→KRBons | Buffer75000,Flush bei>75000/Dispose; alle Stagingzeilen weiterkopiert | B,BULK,SP | | 1014-D034 | ''SCHNITT_APC_BONS.BetragBruttoRabatt'' | INSERT/SELECT | Bulkfeldliste→KRBons | Buffer75000,Flush bei>75000/Dispose; alle Stagingzeilen weiterkopiert | B,BULK,SP | | 1014-D035 | ''SCHNITT_APC_BONS.Belastung'' | INSERT/SELECT | Bulkfeldliste→KRBons | Buffer75000,Flush bei>75000/Dispose; alle Stagingzeilen weiterkopiert | B,BULK,SP | | 1014-D036 | ''SCHNITT_APC_BONS.Storno'' | INSERT/SELECT | Bulkfeldliste→KRBons | Buffer75000,Flush bei>75000/Dispose; alle Stagingzeilen weiterkopiert | B,BULK,SP | | 1014-D037 | ''SCHNITT_APC_BONS.Preistyp'' | INSERT/SELECT | Bulkfeldliste→KRBons | Buffer75000,Flush bei>75000/Dispose; alle Stagingzeilen weiterkopiert | B,BULK,SP | | 1014-D038 | ''SCHNITT_APC_BONS.Verkaufstyp'' | INSERT/SELECT | Bulkfeldliste→KRBons | Buffer75000,Flush bei>75000/Dispose; alle Stagingzeilen weiterkopiert | B,BULK,SP | | 1014-D039 | ''SCHNITT_APC_BONS.abgeschlossen'' | INSERT/SELECT | Bulkfeldliste→KRBons | Buffer75000,Flush bei>75000/Dispose; alle Stagingzeilen weiterkopiert | B,BULK,SP | | 1014-D040 | ''SCHNITT_APC_BONS.Gerät'' | INSERT/SELECT | Bulkfeldliste→KRBons | Buffer75000,Flush bei>75000/Dispose; alle Stagingzeilen weiterkopiert | B,BULK,SP | | 1014-D041 | ''KRBons.—'' | DELETE | Aprocon-Bons abDATUM | SystemKennung A; andere Systeme bleiben erhalten | SP | | 1014-D042 | ''KRBons.Zeilen'' | DELETE | Aprocon-Bons abDATUM | SystemKennung A; andere Systeme bleiben erhalten | SP | | 1014-D043 | ''KRBons.Nummer'' | INSERT/SELECT | Staging+konstantA; spätere Steuer-/Umsatzaggregate | Beträge unverändert, Rabatte/Belastung importiert aber Summen nutzen BetragNetto/Brutto | SP,STEUER,GRUPPE,KGR | | 1014-D044 | ''KRBons.Bonnummer'' | INSERT/SELECT | Staging+konstantA; spätere Steuer-/Umsatzaggregate | Beträge unverändert, Rabatte/Belastung importiert aber Summen nutzen BetragNetto/Brutto | SP,STEUER,GRUPPE,KGR | | 1014-D045 | ''KRBons.Filiale'' | INSERT/SELECT | Staging+konstantA; spätere Steuer-/Umsatzaggregate | Beträge unverändert, Rabatte/Belastung importiert aber Summen nutzen BetragNetto/Brutto | SP,STEUER,GRUPPE,KGR | | 1014-D046 | ''KRBons.Abteilung'' | INSERT/SELECT | Staging+konstantA; spätere Steuer-/Umsatzaggregate | Beträge unverändert, Rabatte/Belastung importiert aber Summen nutzen BetragNetto/Brutto | SP,STEUER,GRUPPE,KGR | | 1014-D047 | ''KRBons.Datum'' | INSERT/SELECT | Staging+konstantA; spätere Steuer-/Umsatzaggregate | Beträge unverändert, Rabatte/Belastung importiert aber Summen nutzen BetragNetto/Brutto | SP,STEUER,GRUPPE,KGR | | 1014-D048 | ''KRBons.Artikel'' | INSERT/SELECT | Staging+konstantA; spätere Steuer-/Umsatzaggregate | Beträge unverändert, Rabatte/Belastung importiert aber Summen nutzen BetragNetto/Brutto | SP,STEUER,GRUPPE,KGR | | 1014-D049 | ''KRBons.Menge'' | INSERT/SELECT | Staging+konstantA; spätere Steuer-/Umsatzaggregate | Beträge unverändert, Rabatte/Belastung importiert aber Summen nutzen BetragNetto/Brutto | SP,STEUER,GRUPPE,KGR | | 1014-D050 | ''KRBons.Verkaufspersonal'' | INSERT/SELECT | Staging+konstantA; spätere Steuer-/Umsatzaggregate | Beträge unverändert, Rabatte/Belastung importiert aber Summen nutzen BetragNetto/Brutto | SP,STEUER,GRUPPE,KGR | | 1014-D051 | ''KRBons.BetragNetto'' | INSERT/SELECT | Staging+konstantA; spätere Steuer-/Umsatzaggregate | Beträge unverändert, Rabatte/Belastung importiert aber Summen nutzen BetragNetto/Brutto | SP,STEUER,GRUPPE,KGR | | 1014-D052 | ''KRBons.BetragNettoRabatt'' | INSERT/SELECT | Staging+konstantA; spätere Steuer-/Umsatzaggregate | Beträge unverändert, Rabatte/Belastung importiert aber Summen nutzen BetragNetto/Brutto | SP,STEUER,GRUPPE,KGR | | 1014-D053 | ''KRBons.BetragBrutto'' | INSERT/SELECT | Staging+konstantA; spätere Steuer-/Umsatzaggregate | Beträge unverändert, Rabatte/Belastung importiert aber Summen nutzen BetragNetto/Brutto | SP,STEUER,GRUPPE,KGR | | 1014-D054 | ''KRBons.BetragBruttoRabatt'' | INSERT/SELECT | Staging+konstantA; spätere Steuer-/Umsatzaggregate | Beträge unverändert, Rabatte/Belastung importiert aber Summen nutzen BetragNetto/Brutto | SP,STEUER,GRUPPE,KGR | | 1014-D055 | ''KRBons.Belastung'' | INSERT/SELECT | Staging+konstantA; spätere Steuer-/Umsatzaggregate | Beträge unverändert, Rabatte/Belastung importiert aber Summen nutzen BetragNetto/Brutto | SP,STEUER,GRUPPE,KGR | | 1014-D056 | ''KRBons.Storno'' | INSERT/SELECT | Staging+konstantA; spätere Steuer-/Umsatzaggregate | Beträge unverändert, Rabatte/Belastung importiert aber Summen nutzen BetragNetto/Brutto | SP,STEUER,GRUPPE,KGR | | 1014-D057 | ''KRBons.Preistyp'' | INSERT/SELECT | Staging+konstantA; spätere Steuer-/Umsatzaggregate | Beträge unverändert, Rabatte/Belastung importiert aber Summen nutzen BetragNetto/Brutto | SP,STEUER,GRUPPE,KGR | | 1014-D058 | ''KRBons.Verkaufstyp'' | INSERT/SELECT | Staging+konstantA; spätere Steuer-/Umsatzaggregate | Beträge unverändert, Rabatte/Belastung importiert aber Summen nutzen BetragNetto/Brutto | SP,STEUER,GRUPPE,KGR | | 1014-D059 | ''KRBons.abgeschlossen'' | INSERT/SELECT | Staging+konstantA; spätere Steuer-/Umsatzaggregate | Beträge unverändert, Rabatte/Belastung importiert aber Summen nutzen BetragNetto/Brutto | SP,STEUER,GRUPPE,KGR | | 1014-D060 | ''KRBons.Gerät'' | INSERT/SELECT | Staging+konstantA; spätere Steuer-/Umsatzaggregate | Beträge unverändert, Rabatte/Belastung importiert aber Summen nutzen BetragNetto/Brutto | SP,STEUER,GRUPPE,KGR | | 1014-D061 | ''KRBons.SystemKennung'' | INSERT/SELECT | Staging+konstantA; spätere Steuer-/Umsatzaggregate | Beträge unverändert, Rabatte/Belastung importiert aber Summen nutzen BetragNetto/Brutto | SP,STEUER,GRUPPE,KGR | | 1014-D062 | ''KRMischSteuerSatz.—'' | DELETE | Alle Systeme abDATUM | Vor Berechnung | STEUER | | 1014-D063 | ''KRMischSteuerSatz.Zeilen'' | DELETE | Alle Systeme abDATUM | Vor Berechnung | STEUER | | 1014-D064 | ''KRMischSteuerSatz.SystemKennung'' | INSERT/SELECT | BruttoSum/NettoSum, beiNetto0→1 | Alle KRBons-Systeme/Filialen, KEIN Storno-/Abgeschlossen-/Preistypfilter | STEUER | | 1014-D065 | ''KRMischSteuerSatz.EFiliale'' | INSERT/SELECT | BruttoSum/NettoSum, beiNetto0→1 | Alle KRBons-Systeme/Filialen, KEIN Storno-/Abgeschlossen-/Preistypfilter | STEUER | | 1014-D066 | ''KRMischSteuerSatz.Datum'' | INSERT/SELECT | BruttoSum/NettoSum, beiNetto0→1 | Alle KRBons-Systeme/Filialen, KEIN Storno-/Abgeschlossen-/Preistypfilter | STEUER | | 1014-D067 | ''KRMischSteuerSatz.Steuersatz'' | INSERT/SELECT | BruttoSum/NettoSum, beiNetto0→1 | Alle KRBons-Systeme/Filialen, KEIN Storno-/Abgeschlossen-/Preistypfilter | STEUER | | 1014-D068 | ''KRFilialenSystemkennung.FilialID'' | SELECT | Gruppe-/Steuerzuordnung | Mehrfachmapping kann Summen/Updates vervielfachen | STEUER,GRUPPE | | 1014-D069 | ''KRFilialenSystemkennung.SystemKennung'' | SELECT | Gruppe-/Steuerzuordnung | Mehrfachmapping kann Summen/Updates vervielfachen | STEUER,GRUPPE | | 1014-D070 | ''KRFilialenSystemkennung.PEPGruppenID'' | SELECT | Gruppe-/Steuerzuordnung | Mehrfachmapping kann Summen/Updates vervielfachen | STEUER,GRUPPE | | 1014-D071 | ''Umsätze.Datum'' | SELECT | Join/Quotient/Schutz | Nur bestehende Gruppe/Tag-Zeilen | STEUER,GRUPPE | | 1014-D072 | ''Umsätze.GruppenID'' | SELECT | Join/Quotient/Schutz | Nur bestehende Gruppe/Tag-Zeilen | STEUER,GRUPPE | | 1014-D073 | ''Umsätze.IstKassenBericht'' | SELECT | Join/Quotient/Schutz | Nur bestehende Gruppe/Tag-Zeilen | STEUER,GRUPPE | | 1014-D074 | ''Umsätze.IstFixed'' | SELECT | Join/Quotient/Schutz | Nur bestehende Gruppe/Tag-Zeilen | STEUER,GRUPPE | | 1014-D075 | ''Umsätze.IstKassenBerichtNetto'' | UPDATE | IstKassenBericht/Steuersatz | Mapping SystemA,Datum>=DATUM; keinIstFixed,Steuersatz0 ergibt Fehler | STEUER | | 1014-D076 | ''Umsätze.IstKassenBon'' | UPDATE | Zunächst0, dannGruppensummen | Reset ALLE Zeilen abDATUM ohneFixed; Auffüllen abhängigFixedsetting | GRUPPE | | 1014-D077 | ''Umsätze.IstKassenBonNetto'' | UPDATE | Zunächst0, dannGruppensummen | Reset ALLE Zeilen abDATUM ohneFixed; Auffüllen abhängigFixedsetting | GRUPPE | | 1014-D078 | ''Umsätze.IstKassenBonMenge'' | UPDATE | SummeMenge*Einheit (0→StandardEinheit/1) | Nur gemappte Summenzeilen; kein Reset bei fehlender Quelle | GRUPPE | | 1014-D079 | ''KRKostenTräger.ID'' | SELECT | Artikelmapping/Einheit/KGR-Ausschluss | Fehlender Artikel fällt aus Umsatzsummen | GRUPPE,KGR | | 1014-D080 | ''KRKostenTräger.Einheit'' | SELECT | Artikelmapping/Einheit/KGR-Ausschluss | Fehlender Artikel fällt aus Umsatzsummen | GRUPPE,KGR | | 1014-D081 | ''KRKostenTräger.KRWarenGruppe'' | SELECT | Artikelmapping/Einheit/KGR-Ausschluss | Fehlender Artikel fällt aus Umsatzsummen | GRUPPE,KGR | | 1014-D082 | ''KRKostenTräger.NichtVerteilen'' | SELECT | Artikelmapping/Einheit/KGR-Ausschluss | Fehlender Artikel fällt aus Umsatzsummen | GRUPPE,KGR | | 1014-D083 | ''KRWarenGruppen.ID'' | SELECT | Warengruppen-/Mengenfilter | GRUPPE leftjoin, KGR innerjoin +NichtVerteilen0 | GRUPPE,KGR | | 1014-D084 | ''KRWarenGruppen.StandardEinheit'' | SELECT | Warengruppen-/Mengenfilter | GRUPPE leftjoin, KGR innerjoin +NichtVerteilen0 | GRUPPE,KGR | | 1014-D085 | ''KRWarenGruppen.BonNichtEinlesen'' | SELECT | Warengruppen-/Mengenfilter | GRUPPE leftjoin, KGR innerjoin +NichtVerteilen0 | GRUPPE,KGR | | 1014-D086 | ''KRWarenGruppen.NichtVerteilen'' | SELECT | Warengruppen-/Mengenfilter | GRUPPE leftjoin, KGR innerjoin +NichtVerteilen0 | GRUPPE,KGR | | 1014-D087 | ''Personen.ApcID'' | SELECT | Verkaufspersonal→Person | Keine Aktiv-/Gültigkeitsprüfung | GRUPPE | | 1014-D088 | ''Personen.PersonID'' | SELECT | Verkaufspersonal→Person | Keine Aktiv-/Gültigkeitsprüfung | GRUPPE | | 1014-D089 | ''UmsatzVK.—'' | DELETE | GlobalabDATUM | OhneSystem-/Fixed-/Manualfilter | GRUPPE | | 1014-D090 | ''UmsatzVK.Zeilen'' | DELETE | GlobalabDATUM | OhneSystem-/Fixed-/Manualfilter | GRUPPE | | 1014-D091 | ''UmsätzeIstStunde.—'' | DELETE | GlobalabDATUM | OhneSystem-/Fixed-/Manualfilter | GRUPPE | | 1014-D092 | ''UmsätzeIstStunde.Zeilen'' | DELETE | GlobalabDATUM | OhneSystem-/Fixed-/Manualfilter | GRUPPE | | 1014-D093 | ''UmsatzVK.Datum'' | INSERT | Verkäufer/Gruppe/Tag | Kunden COUNTBon-Nummerngruppen; abgeschlossen1/Preistyp<>7 strikterNULLfilter | GRUPPE | | 1014-D094 | ''UmsatzVK.PersonID'' | INSERT | Verkäufer/Gruppe/Tag | Kunden COUNTBon-Nummerngruppen; abgeschlossen1/Preistyp<>7 strikterNULLfilter | GRUPPE | | 1014-D095 | ''UmsatzVK.Gruppe'' | INSERT | Verkäufer/Gruppe/Tag | Kunden COUNTBon-Nummerngruppen; abgeschlossen1/Preistyp<>7 strikterNULLfilter | GRUPPE | | 1014-D096 | ''UmsatzVK.VKWert'' | INSERT | Verkäufer/Gruppe/Tag | Kunden COUNTBon-Nummerngruppen; abgeschlossen1/Preistyp<>7 strikterNULLfilter | GRUPPE | | 1014-D097 | ''UmsatzVK.VKWertNetto'' | INSERT | Verkäufer/Gruppe/Tag | Kunden COUNTBon-Nummerngruppen; abgeschlossen1/Preistyp<>7 strikterNULLfilter | GRUPPE | | 1014-D098 | ''UmsatzVK.Kunden'' | INSERT | Verkäufer/Gruppe/Tag | Kunden COUNTBon-Nummerngruppen; abgeschlossen1/Preistyp<>7 strikterNULLfilter | GRUPPE | | 1014-D099 | ''UmsatzVK.Menge'' | INSERT | Verkäufer/Gruppe/Tag | Kunden COUNTBon-Nummerngruppen; abgeschlossen1/Preistyp<>7 strikterNULLfilter | GRUPPE | | 1014-D100 | ''UmsätzeIstStunde.Datum'' | INSERT/SELECT | Stundenaggregate→Tageskurven | DATEPART(hour), alleSysteme; TK letzte100Tage nicht DATUM begrenzt | GRUPPE,TK | | 1014-D101 | ''UmsätzeIstStunde.GruppenID'' | INSERT/SELECT | Stundenaggregate→Tageskurven | DATEPART(hour), alleSysteme; TK letzte100Tage nicht DATUM begrenzt | GRUPPE,TK | | 1014-D102 | ''UmsätzeIstStunde.Stunde'' | INSERT/SELECT | Stundenaggregate→Tageskurven | DATEPART(hour), alleSysteme; TK letzte100Tage nicht DATUM begrenzt | GRUPPE,TK | | 1014-D103 | ''UmsätzeIstStunde.Umsatz'' | INSERT/SELECT | Stundenaggregate→Tageskurven | DATEPART(hour), alleSysteme; TK letzte100Tage nicht DATUM begrenzt | GRUPPE,TK | | 1014-D104 | ''UmsätzeIstStunde.UmsatzNetto'' | INSERT/SELECT | Stundenaggregate→Tageskurven | DATEPART(hour), alleSysteme; TK letzte100Tage nicht DATUM begrenzt | GRUPPE,TK | | 1014-D105 | ''Tageskurven.ID'' | SELECT | Gruppe*100+DATEPARTweekday+90 | DATEFIRST-abhängig; nur vorhandeneKurven | TK | | 1014-D106 | ''Tageskurven.TK00'' | UPDATE | StundenBrutto/TagBrutto | Tagessumme0→0, fehlendeStunde→NULL, keineINSERT | TK | | 1014-D107 | ''Tageskurven.TK01'' | UPDATE | StundenBrutto/TagBrutto | Tagessumme0→0, fehlendeStunde→NULL, keineINSERT | TK | | 1014-D108 | ''Tageskurven.TK02'' | UPDATE | StundenBrutto/TagBrutto | Tagessumme0→0, fehlendeStunde→NULL, keineINSERT | TK | | 1014-D109 | ''Tageskurven.TK03'' | UPDATE | StundenBrutto/TagBrutto | Tagessumme0→0, fehlendeStunde→NULL, keineINSERT | TK | | 1014-D110 | ''Tageskurven.TK04'' | UPDATE | StundenBrutto/TagBrutto | Tagessumme0→0, fehlendeStunde→NULL, keineINSERT | TK | | 1014-D111 | ''Tageskurven.TK05'' | UPDATE | StundenBrutto/TagBrutto | Tagessumme0→0, fehlendeStunde→NULL, keineINSERT | TK | | 1014-D112 | ''Tageskurven.TK06'' | UPDATE | StundenBrutto/TagBrutto | Tagessumme0→0, fehlendeStunde→NULL, keineINSERT | TK | | 1014-D113 | ''Tageskurven.TK07'' | UPDATE | StundenBrutto/TagBrutto | Tagessumme0→0, fehlendeStunde→NULL, keineINSERT | TK | | 1014-D114 | ''Tageskurven.TK08'' | UPDATE | StundenBrutto/TagBrutto | Tagessumme0→0, fehlendeStunde→NULL, keineINSERT | TK | | 1014-D115 | ''Tageskurven.TK09'' | UPDATE | StundenBrutto/TagBrutto | Tagessumme0→0, fehlendeStunde→NULL, keineINSERT | TK | | 1014-D116 | ''Tageskurven.TK10'' | UPDATE | StundenBrutto/TagBrutto | Tagessumme0→0, fehlendeStunde→NULL, keineINSERT | TK | | 1014-D117 | ''Tageskurven.TK11'' | UPDATE | StundenBrutto/TagBrutto | Tagessumme0→0, fehlendeStunde→NULL, keineINSERT | TK | | 1014-D118 | ''Tageskurven.TK12'' | UPDATE | StundenBrutto/TagBrutto | Tagessumme0→0, fehlendeStunde→NULL, keineINSERT | TK | | 1014-D119 | ''Tageskurven.TK13'' | UPDATE | StundenBrutto/TagBrutto | Tagessumme0→0, fehlendeStunde→NULL, keineINSERT | TK | | 1014-D120 | ''Tageskurven.TK14'' | UPDATE | StundenBrutto/TagBrutto | Tagessumme0→0, fehlendeStunde→NULL, keineINSERT | TK | | 1014-D121 | ''Tageskurven.TK15'' | UPDATE | StundenBrutto/TagBrutto | Tagessumme0→0, fehlendeStunde→NULL, keineINSERT | TK | | 1014-D122 | ''Tageskurven.TK16'' | UPDATE | StundenBrutto/TagBrutto | Tagessumme0→0, fehlendeStunde→NULL, keineINSERT | TK | | 1014-D123 | ''Tageskurven.TK17'' | UPDATE | StundenBrutto/TagBrutto | Tagessumme0→0, fehlendeStunde→NULL, keineINSERT | TK | | 1014-D124 | ''Tageskurven.TK18'' | UPDATE | StundenBrutto/TagBrutto | Tagessumme0→0, fehlendeStunde→NULL, keineINSERT | TK | | 1014-D125 | ''Tageskurven.TK19'' | UPDATE | StundenBrutto/TagBrutto | Tagessumme0→0, fehlendeStunde→NULL, keineINSERT | TK | | 1014-D126 | ''Tageskurven.TK20'' | UPDATE | StundenBrutto/TagBrutto | Tagessumme0→0, fehlendeStunde→NULL, keineINSERT | TK | | 1014-D127 | ''Tageskurven.TK21'' | UPDATE | StundenBrutto/TagBrutto | Tagessumme0→0, fehlendeStunde→NULL, keineINSERT | TK | | 1014-D128 | ''Tageskurven.TK22'' | UPDATE | StundenBrutto/TagBrutto | Tagessumme0→0, fehlendeStunde→NULL, keineINSERT | TK | | 1014-D129 | ''Tageskurven.TK23'' | UPDATE | StundenBrutto/TagBrutto | Tagessumme0→0, fehlendeStunde→NULL, keineINSERT | TK | | 1014-D130 | ''Filialen.FilialID'' | SELECT | KGR-Mapping | KRBons.Filiale=ISNULL(ApcID,FilialID), gleicheSystemKennung | KGR | | 1014-D131 | ''Filialen.ApcID'' | SELECT | KGR-Mapping | KRBons.Filiale=ISNULL(ApcID,FilialID), gleicheSystemKennung | KGR | | 1014-D132 | ''Filialen.SystemKennung'' | SELECT | KGR-Mapping | KRBons.Filiale=ISNULL(ApcID,FilialID), gleicheSystemKennung | KGR | | 1014-D133 | ''PepGruppen.PEPGruppenID'' | SELECT | KGR-Ziel | FilialGruppe1 | KGR | | 1014-D134 | ''PepGruppen.Filiale'' | SELECT | KGR-Ziel | FilialGruppe1 | KGR | | 1014-D135 | ''PepGruppen.FilialGruppe'' | SELECT | KGR-Ziel | FilialGruppe1 | KGR | | 1014-D136 | ''KRKassenGeräte.Filiale'' | SELECT | Priorität exakt→Filialdefault→Gerätglobal→global | Gültig bisCONVERTdatebis2: letzterTag nurMitternacht bei Zeitbon | KGR | | 1014-D137 | ''KRKassenGeräte.Gerät'' | SELECT | Priorität exakt→Filialdefault→Gerätglobal→global | Gültig bisCONVERTdatebis2: letzterTag nurMitternacht bei Zeitbon | KGR | | 1014-D138 | ''KRKassenGeräte.KassenGruppe'' | SELECT | Priorität exakt→Filialdefault→Gerätglobal→global | Gültig bisCONVERTdatebis2: letzterTag nurMitternacht bei Zeitbon | KGR | | 1014-D139 | ''KRKassenGeräte.von'' | SELECT | Priorität exakt→Filialdefault→Gerätglobal→global | Gültig bisCONVERTdatebis2: letzterTag nurMitternacht bei Zeitbon | KGR | | 1014-D140 | ''KRKassenGeräte.bis2'' | SELECT | Priorität exakt→Filialdefault→Gerätglobal→global | Gültig bisCONVERTdatebis2: letzterTag nurMitternacht bei Zeitbon | KGR | | 1014-D141 | ''UmsatzKgr.—'' | DELETE | NichtmanuelleZeilenabDATUM | Vor RETURN wennkeinKassenGerät | KGR | | 1014-D142 | ''UmsatzKgr.Zeilen'' | DELETE | NichtmanuelleZeilenabDATUM | Vor RETURN wennkeinKassenGerät | KGR | | 1014-D143 | ''UmsatzKgr.PepGruppe'' | INSERT | KGR-Aggregate; Kundeninitial0 | AntiJoin gleicherKey, manuelleZeilenbleiben; NULLKGR kollidiertNOTNULLFK | KGR,U822 | | 1014-D144 | ''UmsatzKgr.KassenGruppe'' | INSERT | KGR-Aggregate; Kundeninitial0 | AntiJoin gleicherKey, manuelleZeilenbleiben; NULLKGR kollidiertNOTNULLFK | KGR,U822 | | 1014-D145 | ''UmsatzKgr.Datum'' | INSERT | KGR-Aggregate; Kundeninitial0 | AntiJoin gleicherKey, manuelleZeilenbleiben; NULLKGR kollidiertNOTNULLFK | KGR,U822 | | 1014-D146 | ''UmsatzKgr.UmsatzBrutto'' | INSERT | KGR-Aggregate; Kundeninitial0 | AntiJoin gleicherKey, manuelleZeilenbleiben; NULLKGR kollidiertNOTNULLFK | KGR,U822 | | 1014-D147 | ''UmsatzKgr.UmsatzNetto'' | INSERT | KGR-Aggregate; Kundeninitial0 | AntiJoin gleicherKey, manuelleZeilenbleiben; NULLKGR kollidiertNOTNULLFK | KGR,U822 | | 1014-D148 | ''UmsatzKgr.Menge'' | INSERT | KGR-Aggregate; Kundeninitial0 | AntiJoin gleicherKey, manuelleZeilenbleiben; NULLKGR kollidiertNOTNULLFK | KGR,U822 | | 1014-D149 | ''UmsatzKgr.Kunden'' | INSERT | KGR-Aggregate; Kundeninitial0 | AntiJoin gleicherKey, manuelleZeilenbleiben; NULLKGR kollidiertNOTNULLFK | KGR,U822 | | 1014-D150 | ''UmsatzKgr.manuell'' | SELECT | Schutz/Key | manuelldefault0; AntiJoinbeziehtauchmanuelleZeilenein | KGR,U836 | | 1014-D151 | ''UmsatzKgr.PepGruppe'' | SELECT | Schutz/Key | manuelldefault0; AntiJoinbeziehtauchmanuelleZeilenein | KGR,U836 | | 1014-D152 | ''UmsatzKgr.KassenGruppe'' | SELECT | Schutz/Key | manuelldefault0; AntiJoinbeziehtauchmanuelleZeilenein | KGR,U836 | | 1014-D153 | ''UmsatzKgr.Datum'' | SELECT | Schutz/Key | manuelldefault0; AntiJoinbeziehtauchmanuelleZeilenein | KGR,U836 | | 1014-D154 | ''UmsatzKgr.Kunden'' | UPDATE | COUNTdistinctBon-Filiale-Gerät-Tag-Nummer | ALLE nichtmanuellen Tage>=1.1.2000, nichtnurDATUM; Mapping nutztQuellFiliale stattlokalApcIDFallback | KGR | ===== 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 ===== ^ Kürzel ^ Quelldatei am geprüften Commit ^ | E | [[https://github.com/seegerstefan/pep4desktop/blob/f1d82a003b62f2658f06eaa943dc685ab219bdf3/PEP4/ZW/Allgemein.vb|PEP4/ZW/Allgemein.vb]] | | P | [[https://github.com/seegerstefan/pep4desktop/blob/f1d82a003b62f2658f06eaa943dc685ab219bdf3/PEP4/cSchnittstellen/Programme/cProgramme.vb|PEP4/cSchnittstellen/Programme/cProgramme.vb]] | | PRJ | [[https://github.com/seegerstefan/pep4desktop/blob/f1d82a003b62f2658f06eaa943dc685ab219bdf3/PEP4/cSchnittstellen/cSchnittstellen.vbproj|PEP4/cSchnittstellen/cSchnittstellen.vbproj]] | | B | [[https://github.com/seegerstefan/pep4desktop/blob/f1d82a003b62f2658f06eaa943dc685ab219bdf3/PEP4/cSchnittstellen/Programme/Schnittstellen/Kostenrechnung/cSchnittKRApc.vb|PEP4/cSchnittstellen/Programme/Schnittstellen/Kostenrechnung/cSchnittKRApc.vb]] | | BULK | [[https://github.com/seegerstefan/pep4desktop/blob/f1d82a003b62f2658f06eaa943dc685ab219bdf3/PEP4/cTools/cBulkData.vb|PEP4/cTools/cBulkData.vb]] | | BASE, BASE:BASE | [[https://github.com/seegerstefan/pep4desktop/blob/f1d82a003b62f2658f06eaa943dc685ab219bdf3/PEP4/cSchnittstellen/Programme/Schnittstellen/cSchnitt_Basis.vb|PEP4/cSchnittstellen/Programme/Schnittstellen/cSchnitt_Basis.vb]] | | SP | [[https://github.com/seegerstefan/pep4desktop/blob/f1d82a003b62f2658f06eaa943dc685ab219bdf3/Sqlfiles/PEP4Functions/SCHNITT_APC_BONS_SP.sql|Sqlfiles/PEP4Functions/SCHNITT_APC_BONS_SP.sql]] | | STEUER | [[https://github.com/seegerstefan/pep4desktop/blob/f1d82a003b62f2658f06eaa943dc685ab219bdf3/Sqlfiles/PEP4Functions/CalcKrMischSteuerSatz.sql|Sqlfiles/PEP4Functions/CalcKrMischSteuerSatz.sql]] | | GRUPPE | [[https://github.com/seegerstefan/pep4desktop/blob/f1d82a003b62f2658f06eaa943dc685ab219bdf3/Sqlfiles/PEP4Functions/SCHNITT_KRUmsatzBonToGruppe.sql|Sqlfiles/PEP4Functions/SCHNITT_KRUmsatzBonToGruppe.sql]] | | KGR | [[https://github.com/seegerstefan/pep4desktop/blob/f1d82a003b62f2658f06eaa943dc685ab219bdf3/Sqlfiles/PEP4Functions/Calc_UmsatzKGR_Fuellen.sql|Sqlfiles/PEP4Functions/Calc_UmsatzKGR_Fuellen.sql]] | | TK | [[https://github.com/seegerstefan/pep4desktop/blob/f1d82a003b62f2658f06eaa943dc685ab219bdf3/Sqlfiles/PEP4Functions/TageskurvenAusStundenUmsatz.sql|Sqlfiles/PEP4Functions/TageskurvenAusStundenUmsatz.sql]] | | U767 | [[https://github.com/seegerstefan/pep4desktop/blob/f1d82a003b62f2658f06eaa943dc685ab219bdf3/Sqlfiles/PEP4Update/update_0767.sql|Sqlfiles/PEP4Update/update_0767.sql]] | | U822 | [[https://github.com/seegerstefan/pep4desktop/blob/f1d82a003b62f2658f06eaa943dc685ab219bdf3/Sqlfiles/PEP4Update/update_0822.sql|Sqlfiles/PEP4Update/update_0822.sql]] | | U836 | [[https://github.com/seegerstefan/pep4desktop/blob/f1d82a003b62f2658f06eaa943dc685ab219bdf3/Sqlfiles/PEP4Update/update_0836.sql|Sqlfiles/PEP4Update/update_0836.sql]] | | U851 | [[https://github.com/seegerstefan/pep4desktop/blob/f1d82a003b62f2658f06eaa943dc685ab219bdf3/Sqlfiles/PEP4Update/update_0851.sql|Sqlfiles/PEP4Update/update_0851.sql]] | | U864 | [[https://github.com/seegerstefan/pep4desktop/blob/f1d82a003b62f2658f06eaa943dc685ab219bdf3/Sqlfiles/PEP4Update/update_0864.sql|Sqlfiles/PEP4Update/update_0864.sql]] | | ZW, BASE:SET | [[https://github.com/seegerstefan/pep4desktop/blob/f1d82a003b62f2658f06eaa943dc685ab219bdf3/PEP4/ZW/Einstellungen/cEinstellungenZw.vb|PEP4/ZW/Einstellungen/cEinstellungenZw.vb]] | | BASE:MAIL | [[https://github.com/seegerstefan/pep4desktop/blob/f1d82a003b62f2658f06eaa943dc685ab219bdf3/PEP4/cKommunikation/cMail.vb|PEP4/cKommunikation/cMail.vb]] | | BASE:API | [[https://github.com/seegerstefan/pep4desktop/blob/f1d82a003b62f2658f06eaa943dc685ab219bdf3/PEP4/cSchnittstellen/cApiCall.vb|PEP4/cSchnittstellen/cApiCall.vb]] | | BASE:LOG | [[https://github.com/seegerstefan/pep4desktop/blob/f1d82a003b62f2658f06eaa943dc685ab219bdf3/PEP4/cTools/cInfoTools.vb|PEP4/cTools/cInfoTools.vb]] | | BASE:INIT | [[https://github.com/seegerstefan/pep4desktop/blob/f1d82a003b62f2658f06eaa943dc685ab219bdf3/PEP4/ZW/Einstellungen/cSetting.vb|PEP4/ZW/Einstellungen/cSetting.vb]] | | BASE:USER | [[https://github.com/seegerstefan/pep4desktop/blob/f1d82a003b62f2658f06eaa943dc685ab219bdf3/Sqlfiles/PEP4Functions/fnUserId.sql|Sqlfiles/PEP4Functions/fnUserId.sql]] | | BASE:DOC | [[https://github.com/seegerstefan/pep4desktop/blob/f1d82a003b62f2658f06eaa943dc685ab219bdf3/PEP4/cHilfsprogramme/cDocument.vb|PEP4/cHilfsprogramme/cDocument.vb]] | Siehe auch: [[schnittstellen:schnittstellen|Übersicht der Schnittstellen]]. Keine Ausführung oder Codekorrektur.