Skip to main content

MESO Copy

Eine Windows-Anwendung zum Kopieren und Migrieren von Daten zwischen MESO-Mandanten und Wirtschaftsjahren.

Download

Übersicht

MESO Copy ist ein spezialisiertes Werkzeug für die Datenmigration innerhalb von MESO-ERP-Systemen. Die Anwendung ermöglicht das selektive Kopieren von Tabellen und Datensätzen zwischen verschiedenen Mandanten und Wirtschaftsjahren unter Verwendung des SQL Server Bulk Copy Program (BCP).

Hauptfunktionen

  • Mandantenübergreifendes Kopieren: Übertragung von Daten zwischen verschiedenen MESO-Mandanten
  • Wirtschaftsjahr-Management: Flexibles Kopieren einzelner oder mehrerer Wirtschaftsjahre
  • Selektive Tabellenauswahl: Gezielte Auswahl der zu kopierenden Tabellen
  • Vordefinierte Kopierprofile: Schnellauswahl für Artikelstamm, Kundenstamm, FIBU-Daten und Workflow-Definitionen
  • Filterung: Umfangreiche Filtermöglichkeiten für Zusatzfelder (T057), Eigenschaftsobjekte (T070) und Kontentypen
  • Datenbereinigung: Optional automatisches Löschen von Quelldaten nach erfolgreichem Import
  • Fortschrittsanzeige: Detaillierte Protokollierung mit Fortschrittsbalken

Screenshots

Hauptfenster

Manuelle Tabellenselektion

Selektionen

Systemanforderungen

Voraussetzungen

  • Betriebssystem: Windows (mit .NET 10.0 Windows Forms Unterstützung)
  • .NET Runtime: .NET 10.0 oder höher
  • SQL Server: Zugriff auf MESO SQL Server Datenbanken
  • SQL Server BCP: BCP.exe muss im System verfügbar sein (normalerweise mit SQL Server Client Tools installiert)
  • Berechtigungen:
    • Lese- und Schreibzugriff auf die MESO-Systemdatenbank
    • Lese- und Schreibzugriff auf Quell- und Ziel-Mandantendatenbanken

Verwendete Bibliotheken

  • MesoXPO-DevEx25.2 (Version 2026.4.56-beta04): MESO XPO Framework
  • MesoXPO.Models (Version 2025.12.21.86): MESO Datenmodelle
  • DevExpress 25.2.4: UI-Komponenten
  • Microsoft.Data.SqlClient (Version 6.1.4): SQL Server-Datenbankzugriff
  • Microsoft.Extensions.DependencyInjection (Version 10.0.3): Dependency Injection
  • Microsoft.Extensions.Configuration.Json (Version 10.0.0): Konfiguration (appsettings.json)
  • LicenseserviceClient (Version 1.0.5): Lizenzprüfung
  • Serilog: Protokollierung mit File- und RichTextBox-Senken

Installation

  1. Stellen Sie sicher, dass .NET 10.0 Runtime installiert ist
  2. Laden Sie die neueste Version von MESO Copy herunter
  3. Extrahieren Sie die Dateien in ein beliebiges Verzeichnis
  4. Stellen Sie sicher, dass BCP.exe verfügbar ist (Pfad in Systemumgebungsvariablen)

Konfiguration

Die Anwendung liest beim Start die Datei appsettings.json aus dem Programmverzeichnis. Verbindungs- und Kopieroptionen werden zur Laufzeit über die Benutzeroberfläche vorgenommen.

Lizenzierung

Die Lizenzprüfung erfolgt beim Anwendungsstart gegen den Lizenzserver https://license.css-edv-support.de (Produkt: MESO-COPY).

appsettings.json:

{
  "License": {
    "LicenseNr": "<Lizenznummer>",
    "CustomerNr": "<Kundennummer>"
  }
}

Alternativ können die Lizenzangaben über Umgebungsvariablen gesetzt werden:

Variable Beschreibung
LICENSE_LICENSE_NR Lizenznummer
LICENSE_CUSTOMER_NR Kundennummer

Demomodus

Ohne gültige Lizenz startet die Anwendung im Demomodus:

  • Die Titelleiste zeigt [DEMOMODUS - keine gueltige Lizenz]
  • Der Kopiervorgang kann nicht gestartet werden (Start-Button deaktiviert)
  • Alle übrigen Funktionen (Verbindung, Tabellenauswahl, Konfiguration) bleiben nutzbar

Protokolldateien: Die Anwendung erstellt automatisch Protokolldateien im Format log-JJJJ-MM-TT.txt im Programmverzeichnis.

