Kako postaviti pametne telefone i računala. Informativni portal
  • Dom
  • Windows Phone
  • Izražavanje u parametrima SKD 1s 8.2. Jezik izražavanja sustava sastava podataka (1Cv8)

Izražavanje u parametrima SKD 1s 8.2. Jezik izražavanja sustava sastava podataka (1Cv8)

U ovoj kratkoj bilješci želim pokazati kako možete sažeti vrijednosti na različitim razinama grupiranja u izvješću pomoću sustava za sastavljanje podataka.
Kao što je prikazano na slici, samo na razini grupiranja "Grupe artikala", izračunava se resurs "Narudžba", prikazuje koliko je potrebno naručiti za trenutnu grupu artikala na temelju određenih uvjeta:


Ova se vrijednost može izračunati samo na ovoj razini grupiranja, budući da nema vrijednosti iznad ili ispod za izračunavanje. Primjerice, na razini detaljne evidencije ne postoji podatak o maksimalnoj količini u skupini, jer taj podatak vrijedi samo za skupinu u cjelini, a ne za njezine pojedine sastavnice.

Sukladno tome, sada je potrebno izračunati ukupne iznose za gornje grupe (“Skladišta”, “Vrste skladišta”) i ukupni zbroj.
Da biste to učinili, upotrijebite funkciju CalculateExpressionWithGroupArray:
PROCJENI IZRAZ SA GRUPNIM NIZOM (EVALEXPRESSIONWITHGROUPARRAY)
Sintaksa:
EvaluateExpressionWithGroupArray(,)
Opis:
Funkcija vraća polje čiji svaki element sadrži rezultat procjene izraza za grupiranje prema navedenom polju.
Sastavljač izgleda, prilikom generiranja izgleda, pretvara parametre funkcije u termine polja izgleda sastava podataka. Na primjer, polje Account će se pretvoriti u DataSet.Account.
Alat za izradu izgleda, kada generira izraze za izlaz prilagođenog polja čiji izraz sadrži samo funkciju CalculateArrayWithGroupArray(), generira izlazni izraz tako da su izlazne informacije poredane. Na primjer, za prilagođeno polje s izrazom:

CalculateExpressionWithGroupArray("Iznos(IznosPrometa)", "Protustrana strana")
Alat za izradu izgleda će generirati sljedeći izraz za izlaz:

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

Mogućnosti:

Tip: Žica. Izraz koji se procjenjuje. String, na primjer, Iznos(IznosPrometa).

Tip: Žica. Izrazi polja grupiranja – izrazi polja grupiranja, odvojeni zarezima. Na primjer, izvođač, strana.

Tip: Žica. Izraz koji opisuje odabir primijenjen na detaljne zapise. Izraz ne podržava korištenje agregatnih funkcija. Na primjer, DeletionFlag = False.

Tip: Žica. Izraz koji opisuje odabir primijenjen na grupne zapise. Na primjer, Iznos(IznosPrometa) > &Parametar1.
Primjer:

Maximum(CalculateExpressionWithGroupArray("Iznos(IznosPrometa)", "Protustrana strana"));

Detaljan opis sintakse funkcije može se pronaći na http://its.1c.ru/db/v837doc#bookmark:dev:TI000000582
Sada, za izračun, dupliciramo polje "Redoslijed", s različitim vrijednostima "Izračunaj do...", koristeći sljedeće izraze, imajte na umu da se u svakoj višoj razini koriste vrijednosti razina ispod grupiranja .

Kao rezultat, dobivamo sljedeću konstrukciju:

Sadržaj
1 Izražajni jezik sustava sastava podataka
2 Literali
2.1 Niz
2.2 Broj
2.3 Datum
2.4 Booleov
2.5 Značenje
3 Operacije s brojevima
3.1 Unarni –
3.2 Unarni +
3.3 Binarno -
3.4 Binarno+
3.5 Rad
3.6 Podjela
3.7 Ostatak
4 String operacije
4.1 Ulančavanje (binarno +)
4.2 Slično
5 Operacije usporedbe
5.1 Jednako
5.2 Nije jednako
5.3 manje
5.4 Više
5.5 Manje ili jednako
5.6 Veće ili jednako
5.7 Operacija B
5.8 Operacija provjere prisutnosti vrijednosti u skupu podataka
5.9 Operacija provjere vrijednosti za NULL
5.10 Operacija provjere vrijednosti za NULL nejednakost
6 Logičke operacije
6.1 Rad NOT
6.2 Operacija I
6.3 Operacija ILI
7 Funkcije agregata
7.1 Iznos
7.2 Količina
7.3 Broj različitih
7.4 Maksimalno
7,5 Minimalno
7,6 Prosjek
8 Ostale operacije
8.1 Operacija SELECT
9 Pravila za usporedbu dviju vrijednosti
10 Rad s NULL vrijednošću
11 Operativni prioriteti
12 Funkcije jezika izraza sustava za komponiranje podataka
12.1 Izračunajte
12.2 Razina
12.3 Broj u redu
12.4 Redoslijed brojeva u grupiranju
12.5 Format
12.6 Početak razdoblja
12.7 Kraj razdoblja
12.8 Dodaj na datum
12.9 Razlika u datumu
12.10 Podniz
12.11 Duljina linije
12.12 Godina
12.13 četvrtina
12.14 mjesec
12.15 Dan godine
12.16 dan
12.17 tjedan
12.18 Dan u tjednu
12.19 sati
12.20 minuta
12.21 Drugi
12.22 Ekspresno
12.23 YesNull
12.24 Funkcije zajedničkih modula

Izražajni jezik sustava sastava podataka

Jezik izraza sustava za sastavljanje podataka dizajniran je za pisanje izraza koji se koriste u različitim dijelovima sustava.

Izrazi se koriste u sljedećim podsustavima:

  • dijagram rasporeda podataka - za opisivanje izračunatih polja, ukupnih polja, izraza veze itd.;
  • postavke izgleda podataka - za opisivanje prilagođenih izraza polja;
  • izgled izgleda podataka - za opisivanje izraza za povezivanje skupova podataka, opisivanje parametara izgleda itd.

Literali

Izraz može sadržavati literale. Moguće su sljedeće vrste literala:

  • Crta;
  • Broj;
  • Datum od;
  • Booleov.

Crta

String literal je napisan znakovima “”, na primjer:

“String literal”


Ako trebate koristiti znak “” unutar literala niza, trebali biste koristiti dva takva znaka.

Na primjer:

“Doslovno ““pod navodnicima”““

Broj

Broj se ispisuje bez razmaka, u decimalnom formatu. Razlomak se odvaja simbolom "." Na primjer:

datum

Datumski literal se piše korištenjem ključnog literala DATETIME. Nakon ove ključne riječi, godina, mjesec, dan, sati, minute, sekunde navedeni su u zagradama, odvojeni zarezima. Specifikacija vremena nije potrebna.

Na primjer:
DATETIME (1975, 1, 06) – 6. siječnja 1975
DATETIME(2006, 12, 2, 23, 56, 57) – 2. prosinca 2006., 23 sata 56 minuta 57 sekundi, 23 sata 56 minuta 57 sekundi

Booleov

Booleove vrijednosti mogu se napisati pomoću literala True (True), False (False).

Značenje

Za navođenje literala drugih tipova (sustavna enumeracija, unaprijed definirani podaci) koristi se ključna riječ Value, iza koje slijedi naziv literala u zagradama.
Vrijednost (AccountType. Active)

Operacije nad brojevima

Unarni –

Ova operacija je namijenjena za promjenu predznaka broja u suprotni predznak. Na primjer:
-Prodaja.Količina

Unarni +

Ova operacija ne izvodi nikakve radnje na broju. Na primjer:
+Prodaja.Količina

Binarno -

Ova operacija je namijenjena za izračunavanje razlike dvaju brojeva. Na primjer:
RemainsAndTurnover.InitialRemainder – RemainsAndTurnover.FinalRemainder
RemainsAndTurnover.InitialRemaining - 100
400 – 357

Binarno +

Ova operacija je dizajnirana za izračunavanje zbroja dvaju brojeva. Na primjer:
RemainsAndTurnover.InitialRemaining + RemainsAndTurnover.Turnover
RemainsAndTurnover.InitialRemaining + 100
400 + 357

Raditi

Ova operacija je dizajnirana za izračunavanje umnoška dvaju brojeva. Na primjer:
Nomenklatura.Cijena * 1.2
2 * 3.14

Podjela

Ova je operacija osmišljena za dobivanje rezultata dijeljenja jednog operanda s drugim. Na primjer:
Nomenklatura.Cijena / 1.2
2 / 3.14

Ostatak podjele

