Inhaltsverzeichnis

2049 — Aprocon-Warenwert aus Einkaufs- und Herstellungspreisen

Dokumentation ins Wiki übernommen am 02.10.2026. Das ist keine Laufzeitabnahme.

Technische Referenz zum aktiven Programm eProgramm.ImpKRWarenWertAprocon2. Sie beschreibt Eingänge, tatsächliche Schreibwirkung und Grenzen am genannten Quellenstand. Erreichbarer Aufruf statisch dokumentiert, nicht zur Laufzeit abgenommen.

Wichtig: ⚠ SP nach Transferfehler / globaler Warenwertersatz. Prüfe vor einem späteren Test die beschriebenen Fälle.

Aufruf und Parameter

Delegate: cSchnittKRApc.Import_WarenWert2. Active=True, Automatik=true, ManuellerAufruf=true, NurAufServer=true. Registrierung/Defaults, keine bestätigten Jobs. Run prüft die Serverbindung nicht selbst.

Parameter Dialogtyp Fester Wert DefaultValue
DATUM Datum 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.

Zweck, Parameter und Eingangsvertrag

Liest Preise über die externe Aprocon-ODBC-Datenquelle und ersetzt Warenwertzeiträume in PEP4. Kein Eingangsfile, kein Dateiarchiv, kein KRWerte-/Datenkopfimport und keine Verkaufspreisausgabe. DATUM(Datum) ist der einzige registrierte Fachparameter, ohne DefaultValue. Serverbindung=True beschreibt die Registrierung, nicht eine Prüfung im Run.

BASE.SetDatum → cDatumMuster.GenDatumFromVorgabe. Datumsmuster unterstützt unter anderem relative Tage und Punktmuster; es ersetzt keine fachliche Lieferformatprüfung. Der Helper-Quelltext DIM liegt im Repository, cSchnittstellen nutzt aber die cRibbonDatum-DLL: tatsächliche installierte DLL nicht geprüft (Q02). Keine weitere ZW-Einstellung im Helper nachgewiesen. Kalender-/Quartals-/Wochenrandfälle nicht als zuverlässig zusagen.

CheckApcConnect prüft die mit SCHNITT_APC_DSN aufgebaute ODBC-Verbindung. Auch bei fehlgeschlagener Prüfung wird nach Rückkehr aus dem Transfer die lokale SP noch versucht. Übertragung liest aus Aprocon.Preise die sechs Felder Preiskategorie, Artikel, Preis, GueltigAb, GueltigBis und DatumLetzteAktualisi. Filter: Preis<10000 und, falls nicht leer, Preiskategorie IN(<Einstellungsstring>). DATUM begrenzt nicht den externen SELECT. Keine Reihenfolge, keine Einheit-/Währungsumrechnung und kein Null-/Preisgrößencheck zusätzlich zum Filter. Aprocon-Schema, DSN und Preis-/Datumssemantik bleiben Q13/Q15.

Einstellungen und Preispriorität

SCHNITT_APC_PreisKatImport lädt die Variable SCHNITT_AproconPreisKatImport, Default „5,1“. Der gesamte String wird ungeprüft in den ODBC-IN-Ausdruck eingesetzt. Split(„,“)(0) liefert HK, Split(„,“)(1) EK an die SQL-Prozedur; der Default bedeutet HK=5, EK=1. Mindestens zwei zu bigint konvertierbare Werte sind nötig. Zusätzliche Kategorien werden übertragen, aber nicht zusätzlich als Prioritätsparameter behandelt. Leere/ungültige Listen können erst nach dem Staging-Reset scheitern.

VB-Transfer und Fehlergrenzen

Nach Start und SetDatum ruft der Einstieg Import_Preise_Übertragung auf. Beide Verbindungen werden vor dessen inneren Catch-Blöcken geöffnet. Lokale und ODBC-Befehle nutzen SQL_TIMEOUT. Zuerst TRUNCATE der gesamten SCHNITT_KRWarenwert, dann INSERT je externem Preis mit Artikel→Kostenträger, GueltigAb→von, GueltigBis→bis, DatumLetzteAktualisi→ts.