Verwendung

Verbindungsaufbau

  1. Server: Geben Sie den SQL Server-Namen oder die IP-Adresse ein
  2. System-DB: Name der MESO-Systemdatenbank (üblicherweise MESOSYS oder ähnlich)
  3. MESO-Passwort: Passwort für den MESO-Benutzer
  4. Klicken Sie auf Prüfen, um die Verbindung herzustellen

Nach erfolgreicher Verbindung werden alle verfügbaren Mandanten geladen.

Quelle und Ziel definieren

Quellmandant

  • Wählen Sie den Quellmandanten aus der Dropdown-Liste
  • Wählen Sie das Von-Wirtschaftsjahr und Bis-Wirtschaftsjahr
  • Oder aktivieren Sie Alle WJ, um alle Wirtschaftsjahre zu kopieren

Zielmandant

  • Wählen Sie den Zielmandanten aus der Dropdown-Liste
  • Die Zielmandantennummer kann manuell angepasst werden
  • Optional: Aktivieren Sie Quellmandantennummer verwenden, um die Mandantennummer beizubehalten
  • Bei Einzeljahrkopie kann ein Ziel-Mesoyear angegeben werden, um das Jahr zu überschreiben

Datenübertragung konfigurieren

Übertragungsmodus

  • Export und Import: Vollständiger Kopiervorgang (Standard)
  • Nur Export: Erstellt nur BCP-Dateien ohne Import
  • Nur Import: Importiert vorhandene BCP-Dateien

Tabellenauswahl

Alle Tabellen (Standard): Alle MESO-Tabellen (T001-T999) werden kopiert

Tabellenauswahl aktivieren: Ermöglicht spezifische Tabellenauswahl

  • Manuelle Eingabe: Kommagetrennte Liste (z.B., T023,T024,T057)
  • Über Button Tabellenauswahl: Öffnet einen Dialog zur grafischen Auswahl mit:
    • Tabellenname
    • Beschreibung
    • Optional: SQL WHERE-Bedingung pro Tabelle

Vordefinierte Profile:

  • Artikelstamm: Kopiert alle artikelbezogenen Tabellen (T023, T024, T027, T030, T031, T032, T037, T057, T070, T299, T300, T301, T304, T305, T306, T307, T309, T313, T314, T344, T346, T348, T355, T359, T335, T311)
  • Kundenstamm: Kopiert kundenbezogene Tabellen (T051, T045, T055, T058, T054, T057, T070)
  • FIBU-Daten: Kopiert buchhalterische Tabellen (T002, T009, T010, T013, T019, T020, T028, T036, T049, T053, T059, T052, T067, T068, T071, T072, T076, T078, T081, T082, T093, T094, T107, T108, T109, T110, T120, T131, T135, T136, T140, T143, T144, T153, T211, T219, T222, T230, T232-T234, T236-T238, T240-T244, T246-T248, T257-T261, T265-T268, T270, T286-T288, T331, T336, T339, T340, T364, T365, T368, T371, T372, T376, T378, T387) inkl. Kundenstamm und FIBU-Synchronisation (T001-Felder)
  • Nur Workflow-Definition: Kopiert Workflow-Tabellen (T171, T172, T173, T177, T209)

Filteroptionen

T057-Filter (Zusatzfelder):

  • Filtert nach Zusatzfeldtabellen (C031-Spalte in T057)
  • Beispiel: 021 für Artikelzusatzfelder, 050 für Kundenzusatzfelder

T070-Filter (Eigenschaftsobjekte):

  • Filtert nach Eigenschaftsobjekt-Typ (C003-Spalte in T070)
  • Beispiel: 1 für Artikel, 3 für Kunden, 12 für Workflows

SQL WHERE-Bedingung:

  • Globale WHERE-Bedingung für alle Tabellen
  • Wird zusätzlich zu tabellen-spezifischen WHERE-Bedingungen angewendet

Kontenselektion:

  • Sachkonten: Kopiert Sachkonten-Daten
  • Debitoren: Kopiert Debitoren-Daten
  • Kreditoren: Kopiert Kreditoren-Daten
  • Mehrfachauswahl möglich