Ova operacija je dizajnirana za dobivanje ostatka kada se jedan operand podijeli s drugim. Na primjer:
Nomenklatura.Cijena% 1.2
2 % 3.14

Operacije nizova

Ulančanje (binarno +)

Ova operacija je dizajnirana za spajanje dva niza. Na primjer:
Nomenklatura.Članak + “: ”+ Nomenklatura.Naziv

Kao

Ovom operacijom se provjerava odgovara li niz proslijeđenom uzorku.

Vrijednost LIKE operatora je TRUE ako vrijednost<Выражения>zadovoljava obrazac, a FALSE inače.

Sljedeći likovi u<Строке_шаблона>imaju značenje različito od drugog znaka u retku:

  • % - postotak: niz koji sadrži nula ili više proizvoljnih znakova;
  • _ - podvlaka: jedan proizvoljan znak;
  • […] - jedan ili više znakova u uglatim zagradama: jedan znak, bilo koji od onih navedenih unutar uglatih zagrada. Nabrajanje može sadržavati raspone, na primjer a-z, što znači proizvoljni znak uključen u raspon, uključujući krajeve raspona;
  • [^...] - u uglatim zagradama ikona negacije iza koje slijedi jedan ili više znakova: bilo koji znak osim onih navedenih nakon ikone negacije;

Bilo koji drugi simbol znači sam za sebe i ne nosi nikakvo dodatno opterećenje. Ako jedan od navedenih znakova treba biti napisan kao sam, tada mu mora prethoditi<Спецсимвол>, navedeno nakon ključne riječi SPECIAL CHARACTER (ESCAPE).

Na primjer, predložak
“%ABV[abvg]\_abv%” POSEBAN ZNAK “\”

označava podniz koji se sastoji od niza znakova: slovo A; slova B; slova B; jedna znamenka; jedno od slova a, b, c ili d; donja crta; slova a; slova b; slova v. Štoviše, ovaj niz se može locirati počevši od proizvoljne pozicije u retku.

Operacije usporedbe

Jednako

Ova operacija je namijenjena za usporedbu dvaju operanda radi jednakosti. Na primjer:
Sales.Counterparty = Sales.NomenclatureMainSupplier

Nejednak

Ova operacija je namijenjena za usporedbu dva operanda za nejednakost. Na primjer:
Prodaja Prodaja druge strane Nomenklatura Glavni dobavljač

Manje

Ova operacija je dizajnirana da provjeri je li prvi operand manji od drugog. Na primjer:
SalesCurrent.Amount

Više

Ova operacija je osmišljena da provjeri je li prvi operand veći od drugog. Na primjer:
SalesCurrent.Sum > SalesPast.Sum

Manje ili jednako

Ova operacija je osmišljena da provjeri je li prvi operand manji ili jednak drugom. Na primjer:
SalesCurrent.Amount

Više ili jednako

Ova operacija je osmišljena da provjeri je li prvi operand veći ili jednak drugom. Na primjer:
SalesCurrent.Amount >= SalesPast.Amount

Operacija B

Ova operacija provjerava prisutnost vrijednosti u proslijeđenom popisu vrijednosti. Rezultat operacije bit će True ako je vrijednost pronađena ili False u suprotnom. Na primjer:
Stavka B (&Proizvod1, &Proizvod2)

Operacija provjere prisutnosti vrijednosti u skupu podataka

Operacijom se provjerava prisutnost vrijednosti u navedenom skupu podataka. Skup podataka za provjeru valjanosti mora sadržavati jedno polje. Na primjer:
Prodaja. Druga ugovorna strana prema drugim ugovornim stranama

Operacija provjere vrijednosti za NULL

Ova operacija vraća True ako je vrijednost NULL. Na primjer:
Prodaja. Suprotna ugovorna strana JE NIŠTAVNA

Operacija provjere vrijednosti za NULL nejednakost

Ova operacija vraća True ako vrijednost nije NULL. Na primjer:
Prodaja. Protustrana strana NIJE NIŠTAVNA

Logičke operacije

Logičke operacije prihvaćaju izraze tipa Boolean kao operande.

Operacija NOT

Operacija NOT vraća True ako je njen operand False i False ako je njen operand True. Na primjer:
NIJE Dokument.Primatelj = Dokument.Pošiljatelj

Operacija I

Operacija AND vraća True ako su oba operanda True i False ako je jedan od operanda False. Na primjer:
Document.Consignee = Document.Consignor I Document.Consignee = &Druga strana

ILI operacija

Operacija ILI vraća True ako je jedan od njenih operanda True, i False ako su oba operanda False. Na primjer:
Document.Consignee = Document.Consignor ILI Document.Consignee = &Counterparty

Agregatne funkcije

Skupne funkcije izvode neke radnje na skupu podataka.

Iznos

Zbirna funkcija Sum izračunava zbroj vrijednosti izraza koji su joj proslijeđeni kao argument za sve zapise detalja. Na primjer:
Iznos(Prodaja.IznosPrometa)

Količina

Funkcija Count izračunava broj vrijednosti osim NULL. Na primjer:
Količina (Prodaja. Suprotna strana)

Broj različitih

Ova funkcija izračunava broj različitih vrijednosti. Na primjer:
Količina (razne prodaje. Protustrana)

Maksimum

Funkcija dobiva maksimalnu vrijednost. Na primjer:
Maksimalno (preostalo.količina)

Minimum

Funkcija dobiva minimalnu vrijednost. Na primjer:
Minimum (preostala. količina)

Prosjek

Funkcija dobiva prosjek vrijednosti koje nisu NULL. Na primjer:
Prosjek (preostalo.količina)

Ostale operacije

Operacija SELECT

Operacija Select namijenjena je odabiru jedne od nekoliko vrijednosti kada su ispunjeni određeni uvjeti. Na primjer:
Odaberite When Amount > 1000 Zatim Amount Inače 0 End

Pravila za usporedbu dviju vrijednosti

Ako se vrste vrijednosti koje se uspoređuju razlikuju jedna od druge, tada se odnosi između vrijednosti određuju na temelju prvenstva vrsta:
NULL (najniža);
Booleov;
Broj;
Datum od;
Crta;
Referentne vrste

Odnosi između različitih vrsta referenci određuju se na temelju referentnih brojeva tablica koje odgovaraju određenoj vrsti.

Ako su tipovi podataka isti, tada se vrijednosti uspoređuju prema sljedećim pravilima:
za Boolean tip vrijednost TRUE je veća od vrijednosti FALSE;
tip Number ima uobičajena pravila usporedbe za brojeve;
za tip Datum, raniji datumi su manji od kasnijih;
za tip String - usporedba nizova u skladu s utvrđenim nacionalnim obilježjima baze podataka;
referentni tipovi se uspoređuju na temelju njihovih vrijednosti (broj zapisa itd.).

Rad s NULL vrijednošću

Svaka operacija u kojoj je jedan od operanda NULL proizvest će rezultat NULL.

Postoje iznimke:
Operacija AND vratit će NULL samo ako nijedan od operanda nije False;
Operacija OR vratit će NULL samo ako nijedan od njezinih operanda nije True.

Operativni prioriteti

Operacije imaju sljedeće prioritete (prva linija ima najniži prioritet):
ILI;
I;
NE;
B, JE NULL, NIJE NULL;
=, <>, <=, <, >=, >;
Binarno +, Binarno – ;
*, /, %;
Unarni +, Unarni -.

Kompozicija podataka Sustav Izraz Jezične funkcije

Izračunati

Funkcija Calculate dizajnirana je za izračunavanje izraza u kontekstu određenog grupiranja. Funkcija ima sljedeće parametre:
Izraz. Tip String. Sadrži izračunati izraz;
Grupiranje. Tip String. Sadrži naziv grupiranja u čijem kontekstu se izraz treba procijeniti. Ako se kao naziv grupiranja koristi prazan niz, izračun će se izvesti u kontekstu trenutnog grupiranja. Ako se niz GrandTotal koristi kao naziv grupe, izračun će se izvršiti u kontekstu ukupnog zbroja. Inače će se izračun izvršiti u kontekstu nadređene grupe s istim imenom. Na primjer:
Suma(Sales.SumTurnover) / Izračunaj("Sum(Sales.SumTurnover)", "Ukupno")

U ovom primjeru, rezultat će biti omjer iznosa za polje "Sales.AmountTurnover" zapisa grupiranja i iznosa istog polja u cijelom izgledu.

Razina

Funkcija je dizajnirana za dobivanje trenutne razine snimanja.

Primjer:
Razina()

NumberInOrder

Dobijte sljedeći redni broj.

Primjer:
Broj Po Redu()

NumberInOrderInGrouping

Vraća sljedeći redni broj u trenutnom grupiranju.

