Príklad použitia externého zdroja údajov v úložnom systéme. Dátové sady SKD dátová sada objekt tabuľka hodnôt

V mojom minulom článku som už napísal, že 1C je paradoxná platforma. Systém skladania údajov je jedným z týchto paradoxov. SKD je určený na navrhovanie komplexných zostáv a zahŕňa nahradenie „manuálneho“ programovania zostáv dizajnom v multifunkčnej súprave nástrojov. Možnosť používať systémy kontroly prístupu sa objavila už v ôsmej verzii, ale trvalo dlho, kým sa objavila verzia 8.2, aby ju 1C mohla použiť vo svojich štandardných produktoch. Na jednej strane je ACS multifunkčná súprava nástrojov, pomocou ktorej môžete vytvárať veľmi zložité zostavy bez jediného riadku kódu. Systém kontroly prístupu má však pomerne vysokú bariéru pre zaučenie a začať ho naplno používať „za behu“ je veľmi ťažké, pretože rozhranie nie je úplne intuitívne a najkompletnejšie návody na použitie sú dostupné iba v formou platenej literatúry.

V procese môjho štúdia ŠKD nastal problém. Je potrebné získať údaje z tabuľky hodnôt tretej strany pomocou dopytovacieho jazyka a následne s týmito údajmi pracovať ako s podobnými údajmi z databázových tabuliek (operácie redukcie, zoskupovanie atď.). V klasickom formáte by sme vytvorili dotaz, ktorý ako parameter prijíma informáciu z tabuľky odovzdanej dotazu.

