41
Nedávno jsem vytvořil zprávu s nedefinovaným počtem sloupců. Nechtěl jsem se s kódem pohrávat, rozhodl jsem se to udělat na ACS. S tím nebyl problém, bylo nutné výsledek natáhnout na libovolné rozložení (váš vlastní titul + ... 27
Přestože se studenti ACS s tímto setkávají první nebo druhý den, mělo by to být v sekci FAQ. Jednoduchý příklad programového výstupu sestavy na rozvržení pomocí výchozího nastavení. // Získejte schéma od ... 18
Při generování sestav na ACS se ve výchozím nastavení všechna seskupení rozšíří, ale stane se, že je nutné zobrazit sestavu se sbalenými skupinami ihned po generování! Tento kód v modulu sestavy umožňuje sbalit ... 10
Na této záložce můžete určit, která spojení mezi dvěma nebo více datovými sadami se budou provádět podle toho, jaké parametry a podmínky..png 1. „Zdroj komunikace“ - označuje první datovou sadu, od ... 9
Že při vývoji reportů je nutné, aby pro uživatele s omezenými právy byl report generován úplně bez kontroly práv! Zvláště pokud je nakonfigurován RLS. Existuje několik způsobů, jak toho dosáhnout: 1. Nainstalovat ...

Někdy se stane, že data v sestavě nelze načíst pomocí dotazu nebo kombinace dotazů. Ke sběru dat musíte použít nějaký postup a data se umístí do tabulky hodnot. Vyvstává otázka - lze tato data použít ve schématu složení dat? SKD je koneckonců výkonný a pohodlný nástroj. Ukazuje se, že použití dat z tabulky hodnot jako zdroje dat pro sestavu v ACS je možné a vůbec není obtížné. Tento článek vám ukáže, jak vytvořit takový přehled pro běžné formuláře.
Jak tedy vytvořit sestavu ACS pomocí dat z tabulky hodnot? Všechno v pořádku.
Nejprve otevřete konfigurátor a vytvořte novou externí zprávu.

Otevřete modul objektu a vytvořte předdefinovanou proceduru OnCompositionResult (ResultDocument, DecodingData, StandardProcessing)

V rámci tohoto postupu budeme shromažďovat údaje a generovat zprávu.
V postupu OnCompositionResult zakažte standardní zpracování. StandardProcessing \u003d False;
Potom libovolně vytvoříme tabulku hodnot. Názvy sloupců tabulky hodnot se musí shodovat s budoucími poli datové sady v ACS:


Jako příklad přidejme tři řádky dat. Dále krok za krokem vytvořte výstup sestavy.

  • Z diagramu získáme výchozí nastavení.

  • Zašleme dešifrovací data do odpovídající proměnné.

  • Rozvržení tvarujeme pomocí nástroje pro tvorbu rozvržení.

  • Přeneseme schéma, nastavení a dešifrovací data do rozvržení rozvržení.

  • Rozvržení provádíme pomocí procesoru rozvržení. K tomu provedeme metodu Initialize () procesoru pro složení dat. Jako parametry předáme šablonu složení dat, externí datové sady (typ: Struktura, klíč struktury se musí shodovat s názvem objektu ve schématu složení dat, hodnotou je vygenerovaná tabulka hodnot), dešifrovací data.

  • Vymazali jsme pole tabulkového dokumentu.

  • Výsledek zobrazíme v tabulkovém dokumentu.
Výsledkem je následující kód:
DataCompositionSchema \u003d GetLayout ( "BasicDataCompositionSchema"); // Settings \u003d DataCompositionSchema.Default Settings; // - Pokud uděláte, jak je uvedeno výše (u některých zdrojů doporučeno), pak při změně nastavení v klientském režimu // tyto změny neuvidíte, protože nastavení bude vždy ve výchozím nastavení. Jak správně - níže uvedená možnost Settings \u003d Nastavení Linker. GetSettings (); DecodeData \u003d NewDataCompositionDecryptionData; Layout Composer \u003d Nový DataComposition Layout Composer; LayoutLayout \u003d LayoutLayout. Execute (DataComposition Scheme, Settings, DecodingData); ExternalDataset \u003d Nová struktura ( Tabulka příkladových hodnot, TZVyvod); DataCompositionProcessor \u003d Nový DataCompositionProcessor; Procesor DataComposition. Inicializovat (LayoutDataset, ExternalDataSet, dešifrovací data); DocumentResult. Průhledná (); OutputProcessor \u003d Nový OutputProcessorDataCompositionResultInTableDocument; Výstupní procesor. InstallDocument (DocumentResult); Výstupní procesor. Výstup (procesor DataComposition); Přidejte rozložení diagramu rozložení. Název můžeme ponechat jako výchozí.

Vytvoříme datovou sadu. Chcete-li to provést, přidejte novou datovou sadu typu Object. Do pole Název objektu obsahujícího data vložte název, který jsme zadali jako klíč při vytváření struktury ExternalDataSet. Potom přidáme pole. Názvy se musí přesně shodovat s názvy sloupců v tabulce hodnot. Dále můžeme určit platné hodnoty, formáty atd.

V případě potřeby přidejte zdroje. Výsledky budou na nich zváženy. V našem případě se jedná o pole Množství a Množství.

Na kartě Nastavení pomocí návrháře nastavení vytvoříme výchozí verzi sestavy

Ukládáme naši zprávu. Spustíme to v klientovi a vytvoříme ho. Příklad spuštění sestavy ACS pomocí dat z tabulky hodnot je uveden na obrázku.


To je vše. Jednoduché, že?

Výslednou zprávu pro příklad lze stáhnout

Při otevírání nových poboček společnosti, pro výpočet zatížení serveru 1C: Enterprise a dalších úkolů, možná budete muset vidět dynamiku práce uživatelů v informační základně ve formě diagramu.

Dynamika musí být zobrazena pro období vybrané uživatelem. Zobrazené údaje budou představovat počet akcí na těchto uživatelích v kontextu hodin. Informace pro takovou zprávu lze získat z deníku.

Zvažme postupné vytvoření takové sestavy a pomocí externí datové sady ji vytvořte v systému složení dat.

Přečetli jsme si registrační protokol

A tak sestavíme zprávu o SKD. Data neobdržíme pomocí požadavku z databáze, ale z protokolu. O způsobu, jakým platforma ukládá protokol, jsem psal v předchozím článku.

V souladu se stanoveným obdobím v sestavě musíme získat všechny akce uživatelů s daty z databáze. Seskupte výslednou tabulku podle uživatele a zobrazte ji jako diagram (viz výše uvedený snímek obrazovky).

K získání informací z registračního protokolu použijeme globální kontextovou metodu „UnloadLogRegister ()“. V události "OnCompositionResult" generované sestavy přidejte následující programový kód:

Postup OnCompositionResult (ResultDocument, DecodeData, StandardProcessing) StandardProcessing \u003d False; // deaktivuje standardní výstup sestavy - budeme výstup programově // Získejte nastavení přehledu, vč. doba Settings \u003d Nastavení Linker. GetSettings (); // Získejte nastavení přehledu ParameterPeriod \u003d Nastavení Skladatel. GetSettings (). Parametry dat. Elementy. Najít („Období“). Hodnota; ZhurTab \u003d nová tabulka hodnot; Výběr časopisu \u003d Nový snímek; // Vytvořte strukturu pro výběr deníku // Vyplňte výběr podle období Výběr deníku. Vložit ("Počáteční datum", ParameterPeriod. Počáteční datum); Výběr deníku. Insert ("EndDate", ParameterPeriod. EndDate); // Nastavit výběr pro události Pole událostí \u003d Nové pole; Pole událostí. Přidat („_ $ Data $ _ ... Vymazat... Nový"); Pole událostí. Přidat (" _ $ Data $ _ ... Pošta"); Pole událostí. Přidat (" _ $ Data $ _ ... TotalsPeriodUpdate"); Pole událostí. Přidat (" _ $ Data $ _ ... Zrušit odeslání"); Pole událostí. Přidat (" _ $ Data $ _ ... Aktualizace"); SelectLog. Insert (" Událost ", Pole událostí); // Uvolněte protokol UnloadRegisterJournal (ZhurTab, Array of Events); // Vytvoření a vyplnění dat pro výstup do sestavy ZhurTab. Sloupce. Přidat („Čas“); ZhurTab. Sloupce. Přidat („ Počet událostí"); Pro každou stránku z cyklu LogTabs Čas stránky \u003d hodina (datum stránky); Počet událostí stránky \u003d 1; Konec cyklu; // Seskupte výsledek ZhurTab. Sbalit („ Uživatelské jméno, čas" , " Počet událostí" ) ; // ..............

První parametr metody „UnloadLogRegister“ nastavuje tabulku hodnot, do které bude uvolněn výsledek výběru z deníku. Druhým parametrem je nastavení filtru na vybrané záznamy. Filtr je struktura, klíče, ve kterých jsou pole, podle kterých je filtr nastaven. Pomocí polí „Datum zahájení“ a „Datum ukončení“ nastavíme období analýzy protokolu a také pole „Událost“, do kterého předáme pole řetězců (názvy událostí). Události přidané do pole odpovídají akcím na datech v databázi.

Další informace o použití metody „UnloadLogRegister“ najdete v pomocníkovi syntaxe.

Přeneseme tabulku hodnot do ACS

Aby ACS mohl pracovat s výslednou tabulkou hodnot, musíte udělat následující:

1) Vytvořte datovou sadu ve schématu rozložení a nastavte její pole.
2) Zapište přenos tabulky hodnot do ACS do programového kódu modulu „AtCompositionResult“.