Primjer:
BrojPoReduUGrupi()

Format

Dobijte formatirani niz proslijeđene vrijednosti.

Niz formata postavlja se u skladu s nizom formata 1C:Enterprise.

Mogućnosti:
Značenje;
Oblikovanje niza.

Primjer:
Format(Fakture za potrošnu robu.Iznos dokumenta, "NPV=2")

Početak razdoblja

Mogućnosti:

    • Minuta;
    • Dan;
    • Tjedan;
    • Mjesec;
    • Četvrtina;
    • Desetljeće;
    • Pola godine.

Primjer:
Početni period(DatumVrijeme(2002, 10, 12, 10, 15, 34), "Mjesec")

Proizlaziti:

01.10.2002 0:00:00

Kraj razdoblja

Funkcija je dizajnirana za izdvajanje određenog datuma iz zadanog datuma.

Mogućnosti:

  • Datum od. Upišite Datum. Navedeni datum;
  • Vrsta razdoblja. Tip String. Sadrži jednu od sljedećih vrijednosti:
    • Minuta;
    • Dan;
    • Tjedan;
    • Mjesec;
    • Četvrtina;
    • Desetljeće;
    • Pola godine.

Primjer:
EndPeriod(DateTime(2002, 10, 12, 10, 15, 34), "Tjedan")

Proizlaziti:

13.10.2002 23:59:59

DodajDatumu

Funkcija je dizajnirana za dodavanje određene vrijednosti datumu.

Mogućnosti:

  • Vrsta povećanja. Tip String. Sadrži jednu od sljedećih vrijednosti:
    • Minuta;
    • Dan;
    • Tjedan;
    • Mjesec;
    • Četvrtina;
    • Desetljeće;
    • Pola godine.
Iznos – za koliko trebate povećati datum. Vrsta broja. Razlomački dio se zanemaruje.

Primjer:
DodajDatumu(DatumVrijeme(2002, 10, 12, 10, 15, 34), "Mjesec", 1)

Proizlaziti:

12.11.2002 10:15:34

Datumska razlika

Funkcija je dizajnirana da dobije razliku između dva datuma.

Mogućnosti:

  • Izraz. Upišite Datum. Izvorni datum;
  • Izraz. Upišite Datum. Oduzeti datum;
  • Vrsta razlike. Tip String. Sadrži jednu od sljedećih vrijednosti:
    • Drugi;
    • Minuta;
    • Dan;
    • Mjesec;
    • Četvrtina;

Primjer:
DATEDIFFERENCE(DATUMVRIJEME(2002, 10, 12, 10, 15, 34),
DATUMVRIJEME(2002, 10, 14, 9, 18, 06), "DAN")

Proizlaziti:

Podniz

Ova je funkcija dizajnirana za izdvajanje podniza iz niza.

Mogućnosti:

  • Crta. Tip String. Niz iz kojeg je izdvojen podniz;
  • Položaj. Vrsta broja. Položaj znaka od kojeg počinje podniz koji se izdvaja iz niza;
  • Duljina. Vrsta broja. Duljina dodijeljenog podniza.

Primjer:
PODNIZ(Računi.Adresa, 1, 4)

Duljina linije

Funkcija je dizajnirana za određivanje duljine niza.

Parametar:
Crta. Tip String. Niz čija je duljina određena.

Primjer:
Redak (Druge strane. Adresa)

Ova je funkcija dizajnirana za izdvajanje godine iz vrijednosti tipa Datum.

Parametar:
Datum od. Upišite Datum. Datum prema kojem se utvrđuje godina.

YEAR(Troškovi.Datum)

Četvrtina

Ova je funkcija dizajnirana za izdvajanje broja kvartala iz vrijednosti tipa Datum. Broj četvrtine obično se kreće od 1 do 4.

Parametar
Datum od. Upišite Datum. Datum do kojeg se utvrđuje kvartal

QUARTER(Troškovi.Datum)

Mjesec

Ova je funkcija dizajnirana za izdvajanje broja mjeseca iz vrijednosti tipa Datum. Broj mjeseca obično se kreće od 1 do 12.
Datum od. Upišite Datum. Datum prema kojem se određuje mjesec.
MONTH(Troškovi.Datum)

Dan u godini

Ova je funkcija dizajnirana za dobivanje dana u godini iz vrijednosti tipa datuma. Dan u godini obično se kreće od 1 do 365 (366).
Datum od. Upišite Datum. Datum prema kojem se određuje dan u godini.
DAYYEAR(Račun Troškova.Datum)

Dan

Ova je funkcija dizajnirana za dobivanje dana u mjesecu iz vrijednosti tipa Datum. Dan u mjesecu obično se kreće od 1 do 31.
Datum od. Upišite Datum. Datum prema kojem se određuje dan u mjesecu.
DAY(Troškovi.Datum)

Tjedan

Ova je funkcija dizajnirana za dobivanje broja tjedna u godini iz vrijednosti tipa Datum. Tjedni u godini numerirani su počevši od 1.
Datum od. Upišite Datum. Datum do kojeg se određuju brojevi tjedana.
TJEDAN(Troškovi.Datum)

Dan u tjednu

Ova je funkcija dizajnirana za dobivanje dana u tjednu iz vrijednosti tipa Datum. Uobičajeni dan u tjednu kreće se od 1 (ponedjeljak) do 7 (nedjelja).
Datum od. Upišite Datum. Datum prema kojem se određuje dan u tjednu.
DAN U TJEDNU (trošak. datum)

Ova je funkcija dizajnirana za dobivanje sata u danu iz vrijednosti tipa datuma. Sat u danu kreće se od 0 do 23.
Datum od. Upišite Datum. Datum prema kojem se određuje sat u danu.
SAT(Troškovi.Datum)

Minuta

Ova je funkcija osmišljena za dobivanje minute sata iz vrijednosti tipa datuma. Minuta sata kreće se od 0 do 59.
Datum od. Upišite Datum. Datum do kojeg se određuje minuta u satu.
MINUTE(Troškovi.Datum)

Drugi

Ova je funkcija osmišljena za dobivanje sekunde minute iz vrijednosti tipa datuma. Sekunda minute kreće se od 0 do 59.
Datum od. Upišite Datum. Datum prema kojem se određuju sekunde minute.
SECOND(Troškovi.Datum)

Izraziti

Ova je funkcija dizajnirana za izdvajanje tipa iz izraza koji može sadržavati složeni tip. Ako izraz sadrži tip koji nije traženi, vratit će se NULL.

Mogućnosti:
Izraz za pretvorbu;
Oznaka tipa. Tip String. Sadrži niz tipa. Na primjer, "Broj", "Niz" itd. Osim primitivnih tipova, ovaj red može sadržavati naziv tablice. U ovom slučaju, pokušat će se izraziti referenca na navedenu tablicu.

Primjer:
Express(Data.Props1, "Broj(10,3)")

IsNull

Ova funkcija vraća vrijednost drugog parametra ako je vrijednost prvog parametra NULL.

U suprotnom će se vratiti vrijednost prvog parametra.

Primjer:
YesNULL(Iznos(Prodaja.IznosPrometa), 0)

Funkcije zajedničkih modula

Izraz stroja za sastavljanje podataka može sadržavati pozive funkcija globalnih zajedničkih konfiguracijskih modula. Za pozivanje takvih funkcija nije potrebna nikakva dodatna sintaksa.

Primjer:
Skraćeni naziv(Dokumenti.Veza, Dokumenti.Datum, Dokumenti.Broj)

U ovom primjeru, funkcija "AbbreviatedName" bit će pozvana iz općeg konfiguracijskog modula.

Imajte na umu da je korištenje uobičajenih funkcija modula dopušteno samo ako je naveden odgovarajući parametar procesora za sastav podataka.

Osim toga, funkcije zajedničkih modula ne mogu se koristiti u prilagođenim izrazima polja.

[morate se registrirati da vidite link]

Izražajni jezik sustava sastava podataka

Jezik izraza sustava za sastavljanje podataka dizajniran je za pisanje izraza koji se koriste u različitim dijelovima sustava.

Izrazi se koriste u sljedećim podsustavima:

  • dijagram rasporeda podataka - za opisivanje izračunatih polja, ukupnih polja, izraza veze itd.;
  • postavke izgleda podataka - za opisivanje prilagođenih izraza polja;
  • izgled izgleda podataka - za opisivanje izraza za povezivanje skupova podataka, opisivanje parametara izgleda itd.

Literali

Izraz može sadržavati literale. Moguće su sljedeće vrste literala:

  • Crta;
  • Broj;
  • Datum od;
  • Booleov.

Crta

String literal je napisan znakovima “”, na primjer:

“String literal”

Ako trebate koristiti znak “” unutar literala niza, trebali biste koristiti dva takva znaka.

