Dokumentation ins Wiki übernommen am 02.10.2026. Das ist keine Laufzeitabnahme.
Technische Referenz zum aktiven Programm eProgramm.ImpKRWerteService. Sie beschreibt Eingänge, tatsächliche Schreibwirkung und Grenzen am genannten Quellenstand. Erreichbarer Aufruf statisch dokumentiert, nicht zur Laufzeit abgenommen.
Wichtig: ⚠ DatenID0 / Variantenverlust / fehlender Return. Prüfe vor einem späteren Test die beschriebenen Fälle.
Delegate: cSchnittKRWerte.Import. Active=True, Automatik=true, ManuellerAufruf=false, NurAufServer=false. Registrierung/Defaults, keine bestätigten Jobs. Run prüft die Serverbindung nicht selbst.
| Parameter | Dialogtyp | Fester Wert | DefaultValue |
|---|---|---|---|
| AUTOMATIK | Info | nicht fest | nicht gesetzt |
| PFAD | FileImport | nicht fest | nicht gesetzt |
| DATENQUELLEID | NumberLong | nicht fest | nicht gesetzt |
| WOCHEN | NumberLong | nicht fest | nicht gesetzt |
MAILTO und der von RunWithDialog gesetzte MANUELL-Schlüssel sind Registrierung/Dialogzustand, keine ZW-Einstellung. Eine Auswertung durch die Basis ist nur bei ausdrücklich belegtem BASE-Pfad anzunehmen.
Registriert: PFAD(FileImport), AUTOMATIK(Info), DATENQUELLEID(NumberLong), WOCHEN(NumberLong); ManuellerAufruf=False. Sonderparameter DATENSATZ wird unterstützt, aber nicht registriert: programmatisch vorhandener Schlüssel hat Vorrang, sein Value geht ohne gesonderte Validierung in DatenID.
Im regulären Dictionary ist AUTOMATIK bereits vorhanden; sein Wert wird nicht geprüft. DATENQUELLEID/WOCHEN müssen numerisch sein, ohne Positiv-/Bereichsprüfung. Fehlender DATENSATZ und AUTOMATIK→Stopp. BASE.SetFile verlangt eine vorhandene Datei.
Encoding.Default, Semikolon, Trim=True, Quotes=True, kein Headerüberspringen. Mindestens2 Felder:1 RefID→CLng,2 Wert→CDbl; zusätzliche ignoriert. Weniger2 Felder still ignoriert; Zeilenfehler setzen BASE-Fehler und lassen den Rest weiterlaufen. Zahlformat kulturabhängig, Einheit aus Liefer-/Datenquellenvertrag(Q15).
GetKRDatenID sucht KRDaten.ID nach Quelle=DATENQUELLEID und Automatik=Now.Year×100+Now.Month. Fehlend: INSERT Beschreibung(AUTOMATIK-Jahr.Monat), ZeitraumVon/Bis=zunächstGestern, Wochen1, Quelle und Automatik; anschließend dieselbe SELECT-Abfrage. Kein atomarer Identity-Rückgabepfad.
Dann UPDATE aller Quelle/Automatik-Köpfe: Von=Montag der laufenden Woche minus WOCHEN×7, Bis=voriger Sonntag, Wochen=Parameter. Das Monatsobjekt wird wiederverwendet, also keine neue Historie bei jedem Lauf. 2027-F01: Kopfhelfer fängt Exceptions leer ab und liefertLong0; SetDatenSatz meldet trotzdemTrue. Fachimport kann danach DatenID0 verwenden; mehrere passende Köpfe sind nicht eindeutig ausgewählt.
DELETE KRWerte aller Varianten für KRDaten=DatenID, danach INSERT RefID,KRDaten,Wert. U642 ergänzt Variante(Default0) im PK(RefID,KRDaten,Variante): neue Werte Variante0, andere alte Varianten mit gelöscht. Kein UPDATE/SP/Archiv/Calc; keine Fachtransaktion, SQL30s. Header/Leer-/Teilfile nach DELETE kann Bestand leer/teilweise hinterlassen.
2027-F02: Shared Import ohneReturn→BooleanFalse trotz erfolgreichem Instanzabschluss. Konstruktor übernimmt Modulargument nicht, Meldung bleibt Basis-Modul. Start/Ende und Fehlerfrei gehören trotzdem zum Instanzpfad. ParserReadFields-Fehler→äußerer Instanzcatch/Stopp; Zeilenfehler→Fehler und Fortsetzung. Kopf-/Fachschreiben nicht atomar.
Tests: Monatswiederholung, mehrere Köpfe, negative/0 Wochen, DatenID0 nach Kopfexception, Variantenverlust, Header/Leerdatei, doppelteRefID. Keine Ausführung oder Korrektur.
Keine direkte fachliche ZW-Einstellung in diesem Einstiegsteil nachgewiesen; Einstellungen der belegten gemeinsamen Pfade folgen unten.
| Beziehung | Tabelle.Feld | Operation | Datenfluss / Verwendung | Bedingung | Beleg |
|---|---|---|---|---|---|
| 2027-D001 | KRDaten.ID | SELECT | ExecuteScalar nach Quelle und YYYYMM | AUTOMATIK-Pfad | B |
| 2027-D002 | KRDaten.KRDatenQuelle | SELECT | ExecuteScalar nach Quelle und YYYYMM | AUTOMATIK-Pfad | B |
| 2027-D003 | KRDaten.Automatik | SELECT | ExecuteScalar nach Quelle und YYYYMM | AUTOMATIK-Pfad | B |
| 2027-D004 | KRDaten.Beschreibung | INSERT | Kopf neu; Gestern/Gestern/Wochen1, anschließend Update | Quelle/Automatik fehlend | B |
| 2027-D005 | KRDaten.ZeitraumVon | INSERT | Kopf neu; Gestern/Gestern/Wochen1, anschließend Update | Quelle/Automatik fehlend | B |
| 2027-D006 | KRDaten.ZeitraumBis | INSERT | Kopf neu; Gestern/Gestern/Wochen1, anschließend Update | Quelle/Automatik fehlend | B |
| 2027-D007 | KRDaten.Wochen | INSERT | Kopf neu; Gestern/Gestern/Wochen1, anschließend Update | Quelle/Automatik fehlend | B |
| 2027-D008 | KRDaten.KRDatenQuelle | INSERT | Kopf neu; Gestern/Gestern/Wochen1, anschließend Update | Quelle/Automatik fehlend | B |
| 2027-D009 | KRDaten.Automatik | INSERT | Kopf neu; Gestern/Gestern/Wochen1, anschließend Update | Quelle/Automatik fehlend | B |
| 2027-D010 | KRDaten.ZeitraumVon | UPDATE | Volle Vorwochen; alle Quelle/Automatik-Matches | AUTOMATIK-Pfad | B |
| 2027-D011 | KRDaten.ZeitraumBis | UPDATE | Volle Vorwochen; alle Quelle/Automatik-Matches | AUTOMATIK-Pfad | B |
| 2027-D012 | KRDaten.Wochen | UPDATE | Volle Vorwochen; alle Quelle/Automatik-Matches | AUTOMATIK-Pfad | B |
| 2027-D013 | KRWerte.KRDaten | SELECT | DELETE-Bereich DatenID ohne Variantenfilter | Nach Kopfwahl | B |
| 2027-D014 | KRWerte.— Zeilen | DELETE | Alle Varianten/RefIDs des Kopfes | Vor Dateiparsen | B |
| 2027-D015 | KRWerte.RefID | INSERT | DateiRefID/Wert und KopfID | Mindestens2 Felder/gültige Konvertierung | B |
| 2027-D016 | KRWerte.KRDaten | INSERT | DateiRefID/Wert und KopfID | Mindestens2 Felder/gültige Konvertierung | B |
| 2027-D017 | KRWerte.Wert | INSERT | DateiRefID/Wert und KopfID | Mindestens2 Felder/gültige Konvertierung | B |
| 2027-D018 | KRWerte.Variante | DEFAULT | Schema-Default0, nicht explizit im INSERT | Neue Werte; andere Varianten können gelöscht sein | U642 |
Start setzt Status/Protokoll zurück. Fehlerfrei ist nur bei Status0 wahr. SILENT überspringt den Abschluss. MANUELL unterdrückt direkte Mail und den API-sendmail-Schalter, nicht die API-Meldung. MAILTO fällt auf MAIL_SCHNITTSTELLETO zurück. Ungefangene Fehler können das Ende überspringen. Rückmeldung ist keine Fachtransaktion.
Mailversand kann frühere fällige Outbox-Mails und deren Anhänge verarbeiten. SMTP-Testadresse kann das Ziel ersetzen. Outbox-Retry bei Status20 setzt mStatus=-1 ohne WHERE; CASE ab Status12 kann mDelayUntil=NULL erzeugen. API-Serverquelle bleibt offen(Q01). Kein Codefix.
| 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 | 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 |
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 |
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.
Geprüft am02.10.2026 gegen master, Commit f1d82a003b62f2658f06eaa943dc685ab219bdf3. Kein aktueller Installations-/Live-Schema-/DLL-/Jobabgleich. Aprocon bezeichnet die externe Datenbankrolle, keinen bestätigten Schemanamen. Defaults/Computed-Spalten sind gesonderte Schemawirkung. Q02:Installationsgrenze; Q11:offene Motoranalyse; Q13/Q15:Liefer-/Einheiten-/Ersatzverträge.
| Kürzel | Quelldatei am Commit |
|---|---|
| E | PEP4/ZW/Allgemein.vb |
| P | PEP4/cSchnittstellen/Programme/cProgramme.vb |
| PRJ | PEP4/cSchnittstellen/cSchnittstellen.vbproj |
| B | PEP4/cSchnittstellen/Programme/Schnittstellen/Kostenrechnung/cSchnittKRWerte.vb |
| BASE, BASE:BASE | PEP4/cSchnittstellen/Programme/Schnittstellen/cSchnitt_Basis.vb |
| U603 | Sqlfiles/PEP4Update/update_0603.sql |
| U642 | Sqlfiles/PEP4Update/update_0642.sql |
| BASE:SET | PEP4/ZW/Einstellungen/cEinstellungenZw.vb |
| BASE:MAIL | PEP4/cKommunikation/cMail.vb |
| BASE:API | PEP4/cSchnittstellen/cApiCall.vb |
| BASE:LOG | PEP4/cTools/cInfoTools.vb |
| BASE:INIT | PEP4/ZW/Einstellungen/cSetting.vb |
| BASE:USER | Sqlfiles/PEP4Functions/fnUserId.sql |
| BASE:DOC | PEP4/cHilfsprogramme/cDocument.vb |
Siehe auch: Übersicht der Schnittstellen. Keine Ausführung oder Fehlerkorrektur.