Jezik izraza sistema sastava podataka (1Cv8). Dijagram rasporeda podataka (1C SKD) Izračunata polja dijagrama rasporeda podataka

Zdravo, dragi čitaoče! Imamo još jednu lekciju o osnovama sistema rasporeda. Upoznali ste se sa funkcijama SKD izraznog jezika, vidjeli karakteristike sistema rasporeda, a također ste razumjeli osnovne postavke polja za raspored. Sada ćemo pogledati novi materijal. Idi!

Dodatne postavke za ACS polja.

Kolona "Vrsta vrijednosti" Omogućava vam da odredite tip podataka za polje izgleda. Zašto specificirati vrstu, na primjer, za polje „Nomenklatura“, ako već znate o kojoj se vrsti radi? Ovo je neophodno ako je polje rasporeda kompozitnog tipa. Možete odabrati određeni tip, tada će se prilikom odabira po ovom polju odabrati vrijednosti ove vrste.

Kolona "Dostupne vrijednosti" omogućava vam da odredite vrijednosti koje su dostupne za odabir i ograničite izbor korisnika na određene granice.

Kolona "dekor" omogućava vam da odredite dizajn polja izgleda bez upotrebe izgleda. Možete odrediti boju fonta, boju okvira, orijentaciju teksta itd.

Kolona "Opcije uređivanja" Omogućava vam da odredite kako urediti polje izgleda. Na primjer, možete odrediti brzi odabir elemenata sa liste u odabiru. Podrazumevano, polje rasporeda nasljeđuje sve opcije uređivanja od metapodataka objekta.

Izračunata polja

Na kartici "Izračunata polja" sastava podataka možete kreirati vlastita izračunata polja.

Zašto su vam potrebna izračunata polja kada ih možete kreirati na nivou upita? Ne mogu se sva polja opisati pomoću upita. Ako trebate kreirati složeno polje iz različitih skupova podataka, na primjer, upit i objekt, onda ne možete bez izračunatih polja. Ne možete dodati polje sastava podataka ako je izvor podataka upit i automatsko popunjavanje je omogućeno, ali pomoću izračunatih polja možete dodati onoliko polja koliko želite.

U koloni “Izraz” izračunatog polja potrebno je da napišete proizvoljan izraz koji koristi polja sastava podataka, pristupajući njihovoj putanji (kolona “Putanja” na kartici “Skupovi podataka”). Ili možete koristiti funkcije matematičke transformacije ili pristupiti funkcijama zajedničkih modula. Na primjer, upišemo u kolonu „Putanja podataka“ naziv izračunatog polja „Odstupanje“, a u polje „Izraz“ sljedeće.

U svetlu predstojećeg izdanja 8.2.14, pokušaću da opišem neke nove funkcije sistema za sastavljanje podataka.

Otvorite dijagram rasporeda podataka, po mogućnosti u vanjskom izvještaju, da olakšate uređivanje.

Dodamo skup podataka tipa upita i napišemo, bilo ručno ili pomoću dizajnera upita, jednostavan upit:

1. Postavite zahtjev u sistemu kontrole pristupa.

2. Podesite izračunata polja u sistemu kontrole pristupa

3. Konfigurirajte raspored podataka na kartici postavki

4. Pokrenite 1C Enterprise 8.2.14. Otvorite izvještaj. Formiramo, primamo.

Opis samih novih funkcija:

1. Trenutni datum()

Vraća sistemski datum. Prilikom sastavljanja izgleda izgleda, u svim izrazima koji su prisutni u rasporedu, funkcija CurrentDate() se zamjenjuje vrijednošću trenutnog datuma.

2. COMPUTEEXPRESSION()

sintaksa:

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

Opis:

Funkcija je dizajnirana da procijeni izraz u kontekstu nekog grupiranja.

Funkcija uzima u obzir odabir grupiranja, ali ne uzima u obzir hijerarhijske odabire.

Funkcija se ne može primijeniti na grupiranje u odabiru grupe te grupe. Na primjer, u odabiru grupe Nomenklatura, ne možete koristiti izraz CalculateExpression("Sum(SumTurnover)", "TotalTotal") > 1000. Ali takav izraz se može koristiti u hijerarhijskom odabiru.

Ako završni zapis prethodi početnom, onda se smatra da ne postoje zapisi za izračunavanje detaljnih podataka i izračunavanje agregatnih funkcija.

Prilikom izračunavanja intervalnih izraza za ukupni zbroj (parametar Grupiranje je postavljen na GrandTotal), pretpostavlja se da ne postoje zapisi za izračunavanje detaljnih podataka i izračunavanje agregatnih funkcija.

Prilikom generiranja izraza za funkciju CalculateExpression, sastavljač izgleda, ako izraz za naručivanje sadrži polja koja se ne mogu koristiti u grupisanju, zamjenjuje funkciju CalculateExpression sa NULL.

Opcije

<Выражение>

Vrsta: String. Izraz koji se vrednuje.

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

Vrsta: String. Sadrži naziv grupiranja u čijem kontekstu treba procijeniti izraz. Ako se kao ime grupisanja koristi prazan niz, proračun će se izvršiti u kontekstu trenutnog grupisanja. Ako se kao naziv grupe koristi string GrandTotal, izračunavanje će se izvršiti u kontekstu ukupnog zbroja. U suprotnom, proračun će se izvršiti u kontekstu nadređene grupe sa istim imenom.