Na primjer:

“Doslovno ““pod navodnicima”““

Broj

Broj se ispisuje bez razmaka, u decimalnom formatu. Razlomak se odvaja simbolom "." Na primjer:

10.5 200

datum

Datumski literal se piše korištenjem ključnog literala DATETIME. Nakon ove ključne riječi, godina, mjesec, dan, sati, minute, sekunde navedeni su u zagradama, odvojeni zarezima. Specifikacija vremena nije potrebna.

Na primjer:

DATETIME(1975, 1, 06) – 6. siječnja 1975. DATETIME(2006, 12, 2, 23, 56, 57) – 2. prosinca 2006., 23 sata 56 minuta 57 sekundi, 23 sata 56 minuta 57 sekundi

Booleov

Booleove vrijednosti mogu se napisati pomoću literala True (True), False (False).

Značenje

Za navođenje literala drugih tipova (sustavna enumeracija, unaprijed definirani podaci) koristi se ključna riječ Value, iza koje slijedi naziv literala u zagradama.

Vrijednost (AccountType. Active)

Operacije nad brojevima

Unarni –

Ova operacija je namijenjena za promjenu predznaka broja u suprotni predznak. Na primjer:

Prodaja. Količina

Unarni +

Ova operacija ne izvodi nikakve radnje na broju. Na primjer:

Prodaja. Količina

Binarno -

Ova operacija je namijenjena za izračunavanje razlike dvaju brojeva. Na primjer:

ResidualsAndTurnovers.InitialRemaining – RemainingsAndTurnovers.FinalResidualsRemainingsAndTurnovers.InitialRemaining - 100 400 – 357

Binarno +

Ova operacija je dizajnirana za izračunavanje zbroja dvaju brojeva. Na primjer:

RemainingsAndTurnover.InitialRemaining + RemainingAndTurnover.Turnover ResiduesAndTurnover.InitialRemaining + 100 400 + 357

Raditi

Ova operacija je dizajnirana za izračunavanje umnoška dvaju brojeva. Na primjer:

Nomenklatura.Cijena * 1.2 2 * 3.14

Podjela

Ova je operacija osmišljena za dobivanje rezultata dijeljenja jednog operanda s drugim. Na primjer:

Nomenklatura.Cijena / 1.2 2 / 3.14

Ostatak podjele

Ova operacija je dizajnirana za dobivanje ostatka kada se jedan operand podijeli s drugim. Na primjer:

Nomenklatura Cijena % 1,2 2 % 3.14

Operacije nizova

Ulančanje (binarno +)

Ova operacija je dizajnirana za spajanje dva niza. Na primjer:

Nomenklatura.Članak + “: ”+ Nomenklatura.Naziv

Kao

Ovom operacijom se provjerava odgovara li niz proslijeđenom uzorku.

Vrijednost LIKE operatora je TRUE ako vrijednost<Выражения>zadovoljava obrazac, a FALSE inače.

Sljedeći likovi u<Строке_шаблона>imaju značenje različito od drugog znaka u retku:

  • % - postotak: niz koji sadrži nula ili više proizvoljnih znakova;
  • _ - podvlaka: jedan proizvoljan znak;
  • […] - jedan ili više znakova u uglatim zagradama: jedan znak, bilo koji od onih navedenih unutar uglatih zagrada. Nabrajanje može sadržavati raspone, na primjer a-z, što znači proizvoljni znak uključen u raspon, uključujući krajeve raspona;
  • [^...] - u uglatim zagradama ikona negacije iza koje slijedi jedan ili više znakova: bilo koji znak osim onih navedenih nakon ikone negacije;

Bilo koji drugi simbol znači sam za sebe i ne nosi nikakvo dodatno opterećenje. Ako jedan od navedenih znakova treba biti napisan kao sam, tada mu mora prethoditi<Спецсимвол>, naveden nakon ključne riječi SPECIAL CHARACTER (ESCAPE).

Na primjer, predložak

“%ABV[abvg]\_abv%” POSEBAN ZNAK “\”

označava podniz koji se sastoji od niza znakova: slovo A; slova B; slova B; jedna znamenka; jedno od slova a, b, c ili d; donja crta; slova a; slova b; slova v. Štoviše, ovaj niz se može locirati počevši od proizvoljne pozicije u retku.

Operacije usporedbe

Jednako

Ova operacija je namijenjena za usporedbu dvaju operanda radi jednakosti. Na primjer:

Sales.Counterparty = Sales.NomenclatureMainSupplier

Nejednak

Ova operacija je namijenjena za usporedbu dva operanda za nejednakost. Na primjer:

Prodaja.Druga strana<>Prodaja.NomenklaturaGlavni dobavljač

Manje

Ova operacija je dizajnirana da provjeri je li prvi operand manji od drugog. Na primjer:

SalesCurrent.Amount< ПродажиПрошлые.Сумма

Više

Ova operacija je osmišljena da provjeri je li prvi operand veći od drugog. Na primjer:

SalesCurrent.Sum > SalesPast.Sum

Manje ili jednako

Ova operacija je osmišljena da provjeri je li prvi operand manji ili jednak drugom. Na primjer:

SalesCurrent.Amount<= ПродажиПрошлые.Сумма

Više ili jednako

Ova operacija je osmišljena da provjeri je li prvi operand veći ili jednak drugom. Na primjer:

SalesCurrent.Amount >= SalesPast.Amount

Operacija B

Ova operacija provjerava prisutnost vrijednosti u proslijeđenom popisu vrijednosti. Rezultat operacije bit će True ako je vrijednost pronađena ili False u suprotnom. Na primjer:

Stavka B (&Proizvod1, &Proizvod2)

Operacija provjere prisutnosti vrijednosti u skupu podataka

Operacijom se provjerava prisutnost vrijednosti u navedenom skupu podataka. Skup podataka za provjeru valjanosti mora sadržavati jedno polje. Na primjer:

Prodaja. Druga ugovorna strana prema drugim ugovornim stranama

Operacija provjere vrijednosti za NULL

Ova operacija vraća True ako je vrijednost NULL. Na primjer:

Prodaja. Suprotna ugovorna strana JE NIŠTAVNA

Operacija provjere vrijednosti za NULL nejednakost

Ova operacija vraća True ako vrijednost nije NULL. Na primjer:

Prodaja. Protustrana strana NIJE NIŠTAVNA

Logičke operacije

Logičke operacije prihvaćaju izraze tipa Boolean kao operande.

Operacija NOT

Operacija NOT vraća True ako je njen operand False i False ako je njen operand True. Na primjer:

NIJE Dokument.Primatelj = Dokument.Pošiljatelj

Operacija I

Operacija AND vraća True ako su oba operanda True i False ako je jedan od operanda False. Na primjer:

Document.Consignee = Document.Consignor I Document.Consignee = &Druga strana

ILI operacija

Operacija ILI vraća True ako je jedan od njenih operanda True, i False ako su oba operanda False. Na primjer:

Document.Consignee = Document.Consignor ILI Document.Consignee = &Counterparty

Agregatne funkcije

Skupne funkcije izvode neke radnje na skupu podataka.

Iznos

Zbirna funkcija Sum izračunava zbroj vrijednosti izraza koji su joj proslijeđeni kao argument za sve zapise detalja. Na primjer:

Iznos(Prodaja.IznosPrometa)

Količina

Funkcija Count izračunava broj vrijednosti osim NULL. Na primjer:

Količina (Prodaja. Suprotna strana)

Broj različitih

Ova funkcija izračunava broj različitih vrijednosti. Na primjer:

Količina (razne prodaje. Protustrana)

Maksimum

Funkcija dobiva maksimalnu vrijednost. Na primjer:

Maksimalno (preostalo.količina)

Minimum

Funkcija dobiva minimalnu vrijednost. Na primjer:

Minimum (preostala. količina)

Prosjek

Funkcija dobiva prosjek vrijednosti koje nisu NULL. Na primjer:

Prosjek (preostalo.količina)

Ostale operacije

Operacija SELECT

Operacija Select namijenjena je odabiru jedne od nekoliko vrijednosti kada su ispunjeni određeni uvjeti. Na primjer:

Odaberite When Amount > 1000 Zatim Amount Inače 0 End

Pravila za usporedbu dviju vrijednosti

Ako se vrste vrijednosti koje se uspoređuju razlikuju jedna od druge, tada se odnosi između vrijednosti određuju na temelju prvenstva vrsta:

  • NULL (najniža);
  • Booleov;
  • Broj;
  • Datum od;
  • Crta;
  • Referentne vrste

Odnosi između različitih vrsta referenci određuju se na temelju referentnih brojeva tablica koje odgovaraju određenoj vrsti.