Žiadosť = Nová požiadavka(
"VYBERTE si
| Tabuľka. Nomenklatúra,
| Stôl.Sklad
|OD
| &TK AS tabuľka");
Request.SetParameter("TZ", TZ);

Ale s SKD nie je všetko také jednoduché. Bohužiaľ, nie je možné vykonať operáciu opísanú vyššie v systéme zostavovania údajov. Systém však implementoval možnosť načítania externých tabuliek hodnôt.

Tu sa oplatí urobiť krátku odbočku a porozprávať sa o množinách údajov. Súbory údajov sú zdroje informácií, z ktorých systém správy údajov prijíma údaje, ktoré neskôr zostavuje do správy. Dátové množiny sú rozdelené do typov, najmä pomocou typu „Query“, v tele ktorého programátor zapíše dotaz do databázy. Typ "Object" sa používa na načítanie údajov z externých objektov. V oboch prípadoch je výstupom určitá množina polí získaných ako výsledok vykonania požiadavky alebo načítania externého objektu. Neskôr je možné s týmito poliami manipulovať na karte „Nastavenia“ spolu s podrobnými nastaveniami štruktúry prehľadu. Na prepojenie rôznych množín poskytuje ACS možnosť indikovať prepojenia medzi množinami údajov na karte s rovnakým názvom. Tieto spojenia sú priamym analógom ľavého spojenia v klasickom dotaze. Malo by sa však vziať do úvahy, že dopyty v žiadnom súbore údajov „nevedia“ o existencii iných súborov údajov v konečnom dôsledku vzťahy medzi súbormi údajov ovplyvnia usporiadanie údajov podľa štruktúry špecifikovanej v „; Nastavenia“.

Rozoberme si problém na príklade. K dispozícii je štandardná zostava: Výkazy miezd pre organizáciu konfigurácie ZiK 8. Je potrebné, aby typy výpočtov v zostave boli zoskupené do určitých skupín. Výpočtové korešpondencie View-Group sú uložené v externej tabuľke hodnôt. Aby sme ho načítali do hlavnej schémy rozloženia údajov, vytvoríme „objekt množiny údajov“ s názvom „Skupiny“ (obrázok 2). Vytvárame spojenie so „súborom údajov dopytu“ - „Časové rozlíšenia“ podľa typu výpočtu (obrázok 3). V „súbore údajov žiadostí“ - „Časové rozlíšenia“ sú informácie pre skupiny, vymažeme všetky záznamy. Následne na záložke „Nastavenia“ môžeme použiť pole „Skupina“, ktorej hodnota je načítaná z externého zdroja údajov (obrázok 4). Vo funkcii generovania reportov dopĺňame načítanie externých dát.

Funkcia GenerateReport(Výsledok = Nedefinované, Dešifrovacie údaje = Nedefinované, OutputInReportForm = Pravda) Export

//získanie alebo vytvorenie požadovanej tabuľky hodnôt „Groups“ a jej zápis do premennej s rovnakým názvom

ExternalData = New Structure();//vytvorte a vyplňte externú dátovú štruktúru
ExternalData.Insert(Groups);

UserPanelValue = TypicalReports.GetUserPanelSettingsValuesofObject(ThisObject);
DefaultSettings = SettingsComposer.GetSettings();
TypicalReports.GetAppliedSetting(ThisObject);
TypicalReports.GenerateTypicalReport(ThisObject, Result, Decrypted Data, OutputToReportForm, ExternalData);
SettingsLinker.LoadSettings(DefaultSetting);
Návratový výsledok;

EndFunction

Ak by sme zostavu vytvárali od začiatku, spúšťací kód generovania zostavy by vyzeral takto:

ExternalDataSets = nová štruktúra;
ExternalDataSets.Insert("Skupiny", Skupiny); //Skupiny - požadovaná tabuľka hodnôt
DataCompositionSchema = GetLayout("MainDataCompositionSchema"); //naše usporiadanie s diagramom toku údajov
Nastavenia = DataCompositionScheme.DefaultSettings;
LayoutLinker = newDataLayoutLayoutLinker;
LayoutLayout = LayoutComposer.Execute(DataLayoutSchema, Settings);
DataCompositionProcessor = newDataCompositionProcessor;
DataCompositionProcessor.Initialize(LayoutLayout, ExternalDataSets);
TabDoc = Nový tabuľkový dokument;
OutputProcessor = Nový OutputProcessorDataCompositionResultInTabularDocument;
OutputProcessor.SetDocument(TabDoc);
OutputProcessor.Output(DataCompositionProcessor);

Čítať 9660 raz

41
Nedávno som vytvoril prehľad s neurčitým počtom stĺpcov. Nechcel som sa vŕtať v kóde, tak som sa rozhodol urobiť to v systéme kontroly prístupu. Nebol s tým problém, výsledok bolo potrebné natiahnuť na ľubovoľné rozloženie (vlastná hlavička +... 27
Aj keď študenti CDS na to narazia prvý alebo druhý deň, malo by to byť v sekcii FAQ. Jednoduchý príklad programového výstupu zostavy v rozložení s použitím predvolených nastavení. //Získajte diagram z... 18
Pri generovaní zostáv v systéme kontroly prístupu sa štandardne rozbalia všetky zoskupenia, niekedy je však potrebné zobraziť zostavu so zbalenými zoskupeniami ihneď po vygenerovaní! Tento kód v module prehľadov vám umožňuje zbaliť... 10
Na tejto karte môžete určiť, aké spojenia sa vytvárajú medzi dvoma alebo viacerými súbormi údajov, podľa akých parametrov a podmienok..png 1. „Zdroj pripojenia“ - označuje prvý súbor údajov, z... 9
Pri vytváraní zostáv sa vyžaduje, aby pre používateľa s obmedzenými právami bola zostava vygenerovaná úplne bez kontroly práv! Najmä ak je nakonfigurované RLS Existuje niekoľko spôsobov, ako to urobiť: 1. Nainštalovať...

Niekedy, aby sa dosiahol určitý výsledok rozloženia, je potrebné vytvoriť prepojenia medzi súbormi údajov v systéme riadenia prístupu. V našom článku sa pokúsime hovoriť o tom, kedy je to potrebné a ako to urobiť.

Schéma rozloženia údajov implementovaná v 1C podporuje tri typy zdrojov údajov (obr. 1)

Zdroje dát

Najzrejmejším a najčastejšie používaným zdrojom údajov vývojármi je Query.

Návrhár dotazov implementovaný vo verzii 8 1C je veľmi pohodlný a vo väčšine prípadov môžete prepojiť niekoľko tabuliek a urobiť potrebné zoskupenia a výbery priamo v ňom.

V zložitých prípadoch, keď je potrebné alebo vhodnejšie použiť spustenie nejakého kódu (napríklad načítanie údajov zo súboru tretej strany) alebo keď nie je možné použiť dotaz, príde na zdroj údajov „Objekt“. záchrana. Ľubovoľný kód vykonávaný v module musí mať na výstupe určitú štruktúru, ku ktorej má prístupový systém prístup.

Tretím zdrojom údajov je „Union“. V skutočnosti možno tento zdroj považovať za jeden z typov komunikácie. Kombinuje (redukuje niekoľko tabuliek do jednej), bez párovania, ale zhodu určitých polí. To znamená, že ak majú dve spájané tabuľky 3 a 4 riadky, výsledný zdroj údajov bude mať 7 riadkov.

Formulácia problému

Ako testovaciu plochu zvolíme základňu UPP, verziu 1.3.92.3, fungujúcu v bežnom aplikačnom režime.

Dostali sme nasledujúcu úlohu: len pomocou systému kontroly prístupu vytvoriť zostavu, ktorá by zobrazila tabuľku nakúpených položiek z dokladu s cenami prevzatými zo súboru zaslaného protistranou.

Takže musíme:

  1. Vezmite tabuľkovú časť dokladu o prijatí;
  2. Nahrajte súbor do zdroja údajov „Object“;
  3. Prepojte tieto dva zdroje pomocou určitého parametra (v našom prípade to bude kód);
  4. Zobrazte výslednú tabuľku.

Proces vykonávania

Poďme si prejsť všetky uvedené kroky:

  • Vytvoríme dotaz na tabuľkovú časť príjmového dokladu (obr. 2)

Obr.2

  • Vytvorte objekt súboru údajov (obr. 3);

Obr.3

Tu je dôležité venovať pozornosť „Názov objektu obsahujúceho dáta“ toto je názov, ktorý budeme musieť zadať v kóde modulu reportu.

  • Prejdeme do modulu výkazov a vytvoríme tam procedúru „Pri zostavovaní výsledku“ (obr. 4);


Obr.4

Nebudeme popisovať postup získavania dát z externého súboru, budeme venovať pozornosť tej časti kódu, ktorá musí byť prítomná v layoute, aby sme mohli získať dáta pre “Data Set 2” (obr. 5).

Obr.5

Dôležité! Pri vytváraní „Object“ v kóde procedúry počas prepojenia musí byť hodnota parametra StandardProcessing False.

Prejdite na kartu „Prepojenia množiny údajov“.

Prepojovacie súpravy

Prejdite na príslušnú kartu diagramu (obr. 6).

Vidíme časť tabuľky, ktorá je veľmi podobná časti tabuľky, ktorá je v návrhárovi dotazov, s niektorými výnimkami. Pre sadu zdrojov komunikácie a sadu cieľov komunikácie nemôžete začiarknuť políčko „Všetky“, ale pridalo sa niekoľko ďalších stĺpcov.

Vo vzťahoch množiny údajov môžete vytvoriť iba vzťah podobný ľavému vonkajšiemu spojeniu konštruktora dotazu.

Pred vytvorením spojenia sa rozhodneme o účele stĺpcov:

  1. Zdroj odkazu je prvý súbor údajov, z ktorého sa prevezmú všetky dostupné hodnoty;
  2. Komunikačný prijímač – súbor údajov, z ktorých sa vyberú hodnoty zodpovedajúce nášmu stavu;
  3. Zdrojový výraz – pole alebo výraz prvého súboru údajov, s ktorým sa uskutoční porovnanie;
  4. Cieľový výraz je pole alebo výraz závislej množiny;
  5. Parameter – ak do tohto poľa zadáte názov parametra, komunikácia s prijímačom bude prebiehať len podľa hodnoty uvedenej v parametri;
  6. Zoznam parametrov – určuje možnosť použitia zoznamu hodnôt ako parametra;
  7. Podmienka spojenia – zadaním výrazu tu pomocou zdrojových polí vytvoríte podmienku, ktorej splnenie bude slúžiť ako signál na nadviazanie spojenia;
  8. Počiatočná hodnota – zobrazuje počiatočnú hodnotu spojenia;
  9. Povinný vzťah – určuje, či sú polia použité v zdroji (nastavené na FALSE) alebo v cieli (nastavené na hodnotu TRUE) povolené a na základe toho pridáva vzťah do rozloženia.

Takto:

  • Zdroj komunikácie bude výsledkom našej požiadavky;
  • Objekt bude pôsobiť ako prijímač;
  • Zdrojový výraz bude „NomenclatureCode“;
  • Výraz prijímača „Nomenklatúra“;
  • Komunikácia bude povinná (obr. 7).

Ak by sme ako podmienku spojenia uviedli názov akejkoľvek nomenklatúry, jej typ reprodukcie alebo niečo iné, mohli by sme získať presnejšiu vzorku pre našu úlohu. Výsledok nášho konania je možné vidieť na obr.8

Obr.8

V súbore s cenami sa nenašla žiadna zhoda pre dva spodné riadky prehľadu.

Niekedy sa stáva, že údaje v prehľade nie je možné získať pomocou dopytu alebo kombinácie dopytov. Na zber údajov musíte použiť niektoré postupy a údaje sa umiestnia do tabuľky hodnôt. Vynára sa otázka – možno tieto údaje použiť v schéme zloženia údajov? Koniec koncov, nástroj SKD je výkonný a pohodlný. Ukazuje sa, že je možné použiť údaje z tabuľky hodnôt ako zdroj údajov pre správu v systéme riadenia prístupu a nie je to vôbec ťažké. Tento článok vám ukáže, ako vytvoriť takýto prehľad pre bežné formuláre.
Ako teda vytvoríte prehľad ACS pomocou údajov z tabuľky hodnôt? Najprv veci.
Najprv otvorte konfigurátor a vytvorte nový externý report.

Otvorte objektový modul a vytvorte preddefinovanú procedúru pri zostavovaní výsledku (DocumentResult, Decryption Data, StandardProcessing)

V rámci tohto postupu zhromaždíme údaje a vygenerujeme správu.
V procedúre Pri zostavovaní výsledku zakážeme štandardné spracovanie. StandardProcessing = False;
Potom vytvoríme tabuľku hodnôt ľubovoľným spôsobom. Názvy stĺpcov tabuľky hodnôt sa musia zhodovať s budúcimi poliami množiny údajov v ACS:


Pridajme napríklad tri riadky údajov. Ďalej krok za krokom vytvoríme výstup zostavy.

  • Z diagramu získame predvolené nastavenia.

  • Dešifrovacie údaje posielame do príslušnej premennej.

  • Rozloženie vytvoríme pomocou nástroja na tvorbu rozloženia.

  • Diagram, nastavenia a dekódovacie údaje prenášame do rozloženia.

  • Rozloženie vykonávame pomocou procesora rozloženia. Ak to chcete urobiť, spustite metódu Initialize() procesora kompozície údajov. Ako parametre odovzdávame rozloženie zloženia dát, externé množiny dát (typ: Štruktúra, kľúč štruktúry sa musí zhodovať s názvom objektu v schéme zloženia dát, hodnota je vygenerovaná tabuľka hodnôt), dešifrovanie dát.

  • Vyčistite pole dokumentu tabuľky.

  • Výsledok zobrazíme v tabuľkovom dokumente.
Výsledkom je nasledujúci kód:
DataLayoutSchema = GetLayout( "MainDataCompositionSchema"); //Nastavenia = DataCompositionScheme.DefaultSettings; // - Ak to urobíte ako je uvedené vyššie (odporúčané pre niektoré zdroje), potom keď zmeníte nastavenia v klientskom režime // neuvidíte tieto zmeny, pretože nastavenia budú vždy predvolené. Ako to urobiť správne - možnosť nižšie Nastavenia = NastaveniaSkladateľ. GetSettings(); DecryptionData = newDataCompositionDecryptionData; LayoutLinker = newDataLayoutLayoutLinker; LayoutLayout = LayoutLocker. Execute(DataCompositionScheme, Settings, DecryptionData); ExternalDataSet = Nová štruktúra( "Príklad tabuľky hodnôt", TZOvýstup); DataCompositionProcessor = newDataCompositionProcessor; DataCompositionProcessor. Initialize(LayoutLayout, ExternalDataSet, DecryptionData); DocumentResult. Jasný();

OutputProcessor = Nový OutputProcessorDataCompositionResultInTabularDocument; Výstupný procesor. SetDocument(DocumentResult); Výstupný procesor. Výstup(DataCompositionProcessor); Pridanie rozloženia diagramu rozloženia. Názov môžeme ponechať ako predvolený.

Vytvárame súbor údajov. Ak to chcete urobiť, pridajte novú množinu údajov typu Objekt. Do poľa Name objektu obsahujúceho dáta umiestnime názov, ktorý sme zadali ako kľúč pri vytváraní štruktúry External DataSet. Potom pridáme polia. Názvy sa musia presne zhodovať s názvami stĺpcov v tabuľke hodnôt. Ďalej môžeme špecifikovať prijateľné hodnoty, formáty atď.

V prípade potreby pridajte zdroje. Na základe nich sa vypočítajú výsledky. V našom prípade sú to polia Množstvo a Množstvo.

Na karte Nastavenia pomocou návrhára nastavení vytvoríme predvolenú možnosť zostavy


Ukladáme náš prehľad. Spustíme ho v klientovi a vytvoríme. Príklad spustenia zostavy ACS pomocou údajov z tabuľky hodnôt je znázornený na obrázku.

To je všetko. Dosť jednoduché, však?

Výsledný príklad správy si môžete stiahnuť
Ahoj!

Dnes vám chcem opísať tému, ktorej bez potápačskej výbavy nerozumiete :) ;)