2049-F01: Nach Reset-/Lesefehlern setzt der Transfer zwar FehlerUndStopp, gibt aber keinen Erfolgswert zurück. Der Aufrufer prüft diesen Status nicht und startet anschließend trotzdem SCHNITT_KRWarenwert_SP. Das kann alte oder teilweise übertragene Zwischendaten verarbeiten und Zielwerte löschen. Ungefangene Open-/Verbindungsfehler können Abschlussmeldung und Rückgabe ganz überspringen. Normales Ende liefert Fehlerfrei(), im Unterschied zu den Shared-Imports ohne Return.

SQL-Folgepfad und Zielschreiben

Direkter Aufruf: exec SCHNITT_KRWarenwert_SP @EK,@HK,@Datum. Positionaler dritter SP-Parameter heißt @DatumAb. Keine weitere aufgerufene Fach-SP oder UDF im geprüften SQL. Die SP verwendet teils KostenTräger, U722/VB Kostenträger. Hier gilt die DDL-Schreibweise; bei case-sensitiver Installation Namensauflösung prüfen(Q02). Keine Fachtransaktion.

  1. EK-Zeilen je Kostenträger/von in @Tmp verdichten: MAX(bis mit NULL→31.12.2099) und MAX(Preis) unabhängig voneinander. Alle EK-Stagingzeilen löschen, verdichtete zurück einfügen; ts wird dabei nicht übernommen.
  2. Offene bis je Kategorie bis vor den nächsten Beginn ergänzen. EK entfernen, wenn für denselben Kostenträger eine HK-Zeile mit von≤EK.von existiert; HK.bis wird dabei nicht geprüft.
  3. Lücken innerhalb einer Kategorie verlängern, offene Enden danach auch über Kategorien ergänzen. Überlappungen abschneiden, wenn späterer Beginn vor bisherigem Ende und späteres Ende≥bisherigem Ende liegt. NULL-Enden erfüllen diesen letzten Vergleich nicht.
  4. Alle KRWarenwert-Zeilen mit von≥DATUM löschen, ohne Kategorie-/Artikelbegrenzung. Alle verbleibenden Stagingzeilen mit von≥DATUM einfügen: Preiskategorie, KRKostenTräger, von, bis, Preis, ts=GETDATE().
  5. Alle offenen KRWarenwert.bis bis vor den nächsten Beginn desselben Kostenträgers ergänzen, auch bei älterem von als DATUM und ohne Kategorieabgrenzung.

2049-F02: Globaler Staging-Reset und globale Zielersetzung sind nicht atomar und nicht auf gelieferte Artikel beschränkt. Parallelimporte, leere Lieferung, Teilfehler und historische offene Enden prüfen. Ein vor DATUM beginnender neuer Preis wird nicht nachgetragen, obwohl er nach DATUM gültig sein könnte.

2049-F03: U722 definiert den Ziel-PK nur aus KRKostenTräger/von, ohne Preiskategorie. Nur EK wird zu Beginn verdichtet; verbliebene doppelte HK-/Zusatzkategoriezeilen können bei gleichem Beginn kollidieren. MAX-Ende und MAX-Preis können aus verschiedenen Eingangszeilen stammen. HK-/EK-Vorrang trotz abgelaufenem HK ist ein konkreter fachlicher Prüffall, kein bestätigter Produktionsfehler. bis2 ist eine Computed-Spalte, kein explizites INSERT.

Abnahmevorschläge

Prüfe bei einer späteren Testfreigabe eine leere und eine unterbrochene Preislieferung, einen Resetfehler, mehrere Kategorien mit gleichem Beginn, abgelaufene HK-Preise, Beginn vor DATUM und historische offene Zielzeilen. In diesem Dokumentationslauf weder verbunden noch importiert oder korrigiert.

Direkte Einstellungen

Beziehung Schlüssel / Variable Default Einflussweg Wirkung Beleg
2049-S001 SCHNITT_APC_DSN / SCHNITT_AproconDSN leer BASE.CheckApcConnect → ApcConnectionString Externe Aprocon-Verbindung; kein Geheimniswert dokumentiert BASE,SET
2049-S002 SQL_TIMEOUT / SQLTimeOut 60 VB-Transfer und lokaler SP-Aufruf CommandTimeout in Sekunden, lokal und ODBC B,SET
2049-S003 SCHNITT_APC_PreisKatImport / SCHNITT_AproconPreisKatImport 5,1 Raw-IN-Filter und Split HK/EK Importierte Kategorien und priorisierte Herstellung/Einkauf; keine Validierung B,SET