Ako su tipovi podataka isti, tada se vrijednosti uspoređuju prema sljedećim pravilima:

  • za Boolean tip vrijednost TRUE je veća od vrijednosti FALSE;
  • tip Number ima uobičajena pravila usporedbe za brojeve;
  • za tip Datum, raniji datumi su manji od kasnijih;
  • za tip String - usporedba nizova u skladu s utvrđenim nacionalnim obilježjima baze podataka;
  • referentni tipovi se uspoređuju na temelju njihovih vrijednosti (broj zapisa itd.).

Rad s NULL vrijednošću

Svaka operacija u kojoj je jedan od operanda NULL proizvest će rezultat NULL.

Postoje iznimke:

  • Operacija AND vratit će NULL samo ako nijedan od operanda nije False;
  • Operacija OR vratit će NULL samo ako nijedan od njezinih operanda nije True.

Operativni prioriteti

Operacije imaju sljedeće prioritete (prva linija ima najniži prioritet):

  • B, JE NULL, NIJE NULL;
  • =, <>, <=, <, >=, >;
  • Binarno +, Binarno – ;
  • *, /, %;
  • Unarni +, Unarni -.

Kompozicija podataka Sustav Izraz Jezične funkcije

Izračunati

Funkcija Calculate dizajnirana je za izračunavanje izraza u kontekstu određenog grupiranja. Funkcija ima sljedeće parametre:

  • Izraz. Tip String. Sadrži izračunati izraz;
  • Grupiranje. Tip String. Sadrži naziv grupiranja u čijem kontekstu se izraz treba procijeniti. Ako se kao naziv grupiranja koristi prazan niz, izračun će se izvesti u kontekstu trenutnog grupiranja. Ako se niz GrandTotal koristi kao naziv grupe, izračun će se izvršiti u kontekstu ukupnog zbroja. Inače će se izračun izvršiti u kontekstu nadređene grupe s istim imenom. Na primjer:
Suma(Sales.SumTurnover) / Izračunaj("Sum(Sales.SumTurnover)", "Ukupno")

U ovom primjeru, rezultat će biti omjer iznosa za polje "Sales.AmountTurnover" zapisa grupiranja i iznosa istog polja u cijelom izgledu.

Razina

Funkcija je dizajnirana za dobivanje trenutne razine snimanja.

Razina()

NumberInOrder

Dobijte sljedeći redni broj.

Broj Po Redu()

NumberInOrderInGrouping

Vraća sljedeći redni broj u trenutnom grupiranju.

BrojPoReduUGrupi()

Format

Dobijte formatirani niz proslijeđene vrijednosti.

Niz formata postavlja se u skladu s nizom formata 1C:Enterprise.

Mogućnosti:

  • Značenje;
  • Oblikovanje niza.

Format(Fakture za potrošnu robu.Iznos dokumenta, "NPV=2")

Početak razdoblja

Mogućnosti:

    • Minuta;
    • Dan;
    • Tjedan;
    • Mjesec;
    • Četvrtina;
    • Desetljeće;
    • Pola godine.

Početni period(DatumVrijeme(2002, 10, 12, 10, 15, 34), "Mjesec")

Proizlaziti:

01.10.2002 0:00:00

Kraj razdoblja

Funkcija je dizajnirana za izdvajanje određenog datuma iz zadanog datuma.

Mogućnosti:

  • Datum od. Upišite Datum. Navedeni datum;
  • Vrsta razdoblja. Tip String. Sadrži jednu od sljedećih vrijednosti:
    • Minuta;
    • Dan;
    • Tjedan;
    • Mjesec;
    • Četvrtina;
    • Desetljeće;
    • Pola godine.

EndPeriod(DateTime(2002, 10, 12, 10, 15, 34), "Tjedan")

Proizlaziti:

13.10.2002 23:59:59

DodajDatumu

Funkcija je dizajnirana za dodavanje određene vrijednosti datumu.

Mogućnosti:

  • Vrsta povećanja. Tip String. Sadrži jednu od sljedećih vrijednosti:
    • Minuta;
    • Dan;
    • Tjedan;
    • Mjesec;
    • Četvrtina;
    • Desetljeće;
    • Pola godine.
  • Iznos – za koliko trebate povećati datum. Vrsta broja. Razlomački dio se zanemaruje.

DodajDatumu(DatumVrijeme(2002, 10, 12, 10, 15, 34), "Mjesec", 1)

Proizlaziti:

12.11.2002 10:15:34

Datumska razlika

Funkcija je dizajnirana da dobije razliku između dva datuma.

Mogućnosti:

  • Izraz. Upišite Datum. Izvorni datum;
  • Izraz. Upišite Datum. Oduzeti datum;
  • Vrsta razlike. Tip String. Sadrži jednu od sljedećih vrijednosti:
    • Drugi;
    • Minuta;
    • Dan;
    • Mjesec;
    • Četvrtina;

DATEDIFFERENCE(DATUMVRIJEME(2002, 10, 12, 10, 15, 34), DATETIME(2002, 10, 14, 9, 18, 06), "DAN")

Proizlaziti:

Podniz

Ova je funkcija dizajnirana za izdvajanje podniza iz niza.

Mogućnosti:

  • Crta. Tip String. Niz iz kojeg je izdvojen podniz;
  • Položaj. Vrsta broja. Položaj znaka od kojeg počinje podniz koji se izdvaja iz niza;
  • Duljina. Vrsta broja. Duljina dodijeljenog podniza.

PODNIZ(Računi.Adresa, 1, 4)

Duljina linije

Funkcija je dizajnirana za određivanje duljine niza.

Parametar:

  • Crta. Tip String. Niz čija je duljina određena.

Redak (Druge strane. Adresa)

Godina

Ova je funkcija dizajnirana za izdvajanje godine iz vrijednosti tipa Datum.

Parametar:

  • Datum od. Upišite Datum. Datum prema kojem se utvrđuje godina.

YEAR(Troškovi.Datum)

Četvrtina

Ova je funkcija dizajnirana za izdvajanje broja kvartala iz vrijednosti tipa Datum. Broj četvrtine obično se kreće od 1 do 4.

Parametar

  • Datum od. Upišite Datum. Datum do kojeg se utvrđuje kvartal
QUARTER(Troškovi.Datum)

Mjesec

Ova je funkcija dizajnirana za izdvajanje broja mjeseca iz vrijednosti tipa Datum. Broj mjeseca obično se kreće od 1 do 12.

  • Datum od. Upišite Datum. Datum prema kojem se određuje mjesec.
MONTH(Troškovi.Datum)

Dan u godini

Ova je funkcija dizajnirana za dobivanje dana u godini iz vrijednosti tipa datuma. Dan u godini obično se kreće od 1 do 365 (366).

  • Datum od. Upišite Datum. Datum prema kojem se određuje dan u godini.
DAYYEAR(Račun Troškova.Datum)

Dan

Ova je funkcija dizajnirana za dobivanje dana u mjesecu iz vrijednosti tipa Datum. Dan u mjesecu obično se kreće od 1 do 31.

  • Datum od. Upišite Datum. Datum prema kojem se određuje dan u mjesecu.
DAY(Troškovi.Datum)

Tjedan

Ova je funkcija dizajnirana za dobivanje broja tjedna u godini iz vrijednosti tipa Datum. Tjedni u godini numerirani su počevši od 1.

  • Datum od. Upišite Datum. Datum do kojeg se određuju brojevi tjedana.
TJEDAN(Troškovi.Datum)

Dan u tjednu

Ova je funkcija dizajnirana za dobivanje dana u tjednu iz vrijednosti tipa Datum. Uobičajeni dan u tjednu kreće se od 1 (ponedjeljak) do 7 (nedjelja).

  • Datum od. Upišite Datum. Datum prema kojem se određuje dan u tjednu.
DAN U TJEDNU (trošak. datum)

Sat

Ova je funkcija dizajnirana za dobivanje sata u danu iz vrijednosti tipa datuma. Sat u danu kreće se od 0 do 23.

  • Datum od. Upišite Datum. Datum prema kojem se određuje sat u danu.
SAT(Troškovi.Datum)

Minuta

Ova je funkcija osmišljena za dobivanje minute sata iz vrijednosti tipa datuma. Minuta sata kreće se od 0 do 59.

  • Datum od. Upišite Datum. Datum do kojeg se određuje minuta u satu.
MINUTE(Troškovi.Datum)

Drugi

Ova je funkcija osmišljena za dobivanje sekunde minute iz vrijednosti tipa datuma. Sekunda minute kreće se od 0 do 59.

  • Datum od. Upišite Datum. Datum prema kojem se određuju sekunde minute.
SECOND(Troškovi.Datum)

Izraziti