// Seskupte výsledek ZhurTab. Sbalit („ Uživatelské jméno, čas" , " Počet událostí"); DecryptionData \u003d NewDataCompositionDecryptionData; // Vytvořte dešifrovací data Layout Composer \u003d Nový DataComposition Layout Composer; // Vytvořte skladatele rozložení // Inicializujte rozložení pomocí schématu složení dat // a dříve vytvořená nastavení a dešifrovací data DataCompositionSchema \u003d GetLayout (" Rozložení základních dat"); LayoutComposer \u003d LayoutComposer. Execute (DataCompositionSchema, Settings, ExpansionData); // Vytvořte výsledek Composition Processor \u003d Nový procesor DataComposition; Rozvržení procesoru. Inicializovat (Layout Layout, // !!! Předáme tabulku "ZhurTab" procesoru rozložení !!! Nová struktura („ LogRegistration", ZhurTab), Decryption Data); DocumentResult. Clear (); // Výstup výsledku do tabulkového dokumentu OutputProcessor \u003d Nový OutputProcessorDataCompositionResultInTableDocument; Výstupní procesor. InstallDocument (DocumentResult); Výstupní procesor. Výstup (procesor rozložení); Konec postupu

3) Nastavte zdroje a strukturu zprávy (další podrobnosti najdete v souboru zprávy, jehož odkaz je uveden na konci článku).

