====== Schnittstelle 1068: KaDeWe-CAR-Umsätze im Intervall berechnen ====== Du berechnest vorhandene CAR-Transaktionen für ein Datumsintervall. Verkäuferumsätze, Tageswerte und Stundenwerte werden dabei neu aufgebaut. Stand: **02.10.2026**, statische Analyse von PEP4 Desktop, Commit ''f1d82a003b62f2658f06eaa943dc685ab219bdf3''. **Statisch dokumentiert; Nutzerprüfung offen**. Kein Schnittstellenlauf, Live-Schema- oder API-Test. Lokale PEP-Änderungen außerhalb dieser Schnittstellen wurden nicht einbezogen. ===== Zweck, Parameter und Datenvertrag ===== Art Programm, Gruppe Umsatz. Keine Eingangsdatei, kein Importarchiv. DATVON und DATBIS: Datum-Parameter, SetDatum mit Datumsmusterauswertung; beide müssen gültig sein. Keine Prüfung Von≤Bis. Datumshelfer siehe Datumsmuster (interne Referenz), Quellenverzeichnis BASE. Öffnet Anmeldung-DB bereits vor Datumsprüfung und startet ausschließlich ''Calc_Umsatz_KaDeWeCar(@DatVon,@DatBis)'', SQL-Timeout0. **Kein Import und kein Temp-Transfer** Teil dieser Kennung. Shared-Einstieg reicht Instanz-Fehlerfrei() als Boolean durch; innere Verarbeiten ist untypisiert, aber hat Return. ===== SQL-Kette, Ausgänge und Betrieb ===== Die gemeinsame CAR-Berechnung ist nachfolgend mit ihren Feldern beschrieben. Dieses Profil beschreibt vollständig die hier aufgerufene Fach-SP und ihre kanonischen Leser-/Schreiberbeziehungen: Import.dbo.Umsatz_KaDeWe_Car, ITZeitausweis, UmsKstGr, PepGruppen, Zusatzleistung → UmsatzVK, Umsätze und UmsätzeIstStunde. Globale Intervall-DELETEs von Verkäufer-/Stundenwerten, neun Tagesfelder zuerst0 für alle Gruppen, dann selektiv neu befüllt. Kein IstFixed-/SRC-Schutz. Zusatzleistung als Brutto, Netto/1.19. ===== Befunde und Tests ===== CAR-Tagesrückstellung ist breiter als Wiederbefüllung: Summengruppen werden auf0 gesetzt und anschließend nicht neu befüllt. IstKasseMenge/IstKasseKLSMenge hingegen bleiben ohne Treffer alt. Keine Transaktion zwischen DELETEs, Updates, Inserts und Rückmeldung. Vor Nutzerprüfung Intervall/Fremdgruppen, Retouren-Differenzrichtung, Mehrfachmapping und Zusatzleistungs-Schlüsselkollisionen isolieren. Keine automatische Folgekette 1069→1068 erforderlich: 1069 ruft diese SP selbst auf. ===== Systemeinstellungen und gemeinsame Nebenwirkungen ===== Gemeinsamer Rückmeldepfad: cSchnitt_Basis mit bedingtem Logging, Mail-/Outbox- und Meldungs-API-Aufruf. MANUELL/SILENT und Rückmeldeschalter beeinflussen diesen Pfad; serverseitige API-Wirkungen bleiben offen. Keine zusätzliche fachliche ZW-Einstellung im lokalen Importpfad gelesen. Timeoutwerte stehen im Betriebsabschnitt, nicht automatisch SQL_TIMEOUT zuordnen. Nur belegte Profilzuordnung; Fachdaten und Rückmeldung sind nicht atomar. Defaults sind keine Livewerte. ===== Feldbeziehungen ===== Unqualifizierte Fachobjekte in der Anmeldedatenbank; ''Import.dbo'' ausdrücklich Importdatenbank. Dateifelder stehen separat im Dateivertrag. ^ Beziehung ^ Tabelle.Feld ^ Operation ^ Datenfluss / Verwendung ^ Bedingung ^ Beleg ^ ===== SQL-Vertrag und Ablauf ===== ''Calc_Umsatz_KaDeWeCar(@DatumVon datetime,@DatumBis datetime)'' (SQL) verarbeitet das geschlossene Intervall ohne Prüfung Von≤Bis und ohne Transaktion. Kein ZW-Einstellungsschlüssel innerhalb dieser SP. BASE-Rückmeldungen stehen separat in den Einzelbeschreibungen. 1. ''UmsatzVK'' im Intervall vollständig löschen. ''#UmsatzTmp'' summiert CAR-Beträge/Mengen auf Buchungsperson (Originalverkäufer, sonst Verkäufer), Buchungstag (Originaldatum, sonst Datum), FilialWarengruppe. Filter: Originaldatum NULL oder ''datediff(day,Datum,Originaldatum)<15'', Buchungstag im Intervall, Verkäufer nicht NULL, OwnBuy=1, Menge>0 oder OriginalVerkaeufernummer>0. Die Differenzrichtung kann ältere Retouren einschließen; kein absoluter 14-Tage-Abstand. ITZeitausweis zeitgültig und numerisch >0; UmsKstGr zeitgültig. Gewichtete INSERTs. Zusatzleistung zusätzlich als Verkäuferumsatz: Artikel=PEP-Gruppe, Menge ist Brutto, Netto gerundet /1.19, Stückmenge0. 2. Neun Tagesfelder von ''Umsätze'' für sämtliche Gruppen im Intervall auf0 setzen. Kein IstFixed-/Quellsystemfilter. ''#UmsatzTmp2'' aggregiert nach Verkaufstag und FilialWarengruppe, ''#UmsatzTmp3'' gewichtet nach gültiger Gruppenzuordnung. OwnBuy- und Gesamtbeträge getrennt, geklebt = Ersatzverkäufer>0; fremdgeklebt = tatsächlicher Verkäufer>0 ohne passenden Personjoin. UPDATE nur vorhandener Gruppen mit AusPepGruppenUmsatz=0. Zusatzleistungsbeträge werden auf diese Gruppen addiert. 3. ''UmsätzeIstStunde'' im ganzen Intervall löschen, ''#UmsatzTmp5'' summiert OwnBuy nach Verkaufstag/Stunde/Warengruppe, gewichtete INSERTs nach UmsKstGr. Keine Zusatzleistungs-Stundenwerte. Temp-Tabellen werden wieder entfernt; ihre Felder sind die im Text benannten Aggregationsaliase, keine persistenten Schnittstellenausgänge. Wichtige Asymmetrie: ''IstKasseMenge'' und ''IstKasseKLSMenge'' werden nur bei Treffern überschrieben, nicht bei der globalen Tagesrückstellung auf0 gesetzt. Summengruppen werden zurückgestellt, dann vom CAR-Tagesupdate ausgeschlossen. Keine Tageszeilen-Neuanlage. UmsatzVK-Zusatzzeilen können mit CAR-Schlüsseln kollidieren; vorhandene PKs sind beim Test zu berücksichtigen. ===== Feldbeziehungen ===== ^ Beziehung ^ Tabelle.Feld ^ Operation ^ Datenfluss / Verwendung ^ Bedingung ^ Beleg ^ | CAR-D001 | ''Import.dbo.Umsatz_KaDeWe_Car.Datum'' | SELECT | Personen-/Tages-/Stundenaggregation; Detailfilter im Text | Zeitraum DATVON–DATBIS | SQL | | CAR-D002 | ''Import.dbo.Umsatz_KaDeWe_Car.OriginalDatum'' | SELECT | Personen-/Tages-/Stundenaggregation; Detailfilter im Text | Zeitraum DATVON–DATBIS | SQL | | CAR-D003 | ''Import.dbo.Umsatz_KaDeWe_Car.OriginalVerkaeufernummer'' | SELECT | Personen-/Tages-/Stundenaggregation; Detailfilter im Text | Zeitraum DATVON–DATBIS | SQL | | CAR-D004 | ''Import.dbo.Umsatz_KaDeWe_Car.Verkaeufernummer'' | SELECT | Personen-/Tages-/Stundenaggregation; Detailfilter im Text | Zeitraum DATVON–DATBIS | SQL | | CAR-D005 | ''Import.dbo.Umsatz_KaDeWe_Car.FilialWarengruppe'' | SELECT | Personen-/Tages-/Stundenaggregation; Detailfilter im Text | Zeitraum DATVON–DATBIS | SQL | | CAR-D006 | ''Import.dbo.Umsatz_KaDeWe_Car.OwnBuy'' | SELECT | Personen-/Tages-/Stundenaggregation; Detailfilter im Text | Zeitraum DATVON–DATBIS | SQL | | CAR-D007 | ''Import.dbo.Umsatz_KaDeWe_Car.Menge'' | SELECT | Personen-/Tages-/Stundenaggregation; Detailfilter im Text | Zeitraum DATVON–DATBIS | SQL | | CAR-D008 | ''Import.dbo.Umsatz_KaDeWe_Car.VK_Preis_Netto'' | SELECT | Personen-/Tages-/Stundenaggregation; Detailfilter im Text | Zeitraum DATVON–DATBIS | SQL | | CAR-D009 | ''Import.dbo.Umsatz_KaDeWe_Car.VK_Preis_Brutto'' | SELECT | Personen-/Tages-/Stundenaggregation; Detailfilter im Text | Zeitraum DATVON–DATBIS | SQL | | CAR-D010 | ''Import.dbo.Umsatz_KaDeWe_Car.DatumZeit'' | SELECT | DATEPART(hour) für Stundenumsatz | Zeitraum DATVON–DATBIS | SQL | | CAR-D011 | ''Import.dbo.Umsatz_KaDeWe_Car.Filiale'' | SELECT (berechnet) | FilialWarengruppe = Filiale * 1000000000000 + Warengruppe | Schema 0792 | DDL | | CAR-D012 | ''Import.dbo.Umsatz_KaDeWe_Car.Warengruppe'' | SELECT (berechnet) | FilialWarengruppe = Filiale * 1000000000000 + Warengruppe | Schema 0792 | DDL | | CAR-D013 | ''ITZeitausweis.PersonID'' | SELECT | Gültige Personzuordnung; Fremdverkauf über fehlenden Personjoin | Zeitraum DATVON–DATBIS | SQL | | CAR-D014 | ''ITZeitausweis.Zeitausweis'' | SELECT | Gültige Personzuordnung; Fremdverkauf über fehlenden Personjoin | Zeitraum DATVON–DATBIS | SQL | | CAR-D015 | ''ITZeitausweis.von'' | SELECT | Gültige Personzuordnung; Fremdverkauf über fehlenden Personjoin | Zeitraum DATVON–DATBIS | SQL | | CAR-D016 | ''ITZeitausweis.bis2'' | SELECT | Gültige Personzuordnung; Fremdverkauf über fehlenden Personjoin | Zeitraum DATVON–DATBIS | SQL | | CAR-D017 | ''UmsKstGr.Kst'' | SELECT | Warengruppe auf PEP-Gruppe abbilden und Beträge/Mengen gewichten | Zeitraum DATVON–DATBIS | SQL | | CAR-D018 | ''UmsKstGr.Gr'' | SELECT | Warengruppe auf PEP-Gruppe abbilden und Beträge/Mengen gewichten | Zeitraum DATVON–DATBIS | SQL | | CAR-D019 | ''UmsKstGr.Prozent'' | SELECT | Warengruppe auf PEP-Gruppe abbilden und Beträge/Mengen gewichten | Zeitraum DATVON–DATBIS | SQL | | CAR-D020 | ''UmsKstGr.von'' | SELECT | Warengruppe auf PEP-Gruppe abbilden und Beträge/Mengen gewichten | Zeitraum DATVON–DATBIS | SQL | | CAR-D021 | ''UmsKstGr.bis2'' | SELECT | Warengruppe auf PEP-Gruppe abbilden und Beträge/Mengen gewichten | Zeitraum DATVON–DATBIS | SQL | | CAR-D022 | ''PepGruppen.PEPGruppenID'' | SELECT | Existenzjoin für Zusatzleistung; Gruppenfilter für Tagesupdate | Zeitraum DATVON–DATBIS | SQL | | CAR-D023 | ''PepGruppen.AusPepGruppenUmsatz'' | SELECT | Existenzjoin für Zusatzleistung; Gruppenfilter für Tagesupdate | Zeitraum DATVON–DATBIS | SQL | | CAR-D024 | ''Zusatzleistung.Datum'' | SELECT | Artikel ist PEP-GruppenID; Menge als Bruttobetrag, Netto = Brutto/1.19 | Zeitraum DATVON–DATBIS | SQL | | CAR-D025 | ''Zusatzleistung.PersonID'' | SELECT | Artikel ist PEP-GruppenID; Menge als Bruttobetrag, Netto = Brutto/1.19 | Zeitraum DATVON–DATBIS | SQL | | CAR-D026 | ''Zusatzleistung.Artikel'' | SELECT | Artikel ist PEP-GruppenID; Menge als Bruttobetrag, Netto = Brutto/1.19 | Zeitraum DATVON–DATBIS | SQL | | CAR-D027 | ''Zusatzleistung.Menge'' | SELECT | Artikel ist PEP-GruppenID; Menge als Bruttobetrag, Netto = Brutto/1.19 | Zeitraum DATVON–DATBIS | SQL | | CAR-D028 | ''UmsatzVK.— Zeilen'' | DELETE | Alle Personen/Gruppen im Intervall, kein Quellsystemfilter | Zeitraum DATVON–DATBIS | SQL | | CAR-D029 | ''UmsatzVK.Datum'' | INSERT | Buchungsdatum; Zusatzleistungsdatum | Zeitraum DATVON–DATBIS | SQL | | CAR-D030 | ''UmsatzVK.PersonID'' | INSERT | ITZeitausweis.PersonID oder Zusatzleistung.PersonID | Zeitraum DATVON–DATBIS | SQL | | CAR-D031 | ''UmsatzVK.Gruppe'' | INSERT | UmsKstGr.Gr oder Zusatzleistung.Artikel | Zeitraum DATVON–DATBIS | SQL | | CAR-D032 | ''UmsatzVK.Menge'' | INSERT | gewichtete Stückmenge; Zusatzleistung 0 | Zeitraum DATVON–DATBIS | SQL | | CAR-D033 | ''UmsatzVK.VKWert'' | INSERT | gewichtete Bruttosumme; Zusatzleistung.Menge | Zeitraum DATVON–DATBIS | SQL | | CAR-D034 | ''UmsatzVK.VKWertNetto'' | INSERT | gewichtete Nettosumme; Zusatzleistung round(Menge/1.19,2) | Zeitraum DATVON–DATBIS | SQL | | CAR-D035 | ''Umsätze.Datum'' | SELECT | Datumsbereich und Gruppenjoin für vorhandene Tageszeilen | Zeitraum DATVON–DATBIS | SQL | | CAR-D036 | ''Umsätze.GruppenID'' | SELECT | Datumsbereich und Gruppenjoin für vorhandene Tageszeilen | Zeitraum DATVON–DATBIS | SQL | | CAR-D037 | ''Umsätze.Ist'' | UPDATE | Zuerst 0 für ALLE vorhandenen Gruppen im Intervall; kein IstFixed/SRC-Filter | Zeitraum DATVON–DATBIS | SQL | | CAR-D038 | ''Umsätze.IstKassenBon'' | UPDATE | Zuerst 0 für ALLE vorhandenen Gruppen im Intervall; kein IstFixed/SRC-Filter | Zeitraum DATVON–DATBIS | SQL | | CAR-D039 | ''Umsätze.IstKassenBonNetto'' | UPDATE | Zuerst 0 für ALLE vorhandenen Gruppen im Intervall; kein IstFixed/SRC-Filter | Zeitraum DATVON–DATBIS | SQL | | CAR-D040 | ''Umsätze.IstNetto'' | UPDATE | Zuerst 0 für ALLE vorhandenen Gruppen im Intervall; kein IstFixed/SRC-Filter | Zeitraum DATVON–DATBIS | SQL | | CAR-D041 | ''Umsätze.IstKasse'' | UPDATE | Zuerst 0 für ALLE vorhandenen Gruppen im Intervall; kein IstFixed/SRC-Filter | Zeitraum DATVON–DATBIS | SQL | | CAR-D042 | ''Umsätze.TeileIst'' | UPDATE | Zuerst 0 für ALLE vorhandenen Gruppen im Intervall; kein IstFixed/SRC-Filter | Zeitraum DATVON–DATBIS | SQL | | CAR-D043 | ''Umsätze.IstKassenBericht'' | UPDATE | Zuerst 0 für ALLE vorhandenen Gruppen im Intervall; kein IstFixed/SRC-Filter | Zeitraum DATVON–DATBIS | SQL | | CAR-D044 | ''Umsätze.IstKassenBerichtNetto'' | UPDATE | Zuerst 0 für ALLE vorhandenen Gruppen im Intervall; kein IstFixed/SRC-Filter | Zeitraum DATVON–DATBIS | SQL | | CAR-D045 | ''Umsätze.IstNettoIntern'' | UPDATE | Zuerst 0 für ALLE vorhandenen Gruppen im Intervall; kein IstFixed/SRC-Filter | Zeitraum DATVON–DATBIS | SQL | | CAR-D046 | ''Umsätze.Ist'' | UPDATE | OwnBuy-Netto + Zusatz-Netto | Nur passende vorhandene Tageszeilen, AusPepGruppenUmsatz=0 | SQL | | CAR-D047 | ''Umsätze.IstKassenBon'' | UPDATE | OwnBuy-Brutto + Zusatz-Brutto | Nur passende vorhandene Tageszeilen, AusPepGruppenUmsatz=0 | SQL | | CAR-D048 | ''Umsätze.IstKassenBonNetto'' | UPDATE | OwnBuy-Netto + Zusatz-Netto | Nur passende vorhandene Tageszeilen, AusPepGruppenUmsatz=0 | SQL | | CAR-D049 | ''Umsätze.IstNetto'' | UPDATE | OwnBuy-Netto + Zusatz-Netto | Nur passende vorhandene Tageszeilen, AusPepGruppenUmsatz=0 | SQL | | CAR-D050 | ''Umsätze.IstKasse'' | UPDATE | geklebtes OwnBuy-Netto + Zusatz-Netto | Nur passende vorhandene Tageszeilen, AusPepGruppenUmsatz=0 | SQL | | CAR-D051 | ''Umsätze.TeileIst'' | UPDATE | OwnBuy-Menge | Nur passende vorhandene Tageszeilen, AusPepGruppenUmsatz=0 | SQL | | CAR-D052 | ''Umsätze.IstKasseMenge'' | UPDATE | geklebte OwnBuy-Menge (nicht vorgängig zurückgesetzt) | Nur passende vorhandene Tageszeilen, AusPepGruppenUmsatz=0 | SQL | | CAR-D053 | ''Umsätze.IstKasseKLSMenge'' | UPDATE | fremdgeklebte OwnBuy-Menge (nicht vorgängig zurückgesetzt) | Nur passende vorhandene Tageszeilen, AusPepGruppenUmsatz=0 | SQL | | CAR-D054 | ''Umsätze.IstKassenBericht'' | UPDATE | Gesamtbrutto + Zusatz-Brutto | Nur passende vorhandene Tageszeilen, AusPepGruppenUmsatz=0 | SQL | | CAR-D055 | ''Umsätze.IstKassenBerichtNetto'' | UPDATE | Gesamtnetto + Zusatz-Netto | Nur passende vorhandene Tageszeilen, AusPepGruppenUmsatz=0 | SQL | | CAR-D056 | ''Umsätze.IstNettoIntern'' | UPDATE | geklebtes Netto minus fremdgeklebtes Netto + Zusatz-Netto | Nur passende vorhandene Tageszeilen, AusPepGruppenUmsatz=0 | SQL | | CAR-D057 | ''UmsätzeIstStunde.— Zeilen'' | DELETE | Alle Stunden/Gruppen im Intervall; kein Systemfilter | Zeitraum DATVON–DATBIS | SQL | | CAR-D058 | ''UmsätzeIstStunde.Datum'' | INSERT | Verkaufstag, nicht OriginalDatum | Zeitraum DATVON–DATBIS | SQL | | CAR-D059 | ''UmsätzeIstStunde.GruppenID'' | INSERT | UmsKstGr.Gr | Zeitraum DATVON–DATBIS | SQL | | CAR-D060 | ''UmsätzeIstStunde.Stunde'' | INSERT | DATEPART(hour, DatumZeit) | Zeitraum DATVON–DATBIS | SQL | | CAR-D061 | ''UmsätzeIstStunde.Umsatz'' | INSERT | SUM OwnBuy-Brutto * Prozent | Zeitraum DATVON–DATBIS | SQL | | CAR-D062 | ''UmsätzeIstStunde.UmsatzNetto'' | INSERT | SUM OwnBuy-Netto * Prozent | Zeitraum DATVON–DATBIS | SQL | ===== Quellen und weitere Schritte ===== Enum, aktive Registrierung, Projekteinschluss und die in der internen Einzelbeschreibung genannten VB-/SQL-Dateien wurden am Quellencommit geprüft. Konkrete fehlende Quellen und fachliche Fragen stehen oben; bei Tests benötigst du eine isolierte Umgebung und synthetische Dateien. [[schnittstellen:schnittstellen|Übersicht der Schnittstellen]]