Ova je funkcija dizajnirana za izdvajanje tipa iz izraza koji može sadržavati složeni tip. Ako izraz sadrži tip koji nije traženi, vratit će se NULL.

Mogućnosti:

  • Izraz za pretvorbu;
  • Oznaka tipa. Tip String. Sadrži niz tipa. Na primjer, "Broj", "Niz" itd. Osim primitivnih tipova, ovaj red može sadržavati naziv tablice. U ovom slučaju, pokušat će se izraziti referenca na navedenu tablicu.

Express(Data.Props1, "Broj(10,3)")

IsNull

Ova funkcija vraća vrijednost drugog parametra ako je vrijednost prvog parametra NULL.

U suprotnom će se vratiti vrijednost prvog parametra.

YesNULL(Iznos(Prodaja.IznosPrometa), 0)

Funkcije zajedničkih modula

Izraz stroja za sastavljanje podataka može sadržavati pozive funkcija globalnih zajedničkih konfiguracijskih modula. Za pozivanje takvih funkcija nije potrebna nikakva dodatna sintaksa.

U ovom primjeru, funkcija "AbbreviatedName" bit će pozvana iz općeg konfiguracijskog modula.

Imajte na umu da je korištenje uobičajenih funkcija modula dopušteno samo ako je naveden odgovarajući parametar procesora za sastav podataka.

Osim toga, funkcije zajedničkih modula ne mogu se koristiti u prilagođenim izrazima polja.

Jedno od najvažnijih područja poslovnog softvera je izvješćivanje. Sudbina poduzeća može ovisiti (i to ne u figurativnom smislu!) o tome koliko je lako postojeće izvješće prilagoditi promjenjivim potrebama poslovanja (i zakonodavstvu) ili izraditi novo, bilo da se radi o izvješću za poreznu upravu. ili dijagram ovisnosti potražnje za robom o sezoni i drugim čimbenicima . Snažan i fleksibilan sustav izvješćivanja koji olakšava izdvajanje potrebnih podataka iz sustava, predstavljanje u razumljivom obliku, dopuštajući krajnjem korisniku da rekonfigurira standardno izvješće kako bi podatke vidio u novom svjetlu - ovo je ideal koji svaki poslovni sustav treba težiti.

U platformi 1C:Enterprise za generiranje izvješća odgovoran je mehanizam pod nazivom "Data Composition System" (skraćeno DCS). U ovom ćemo članku pokušati ukratko opisati ideju i arhitekturu ACS mehanizma te njegove mogućnosti.


ACS je mehanizam koji se temelji na deklarativnom opisu izvješća. Sustav kontrole pristupa namijenjen je generiranju izvješća i prikazu informacija složene strukture. Inače, osim za izradu izvješća, ACS mehanizam se također koristi u 1C:Enterprise u dinamičkom popisu, alatu za prikaz informacija o popisu s bogatom funkcionalnošću (prikaz ravnih i hijerarhijskih popisa, uvjetni dizajn redaka, grupiranja itd.). ).

Malo povijesti

U prvoj verziji platforme 1C:Enterprise 8, verziji 8.0, izvještaji su napravljeni ovako:
  1. Jedan ili više upita napisani su u jeziku upita 1C (jezik sličan SQL-u, više o njemu u nastavku).
  2. Napisan je kod koji prenosi rezultate izvršenih upita u dokument proračunske tablice ili grafikon. Kod bi također mogao obaviti posao koji se ne bi mogao obaviti u upitu - na primjer, izračunao je vrijednosti koristeći ugrađeni 1C jezik.
Pristup je jednostavan, ali nije najprikladniji - postoje minimalne vizualne postavke, sve se mora programirati "iz ruke u ruku". A jedan od tadašnjih aduta potpuno nove platforme “1C:Enterprise 8” bilo je minimiziranje u aplikativnom rješenju količine koda koji se morao pisati ručno, posebice kroz vizualni dizajn. Bilo bi logično krenuti istim putem i u mehanizmu izvješćivanja. To je učinjeno razvojem novog mehanizma - Data Composition System.

Jedna od ideja na kojoj se temeljio sustav kontrole pristupa bila je fleksibilnost i prilagodba izvješća, koja su bila dostupna kako developeru tako i krajnjem korisniku. U idealnom slučaju, želio bih krajnjem korisniku dati pristup istom skupu alata za dizajn izvješća kao i razvojnom programeru. Bilo bi logično stvoriti jedinstven skup alata dostupan svima. Pa budući da alati zahtijevaju sudjelovanje krajnjeg korisnika, to znači da korištenje programiranja u njima treba svesti na minimum (najbolje ga je potpuno eliminirati), a vizualne postavke koristiti maksimalno.

Formulacija problema

Zadatak koji je stajao pred razvojnim timom bio je stvoriti sustav izvještavanja koji se ne temelji na algoritamskom (tj. pisanjem koda), već na deklarativnom pristupu kreiranja izvješća. I vjerujemo da je problem uspješno riješen. Prema našem iskustvu, oko 80% potrebnih izvješća može se implementirati pomoću ACS-a bez ijednog retka koda (osim pisanja formula za izračunata polja), uglavnom kroz vizualne postavke.
Razvoj prve verzije SDS-a trajao je oko 5 osoba-godina.

Dva jezika

Dva su jezika uključena u izradu izvješća. Jedan je jezik upita koji se koristi za dohvaćanje podataka. Drugi je jezik izraza za sastav podataka, namijenjen za pisanje izraza koji se koriste u različitim dijelovima sustava, na primjer, u postavkama za sastav podataka, za opisivanje izraza korisničkih polja.

Jezik upita

Jezik upita temelji se na SQL-u i lako ga je naučiti za one koji poznaju SQL. Primjer zahtjeva:

Lako je vidjeti analogije odjeljaka standardnih za SQL upite - SELECT, FROM, GROUP BY, ORDER BY.

Istodobno, upitni jezik sadrži značajan broj proširenja čiji je cilj odražavati specifičnosti financijskih i gospodarskih problema i maksimalno smanjiti napore za razvoj aplikativnih rješenja:

  • Pristup poljima pomoću točke. Ako su polja tablice referentnog tipa (pohranjuju veze na objekte druge tablice), programer se može pozvati na njih u tekstu zahtjeva kroz ".", a sustav ne ograničava broj razina gniježđenja takvih veza (na primjer, Narudžba kupca. Ugovor. Organizacija. Telefon).
  • Višedimenzionalno i višerazinsko formiranje rezultata. Ukupni i međuzbrojevi formirani su uzimajući u obzir grupiranje i hijerarhiju, razine se mogu prelaziti bilo kojim redoslijedom sa zbrajanjem, a osigurana je i točna konstrukcija ukupnih zbrojeva prema vremenskim dimenzijama.
  • Podrška za virtualne stolove. Virtualne tablice koje nudi sustav omogućuju vam dobivanje gotovo gotovih podataka za većinu aplikacijskih zadataka bez potrebe za stvaranjem složenih upita. Dakle, virtualna tablica može dati podatke o stanju proizvoda po razdobljima u određenom trenutku. Istodobno, virtualne tablice maksimalno iskorištavaju pohranjene informacije, na primjer, prethodno izračunate ukupne iznose itd.
  • Privremeni stolovi. Jezik upita omogućuje korištenje privremenih tablica u upitima. Uz njihovu pomoć možete poboljšati izvedbu upita, u nekim slučajevima smanjiti broj blokiranja i učiniti tekst upita lakšim za čitanje.
  • Skupni zahtjevi. Kako bi rad s privremenim tablicama bio praktičniji, upitni jezik podržava rad sa skupnim upitima - stoga se stvaranje privremene tablice i njezina upotreba nalaze u jednom upitu. Skupni zahtjev je niz zahtjeva odvojenih točkom i zarezom (";"). Zahtjevi u paketu se izvršavaju jedan za drugim. Rezultat izvršavanja skupnog zahtjeva, ovisno o korištenoj metodi, bit će ili rezultat koji je vratio zadnji zahtjev u paketu ili niz rezultata svih upita u paketu u slijedu kojim upiti u paketu slijede. .
  • Dohvaćanje prikaza referentnih polja. Svaka tablica objekata (u kojoj je pohranjena referentna knjiga ili dokument) ima virtualno polje - "Pogled". Ovo polje sadrži tekstualni prikaz objekta i olakšava posao kreatoru izvješća. Dakle, za dokument, ovo polje sadrži sve ključne informacije - naziv vrste dokumenta, njegov broj i datum (na primjer, “Prodaja 000000003 od 06.07.2017 17:49:14”), spremajući programera od pisanje izračunatog polja.
  • i tako dalje.
