====== 2025 — Aprocon-Kostenträger aktualisieren ====== Dokumentation ins Wiki übernommen am **02.10.2026**. Das ist keine Laufzeitabnahme. Technische Referenz zum aktiven Programm eProgramm.ImpKRKostenTrägerODBC. Sie beschreibt Eingänge, tatsächliche Schreibwirkung und Grenzen am genannten Quellenstand. Erreichbarer Aufruf statisch dokumentiert, nicht zur Laufzeit abgenommen. **Wichtig:** ⚠ Rabatt nicht geschrieben / Gruppen trotzdem angelegt. Prüfe vor einem späteren Test die beschriebenen Fälle. ===== Aufruf und Parameter ===== Delegate: ''cSchnittKRApc.Import_Kostenträger''. Active=True, Automatik=true, ManuellerAufruf=true, NurAufServer=false. Registrierung/Defaults, keine bestätigten Jobs. Run prüft die Serverbindung nicht selbst. Keine Fachparameter registriert. 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. ===== Ein-/Ausgänge und Variante ===== ODBC-Warengruppen/Artikel → lokale KRWarenGruppen und KRKostenTräger. Keine Datei, kein Datumsparameter und keine Fach-SP. Kein INSERT-Parameter registriert: fehlende Kostenträger werden nicht angelegt. Warengruppen werden trotzdem angelegt und aktualisiert. Beide Kennungen verwenden denselben Einstieg. APCKT beschreibt feldgenau die Quelle, Warengruppen-Voranlage, Artikel-UPDATE/INSERT, Einheitenkonvertierung und **nicht geschriebenen Rabatt**. BASE beschreibt Meldungen/Mail/API, keine gemeinsame Fachtransaktion. Keine Artikel-/Gruppenlöschung, kein Zeitberechnungslauf. ===== Betrieb und Testgrenze ===== ODBC SQL_TIMEOUT(Default60), lokale SQL-CommandsDefault30s; Fehler stoppt den Rest nach ggf. bereits geschriebenen Gruppen/Artikeln. Return Fehlerfrei nach BASE-Abschluss, kein Beleg für erfolgreiche Kundenschema-/ODBC-Ausführung. Q13 externer Vertrag, Q02 Schema. Tests: fehlender Artikel im Update-only-Modus, fehlende WGR, NULL/Gewicht/Berechnungseinheit, unveränderter Rabatt, doppelte Quellnummer und systemübergreifende ID-Kollision. Keine Korrektur vorgenommen. ===== Direkte Einstellungen ===== Keine direkte fachliche ZW-Einstellung in diesem Einstiegsteil nachgewiesen; Einstellungen der belegten gemeinsamen Pfade folgen unten. ===== Direkte Feldbeziehungen ===== Keine separate direkte Fachbeziehung; tatsächliche Wirkung steht im Ablauf und gegebenenfalls in den ausdrücklich zugeordneten Profilen. ===== 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. ===== Gemeinsamer Datenpfad APCKT ===== Stand02.10.2026, Commit ''f1d82a003b62f2658f06eaa943dc685ab219bdf3''. Explizite Mitglieder2025/2026, beide→cSchnittKRApc.Import_KostenTräger. Nur2026 registriert INSERT (Info); **bloße Schlüsselanwesenheit**, nicht dessen Wert, schaltet Artikelanlage ein. Kein Dateieingang, kein SP-Aufruf. ==== Ablauf und Befunde ==== BASE-Start→ODBC-Verbindungsprüfung→Warengruppen und Artikel vollständig puffern→lokale Gruppen-Upserts→Artikel-UPDATE bzw.INSERT→BASE-Ende/Fehlerfrei. Doppelte Nummern brechen Dictionary.Add bereits vor lokalen Fachschreibvorgängen ab; NULL-/Typkonvertierungen können ebenfalls abbrechen. Alle Artikel-Warengruppen zuerst mit Bezeichnung'-' und Artikel-Auswertungsgruppe upserten. Danach vollständige Quell-Warengruppen mit echten Werten upserten. Auch2025 legt daher neue Gruppen an, obwohl es fehlende Kostenträger nicht anlegt. Nicht in der Quelle vorhandene Gruppen werden nicht gelöscht; betroffene Artikel-WGR ohne Quell-WGR bleiben mit Platzhalterbezeichnung. Kein UPDATE-Schutz für manuelle Gruppenwerte. Artikel schreibt Bezeichnung(Trim/Left50),KRWarenGruppe,Skonto,Einheit,MatchCode,Leergut,KRAuswertungsGruppe. **APCKT-F01:** Waagenrabatt wird gelesen und @Rabatt gesetzt, aber das SQL verwendet diesen Parameter nicht; KRKostenTräger.Rabatt wird nicht aktualisiert. Nicht als Rabatt-Importer dokumentieren. Berechnungseinheit wird im VB-Objekt alsLong gehalten, obwohl der KonstruktorDouble erhält. Nur gespeicherter Wert2→Einheit1, sonst Gewicht(NULL→0). MatchCode-Parametervarchar20 ohne expliziteVB-Kürzung, BezeichnungNVarChar50. Keine Datum-/Quellsystemfilter. U610 FK auf lokaleWarengruppe; U839 ergänzt beide Auswertungsgruppenfelder ohne weitere FK in dieser Migration. ODBC-CommandsSQL_TIMEOUT, lokale FachcommandsStandard30s. Keine Transaktion, keine Lösch-/Archiv-/Berechnungskette. Ein Fehler stoppt den Rest, frühere lokale Änderungen bleiben; BASE-Rückmeldungen gesondert. Externer Artikel/WGR-VertragQ13, aktuellesSchemaQ02. Keine fachliche Bestätigung des Einheiten-/Rabattverhaltens. ==== Einstellungen ==== ^ Beziehung ^ Schlüssel / Variable ^ Default ^ Einflussweg ^ Wirkung ^ Beleg ^ | APCKT-S001 | ''SCHNITT_APC_DSN'' / ''SCHNITT_AproconDSN'' | leer | CheckApcConnect/ApcConnectionString | ODBC-Datenquelle ohne dokumentierte Verbindungswerte | APCKT:B,APCKT:BASE,APCKT:SET | | APCKT-S002 | ''SQL_TIMEOUT'' / ''SQLTimeOut'' | 60 | ODBC-Lesecommands | Quellabfragen verwenden Einstellung, lokale Fachcommands dagegen Default30s | APCKT:B,APCKT:SET | ==== Feldbeziehungen ==== Aprocon bezeichnet externe ODBC-Rolle, kein bestätigtes Schema; lokal Anmeldedatenbank. ^ Beziehung ^ Tabelle.Feld ^ Operation ^ Datenfluss / Verwendung ^ Bedingung ^ Beleg ^ | APCKT-D001 | ''Aprocon.Warengruppen.Nummer'' | SELECT | Alle Warengruppen im Dictionary nach Nummer | ODBC erfolgreich, doppelte Nummer bricht ab | APCKT:B | | APCKT-D002 | ''Aprocon.Warengruppen.Bezeichnung'' | SELECT | Alle Warengruppen im Dictionary nach Nummer | ODBC erfolgreich, doppelte Nummer bricht ab | APCKT:B | | APCKT-D003 | ''Aprocon.Warengruppen.AuswertungsGruppe'' | SELECT | Alle Warengruppen im Dictionary nach Nummer | ODBC erfolgreich, doppelte Nummer bricht ab | APCKT:B | | APCKT-D004 | ''Aprocon.Artikel.Nummer'' | SELECT | Artikelnummer>0; GewichtNULL→0, Artikel nach Nummer eindeutig im VB-Dictionary | ODBC; Waagenrabatt wird nicht lokal geschrieben | APCKT:B | | APCKT-D005 | ''Aprocon.Artikel.Bezeichnung'' | SELECT | Artikelnummer>0; GewichtNULL→0, Artikel nach Nummer eindeutig im VB-Dictionary | ODBC; Waagenrabatt wird nicht lokal geschrieben | APCKT:B | | APCKT-D006 | ''Aprocon.Artikel.Warengruppe'' | SELECT | Artikelnummer>0; GewichtNULL→0, Artikel nach Nummer eindeutig im VB-Dictionary | ODBC; Waagenrabatt wird nicht lokal geschrieben | APCKT:B | | APCKT-D007 | ''Aprocon.Artikel.Skontierbar'' | SELECT | Artikelnummer>0; GewichtNULL→0, Artikel nach Nummer eindeutig im VB-Dictionary | ODBC; Waagenrabatt wird nicht lokal geschrieben | APCKT:B | | APCKT-D008 | ''Aprocon.Artikel.Waagenrabatt'' | SELECT | Artikelnummer>0; GewichtNULL→0, Artikel nach Nummer eindeutig im VB-Dictionary | ODBC; Waagenrabatt wird nicht lokal geschrieben | APCKT:B | | APCKT-D009 | ''Aprocon.Artikel.Berechnungseinheit'' | SELECT | Artikelnummer>0; GewichtNULL→0, Artikel nach Nummer eindeutig im VB-Dictionary | ODBC; Waagenrabatt wird nicht lokal geschrieben | APCKT:B | | APCKT-D010 | ''Aprocon.Artikel.Gewicht'' | SELECT | Artikelnummer>0; GewichtNULL→0, Artikel nach Nummer eindeutig im VB-Dictionary | ODBC; Waagenrabatt wird nicht lokal geschrieben | APCKT:B | | APCKT-D011 | ''Aprocon.Artikel.MatchCode'' | SELECT | Artikelnummer>0; GewichtNULL→0, Artikel nach Nummer eindeutig im VB-Dictionary | ODBC; Waagenrabatt wird nicht lokal geschrieben | APCKT:B | | APCKT-D012 | ''Aprocon.Artikel.Leergut'' | SELECT | Artikelnummer>0; GewichtNULL→0, Artikel nach Nummer eindeutig im VB-Dictionary | ODBC; Waagenrabatt wird nicht lokal geschrieben | APCKT:B | | APCKT-D013 | ''Aprocon.Artikel.Auswertungsgruppe'' | SELECT | Artikelnummer>0; GewichtNULL→0, Artikel nach Nummer eindeutig im VB-Dictionary | ODBC; Waagenrabatt wird nicht lokal geschrieben | APCKT:B | | APCKT-D014 | ''KRWarenGruppen.ID'' | SELECT/INSERT | Artikel-WGR und anschließend alle Quell-WGR upserten | 2025 und2026, auch bei update-only Artikelmodus | APCKT:B | | APCKT-D015 | ''KRWarenGruppen.Bezeichnung'' | INSERT/UPDATE | Erst '-' und Artikelgruppe, dann Trim(Bezeichnung)/Quellgruppe überschreibt | Jede Artikel-WGR; anschließend alle Quell-WGR | APCKT:B | | APCKT-D016 | ''KRWarenGruppen.KRAuswertungsGruppe'' | INSERT/UPDATE | Erst '-' und Artikelgruppe, dann Trim(Bezeichnung)/Quellgruppe überschreibt | Jede Artikel-WGR; anschließend alle Quell-WGR | APCKT:B | | APCKT-D017 | ''KRKostenTräger.ID'' | SELECT | UPDATE-Match auf Quellartikel.Nummer, ohne Systemfilter | 2025 und2026 | APCKT:B | | APCKT-D018 | ''KRKostenTräger.ID'' | INSERT | Quellartikel.Nummer | Nur2026: INSERT-Schlüssel vorhanden und UPDATE rowcount0 | APCKT:B | | APCKT-D019 | ''KRKostenTräger.KRWarenGruppe'' | UPDATE | Artikelwerte; BezeichnungTrim/Left50; Einheit=BERECH2→1, sonstGewicht | 2025 und2026 bestehende IDs | APCKT:B | | APCKT-D020 | ''KRKostenTräger.Bezeichnung'' | UPDATE | Artikelwerte; BezeichnungTrim/Left50; Einheit=BERECH2→1, sonstGewicht | 2025 und2026 bestehende IDs | APCKT:B | | APCKT-D021 | ''KRKostenTräger.Skonto'' | UPDATE | Artikelwerte; BezeichnungTrim/Left50; Einheit=BERECH2→1, sonstGewicht | 2025 und2026 bestehende IDs | APCKT:B | | APCKT-D022 | ''KRKostenTräger.Einheit'' | UPDATE | Artikelwerte; BezeichnungTrim/Left50; Einheit=BERECH2→1, sonstGewicht | 2025 und2026 bestehende IDs | APCKT:B | | APCKT-D023 | ''KRKostenTräger.MatchCode'' | UPDATE | Artikelwerte; BezeichnungTrim/Left50; Einheit=BERECH2→1, sonstGewicht | 2025 und2026 bestehende IDs | APCKT:B | | APCKT-D024 | ''KRKostenTräger.Leergut'' | UPDATE | Artikelwerte; BezeichnungTrim/Left50; Einheit=BERECH2→1, sonstGewicht | 2025 und2026 bestehende IDs | APCKT:B | | APCKT-D025 | ''KRKostenTräger.KRAuswertungsGruppe'' | UPDATE | Artikelwerte; BezeichnungTrim/Left50; Einheit=BERECH2→1, sonstGewicht | 2025 und2026 bestehende IDs | APCKT:B | | APCKT-D026 | ''KRKostenTräger.KRWarenGruppe'' | INSERT | Gleiche Zuordnung; keine explizite Rabatt-Zuweisung im SQL | Nur2026 fehlende IDs | APCKT:B | | APCKT-D027 | ''KRKostenTräger.Bezeichnung'' | INSERT | Gleiche Zuordnung; keine explizite Rabatt-Zuweisung im SQL | Nur2026 fehlende IDs | APCKT:B | | APCKT-D028 | ''KRKostenTräger.Skonto'' | INSERT | Gleiche Zuordnung; keine explizite Rabatt-Zuweisung im SQL | Nur2026 fehlende IDs | APCKT:B | | APCKT-D029 | ''KRKostenTräger.Einheit'' | INSERT | Gleiche Zuordnung; keine explizite Rabatt-Zuweisung im SQL | Nur2026 fehlende IDs | APCKT:B | | APCKT-D030 | ''KRKostenTräger.MatchCode'' | INSERT | Gleiche Zuordnung; keine explizite Rabatt-Zuweisung im SQL | Nur2026 fehlende IDs | APCKT:B | | APCKT-D031 | ''KRKostenTräger.Leergut'' | INSERT | Gleiche Zuordnung; keine explizite Rabatt-Zuweisung im SQL | Nur2026 fehlende IDs | APCKT:B | | APCKT-D032 | ''KRKostenTräger.KRAuswertungsGruppe'' | INSERT | Gleiche Zuordnung; keine explizite Rabatt-Zuweisung im SQL | Nur2026 fehlende IDs | APCKT:B | | APCKT-D033 | ''KRWarenGruppen.ID'' | CONSTRAINT | Lokaler FK aus KRKostenTräger.KRWarenGruppe; Gruppen vor Artikel angelegt | Artikel-INSERT/UPDATE | APCKT:U610 | ===== 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, APCKT:B | [[https://github.com/seegerstefan/pep4desktop/blob/f1d82a003b62f2658f06eaa943dc685ab219bdf3/PEP4/cSchnittstellen/Programme/Schnittstellen/Kostenrechnung/cSchnittKRApc.vb|PEP4/cSchnittstellen/Programme/Schnittstellen/Kostenrechnung/cSchnittKRApc.vb]] | | BASE:BASE, APCKT:BASE | [[https://github.com/seegerstefan/pep4desktop/blob/f1d82a003b62f2658f06eaa943dc685ab219bdf3/PEP4/cSchnittstellen/Programme/Schnittstellen/cSchnitt_Basis.vb|PEP4/cSchnittstellen/Programme/Schnittstellen/cSchnitt_Basis.vb]] | | BASE:SET, APCKT: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]] | | APCKT:U610 | [[https://github.com/seegerstefan/pep4desktop/blob/f1d82a003b62f2658f06eaa943dc685ab219bdf3/Sqlfiles/PEP4Update/update_0610.sql|Sqlfiles/PEP4Update/update_0610.sql]] | | APCKT:U839 | [[https://github.com/seegerstefan/pep4desktop/blob/f1d82a003b62f2658f06eaa943dc685ab219bdf3/Sqlfiles/PEP4Update/update_0839.sql|Sqlfiles/PEP4Update/update_0839.sql]] | Siehe auch: [[schnittstellen:schnittstellen|Übersicht der Schnittstellen]]. Keine Ausführung oder Fehlerkorrektur.