====== Schnittstelle 1203: Sage LohnXL-Personalimport ====== Diese technische Referenz beschreibt die Eingänge, Ausgänge und aktiven Codepfade von **Sage LohnXL-Personalimport**. Sie ist keine Anleitung zur ungeprüften Ausführung. Stand: **02.10.2026**, Desktop-Commit ''f1d82a003b62f2658f06eaa943dc685ab219bdf3''. Statisch dokumentiert; Nutzerprüfung offen. Kein Import, Datenbank- oder HTTP-Test. Dokumentiert / statisch geprüft: **2026-10-02**. Statisch dokumentiert; Nutzerprüfung offen. Keine Schnittstelle ausgeführt. ===== Identität und Quellenstand ===== ''eProgramm.ImpPersonalSageXL = 1203''. Aktive feste Registrierung → ''cSchnittSageLohnXL.Ausführen''; Projekteinschluss bestätigt (E,P,PRJ). Active=True, InAutomatik=True und ManuellerAufruf=True (Registrierung bzw. Klassendefault); NurAufServer=False (Default bzw. Registrierung). Keine Aussage über eingerichtete Automatik oder produktive Nutzung. ===== Zweck und Ablauf ===== Festbreitendatei → SCHNITT_SageLohnXL → dbo.SCHNITT_SageLohnXl_SP → Personen sowie fehlende ITZeit/ITORGA und Basisstämme. PFAD=FileImport; direkter Dictionary-Zugriff **vor Try**, keine Dateiprüfung. Staging wird global gelöscht, bevor StreamReader die Datei öffnet. ===== Dateivertrag ===== Encoding.Default; keine Trennzeichen/Quotes/Kopfzeile. Nur Zeilen mit Zeichen1–2='01' verarbeitet. Mindestens668 Zeichen für diese Satzart nötig; **keine Längenprüfung**, bereits Zeile<2 bricht ab. Positionen ab1, Ende inklusive: ^ Feld ^ Von ^ Bis ^ Länge ^ | FirmaID | 3 | 4 | 2 | | PersonID | 5 | 13 | 9 | | PersonalNummer | 66 | 74 | 9 | | Aktiv | 96 | 96 | 1 | | Anrede | 377 | 393 | 17 | | Nachname | 117 | 146 | 30 | | Vorname | 147 | 176 | 30 | | Titel | 167 | 186 | 20 | | Strasse | 187 | 216 | 30 | | PLZ | 217 | 221 | 5 | | Ort | 222 | 246 | 25 | | Telefon | 247 | 261 | 15 | | Mobil | 534 | 558 | 25 | | Mail | 559 | 658 | 100 | | Gebdat | 265 | 274 | 10 | | Geschlecht | 275 | 275 | 1 | | Abteilung | 277 | 281 | 5 | | AbteilungBez | 282 | 301 | 20 | | Kostenstelle5 | 302 | 306 | 5 | | KostenstelleBez | 307 | 326 | 20 | | Funktion | 327 | 331 | 5 | | Eintritt | 352 | 361 | 10 | | Austritt | 362 | 371 | 10 | | Waz | 372 | 376 | 5 | | WazTarif | 491 | 495 | 5 | | WazIndividuell | 496 | 500 | 5 | | EndeProbe | 501 | 510 | 10 | | Befristung | 511 | 520 | 10 | | Kostenstelle10 | 659 | 668 | 10 | Strings werden überwiegend Trim verarbeitet; Zahlen implizit SQL-Parameterkonvertierung. Datumsstrings '00.00.0000'→NULL erst in SP, andere Datumswerte SQL-kulturabhängig. ===== SQL-Wirkung und Befunde ===== Personen nach PersonID anlegen/aktualisieren; Mapping unten. ITZeit nur bei **überhaupt keinem** Person-Zeitsatz neu: heute, RMID1, RMAZPlan1, Waz/WazTarif, Auszahlung1. ITORGA entsprechend nur wenn kein Orga-Satz existiert: heute/FirmaID/Abteilung/Hierarchiestufe1. Vorhandene IT-Sätze bleiben unverändert. Fehlende Filialen/Abteilungen aus Nummern; Auszahlungsgruppe/Hierarchiestufe1 Standard. Kein Rechenlauf/Archiv. **1203-F01:** Vorname liest30 Zeichen, U481 erlaubt nvarchar20; lange Werte können SQL-Fehler auslösen. **1203-F02:** Vorname (147–176) und Titel (167–186) überlappen zehn Zeichen; tatsächlicher Liefervertrag Q13. Weitere Stagingfelder (u.a. Titel/PersonalNummer/Geschlecht) werden von SP nicht auf Personen übertragen. Standard30s, keine SQL_TIMEOUT-Zuweisung, keine Transaktion. Fehler→MsgBox/False, normal True. Kein BASE oder LEGACY-Profil. FK-vorausgesetzte RM/Plan1 werden hier **nicht** angelegt, Installation Q02. Test: kurze Sätze, langes Vorname, bestehende Zeit-/Orgahistorie, Fehler nach Reset. ===== Systemeinstellungen und gemeinsame Nebenwirkungen ===== Kein BASE-/LEGACY-Profil: direkter MsgBox-Fehlerpfad. Keine zusätzliche fachliche ZW-Einstellung im lokalen Importpfad gelesen. Timeoutwerte stehen im Betriebsabschnitt, nicht automatisch SQL_TIMEOUT zuordnen. Fachdaten werden ohne gemeinsame Transaktion verarbeitet. 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 ^ | 1203-D001 | ''SCHNITT_SageLohnXL.— Zeilen'' | DELETE | Gesamtes Staging | Vor Fileöffnen | B | | 1203-D002 | ''SCHNITT_SageLohnXL.FirmaID'' | INSERT | Dateiposition3 bis4 | Satzart01 | B | | 1203-D003 | ''SCHNITT_SageLohnXL.PersonID'' | INSERT | Dateiposition5 bis13 | Satzart01 | B | | 1203-D004 | ''SCHNITT_SageLohnXL.PersonalNummer'' | INSERT | Dateiposition66 bis74 | Satzart01 | B | | 1203-D005 | ''SCHNITT_SageLohnXL.Aktiv'' | INSERT | Dateiposition96 bis96 | Satzart01 | B | | 1203-D006 | ''SCHNITT_SageLohnXL.Anrede'' | INSERT | Dateiposition377 bis393 | Satzart01 | B | | 1203-D007 | ''SCHNITT_SageLohnXL.Nachname'' | INSERT | Dateiposition117 bis146 | Satzart01 | B | | 1203-D008 | ''SCHNITT_SageLohnXL.Vorname'' | INSERT | Dateiposition147 bis176 | Satzart01 | B | | 1203-D009 | ''SCHNITT_SageLohnXL.Titel'' | INSERT | Dateiposition167 bis186 | Satzart01 | B | | 1203-D010 | ''SCHNITT_SageLohnXL.Strasse'' | INSERT | Dateiposition187 bis216 | Satzart01 | B | | 1203-D011 | ''SCHNITT_SageLohnXL.PLZ'' | INSERT | Dateiposition217 bis221 | Satzart01 | B | | 1203-D012 | ''SCHNITT_SageLohnXL.Ort'' | INSERT | Dateiposition222 bis246 | Satzart01 | B | | 1203-D013 | ''SCHNITT_SageLohnXL.Telefon'' | INSERT | Dateiposition247 bis261 | Satzart01 | B | | 1203-D014 | ''SCHNITT_SageLohnXL.Mobil'' | INSERT | Dateiposition534 bis558 | Satzart01 | B | | 1203-D015 | ''SCHNITT_SageLohnXL.Mail'' | INSERT | Dateiposition559 bis658 | Satzart01 | B | | 1203-D016 | ''SCHNITT_SageLohnXL.Gebdat'' | INSERT | Dateiposition265 bis274 | Satzart01 | B | | 1203-D017 | ''SCHNITT_SageLohnXL.Geschlecht'' | INSERT | Dateiposition275 bis275 | Satzart01 | B | | 1203-D018 | ''SCHNITT_SageLohnXL.Abteilung'' | INSERT | Dateiposition277 bis281 | Satzart01 | B | | 1203-D019 | ''SCHNITT_SageLohnXL.AbteilungBez'' | INSERT | Dateiposition282 bis301 | Satzart01 | B | | 1203-D020 | ''SCHNITT_SageLohnXL.Kostenstelle5'' | INSERT | Dateiposition302 bis306 | Satzart01 | B | | 1203-D021 | ''SCHNITT_SageLohnXL.KostenstelleBez'' | INSERT | Dateiposition307 bis326 | Satzart01 | B | | 1203-D022 | ''SCHNITT_SageLohnXL.Funktion'' | INSERT | Dateiposition327 bis331 | Satzart01 | B | | 1203-D023 | ''SCHNITT_SageLohnXL.Eintritt'' | INSERT | Dateiposition352 bis361 | Satzart01 | B | | 1203-D024 | ''SCHNITT_SageLohnXL.Austritt'' | INSERT | Dateiposition362 bis371 | Satzart01 | B | | 1203-D025 | ''SCHNITT_SageLohnXL.Waz'' | INSERT | Dateiposition372 bis376 | Satzart01 | B | | 1203-D026 | ''SCHNITT_SageLohnXL.WazTarif'' | INSERT | Dateiposition491 bis495 | Satzart01 | B | | 1203-D027 | ''SCHNITT_SageLohnXL.WazIndividuell'' | INSERT | Dateiposition496 bis500 | Satzart01 | B | | 1203-D028 | ''SCHNITT_SageLohnXL.EndeProbe'' | INSERT | Dateiposition501 bis510 | Satzart01 | B | | 1203-D029 | ''SCHNITT_SageLohnXL.Befristung'' | INSERT | Dateiposition511 bis520 | Satzart01 | B | | 1203-D030 | ''SCHNITT_SageLohnXL.Kostenstelle10'' | INSERT | Dateiposition659 bis668 | Satzart01 | B | | 1203-D031 | ''SCHNITT_SageLohnXL.FirmaID'' | SELECT | Übernahme-/Existenzpfad; übrige Stagingfelder nicht verwendet | SQL-Pfad | SQL | | 1203-D032 | ''SCHNITT_SageLohnXL.PersonID'' | SELECT | Übernahme-/Existenzpfad; übrige Stagingfelder nicht verwendet | SQL-Pfad | SQL | | 1203-D033 | ''SCHNITT_SageLohnXL.Aktiv'' | SELECT | Übernahme-/Existenzpfad; übrige Stagingfelder nicht verwendet | SQL-Pfad | SQL | | 1203-D034 | ''SCHNITT_SageLohnXL.Nachname'' | SELECT | Übernahme-/Existenzpfad; übrige Stagingfelder nicht verwendet | SQL-Pfad | SQL | | 1203-D035 | ''SCHNITT_SageLohnXL.Vorname'' | SELECT | Übernahme-/Existenzpfad; übrige Stagingfelder nicht verwendet | SQL-Pfad | SQL | | 1203-D036 | ''SCHNITT_SageLohnXL.Strasse'' | SELECT | Übernahme-/Existenzpfad; übrige Stagingfelder nicht verwendet | SQL-Pfad | SQL | | 1203-D037 | ''SCHNITT_SageLohnXL.PLZ'' | SELECT | Übernahme-/Existenzpfad; übrige Stagingfelder nicht verwendet | SQL-Pfad | SQL | | 1203-D038 | ''SCHNITT_SageLohnXL.Ort'' | SELECT | Übernahme-/Existenzpfad; übrige Stagingfelder nicht verwendet | SQL-Pfad | SQL | | 1203-D039 | ''SCHNITT_SageLohnXL.Telefon'' | SELECT | Übernahme-/Existenzpfad; übrige Stagingfelder nicht verwendet | SQL-Pfad | SQL | | 1203-D040 | ''SCHNITT_SageLohnXL.Mobil'' | SELECT | Übernahme-/Existenzpfad; übrige Stagingfelder nicht verwendet | SQL-Pfad | SQL | | 1203-D041 | ''SCHNITT_SageLohnXL.Mail'' | SELECT | Übernahme-/Existenzpfad; übrige Stagingfelder nicht verwendet | SQL-Pfad | SQL | | 1203-D042 | ''SCHNITT_SageLohnXL.Gebdat'' | SELECT | Übernahme-/Existenzpfad; übrige Stagingfelder nicht verwendet | SQL-Pfad | SQL | | 1203-D043 | ''SCHNITT_SageLohnXL.Abteilung'' | SELECT | Übernahme-/Existenzpfad; übrige Stagingfelder nicht verwendet | SQL-Pfad | SQL | | 1203-D044 | ''SCHNITT_SageLohnXL.Eintritt'' | SELECT | Übernahme-/Existenzpfad; übrige Stagingfelder nicht verwendet | SQL-Pfad | SQL | | 1203-D045 | ''SCHNITT_SageLohnXL.Austritt'' | SELECT | Übernahme-/Existenzpfad; übrige Stagingfelder nicht verwendet | SQL-Pfad | SQL | | 1203-D046 | ''SCHNITT_SageLohnXL.Waz'' | SELECT | Übernahme-/Existenzpfad; übrige Stagingfelder nicht verwendet | SQL-Pfad | SQL | | 1203-D047 | ''SCHNITT_SageLohnXL.WazTarif'' | SELECT | Übernahme-/Existenzpfad; übrige Stagingfelder nicht verwendet | SQL-Pfad | SQL | | 1203-D048 | ''SCHNITT_SageLohnXL.EndeProbe'' | SELECT | Übernahme-/Existenzpfad; übrige Stagingfelder nicht verwendet | SQL-Pfad | SQL | | 1203-D049 | ''SCHNITT_SageLohnXL.Befristung'' | SELECT | Übernahme-/Existenzpfad; übrige Stagingfelder nicht verwendet | SQL-Pfad | SQL | | 1203-D050 | ''Personen.PersonID'' | SELECT/INSERT | Staging.PersonID, nur bei Neuanlage | Nach PersonID; vorhandene Personen aktualisiert | SQL | | 1203-D051 | ''Personen.Nachname'' | INSERT/UPDATE | Staging.Nachname | Nach PersonID; vorhandene Personen aktualisiert | SQL | | 1203-D052 | ''Personen.Vorname'' | INSERT/UPDATE | Staging.Vorname | Nach PersonID; vorhandene Personen aktualisiert | SQL | | 1203-D053 | ''Personen.GebDat'' | INSERT/UPDATE | Staging.Gebdat; 00.00.0000→NULL | Nach PersonID; vorhandene Personen aktualisiert | SQL | | 1203-D054 | ''Personen.Eintritt'' | INSERT/UPDATE | Staging.Eintritt; Nulldatum→NULL | Nach PersonID; vorhandene Personen aktualisiert | SQL | | 1203-D055 | ''Personen.Austritt'' | INSERT/UPDATE | Staging.Austritt; Nulldatum→NULL | Nach PersonID; vorhandene Personen aktualisiert | SQL | | 1203-D056 | ''Personen.aktiv'' | INSERT/UPDATE | Staging.Aktiv0→0, sonst1 | Nach PersonID; vorhandene Personen aktualisiert | SQL | | 1203-D057 | ''Personen.EndeProbe'' | INSERT/UPDATE | Staging.EndeProbe; Nulldatum→NULL | Nach PersonID; vorhandene Personen aktualisiert | SQL | | 1203-D058 | ''Personen.EndeBefristung'' | INSERT/UPDATE | Staging.Befristung; Nulldatum→NULL | Nach PersonID; vorhandene Personen aktualisiert | SQL | | 1203-D059 | ''Personen.Adresse1'' | INSERT/UPDATE | Staging.Strasse | Nach PersonID; vorhandene Personen aktualisiert | SQL | | 1203-D060 | ''Personen.PLZ'' | INSERT/UPDATE | Staging.PLZ | Nach PersonID; vorhandene Personen aktualisiert | SQL | | 1203-D061 | ''Personen.Ort'' | INSERT/UPDATE | Staging.Ort | Nach PersonID; vorhandene Personen aktualisiert | SQL | | 1203-D062 | ''Personen.Telefon1'' | INSERT/UPDATE | Staging.Telefon | Nach PersonID; vorhandene Personen aktualisiert | SQL | | 1203-D063 | ''Personen.Telefon2'' | INSERT/UPDATE | Staging.Mobil | Nach PersonID; vorhandene Personen aktualisiert | SQL | | 1203-D064 | ''Personen.Mail'' | INSERT/UPDATE | Staging.Mail | Nach PersonID; vorhandene Personen aktualisiert | SQL | | 1203-D065 | ''AuszahlungsGruppen.ID'' | SELECT/INSERT | 1/Standard | Nur fehlende Stammsätze | SQL | | 1203-D066 | ''AuszahlungsGruppen.Bezeichnung'' | SELECT/INSERT | 1/Standard | Nur fehlende Stammsätze | SQL | | 1203-D067 | ''Filialen.FilialID'' | SELECT/INSERT | FirmaID/Nummer | Nur fehlende Stammsätze | SQL | | 1203-D068 | ''Filialen.Bezeichnung'' | SELECT/INSERT | FirmaID/Nummer | Nur fehlende Stammsätze | SQL | | 1203-D069 | ''Hierarchiestufen.HiID'' | SELECT/INSERT | 1/Standard | Nur fehlende Stammsätze | SQL | | 1203-D070 | ''Hierarchiestufen.HiBezeichnung'' | SELECT/INSERT | 1/Standard | Nur fehlende Stammsätze | SQL | | 1203-D071 | ''Abteilungen.AbteilungID'' | SELECT/INSERT | Abteilung/Nummer | Nur fehlende Stammsätze | SQL | | 1203-D072 | ''Abteilungen.Bezeichnung'' | SELECT/INSERT | Abteilung/Nummer | Nur fehlende Stammsätze | SQL | | 1203-D073 | ''ITZeit.PersonenStammID'' | SELECT | Existiert überhaupt ein Zeit-Satz? | SQL-Pfad | SQL | | 1203-D074 | ''ITZeit.PersonenStammID'' | INSERT | PersonID/heute/1/1/Waz/WazTarif/1 | Nur Person ohne ITZeit, keine Updates | SQL | | 1203-D075 | ''ITZeit.von'' | INSERT | PersonID/heute/1/1/Waz/WazTarif/1 | Nur Person ohne ITZeit, keine Updates | SQL | | 1203-D076 | ''ITZeit.RMID'' | INSERT | PersonID/heute/1/1/Waz/WazTarif/1 | Nur Person ohne ITZeit, keine Updates | SQL | | 1203-D077 | ''ITZeit.RMAZPlanID'' | INSERT | PersonID/heute/1/1/Waz/WazTarif/1 | Nur Person ohne ITZeit, keine Updates | SQL | | 1203-D078 | ''ITZeit.WAZ'' | INSERT | PersonID/heute/1/1/Waz/WazTarif/1 | Nur Person ohne ITZeit, keine Updates | SQL | | 1203-D079 | ''ITZeit.WazBasis'' | INSERT | PersonID/heute/1/1/Waz/WazTarif/1 | Nur Person ohne ITZeit, keine Updates | SQL | | 1203-D080 | ''ITZeit.Auszahlung'' | INSERT | PersonID/heute/1/1/Waz/WazTarif/1 | Nur Person ohne ITZeit, keine Updates | SQL | | 1203-D081 | ''ITORGA.PersonenStammID'' | SELECT | Existiert überhaupt Orga-Satz? | SQL-Pfad | SQL | | 1203-D082 | ''ITORGA.PersonenStammID'' | INSERT | PersonID/heute/FirmaID/Abteilung/1 | Nur Person ohne ITORGA, keine Updates | SQL | | 1203-D083 | ''ITORGA.von'' | INSERT | PersonID/heute/FirmaID/Abteilung/1 | Nur Person ohne ITORGA, keine Updates | SQL | | 1203-D084 | ''ITORGA.Filiale'' | INSERT | PersonID/heute/FirmaID/Abteilung/1 | Nur Person ohne ITORGA, keine Updates | SQL | | 1203-D085 | ''ITORGA.Abteilung'' | INSERT | PersonID/heute/FirmaID/Abteilung/1 | Nur Person ohne ITORGA, keine Updates | SQL | | 1203-D086 | ''ITORGA.Hierarchiestufe'' | INSERT | PersonID/heute/FirmaID/Abteilung/1 | Nur Person ohne ITORGA, keine Updates | SQL | ===== Teststatus und Pflege ===== Keine Laufzeit-/Live-Schema-/Lieferformat-Abnahme. Fachbefunde und Grenzen siehe oben und Fragen (interne Referenz); kundenspezifische Trigger/Constraints, DLLs und Jobs bleiben Q02. Nutzerprüfung offen. [[schnittstellen:schnittstellen|Schnittstellenübersicht]] ===== Quellen je Datei ===== Repository: seegerstefan/pep4desktop, master, obiger Commit. Je Datei ein Quellenlink; Kürzel in den Tabellen. Private Git-Quellen setzen Zugriffsrechte voraus. ^ Kürzel ^ Quelldatei am geprüften 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]] | | SET | [[https://github.com/seegerstefan/pep4desktop/blob/f1d82a003b62f2658f06eaa943dc685ab219bdf3/PEP4/ZW/Einstellungen/cEinstellungenZw.vb|PEP4/ZW/Einstellungen/cEinstellungenZw.vb]] | | B | [[https://github.com/seegerstefan/pep4desktop/blob/f1d82a003b62f2658f06eaa943dc685ab219bdf3/PEP4/cSchnittstellen/Programme/Schnittstellen/cSchnittSageLohnXL.vb|PEP4/cSchnittstellen/Programme/Schnittstellen/cSchnittSageLohnXL.vb]] | | SQL | [[https://github.com/seegerstefan/pep4desktop/blob/f1d82a003b62f2658f06eaa943dc685ab219bdf3/Sqlfiles/PEP4Functions/SCHNITT_SageLohnXl_SP.sql|Sqlfiles/PEP4Functions/SCHNITT_SageLohnXl_SP.sql]] | | U481 | [[https://github.com/seegerstefan/pep4desktop/blob/f1d82a003b62f2658f06eaa943dc685ab219bdf3/Sqlfiles/PEP4Update/update_0481.sql|Sqlfiles/PEP4Update/update_0481.sql]] | ===== Offene Abnahme ===== Externe Liefer-/API-Verträge und installierte Migrationen sind nicht bestätigt. Vor einem Test die beschriebenen Datenrisiken in einer isolierten Umgebung klären. Bei1214/1215 sind weitere Calc-/CalcPep-Feldwirkungen ausdrücklich noch nicht vollständig analysiert. [[schnittstellen:schnittstellen|Übersicht aller Schnittstellen]]