Tím je nastavení sestavy dokončeno a můžeme ji spustit v podnikovém režimu.

Výsledek

Externí zdroj dat v ACS nám umožňuje používat data ve zprávách z téměř jakéhokoli zdroje, včetně těch, jejichž data nemůžeme přijímat pomocí dotazů.

Použití ACS pro takové zdroje vám umožňuje vytvářet zprávy s flexibilním systémem nastavení a také umožňuje uživateli změnit výstup zprávy, její strukturu. Pro tyto zdroje budou plně využity všechny možnosti systému pro složení dat.

Přehled si můžete stáhnout z příkladu pomocí následujícího odkazu.

Ahoj!
Dnes chci popsat téma, které bez potápěčského vybavení nezjistíte :);)

Potápění znamená, že ponor je docela hluboký. V literatuře existuje jen málo odkazů na toto téma a dokud jej „nesvrbíte“, nebudete mu rozumět. K takové akci nebude ani zpráva;) Mimochodem, dokumentace o tom říká velmi špatně a nekonzistentně, musíte se obrátit na literaturu třetích stran.

Například velmi doporučuji „Vývoj komplexních reportů v„ 1C: Enterprise 8.2 “. Systém složení dat ", (konkrétněji viz strany 224, 267 a 473)

V ACS existují 2 typy zdrojů dat: Dotaz, objekt a sjednocení (tato věc se nepočítá, nejde o zdroj dat, ale o obsluhu existujících dat). Viz obr. 1:


Pokud tedy více či méně rozumíme tomu, jak pracovat se zdrojem (sadou) dat typu „Request“, pak nastanou potíže ohledně datové sady „Object“.

Nejprve popíšu, co chceme na výstupu získat:

Nahlásit, uživatel klikl na „ Tvarovat„A byl zobrazen seznam položek (viz obr. 2):

Ano, udělal jsem jednu nepřesnost, a to: neexistuje žádné tlačítko “ Tvarovat„, Ale je tu tlačítko“ nová akce„(O něco později vysvětlím, proč se to stalo;)

Ano ano! Další bod: celý tento seznam je odvozen z datové sady „Objekt“:

Rozhodnutí:

  1. Vytvoříme externí zprávu;
  2. Přidejte rozložení ACS, pojmenujme jej „Schéma rozložení MainData“;
  3. Přidejte k němu datovou sadu „Objekt“, přiřaďte jí název „NomenclatureList“ (měl by být stejný jako na obr. 3);
  4. V nastavení přehledu toho moc neexperimentujeme, pojďme si to zjednodušit (viz obr. 4)

