1s skd izraz izračunanih polj. Jezik za izražanje sistema sestave podatkov (1Cv8). Skupne funkcije modula

Izračunaj izraz- dovolj kompleksna funkcija SKD za razumevanje in primeri uporabe v referenčnih informacijah so precej redki. Ta članek obravnava primere, ki bodo zagotovo koristni za vsakega razvijalca:

  1. tekoči seštevek v skupini;
  2. tekoči vsota v navzkrižni tabeli;
  3. pridobitev prejšnje vrednosti;
  4. PM izhod v eni vrstici.

1. Pridobitev kazalnika na kumulativni vsoti

Pridobite skupno količino blaga na ravni združevanja. Za to ustvarimo izračunano polje (glej sliko 1).
Na zavihku »Viri« nastavite funkcijo za izračunano polje:
CalculateExpression("Sum(NumberTurnover)", "First", "Current")
ki bo seštel število izdelkov od prvega zapisa do trenutnega (glej sliko 2).

Če želite količino blaga pridobiti po obračunskem načelu na ravni podrobne evidence, je na zavihku »Izračunana polja« za izračunano polje nastavljena funkcija Izračunaj izraz (glej sliko 3).
Glede na stopnjo prejema tekočega vsota izdelamo združevanje (glej sliko 4): na ravni virov - združevanje po blagu, na ravni DZ - združevanje podrobnih evidenc.
Slika 4. Skupine poročil s kumulativno vsoto

2. Pridobivanje vrednosti indikatorja iz prejšnje vrstice

Pridobite menjalni tečaj za datum in prejšnji datum. Če želite to narediti, ustvarite izračunano polje in v polje izraza zapišite naslednji izraz (glejte sliko 5):
EvaluateExpression("Tečaj", "Prejšnji", "Prejšnji")
ki bo vzela prejšnjo vrednost menjalnega tečaja za trenutno vrstico, zadnji parameter funkcije omejuje prejemanje podatkov.
Ker delamo na ravni podrobnih zapisov, takoj gremo na zavihek "Nastavitve" in ustvarimo združevanje - podrobni zapisi.

3. Pridobitev kazalnika s kumulativno vsoto v navzkrižni tabeli

Količino blaga bomo dobili po obračunskem načelu v okviru obdobja. Za to ustvarimo izračunano polje (glej sliko 1). Na zavihku »Viri« za izračunano polje podajte naslednji izraz (glejte sliko 6):
CalculateExpression("Znesek(ŠteviloTurnover)", "Obdobje", "Prvi", "Trenutni")
ki bo na ravni združevanja izračunal količino blaga v razponu od prve vrstice do trenutne v kontekstu obdobja za vsako postavko.
Na zavihku »Nastavitve« ustvarite tabelo z razvrščanjem po elementih v vrstici in razvrščanjem po piki v stolpcu (glejte sliko 7).

4. Izpis podatkov tabele v eni vrstici