Potápanie znamená, že ponor je dosť hlboký. V literatúre je na túto tému málo odkazov a nebudete ju schopní pochopiť, kým nedostanete nutkanie. K takejto akcii nebude ani správa;) Mimochodom, dokumentácia o tom hovorí veľmi slabo a nekonzistentne, musíte sa obrátiť na literatúru tretích strán;

Napríklad veľmi odporúčam „Vývoj komplexných správ v 1C: Enterprise 8.2“. Data Composition System", (konkrétnejšie pozri strany 224, 267 a 473)


V ACS existujú 2 typy dátových zdrojov: Query, object a union (táto vec sa neráta, nie je to zdroj dát, ale procesor existujúcich dát). Pozri obrázok 1:

Najprv popíšem, čo chceme získať ako výstup:

Nahlásiť, používateľ klikol na „ Formulár» a zobrazil sa zoznam položiek (pozri obr. 2):

Áno, urobil som jednu nepresnosť, konkrétne: nie je tam žiadne tlačidlo “ Formulár", ale je tam tlačidlo " nová akcia"(Trošku neskôr vysvetlím, prečo sa to stalo;)

Áno áno! Ďalší bod: celý tento zoznam je odvodený zo súboru údajov „Object“:

Riešenie:

  1. Vytvorte externý prehľad;
  2. Pridajte rozloženie ACS, nazvime to „Schéma rozloženia hlavných údajov“;
  3. Pridáme k nemu dátový súbor „Object“, priradíme mu názov „Nomenclature List“ (malo by byť rovnaké ako na obr. 3);
  4. S nastaveniami prehľadu príliš neexperimentujeme, nech je všetko jednoduché (pozri obr. 4)