Dobře, polovina práce je hotová;)

Nyní pojďme vygenerovat hlavní formulář sestavy (ano, ještě jeden okamžik! Moje konfigurace funguje na běžném rozhraní, ale myslím, že na spravovaných formulářích najdete řešení;) Takže formulář:

Zde nastává problém! Pokud klikneme na tlačítko „generovat“ (obr. 5.), zobrazí se nám chyba!


Tento článek jsem věnoval řešení tohoto problému!

Událost tlačítka „Generovat“ nebylo možné zachytit, proto jsem se rozhodl použít berlu. Spustil jsem konfiguraci v režimu ladění a pokusil jsem se najít stejné tlačítko „generovat“.

Vložil jsem do formuláře proceduru „Generovat“, ale nejsou do ní žádné záznamy, před otevřením formuláře jsem musel předefinovat akci tlačítka „generovat“:


Na obr. 8 je kromě změny akce formuláře uveden příklad požadavku, jeho zpracování a přenos generovaných dat do ACS. Podívejme se na to pečlivěji:

  1. Generujeme vstupní data pro ACS;
  2. Inicializujeme ACS;
  3. Výsledek zobrazíme NA FORMULÁŘI (věnujte tomu také pozornost!).

Připomeňme si schéma interakce objektů systému složení dat:

Schéma složení dat v externí sestavě je k dispozici jako globální objekt v metodě formuláře Schéma DataComposition.Můžete jej také odkázat podle názvu a předat jej metodě Získejte rozložení(viz obr.8)

Hlavní část kódu je uvedena níže:

Žádost \u003d Nový požadavek; Request.Text \u003d "SELECT | Nomenclature.Name as Nomenclature | FROM | Reference.Nomenclature AS Nomenclature"; NomenclatureList \u003d Query.Run (). Unload (); Datové sady \u003d nová struktura ("NomenclatureList", NomenclatureList); // ACS \u003d GetLayout ("MainDataCompositionSchema"); ACS \u003d Schéma složení dat; LayoutComp \u003d new LayoutComposerDataComposition; layoutComp \u003d LayoutComp.Run (SKD, SKD.Default Settings); DataCompositionProcessor \u003d nový DataCompositionProcessor; ProcessorCompData.Initialize (layoutComp, datové sady); output \u003d newDataCompositionOutputProcessorIn TabularDocument; output.SetDocument (FormElements.Result); output.Offer (ProcessorCompData, true);

Ano! Tady je další pěkný okamžik !!!

V tomto příkladu, jak vidíte (viz obr. 2), se výstup provádí ve formuláři, nikoli v tabulce. dokument! A to je velmi dobré, protože s formulářem můžeme pracovat (programově zachycovat události prvku formuláře, dělat nejrůznější triky přetažení atd .;)

V tabulkovém dokumentu můžeme jednoduše zobrazit zpracovaná data na obrazovce a předat ovládání dokumentu uživateli a nemůžeme nijak ovlivnit další proces úpravy tohoto obsahu!

Zobrazit systém nápovědy “ Pole tabulkového dokumentu “, A uvedu pouze výňatek z integrované dokumentace systému 1c Enterprise 8.2:

„Pole tabulkového dokumentu je tabulkový dokument umístěný ve formuláři. Spolu s různými možnostmi návrhu tabulkového dokumentu to umožňuje organizovat zpracování událostí, ke kterým dochází při výběru buněk, obrázků a dalších ovládacích prvků umístěných v poli tabulkového dokumentu. “

Dobře, jak se říká, úspěch v bitvě;)

V mém posledním článku jsem již napsal, že 1C je paradoxní platforma. Jedním z takových paradoxů je systém uspořádání dat. ACS je určen pro konstrukci komplexních zpráv a předpokládá nahrazení „manuálního“ programování zpráv návrhem v multifunkční sadě nástrojů. Schopnost používat ACS se objevila v osmé verzi, ale trvalo dlouho, než se objevila verze 8.2, aby ji 1C mohla používat ve svých standardních produktech. Na jedné straně je ACS multifunkční sada nástrojů, pomocí které můžete vytvářet velmi složité zprávy bez jediného řádku kódu. ACS má však poměrně vysokou prahovou hodnotu pro vstup, je velmi obtížné jej rychle studovat a začít používat, protože rozhraní není zcela intuitivní a nejkompletnější příručky k použití jsou k dispozici pouze ve formě placené literatury.