Erweiterte Optionen

  • Nur leere Importtabelle: Import erfolgt nur, wenn Zieltabelle leer ist
  • Vorhandene BCP nicht überschreiben: Vorhandene Export-Dateien werden nicht neu erstellt
  • WJ bei WJ-übergreifender Tabelle ignorieren: Wirtschaftsjahr-Filter wird für jahresunabhängige Tabellen ignoriert
  • Quelldaten nach Import löschen: Automatisches Löschen der Quelldaten nach erfolgreichem Import
    • WJ-unabhängige Daten nicht löschen: Schützt jahresunabhängige Tabellen vor Löschung
  • T132 auslassen: Überspringt benutzerdefinierte Tabellendefinitionen
  • BCP nach Import löschen: Löscht Export-Dateien nach erfolgreichem Import
  • Zieltabellen nicht leeren: Behält vorhandene Daten in Zieltabellen bei (Vorsicht: kann zu Duplikaten führen)

Kopiervorgang starten

  1. Klicken Sie auf Start, um den Kopiervorgang zu beginnen
  2. Der Fortschritt wird in Echtzeit im Protokollbereich angezeigt
  3. Der Fortschrittsbalken zeigt den Gesamtfortschritt (Anzahl verarbeiteter Tabellen)
  4. Klicken Sie auf Abbruch, um den Vorgang vorzeitig zu beenden

Technische Details

Architektur

MESO Copy verwendet eine dreischichtige Architektur mit Service-orientiertem Design:

  1. Präsentationsschicht: Windows Forms mit DevExpress-Komponenten (FormMain, FormTableSelect)
  2. Geschäftslogik:
    • BulkCopyMesoData-Klasse für die Datenverarbeitung und Orchestrierung
    • CopyOptions-Record: Bündelt alle Kopieroptionen in einem Objekt
    • Service-Layer mit Dependency Injection:
      • IBcpExportService / BcpExportService: BCP-Export-Operationen
      • IBcpImportService / BcpImportService: BCP-Import-Operationen
      • ITableSchemaService / TableSchemaService: Tabellenschema-Abfragen
      • ISqlQueryBuilder / SqlQueryBuilder: SQL-Query-Erstellung
    • MandantenBezugMapping: Statisches Mapping der Spalten mit Mandantenbezug pro Tabelle
  3. Datenzugriff: MesoXPO Framework mit XPO (eXpress Persistent Objects)

Datenverarbeitung

Der Kopierprozess erfolgt in mehreren Schritten:

  1. Tabellenermittlung: Alle zu kopierenden Tabellen werden aus dem SQL Server-Schema geladen
  2. Export (BCP): Pro Tabelle wird ein BCP-Export durchgeführt
    • Mandantennummern und Wirtschaftsjahre werden im SQL-Query angepasst
    • Primärschlüssel (mesoprim) werden automatisch transformiert
    • Daten werden in .dat-Dateien im Programmverzeichnis gespeichert
  3. Ziel-Vorbereitung: Vorhandene Daten im Ziel werden optional gelöscht
  4. Import (BCP): Daten werden aus .dat-Dateien in Zieltabellen importiert
  5. Bereinigung: Optional werden Quelldaten und/oder BCP-Dateien gelöscht

Besonderheiten

  • Mandantennummer-Transformation: Automatische Anpassung von mesocomp-Spalten
  • Spalten mit Mandantenbezug: Zusätzlich zu mesocomp werden tabellenspezifische Spalten mit Mandantenreferenz automatisch angepasst (definiert in MandantenBezugMapping, Quelle: spalten_mit_mandantenbezug.xlsx). Betrifft ca. 28 Tabellen mit insgesamt ~45 Spalten. Die Anpassung erfolgt per SQL REPLACE und greift nur, wenn der Spaltenwert die Quell-Mandantennummer enthält.
  • Wirtschaftsjahr-Transformation: Automatische Anpassung von mesoyear-Spalten
  • Primärschlüssel-Transformation: mesoprim-Werte werden für den Zielmandanten angepasst
  • Spezialfelder in T001: Mandantenstamm-Felder wie Firmennummer (C001), Wirtschaftsjahr (C017) und Kalenderjahr (C122) werden automatisch angepasst
  • Spezialfelder in T024/T055: Referenzen auf andere Mandanten/Jahre werden automatisch umgeschrieben
  • Jahresunabhängige Tabellen: Automatische Erkennung basierend auf MesoTableYearSettings
  • FIBU-Synchronisation: Bei aktiviertem FIBU-Profil werden T001-Felder (C009, C010, C015, C024-C028) pro Wirtschaftsjahr vom Quell- in den Zielmandanten übertragen

BCP-Parameter

Die Anwendung verwendet folgende BCP-Parameter:

  • -C RAW: Raw-Modus für Zeichenfolgen
  • -U meso -P <passwort>: SQL Server-Authentifizierung mit MESO-Benutzer
  • -w: Unicode-Zeichenformat
  • -t **\t**: Tab als Feldtrennzeichen
  • -r "0x0a": Zeilenumbruch als Zeilentrennzeichen
  • -S <server>: Ziel-/Quellserver
  • -k: NULL-Werte beibehalten

Fehlerbehandlung

  • Alle Exceptions werden protokolliert (mit Serilog)
  • BCP-Prozesse werden auf Erfolg (Exit-Code 0) überprüft
  • BCP-Timeout: Export- und Import-Prozesse werden nach 10 Minuten automatisch abgebrochen
  • Datenbankverbindungen werden ordnungsgemäß disposed
  • Abbruch-Token ermöglichen vorzeitiges Beenden

Protokollierung

Die Anwendung verwendet Serilog für umfangreiche Protokollierung:

  • Debug: Detaillierte technische Informationen (z.B., BCP-Kommandozeilen)
  • Information: Normale Fortschrittsmeldungen
  • Warning: Nicht-kritische Probleme (z.B., fehlende BCP-Dateien)
  • Error: Kritische Fehler mit Stack-Trace

Protokolle werden sowohl in Dateien als auch in der UI (RichTextBox) ausgegeben.

Anwendungsfälle

Mandanten-Kopie

Vollständige Kopie eines Mandanten in einen neuen Mandanten inkl. aller Wirtschaftsjahre.

Quellmandant: 1000
Zielmandant: 2000 (neu)
Alle WJ: ✓
Modus: Export und Import

Wirtschaftsjahr-Migration

Übertragung eines einzelnen Wirtschaftsjahres in ein anderes Jahr.

Quellmandant: 500M
Von-WJ: 2023, Bis-WJ: 2023
Zielmandant: 500C
Ziel-Mesoyear: 1512 (entspricht 2024)

Artikelstamm-Kopie

Kopie des Artikelstamms von einem Mandanten zu einem anderen.

Quellmandant: 500M
Zielmandant: 500C
Artikelstamm: ✓
WJ bei WJ-übergreifender Tabelle ignorieren: ✓

Workflow-Definition-Transfer

Übertragung von Workflow-Definitionen zwischen Mandanten.

Quellmandant: 500M (Referenzmandant)
Zielmandant: 500C
Nur Workflow-Definition: ✓

Datenbereinigung mit Verschiebung

Verschieben von Daten von einem Mandanten zu einem anderen mit Löschung der Quelle.

Quellmandant: 500M
Zielmandant: 500C
Quelldaten nach Import löschen: ✓

Häufige Fehler und Lösungen

"BCP.exe wurde nicht gefunden"

Problem: BCP.exe ist nicht im Systempfad vorhanden.
Lösung: Installieren Sie SQL Server Client Tools oder fügen Sie den BCP-Pfad zur PATH-Umgebungsvariable hinzu.

"Ziel-Tabelle ist nicht leer"

Problem: Die Option "Nur leere Importtabelle" ist aktiviert, aber Zieltabelle enthält bereits Daten.
Lösung: Deaktivieren Sie die Option oder leeren Sie die Zieltabelle manuell.

"Quelldatei nicht vorhanden. Import nicht möglich"

Problem: BCP-Datei wurde nicht gefunden (bei "Nur Import"-Modus).
Lösung: Führen Sie zuerst einen Export durch oder stellen Sie sicher, dass die .dat-Dateien im Programmverzeichnis vorhanden sind.

"Fehler beim Prüfen der Systemverbindung"

Problem: Verbindung zur Systemdatenbank fehlgeschlagen.
Lösung: Überprüfen Sie Server, Datenbankname und Passwort. Stellen Sie sicher, dass der SQL Server erreichbar ist und der MESO-Benutzer existiert.

Bekannte Einschränkungen

  • Die Anwendung unterstützt nur SQL Server als Datenbank
  • BCP.exe muss auf dem System installiert sein
  • Sehr große Datenmengen können zu langen Laufzeiten führen (BCP-Timeout: 10 Minuten pro Tabelle)
  • Referenzielle Integrität wird nicht automatisch überprüft (Fremdschlüssel-Beziehungen)
  • Mandantennummern sind alphanumerisch

Sicherheitshinweise

  • Erstellen Sie immer ein Backup vor größeren Kopiervorgängen
  • Testen Sie neue Kopierszenarien zunächst auf einer Testumgebung
  • Die Option "Quelldaten nach Import löschen" sollte mit Vorsicht verwendet werden
  • Überprüfen Sie die Protokolldateien nach jedem Kopiervorgang auf Fehler oder Warnungen

CI/CD

