[Tipy a Triky] Datové zdroje

PříspěvekNapsal: 10.04.2007 09:40
od jan.havranek
Možný způsob hledání datových zdrojů:
Otevřít Definovaný Formulář (v daném přehledu do kterého formulář patří, například ve Fakturaci) - Záložka Třídění - nad položkami pravá myš - Zobrazit všechny. Potom lze rozumně hledat příslušné tabulky, je to uspořádáno odbobně jako v Nastav a \"lidsky\" pojmenováno (jsou výjimky). Pokud najdu to co hledám, mohu se kurzorem nastavit na vybranou tabulku, dám pravou myš - volba Nový tiskový zdroj - v zobrazeném okně v prostředním poli je název hledané Pipeline, tak jak bude vidět v ReportBuilderu.

Pokud hledám přímo ve formuláři, řídím se číslem a názvem pipeline. Čísla jdou vzestupně a jsou z nich patrné vazby a vztahy (většinou, jsou i výjimky).

Pokud je v nazvu Pipeline na začátku x pak to znamená, že je zde k nadřízené tabulce vztah x:1.

Vztahy mezi datovými zdroji jsou dány buď cizím klíčem (FK) mezi tabulkami SQL a nebo jsou to speciálně napevno dané navázané zdroje, vytvořené programátorem (tam kde není možné generovat zdroj pouze podle FK).


Obecně se dají popsat vazby datových zdrojů takto (jsou výjimky):

První (základní) úroveň vazeb je hlavní pipeline (údaje přehledu ze kterého tisknu). Je to tedy jakási hlavička záznamu a k ní jsou navázány další zdroje (zde je uloženo například pouze číslo Odběratele).

Druhá úroveň - většina datových zdrojů je právě z této úrovně, jsou to detailní informace navázané k hlavičce (zde jsou například kompletní údaje Odběratele zadaného na hlavičku).

Třetí úroveň - většinou jenom doplňují informace k druhé úrovni, nemusí již mít vazbu na hlavičku jako takovou (tady jsou například obecné kontakty k Odběrateli, ty ale nemají vztah k hlavičce).

Další úrovně - používají se výjimečně, často ani nejsou vygenerované. U datových zdrojů standardních, tvořených na základě FK se dá další úroveň vygenerovat (Formulář - Oprava - Třídění - Zobrazit vše - Vygeneruj další úroveň).

Čísla v názvu pipeline spojují datové zdroje v nadřízené a podřízené úrovni (jedno nebo více číslic je společných).
Počet číslic mezi podtržítky značí úroveň vazeb. Základní úroveň bývá bez čísel, druhá úroveň mívá jednu číslici, třetí dvě atd.


Nejlépe je vše vidět na příkladu:

TabDokladyZbozi (hlavní tabulka – první úroveň, nemá číslo)
Tabulka dokladů zboží (faktura, výdejka, expediční příkaz ...). Je to hlavní Pipeline pokud tisknu doklady a je to tedy první úroveň vazeb.

xPohybyZbozi_15 (druhá úroveň, podřízená tabulka, má jedno číslo)
Tabulka pohybů zboží (položky na dokladech). Pipeline je podřízena tabulce dokladů a je zde vazba x:1 (jeden doklad má více položek). Má pouze jednu číslici v názvu _15, takže je v druhé úrovni (přímo podřízena hlavní pipeline).

KmenZbozi_15_299 (třetí úroveň, podřízená tabulka, má dvě čísla)
Tabulka údajů kmene zboží (Zboží a Služby), je podřízena tabulce pohybů zboží (to značí první číslo _15, které ty dvě tabulky spojuje). Je zde vazba 1:1 (jedna položka dokladu může mít pouze jednu kmenovou kartu). Tabulka je v třetí úrovni vazeb, což značí dvě číslice v názvu _15_299.
Pokud by název obsahoval třetí číslici, pak by to byla další úroveň vazeb atd. Většinou je ve formulářích vnoření do tří úrovní maximálně (jsou výjimky).

Uživatelský datový zdroj (user pipeline)

PříspěvekNapsal: 12.04.2007 09:16
od jan.havranek
Do formulářů lze vytvořit vlastní zdroj, pokud takový není k dispozici v automaticky generovaných zdrojích.
Jedná se o uživatelský datový zdroj (user pipeline), je spojen pouze s konrétním formulářem a je tvořen SQL dotazem SELECT.
Syntaxe SQL má specifický tvar podmínky WHERE, pokud je potřeba nový zdroj svázat s nějakým údajem z tištěného záznamu.
Obecný SELECT, který dotáhne jednu konkrétní pevnou informaci nezávisle na tištěném záznamu má syntaxi standardní.