Mehanizam zahtjeva automatski modificira zahtjev uzimajući u obzir uloge kojima pripada korisnik u čije ime se zahtjev izvršava (tj. korisnik će vidjeti samo one podatke koje ima pravo vidjeti) i funkcionalne opcije (tj. u skladu s s onima konfiguriranim u funkcionalnosti aplikacijskog rješenja).

Postoje i posebna proširenja jezika upita za sustave kontrole pristupa. Proširenje se provodi pomoću posebnih sintaktičkih uputa u vitičastim zagradama i smještenih izravno u tijelo zahtjeva. Koristeći proširenja, razvojni programer određuje koje operacije će krajnji korisnik moći izvesti prilikom prilagodbe izvješća.

Na primjer:

  • BIRAJTE. Ova rečenica opisuje polja koja će korisnik moći odabrati za izlaz. Nakon ove ključne riječi navedeni su aliasi polja s glavnog popisa odabira upita koji će biti dostupni za konfiguraciju, odvojeni zarezima. Primjer: (SELECT Stavka, Skladište)
  • GDJE. Opisana su polja na koja korisnik može primijeniti odabir. Ovaj prijedlog koristi polja tablice. Upotreba pseudonima polja popisa odabira nije dopuštena. Svaki dio unije može sadržavati vlastiti WHERE element. Primjeri: (WHERE Item.*, Warehouse), (WHERE Document.Date >= &StartDate, Document.Date<= &ДатаКонца}
  • i tako dalje.
Primjer korištenja proširenja:

Jezik izražavanja sastava podataka

Jezik izraza sastava podataka osmišljen je za pisanje izraza koji se koriste posebno za opisivanje prilagođenih izraza polja. SKD vam omogućuje da definirate prilagođena polja u izvješću pomoću vlastitih izraza ili skupova opcija s uvjetima za njihov odabir (analogno CASE-u u SQL-u). Prilagođena polja slična su izračunatim poljima. Mogu se postaviti iu konfiguratoru iu načinu rada 1C:Enterprise, ali funkcije uobičajenih modula ne mogu se koristiti u prilagođenim izrazima polja. Stoga su prilagođena polja namijenjena korisniku, a ne razvojnom programeru.

Primjer:

Proces izrade izvješća o sustavu kontrole pristupa

Prilikom izrade izvješća potrebno je izraditi izgled koji definira kako će podaci biti prikazani u izvješću. Možete stvoriti izgled na temelju dijagrama izgleda podataka. Dijagram rasporeda podataka opisuje suštinu podataka koji se dostavljaju izvješću (odakle dobiti podatke i kako možete kontrolirati njihov izgled). Shema sastava podataka osnova je na kojoj se mogu generirati sve vrste izvješća. Shema sastava podataka može sadržavati:
  • tekst zahtjeva s uputama za sustav sastavljanja podataka;
  • opis više skupova podataka;
  • detaljan opis dostupnih polja;
  • opisivanje odnosa između više skupova podataka;
  • opis parametara prikupljanja podataka;
  • opis rasporeda i grupiranja polja;
  • i tako dalje.

Na primjer, možete dodati upit u shemu sastava podataka kao skup podataka i pozvati konstruktor upita, koji vam omogućuje da grafički stvorite upit proizvoljne složenosti:

Rezultat pokretanja dizajnera upita bit će tekst upita (u jeziku upita 1C:Enterprise). Ovaj se tekst može ručno prilagoditi ako je potrebno:

Može postojati nekoliko skupova podataka u shemi izgleda podataka, skupovi podataka mogu biti povezani u izgledu na bilo koji način, mogu se dodati izračunata polja, mogu se specificirati parametri izvješća, itd. Vrijedno je spomenuti zanimljivu značajku mehanizma upita u 1C:Enterprise. Upiti se u konačnici prevode u dijalekt SQL-a koji je specifičan za DBMS s kojim aplikacija izravno radi. Općenito, nastojimo maksimalno iskoristiti mogućnosti DBMS poslužitelja (ograničeni smo činjenicom da koristimo samo one mogućnosti koje su istovremeno dostupne u svim DBMS-ovima koje podržava platforma 1C:Enterprise - MS SQL, Oracle, IBM DB2 , PostgreSQL). Dakle, na razini upita u izračunatim poljima možemo koristiti samo one funkcije koje su prevedene u SQL.

Ali na razini sheme sastava podataka već možemo dodati prilagođena polja i koristiti funkcije u njima u ugrađenom 1C razvojnom jeziku (uključujući one koje smo mi napisali), što uvelike proširuje mogućnosti izvješća. Tehnički, to izgleda ovako - sve što se može prevesti u SQL prevodi se u SQL, upit se izvršava na razini DBMS-a, rezultati upita se smještaju u memoriju 1C aplikacijskog poslužitelja i SKD izračunava za svaki zapis vrijednosti ​​izračunatih polja čije su formule napisane u 1C jeziku.


Dodavanje prilagođenih polja

Izvješću možete dodati proizvoljan broj tablica i grafikona:


Dizajner izvješća


Izvješće o vremenu izvođenja

Koristeći SKD, korisnik može dodati složene odabire izvješću (koji će biti dodani zahtjevu na pravim mjestima), uvjetni dizajn (omogućujući različito formatiranje prikazanih polja - fontom, bojom itd., ovisno o njihovim vrijednostima ) i još mnogo toga..

Proces konstruiranja i generiranja izvješća može se ukratko opisati na sljedeći način:

  • Razvojni programer tijekom dizajna uz pomoć dizajnera (ili u runtimeu pomoću koda) određuje shemu rasporeda podataka:
    • Tekst zahtjeva/zahtjeva
    • Opis izračunatih polja
    • Odnosi između zahtjeva (ako ih ima više)
    • Opcije izvješća
    • Zadane postavke
    • itd.
  • Gore navedene postavke spremaju se u izgledu
  • Korisnik otvara izvješće
    • Eventualno vrši dodatne postavke (na primjer, mijenja vrijednosti parametara)
    • Kliknite gumb "Generiraj".
  • Korisničke postavke primjenjuju se na shemu sastava podataka koju je definirao programer.
  • Formira se srednji raspored sastava podataka koji sadrži upute o tome odakle primati podatke. Posebno se prilagođavaju upiti navedeni u izgledu. Dakle, polja koja se ne koriste u izvješću uklanjaju se iz zahtjeva (to se radi kako bi se smanjila količina primljenih podataka). Sva polja koja sudjeluju u formulama izračunatog polja dodaju se upitu.
  • U igru ​​dolazi procesor za sastavljanje podataka. Procesor izgleda izvršava upite, povezuje skupove podataka, izračunava vrijednosti za izračunata polja i resurse i izvodi grupiranje. Jednom riječju, radi sve proračune koji nisu izvedeni na razini DBMS-a.
  • Procesor izlaza podataka pokreće zahtjev za izvršenje i prikazuje primljene podatke u dokumentu proračunske tablice, grafikonu itd.


Proces generiranja izvješća korištenjem ACS mehanizma

Pokušavamo minimizirati količinu podataka izvješća koji se prenose s poslužitelja na klijentsku aplikaciju. Kod prikaza podataka u tabličnom dokumentu, prilikom otvaranja tabličnog dokumenta, s poslužitelja prenosimo samo one retke koje korisnik vidi na početku dokumenta. Kako se korisnik kreće po redovima dokumenta, podaci koji nedostaju preuzimaju se s poslužitelja na klijenta.

Postavke po želji korisnika

Svi ACS alati dostupni su i razvijaču i krajnjem korisniku. Ali praksa je pokazala da je krajnji korisnik često zastrašen obiljem mogućnosti alata. Štoviše, krajnjem korisniku u većini slučajeva nije potrebna sva moć postavki - dovoljno mu je da ima brzi pristup podešavanju jednog ili dva parametra izvješća (primjerice, razdoblje i druga ugovorna strana). Počevši od određene verzije platforme, programer izvješća ima priliku označiti koje su postavke izvješća dostupne korisniku. To se radi pomoću potvrdnog okvira "Uključi u korisničke postavke". Također, postavke izvješća sada imaju oznaku "Način prikaza", koja ima jednu od tri vrijednosti:
  • Brzi pristup. Postavka će se prikazati izravno na vrhu prozora izvješća.
  • Obični. Postavka će biti dostupna putem gumba "Postavke".
  • Nije dostupno. Postavka neće biti dostupna krajnjem korisniku.


Postavljanje načina prikaza u vrijeme dizajna


Prikaz postavke u načinu brzog pristupa tijekom izvođenja (ispod gumba Generiraj)

Planovi razvoja

