Pokročilé hledání             

HELIOS iNuvio      FAQ     Uživatelský panel    

Registrovat     Přihlásit se

    Obsah fóra> Časté dotazy> Metodické dotazy
    Verze pro tisk

Rozkopírování číselníků

Zapisují se častá metodická řešení dotazů z provozu Helios Orange. Patří sem dotazy typu "Potřebuji účtovat každou položku faktury na jiný účet." apod.

Moderátor: orange_moderator

Odeslat odpověď
Příspěvek: 1 • Stránka 1 z 1
  • Odpovědět s citací

Rozkopírování číselníků

Příspěvekod josef.korensky v 06.10.2020 13:18

1. Nastavení Rozkopírování
Pokud Rozkopírování nerozkopíruje záznamy, zkuste nastavení:
V případě, že neexistuje vazba na podřízený číselník
nastavit na hodnotu:
Rozkopírovat bez vazby
Tato drobná změna poměrně často pomůže.

2. Vlastnosti rozkopírování
Rozkopírování z principu nemůže a nikdy nebude fungovat „bez chyb“. Chyby jsou a budou korektně ošetřené a zalogované, ale na konkrétních datech bude docházet k tomu, že některé záznamy nebudou rozkopírovány.
Například – chceme rozkopírovat číselník organizací
Ve zdrojové a cílové databázi mohou existovat ty samé organizace, ale ve zdrojové databázi mají jiné ID a jiné Číslo organizace než v databázi cílové.
Klíčový sloupec je tedy ICO.
Pokud v cílové databázi neexistuje dané IČO, tak se záznam vloží.
Pokud v cílové databázi existuje dané IČO, tak se záznam aktualizuje podle zdrojového záznamu
Zdá se to jasné, srozumitelné a jednoduché.
Ale sloupec IČO je nepovinný a není unikátní, takže jak ve zdrojové, tak i v cílové databázi může existovat více záznamů se stejným IČO.
Rozkopírování takovýchto řádků pak logicky musí skončit s chybou a stejně tak skončí s chybou rozkopírování číselníků, které mají sloupec IDOrg či CisOrg.

3. Logování chyb
Bylo by krásné, kdyby rozkopírování zahlásilo chybu „V tabulce Organizací máte duplicitní IČO 123456“, proto nelze organizace rozkopírovat.
Tohoto stavu se ale nikdy nedosáhne. Příkaz, který převádí data se dynamicky a velice komplikovaně sestavuje na základě konfigurace.
Pro každý číselník, který rozkopírováváme se standardně rozkopírovávají i podřízené číselníky a výsledný příkaz pro každou podřízenou tabulku může být na několik obrazovek.
Příklad rozkopírování Čísel organizací při kopírování kmenových karet:
RozkopKmenKartyTabCisOrg.txt
(10.75 KiB) 1585 krát

Opravdu není možné zjistit, v které části příkazu dochází k chybě. :-(

4. Světlo na konci tunelu
A teď ta lepší zpráva
Do logovací tabulky byl přidán sloupec, ve kterém se loguje příkaz, který způsobil chybu. To může značně zjednodušit analýzu při hledání problému.
Ani v tomto případě to není procházka růžovým sadem, ale odpadá celkem složité trasování přes Profiler.
Změna bude/byla v roce 2020 v prosincové verzi Helios Orange.

4. Úprava číselníku
Existuje možnost, jak problémový sloupec nerozkopírovávat.
Po rozkopírování číselníku lze zkontrolovat tabulku TabRozkopErrDetail

SELECT * FROM TabRozkopErrDetail
ORDER BY 1 DESC

Zde je nejen zalogovaná chyba, ale i příkaz, který chybu vyvolal.
Příkaz může vypadat poměrně složitě, zde je ukázka:
RozkopKmenKartyTabCisOrg.txt
(10.75 KiB) 1585 krát


V principu bere příkaz řádek po řádku podle záznamů označených k rozkopírování. Pokud se rozkopírovává celá tabulka, tak stejně bere řádek po řádku, ale ID jsou všechna ID v tabulce.

Pokud se podaří zjistit, které sloupce způsobují chybu (třeba: „Subquery returned more than 1 value")
tak existují možnosti (kromě změny dat), jak chybu eliminovat:

  • Nastavit sloupec tak, aby se vůbec nekopíroval v konkrétní tabulce
    INSERT INTO TabRozkopXX (TabName, Atribut, VynechatTabulku)
    VALUES('TabBankSpojeni','IDOrg','0')
    ... Při rozkopírování tabulky TabBankSpojení se nebude rozkopírovávat sloupec „IDOrg“

  • Nastavit tabulku tak, aby se nerozkopírovávala
    INSERT INTO TabRozkopXX (TabName, Atribut, VynechatTabulku)
    VALUES('TabCisOrg', NULL, '0')
    ... Při rozkopírování se nebude rozkopírovávat tabulka TabCisOrg i když je podřízeným číselníkem

  • Nastavit sloupec tak, aby se nikdy v žádné tabulce nerozkopírovával
    INSERT INTO TabRozkopXX (TabName, Atribut, VynechatTabulku)
    VALUES('VSECHNY', 'CisloOrg', '0')
Časem bude uživatelsky přívětivější prostředí přímo v HeO.

Děkuji všem, kteří dočetli až sem :-)
Josef Kořenský
josef.korensky
 
Příspěvky: 4
Registrován: 16.05.2014 12:23
Firma: Asseco Solutions
Nahoru

Odeslat odpověď
Příspěvek: 1 • Stránka 1 z 1

Zpět na Metodické dotazy

Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 2 návštevníků

         
  • Tým • Smazat všechny cookies z fóra • Všechny časy jsou v UTC + 1 hodina
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group, Český překlad – phpBB.cz

© copyright 2024 Asseco Solutions, a.s.