Migracja danych z 1C:UPP do 1C:UH: potok oparty na Pythonie, SQLite i COM
Deweloperzy 1C często napotykają ograniczenia standardowej konwersji przy przejściu z UPP na UH. Modyfikacje w źródle, rozbieżności w strukturach obiektów i potrzeba powtarzalnych przebiegów wymagają warstwy pośredniej. Potok oparty na Pythonie, SQLite i COM zapewnia przejrzystość: import do surowych baz danych, przetwarzanie zgodnie z mapowaniami i eksport do odbiorcy. Kod źródłowy jest dostępny na GitHubie.
Trzyetapowa architektura
Potok podzielony jest na niezależne etapy:
- import: odczyt z UPP przez COM, normalizacja, zapis w SQLite.
- process: przekształcanie zgodnie z modelem UH z mapowaniami pól, typów i referencji.
- export: wyszukiwanie/tworzenie obiektów w UH, zapis przez COM.
Pośrednie bazy SQLite umożliwiają inspekcję danych na każdym kroku, porównanie wersji surowych i przetworzonych. Każda encja to osobny plik bazy danych.
Wymagania dla konturu migracji
Realizacja zamyka kluczowe zadania przemysłowego przenoszenia:
- Przenoszenie powiązanych encji z uwzględnieniem zależności.
- Rozdzielenie odczytu, przetwarzania i zapisu.
- Przechowywanie danych pośrednich do analizy.
- Automatyczne i ręczne mapowania pól, enumeracji.
- Osobna kontrola referencji przez UUID.
- Punktowy ponowny eksport rekordów.
- Interfejs webowy do uruchamiania i monitorowania.
- Autostart według harmonogramu z powiadomieniami.
Zalety SQLite jako warstwy pośredniej
SQLite wybrano ze względu na praktyczność:
- Lokalny dostęp bez serwera.
- Porównywanie etapów przetwarzania.
- Odporność na powtarzalne przebiegi.
- Osobna baza na katalog i etap.
Format danych jest przewidywalny: referencje w JSON z presentation, UUID i type; enumeracje jako Enumeracja.Nazwa.Wartość.
{
"presentation": "Sp. z o.o. Stokrotka",
"uuid": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"type": "Katalog.Kontrahenci"
}
Import z UPP: modułowa struktura
Moduły w IN/ łączą się z UPP przez COM, wykonują zapytania, normalizują typy i zapisują w bazie danych. Kluczowe zadania:
- Wyodrębnianie reprezentacji i UUID referencji.
- Przetwarzanie enumeracji.
- Zapis typów do późniejszej transformacji.
Wydobycie metadanych UPP i UH automatyzuje wstępne mapowania, porównanie atrybutów i diagnostykę rozbieżności.
Przetwarzanie danych: procesor i mapowania
Etap process — rdzeń: zmiana nazw pól, przekształcanie typów, składanie kont, przygotowanie referencji. Logika podzielona:
- Ogólny procesor dla infrastruktury.
- Specyficzne
PROCESS/<katalog>_processor.pydla logiki biznesowej.
Mapowania w osobnych plikach:
catalog_mapping.json— trasy loader/processor/writer.chart_of_accounts_mapping.json— plan kont.- Odpowiedniki obiektów, pól, typów, enumeracji.
Automatyka generuje szkic według metadanych, ręczne mapowanie koryguje semantykę.
Kontur referencji: baza reference_objects
Osobna baza danych rejestruje utworzone obiekty przez UUID:
- Źródło referencji (obiekt, pole).
- Status rekordu.
- Wsparcie dla dopełnienia i ponownego eksportu.
To eliminuje chaos przy błędach: status referencji jest obserwowalny.
Eksport do UH
Writer odczytuje przetworzoną bazę, wyszukuje obiekty po kluczu, wypełnia atrybuty, aktualizuje reference_objects. Zaletą: dane są już gotowe, debugowanie uproszczone.
Operacyjny interfejs webowy
Warstwa webowa uruchamia potok, pokazuje logi, bazy danych, punktowy eksport. Nie powiela logiki, dostępna dla zespołu.
Automatyzacja i harmonogram
Integracja z planistą: nocne przebiegi, powiadomienia w komunikatorze. Przejście od ręcznych uruchomień do procesu.
Zalety nad standardową konwersją
Kontur zapewnia:
- Przejrzystość danych pośrednich.
- Cykl wydobycie-analiza-modyfikacja.
- Zarządzane mapowania i referencje.
- Punktową kontrolę.
- Interfejs webowy i harmonogram.
Szybsza adaptacja nowych encji bez przebudowy całości.
Co jest ważne
- Trzyetapowy potok z SQLite minimalizuje ryzyka migracji.
- Mapowania automatyczne i ręczne przyspieszają konfigurację pod modyfikacje.
- Osobny kontur referencji zapobiega stratom.
- Interfejs webowy i harmonogram czynią proces operacyjnym.
- Otwarty kod do odtworzenia.
— Editorial Team
Brak komentarzy.