Der Workflow .github/workflows/ci.yml führt bei Push auf main oder Tags (v*) automatisch Lint, Build, Test und Publish durch. Die Artefakte werden als self-contained win-x64 Single-File-Binary in Azure Blob Storage (releases/mesocopy/) abgelegt.

Lizenz

Entwickelt von CSS EDV Support - Tobias Forbrich

Support

Bei Fragen oder Problemen wenden Sie sich bitte an den CSS EDV Support.

Versionshistorie

Version 1.4.0

  • Lizenzprüfung: Online-Lizenzvalidierung gegen license.css-edv-support.de (Produkt MESO-COPY) mit Konfiguration über appsettings.json oder Umgebungsvariablen
  • Demomodus: Ohne gültige Lizenz startet die Anwendung im Demomodus - Kopiervorgang ist deaktiviert, alle übrigen Funktionen bleiben nutzbar
  • FIBU-Daten Kopierprofil: Neues vordefiniertes Profil für buchhalterische Tabellen inkl. FIBU-Synchronisation der T001-Felder
  • FIBU-Synchronisation: Übertragung der FIBU-relevanten T001-Felder (C009, C010, C015, C024-C028) pro Wirtschaftsjahr
  • Fehlertoleranz Wirtschaftsjahre: Nicht vorhandene Wirtschaftsjahre werden beim Kopieren automatisch erkannt und übersprungen (statt Abbruch)
  • CI/CD: GitHub Actions Workflow mit automatischem Build, Test und Deploy nach Azure Blob Storage

Version 1.3.0

  • Mandantenbezug-Spalten: Beim Kopieren in einen anderen Mandanten werden neben mesocomp auch tabellenspezifische Spalten mit Mandantenreferenz automatisch angepasst (MandantenBezugMapping, Quelle: spalten_mit_mandantenbezug.xlsx)
  • CopyOptions-Record: Alle Kopieroptionen in einem record gebündelt, Methodensignaturen von 18-24 auf 5-11 Parameter reduziert
  • SQL-Duplizierung beseitigt: Dreifach duplizierter SQL-Baustein in CopyTable durch BuildMesoFilterSql ersetzt
  • Spalten-Mapping refactored: if/else-Kette im Export durch BuildColumnExpression-Methode mit klarer Prüfreihenfolge ersetzt
  • BCP-Timeout: Export- und Import-Prozesse werden nach 10 Minuten automatisch abgebrochen
  • Unit-Tests: Tests für MandantenBezugMapping hinzugefügt (20 Tests gesamt)
  • Upgrade: .NET 10.0, MesoXPO-DevEx25.2, DevExpress 25.2.4

Version 1.2.0 🏗️ Refactoring

  • Dependency Injection in BulkCopyMesoData: Vollständiges Refactoring der Hauptklasse
    • Constructor Injection für IBcpExportService, IBcpImportService, ITableSchemaService und ISqlQueryBuilder
    • Alle extrahierten Services werden nun über DI verwendet
    • Entfernung aller privaten Methoden, die zu Services extrahiert wurden (ExportTable, ImportTable, GetAdditionalObjectFilter, TableHasField, GetTableSchema, etc.)
    • Event-Weiterleitung von Services zu BulkCopyMesoData-Events
    • Klasse als sealed markiert gemäß C#-Konventionen
    • Code-Reduktion von 837 auf 479 Zeilen (358 Zeilen entfernt)
    • Logik-Verbesserungen: Export/Import mit korrekten bedingten Checks und Abhängigkeiten
  • Namespaces aufgeräumt: Verwendung von MesoCopy.Enums und MesoCopy.Events
  • Enums und EventArgs entfernt: Nested Types wurden in separate Dateien ausgelagert

Version 1.1.0 🏗️ Refactoring

  • Service-Architektur: BCP-Export- und Import-Logik in separate Services extrahiert
    • IBcpExportService und BcpExportService: Exportiert Tabellen mittels BCP
    • IBcpImportService und BcpImportService: Importiert Tabellen mittels BCP
    • Services verwenden Dependency Injection für ITableSchemaService und ISqlQueryBuilder
  • Verbesserte Wartbarkeit und Testbarkeit durch Trennung der Verantwortlichkeiten
  • Events für Fortschrittsanzeige (TableExportStarted, TableExported, TableImportStarted, TableImported, Message)

Version 1.0.0

  • MesoXPO DevEx 23.2 Edition 2024 Integration
  • Windows Forms Anwendung mit .NET 8.0
  • Umfassende Kopier- und Migrationsfunktionen für MESO-Daten
  • DevExpress 23.2.4 UI-Komponenten
  • Serilog-Protokollierung mit Datei- und UI-Ausgabe