Na primjer:

Zbroj (Prodaja.Ukupan promet)/Izračunaj(“Zbroj(Prodaja.Ukupan promet)”, “Ukupno”)

U ovom primjeru, rezultat će biti omjer iznosa za polje Sales.SumTurnover zapisa grupisanja prema iznosu istog polja u cijelom izgledu;

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

Vrsta: String. Parametar može imati sljedeće vrijednosti:

  • GeneralTotal - izraz će se izračunati za sve grupne zapise.
  • Hijerarhija - Izraz će biti procijenjen za roditeljski hijerarhijski zapis ako ga postoji, a za cijelo grupisanje ako ne postoji roditeljski hijerarhijski zapis.
  • Grupisanje - izraz će biti procijenjen za trenutni zapis grupisanja.
  • Grupiranje bez resursa - kada se izračunava funkcija za grupni zapis po resursu, izraz će se procijeniti za prvi grupni zapis originalnog grupiranja.

Prilikom izračunavanja funkcije IzračunajIzraz() sa vrijednošću Non-Resource Grouping za grupne zapise koji nisu grupiranje resursa, funkcija se izračunava na isti način kao što bi se izračunala da je vrijednost parametra jednaka vrijednosti grupiranja.

Graditelj rasporeda sastava podataka, kada generira raspored sastava podataka prilikom izlaza polja resursa pomoću kojeg se vrši grupisanje u izgled, postavlja izraz u izgled koji se izračunava pomoću funkcije IzračunajIzraz(), što označava parametar Grupiranje bez resursa. Za druge resurse, uobičajeni izrazi resursa se stavljaju u grupiranje resursa.

<Начало>

Vrsta: String. Označava od kojeg zapisa treba početi fragment, u kojem se agregatne izrazne funkcije treba izračunati i iz kojeg zapisa treba dobiti vrijednosti polja izvan agregatnih funkcija. Vrijednost može biti jedna od sljedećih:

<Конец>

Vrsta: String. Označava na koji zapis treba nastaviti fragment, u kojem treba izračunati agregatne funkcije izraza. Vrijednost može biti jedna od sljedećih:

  • Prvo. Potrebno je pribaviti prvi zapis grupisanja. Nakon riječi u zagradama možete odrediti izraz čiji će se rezultat koristiti kao pomak od početka grupiranja. Rezultirajuća vrijednost mora biti cijeli broj veći od nule. Na primjer, First(3) – primanje trećeg zapisa od početka grupisanja.

Ako je prvi zapis izvan grupisanja, onda se smatra da nema zapisa. Na primjer, ako postoje 3 zapisa, a želite da dobijete First(4), onda se smatra da nema zapisa.

  • Last. Morate dobiti posljednji zapis o grupisanju. Nakon riječi u zagradama možete odrediti izraz čiji će se rezultat koristiti kao pomak od kraja grupisanja. Rezultirajuća vrijednost mora biti cijeli broj veći od nule. Na primjer, Last(3) – primanje trećeg zapisa s kraja grupe.

Ako je posljednji zapis izvan grupisanja, smatra se da nema zapisa. Na primjer, ako postoje 3 zapisa, a želite da dobijete Last(4), onda se smatra da nema zapisa.

  • Prethodno. Morate dobiti prethodni zapis o grupisanju. Nakon riječi u zagradama, možete odrediti izraz čiji će se rezultat koristiti kao pomak u odnosu na trenutni grupni zapis. Na primjer, Prethodno(2) – dobijanje prethodnog iz prethodnog zapisa.