Během studia ACS se objevil problém. Je nutné získat data z tabulky hodnot třetích stran pomocí dotazovacího jazyka a poté s těmito daty pracovat jako s podobnými daty z databázových tabulek (souhrnné operace, seskupování atd.). V klasickém formátu bychom sestavili dotaz, který přijímá informace z tabulky předávané dotazu jako parametr ide.

Žádost \u003d Nová žádost (
"VYBRAT
| Tabulka. Nomenklatura,
| Tabulka. Sklad
| OD
| & TK AS Tabulka ");
Request.SetParameter ("TK", TK);

Ale s ACS to není tak jednoduché. Bohužel výše popsanou operaci nelze provést v systému fázování dat. Přesto je implementována schopnost načíst externí tabulky hodnot v systému.

Stojí za to udělat malou lyrickou odbočku a mluvit o datových sadách. Datové sady jsou zdroje informací, ze kterých ACS přijímá data, která později sestavuje do zprávy. Datové sady se dělí na typy, hlavně pomocí typu „Request“, v jehož těle programátor zapisuje dotaz do databáze. Typ „Objekt“ se používá k načtení dat z externích objektů. V obou případech máme na výstupu určitou sadu polí získaných v důsledku provedení požadavku nebo načtení externího objektu. Později lze tato pole ovládat na kartě „Nastavení“ spolu s podrobným nastavením struktury sestavy. Pro vztah různých sad v ACS je možné určit odkazy na datové sady na kartě se stejným názvem. Tyto odkazy jsou přímým analogem levého spojení v klasickém dotazu. Je však třeba poznamenat, že dotazy v žádné datové sadě „nevědí“ o existenci dalších datových sad; odkazy datové sady nakonec ovlivní složení dat podle struktury uvedené na kartě „Nastavení“.

Pojďme podrobně úkol na nějakém příkladu. K dispozici je standardní zpráva Výpočetní výkazy organizace konfigurace ZiK 8. Je nutné, aby typy výpočtů v sestavě byly seskupeny do některých skupin. Korespondence typu vypořádání skupiny jsou uloženy v externí tabulce hodnot. Chcete-li jej načíst do hlavního schématu složení dat, vytvořte „objekt datové sady“ s názvem „Skupiny“ (obrázek 2). Spojení se provádí pomocí „datové sady dotazu“ - „Časové rozlišení“ podle typu výpočtu (obrázek 3). V "datové sadě dotazu" - "Časové rozlišení" jsou informace o skupinách, odstraníme všechny výskyty. Poté na kartě „Nastavení“ můžeme použít pole „Skupina“, jehož hodnota se načte z externího zdroje dat (obrázek 4). Ve funkci generování zprávy doplňujeme načítání externích dat.

Funkce GenerateReport (Výsledek \u003d Nedefinováno, Dekódovat data \u003d Nedefinováno, OutputToReportForm \u003d True) Export

// získání nebo vytvoření požadované tabulky hodnot „Group“ a její zápis do proměnné se stejným názvem

ExternalData \u003d New Structure (); // vytvoří a vyplní externí datovou strukturu
ExternalData.Insert (Skupiny);

UserPanelValue \u003d Ukázkové sestavy. GetUserPanelSettingsValuesObject (ThisObject);
Výchozí nastavení \u003d Nastavení Linker.GetSettings ();
TypicalReport.GetAppliedSetting (ThisObject);
Typické zprávy. Generování typické zprávy (ThisObject, Result, Decoding Data, Output to the Report Form, ExternalData);
Nastavení Linker.LoadSettings (výchozí nastavení);
Výsledek návratu;

EndFunction

Pokud bychom vytvořili sestavu „od nuly“, kód pro spuštění generování sestavy by vypadal takto:

ExternalDatasets \u003d New Structure;
ExternalDatasets.Insert ("Skupiny", Skupiny); // Skupiny - požadovaná tabulka hodnot
DataCompositionSchema \u003d GetLayout ("MainDataCompositionSchema"); // naše rozložení se schématem nastavení dat
Settings \u003d DataCompositionScheme.Default Settings;
Layout Composer \u003d Nový DataComposition Layout Composer;
LayoutComposition \u003d LayoutComposer.Run (DataCompositionSchema, nastavení);
DataCompositionProcessor \u003d Nový DataCompositionProcessor;
DataCompositionProcessor.Initialize (LayoutDataSets);
TabDoc \u003d Nový TabularDocument;
OutputProcessor \u003d NewDataCompositionOutputResultProcessor V tabulkovém dokumentu;
Výstup Processor.InstallDocument (TabDok);
OutputProcessor.Output (DataComposition Processor);

Číst 9660 čas