Obecný postup:
V daném přehledu (např. ve fakturách) zvolit tisk - Oprava formuláře - záložka Třídění - pravá myš Zobrazit všechny - znovu pravá myš Nový tiskový zdroj.

Tvorba nového zdroje:
Název tiskového zdroje - zde je nutné zachovat vyplněné UP_ a doplnit vlastní srozumitelný název zdroje (bez mezer a bez diakritiky). Tento název bude vidět jako název Pipeline v Definici formuláře.

Nadřazený tiskový zdroj - to je zdroj který obsahuje atribut, na který se Nový zdroj bude vázat. Z tohoto zdroje bude dosazen údaj do klauzule WHERE (více viz příklad).

Hlavní tabulka v definici - pokud je nový zdroj tvořen složitějším SELECTem s JOINy na další tabulky a pokud z některé tabulky je dotahován atribut typu TEXT (též MEMO, tj. nějaký popisný údaj větší než 255 znaků) pak je nutné zde nastavit SQL tabulku, ze které se tento údaj typu TEXT bude dotahovat. Do jednoho zdroje nelze dát údaje typu TEXT z více než jedné tabulky. Pokud Hlavní tabulka není zadána, nemusí být tento údaj do tisku dotažen správně.

Definice:
Vlastní SELECT datového zdroje. Pokud spojuji nadřazený datový zdroj s tímto novým zdrojem pak syntaxe bude následující:
Kód: Vybrat vše
SELECT neco
FROM tabulka
WHERE tabulka.atribut=:atribut_nadrazeneho_zdroje


Příklad:
Na faktuře je navázán údaj Forma úhrady. Potřebuji do tisku faktury dotáhnout počet dnů splatnosti z této úhrady, ten je uložen přímo v číselníku úhrad. Datový zdroj úhrad není automaticky generován.
Výše popsaným způsobem se dostanu do formuláře a zadám nový datový zdroj.

Název zdroje bude např.: UP_LhutaSplatnosti.
Nadřazený zdroj: protože Forma úhrady je na hlavičce faktury a potřebuji dotáhnout počet dnů k této hodnotě (na konkrétní faktuře), musím zadat do nadřazeného zdroje hlavičku faktury, tedy TabDokladyZbozi.
Hlavní tabulka: nedotahuji žádný údaj typu TEXT, tudíž nechám prázdné.
Definice: zde bude SELECT do tabulky formy úhrady a WHERE s \"dvojtečkou\" zajistí správné dohledání konkrétní formy úhrady podle té, která je právě tištěna v nadřazeném datovém zdroji (tedy ta co je zadána na faktuře, kterou právě tisknu).

Kód: Vybrat vše
SELECT LhutaSplatnosti
FROM TabFormaUhrady
WHERE TabFormaUhrady.FormaUhrady=:FormaUhrady
Přílohy
UP_s_vazbou.JPG
Uživatelský datový zdroj
UP_s_vazbou.JPG (32.86 KiB) Zobrazeno 10535 krát

Jak na věc? Vlastní datové zdroje - další tipy

PříspěvekNapsal: 08.01.2008 15:53
od jan.havranek
Pokud potřebuji zjistit jak jsou tvořeny Pipeline v konkrétním formuláři, mohu použít SQL Profiler, kterým zachytím SQL dotaz v okamžiku tisku. Ve výsledku vidím zakomentovaný název /*Pipeline*/ (tento název je vidět v editoru formuláře) a zároveň vidím SELECT daného zdroje. Ten mohu zkopírovat, upravit, doplnit o další údaje, subselecty apod. a použít jej pro tvorbu vlastního zdroje. Vlastní zdroj pak třeba použiji místo zdroje standardního. Napojení na nadřízený zdroj vyžaduje pouze správné zadání podmínky WHERE. Profiler již zobrazí konkrétní dosazené hodnoty, nikoliv obecný dotaz - více viz předešlý příspěvek v tomto tématu.
Přílohy
Profiler.jpg
Záznam SQL Profileru při tisku formuláře.
Profiler.jpg (86.12 KiB) Zobrazeno 10320 krát