Direkte Feldbeziehungen

Beziehung Tabelle.Feld Operation Datenfluss / Verwendung Bedingung Beleg
2049-D001 Aprocon.Preise.Preiskategorie SELECT Sechs Quellfelder → lokale Stagingzeile; Preis<10000, optional Kategorienliste ODBC; kein DATUM-Filter B
2049-D002 Aprocon.Preise.Artikel SELECT Sechs Quellfelder → lokale Stagingzeile; Preis<10000, optional Kategorienliste ODBC; kein DATUM-Filter B
2049-D003 Aprocon.Preise.Preis SELECT Sechs Quellfelder → lokale Stagingzeile; Preis<10000, optional Kategorienliste ODBC; kein DATUM-Filter B
2049-D004 Aprocon.Preise.GueltigAb SELECT Sechs Quellfelder → lokale Stagingzeile; Preis<10000, optional Kategorienliste ODBC; kein DATUM-Filter B
2049-D005 Aprocon.Preise.GueltigBis SELECT Sechs Quellfelder → lokale Stagingzeile; Preis<10000, optional Kategorienliste ODBC; kein DATUM-Filter B
2049-D006 Aprocon.Preise.DatumLetzteAktualisi SELECT Sechs Quellfelder → lokale Stagingzeile; Preis<10000, optional Kategorienliste ODBC; kein DATUM-Filter B
2049-D007 SCHNITT_KRWarenwert.— gesamte Tabelle TRUNCATE Alle Preiszwischendaten zurücksetzen Vor ODBC-SELECT; bei Fehler Transfer trotzdem versucht B
2049-D008 SCHNITT_KRWarenwert.Preiskategorie INSERT Externe Kategorie/Artikel/Beginn/Ende/Aktualisierungsdatum/Preis Transfer je gelesener Zeile B
2049-D009 SCHNITT_KRWarenwert.Kostenträger INSERT Externe Kategorie/Artikel/Beginn/Ende/Aktualisierungsdatum/Preis Transfer je gelesener Zeile B
2049-D010 SCHNITT_KRWarenwert.von INSERT Externe Kategorie/Artikel/Beginn/Ende/Aktualisierungsdatum/Preis Transfer je gelesener Zeile B
2049-D011 SCHNITT_KRWarenwert.bis INSERT Externe Kategorie/Artikel/Beginn/Ende/Aktualisierungsdatum/Preis Transfer je gelesener Zeile B
2049-D012 SCHNITT_KRWarenwert.ts INSERT Externe Kategorie/Artikel/Beginn/Ende/Aktualisierungsdatum/Preis Transfer je gelesener Zeile B
2049-D013 SCHNITT_KRWarenwert.Preis INSERT Externe Kategorie/Artikel/Beginn/Ende/Aktualisierungsdatum/Preis Transfer je gelesener Zeile B
2049-D014 SCHNITT_KRWarenwert.Preiskategorie SELECT EK-Verdichtung, HK-Vorrang, Zeiträume, Zielübernahme SP; auch nach fehlerhafter Übertragung erreichbar SQL
2049-D015 SCHNITT_KRWarenwert.Kostenträger SELECT EK-Verdichtung, HK-Vorrang, Zeiträume, Zielübernahme SP; auch nach fehlerhafter Übertragung erreichbar SQL
2049-D016 SCHNITT_KRWarenwert.von SELECT EK-Verdichtung, HK-Vorrang, Zeiträume, Zielübernahme SP; auch nach fehlerhafter Übertragung erreichbar SQL
2049-D017 SCHNITT_KRWarenwert.bis SELECT EK-Verdichtung, HK-Vorrang, Zeiträume, Zielübernahme SP; auch nach fehlerhafter Übertragung erreichbar SQL
2049-D018 SCHNITT_KRWarenwert.Preis SELECT EK-Verdichtung, HK-Vorrang, Zeiträume, Zielübernahme SP; auch nach fehlerhafter Übertragung erreichbar SQL
2049-D019 @Tmp.KostenTräger INSERT/SELECT EK je KostenTräger/von, unabhängige MAX-Ende/MAX-Preis Temporäre Tabellenvariable, keine persistente Ausgabe SQL
2049-D020 @Tmp.von INSERT/SELECT EK je KostenTräger/von, unabhängige MAX-Ende/MAX-Preis Temporäre Tabellenvariable, keine persistente Ausgabe SQL
2049-D021 @Tmp.bis INSERT/SELECT EK je KostenTräger/von, unabhängige MAX-Ende/MAX-Preis Temporäre Tabellenvariable, keine persistente Ausgabe SQL
2049-D022 @Tmp.Preis INSERT/SELECT EK je KostenTräger/von, unabhängige MAX-Ende/MAX-Preis Temporäre Tabellenvariable, keine persistente Ausgabe SQL
2049-D023 SCHNITT_KRWarenwert.— EK-/priorisierte Zeilen DELETE EK vor Verdichtung; später EK entfernen, wenn HK.von≤EK.von HK.bis nicht geprüft SQL
2049-D024 SCHNITT_KRWarenwert.Preiskategorie INSERT Verdichtetes EK aus @Tmp zurück; ts nicht übernommen Nach globalem EK-DELETE SQL
2049-D025 SCHNITT_KRWarenwert.Kostenträger INSERT Verdichtetes EK aus @Tmp zurück; ts nicht übernommen Nach globalem EK-DELETE SQL
2049-D026 SCHNITT_KRWarenwert.von INSERT Verdichtetes EK aus @Tmp zurück; ts nicht übernommen Nach globalem EK-DELETE SQL
2049-D027 SCHNITT_KRWarenwert.bis INSERT Verdichtetes EK aus @Tmp zurück; ts nicht übernommen Nach globalem EK-DELETE SQL
2049-D028 SCHNITT_KRWarenwert.Preis INSERT Verdichtetes EK aus @Tmp zurück; ts nicht übernommen Nach globalem EK-DELETE SQL
2049-D029 SCHNITT_KRWarenwert.bis UPDATE Offene Enden, Kategorienlücken, Überlappungen bis vor nächsten Beginn Mehrere SP-Schritte, teils über Kategorien SQL
2049-D030 KRWarenwert.von SELECT Globaler DELETE-Bereich und nächster Beginn für bis DatumAb begrenzt nur Ersetzung, nicht abschließendes UPDATE SQL
2049-D031 KRWarenwert.— Zeilen ab DATUM DELETE Alle Kostenträger/Kategorien mit von≥DatumAb entfernen Vor Ziel-INSERT; nicht auf Lieferung begrenzt SQL
2049-D032 KRWarenwert.Preiskategorie INSERT Stagingfelder; ts=GETDATE(), nicht externe Aktualisierung Staging.von≥DatumAb SQL
2049-D033 KRWarenwert.KRKostenTräger INSERT Stagingfelder; ts=GETDATE(), nicht externe Aktualisierung Staging.von≥DatumAb SQL
2049-D034 KRWarenwert.von INSERT Stagingfelder; ts=GETDATE(), nicht externe Aktualisierung Staging.von≥DatumAb SQL
2049-D035 KRWarenwert.bis INSERT Stagingfelder; ts=GETDATE(), nicht externe Aktualisierung Staging.von≥DatumAb SQL
2049-D036 KRWarenwert.Preis INSERT Stagingfelder; ts=GETDATE(), nicht externe Aktualisierung Staging.von≥DatumAb SQL
2049-D037 KRWarenwert.ts INSERT Stagingfelder; ts=GETDATE(), nicht externe Aktualisierung Staging.von≥DatumAb SQL
2049-D038 KRWarenwert.KRKostenTräger SELECT Identität und offene Enden; nächste von desselben Kostenträgers Gesamter Zielbestand ohne DATUM-/Kategoriefilter SQL
2049-D039 KRWarenwert.bis SELECT Identität und offene Enden; nächste von desselben Kostenträgers Gesamter Zielbestand ohne DATUM-/Kategoriefilter SQL
2049-D040 KRWarenwert.bis UPDATE Alle offenen Enden bis vor nächstes von; letzter Satz bleibt NULL Auch historische Zeilen vor DATUM SQL
2049-D041 KRWarenwert.bis2 COMPUTED ISNULL(bis,31.12.2099), kein explizites Feldschreiben Schemawirkung U722

Basis-Rückmeldungen (BASE)

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.

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.

Quellen und Prüfstand

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.

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