Ako prethodni zapis ide dalje od grupisanja (na primjer, za drugi zapis grupisanja morate dobiti Previous(3), tada se dobija prvi zapis grupisanja.

Prilikom preuzimanja prethodnog zapisa za zbroj grupiranja, smatra se da je dobijen prvi zapis.

  • Sljedeći. Morate dobiti sljedeći zapis grupisanja. Nakon riječi u zagradama, možete odrediti izraz čiji će se rezultat koristiti kao pomak naprijed od trenutnog grupnog zapisa. Na primjer, Next(2) – dobivanje sljedećeg iz sljedećeg zapisa.

Ako sljedeći zapis ide dalje od grupiranja, smatra se da zapisa nema. Na primjer, ako postoje 3 zapisa i Next() je primljen za treći zapis, onda se smatra da nema zapisa.

Kada se primi sljedeći zapis za ukupno grupisanje, smatra se da nema zapisa.

  • Current. Morate dobiti trenutni rekord.

Prilikom preuzimanja za zbir grupiranja, dobiva se prvi zapis.

  • BoundaryValue. Potreba da se dobije zapis po navedenoj vrijednosti. Nakon riječi LimitingValues ​​u zagradama, morate naznačiti izraz s čijom vrijednošću želite započeti fragment, prvo polje za redoslijed.

Prvi zapis čija je vrijednost polja za redoslijed veća ili jednaka navedenoj vrijednosti će biti vraćena kao zapis. Na primjer, ako se polje Period koristi kao polje za narudžbu i ima vrijednosti 01/01/2010, 02/01/2010, 03/01/2010 i želite da dobijete LimitingValue(DateTime(2010 , 1, 15)), tada će se dobiti zapisnik sa datumom 02/01. 2010.

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

Vrsta: String. Navodi izraze, odvojene zarezima, koji opisuju pravila uređenja. Ako nije navedeno, tada se poredak izvodi na isti način kao i za grupisanje za koje se izraz procjenjuje. Nakon svakog izraza možete navesti ključne riječi Uzlazno (za redoslijed u rastućem redoslijedu), Descending (za redoslijed u opadajućem redoslijedu) i AutoOrder (za redoslijed referentnih polja prema poljima po kojima želite poredati referencirani objekt). Riječ Auto Order može se koristiti i sa riječju Uzlazno i ​​Opadajuće.

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

Vrsta: String. Isto kao i opcija Sortiraj. Koristi se za organiziranje hijerarhijskih zapisa. Ako nije navedeno, sastavljač izgleda generira redoslijed prema redoslijedu navedenom u parametru Sort.

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

Vrsta: String. Određuje pravilo za određivanje prethodnog ili sljedećeg zapisa u slučaju da postoji nekoliko zapisa s istom vrijednošću:

  • Odvojeno znači da se niz uređenih zapisa koristi za određivanje prethodnog i sljedećeg zapisa. Zadana vrijednost.
  • Zajedno znači da se prethodni i sljedeći zapis određuju na osnovu vrijednosti izraza za narudžbu.

Na primjer, ako je rezultirajući niz poredan po datumu:

datum Puno ime Značenje
1 1. januara 2001 Ivanov M. 10
2 2. januara 2001 Petrov S. 20
3 3. januara 2001 Sidorov R. 30
4 04. januara 2001 Petrov S. 40

Ako je vrijednost parametra odvojeno, tada:

§ prethodni unos za unos 3 će biti unos 2.

§ ako je fragment proračuna definisan kao Current, Current (respektivno, parametri Start i End), tada će se za zapis 2 ovaj fragment sastojati od jednog zapisa 2. Izraz CalculateExpression(“Sum (Value)”, Current, Current) će biti jednako 20.

Ako je vrijednost parametra Zajedno, tada:

§ prethodni unos za unos 3 će biti unos 1.

§ ako je fragment proračuna definisan kao Current, Current (respektivno, parametri Početak i Kraj), tada će se za zapis 2 ovaj fragment sastojati od zapisa 2 i 3. Izraz CalculateExpression(“Sum (Value)”, Current, Current) biće jednako 50.

Kada specificirate vrijednost parametra jednaku Together, u parametrima Start i End ne možete specificirati pomak za pozicije First, Last, Previous, Next.

CalculateExpression(“Sum(SumTurnover)”, “Prvi”, “Trenutni”)

Ako želite da dobijete vrednost grupisanja u prethodnom redu, možete koristiti sledeći izraz:

CalculateExpression(“Ocijeni”, “Prethodno”)

Lista novo funkcije:

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

Funkcija vraća niz, čiji svaki element sadrži rezultat evaluacije izraza za grupisanje prema navedenom polju.

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

Funkcija vraća tablicu vrijednosti, čiji svaki red sadrži rezultat evaluacije izraza za grupisanje prema navedenom polju

ValueFilled(<Выражение>) – Vraća True ako je vrijednost drugačija od zadane vrijednosti ovog tipa, osim NULL, osim prazne reference, osim Undefined. Logičke vrijednosti se provjeravaju na NULL. Stringovi se provjeravaju na odsustvo znakova koji nisu razmak

Format(<Выражение>, <Форматная строка>) – Primite formatirani niz proslijeđene vrijednosti. Niz formata je postavljen u skladu sa nizom formata sistema 1C:Enterprise.

Podniz(<Выражение>, <Начальные символ>, <ДлинаПодстроки>) – Ova funkcija je dizajnirana da izdvoji podniz iz niza.

Dužina linije(<Выражение>) – Funkcija je dizajnirana da odredi dužinu niza. Parametar - string izraz

Linija(<Выражение>) – Ako je niz proslijeđen kao parametar, funkcija vraća string koji sadrži nizove reprezentacija svih elemenata niza, odvojene znakovima “; “. Ako je tablica vrijednosti proslijeđena kao parametar, funkcija vraća string koji sadrži nizove reprezentacija svih redova tablice vrijednosti, s prikazom ćelija svakog reda odvojenim znakovima “; “, a linije su simbol za pomicanje reda. Ako bilo koji element ima praznu reprezentaciju niza, tada se string prikazuje umjesto njegovog prikaza<Пустое значение>.

Dijagram rasporeda podataka (1C SKD)- zgodan dizajner za kreiranje složenih izvještaja u softverskim proizvodima 1C:Enterprise koji doprinose razvoju i praćenju automatizacije proizvodnje, omogućavajući im da budu što fleksibilniji i ljepši u minimalnom vremenu. Dodatna prednost Šeme sastavljanja podataka (1C SKD) je automatsko generisanje kontrolisanog obrasca izveštaja, a daljim razvojem ove oblasti važan je faktor pri izboru metode izrade izveštaja. Ali zbog složenosti strukture šeme sastavljanja podataka (1C SKD) i ogromnog broja postavki, to često dovodi do dužeg razvoja izvještaja nego kroz „dizajner izlazne forme“. Stoga, 1C programer mora razumjeti sve zamršenosti šeme sastava podataka (1C DCS) kako bi dodatno ubrzao vrijeme razvoja za generiranje izvještaja.

Pogledajmo prve tri kartice Šeme sastava podataka (1C SKD) - skup podataka, veze skupa podataka i izračunata polja.

Skup podataka u 1C SKD

Skup podataka uključuje mogućnost kreiranja tri objekta - upita, objekta i unije, pogledajmo svaki od njih pobliže:

Ovo je običan upit koji se generiše pomoću dugmeta Query Builder. Ako je postavljena zastavica Autofill, tada će svi odabrani detalji automatski biti uključeni u polja skupa podataka. Također je moguće prilagoditi popunjavanje polja u zahtjevu na kartici Sastav podataka, gdje postoje tri kartice:

Tabele, ovde se biraju tabele koje će učestvovati u generisanju izveštaja, obično se biraju podrazumevani podaci, pošto smo na kartici Tabele i polja već izabrali dokumente, imenike, registre koji su nam potrebni...

Polja, ovdje biramo one objekte koji bi trebali biti uključeni u izvještaj, zastavica djece označava da li će za objekt biti dostupni podređeni elementi ili ne, logično je da za string, numeričke i slične podatke neće biti moguće postaviti zastavu na True.

Uvjeti, ovdje biramo one objekte koji se mogu koristiti pod uvjetima u sistemu kontrole pristupa.

Dio posla se obavlja u shemi sastavljanja podataka, a dio se obavlja programski; pogledajmo jednostavan primjer:

Prvo ćemo kreirati dijagram izgleda za izgled podataka dokumenta i nazvati ga SKD (na primjer: 1C SKD), u njemu kreiramo objekt skupa podataka, zatim popunjavamo polja, na primjer, imamo dokument sa tabelarnim dijelom robe sa detaljima - nomenklaturom, količinom i cijenom.

Dodajmo tri polja i popunimo svaku kolonu imenom detalja, preostale kolone će se automatski popuniti:

Kreirajmo dugme na obrascu dokumenta i opišemo mehanizam rada u kontrolisanim oblicima:

&OnClient

Procedura Print()

OurReport = PrintOnServer(); //pozovite funkciju na serveru

OurReport.Show(); //prikaz generiranog izvještaja

Kraj procedure

&Na serveru

Funkcija PrintOnServer()

DocumentObject = FormAttributeValue(“Objekat”);

//tabelarni dio Proizvodi stavljamo u strukturu s nazivom ProductsSKD na isti način kao što smo u samom SKD-u naveli ime objekta koji sadrži podatke

DataSet = nova struktura;

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

//dobijamo naš izgled i postavljamo podrazumevane postavke tako da sve postavke izlaza izveštaja budu preuzete iz našeg izgleda

OurLayout = DocumentObject.GetLayout(“SKD”);

Postavke = OurLayout.DefaultSettings;

//kreirajte raspored podataka sa našim postavkama

LayoutLinker = newDataLayoutLayoutLinker;

LayoutLayout = LayoutComposer.Execute(OurLayout, Settings);

//izvršimo kompoziciju podataka sa našim skupom podataka

DataCompositionProcessor = newDataCompositionProcessor;

DataCompositionProcessor.Initialize(LayoutLayout, DataSet);

//Kreiramo tabelarni dokument i u njemu prikazujemo naš izvještaj

ReportDocument = Novi TabularDocument;

OutputProcessor = Novi OutputProcessorDataCompositionResultInTabularDocument;

OutputProcessor.SetDocument(ReportDocument);

OutputProcessor.Output(DataCompositionProcessor);

Return DocumentReport;

EndFunction

Ako želite, možete dobiti područja bilo kojeg drugog izgleda i također ih prikazati u ovom izvještaju, na primjer, imamo standardni izgled za generiranje naloga za plaćanje i u njemu je zaglavlje vrlo dobro kreirano, da ne bi radili nepotreban posao, prvo ćemo dobiti izgled, prikazati zaglavlje, a zatim ćemo generirati i prikazati naš izvještaj o sistemu kontrole pristupa.

O ujedinjenje

U nju možemo smjestiti naše upite i objekte, ali za razliku od veze, ona jednostavno dodaje tabele jedna drugoj, odnosno ako povežemo dvije identične tablice, na kraju ćemo dobiti jednu, a kada se spoji, ona će se udvostručiti, pogledajmo na jednostavnom primjeru:

Imamo stolove:

Nakon komunikacije dobićemo:

A kada se kombinuju:

Razmotrimo sada popunjavanje kolona u skupovima podataka (neke ćemo preskočiti, jer se odnose na druge kartice; vratit ćemo im se u budućim člancima):

- polje, naznačite opći naziv atributa;

­­- put, navedite naziv detalja pomoću kojih ćemo ga kontaktirati u sistemu kontrole pristupa, na primjer, u Izračunata polja;

- naslov, označite naziv atributa koji će biti prikazan u izvještaju;

- ograničenje polja, naznačiti dostupnost ovog rekvizita;

- ograničenje detalja, ukazujemo na dostupnost podređenih elemenata, važno je da ako je naznačena dostupnost detalja, tada će i samo polje biti dostupno, možda će se ova mehanika promijeniti u budućim izdanjima;

- izraz kojim se izračunava reprezentacija polja, zgodno je koristiti kada trebamo malo promijeniti izlaz detalja, na primjer, trebamo nakon imena nomenklatura je prikazano dionica, gdje se nalazi, zatim popunite sljedeće: Artikal + „nalazi se u magacinu“ + Magacin. Ponavljam da se pristup detaljima vrši preko imena navedenog u koloni put;

- naručivanje izraza, zgodan mehanizam za podešavanje redosleda izveštaja, gde se uslov može postaviti ručno, slično kao u prethodnoj tački, ali kao što praksa pokazuje, ovaj mehanizam često ne radi kako bismo želeli, i savetujem vam da koristite standardno sortiranje;

- tip vrijednosti, označava tip vrijednosti atributa; ovo se mora popuniti ako koristite sljedeće polje;

- dostupne vrijednosti, radi samo kada je puna tip vrijednosti, otvorite obrazac za popunjavanje i u koloni Značenje označavamo element koji treba promijeniti, prema vrsti, to mogu biti unaprijed definirani objekti ili numerički, na primjer, detalji imaju jednostavne vrijednosti, u prezentacija Naznačavamo u šta treba da se promenimo, primer Booleovog tipa:

- dekor– standardne postavke formata polja, slične postavkama u upravljanim obrascima, omogućavaju vam da preciznije i ljepše prilagodite izlaz određenih detalja.

Veze skupa podataka u 1C SKD

Ovdje je samo instaliran lijevo spojiti, po principu sličnom veze u zahtjevima, u izvor komunikacije navedite glavnu tabelu za vezu, u prijemnik dodatno. IN izvor izraza I prijemnik izraza Navodimo detalje po kojima će se komunikacija odvijati. Pogledaćemo preostale kolone detaljnije kada pogledamo karticu. Opcije. Ako nema dodatne veze sa parametrima, onda je preporučljivo izvršiti vezu u zahtjevu, to će ubrzati izvještaj.

Pravilna upotreba sheme sastava podataka (DCS) omogućava vam da:

  • značajno smanjiti vrijeme potrebno za izradu izvještaja;
  • eliminirati potrebu za kreiranjem upravljanog obrasca;
  • dobiti prekrasan rezultat uz mogućnost dodatnog prilagođavanja od strane korisnika.

Ali ne koriste svi programeri na najbolji način mogućnosti sheme, budući da nisu sve njegove postavke očigledne i intuitivne. Konkretno, mnogi ljudi znaju da u 1C SKD postoje izračunata polja, međutim, ne razumiju u potpunosti opseg njihove upotrebe i metode rada s njima.

Šta je izračunato polje

U većini slučajeva, izvor podataka u dijagramu izgleda je upit. U principu, unutar samog upita već možete koristiti razne formule, konstrukcije i izraze. Postavlja se prirodno pitanje: zašto nam je potrebna duplirana funkcionalnost?

Činjenica je da je sistem kontrole pristupa nešto više od pukog prikaza rezultata upita, a to je jasno vidljivo iz obrasca za kreiranje dijagrama (Sl. 1).

Izračunata polja vam omogućavaju da izvršite određene radnje s generiranim skupom podataka:

  • Izlaz niza podataka primljenih na zahtjev u određenu ćeliju, kombinirajući nekoliko linija u jedan;
  • Pristup funkcijama izvoza općeg modula;
  • Izvršite različite izraze dostupne za jezik rasporeda i koristite posebne funkcije EvaluateExpression.

Idemo kroz ovu listu.

Niz vrijednosti u jednoj ćeliji

Simulirajmo situaciju u kojoj je potrebno primiti sve brojeve dokumenata prijema za drugu stranu u zasebnoj ćeliji:


Tako smo kreirali dodatno polje za izračunavanje u našoj šemi;


Kao što možete vidjeti iz gornjeg primjera, nema poteškoća u dodavanju i obradi izračunatih polja. Koristili smo dvije funkcije: Array() i ConnectRows().

Nekoliko riječi o potonjem. Osim prvog parametra koji označava identifikator niza, vrijednosti ili vrijednost, u njemu se mogu postaviti još dva:

  1. Element Separator – označava koji će znak odvojiti jedan element niza ili jedan red tablice vrijednosti od drugog (u našem slučaju smo izostavili ovaj parametar i po defaultu je dodijeljen prijelom reda);
  2. Razdjelnik stupaca – znak koji se koristi za razdvajanje stupaca u tablici vrijednosti (podrazumevano se koristi tačka i zarez).

Pristup funkcijama izvoza zajedničkog modula

Funkcije zajedničkog modula mogu služiti kao izvor podataka za popunjavanje izračunatog polja.

Nekoliko važnih tačaka:

  • Funkcija mora biti izvozna;
  • Ako se funkcija nalazi u zajedničkom modulu sa skupom atributa “Global”, poziva se direktno po imenu, u suprotnom se funkcija mora pozvati prema shemi “Shared module name”. "Naziv funkcije koju treba pozvati."

Kao primjer upotrebe, uzećemo isti zahtjev za dokumente o prijemu i prikazati ga u posebnoj koloni. Nećemo opisivati ​​sam zahtjev; prijeđimo direktno na izračunata polja:


Dakle, vidimo da se gotovo svaki procesor podataka može inicijalizirati iz sistema kontrole pristupa, što značajno proširuje mogućnosti korištenja šeme.

Izrazi jezika rasporeda

Često se u radu programera javlja situacija kada je potrebno prikazati rezultat podjele u ACS polju:

  1. Izračunajte prosječnu cijenu artikla;
  2. Sve vrste interesa;
  3. Obračun prosječne zarade itd.

Da biste izbjegli probleme, u ovim slučajevima preporučljivo je unijeti test za dijeljenje sa 0 u izračunato polje.

Ovo se može uraditi pomoću konstrukcije „Izbor kada….Onda… Inače… Kraj“.

Na kraju, nekoliko riječi o prilično novoj funkciji CalculateExpression(). Uz njegovu pomoć, posebno, možete izračunati odstupanja u troškovima između tekuće i prethodne linije, kumulativno stanje itd.

Recimo da možete dobiti zbir dokumenta iz prethodnog reda našeg zahtjeva tako što ćete navesti vrijednost Calculate Expression ("Document Sum", "Previous Sum") u polju "Izraz".

  • 1C-Bitrix
  • Jedna od najvažnijih oblasti poslovnog softvera je izvještavanje. Sudbina preduzeća može zavisiti (i to ne u figurativnom smislu!) od toga koliko je lako prilagoditi postojeći izveštaj promenljivim potrebama poslovanja (i zakonodavstva) ili kreirati novi, bilo da se radi o izveštaju za poresku upravu ili dijagram zavisnosti potražnje za robom od sezone i drugih faktora. Moćan i fleksibilan sistem izveštavanja koji olakšava izdvajanje potrebnih podataka iz sistema, predstavljanje ih u razumljivom obliku, omogućavajući krajnjem korisniku da rekonfiguriše standardni izveštaj kako bi sagledao podatke u novom svetlu - ovo je ideal koji svaki poslovni sistem treba da teži.

    U platformi 1C:Enterprise, mehanizam koji se zove „Sistem sastavljanja podataka“ (skraćeno DCS) odgovoran je za generisanje izveštaja. U ovom članku pokušaćemo da damo kratak opis ideje i arhitekture ACS mehanizma i njegovih mogućnosti.


    ACS je mehanizam zasnovan na deklarativnom opisu izvještaja. Sistem kontrole pristupa je dizajniran za generisanje izveštaja i za prikaz informacija složene strukture. Inače, pored izrade izvještaja, ACS mehanizam se koristi iu 1C:Enterprise u dinamičkoj listi, alatu za prikaz informacija o listi sa bogatom funkcionalnošću (prikaz ravnih i hijerarhijskih lista, uslovno oblikovanje redova, grupisanja itd. ).

    Malo istorije

    U prvoj verziji platforme 1C:Enterprise 8, verzija 8.0, izvještaji su napravljeni ovako:
    1. Jedan ili više upita je napisano u 1C jeziku upita (jezik sličan SQL-u, više o tome u nastavku).
    2. Napisan je kod koji prenosi rezultate izvršenih upita u tabelarni dokument ili grafikon. Kôd bi također mogao obaviti posao koji se nije mogao obaviti u upitu - na primjer, izračunao je vrijednosti koristeći ugrađeni 1C jezik.
    Pristup je jednostavan, ali ne i najprikladniji - postoje minimalne vizualne postavke, sve se mora programirati „od ruke do ruke“. A jedan od aduta u to vrijeme potpuno nove platforme „1C:Enterprise 8“ bila je minimizacija u aplikativnom rješenju količine koda koji je morao biti napisan ručno, posebno kroz vizualni dizajn. Bilo bi logično slijediti isti put u mehanizmu izvještavanja. To je urađeno razvojem novog mehanizma - Sistema za sastavljanje podataka.

    Jedna od ideja koja je bila osnova sistema kontrole pristupa bila je fleksibilnost i prilagođavanje izveštaja, koji su bili dostupni i programeru i krajnjem korisniku. U idealnom slučaju, želio bih dati krajnjem korisniku pristup istom skupu alata za dizajn izvještaja kao i programeru. Bilo bi logično stvoriti jedan skup alata koji je dostupan svima. Pa, pošto alati zahtijevaju sudjelovanje krajnjeg korisnika, znači da korištenje programiranja u njima treba svesti na minimum (najbolje ga je potpuno eliminirati), a vizualne postavke maksimalno iskoristiti.

    Formulacija problema

    Zadatak pred razvojnim timom bio je da kreira sistem izveštavanja zasnovan ne na algoritamskom (tj. kroz pisanje koda), već na deklarativnom pristupu kreiranju izveštaja. I vjerujemo da je problem uspješno riješen. Prema našem iskustvu, oko 80% potrebnog izveštavanja može se implementirati pomoću ACS-a bez ijednog reda koda (osim pisanja formula za izračunata polja), uglavnom kroz vizuelna podešavanja.
    Razvoj prve verzije SDS-a trajao je oko 5 čovjek-godina.

    Dva jezika

    Dva su jezika uključena u kreiranje izvještaja. 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 sistema, na primjer, u postavkama sastava podataka, za opisivanje izraza korisničkih polja.

    Jezik upita

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

    Lako je vidjeti analoge sekcija standardnih za SQL upite - SELECT, FROM, GROUP BY, ORDER BY.

    Istovremeno, jezik upita sadrži značajan broj ekstenzija koje imaju za cilj da reflektuju specifičnosti finansijskih i ekonomskih problema i maksimiziraju smanjenje napora za razvoj aplikativnih rešenja:

    • Pristup poljima pomoću tačke. Ako su polja tabele referentnog tipa (pohranjuju veze do objekata druge tabele), programer se može pozvati na njih u tekstu zahtjeva kroz “.”, a sistem ne ograničava broj nivoa ugniježđenja takvih veza (na primjer, Narudžba korisnika. Ugovor. Organizacija. Telefon).
    • Višedimenzionalno i višeslojno formiranje rezultata. Zbirni i međuzbirovi se formiraju uzimajući u obzir grupisanje i hijerarhiju, nivoi se mogu prelaziti bilo kojim redoslijedom sa sumiranjem, a osigurava se ispravna konstrukcija totala prema vremenskim dimenzijama.
    • Podrška za virtuelne tabele. Virtuelne tabele koje obezbeđuje sistem omogućavaju vam da dobijete gotovo gotove podatke za većinu aplikativnih zadataka bez potrebe za kreiranjem složenih upita. Dakle, virtuelna tabela može da pruži podatke o bilansima proizvoda po periodima u određenom trenutku. Istovremeno, virtuelne tabele maksimalno koriste pohranjene informacije, na primjer, prethodno izračunate ukupne vrijednosti, itd.
    • Privremeni stolovi. Jezik upita vam omogućava da koristite privremene tabele u upitima. Uz njihovu pomoć možete poboljšati performanse upita, u nekim slučajevima smanjiti broj blokiranja i učiniti tekst upita lakšim za čitanje.
    • Grupni zahtjevi. Da bi rad sa privremenim tabelama bio praktičniji, jezik upita podržava rad sa skupnim upitima - tako se kreiranje privremene tabele i njeno korišćenje stavlja u jedan upit. Skupni zahtjev je niz zahtjeva odvojenih tačkom i zarezom (";"). Zahtjevi u paketu se izvršavaju jedan za drugim. Rezultat izvršavanja paketnog zahtjeva, ovisno o korištenoj metodi, bit će ili rezultat vraćen od posljednjeg zahtjeva u grupi, ili niz rezultata iz svih upita u grupi u nizu u kojem slijede upiti u grupi .
    • Dohvaćanje reprezentacija referentnih polja. Svaka tabela objekata (u kojoj je pohranjena referentna knjiga ili dokument) ima virtuelno polje - „Pregled“. Ovo polje sadrži tekstualni prikaz objekta i olakšava posao kreatora izvještaja. 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“), čime se programer čuva od pisanje izračunatog polja.
    • i sl.
    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 podatke koje ima pravo vidjeti) i funkcionalne opcije (tj. u skladu sa s onima konfiguriranim u funkcionalnosti aplikativnog rješenja).

    Postoje i posebna proširenja jezika upita za sisteme kontrole pristupa. Proširenje se vrši pomoću posebnih sintaktičkih instrukcija zatvorenih u vitičaste zagrade i postavljene direktno u tijelo zahtjeva. Koristeći ekstenzije, programer određuje koje će operacije krajnji korisnik moći izvršiti prilikom prilagođavanja izvještaja.

    Na primjer:

    • ODABIR. Ova rečenica opisuje polja koja će korisnik moći odabrati za izlaz. Nakon ove ključne riječi, pseudonimi polja sa glavne liste odabira upita koja će biti dostupna za konfiguraciju su navedeni, odvojeni zarezima. Primjer: (ODABIR artikla, skladište)
    • GDJE. Opisana su polja na koja korisnik može primijeniti selekciju. Ovaj prijedlog koristi polja tabele. Upotreba pseudonima polja liste za izbor nije dozvoljena. Svaki dio unije može sadržavati vlastiti WHERE element. Primjeri: (GDJE Stavka.*, Skladište), (GDJE Dokument.Datum >= &Datum početka, Dokument.Datum<= &ДатаКонца}
    • i sl.
    Primjer korištenja ekstenzija:

    Jezik izraza sastava podataka

    Jezik izraza sastava podataka dizajniran je za pisanje izraza koji se posebno koriste za opisivanje prilagođenih izraza polja. SKD vam omogućava da definirate prilagođena polja u izvještaju koristeći ili vlastite izraze ili skupove opcija s uvjetima za njihov odabir (analogno CASE-u u SQL-u). Prilagođena polja su slična izračunatim poljima. Mogu se postaviti iu konfiguratoru iu 1C:Enterprise načinu rada, ali se funkcije zajedničkih modula ne mogu koristiti u prilagođenim izrazima polja. Stoga su prilagođena polja namijenjena korisniku, a ne programeru.

    primjer:

    Proces kreiranja izvještaja o sistemu kontrole pristupa

    Prilikom kreiranja izvještaja potrebno je napraviti izgled koji definira kako će podaci biti prikazani u izvještaju. Možete kreirati raspored na osnovu dijagrama rasporeda podataka. Dijagram rasporeda podataka opisuje suštinu podataka koji se dostavljaju izvještaju (odakle dobiti podatke i kako možete kontrolisati njihov izgled). Šema sastava podataka je osnova na kojoj se mogu generirati sve vrste izvještaja. Šema sastava podataka može sadržavati:
    • tekst zahtjeva sa uputstvima za sistem 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 polja i grupisanja;
    • i sl.

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

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

    U šemi rasporeda podataka može biti nekoliko skupova podataka, skupovi podataka se mogu povezati u rasporedu na bilo koji način, mogu se dodati izračunata polja, specificirati parametri izvještaja itd. Vrijedi spomenuti zanimljivu značajku mehanizma upita u 1C: Enterprise. Upiti se na kraju prevode u dijalekt SQL-a specifičan za DBMS sa kojim aplikacija direktno radi. Općenito, nastojimo maksimalno iskoristiti mogućnosti DBMS servera (ograničeni smo činjenicom da koristimo samo one mogućnosti koje su istovremeno dostupne u svim DBMS-ovima koje podržava 1C:Enterprise platforma - 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 nivou sheme sastava podataka, već možemo dodati prilagođena polja i koristiti funkcije u njima u ugrađenom 1C razvojnom jeziku (uključujući i one koje smo napisali), što uvelike proširuje mogućnosti izvještaja. Tehnički, to izgleda ovako - sve što se može prevesti u SQL prevodi se u SQL, upit se izvršava na nivou DBMS-a, rezultati upita se stavljaju u memoriju 1C aplikacijskog servera i SKD izračunava za svaki zapis vrijednosti izračunatih polja čije su formule napisane na 1C jeziku.


    Dodavanje prilagođenih polja

    Možete dodati proizvoljan broj tabela i grafikona u izvještaj:


    Dizajner izvještaja


    Izvještaj o vremenu rada

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

    Proces konstruisanja i generisanja izveštaja može se ukratko opisati na sledeći način:

    • Programer u vremenu dizajna uz pomoć dizajnera (ili u runtime koristeći kod) određuje shemu rasporeda podataka:
      • Tekst zahtjeva/zahtjeva
      • Opis izračunatih polja
      • Odnosi između zahtjeva (ako ih ima više)
      • Report Options
      • Zadane postavke
      • itd.
    • Gore navedene postavke su sačuvane u izgledu
    • Korisnik otvara izvještaj
      • Moguće je napraviti dodatna podešavanja (na primjer, promijeniti vrijednosti parametara)
      • Klikne na dugme "Generiraj".
    • Korisničke postavke se primjenjuju na shemu sastava podataka koju je definirao programer.
    • Formira se posredni raspored sastava podataka koji sadrži upute odakle se podaci primaju. Posebno se prilagođavaju upiti navedeni u izgledu. Dakle, polja koja se ne koriste u izvještaju se uklanjaju iz zahtjeva (ovo se radi kako bi se količina primljenih podataka svela na minimum). Sva polja koja učestvuju u izračunatim formulama polja dodaju se upitu.
    • Procesor kompozicije podataka dolazi u igru. Procesor rasporeda izvršava upite, povezuje skupove podataka, izračunava vrijednosti za izračunata polja i resurse i vrši grupisanje. Jednom riječju, radi sve kalkulacije koje nisu izvršene na nivou DBMS-a.
    • Procesor za izlaz podataka pokreće zahtjev za izvršenje i prikazuje primljene podatke u tabelarnom dokumentu, grafikonu itd.


    Proces generisanja izveštaja korišćenjem ACS mehanizma

    Trudimo se da minimiziramo količinu podataka izvještaja koji se prenose sa servera na klijentsku aplikaciju. Prilikom prikaza podataka u tabelarnom dokumentu, prilikom otvaranja tabelarnog dokumenta, sa servera prenosimo samo one redove koje korisnik vidi na početku dokumenta. Kako se korisnik kreće duž redova dokumenta, podaci koji nedostaju se preuzimaju sa servera na klijenta.

    Prilagođene postavke

    Svi ACS alati dostupni su i programeru i krajnjem korisniku. Ali praksa je pokazala da je krajnji korisnik često zaplašen obiljem mogućnosti alata. Štaviše, u većini slučajeva krajnjem korisniku nije potrebna sva moć podešavanja - dovoljno mu je da ima brz pristup podešavanju jednog ili dva parametra izveštaja (na primer, period i druga strana). Počevši od određene verzije platforme, programer izvještaja ima mogućnost da označi koje postavke izvještaja su dostupne korisniku. Ovo se radi pomoću potvrdnog okvira „Uključi u korisničke postavke“. Također, postavke izvještaja sada imaju oznaku “Display Mode”, koja uzima jednu od tri vrijednosti:
    • Brzi pristup. Postavka će biti prikazana direktno na vrhu prozora izvještaja.
    • Obicno. Postavka će biti dostupna putem dugmeta „Postavke“.
    • Nije dostupno. Postavka neće biti dostupna krajnjem korisniku.


    Podešavanje načina prikaza u vremenu dizajna


    Prikažite postavku u načinu brzog pristupa za vrijeme rada (ispod gumba Generiraj)

    Razvojni planovi

    Jedno od naših prioritetnih područja u razvoju sistema kontrole pristupa je pojednostavljenje korisničkih postavki. Naše iskustvo pokazuje da je za neke krajnje korisnike rad sa korisničkim postavkama i dalje veliki poduhvat. Mi to uzimamo u obzir i radimo u tom pravcu. U skladu s tim, programerima će biti lakše raditi sa sistemima kontrole pristupa, jer Kao i do sada, želimo da obezbedimo jedinstven alat za podešavanje izveštaja i za programera i za krajnjeg korisnika.