MESO Copy
Eine Windows-Anwendung zum Kopieren und Migrieren von Daten zwischen MESO-Mandanten und Wirtschaftsjahren.
Download
- Aktuelle stabile Version: MesoCopy.zip
- Aktuelle Beta-Version: MesoCopy.zip (Beta)
Ü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
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
- Stellen Sie sicher, dass .NET 10.0 Runtime installiert ist
- Laden Sie die neueste Version von MESO Copy herunter
- Extrahieren Sie die Dateien in ein beliebiges Verzeichnis
- 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
- Server: Geben Sie den SQL Server-Namen oder die IP-Adresse ein
- System-DB: Name der MESO-Systemdatenbank (üblicherweise
MESOSYSoder ähnlich) - MESO-Passwort: Passwort für den MESO-Benutzer
- 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:
021für Artikelzusatzfelder,050für Kundenzusatzfelder
T070-Filter (Eigenschaftsobjekte):
- Filtert nach Eigenschaftsobjekt-Typ (C003-Spalte in T070)
- Beispiel:
1für Artikel,3für Kunden,12fü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
- Klicken Sie auf Start, um den Kopiervorgang zu beginnen
- Der Fortschritt wird in Echtzeit im Protokollbereich angezeigt
- Der Fortschrittsbalken zeigt den Gesamtfortschritt (Anzahl verarbeiteter Tabellen)
- Klicken Sie auf Abbruch, um den Vorgang vorzeitig zu beenden
Technische Details
Architektur
MESO Copy verwendet eine dreischichtige Architektur mit Service-orientiertem Design:
- Präsentationsschicht: Windows Forms mit DevExpress-Komponenten (
FormMain,FormTableSelect) - Geschäftslogik:
BulkCopyMesoData-Klasse für die Datenverarbeitung und OrchestrierungCopyOptions-Record: Bündelt alle Kopieroptionen in einem Objekt- Service-Layer mit Dependency Injection:
IBcpExportService/BcpExportService: BCP-Export-OperationenIBcpImportService/BcpImportService: BCP-Import-OperationenITableSchemaService/TableSchemaService: Tabellenschema-AbfragenISqlQueryBuilder/SqlQueryBuilder: SQL-Query-Erstellung
MandantenBezugMapping: Statisches Mapping der Spalten mit Mandantenbezug pro Tabelle
- Datenzugriff: MesoXPO Framework mit XPO (eXpress Persistent Objects)
Datenverarbeitung
Der Kopierprozess erfolgt in mehreren Schritten:
- Tabellenermittlung: Alle zu kopierenden Tabellen werden aus dem SQL Server-Schema geladen
- 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
- Ziel-Vorbereitung: Vorhandene Daten im Ziel werden optional gelöscht
- Import (BCP): Daten werden aus
.dat-Dateien in Zieltabellen importiert - Bereinigung: Optional werden Quelldaten und/oder BCP-Dateien gelöscht
Besonderheiten
- Mandantennummer-Transformation: Automatische Anpassung von
mesocomp-Spalten - Spalten mit Mandantenbezug: Zusätzlich zu
mesocompwerden tabellenspezifische Spalten mit Mandantenreferenz automatisch angepasst (definiert inMandantenBezugMapping, Quelle:spalten_mit_mandantenbezug.xlsx). Betrifft ca. 28 Tabellen mit insgesamt ~45 Spalten. Die Anpassung erfolgt per SQLREPLACEund 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(ProduktMESO-COPY) mit Konfiguration überappsettings.jsonoder 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
mesocompauch tabellenspezifische Spalten mit Mandantenreferenz automatisch angepasst (MandantenBezugMapping, Quelle:spalten_mit_mandantenbezug.xlsx) - CopyOptions-Record: Alle Kopieroptionen in einem
recordgebündelt, Methodensignaturen von 18-24 auf 5-11 Parameter reduziert - SQL-Duplizierung beseitigt: Dreifach duplizierter SQL-Baustein in
CopyTabledurchBuildMesoFilterSqlersetzt - 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
MandantenBezugMappinghinzugefü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,ITableSchemaServiceundISqlQueryBuilder - 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
sealedmarkiert gemäß C#-Konventionen - Code-Reduktion von 837 auf 479 Zeilen (358 Zeilen entfernt)
- Logik-Verbesserungen: Export/Import mit korrekten bedingten Checks und Abhängigkeiten
- Constructor Injection für
- Namespaces aufgeräumt: Verwendung von
MesoCopy.EnumsundMesoCopy.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
IBcpExportServiceundBcpExportService: Exportiert Tabellen mittels BCPIBcpImportServiceundBcpImportService: Importiert Tabellen mittels BCP- Services verwenden Dependency Injection für
ITableSchemaServiceundISqlQueryBuilder
- 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



No comments to display
No comments to display