====== 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(). **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. - 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. - 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**. - 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. - **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(). - **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. ^ Kürzel ^ Quelldatei am 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]] | | BASE, BASE:BASE | [[https://github.com/seegerstefan/pep4desktop/blob/f1d82a003b62f2658f06eaa943dc685ab219bdf3/PEP4/cSchnittstellen/Programme/Schnittstellen/cSchnitt_Basis.vb|PEP4/cSchnittstellen/Programme/Schnittstellen/cSchnitt_Basis.vb]] | | SQL | [[https://github.com/seegerstefan/pep4desktop/blob/f1d82a003b62f2658f06eaa943dc685ab219bdf3/Sqlfiles/PEP4Functions/SCHNITT_KRWarenwert_SP.sql|Sqlfiles/PEP4Functions/SCHNITT_KRWarenwert_SP.sql]] | | U722 | [[https://github.com/seegerstefan/pep4desktop/blob/f1d82a003b62f2658f06eaa943dc685ab219bdf3/Sqlfiles/PEP4Update/update_0722.sql|Sqlfiles/PEP4Update/update_0722.sql]] | | SET, BASE:SET | [[https://github.com/seegerstefan/pep4desktop/blob/f1d82a003b62f2658f06eaa943dc685ab219bdf3/PEP4/ZW/Einstellungen/cEinstellungenZw.vb|PEP4/ZW/Einstellungen/cEinstellungenZw.vb]] | | DIM | [[https://github.com/seegerstefan/pep4desktop/blob/f1d82a003b62f2658f06eaa943dc685ab219bdf3/SubProjekte/RibbonTools/cRibbonDatum/cDatumMuster.vb|SubProjekte/RibbonTools/cRibbonDatum/cDatumMuster.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 Fehlerkorrektur.