Metode za izpis tabelarnih podatkov v eni vrstici, vključno z metodo z uporabo funkcije Izračunaj izraz, so obravnavane v članku
  • 1C-Bitrix
  • Eno najpomembnejših področij poslovne programske opreme je poročanje. Kako enostavno je prilagoditi obstoječe poročilo spreminjajočim se potrebam poslovanja (in zakonodaje) ali izdelati novo, je lahko odvisno (in ne v prenesenem pomenu!) Usoda podjetja, ali gre za poročilo za davčni urad. ali diagram odvisnosti povpraševanja po blagu od sezone in drugih dejavnikov. Zmogljiv in prilagodljiv sistem poročanja, ki omogoča enostavno pridobivanje pravih podatkov iz sistema, njihovo predstavitev v razumljivi obliki in omogoča končnemu uporabniku, da ponovno konfigurira standardno poročilo, da vidi podatke v novi luči – to je ideal, ki ga vsak poslovni sistem bi moral stremeti.

    V platformi 1C:Enterprise je za ustvarjanje poročil odgovoren mehanizem, imenovan sistem za sestavo podatkov (na kratko ACS). V tem članku bomo poskušali dati Kratek opis zamisli in arhitekturo mehanizma ACS ter njegovih zmogljivosti.


    ACS je mehanizem, ki temelji na deklarativnem opisu poročil. ACS je zasnovan za izdelavo poročil in prikazovanje informacij, ki imajo zapleteno strukturo. Mimogrede, poleg razvoja poročil se mehanizem ACS uporablja tudi v 1C: Enterprise v dinamičnem seznamu, orodje za prikazovanje informacij o seznamih z bogato funkcionalnostjo (prikaz ravnih in hierarhičnih seznamov, pogojno oblikovanje vrstic, združevanje itd.) .

    Malo zgodovine

    V prvi različici platforme 1C:Enterprise 8, različica 8.0, so bila poročila narejena na naslednji način:
    1. Ena ali več poizvedb je bilo napisanih v poizvedovalnem jeziku 1C (jezik, podoben SQL, več o tem spodaj).
    2. Napisana je bila koda, ki je prenašala rezultate izvedenih poizvedb dokument s preglednico ali v diagramu. Koda bi lahko opravila tudi delo, ki ga ni mogoče opraviti v poizvedbi - na primer izračunala je vrednosti z uporabo vgrajenega jezika 1C.
    Pristop je preprost, vendar ne najbolj priročen - vizualnih nastavitev je minimalno, vse je treba programirati iz roke v roko. In eden od takratnih adutov popolnoma nove platforme 1C:Enterprise 8 je bilo minimiziranje količine kode v aplikacijski rešitvi, ki jo je treba pisati ročno, zlasti zaradi vizualnega oblikovanja. Logično bi bilo slediti isti poti v mehanizmu poročanja. To je bilo storjeno z razvojem novega mehanizma – sistema za sestavo podatkov.

    Ena od idej, ki je bila osnova ACS, je bila prilagodljivost in prilagajanje poročil, ki so na voljo tako razvijalcem kot končnemu uporabniku. V idealnem primeru bi želeli končnemu uporabniku omogočiti dostop do enakega nabora orodij za oblikovanje poročil kot razvijalec. Logično bi bilo, da bi bil en sam nabor orodij na voljo vsem. No, ker orodja vključujejo sodelovanje končnega uporabnika, pomeni, da je treba uporabo programiranja v njih odstraniti na minimum (najbolje pa popolnoma odpraviti), vizualne nastavitve pa maksimalno izkoristiti.

    Formulacija problema

    Naloga pred razvojno ekipo je bila to – izdelati sistem poročanja, ki ne temelji na algoritemskem (tj. s pisanjem kode), temveč na deklarativnem pristopu k ustvarjanju poročil. In verjamemo, da je problem uspešno rešen. Po naših izkušnjah je približno 80% zahtevanega poročanja mogoče izvesti z uporabo ACS brez ene vrstice kode (razen za pisanje formul za izračunana polja), večinoma - z vizualnimi nastavitvami.
    Razvoj prve različice ACS je trajal približno 5 človeških let.

    Dva jezika

    Pri izdelavi poročil sodelujeta dva jezika. Eden je jezik poizvedbe, ki se uporablja za pridobivanje podatkov. Drugi je jezik izrazov za sestavo podatkov, zasnovan za pisanje izrazov, ki se uporabljajo v različnih delih sistema, na primer v nastavitvah sestave podatkov, za opis izrazov polj po meri.

    Jezik poizvedbe

    Jezik poizvedb temelji na SQL in ga tisti, ki poznajo SQL, zlahka obvladajo. Primer zahteve:

    Preprosto je videti analoge standardnih razdelkov poizvedbe SQL - SELECT, FROM, GROUP BY, ORDER BY.

    Hkrati jezik poizvedb vsebuje veliko število razširitev, ki so osredotočene na odražanje posebnosti finančnih in gospodarskih nalog ter na maksimalno zmanjšanje prizadevanj za razvoj uporabnih rešitev:

    • Referenčna polja skozi piko. Če imajo polja tabele referenčni tip (shranjujejo povezave do objektov druge tabele), se lahko razvijalec nanje sklicuje v besedilu poizvedbe prek ".", medtem ko število ravni gnezdenja takšnih povezav ni omejeno z sistem (na primer naročilo stranke. pogodba. organizacija. telefon).
    • Večdimenzionalno in večnivojsko oblikovanje rezultatov. Seštevki in vmesni seštevki so oblikovani ob upoštevanju združevanja in hierarhije, nivoje je mogoče obiti v poljubnem vrstnem redu s seštevanjem vmesnih seštevkov, zagotovljena je pravilna konstrukcija seštevkov po časovnih dimenzijah.
    • Podpora za virtualne mize. Navidezne tabele, ki jih ponuja sistem, vam večini omogočajo, da dobite skoraj že pripravljene podatke uporabne naloge brez potrebe po zapletenih poizvedbah. Tako lahko virtualna tabela zagotavlja podatke o stanju blaga v kontekstu obdobij v določenem trenutku. Hkrati virtualne tabele kar najbolje izkoristijo shranjene informacije, na primer predhodno izračunane vsote itd.
    • Začasne mize. Jezik poizvedbe vam omogoča uporabo začasnih tabel v poizvedbah. Z njihovo pomočjo lahko izboljšate učinkovitost poizvedb, v nekaterih primerih zmanjšate število zaklepanja in olajšate branje besedila poizvedbe.
    • paketne zahteve. Za več priročno delovanje z začasnimi tabelami v poizvedovalnem jeziku je podprto delo s paketnimi poizvedbami - tako sta izdelava začasne tabele in njena uporaba postavljena v eno poizvedbo. Paketna zahteva je zaporedje zahtev, ločenih s podpičjem (";"). Zahteve v paketu se izvajajo ena za drugo. Rezultat izvajanja paketne poizvedbe, odvisno od uporabljene metode, bo bodisi rezultat, ki ga vrne zadnja poizvedba paketa, bodisi niz rezultatov vseh paketnih zahtev v vrstnem redu, ki mu sledijo zahteve v paketu.
    • Pridobivanje pogledov referenčnega polja. Vsaka tabela objektov (v kateri je shranjen imenik ali dokument) ima navidezno polje - "Representation". To polje vsebuje besedilni prikaz predmeta in olajša oblikovalcu poročila. Torej, za dokument to polje vsebuje vse ključne informacije - ime vrste dokumenta, njegovo številko in datum (na primer "Prodaja 000000003 od 06. 7. 2017 17:49:14"), ki razvijalca shrani pred pisanje izračunanega polja.
    • in itd.
    Poizvedbeni mehanizem samodejno spremeni poizvedbo, pri čemer upošteva vloge uporabnika, v imenu katerega se poizvedba izvaja (tj. uporabnik bo videl le podatke, ki jih ima pravico videti) in funkcionalne možnosti (tj. v skladu z tisti, ki je konfiguriran v funkcionalnosti aplikacijske rešitve).

    Obstajajo tudi posebne razširitve jezika poizvedb za SKD. Razširitev se izvede z uporabo posebnih sintaksnih navodil, zaprtih v zavitih oklepajih in postavljenih neposredno v besedilo zahteve. S pomočjo razširitev razvijalec s prilagajanjem poročila določi, katere operacije bo končni uporabnik lahko izvedel.

    Na primer:

    • IZBERI. Ta stavek opisuje polja, ki jih bo uporabnik lahko izbral za izpis. Po tem ključno besedo vzdevki polj z glavnega izbirnega seznama poizvedb, ki bodo na voljo za prilagajanje, so navedeni ločeni z vejicami. Primer: (IZBERITE nomenklaturo, skladišče)
    • KJE. Opisuje polja, na katerih lahko uporabnik uporabi izbor. Ta predlog uporablja polja tabele. Uporaba vzdevkov polj za izbiro seznama ni dovoljena. Vsak spojni del lahko vsebuje svoj lasten element WHERE. Primeri: (WHERE Nomenklatura.*, Skladišče), (WHERE Dokument.Datum >= &Začetni datum, Dokument.Datum<= &ДатаКонца}
    • in itd.
    Primer uporabe razširitev:

    Jezik izraza sestave podatkov

    Jezik izrazov za sestavo podatkov je zasnovan za pisanje izrazov, ki se uporabljajo zlasti za opis izrazov polj po meri. ACS vam omogoča, da v poročilu definirate polja po meri z uporabo lastnih izrazov ali nizov možnosti s pogoji za njihovo izbiro (analogno CASE v SQL). Polja po meri so podobna izračunanim poljem. Nastavite jih lahko tako v konfiguratorju kot v načinu 1C:Enterprise, vendar funkcij običajnih modulov ni mogoče uporabiti v izrazih polj po meri. Zato so polja po meri bolj za uporabnika kot za razvijalca.

    Primer:

    Postopek izdelave poročila o ACS

    Pri izdelavi poročila moramo izdelati postavitev, ki določa, kako bodo podatki prikazani v poročilu. Ustvarite lahko postavitev na podlagi sheme sestave podatkov. Shema sestave podatkov opisuje bistvo podatkov, ki so na voljo v poročilu (od kod pridobiti podatke in kako lahko nadzorujete njihovo sestavo). Shema sestave podatkov je osnova, na podlagi katere je mogoče generirati vse vrste poročil. Shema sestave podatkov lahko vsebuje:
    • zahtevajte besedilo s sistemskimi navodili za sestavo podatkov;
    • opis več nizov podatkov;
    • podroben opis razpoložljivih polj;
    • opis odnosov med več nizi podatkov;
    • opis parametrov pridobivanja podatkov;
    • opis razporeditev in skupin polj;
    • in itd.

    V shemo sestave podatkov lahko na primer dodate poizvedbo kot nabor podatkov in pokličete konstruktor poizvedbe, ki vam omogoča grafično sestavljanje poizvedbe poljubne kompleksnosti:

    Rezultat zagona ustvarjalnika poizvedb bo besedilo poizvedbe (v jeziku poizvedb 1C:Enterprise). To besedilo lahko po potrebi ročno prilagodite:

    V shemi sestave podatkov je lahko več nizov podatkov, nabore podatkov je mogoče poljubno povezati v postavitvi, dodati izračunana polja, nastaviti parametre poročila itd. Omeniti velja zanimivo lastnost mehanizma poizvedb v 1C: Enterprise. Poizvedbe se na koncu prevedejo v narečje SQL, ki je značilno za DBMS, s katerim aplikacija neposredno dela. Na splošno poskušamo maksimalno izkoristiti zmogljivosti strežnikov DBMS (omejeni smo z dejstvom, da uporabljamo le tiste zmogljivosti, ki so hkrati na voljo v vseh DBMS, ki jih podpira platforma 1C:Enterprise - MS SQL, Oracle, IBM DB2 , PostgreSQL). Tako lahko na ravni poizvedbe v izračunanih poljih uporabljamo le tiste funkcije, ki so prevedene v SQL.

    Toda na ravni sheme sestave podatkov lahko že dodajamo polja po meri in v njih uporabljamo funkcije v vgrajenem razvojnem jeziku 1C (vključno s tistimi, ki smo jih napisali mi), kar močno razširi zmožnosti poročil. Tehnično je videti takole - vse, kar je mogoče prevesti v SQL, se prevede v SQL, poizvedba se izvede na ravni DBMS, rezultati poizvedbe se shranijo v pomnilnik aplikacijskega strežnika 1C, ACS pa izračuna vrednosti izračunanih polj za vsak zapis, katerega formule so zapisane v jeziku 1C.


    Dodajanje polj po meri

    Poročilu lahko dodate poljubno število tabel in grafikonov:


    Oblikovalec poročil


    Poročaj v času izvajanja

    S pomočjo ACS lahko uporabnik v poročilo doda kompleksne izbire (ki bodo dodani poizvedbi na pravih mestih), pogojno zasnovo (ki vam omogoča, da izhodna polja oblikujete na različne načine - v pisavi, barvi itd., odvisno od njihovih vrednosti) in še veliko več.

    Na kratko opišite postopek izdelave in izdelave poročila, kot sledi:

    • Razvijalec v času oblikovanja s pomočjo oblikovalca (ali med izvajanjem s pomočjo kode) definira shemo postavitve podatkov:
      • Besedilo zahteve/prošenj
      • Opis izračunanih polj
      • Odnosi med poizvedbami (če jih je več)
      • Možnosti poročila
      • Privzete nastavitve
      • itd.
    • Zgornje nastavitve so shranjene v postavitvi
    • Uporabnik odpre poročilo
      • Morda naredi dodatne nastavitve (na primer spremeni vrednosti parametrov)
      • Pritisnite gumb "Generiraj".
    • Uporabniške nastavitve veljajo za shemo sestave podatkov, ki jo je določil razvijalec.
    • Oblikuje se vmesna postavitev podatkovne sestave, ki vsebuje navodila, od kod pridobiti podatke. Zlasti so popravljene poizvedbe, določene v postavitvi. Torej so polja, ki niso uporabljena v poročilu, odstranjena iz zahteve (to se naredi, da se zmanjša količina prejetih podatkov). Vsa polja, ki se uporabljajo v formulah izračunanih polj, so dodana poizvedbi.
    • V ohišju je vključen procesor za sestavo podatkov. Procesor postavitve izvaja poizvedbe, povezuje nize podatkov, izračuna vrednosti izračunanih polj in virov, izvaja združevanje. Z eno besedo, opravi vse izračune, ki niso bili izvedeni na ravni DBMS.
    • Procesor za izhod podatkov zažene poizvedbo za izvedbo in izpiše prejete podatke v dokument preglednice, grafikon itd.


    Postopek generiranja poročila z mehanizmom ACS

    Poskušamo čim bolj zmanjšati količino poročevalskih podatkov, ki se prenašajo iz strežnika v odjemalsko aplikacijo. Pri prikazu podatkov v dokumentu s preglednico, pri odpiranju dokumenta s preglednico, s strežnika prenesemo le tiste vrstice, ki jih uporabnik vidi na začetku dokumenta. Ko se uporabnik premika po vrsticah dokumenta, se manjkajoči podatki prenesejo s strežnika na odjemalca.

    Uporabniške nastavitve

    Vsa orodja ACS so na voljo tako razvijalcu kot končnemu uporabniku. Toda praksa je pokazala, da se končni uporabnik pogosto prestraši obilice zmožnosti orodja. Poleg tega v večini primerov končni uporabnik ne potrebuje vse moči nastavitev - dovolj je, da ima hiter dostop do nastavitve enega ali dveh parametrov poročila (na primer obdobje in nasprotna stranka). Začenši z določeno različico platforme, ima razvijalec poročil možnost, da označi, katere nastavitve poročila so na voljo uporabniku. To naredite s potrditvenim poljem »Vključi v uporabniške nastavitve«. Poleg tega imajo nastavitve poročila zdaj zastavico »Prikazni način«, ki ima eno od treh vrednosti:
    • Hiter dostop. Nastavitev bo prikazana neposredno na vrhu okna poročila.
    • Običajno. Nastavitev bo na voljo prek gumba "Nastavitve".
    • Ni na voljo. Nastavitev ne bo na voljo končnemu uporabniku.


    Nastavitev načina prikaza v času načrtovanja


    Prikaži nastavitev v načinu hitrega dostopa med izvajanjem (pod gumbom Ustvari)

    Razvojni načrti

    Ena izmed prioritet pri razvoju ACS je za nas poenostavitev uporabniških nastavitev. Naše izkušnje kažejo, da je za nekatere končne uporabnike delo z uporabniškimi nastavitvami še vedno resno delo. To upoštevamo in delamo v tej smeri. V skladu s tem bo tudi razvijalcem postalo lažje delati z ACS, ker tako kot doslej želimo zagotoviti enoten komplet orodij za nastavitev poročil tako za razvijalca kot za končnega uporabnika.

    Pravilna uporaba sheme sestave podatkov (SKD) vam omogoča:

    • znatno zmanjšati čas, potreben za pripravo poročila;
    • znebite se potrebe po ustvarjanju upravljanega obrazca za upravljanje;
    • dobite čudovit rezultat z možnostjo dodatne prilagoditve s strani uporabnika.

    Toda vsi razvijalci ne uporabljajo maksimalno zmogljivosti sheme, saj niso vse njene nastavitve očitne in intuitivne. Še posebej veliko ljudi ve, da v 1C v ACS obstajajo izračunana polja, vendar ne razumejo v celoti področja njihove uporabe in načinov dela z njimi.

    Kaj je izračunano polje

    V večini primerov je vir podatkov v shemi postavitve poizvedba. Načeloma se že znotraj same poizvedbe lahko uporabljajo različne formule, konstrukcije in izrazi. Postavlja se naravno vprašanje, zakaj potrebujemo podvojeno funkcionalnost?

    Dejstvo je, da je ACS nekaj več kot le prikaz rezultata poizvedbe, kar je jasno razvidno iz obrazca za izdelavo sheme (slika 1).

    Izračunana polja vam omogočajo izvajanje določenih dejanj z ustvarjenim naborom podatkov:

    • Prikaz v določeni celici niz podatkov, ki jih je prejela zahteva, z združevanjem več vrstic v eno;
    • Dostopajte do izvoznih funkcij skupnega modula;
    • Izvedite različne izraze, ki so na voljo v jeziku povezave, in uporabite posebne funkcije Evaluate Expression.

    Pojdimo skozi ta seznam.

    Niz vrednosti v eni celici

    Simulirajmo situacijo, ko je treba v ločeni celici dobiti vse številke prejemnih dokumentov za nasprotno stranko:


    tako smo v naši shemi ustvarili dodatno polje za izračun;


    Kot lahko vidite iz zgornjega primera, pri dodajanju in obdelavi izračunanih polj ni težav. Uporabili smo dve funkciji: Array() in ConnectStrings().

    Nekaj ​​besed o slednjem. Poleg prvega parametra, ki kaže na identifikator matrike, vrednosti ali vrednosti, lahko v njem nastavite še dva:

    1. Ločilo elementov - označuje, kateri znak bo ločil en element matrike ali eno vrstico tabele vrednosti od drugega (v našem primeru smo ta parameter izpustili in prelom vrstice je bil privzeto dodeljen);
    2. Ločilo stolpcev – znak, ki se uporablja za ločevanje stolpcev tabele vrednosti (privzeto se uporablja podpičje).

    Klicanje izvoznih funkcij skupnega modula

    Funkcije skupnega modula lahko služijo kot vir podatkov za polnjenje izračunanega polja.

    Nekaj ​​pomembnih točk:

    • Funkcija mora biti izvozljiva;
    • Če se funkcija nahaja v skupnem modulu z nastavljeno zastavo "Global", se pokliče neposredno po imenu, v nasprotnem primeru mora biti funkcija poklicana po shemi "Common module name". "Ime funkcije za klic."

    Kot primer uporabe bomo vzeli isto zahtevo za dokumente o prejemu in jo prikazali v ločenem stolpcu. Same poizvedbe ne bomo opisovali, šli bomo neposredno na izračunana polja:


    Tako vidimo, da je iz ACS mogoče inicializirati skoraj vsak obdelovalec podatkov, kar močno razširi možnosti uporabe sheme.

    Povežite jezikovne izraze

    Precej pogosto se pri delu razvijalca pojavi situacija, ko je treba prikazati rezultat delitve v polju ACS:

    1. Izračunajte povprečno ceno artikla;
    2. Vse vrste obresti;
    3. Izračuni povprečnega zaslužka itd.

    Da bi se izognili težavam, je v teh primerih zaželeno, da v izračunano polje vnesete ček za deljenje z 0.

    To lahko storite s konstrukcijo "Choice When .... Potem ... V nasprotnem primeru ... Konec".

    Na koncu nekaj besed o precej novi funkciji Calculate Expression (). Zlasti z njegovo pomočjo lahko izračunate odstopanja v stroških med trenutno in prejšnjo vrstico, kumulativno bilanco itd.

    Recimo, da lahko dobite DocumentAmount iz prejšnje vrstice naše poizvedbe tako, da podate vrednost CalculateExpression("DocumentAmount", "PreviousAmount") v polju "Expression".

    V luči prihajajoče izdaje 8.2.14 bom poskušal opisati nekatere nove funkcije sistema za sestavo podatkov.

    Odprite shemo sestave podatkov, po možnosti v zunanjem poročilu, da bo lažje urejati.

    Dodamo nabor podatkov poizvedbe in napišemo, ročno ali s pomočjo ustvarjalnika poizvedb, najpreprostejšo poizvedbo:

    1. Nastavite zahtevo v ACS.

    2. Nastavite izračunana polja v ACS

    3. Na zavihku z nastavitvami konfiguriramo postavitev podatkov

    4. Zaženemo 1C Enterprise 8.2.14. Odpremo poročilo. Oblikujemo, prejemamo.

    Opis samih novih funkcij:

    1. Trenutni datum ()

    Vrne sistemski datum. Pri postavitvi postavitve v vseh izrazih, ki so prisotni v postavitvi, se funkcija CurrentDate() nadomesti z vrednostjo trenutnega datuma.

    2. RAČUNALNI IZRAZ()

    sintaksa:

    Izračunaj izraz (,)

    Opis:

    Funkcija je zasnovana za vrednotenje izraza v kontekstu nekega združevanja.

    Funkcija upošteva izbor skupin, ne upošteva pa hierarhičnih izbir.

    Funkcije ni mogoče uporabiti za skupino v skupinski izbiri te skupine. Na primer, pri izbiri združevanja nomenklature ne morete uporabiti izraza Izračunaj izraz ("Sum(SumTurnover)", "TotalTotal") > 1000. Toda tak izraz se lahko uporablja pri hierarhični izbiri.

    Če je končni zapis pred začetnim zapisom, se šteje, da ni zapisov za izračun podrobnih podatkov in izračun agregatnih funkcij.

    Pri izračunu intervalnih izrazov za skupno vsoto (parameter Grouping je nastavljen na GrandTotal ) se šteje, da ni zapisov za izračun podrobnih podatkov in izračun agregatnih funkcij.

    Graditelj postavitve pri generiranju funkcijskega izraza Izračunaj izraz, če izraz za urejanje vsebuje polja, ki jih ni mogoče uporabiti v združevanju, nadomesti funkcijo Izračunaj izraz na NIČ.

    Parametri

    Vrsta: vrstica. Izraz, ki ga je treba ovrednotiti.

    Vrsta: vrstica. Vsebuje ime skupine, v okviru katere je treba izraz oceniti. Če je kot ime združevanja uporabljen prazen niz, se izračun izvede v kontekstu trenutnega združevanja. Če je kot ime združevanja uporabljen niz GrandTotal, bo izračun izveden v kontekstu skupnega vsota. V nasprotnem primeru bo izračun izveden v kontekstu nadrejene skupine s tem imenom.

    Na primer:

    Vsota(Prodaja.SumTurnover)/Izračunaj("Vsota(Prodaja.SumPromet)", "Skupaj Total")

    V tem primeru bo rezultat razmerje zneska po polju Prodaja.ZnesekPromet združevanje vnosov v vsoto istega polja v celotni postavitvi;

    Vrsta: vrstica. Parameter ima lahko naslednje vrednosti:

    · Splošni rezultat— izraz bo ovrednoten za vse zapise združevanja.

    · Hierarhija— izraz bo ovrednoten za nadrejeni hierarhični vnos, če obstaja, in za celotno skupino, če ni nadrejenega hierarhičnega vnosa.

    · združevanje v skupine— izraz bo ovrednoten za trenutni skupinski zapis skupine.

    · GroupingNotResource— pri izračunu funkcije za skupinski zapis po virih se izraz izračuna za prvi skupinski zapis začetnega združevanja.

    Pri izračunu funkcije Izračunaj izraz () s pomenom GroupingNotResource za skupinske zapise, ki niso združeni po virih, se funkcija izračuna na enak način, kot bi bila izračunana, če bi bila vrednost parametra enaka vrednosti združevanje v skupine.

    Graditelj postavitve sestave podatkov pri generiranju postavitve podatkovne sestave pri prikazu polja vira, na katerem se izvaja združevanje, postavi izraz v postavitev, ki se izračuna s funkcijo Izračunaj izraz () , ki določa parameter GroupingNotResource. Za druge vire, razvrščene po virih, so postavljeni regularni izrazi virov.

    Vrsta: vrstica. Določa, kateri zapis naj začne fragment, v katerem izračunamo agregatne funkcije izraza in iz katerega zapisa dobimo vrednosti polj zunaj agregatnih funkcij. Vrednost je lahko ena od naslednjih:

    · Prvi (prvi)

    · Zadnji (zadnji)

    · Prejšnji (Prejšnji)

    · Naprej (Naslednji)

    · Trenutni (trenutni)

    · LimitingValue(mejna vrednost) LimitingValue

    Vrsta: vrstica. Označuje, na kateri zapis nadaljevati fragment, v katerem se izračunajo agregatne funkcije izraza. Vrednost je lahko ena od naslednjih:

    · Prvi (prvi). Pridobiti morate prvi zapis o združevanju. Za besedo v oklepaju lahko podate izraz, katerega rezultat bo uporabljen kot odmik od začetka združevanja. Dobljena vrednost mora biti celo število, večje od nič. Na primer First(3) - pridobivanje tretjega zapisa od začetka združevanja.

    Če je prvi vnos zunaj skupine, se šteje, da vnosov ni. Na primer, če obstajajo 3 zapisi in želite dobiti First(4) , potem se šteje, da ni zapisov.

    · Zadnji (zadnji). Pridobiti morate najnovejši vnos skupine. Za besedo v oklepaju lahko podate izraz, katerega rezultat bo uporabljen kot odmik od konca združevanja. Dobljena vrednost mora biti celo število, večje od nič. Na primer Last(3) - pridobite tretji zapis s konca razvrščanja.

    Če je zadnji vnos zunaj skupine, se šteje, da vnosov ni. Na primer, če obstajajo 3 zapisi in želite dobiti Last(4), potem se šteje, da ni zapisov.

    · Prejšnji (Prejšnji). Pridobiti morate prejšnji vnos skupine. Za besedo v oklepaju lahko podate izraz, katerega rezultat bo uporabljen kot premik nazaj od trenutnega zapisa združevanja. Na primer Previous(2) - pridobi prejšnjega iz prejšnjega zapisa.

    Če je prejšnji zapis izven združevanja (na primer, drugi zapis združevanja zahteva Prejšnji(3) ), se pridobi prvi zapis združevanja.

    Pri pridobivanju prejšnjega zapisa za seštevek se šteje, da je pridobljen prvi zapis.

    · Naprej (Naslednji). Dobiti morate naslednji vnos skupine. Za besedo v oklepaju lahko podate izraz, katerega rezultat bo uporabljen kot premik naprej od trenutnega skupinskega zapisa. Na primer Next(2) - pridobite naslednjega iz naslednjega zapisa.

    Če naslednji zapis presega združevanje, se šteje, da zapisov ni. Na primer, če so 3 zapisi in tretji zapis dobi Next() , potem se šteje, da ni zapisov.

    Ko prejmemo naslednji zapis za skupno vsoto, se šteje, da zapisa ni.

    · Trenutni (trenutni). Pridobiti morate trenutni vnos.

    Ko se pridobi za skupno vsoto, se pridobi prvi zapis.

    · LimitingValue(mejna vrednost). Potreba po pridobitvi zapisa po določeni vrednosti. Po besedi LimitingValue v oklepajih morate podati izraz, z vrednostjo katerega želite začeti fragment, prvo polje za urejanje.

    Zapis bo prvi zapis, katerega vrednost polja za naročilo je večja ali enaka navedeni vrednosti. Če na primer uporabite polje Obdobje kot polje za naročanje in ima vrednosti 01/01/2010 , 02/01/2010 , 03/01/2010 in želite dobiti LimitValue(DatumTime(2010, 1, 15)), potem bo prejet zapisnik z datumom 01.02.2010.

    Vrsta: vrstica. Navedeni so izrazi, ločeni z vejico, ki opisujejo pravila razvrščanja. Če ni določeno, se razvrščanje izvede na enak način kot za združevanje, za katerega se ocenjuje izraz. Vsakemu izrazu lahko sledi ključna beseda Asc(za naraščajoči vrstni red), Padajoče(v padajočem vrstnem redu) in Samodejno urejanje(za razvrščanje referenčnih polj po poljih, po katerih želite razvrstiti predmet, na katerega se sklicujete). Beseda Samodejno urejanje se lahko uporablja kot z besedo Asc, in z besedo Padajoče.

    Vrsta: vrstica. Enako kot parameter Razvrščanje. Uporablja se za urejanje hierarhičnih zapisov. Če ni določeno, izdelovalec postavitve ustvari razvrstitev v skladu z vrstnim redom, navedenim v parametru Razvrščanje.

    Vrsta: vrstica. Določa pravilo za določitev prejšnjega ali naslednjega zapisa, če obstaja več zapisov z isto vrednostjo zaporedja:

    · Ločeno označuje, da se za določitev prejšnjega in naslednjega zapisa uporablja zaporedje urejenih zapisov. Privzeta vrednost.

    · Skupaj (skupaj) označuje, da sta prejšnji in naslednji zapis določena na podlagi vrednosti ukaznih izrazov.

    Na primer, če je dobljeno zaporedje razvrščeno po datumu:

    datum Polno ime Pomen
    1 1. januarja 2001

    Ivanov M.

    10
    2 2. januarja 2001 Petrov S. 20
    3 3. januar 2001 Sidorov R. 30
    4 4. januarja 2001 Petrov S. 40

    Ločeno, potem:

    § prejšnji vnos v vnos 3 bo vnos 2.

    tok, tok(oziroma parametri Začni in Konec), potem bo za zapis 2 ta fragment sestavljen iz enega zapisa 2. Izraz bo enak 20.

    Če je vrednost parametra Skupaj, potem:

    § prejšnji vnos v vnos 3 bo vnos 1.

    § če je izračunani fragment definiran kot tok, tok(oziroma parametri Začni in Konec), potem bo za zapis 2 ta fragment sestavljen iz zapisov 2 in 3. Izraz CalculateExpression("Sum(Value)", Current, Current) bo enako 50.

    Ko podate vrednost parametra, ki je enaka Skupaj, v parametrih Začni in Konec ne morete podati odmika za pozicije Prvi, Zadnji, Prejšnji, Naslednji.

    CalculateExpression("Znesek(ZnesekTurnover)", "Prvi", "Trenutni")

    Če želite dobiti vrednost združevanja v prejšnji vrstici, lahko uporabite naslednji izraz:

    CalculateExpression("Tečaj", "Prejšnji")

    Seznam novo Lastnosti:

    ComputeExpressionGroupedArray(,) -

    Funkcija vrne matriko, katere vsak element vsebuje rezultat vrednotenja izraza za združevanje po določenem polju.

    ComputeExpressionGroupedValueTable(,) -

    Funkcija vrne tabelo vrednosti, katere vsaka vrstica vsebuje rezultat vrednotenja izrazov za združevanje po določenem polju

    ValueFilled() – Vrne True, če je vrednost drugačna od privzete vrednosti te vrste, razen NULL, razen ničelne reference, razen Undefined. Logične vrednosti so testirane glede na NULL. Pri nizih se preverjajo znaki, ki niso presledki.

    Format(, ) – Pridobite oblikovan niz posredovane vrednosti. Niz formata je nastavljen v skladu z nizom formata sistema 1C:Enterprise.

    Podniz(, , ) – Ta funkcija je zasnovana za izbiro podniza iz niza.

    Dolžina niza() – Funkcija je zasnovana za določanje dolžine niza. Parameter je izraz vrste niza

    vrstica() - Če je matrika posredovana kot parameter, potem funkcija vrne niz, ki vsebuje nizovne predstavitve vseh elementov matrike, ločene z znaki ";". Če je tabela vrednosti posredovana kot parameter, potem funkcija vrne niz, ki vsebuje nizovne predstavitve vseh vrstic tabele vrednosti, in predstavitve celic vsake vrstice so ločene z znaki "; " in vrsticami so ločeni z znakom nove vrstice. Če ima kateri koli element prazen niz, se namesto njegove predstavitve prikaže niz.

    V tem kratkem zapisu želim pokazati, kako lahko povzamete vrednosti na različnih ravneh združevanja v poročilu z uporabo sistema za sestavo podatkov.
    Kot je prikazano na sliki, se samo na ravni združevanja "Skupine artiklov" izračuna vir "Naročilo", ki prikazuje, koliko je treba naročiti za trenutno skupino artiklov glede na določene pogoje:


    To vrednost je mogoče izračunati samo na tej ravni združevanja, ker nad ali pod njo ni vrednosti za izračun. Na ravni podrobnih evidenc na primer ni podatka o največjem številu v skupini, ker ti podatki veljajo le za skupino kot celoto, ne pa tudi za njene posamezne komponente.

    V skladu s tem je zdaj treba izračunati vsote za višje skupine (»Skladišča«, »Vrste skladišč«) in vsoto.
    Za to se uporablja funkcija Izračunaj izraz z združenim nizom:
    VREDNOTI IZRAZ ZA ZDRUŽIVANJE MRIŽEV (EVALEXPRESSIONWITHGROUPARRAY)
    sintaksa:
    ComputeExpressionGroupedArray(,)
    Opis:
    Funkcija vrne matriko, katere vsak element vsebuje rezultat vrednotenja izraza za združevanje po določenem polju.
    Graditelj postavitve pri ustvarjanju postavitve pretvori parametre funkcije v polja postavitve podatkov. Na primer, polje Račun bo pretvorjeno v Nabor podatkov. Račun.
    Graditelj postavitve pri generiranju izrazov za prikaz polja po meri, katerega izraz vsebuje samo funkcijo CalculateArrayWithGroupArray(), generira izhodni izraz na tak način, da so izhodne informacije urejene. Na primer, za polje po meri z izrazom:

    Izračunaj ExpressionWith GroupingArray("Znesek(ZnesekTurnover)", "Nasprotna stranka")
    Graditelj postavitve bo za izhod ustvaril naslednji izraz:

    ConcatenateStrings(Array(Order(CalculateExpressionWithGroupingValueTable("View(Amount(DataSet.AmountTurnover)),Amount(DataSet.AmountTurnover)","DataSet.Counterparty"),"2")))

    Parametri:

    Vrsta: vrvica. Izraz, ki ga je treba ovrednotiti. Niz, na primer Amount(AmountTurnover).

    Vrsta: vrvica. Združevanje izrazov polj – združevanje izrazov polj, ločenih z vejicami. Na primer izvajalec, stranka.

    Vrsta: vrvica. Izraz, ki opisuje filter, uporabljen za zapise podrobnosti. Agregatne funkcije niso podprte v izrazu. Na primer, DeletionMark = False.

    Vrsta: vrvica. Izraz, ki opisuje filter, uporabljen za skupinske zapise. Na primer, Znesek(ZnesekTurnover) > &Parameter1.
    Primer:

    Največja(Izračunaj izraz z matriko GroupingArray("Znesek(ZnesekObrtek)", "Nasprotna stranka"));

    Podroben opis sintakse funkcije je na voljo na http://its.1c.ru/db/v837doc#bookmark:dev:TI000000582
    Zdaj za izračun bomo podvojili polje »Naročilo« z različnimi vrednostmi »Izračunaj po ...«, z uporabo naslednjih izrazov, upoštevajte, da so na vsaki višji ravni vrednosti nivojev pod stanjem uporabljajo se skupine.

    Kot rezultat dobimo naslednjo konstrukcijo:

    
    Vrh