1s 8.3 SCD hlási vypočítané polia. Užitočné príklady vytvorenia diagramu zloženia údajov. Zvyšok divízie

  • 1C-Bitrix
  • Jednou z najdôležitejších oblastí podnikového softvéru je reporting. Osud firmy môže závisieť (a nie v prenesenom zmysle!) od toho, aké ľahké je prispôsobiť existujúcu správu meniacim sa potrebám podnikania (a legislatívy) alebo vytvoriť novú, či už ide o správu pre daňový úrad. alebo diagram závislosti dopytu po tovare od sezóny a iných faktorov . Výkonný a flexibilný systém podávania správ, ktorý uľahčuje extrahovanie potrebných údajov zo systému, ich prezentáciu v zrozumiteľnej forme, čo umožňuje koncovému používateľovi prekonfigurovať štandardnú zostavu, aby videl údaje v novom svetle – to je ideálne, obchodný systém by sa mal snažiť.

    V platforme 1C:Enterprise je za generovanie správ zodpovedný mechanizmus nazývaný „Data Composition System“ (skrátene DCS). V tomto článku sa pokúsime dať Stručný opis myšlienky a architektúra mechanizmu ACS a jeho schopnosti.


    ACS je mechanizmus založený na deklaratívnom popise správ. ACS je určený na vytváranie správ a na zobrazovanie informácií, ktoré majú komplexná štruktúra. Mimochodom, okrem vývoja zostáv sa mechanizmus ACS používa aj v 1C:Enterprise v dynamickom zozname, nástroji na zobrazovanie informácií o zozname s bohatou funkčnosťou (zobrazenie plochých a hierarchických zoznamov, podmienený návrh riadkov, zoskupení atď.). ).

    Trochu histórie

    V úplne prvej verzii platformy 1C:Enterprise 8, verzia 8.0, boli správy vytvorené takto:
    1. Jeden alebo viacero dotazov bolo napísaných v dotazovacom jazyku 1C (jazyk podobný SQL, viac o ňom nižšie).
    2. Bol napísaný kód, ktorý prenášal výsledky vykonaných dotazov do tabuľkového dokumentu alebo grafu. Kód mohol tiež vykonávať prácu, ktorá sa nedala vykonať v dotaze - napríklad vypočítal hodnoty pomocou vstavaného jazyka 1C.
    Prístup je jednoduchý, ale nie najpohodlnejší - vizuálne nastavenia sú minimálne, všetko treba naprogramovať „z ruky do ruky“. A jedným z tromfov v tom čase úplne novej platformy „1C:Enterprise 8“ bola minimalizácia množstva kódu, ktorý bolo potrebné písať ručne, najmä prostredníctvom vizuálneho dizajnu, v aplikačnom riešení. Bolo by logické postupovať rovnakou cestou v mechanizme podávania správ. Dosiahlo sa to vyvinutím nového mechanizmu – systému skladania údajov.

    Jednou z myšlienok, ktoré tvorili základ systému kontroly prístupu, bola flexibilita a prispôsobenie reportov, ktoré boli dostupné pre vývojárov aj koncových používateľov. V ideálnom prípade by som chcel poskytnúť koncovému používateľovi prístup k rovnakej sade nástrojov na návrh zostáv ako vývojár. Bolo by logické vytvoriť jednotný súbor nástrojov dostupných pre každého. Keďže nástroje vyžadujú účasť koncového používateľa, znamená to, že používanie programovania v nich by sa malo obmedziť na minimum (najlepšie ho úplne vylúčiť) a maximálne využiť vizuálne nastavenia.

    Formulácia problému

    Úlohou vývojového tímu bolo vytvoriť reportovací systém založený nie na algoritme (t.j. prostredníctvom písania kódu), ale na deklaratívnom prístupe k tvorbe reportov. A veríme, že problém je úspešne vyriešený. Podľa našich skúseností možno asi 80 % požadovaných reportov implementovať pomocou ACS bez jediného riadku kódu (okrem písania vzorcov pre vypočítané polia), väčšinou prostredníctvom vizuálnych nastavení.
    Vývoj prvej verzie KBÚ trval približne 5 osoborokov.

    Dva jazyky

    Pri vytváraní prehľadov sa používajú dva jazyky. Jedným z nich je dopytovací jazyk používaný na získavanie údajov. Druhým je jazyk výrazov kompozície údajov, určený na písanie výrazov používaných v rôznych častiach systému, napríklad v nastaveniach kompozície údajov, na popis výrazov používateľských polí.

    Jazyk dopytu

    Dopytovací jazyk je založený na SQL a pre znalcov SQL sa dá ľahko naučiť. Príklad žiadosti:

    Je ľahké vidieť analógy sekcií štandardných pre SQL dotazy - SELECT, FROM, GROUP BY, ORDER BY.

    Dotazovací jazyk zároveň obsahuje značné množstvo rozšírení zameraných na reflektovanie špecifík finančných a ekonomických problémov a na maximalizáciu zníženia úsilia pri vývoji aplikačných riešení:

    • Prístup k poliam pomocou bodky. Ak sú polia tabuľky referenčného typu (ukladajú odkazy na objekty inej tabuľky), vývojár na ne môže odkazovať v texte požiadavky cez „.“ a systém neobmedzuje počet úrovní vnorenia. takýchto odkazov (napríklad Objednávka zákazníka. Dohoda. Organizácia. Telefón).
    • Viacrozmerné a viacúrovňové formovanie výsledkov. Súčty a medzisúčty sa tvoria s prihliadnutím na zoskupenie a hierarchiu, úrovne možno prechádzať v ľubovoľnom poradí so sčítavaním a je zabezpečená správna konštrukcia súčtov podľa časových dimenzií.
    • Podpora virtuálnych tabuliek. Virtuálne tabuľky poskytované systémom umožňujú získať takmer hotové dáta pre väčšinu úloh aplikácie bez potreby vytvárania zložitých dotazov. Virtuálna tabuľka teda môže poskytnúť údaje o zostatkoch produktov podľa období v určitom časovom bode. Virtuálne tabuľky zároveň maximálne využívajú uložené informácie, napríklad predtým vypočítané súčty atď.
    • Dočasné tabuľky. Jazyk dotazu vám umožňuje používať dočasné tabuľky v dotazoch. S ich pomocou môžete zlepšiť výkon dotazu, v niektorých prípadoch znížiť počet blokovaní a uľahčiť čítanie textu dotazu.
    • Dávkové požiadavky. Aby bola práca s dočasnými tabuľkami pohodlnejšia, dotazovací jazyk podporuje prácu s dávkovými dotazmi – teda vytvorenie dočasnej tabuľky a jej použitie sú umiestnené v jednom dotaze. Dávková požiadavka je postupnosť požiadaviek oddelených bodkočiarkou (";"). Požiadavky v dávke sa vykonávajú jedna po druhej. Výsledkom vykonania dávkovej požiadavky bude v závislosti od použitej metódy buď výsledok vrátený poslednou požiadavkou v dávke, alebo pole výsledkov zo všetkých dopytov v dávke v poradí, v akom nasledujú dopyty v dávke. .
    • Získavanie reprezentácií referenčných polí. Každá tabuľka objektov (v ktorej je uložená referenčná kniha alebo dokument) má virtuálne pole - „Zobraziť“. Toto pole obsahuje textovú reprezentáciu objektu a uľahčuje tvorcovi zostavy prácu. V prípade dokladu teda toto pole obsahuje všetky kľúčové informácie – názov typu dokladu, jeho číslo a dátum (napríklad „Predaj 000000003 od 07.06.2017 17:49:14“), čím sa vývojár ukladá z písanie vypočítaného poľa.
    • atď.
    Mechanizmus požiadavky automaticky upravuje požiadavku s prihliadnutím na roly, ku ktorým patrí používateľ, v mene ktorého sa požiadavka vykonáva (t. j. používateľ uvidí iba údaje, ktoré má právo vidieť) a funkčné možnosti (t. j. v súlade s s tými, ktoré sú nakonfigurované vo funkcionalite riešenia aplikácie).

    Existujú aj špeciálne rozšírenia dopytovacieho jazyka pre systémy riadenia prístupu. Rozšírenie sa vykonáva pomocou špeciálnych syntaktických inštrukcií uzavretých v zložených zátvorkách a umiestnených priamo v tele požiadavky. Pomocou rozšírení vývojár určuje, aké operácie bude môcť koncový používateľ vykonávať pri prispôsobovaní zostavy.

    Napríklad:

    • VYBERTE SI. Táto veta popisuje polia, ktoré bude môcť používateľ vybrať na výstup. Po tomto kľúčovom slove sú uvedené aliasy polí z hlavného výberového zoznamu dotazov, ktoré budú dostupné na konfiguráciu, oddelené čiarkami. Príklad: (VYBRAŤ položku, sklad)
    • KDE. Sú popísané polia, na ktoré môže používateľ použiť výber. Tento návrh používa polia tabuľky. Použitie aliasov polí zoznamu výberu nie je povolené. Každá časť zväzku môže obsahovať svoj vlastný prvok WHERE. Príklady: (WHERE Item.*, Warehouse), (WHERE Document.Date >= &StartDate, Document.Date<= &ДатаКонца}
    • atď.
    Príklad použitia rozšírení:

    Data Composition Expression Language

    Data Composition Expression Language je určený na písanie výrazov používaných najmä na opis výrazov vlastných polí. SKD vám umožňuje definovať vlastné polia v zostave pomocou vlastných výrazov alebo množín možností s podmienkami pre ich výber (podobne ako CASE v SQL). Vlastné polia sú podobné ako vypočítavané polia. Dajú sa nastaviť v konfigurátore aj v režime 1C:Enterprise, ale funkcie bežných modulov nemožno použiť vo výrazoch vlastných polí. Preto sú vlastné polia určené skôr pre používateľa ako pre vývojára.

    Príklad:

    Proces vytvárania správy o systéme kontroly prístupu

    Pri vytváraní prehľadu musíme vytvoriť rozloženie, ktoré definuje, ako sa budú údaje v prehľade zobrazovať. Rozloženie môžete vytvoriť na základe diagramu rozloženia údajov. Diagram rozloženia údajov popisuje podstatu údajov, ktoré sa poskytujú do zostavy (odkiaľ získať údaje a ako môžete ovládať ich rozloženie). Schéma zloženia údajov je základom, na ktorom je možné generovať všetky druhy správ. Schéma zloženia údajov môže obsahovať:
    • vyžiadaný text s pokynmi pre systém zostavovania údajov;
    • popis viacerých súborov údajov;
    • podrobný popis dostupných polí;
    • popis vzťahov medzi viacerými súbormi údajov;
    • popis parametrov získavania údajov;
    • popis usporiadania polí a zoskupení;
    • atď.

    Môžete napríklad pridať dotaz do schémy zloženia údajov ako množinu údajov a zavolať konštruktor dotazu, ktorý vám umožní graficky vytvoriť dotaz ľubovoľnej zložitosti:

    Výsledkom spustenia návrhára dotazov bude text dotazu (v dotazovacom jazyku 1C:Enterprise). Tento text je možné v prípade potreby upraviť ručne:

    V schéme usporiadania údajov môže byť niekoľko množín údajov, množiny údajov môžu byť v rozložení ľubovoľným spôsobom prepojené, môžu sa pridávať vypočítané polia, špecifikovať parametre zostavy atď. Za zmienku stojí zaujímavá funkcia mechanizmu dotazov v 1C:Enterprise. Dotazy sú nakoniec preložené do dialektu SQL špecifického pre DBMS, s ktorým aplikácia priamo pracuje. Vo všeobecnosti sa snažíme využívať možnosti DBMS serverov na maximum (obmedzuje nás fakt, že využívame len tie možnosti, ktoré sú súčasne dostupné vo všetkých DBMS podporovaných platformou 1C:Enterprise - MS SQL, Oracle, IBM DB2 , PostgreSQL). Na úrovni dotazu vo vypočítavaných poliach teda môžeme použiť len tie funkcie, ktoré sú preložené do SQL.

    Ale na úrovni schémy zloženia údajov už môžeme pridávať vlastné polia a používať v nich funkcie v zabudovanom vývojovom jazyku 1C (vrátane tých nami napísaných), čo značne rozširuje možnosti zostáv. Technicky to vyzerá takto - všetko, čo sa dá preložiť do SQL, sa preloží do SQL, dotaz sa vykoná na úrovni DBMS, výsledky dotazu sa uložia do pamäte aplikačného servera 1C a SKD vypočíta pre každý záznam hodnoty ​​výpočtových polí, ktorých vzorce sú napísané v jazyku 1C.


    Pridanie vlastných polí

    Do zostavy môžete pridať ľubovoľný počet tabuliek a grafov:


    Návrhár správ


    Prehľad spustenia

    Pomocou SKD môže používateľ do zostavy pridávať komplexné výbery (ktoré budú pridané do požiadavky na správnych miestach), podmienený dizajn (umožňujúci rôzne formátovanie zobrazených polí - písmom, farbou atď. v závislosti od ich hodnôt). ) a oveľa viac..

    Proces vytvárania a generovania správy možno stručne opísať takto:

    • Vývojár v čase návrhu s pomocou dizajnéra (alebo v režime runtime pomocou kódu) určuje schému rozloženia údajov:
      • Text žiadosti/žiadostí
      • Popis vypočítaných polí
      • Vzťahy medzi žiadosťami (ak ich existuje niekoľko)
      • Možnosti prehľadu
      • Predvolené nastavenia
      • Atď.
    • Vyššie uvedené nastavenia sú uložené v rozložení
    • Používateľ otvorí prehľad
      • Možno vykoná ďalšie nastavenia (napríklad zmení hodnoty parametrov)
      • Kliknite na tlačidlo „Generovať“.
    • Používateľské nastavenia sa aplikujú na schému zloženia údajov definovanú vývojárom.
    • Vytvorí sa prechodné usporiadanie údajov, ktoré obsahuje pokyny, odkiaľ sa majú údaje prijímať. Upravujú sa najmä dotazy uvedené v rozložení. Polia, ktoré nie sú použité v zostave, sú teda z požiadavky odstránené (to sa robí s cieľom minimalizovať množstvo prijatých údajov). Všetky polia, ktoré sa zúčastňujú vzorcov vypočítaných polí, sa pridajú do dotazu.
    • Do hry vstupuje procesor skladania údajov. Procesor rozloženia vykonáva dotazy, spája súbory údajov, vypočítava hodnoty pre vypočítané polia a zdroje a vykonáva zoskupovanie. Jedným slovom robí všetky výpočty, ktoré neboli vykonané na úrovni DBMS.
    • Procesor výstupu údajov spustí požiadavku na vykonanie a zobrazí prijaté údaje v tabuľkovom dokumente, grafe atď.


    Proces generovania správy pomocou mechanizmu ACS

    Snažíme sa minimalizovať množstvo dát reportov prenášaných zo servera do klientskej aplikácie. Pri zobrazovaní údajov v tabuľkovom dokumente pri otvorení tabuľkového dokumentu prenášame zo servera len tie riadky, ktoré používateľ vidí na začiatku dokumentu. Keď sa používateľ pohybuje pozdĺž riadkov dokumentu, chýbajúce údaje sa stiahnu zo servera do klienta.

    Vlastné nastavenia

    Všetky nástroje ACS sú dostupné pre vývojárov aj koncových používateľov. Prax však ukázala, že koncový používateľ je často vystrašený množstvom možností nástroja. Navyše vo väčšine prípadov koncový používateľ nepotrebuje všetky možnosti nastavení - stačí mu rýchly prístup k nastaveniu jedného alebo dvoch parametrov prehľadu (napríklad obdobie a protistrana). Od určitej verzie platformy má vývojár zostavy možnosť označiť, ktoré nastavenia zostavy sú dostupné používateľovi. To sa vykonáva pomocou začiarkavacieho políčka „Zahrnúť do používateľských nastavení“. Nastavenia prehľadu majú teraz príznak „Režim zobrazenia“, ktorý má jednu z troch hodnôt:
    • Rýchly prístup. Nastavenie sa zobrazí priamo v hornej časti okna prehľadu.
    • Obyčajný. Nastavenie bude dostupné cez tlačidlo „Nastavenia“.
    • Nie je k dispozícií. Toto nastavenie nebude dostupné pre koncového používateľa.


    Nastavenie režimu zobrazenia v čase návrhu


    Zobrazte nastavenie v režime rýchleho prístupu za behu (pod tlačidlom Generovať)

    Rozvojové plány

    Jednou z našich prioritných oblastí pri vývoji systémov kontroly prístupu je zjednodušenie používateľských nastavení. Naše skúsenosti ukazujú, že pre niektorých koncových používateľov je práca s používateľskými nastaveniami stále veľkým záväzkom. Berieme to do úvahy a pracujeme týmto smerom. V súlade s tým bude tiež pre vývojárov jednoduchšie pracovať so systémami kontroly prístupu, pretože Rovnako ako predtým chceme poskytnúť jediný nástroj na nastavenie prehľadov pre vývojárov aj koncových používateľov.

    Diagram rozloženia údajov (1C SKD)- pohodlný dizajnér na vytváranie komplexných správ v softvérových produktoch 1C:Enterprise, ktoré prispievajú k vývoju a sledovaniu automatizácie výroby, čo im umožňuje, aby boli čo najflexibilnejšie a najkrajšie v minimálnom čase. Ďalšou výhodou Data Composition Scheme (1C SKD) je automatické generovanie riadeného formulára reportu a s ďalším rozvojom tejto oblasti je dôležitým faktorom pri výbere spôsobu tvorby reportu. Ale kvôli zložitosti štruktúry Data Composition Scheme (1C SKD) a obrovskému množstvu nastavení to často vedie k dlhšiemu vývoju reportu ako cez “výstupného formulára dizajnéra”. Preto musí programátor 1C pochopiť všetky zložitosti schémy zloženia údajov (1C DCS), aby sa ešte viac urýchlil čas vývoja na generovanie správ.

    Pozrime sa na prvé tri záložky schémy skladania údajov (1C SKD) – množina údajov, pripojenia množiny údajov a vypočítané polia.

    Dáta sú v 1C SKD

    Súbor údajov obsahuje možnosť vytvoriť tri objekty – dotaz, objekt a spojenie, pozrime sa na každý z nich bližšie:

    Toto je bežný dotaz, ktorý sa generuje pomocou tlačidla Query Builder. Ak je nastavený príznak Automatické dopĺňanie, všetky vybrané podrobnosti sa automaticky zahrnú do polí množiny údajov. Taktiež je možné prispôsobiť vyplnenie polí v požiadavke na záložke Zloženie údajov, kde sú tri záložky:

    Tabuľky, tu sa vyberajú tabuľky, ktoré sa budú podieľať na generovaní zostavy, väčšinou sa vyberú predvolené údaje, keďže na záložke Tabuľky a polia už máme vybraté doklady, adresáre, registre, ktoré potrebujeme...

    Polia, tu vyberáme tie objekty, ktoré majú byť zahrnuté do zostavy, príznak deti označuje, či budú pre objekt prístupné podradené prvky alebo nie, je logické, že pre reťazcové, číselné a podobné údaje nebude možné nastaviť vlajka na True.

    Podmienky, tu vyberáme tie objekty, ktoré je možné použiť za podmienok v systéme kontroly prístupu.

    Časť práce sa vykonáva v schéme zloženia údajov a časť sa vykonáva programovo; pozrime sa na jednoduchý príklad:

    Najprv si vytvoríme layout diagram pre dátové rozloženie dokumentu a nazveme ho SKD (napríklad: 1C SKD), v ňom vytvoríme objekt množiny dát, následne vyplníme polia, napríklad máme dokument s tabuľkovou časťou tovaru s podrobnosťami - nomenklatúra, množstvo a cena.

    Pridajme tri polia a do každého stĺpca vyplňte názov podrobností, zvyšné stĺpce sa vyplnia automaticky:

    Vytvorme tlačidlo na formulári dokumentu a popíšeme mechanizmus fungovania v riadených formulároch:

    &OnClient

    Tlač postupu()

    OurReport = PrintOnServer(); //zavolajte funkciu na serveri

    OurReport.Show(); //zobrazenie vygenerovanej zostavy

    Koniec procedúry

    &Na serveri

    Funkcia PrintOnServer()

    DocumentObject = FormAttributeValue(“Object”);

    //tabuľkovú časť Produkty umiestnime do štruktúry s názvom ProduktySKD rovnakým spôsobom, ako sme uviedli v samotnom SKD názov objektu obsahujúceho údaje

    DataSet = nová štruktúra;

    DataSet.Insert(“ProductsSKD”, DocumentObject.Products);

    //získame naše rozloženie a nastavíme predvolené nastavenia tak, aby sa všetky nastavenia výstupu zostavy prevzali z nášho rozloženia

    OurLayout = DocumentObject.GetLayout(“SKD”);

    Nastavenia = OurLayout.DefaultSettings;

    //vytvorte rozloženie údajov pomocou našich nastavení

    LayoutLinker = newDataLayoutLayoutLinker;

    LayoutLayout = LayoutComposer.Execute(OurLayout, Settings);

    //vykonať kompozíciu údajov pomocou nášho súboru údajov

    DataCompositionProcessor = newDataCompositionProcessor;

    DataCompositionProcessor.Initialize(LayoutLayout, DataSet);

    //Vytvoríme tabuľkový dokument a zobrazíme v ňom našu zostavu

    ReportDocument = Nový tabuľkový dokument;

    OutputProcessor = Nový OutputProcessorDataCompositionResultInTabularDocument;

    OutputProcessor.SetDocument(ReportDocument);

    OutputProcessor.Output(DataCompositionProcessor);

    Správa o vrátení dokumentov;

    EndFunction

    Ak chcete, môžete získať oblasti akéhokoľvek iného rozloženia a zobraziť ich aj v tomto prehľade, napríklad na generovanie platobného príkazu máme štandardné rozloženie a hlavička je v ňom veľmi dobre vytvorená, aby sa nerobilo zbytočná práca, najprv získame rozloženie, zobrazíme hlavičku, potom vygenerujeme a zobrazíme našu správu o systéme kontroly prístupu.

    O zjednotenie

    Môžeme do nej umiestňovať naše dopyty a objekty, ale na rozdiel od spojenia jednoducho pridáva tabuľky k sebe, to znamená, že ak spojíme dve rovnaké tabuľky, skončíme pri jednej a po spojení sa zdvojnásobí, pozrime sa na jednoduchom príklade:

    Máme tabuľky:

    Po komunikácii dostaneme:

    A keď sa skombinuje:

    Pozrime sa teraz na vypĺňanie stĺpcov v množinách údajov (niektoré preskočíme, pretože súvisia s inými kartami; vrátime sa k nim v budúcich článkoch):

    - lúka, uveďte všeobecný názov atribútu;

    ­­- cesta, uveďte názov údajov, pomocou ktorých ju budeme kontaktovať v systéme kontroly prístupu, napríklad v Vypočítané polia;

    - titul, uveďte názov atribútu, ktorý sa zobrazí v prehľade;

    - obmedzenie poľa, uveďte dostupnosť tejto požiadavky;

    - obmedzenie detailov, označujeme dostupnosť podradených prvkov, je dôležité, že ak je uvedená dostupnosť podrobností, potom bude k dispozícii samotné pole, možno sa táto mechanika v budúcich vydaniach zmení;

    - výraz, pomocou ktorého sa vypočíta reprezentácia poľa, je vhodné použiť, keď potrebujeme trochu zmeniť výstup detailov, napríklad potrebujeme za menom nomenklatúry bola zobrazená zásob, kde sa nachádza, potom vyplňte: Tovar + “je na sklade” + Sklad. Opakujem, že prístup k podrobnostiam sa vykonáva prostredníctvom mena uvedeného v stĺpci cesta;

    - zoradenie výrazov, pohodlný mechanizmus na nastavenie radenia zostáv, kde sa dá podmienka nastaviť ručne, podobne ako v predchádzajúcom bode, no ako ukazuje prax, tento mechanizmus často nefunguje tak, ako by sme chceli, a radím vám použiť štandardné triedenie;

    - typ hodnoty, označuje typ hodnoty atribútu, toto je potrebné vyplniť, ak používate nasledujúce pole;

    - dostupné hodnoty, funguje len pri naplnení typ hodnoty, otvorte formulár a v stĺpci Význam označujeme prvok, ktorý je potrebné zmeniť, podľa typu to môžu byť preddefinované objekty alebo číselné, napríklad detaily majú jednoduché hodnoty, v prezentácia Uvádzame, čo musíme zmeniť, napríklad booleovský typ:

    - dekor– štandardné nastavenia formátu poľa, podobné nastaveniam v spravovaných formulároch, umožňujú presnejšie a krajšie prispôsobiť výstup určitých detailov.

    Pripojenie dátového súboru v 1C SKD

    Tu je iba nainštalovaný ľavé pripojenie, na podobnom princípe ako spojenia v žiadostiach, v zdroj komunikácie zadajte hlavnú tabuľku pre pripojenie, v prijímač dodatočné. IN zdroj výrazu A prijímač výrazov Uvádzame podrobnosti, podľa ktorých bude komunikácia prebiehať. Na zvyšné stĺpce sa pozrieme podrobnejšie, keď sa pozrieme na kartu. možnosti. Ak nie je k dispozícii žiadne dodatočné spojenie s parametrami, odporúča sa vykonať spojenie v požiadavke, urýchli sa tým report.

    Vo svetle nadchádzajúceho vydania 8.2.14 sa pokúsim popísať niektoré nové funkcie systému skladania údajov.

    Otvorte diagram rozloženia údajov, najlepšie v externej správe, aby ste uľahčili úpravy.

    Pridáme množinu údajov typu dotazu a napíšeme, buď manuálne alebo pomocou návrhára dotazov, jednoduchý dotaz:

    1. Nastavte požiadavku v systéme kontroly prístupu.

    2. Nastavte vypočítané polia v systéme riadenia prístupu

    3. Na karte nastavení nakonfigurujte rozloženie údajov

    4. Spustite 1C Enterprise 8.2.14. Otvorte prehľad. Tvoríme, prijímame.

    Popis samotných nových funkcií:

    1. Aktuálny dátum ()

    Vráti systémový dátum. Pri vytváraní rozloženia rozloženia sa vo všetkých výrazoch, ktoré sa nachádzajú v rozložení, funkcia CurrentDate() nahradí hodnotou aktuálneho dátumu.

    2. COMPUTEEXPRESSION()

    Syntax:

    CalculateExpression(<Выражение>, <Группировка>, <ОбластьВычисления>, <Начало>, <Конец>, <Сортировка>, <ИерархическаяСортировка>, <ОбработкаОдинаковыхЗначенийПорядка>)

    Popis:

    Funkcia je určená na vyhodnotenie výrazu v kontexte nejakého zoskupenia.

    Funkcia berie do úvahy výber zoskupení, ale nezohľadňuje hierarchické výbery.

    Funkciu nemožno použiť na zoskupenie vo výbere skupiny tohto zoskupenia. Napríklad pri výbere skupiny Nomenklatúra nemôžete použiť výraz CalculateExpression("Sum(SumTurnover)", "TotalTotal") > 1000. Ale takýto výraz možno použiť v hierarchickom výbere.

    Ak koncový záznam predchádza počiatočnému záznamu, potom sa má za to, že neexistujú žiadne záznamy na výpočet podrobných údajov a výpočet súhrnných funkcií.

    Pri výpočte intervalových výrazov pre celkový súčet (parameter Grouping je nastavený na GrandTotal) sa predpokladá, že neexistujú žiadne záznamy na výpočet podrobných údajov a výpočet agregovaných funkcií.

    Pri generovaní výrazu pre funkciu CalculateExpression nahradí zostavovateľ rozloženia, ak výraz usporiadania obsahuje polia, ktoré nemožno použiť pri zoskupovaní, funkciu CalculateExpression hodnotou NULL.

    možnosti

    <Выражение>

    Typ: Reťazec. Výraz, ktorý sa má vyhodnotiť.

    <Группировка>

    Typ: Reťazec. Obsahuje názov zoskupenia, v kontexte ktorého sa má výraz vyhodnotiť. Ak sa ako názov zoskupenia použije prázdny reťazec, výpočet sa vykoná v kontexte aktuálneho zoskupenia. Ak sa ako názov skupiny použije reťazec GrandTotal, výpočet sa vykoná v kontexte celkového súčtu. V opačnom prípade sa výpočet vykoná v kontexte nadradenej skupiny s rovnakým názvom.

    Napríklad:

    Súčet(Predaj.SúčetTurnover)/Vypočítať(“Súčet(Predaj.SumTurnover)”, “Celkom”)

    V tomto príklade bude výsledkom pomer sumy pre pole Sales.SumTurnover záznamu zoskupenia k sume rovnakého poľa v celom rozložení;

    <ОбластьВычисления>

    Typ: Reťazec. Parameter môže nadobúdať nasledujúce hodnoty:

    • GeneralTotal - výraz bude vypočítaný pre všetky záznamy zoskupenia.
    • Hierarchia - Výraz sa vyhodnotí pre nadradený hierarchický záznam, ak existuje, a pre celé zoskupenie, ak neexistuje žiadny nadradený hierarchický záznam.
    • Zoskupenie - výraz bude vyhodnotený pre aktuálny záznam zoskupenia.
    • Zoskupenie bez zdrojov - pri výpočte funkcie pre záznam skupiny podľa zdroja sa výraz vyhodnotí pre prvý záznam skupiny pôvodného zoskupenia.

    Pri výpočte funkcie CalculateExpression() s hodnotou Zoskupenie bez zdrojov pre skupinové záznamy, ktoré nie sú zoskupeniami zdrojov, sa funkcia vypočíta rovnakým spôsobom, ako by sa vypočítala, ak by sa hodnota parametra rovnala hodnote Zoskupenie.

    Tvorca rozloženia zloženia údajov pri generovaní rozloženia zloženia údajov pri výstupe poľa zdroja, podľa ktorého sa zoskupenie vykonáva do rozloženia, umiestni do rozloženia výraz, ktorý sa vypočíta pomocou funkcie CalculateExpression(), označujúci parameter Zoskupenie bez zdrojov. Pre ostatné zdroje sú obvyklé výrazy prostriedkov umiestnené v zoskupení prostriedkov.

    <Начало>

    Typ: Reťazec. Označuje, z ktorého záznamu by mal fragment začínať, v ktorých agregovaných výrazových funkciách by sa mali vypočítať a z ktorého záznamu sa majú získať hodnoty polí mimo agregovaných funkcií. Hodnota môže byť jedna z nasledujúcich:

    <Конец>

    Typ: Reťazec. Označuje, do ktorého záznamu by mal fragment pokračovať, v ktorom by sa mali vypočítať agregované funkcie výrazu. Hodnota môže byť jedna z nasledujúcich:

    • Najprv. Je potrebné získať prvý záznam o zoskupení. Za slovom v zátvorkách môžete zadať výraz, ktorého výsledok sa použije ako posun od začiatku zoskupenia. Výsledná hodnota musí byť celé číslo väčšie ako nula. Napríklad First(3) – príjem tretieho záznamu od začiatku zoskupenia.

    Ak je prvý záznam mimo zoskupenia, má sa za to, že neexistujú žiadne záznamy. Napríklad, ak existujú 3 záznamy a chcete získať Prvý(4), predpokladá sa, že neexistujú žiadne záznamy.

    • Posledný. Potrebujete získať posledný záznam o zoskupení. Za slovom v zátvorkách môžete zadať výraz, ktorého výsledok sa použije ako posun od konca zoskupenia. Výsledná hodnota musí byť celé číslo väčšie ako nula. Napríklad Last(3) – príjem tretieho záznamu od konca skupiny.

    Ak je posledný záznam mimo zoskupenia, potom sa má za to, že neexistujú žiadne záznamy. Napríklad, ak existujú 3 záznamy a chcete získať Posledný(4), potom sa predpokladá, že neexistujú žiadne záznamy.

    • Predchádzajúce. Musíte získať predchádzajúci záznam zoskupenia. Za slovom v zátvorkách môžete zadať výraz, ktorého výsledok sa použije ako spätný posun od aktuálneho záznamu zoskupenia. Napríklad Previous(2) – získanie predchádzajúceho z predchádzajúceho záznamu.

    Ak predchádzajúci záznam presahuje rámec zoskupenia (napríklad pre druhý záznam zoskupenia musíte získať Predchádzajúci(3), získa sa prvý záznam zoskupenia.

    Pri získavaní predchádzajúceho záznamu pre súčet zoskupenia sa považuje za získaný prvý záznam.

    • Ďalšie. Musíte získať ďalší záznam zoskupenia. Za slovom v zátvorkách môžete zadať výraz, ktorého výsledok sa použije ako posun vpred od aktuálnej položky zoskupenia. Napríklad Next(2) – získanie ďalšieho z nasledujúceho záznamu.

    Ak ďalší záznam presahuje zoskupenie, má sa za to, že neexistujú žiadne záznamy. Napríklad, ak existujú 3 záznamy a pre tretí záznam sa prijme Next(), potom sa predpokladá, že neexistujú žiadne záznamy.

    Keď je prijatý ďalší záznam pre súčet zoskupenia, považuje sa to za neexistujúce žiadne záznamy.

    • Aktuálne. Potrebujete získať aktuálny záznam.

    Pri získavaní celkového súčtu zoskupení sa získa prvý záznam.

    • Hraničná hodnota. Potreba získať záznam o zadanej hodnote. Za slovom LimitingValues ​​​​v zátvorkách musíte uviesť výraz, ktorého hodnotou chcete začať fragment, prvé pole objednávky.

    Prvý záznam, ktorého hodnota poľa objednávky je väčšia alebo rovná zadanej hodnote, sa vráti ako záznam. Napríklad, ak sa pole Obdobie používa ako pole objednávky a má hodnoty 01/01/2010, 02/01/2010, 03/01/2010 a chcete získať LimitingValue(DateTime(2010 , 1, 15)), potom sa získa záznam s dátumom 02/01. 2010.

    <Сортировка>

    Typ: Reťazec. Uvádza výrazy oddelené čiarkami, ktoré popisujú pravidlá zoradenia. Ak nie je uvedené, zoradenie sa vykoná rovnakým spôsobom ako pri zoskupení, pre ktoré sa výraz vyhodnocuje. Po každom výraze môžete zadať kľúčové slovo Ascend (pre zoradenie vo vzostupnom poradí), Descending (pre zoradenie v zostupnom poradí) a AutoOrder (pre zoradenie referenčných polí podľa polí, podľa ktorých chcete zoradiť referenčný objekt). Slovo Auto Order možno použiť so slovom Ascending aj so slovom Descending.

    <ИерархическаяСортировка>

    Typ: Reťazec. Rovnako ako možnosť Zoradiť. Používa sa na organizáciu hierarchických záznamov. Ak nie je zadané, zostavovateľ rozloženia vygeneruje poradie podľa poradia zadaného v parametri Zoradiť.

    <ОбработкаОдинаковыхЗначенийПорядка>

    Typ: Reťazec. Určuje pravidlo na určenie predchádzajúceho alebo nasledujúceho záznamu v prípade, že existuje niekoľko záznamov s rovnakou hodnotou poradia:

    • Samostatne znamená, že postupnosť usporiadaných záznamov sa používa na určenie predchádzajúcich a nasledujúcich záznamov. Predvolená hodnota.
    • Spolu znamená, že predchádzajúce a nasledujúce záznamy sú určené na základe hodnôt objednávkových výrazov.

    Napríklad, ak je výsledná sekvencia zoradená podľa dátumu:

    dátum Celé meno Význam
    1 1. januára 2001 Ivanov M. 10
    2 2. januára 2001 Petrov S. 20
    3 3. januára 2001 Sidorov R. 30
    4 4. januára 2001 Petrov S. 40

    Ak je hodnota parametra Samostatne, potom:

    § predchádzajúci záznam k záznamu 3 bude záznam 2.

    § ak je fragment výpočtu definovaný ako Aktuálny, Aktuálny (respektíve parametre Start a End), potom pre záznam 2 bude tento fragment pozostávať z jedného záznamu 2. Výraz CalculateExpression(“Sum (Value)”, Current, Current) bude byť rovný 20.

    Ak je hodnota parametra Spolu, potom:

    § predchádzajúci záznam k záznamu 3 bude záznam 1.

    § ak je fragment výpočtu definovaný ako Current, Current (respektíve parametre Start a End), potom pre záznam 2 bude tento fragment pozostávať zo záznamov 2 a 3. Výraz CalculateExpression(“Sum (Value)”, Current, Current) sa bude rovnať 50.

    Keď zadávate hodnotu parametra rovnajúcu sa Spolu, v parametroch Začiatok a Koniec nemôžete určiť posun pre pozície Prvý, Posledný, Predchádzajúci, Ďalší.

    CalculateExpression(“Sum(sumTurnover)”, “First”, “Current”)

    Ak chcete získať hodnotu zoskupenia v predchádzajúcom riadku, môžete použiť nasledujúci výraz:

    CalculateExpression("Sadzba", "Predchádzajúci")

    Zoznam Nový funkcie:

    CalculateExpressionWithGroupArray(<Выражение>, <ВыражениеПолейГруппировки>, <ОтборЗаписей>, <ОтборГруппировок>) –

    Funkcia vracia pole, ktorého každý prvok obsahuje výsledok vyhodnotenia výrazu na zoskupenie podľa zadaného poľa.

    CalculateExpressionWithGroupValueTable(<Выражения>, <ВыражениеПолейГруппировки>, <ОтборЗаписей>, <ОтборГруппировок>) –

    Funkcia vracia tabuľku hodnôt, ktorej každý riadok obsahuje výsledok vyhodnotenia výrazov na zoskupenie podľa zadaného poľa

    ValueFilled(<Выражение>) – Vráti hodnotu True, ak je hodnota iná ako predvolená hodnota tohto typu, iná ako NULL, iná ako prázdna referencia, iná ako Nedefinované. Booleovské hodnoty sú kontrolované na NULL. Reťazce sa kontrolujú, či neobsahujú znaky bez medzier

    Formátovať(<Выражение>, <Форматная строка>) – Príjem naformátovaného reťazca odovzdanej hodnoty. Formátovací reťazec je nastavený v súlade s formátovacím reťazcom systému 1C:Enterprise.

    Podreťazec(<Выражение>, <Начальные символ>, <ДлинаПодстроки>) – Táto funkcia je navrhnutá na extrahovanie podreťazca z reťazca.

    Dĺžka riadku(<Выражение>) – Funkcia je určená na určenie dĺžky reťazca. Parameter – reťazcový výraz

    Linka(<Выражение>) – Ak sa pole odovzdá ako parameter, funkcia vráti reťazec obsahujúci reťazcové reprezentácie všetkých prvkov poľa oddelené znakmi “; “. Ak sa ako parameter odovzdá tabuľka hodnôt, funkcia vráti reťazec obsahujúci reťazcové reprezentácie všetkých riadkov tabuľky hodnôt, pričom reprezentácie buniek každého riadku sú oddelené znakmi “; “ a riadky sú symbolom posunu riadkov. Ak má niektorý prvok prázdnu reprezentáciu reťazca, potom sa namiesto jeho reprezentácie zobrazí reťazec<Пустое значение>.

    Dobrý deň, milý čitateľ! Máme tu ďalšiu lekciu o základoch systému rozloženia. Zoznámili ste sa s funkciami vyjadrovacieho jazyka SKD, videli ste vlastnosti systému rozloženia a pochopili ste aj základné nastavenia polí rozloženia. Teraz sa pozrieme na nový materiál. Choď!

    Ďalšie nastavenia pre polia ACS.

    Stĺpec "Typ hodnoty" Umožňuje určiť typ údajov pre pole rozloženia. Prečo špecifikovať typ napríklad pre pole „Nomenklatúra“, ak už viete, o aký typ ide? Toto je potrebné, ak je pole rozloženia zloženého typu. Môžete vybrať konkrétny typ, potom pri výbere podľa tohto poľa sa vyberú hodnoty tohto typu.

    Stĺpec "Dostupné hodnoty" umožňuje určiť hodnoty dostupné na výber a obmedziť výber používateľa na určité limity.

    Stĺpec "dekor" umožňuje určiť dizajn poľa rozloženia bez použitia rozloženia. Môžete určiť farbu písma, farbu rámu, orientáciu textu atď.

    Stĺpec "Možnosti úprav" Umožňuje určiť spôsob úpravy poľa rozloženia. Môžete napríklad určiť rýchly výber prvkov zo zoznamu vo výbere. V predvolenom nastavení pole rozloženia zdedí všetky možnosti úprav z objektu metadát.

    Vypočítané polia

    Na karte „Vypočítané polia“ v zložení údajov si môžete vytvoriť svoje vlastné vypočítané polia.

    Prečo potrebujete vypočítané polia, keď ich môžete vytvoriť na úrovni dotazu? Nie všetky polia je možné opísať pomocou dotazu. Ak potrebujete vytvoriť zložité pole z rôznych množín údajov, napríklad dotaz a objekt, potom sa bez vypočítaných polí nezaobídete. Ak je zdrojom údajov dopyt a je povolené automatické dopĺňanie, nemôžete pridať pole kompozície údajov, ale pomocou vypočítaných polí môžete pridať ľubovoľný počet polí.

    Do stĺpca „Výraz“ vypočítavaného poľa musíte napísať ľubovoľný výraz, ktorý používa polia zloženia údajov a pristupuje k ich ceste (stĺpec „Cesta“ na karte „Množiny údajov“). Buď môžete použiť matematické transformačné funkcie alebo pristupovať k funkciám bežných modulov. Napríklad napíšme do stĺpca „Dátová cesta“ názov vypočítaného poľa „Odchýlka“ a do poľa „Výraz“ toto:

    Množstvo - Cena* Množstvo

    Pozrite sa na iný a môžete si ho stiahnuť aj pomocou týchto funkcií.

    Počítané polia majú v podstate rovnaké nastavenia ako polia rozloženia. Jediné, čo tu chýba, je stĺpec Hierarchy Group. Pri písaní vypočítavaných polí sa nemôžete odvolávať na iné vypočítavané polia.

    Ako preniesť parametre a výbery do zostavy postavenej na systéme kontroly prístupu bez vytvorenia formulára správy?

    &OnClient // Odovzdanie parametrov do zostavy ACS Postup Spracovanie príkazu (Parameter príkazu, Parametre vykonania príkazu) Selection = Nová štruktúra("Nomenklatúra" , Parameter príkazu) ; FixedSettings = GetFixedSettings() ; FormParameters = Nová štruktúra( "FormAtOpening, Selection, Option Key, FixedSettings", Pravda , Výber, "Možnosť prehľadu predaja", Pevné nastavenia); OpenForm( "Report.SalesReport.Form", FormParameters); EndProcedure &OnServer Function GetFixedSettings()SalesReport = Správy. Správa o predaji. Create() ; SKD = ​​správa o predaji. DataCompositionSchema; Nastavenia = SKD. Predvolené nastavenia; Začiatok obdobia = Nastavenia. Parametre údajov. FindParameterValue( NewDataCompositionParameter("PočiatočnéObdobie" ) ); Začiatok obdobia. Hodnota = PočiatočnýMesiac(AktuálnyDátum()) ; Začiatok obdobia. Použitie = Pravda ; Začiatok obdobia = Nastavenia. Parametre údajov. FindParameterValue( NewDataCompositionParameter("EndPeriod") ); Koniec obdobia. Hodnota = KoniecMesiac(AktuálnyDátum()) ; Koniec obdobia. Použitie = Pravda ; Nastavenia návratu; EndFunction // GetFixedSettings()

    Ako vycentrovať hlavičky stĺpcov v prehľade ACS?

    V poli „Design“ na karte „Data Sets“ musíte nastaviť dva parametre:

    Horizontálna poloha: Stred Vertikálna poloha: Stred

    Na karte „Nastavenia“ v dolnej časti nájdete aj ďalšiu kartu: „Podmienený vzhľad“. Tam pre každé zoskupenie, parameter atď. môžete nastaviť dizajn, ako chcete.

    Zdá sa, že som vám povedal všetko! Ako si pamätáte, máte možnosť klásť otázky, ak nejaké máte. Pokúsim sa odpovedať. V budúcnosti plánujem napísať ďalšie články na túto tému, takže sa nezabudnite prihlásiť na odber aktualizácií našej webovej stránky, aby ste nič nezmeškali! Tiež určite urobím test na posilnenie učiva z tejto lekcie.

    Na konci článku vám chcem odporučiť jeden bezplatný od Anatolija Sotnikova. Ide o kurz od skúseného programátora. Na samostatnom základe vám ukáže, ako zostaviť zostavy v systéme kontroly prístupu. Musíte len pozorne počúvať a pamätať si! Dostanete odpovede na nasledujúce otázky:
    • Ako vytvoriť jednoduchý zoznamový prehľad?
    • Na čo slúžia stĺpce Pole, Cesta a Názov na karte Polia?
    • Aké sú obmedzenia pre polia rozloženia?
    • Ako správne nakonfigurovať roly?
    • Aké sú úlohy pre polia rozloženia?
    • Kde nájdem kartu zloženia údajov v dopyte?
    • Ako nakonfigurovať parametre v systéme kontroly prístupu?
    • Stáva sa to ešte zaujímavejšie...
    Možno by ste sa nemali pokúšať sami surfovať po internete a hľadať potrebné informácie? Navyše je všetko pripravené na použitie. Len začnite! Všetky podrobnosti o tom, čo je v bezplatných video lekciách

    V tejto krátkej poznámke chcem ukázať, ako môžete zhrnúť hodnoty na rôznych úrovniach zoskupenia v zostave pomocou systému na zostavovanie údajov.
    Ako je znázornené na obrázku, iba na úrovni zoskupenia „Skupiny položiek“ sa vypočítava zdroj „Objednávka“, ktorý zobrazuje, koľko je potrebné objednať pre aktuálnu skupinu položiek na základe určitých podmienok:


    Túto hodnotu možno vypočítať iba na tejto úrovni zoskupenia, pretože neexistujú žiadne hodnoty nad alebo pod na výpočet. Napríklad na úrovni podrobných záznamov neexistujú údaje o maximálnom množstve v skupine, pretože tieto údaje platia len pre skupinu ako celok a nie pre jej jednotlivé zložky.

    Podľa toho je teraz potrebné vypočítať súčty pre vyššie uvedené skupiny („Sklady“, „Typy skladov“) a celkový súčet.
    Ak to chcete urobiť, použite funkciu CalculateExpressionWithGroupArray:
    HODNOTIŤ VÝRAZ S GROUPARRAY (EVALEXPRESSIONWITHGROUPARRAY)
    Syntax:
    EvaluateExpressionWithGroupArray(,)
    Popis:
    Funkcia vracia pole, ktorého každý prvok obsahuje výsledok vyhodnotenia výrazu na zoskupenie podľa zadaného poľa.
    Kompozitor rozloženia pri generovaní rozloženia konvertuje parametre funkcií na polia rozloženia kompozície údajov. Napríklad pole Účet sa skonvertuje na DataSet.Account.
    Tvorca rozloženia pri generovaní výrazov pre výstup vlastného poľa, ktorého výraz obsahuje iba funkciu CalculateArrayWithGroupArray(), generuje výstupný výraz tak, aby boli výstupné informácie usporiadané. Napríklad pre vlastné pole s výrazom:

    CalculateExpressionWithGroupArray("Suma(SumaTurnover)", "Protistrana")
    Tvorca rozloženia vygeneruje pre výstup nasledujúci výraz:

    ConnectRows(Array(Order(CalculateExpressionWithGroupingValueTable)("View(Sum(DataSet.AmountTurnover)),Sum(DataSet.AmountTurnover)",,"DataSet.Account"),"2")))

    Možnosti:

    Typ: Reťazec. Výraz, ktorý sa má vyhodnotiť. Reťazec, napríklad Suma(SumaObrat).

    Typ: Reťazec. Výrazy zoskupenia polí – výrazy zoskupení polí oddelené čiarkami. Napríklad Dodávateľ, Strana.

    Typ: Reťazec. Výraz popisujúci výber aplikovaný na podrobné záznamy. Výraz nepodporuje použitie agregačných funkcií. Napríklad, DeletionFlag = False.

    Typ: Reťazec. Výraz popisujúci výber aplikovaný na skupinové záznamy. Napríklad Suma(SumaObrat) > &Parameter1.
    Príklad:

    Maximum(CalculateExpressionWithGroupArray("Suma(SumaTurnover)", "Protistrana"));

    Podrobný popis syntaxe funkcie možno nájsť na http://its.1c.ru/db/v837doc#bookmark:dev:TI000000582
    Teraz pre výpočet duplikujeme pole „Objednávka“ s rôznymi hodnotami „Vypočítať podľa...“ pomocou nasledujúcich výrazov, všimnite si, že na každej vyššej úrovni sa používajú hodnoty úrovní pod zoskupeniami .

    Výsledkom je nasledujúca konštrukcia: