19 KiB
Finance Datenfluss fuer Andreas
Stand: 2026-06-11
Zweck: Diese Notiz beschreibt den tatsaechlichen technischen Datenfluss im Finance Cockpit: wo Daten geholt werden, wann Felder veraendert werden, wann Wechselkurse wirken, wie die zentrale Excel entsteht und welche Quelle die Sparteninformationen liefert.
Fokus nur Wechselkurs/Kursanwendung: docs/FINANCE_KURS_WORKFLOW_2026-06-09.md.
Aktuelle Finance-Schulung: docs/FINANCE_SCHULUNG_FINANZ_2026-06-11.md.
Prozessgrafiken:
docs/FINANCE_PROZESS_EXPORT_DASHBOARD_2026-06-11.svgdocs/FINANCE_AUDIT_CSV_QUELLE_2026-06-11.svg
Kurzfazit
- Finance Summary, Management Analyse und Spartenanalyse lesen nicht aus dem SharePoint-Excel. Sie lesen entweder aus
CentralSalesRecordsoder, wenn aktiviert, aus den neuesten verarbeiteten Audit-CSV je Standort. - Fuer Finance/Revision gibt es einen Audit-CSV-Modus. Standortexporte koennen nach Mapping und Transformation je Standort eine CSV schreiben; per Setting koennen zentrale Excel, Finance Summary, Soll/Ist und Management-Analyse aus diesen CSV statt aus
CentralSalesRecordslesen. - Die Audit-CSV heisst
Sales_ProcessedMergeInput_<TSC>_<yyyy-MM-dd>.csv. Der Name markiert bewusst, dass es das verarbeitete Merge-Eingangsfile ist, nicht die originale Standortdatei. - Das SharePoint-Excel
Sales_All_*.xlsxist ein Export-/Ablageergebnis, nicht die Live-Quelle der Cockpit-Anzeige. - Jeder Standortexport ersetzt in
CentralSalesRecordsnur die Daten dieses Standorts. - Die zentrale Excel wird danach aus der aktuell gewaehlten zentralen Auswertungsquelle erzeugt: Standard
CentralSalesRecords, optional Audit-CSV. - Wechselkurse veraendern den Standortexport und
CentralSalesRecordsnormalerweise nicht. Sie wirken in Analyse-/Anzeige-Sichten, wenn eine Zielwaehrung wie CHF/EUR/USD ausgewaehlt ist, oder in explizit konfigurierten Transformationen. - Sparteninformationen kommen fuehrend aus SAP/TR-AG
ProductDivisionRefSet. Aktuell werden sie beim ZSCHWEIZ-/CH-/AT-Export direkt mitgeladen. Andere Laender werden in der Analyse ueber ihre Materialnummer gegen diese TR-AG-Referenz gematcht.
Technischer Ablauf Standortexport
Ausloeser:
- Export Dashboard: einzelner Standort oder
Alle exportieren. - Timer, falls aktiv.
- Intern:
ExportOrchestrationServiceruftSiteExportService.ExportAsync(...).
Ablauf pro Standort:
- Standort und Quellsystem werden geladen.
- Adapter wird nach
ConnectionKindgewaehlt:HanaDataSourceAdapterfuer BI1/HANA.SapGatewayDataSourceAdapterfuer SAP OData.ManualExcelDataSourceAdapterfuer Excel/CSV/SharePoint-Dateien.
- Rohdaten werden als
SalesRecord-Liste aufgebaut. - Aktive
FieldTransformationRulesfuer das Quellsystem werden angewendet. - Falls
Audit-CSV je Standort schreibenaktiv ist, wird eine verarbeitete CSV geschrieben:- Datei:
Sales_ProcessedMergeInput_<TSC>_<Datum>.csv. - Ordner: gleicher lokaler Ordner wie die Standort-Excel.
- Inhalt: Daten nach Mapping und Transformation.
- Datei:
- Eine lokale Standort-Excel
Sales_<TSC>_<Datum>.xlsxwird erzeugt. CentralSalesRecordswird fuer diesen Standort ersetzt:- alte Saetze mit
SiteId = Standortloeschen. - neue Saetze einfuegen.
- alte Saetze mit
- Falls SharePoint komplett konfiguriert ist, werden Standort-Excel und Audit-CSV in den Landesordner hochgeladen.
Wichtig: Die Reihenfolge ist zuerst Daten holen, dann Transformationen, dann Audit-CSV, dann lokale Excel, dann zentrale Tabelle, dann SharePoint-Upload. Der SharePoint-Upload entscheidet nicht, was in der Cockpit-Anzeige erscheint.
Zentrale Auswertungsquelle
Der Schalter liegt in der App unter:
Einstellungen > Export Einstellungen > Audit-CSV / nachvollziehbarer Datenfluss
| Schalter | Wirkung |
|---|---|
Audit-CSV je Standort schreiben |
Standortexport schreibt Sales_ProcessedMergeInput_*.csv nach Mapping und Transformation. |
Zentrale Auswertung aus Audit-CSV |
Finance Summary, Management Analyse, Soll/Ist und zentrale Excel lesen die neuesten Audit-CSV je TSC statt CentralSalesRecords. |
Lokaler Standardpfad Standort-Dateien |
Ordner fuer Standort-Excel und Audit-CSV. |
Wenn Zentrale Auswertung aus Audit-CSV aktiv ist, sucht die App im Standort-Exportordner je TSC die neueste passende CSV. Wenn keine Sales_ProcessedMergeInput_*.csv vorhanden ist, ist der Audit-Modus nicht auswertbar.
Datenquellen pro Quelltyp
HANA / SAP B1
Betroffen:
| Land | TSC | Schema | Quelle |
|---|---|---|---|
| Frankreich | TRFR |
fr01_p / lokal teils FR01_p |
BI1/HANA |
| Italien | TRIT |
it01_p |
BI1/HANA |
| USA | TRUS |
us01_p |
BI1/HANA |
| Indien | TRIN |
TRAFAG_LIVE |
HANA/Sage-Quelle |
Standard-B1-Abfrage:
- Rechnungen aus
OINV+INV1. - Gutschriften aus
ORIN+RIN1. - Stornierte Belege werden ausgeschlossen:
CANCELED = 'N'. - Datumsfilter auf
DocDate >= ExportSettings.DateFilter.
Wichtige Feldbelegung:
| Zielfeld | HANA/B1-Feld |
|---|---|
PostingDate |
OINV.DocDate / ORIN.DocDate |
InvoiceDate |
OINV.TaxDate / ORIN.TaxDate |
Material |
INV1.ItemCode / RIN1.ItemCode |
Name |
INV1.Dscription / RIN1.Dscription |
ProductGroup |
OITB.ItmsGrpNam |
Quantity |
Invoice positiv, Credit Note negativ |
SalesPriceValue |
LineTotal, bei Credit Note negativ |
SalesCurrency |
OADM.MainCurncy |
DocumentCurrency |
DocCur |
DocumentTotalForeignCurrency |
DocTotalFC, bei Credit Note negativ |
DocumentTotalLocalCurrency |
DocTotal, bei Credit Note negativ |
VatSumForeignCurrency |
VatSumFC, bei Credit Note negativ |
VatSumLocalCurrency |
VatSum, bei Credit Note negativ |
DocumentRate |
DocRate |
CompanyCurrency |
OADM.MainCurncy |
DocumentType |
INV oder CRN |
Italien hat zusaetzlich einen HANA-Filter:
AcctCode LIKE '47005%'AcctCode NOT LIKE '4700504%'- bestimmte
CardCode-Ausschluesse.
Diese HANA-Filter greifen bereits beim Datenholen, also vor Transformation, Excel und CentralSalesRecords.
SAP OData / ZSCHWEIZ
Betroffen:
| Land | TSC | Quelle |
|---|---|---|
| CH / AT | ZSCHWEIZ |
SAP OData ZPOWERBI_EINKAUF_SRV |
Aktive OData-Quellen:
| Alias | EntitySet | Zweck |
|---|---|---|
Z |
FinanzdataSchweizOeSet |
Verkaufs-/Finance-Zeilen CH/AT |
P |
ProductDivisionRefSet |
zentrale TR-AG-Spartenreferenz |
Join:
Z.Matnr = P.Matnr
Wichtige Feldbelegung:
| Zielfeld | Quelle |
|---|---|
Tsc |
Z.Tsc |
Land |
Z.Land1 |
InvoiceNumber |
Z.Vbeln |
PositionOnInvoice |
Z.Posnr |
PostingDate |
Z.Fkdat |
InvoiceDate |
Z.Fkdat |
Material |
Z.Matnr |
Name |
Z.Arktx |
ProductGroup |
Z.Prodh |
SalesPriceValue |
Z.NetwrHc |
SalesCurrency |
Z.Hwaer |
DocumentCurrency |
Z.Waerk |
DocumentTotalForeignCurrency |
Z.NetwrDc |
DocumentTotalLocalCurrency |
Z.NetwrHc |
VatSumForeignCurrency |
0 |
VatSumLocalCurrency |
0 |
DocumentRate |
Z.Kurrf |
CompanyCurrency |
Z.Hwaer |
DocumentType |
Z.Fkart |
Spartenfelder aus P = ProductDivisionRefSet:
| Zielfeld | Quelle |
|---|---|
ProductHierarchyCode |
P.Paph1 |
ProductHierarchyText |
P.Paph1Text |
ProductFamilyCode |
P.Wwpfa |
ProductFamilyText |
P.WwpfaText |
ProductDivisionCode |
P.Wwpsp |
ProductDivisionText |
P.WwpspText |
ProductMappingAssigned |
P.IsAssigned |
Diese Spartenfelder werden beim ZSCHWEIZ-Export direkt in CentralSalesRecords gespeichert.
Manuelle Excel/CSV / SharePoint-Dateien
Betroffen:
| Land | Beispiel | Quelle |
|---|---|---|
| UK | TRUK |
SharePoint-Ordner Import/Finance/UK_B1, fachlich Sage |
| Spanien | TRES / lokal auch TRSE in alten Daten |
Sage CSV / SharePoint Import/Finance/Spanien |
| Deutschland | TRDE |
Alphaplan Excel |
Ablauf:
- Datei wird lokal, per UNC oder aus SharePoint geladen.
- Bei SharePoint-Ordnern wird die passende neueste Datei bzw. bei Spanien alle
Spain_Sales*.csvgelesen. - Spalten werden ueber manuelle Mappings oder Headernamen auf
SalesRecordgemappt. - UK nutzt
SageNetSales([Sales Price/Value], [Quantity], [Document Type], ...). - Spanien-Deltas werden nach
SourceLineId, sonstTSC + InvoiceNumber + PositionOnInvoice + Material, dedupliziert.
Manuelle Dateien koennen Spartenfelder enthalten, wenn sie passende Spalten liefern. Im aktuellen fachlichen Zielbild sind lokale ERP-Sparten aber nicht fuehrend; die Spartenanalyse matched gegen TR-AG/SAP-Referenz.
Wann werden Felder veraendert?
Beim Datenholen / Mapping
Die meisten Felder werden beim Import initial gesetzt:
- HANA/B1: SQL-Abfrage erzeugt
SalesRecorddirekt. - SAP OData: OData-Zeilen werden per Mapping/Join in
SalesRecordgeschrieben. - Manual Excel/CSV: Excel-/CSV-Spalten werden per Mapping in
SalesRecordgeschrieben.
Beispiele fuer aktive Veraenderung beim Holen:
- B1-Gutschriften werden bereits negativ geladen:
Quantity * -1LineTotal * -1DocTotal * -1VatSum * -1
- ZSCHWEIZ setzt
VatSum* = 0, weil Nettowerte ausNetwrHc/NetwrDckommen. - ZSCHWEIZ haengt Spartenfelder aus
ProductDivisionRefSetper Join an. - UK berechnet den Positionswert aus Stueckpreis mal Menge.
- Spanien setzt Credit Notes / REC negativ.
Nach dem Datenholen: Transformationen
Danach laufen aktive FieldTransformationRules:
- Einfache Feldtransformationen kopieren/normalisieren Werte von
SourceFieldnachTargetField. FirstNonEmptysetzt ein Zielfeld aus dem ersten nicht-leeren Kandidatenfeld.ConvertCurrencykann einen Betrag ueber die Kurstabelle in eine Zielwaehrung umrechnen und optional ein Ziel-Waehrungsfeld setzen.
Wichtig: Transformationen laufen vor lokaler Standort-Excel und vor CentralSalesRecords. Falls eine aktive Transformation ein Feld veraendert, wird der veraenderte Wert in Excel und Datenbank gespeichert.
Beim Schreiben in CentralSalesRecords
Es wird fachlich nichts neu berechnet. Die App speichert die nach Import und Transformation vorliegenden SalesRecord-Werte.
Pro Standort:
DELETE CentralSalesRecords WHERE SiteId = <Standort>
INSERT neue Records fuer diesen Standort
Wann wirkt der Wechselkurs?
Es gibt drei getrennte Faelle.
Detail nur zum Kursfluss vom Land bis zur zentralen Dashboard-Analyse: docs/FINANCE_KURS_WORKFLOW_2026-06-09.md.
1. Standard-Finance-Soll/Ist und Finance Summary
Kein allgemeiner Wechselkurs wird angewendet.
- Fuehrend ist die Hauswaehrung / lokale Finance-Waehrung.
Finance SummarynutztSalesPriceValuenach Finance-Regeln.- Anzeige bleibt nach vorhandener Waehrung gruppiert.
- Wenn mehrere Waehrungen im Scope sind, zeigt die UI
Mixed.
Das gilt fuer:
- Management Analyse > Finance Summary.
- Management Analyse > Spartenanalyse.
- Zentrale Excel-Blatt
Finance Summary. - Zentrale Excel-Blatt
Finance Details.
2. Management Analyse / Rohdaten-Diagnose mit Zielwaehrung
Wenn in Analyse-Sichten eine Zielwaehrung wie CHF, EUR oder USD ausgewaehlt wird, rechnet die UI-Anzeige zur Laufzeit um.
Quelle:
CurrencyExchangeRates- gewaehltes
ExchangeRateDateFieldaus Settings:PostingDateInvoiceDateExtractionDate
Die Umrechnung passiert beim Anzeigen/Aggregieren in ManagementCockpitService, nicht beim Standortexport und nicht beim Erzeugen der zentralen Excel.
Wenn kein Kurs gefunden wird:
- Anzeige-Wert wird fuer diese Zeile
0in der Zielwaehrung. MissingExchangeRatewird gezaehlt und in Diagnosehinweisen angezeigt.
3. Explizite Transformation ConvertCurrency
Falls eine aktive FieldTransformationRule vom Typ ConvertCurrency gepflegt ist, passiert die Umrechnung beim Standortexport vor CentralSalesRecords.
Dann wird das konfigurierte Zielfeld dauerhaft mit dem umgerechneten Betrag beschrieben.
Standardlogik fuer Datum bei ConvertCurrency:
- konfiguriertes
dateField, falls angegeben. - sonst
InvoiceDate. - sonst
OrderDate. - sonst
ExtractionDate.
Finance-Regeln und Finance-Wert
Die Finance-Sicht wird nicht durch Excel-Formeln bestimmt, sondern durch FinanceRuleEngine.
Zeitliche Abgrenzung:
FinanceDate = PostingDate
sonst InvoiceDate
sonst ExtractionDate
Ausnahme:
- DE kann per Finance-Regel auf Jahr 2025 gezwungen werden, weil Alphaplan als Jahresfile geliefert wird.
Include/Exclude:
- Regeln koennen Zeilen ausschliessen.
- Regeln koennen Werte negativ setzen.
- Regeln koennen IT-Duplikate mit leerem Supplier Country deduplizieren.
Aktuelle Default-/Fachregeln:
- DE:
- Jahresfile 2025.
Trafag AGausschliessen.Magnetic Senseausschliessen.GS2510095ausschliessen.- Gutschriften mit
GS...negativ.
- IT:
CustomerNameenthaeltTrafag Italiaausschliessen.- IT-Zeilen mit leerem Supplier Country deduplizieren.
Der Finance-Wert ist:
Net Sales Actual = SalesPriceValue nach FinanceRuleEngine
Zentrale Excel
Ausloeser:
- Export Dashboard >
Zentrale Datei neu erzeugen. - Nach
Alle exportierenautomatisch am Ende.
Ablauf:
ConsolidatedExportServiceliest alle Saetze aus der zentralen Auswertungsquelle:- Standard:
CentralSalesRecords. - Audit-Modus: neueste
Sales_ProcessedMergeInput_*.csvje TSC.
- Standard:
ExcelExportService.CreateConsolidatedExcelFile(...)erzeugtSales_All_<Datum>.xlsx.- Die Datei wird lokal geschrieben.
- Falls SharePoint konfiguriert ist, wird sie hochgeladen.
Ziel lokal:
ExportSettings.LocalConsolidatedExportFolder, falls gesetzt.- sonst
ExportSettings.LocalSiteExportFolder, falls gesetzt. - sonst
<App-Verzeichnis>/output.
Ziel SharePoint:
- Wenn
CentralExportFoldergesetzt ist: direkt dorthin. - Sonst:
ExportFolder/Alle.
Die zentrale Excel enthaelt:
- Blatt
Finance Summary. - Blatt
Finance Details. - Blatt
Sales. - optional Hilfeblatt.
Wichtig:
Finance Summaryim Excel wird beim Schreiben aus den Records berechnet.- Es liest nicht aus einem vorherigen SharePoint-Excel.
- Je nach Setting sind diese Records entweder DB-Eintraege oder die neuesten verarbeiteten Audit-CSV.
- Wechselkurs-Zielwaehrung aus der UI wird dabei nicht angewendet.
Finance Summary und Spartenanalyse in der App
Die App-Anzeigen lesen direkt aus der zentralen Auswertungsquelle:
Standard: CentralSalesRecords
Audit-Modus: neueste Sales_ProcessedMergeInput_*.csv je TSC
Nicht aus:
SharePoint Sales_All_*.xlsx
Das bedeutet:
- Lokal zeigt die App lokale DB-Daten oder lokale Audit-CSV, je nach Setting.
- Publizierter Server zeigt Server-DB-Daten oder Server-Audit-CSV, je nach Setting.
- Wenn lokale und Server-Auswertungsquelle gleich sind, sehen beide gleich aus.
- Ein SharePoint-Upload veraendert die App-Anzeige nicht.
Spartenanalyse: genaue Logik
Quelle der Spartenreferenz
Fuehrend ist ProductDivisionRefSet aus SAP/TR-AG.
Technisch landet diese Referenz aktuell ueber den ZSCHWEIZ-Export in CentralSalesRecords, weil ZSCHWEIZ die Quelle P = ProductDivisionRefSet per Z.Matnr = P.Matnr joint.
Die Analyse baut daraus eine Referenz:
Materialnummer -> PAPH1 / Produktfamilie / Produktsparte / IsAssigned
Materialnummern werden normalisiert:
- Trim.
- Grossschreibung.
- Leerzeichen entfernen.
- fuehrende Nullen entfernen.
Status in der Spartenanalyse
| Status | Bedeutung |
|---|---|
Zugeordnet |
Material in TR-AG-Referenz gefunden und ProductMappingAssigned ist wahr, Produktsparte ist nicht leer und nicht UNASS. |
Nicht zugeordnet |
Material in TR-AG-Referenz gefunden, aber Spartenwert leer/UNASS/nicht assigned. |
Nicht im TR-AG-Stamm |
Materialnummer aus lokalem Finance-Umsatz hat keinen Treffer in der TR-AG-Referenz. |
Material fehlt |
Finance-Zeile hat keine Materialnummer. |
Warum aktuell viele Nicht im Stamm entstehen koennen
Die aktuellen Daten zeigen Produktfelder nur bei CH/AT direkt gefuellt. Andere Laender werden ueber Materialnummern gegen die TR-AG-Referenz gematcht.
Wenn lokale Artikelnummern nicht identisch mit TR-AG-Materialnummern sind, entstehen Nicht im TR-AG-Stamm.
Typische Ursachen:
- lokale Materialnummern statt TR-AG-MATNR.
- Sage-/B1-Artikelnummern, die nicht im TR-AG-Stamm existieren.
- Indien-Artikel wie
DM000010,DM000001,PT000003,IC15415, die lokal hohe Werte tragen, aber keinen Treffer in der TR-AG-Referenz haben. - fehlende oder unvollstaendige
ProductDivisionRefSet-Fuellung. - Materialnummernformat trotz Normalisierung nicht kompatibel.
Datenflussdiagramm Textform
Standort Export starten
|
+-- HANA/B1: OINV/INV1 + ORIN/RIN1 lesen
| -> Gutschriften bereits negativ
| -> IT-HANA-Filter bereits in SQL
|
+-- SAP OData ZSCHWEIZ:
| -> FinanzdataSchweizOeSet lesen
| -> ProductDivisionRefSet lesen
| -> Join Z.Matnr = P.Matnr
| -> Spartenfelder in SalesRecord
|
+-- Manual Excel/CSV/SharePoint:
-> Datei(en) laden
-> Mapping/SageNetSales/Spain-Dedupe
SalesRecord-Liste
|
+-- FieldTransformationRules anwenden
| -> optional Feldkopien, FirstNonEmpty, ConvertCurrency
|
+-- optional Audit-CSV Sales_ProcessedMergeInput_<TSC>_<Datum>.csv schreiben
| -> verarbeitete Daten fuer Finance/Revision
|
+-- Standort-Excel Sales_<TSC>_<Datum>.xlsx lokal schreiben
|
+-- CentralSalesRecords fuer SiteId ersetzen
|
+-- Standort-Excel und Audit-CSV optional nach SharePoint hochladen
Finance Summary / Spartenanalyse
|
+-- liest zentrale Auswertungsquelle
| -> Standard: CentralSalesRecords
| -> optional: neueste Sales_ProcessedMergeInput_*.csv je TSC
+-- FinanceRuleEngine rechnet Include/Exclude/Net Sales Actual
+-- Spartenanalyse matched lokale Materialien gegen TR-AG-Referenz aus den Records
Zentrale Excel
|
+-- liest zentrale Auswertungsquelle
+-- erzeugt Sales_All_<Datum>.xlsx lokal
+-- erzeugt Finance Summary / Finance Details im Excel
+-- laedt Datei optional nach SharePoint
Wichtige Klarstellungen fuer Finance
- SharePoint ist Ablage und Quelle fuer manuelle Dateien, aber nicht Live-Quelle der Finance Summary.
CentralSalesRecordsist der operative zentrale Datenbestand der App, solange nicht Audit-CSV als zentrale Auswertungsquelle aktiv ist.- Sparten kommen fachlich aus TR-AG/SAP
ProductDivisionRefSet, nicht aus lokalen ERP-Sparten. - CH/AT bekommen Spartenfelder direkt beim ZSCHWEIZ-Export.
- Andere Laender bekommen Sparten in der Analyse nur, wenn ihre Materialnummern zur TR-AG-Referenz matchen.
- Wechselkurse sind keine stille Vorverarbeitung fuer den Standard-Soll/Ist-Abgleich.
Mixedbedeutet: mehrere Waehrungen im Filter. Prozentwerte aufMixedsind nur eingeschraenkt interpretierbar; fuer belastbare Spartenanteile nach Wert muss Land oder Waehrung gefiltert werden.- Die zentrale Excel wird nach den Standortexporten aus der gewaehlten zentralen Auswertungsquelle erstellt. Sie ist Ergebnis, nicht Eingang.