Jedno od naših prioritetnih područja u razvoju sustava kontrole pristupa je pojednostavljenje korisničkih postavki. Naše iskustvo pokazuje da je za neke krajnje korisnike rad s korisničkim postavkama još uvijek veliki pothvat. Mi to uzimamo u obzir i radimo u tom smjeru. Sukladno tome, programerima će također postati lakše raditi sa sustavima kontrole pristupa, jer Mi, kao i prije, želimo pružiti jedinstveni alat za postavljanje izvješća za programera i krajnjeg korisnika.

Pozdrav, dragi moji čitatelji! Nastavimo s osvrtom na osnove sustava izgleda. U ovoj seriji članaka naučili ste razlike između upita skupa podataka i običnog upita. Također ste pogledali parametre virtualnih tablica i upoznali se s proširenjem jezika upita. Sada pogledajte sadržaj da vidite što ćete ovdje naučiti. Sretno!

Funkcije SKD izraznog jezika.

Kada je upit izgrađen u izgledu, unutar njega se koriste standardne funkcije jezika upita. Ali sustav kontrole pristupa omogućuje vam definiranje dodatnih funkcija. Neke su funkcije slične funkcijama iz jezika upita, ali koriste drugačiju sintaksu. Na primjer, funkcija "Početak razdoblja":

Početni period(DatumVrijeme(2002, 10, 12, 10, 15, 34), "Mjesec")

Ova se funkcija razlikuje od funkcije jezika upita u drugom parametru. Ovdje se koristi niz "Mjesec", dok se u funkciji upitnog jezika koristi literal MONTH.

Opise funkcija možete pronaći otvaranjem Konfiguratora: Pomoć -> Sadržaj -> Sustav za sastavljanje podataka -> Jezik za izražavanje sustava za sastavljanje podataka -> Funkcije jezika za izražavanje sustava za sastavljanje podataka.

Gdje možete koristiti funkcije SKD izraznog jezika ako se ne mogu koristiti u upitnom jeziku?

  • Na kartici u stupcu "Izraz".
  • Na kartici "Parametri" u stupcu "Izraz".
  • Na kartici "Postavke" u stupcu "Prilagođena polja". Korisnik može kreirati vlastita polja i pisati izraze za njih.
  • Na kartici "Skupovi podataka", u stupcima "Izrazi predstavljanja" i "Izrazi reda".
    Ovo su izrazi koji konfiguriraju polja sastava podataka.

Značajke rada ACS.

Kada koristite upit skupa podataka, pojavljuju se brojne značajke
prilikom optimizacije ACS-a.

  • Rezultirajući upit reducira se u skladu s postavkama opcije izvješća,
    jer su neka polja u rezultirajućem upitu uklonjena.
  • Osim toga, tablice se također mogu izbrisati iz rezultirajućeg upita ako upit opisuje privremene tablice i one se ne koriste nigdje drugdje.
  • Isto vrijedi i za skupove podataka, ako smo opisali mnogo skupova podataka u shemi, ali koristimo samo neke od njih, tada će samo korišteni skupovi podataka biti korišteni od strane sustava za dobivanje informacija, a preostali skupovi podataka će biti uklonjeni iz rezultirajući izgled rasporeda podataka.

Mogu li te značajke imati negativne posljedice? Da, jer u nekim slučajevima zahtjev koji smo željeli neće biti generiran. Stoga morate uzeti u obzir ove značajke prilikom izrade složenih upita.

Osnovna podešavanja ACS polja.

Na kartici “Skupovi podataka” prilikom kreiranja skupa podataka tipa upita automatski se popunjavaju polja izgleda. Kao što vidite, polja sadrže velik broj postavki.

Stupac "Polje" sadrži naziv polja koji se dobiva iz informacijske baze (IB).
Nepromjenjiva vrijednost koja je tvrdo kodirana u zahtjevu. Odgovara aliasu zahtjeva.

Ali ima jedna posebnost. Ako promijenimo pseudonim, na primjer "Stavka", u Query Builderu na kartici "Joins/Aliases" u stupcu "Field Name" u "Product", tada će se novo polje "Product" pojaviti na "Data" Setovi” kartice izgleda, ali u isto vrijeme polje “Nomenklatura” ostaje. To je zato što je postavljena zastavica AutoComplete. Uz ovu postavku, sustav ne može razumjeti da je polje "Proizvod" isto što i polje "Artikal", pa se, za svaki slučaj, polje dodaje dvaput.

Može li ovaj dizajn naštetiti korisničkom iskustvu? Da. Uostalom, u postavkama opcije izvješća pojavit će se dva polja “Proizvod” i “Artikal”. Korisniku neće biti jasno po čemu se razlikuju, iako su ti odabiri identični.

Iako možete isključiti pojavljivanje polja "Nomenklatura" označavanjem okvira u stupcima "Ograničenje polja" - "Uvjet" i "Ograničenje pojedinosti" - "Uvjet" na kartici "Skupovi podataka" u postavkama polja. Osim toga, možete isključiti oznaku "Automatsko popunjavanje" i ispuniti sva polja u Dizajneru upita na kartici "Sastav podataka".

Stupac "Staza" određuje kako ćemo pristupiti polju na svim karticama izgleda podataka. Vrijednost koja se može promijeniti prema vlastitom nahođenju. Razmaci su dopušteni u nazivu staze, ali naziv je u uglatim zagradama. Ali bolje je da staza nema razmaka, jer je ovo servisno polje. Bolje je promijeniti naslov označavanjem stupca "Naslov".

Zašto je bilo potrebno kreirati dva različita polja “Field” i “Path” ako su im nazivi gotovo uvijek isti? Budući da se koriste mnogi skupovi podataka. Na primjer, ako je drugi skup podataka unija, tada da biste uskladili polja morate imati iste staze. U drugim slučajevima, staze se mogu ostaviti nepromijenjene ako su njihova imena jasna.

Možete koristiti sljedeću metodu za rad sa stupcem "Path". Određivanjem putanje možete stvoriti ugniježđene virtualne atribute elementa. Na primjer, postavimo atribut "Kvaliteta" unutar atributa "Proizvod". Promijenimo polje "Path" atributa "Quality" u "Product.Quality". Sada na kartici “Postavke” u kartici “Odabrana polja” nećemo pronaći polje “Kvaliteta”, ali ono će se pojaviti unutar polja “Proizvod”.

Pogledajmo pobliže postavke ograničenja pristupačnosti. Kao što vidite, postoje dvije linije za ograničavanje pristupačnosti u stupcima "Ograničenje polja" I "Ograničenje detalja".

ACS stupci ograničenja polja

Stupac "Ograničenje polja" znači da će ograničenja biti postavljena na samo polje. Stupac "Ograničenje detalja" znači da će ograničenja biti nametnuta ugniježđenim detaljima ovog polja ako polje pripada složenoj vrsti podataka, kao što je imenik ili dokument.

Svaki je redak podijeljen u još četiri stupca. Ako je zastavica postavljena za polje ili detalje ovog polja:

  • Polje, tada neće biti dostupna za odabir na kartici “Postavke” u kartici “Odabrana polja”.
  • Stanje, tada neće biti dostupni kao uvjet na kartici “Postavke” u kartici “Odabir”.
  • Skupina, tada na kartici “Postavke” prilikom stvaranja novog grupiranja grupiranje po njima neće biti dostupno.
  • Aranžiranje, tada neće biti dostupni za naručivanje na kartici “Postavke” u kartici “Razvrstavanje”.

Stupac "Reprezentacijski izraz" potrebno promijeniti prezentaciju polja kao rezultat izvješća. Na primjer, trebate prikazati ne samo naziv proizvoda, već i njegov broj artikla. Stoga u ovom stupcu možete napisati sljedeće:

Proizvod. Članak + "-" + Proizvod. Ime

U ovom polju možemo koristiti sve mogućnosti SKD jezika i pristupiti funkcijama uobičajenih modula.

Ako u konfiguraciji postoji opći modul pod nazivom "Za SKD" iu ovom modulu definirana je opća (s ključnom riječi "Izvoz") funkcija "GetView" s parametrom "Veza", tada u polju "Izraz prikaza" mi će napisati:

Za SKD. GetView(proizvod)

Ali morate pažljivo koristiti ovu priliku, posebno ako funkcija općeg modula uključuje pristup bazi podataka, budući da se ovaj pristup događa nakon što su primljeni svi podaci za izvješće. Zapravo, za svaki red upit će se ponovno izvršiti.

Stupac "Izraz za naručivanje" potrebno za definiranje nestandardnog sortiranja. Ovdje možete koristiti iste konstrukcije kao u polju "View Expression".

Pa, rekao sam ti sve, kao što sam obećao. Ako imate pitanja, napišite ih u komentarima. Kako bi vam materijal ostao u sjećanju, pripremit ću test.

Najbolji članci na temu