Ok, polovica práce ;)

Teraz vygenerujme hlavný formulár správy (áno, ešte jedna vec! Moja konfigurácia funguje na bežnom rozhraní, ale myslím, že riešenie nájdete na spravovaných formulároch;) Takže formulár:

Tu nastáva problém! Ak klikneme na tlačidlo „generovať“ (obr. 5.), zobrazí sa nám chyba!


Tento článok som venoval riešeniu tohto problému!

Udalosť tlačidla „Generovať“ nebolo možné zachytiť, tak som sa rozhodol použiť barlu. Spustil som konfiguráciu v režime ladenia a pokúsil som sa nájsť tlačidlo „generovať“.

Do formulára som vložil postup „Generovať“, ale nie sú v ňom žiadne záznamy, pred otvorením formulára som musel predefinovať akciu tlačidla „formulár“:


Na obr. Okrem zmeny akcie formulára je na obrázku 8 znázornený príklad požiadavky, jej spracovanie a prenos vygenerovaných údajov do systému kontroly prístupu. Preštudujme si to pozornejšie:

  1. Generujeme vstupné údaje pre systém kontroly prístupu;
  2. Inicializujeme systém kontroly prístupu;
  3. Výsledok zobrazujeme NA FORMULÁRI (pozor aj na to!).

Pripomeňme si interakčný diagram objektov systému zloženia údajov:

Schéma rozloženia údajov v externej zostave je k dispozícii ako globálny objekt v metóde formulára Schéma zloženia údajov. Môžete k nemu pristupovať aj podľa názvu tak, že ho odovzdáte metóde GetLayout(pozri obr. 8)

Hlavná časť kódu je uvedená nižšie:

Žiadosť = Nová požiadavka; Query.Text = "SELECT | Nomenclature.Name as Nomenclature |FROM | Directory.Nomenclature AS Nomenclature"; NomenclatureList = Request.Run().Upload(); DataSets = New Structure("NomenclatureList", NomenclatureList); //SKD = ​​​​GetLayout("MainData LayoutScheme"); SKD = ​​​​DataCompositionScheme; LayoutComp = nový DataLayoutComposer; layoutComp = LayoutComp.Execute(SKD, SKD.DefaultSettings); CompDataProcessor = nový DataCompositionProcessor; ProcessorCompData.Initialize(layoutComp, DataSets); output = new DataCompositionResultOutputProcessorInTabularDocument; output.SetDocument(FormElements.Result); output.Output(ProcessorCompData, true);

Áno! Tu je ďalší pekný moment!!!

V tomto príklade, ako vidíte (pozri obr. 2), sa výstup vykonáva vo formulári a nie v tabuľke. dokument! A to je veľmi dobré, pretože môžeme pracovať s formulárom (programovo zachytávať udalosti prvku formulára, robiť rôzne triky s drag and drop atď.;)

V tabuľkovom dokumente môžeme jednoducho zobraziť spracované údaje na obrazovke a preniesť kontrolu nad dokumentom na používateľa a nemôžeme žiadnym spôsobom ovplyvniť ďalší proces úpravy tohto obsahu!

Pozrite si systém pomoci " Pole dokumentu tabuľky “ a uvediem len výňatok zo vstavanej dokumentácie systému 1c Enterprise 8.2:

„Pole dokumentu tabuľky je dokument tabuľky umiestnený vo formulári. Spolu s rôznymi možnosťami návrhu tabuľkového dokumentu vám to umožňuje organizovať spracovanie udalostí, ktoré sa vyskytnú pri výbere buniek, obrázkov, ako aj iných ovládacích prvkov umiestnených v poli tabuľkového dokumentu.

Dobre, ako sa hovorí, veľa šťastia v boji;)

Publikácie na danú tému