Cum se configurează smartphone-uri și PC-uri. Portal informativ
  • Acasă
  • Windows Phone
  • Exprimarea în parametrii ckd 1s 8.2. Limbajul de expresie al sistemului de compunere a datelor (1Cv8)

Exprimarea în parametrii ckd 1s 8.2. Limbajul de expresie al sistemului de compunere a datelor (1Cv8)

În această mică notă, vreau să arăt cum puteți rezuma valorile la diferite niveluri de grupare într-un raport folosind sistemul de compunere a datelor.
După cum se arată în imagine, numai la nivelul de grupare „Grupuri de articole”, se calculează resursa „Comandă”, aceasta afișează cât trebuie să comandați pentru grupul de articole curent în funcție de anumite condiții:


Această valoare poate fi calculată doar la acest nivel de grupare, deoarece, deasupra sau mai jos, nu există valori pentru calcul. De exemplu, la nivelul înregistrărilor detaliate, nu există date privind numărul maxim dintr-un grup, deoarece aceste date sunt valabile doar pentru grupul în ansamblu, și nu pentru componentele sale individuale.

În consecință, acum este necesar să se calculeze totalurile pentru grupările de mai sus („Depozite”, „Tipuri de depozite”) și totalul general.
Pentru a face acest lucru, utilizați funcția EvaluateGroupExpressionArray:
CALCULAȚI EXPRESIA PE GRUP DE MATRICE (EVALEXPRESSIONWITHGROUPARRAY)
Sintaxă:
EvaluateGroupExpressionArray (,)
Descriere:
Funcția returnează un tablou, fiecare element al căruia conține rezultatul evaluării expresiei care urmează să fie grupată după câmpul specificat.
Compozitorul layout-ului, când generează layout-ul, convertește parametrii funcției în termenii câmpurilor de layout compoziție de date. De exemplu, câmpul Cont va fi convertit în Dataset.Contractor.
Când se generează expresii pentru afișarea unui câmp personalizat, a cărui expresie conține doar funcția EvaluateArrayWithGroupArray (), compozitorul aspectului generează expresia afișată astfel încât informațiile afișate să fie ordonate. De exemplu, pentru un câmp personalizat cu o expresie:

CalculateExpressionWithGroupingArray ("Suma (Suma de afaceri)", "Contraparte")
Compozitorul aspectului va genera următoarea expresie pentru ieșire:

Conectați rânduri (Matrice (Arrange (EvaluateExpressionWith GroupingValuesTable) ("Vizualizare (Suma (Dataset.SumTurnover)), Sum (Dataset.SumTurnover)", "Dataset.Contractor"), "2")))

Parametri:

Tip: șir. Expresia de a evalua. Un șir, de exemplu, Amount (AmountTurnover).

Tip: șir. Expresiile de grupare câmp sunt expresii de grupare câmp, separate prin virgulă. De exemplu, Counterparty, Party.

Tip: șir. O expresie care descrie selecția aplicată înregistrărilor detaliate. Expresia nu acceptă utilizarea funcțiilor agregate. De exemplu, Delete Mark = False.

Tip: șir. O expresie care descrie filtrarea aplicată înregistrărilor de grup. De exemplu, Sum (SumTurnover)> & Parameter1.
Exemplu:

Maxim (CalculateExpressionWithGroupArray ("Suma (Suma Cifra de afaceri)", "Contraparte"));

O descriere detaliată a sintaxei funcției poate fi găsită la http://its.1c.ru/db/v837doc#bookmark:dev:TI000000582
Acum, pentru calcul, vom duplica câmpul „Comandă”, cu diferite valori „Calculați prin...”, folosind următoarele expresii, rețineți că în fiecare nivel superior, valorile nivelurilor de sub grupări sunt folosit.

Ca rezultat, obținem următoarea construcție:

Conţinut
1 Limbajul de exprimare al sistemului de compunere a datelor
2 Literale
2.1 șir
2.2 Număr
2.3 Data
2.4 Boolean
2.5 Valoare
3 Operații asupra numerelor
3.1 Unare -
3.2 Unar +
3.3 Binar -
3.4 Binar +
3.5 Opera de artă
3.6 Diviziunea
3.7 Restul
4 Operații pe șiruri
4.1 Concatenare (binar +)
4.2 Similar
5 Operații de comparare
5.1 Egal
5.2 Nu este egal
5.3 Mai puțin
5.4 Mai mult
5.5 Mai mic sau egal
5.6 Mai mare sau egal
5.7 Pasul B
5.8 Operația de verificare a existenței unei valori într-un set de date
5.9 Operațiunea de verificare a unei valori pentru NULL
5.10 Operația de verificare a unei valori pentru inegalitatea NULL
6 Operații logice
6.1 Operarea NU
6.2 Operarea ŞI
6.3 Operarea SAU
7 Funcții agregate
7.1 Suma
7.2 Cantitatea
7.3 Numărul de diferite
7.4 Maxim
7,5 Minimum
7,6 Medie
8 Alte operațiuni
8.1 Operațiunea SELECT
9 Reguli pentru compararea a două valori
10 Lucrul cu NULL
11 Priorități ale operațiunilor
12 Funcțiile limbajului de expresie ale sistemului de compunere a datelor
12.1 Calculați
12.2 Nivel
12.3 Număr după comandă
12.4 NumberOrderInGroup
12.5 Format
12.6 Începutul perioadei
12.7 Sfârșitul Perioadei
12.8 Adăugați la dată
12.9 Diferența de dată
12.10 Subșir
12.11 Lungimea liniei
12.12 Anul
12.13 Trimestru
12.14 luna
12.15 Ziua anului
12.16 Ziua
12.17 Săptămâna
12.18 Ziua săptămânii
Ora 12.19
12.20 minute
12.21 Al doilea
12.22 Express
12.23 Da Null
12.24 Funcţiile modulelor comune

Limbajul de expresie al sistemului de compunere a datelor

Limbajul de expresie al sistemului de compunere a datelor este conceput pentru a scrie expresii utilizate în diferite părți ale sistemului.

Expresiile sunt utilizate în următoarele subsisteme:

  • schema de compunere a datelor - pentru descrierea câmpurilor calculate, a câmpurilor totale, a expresiilor de relație etc.
  • setări de compoziție a datelor - pentru descrierea expresiilor de câmp personalizate;
  • șablon de compoziție a datelor - pentru descrierea expresiilor de relații ale setului de date, descrierea parametrilor șablonului etc.

Literale

Expresiile pot conține literale. Literale de următoarele tipuri sunt posibile:

  • Linia;
  • Număr;
  • Data;
  • boolean.

Linia

Un literal șir este scris în caractere „” „, de exemplu:

„Literal șir”


Dacă trebuie să utilizați caracterul "" "în interiorul unui șir literal, ar trebui să utilizați două astfel de caractere.

De exemplu:

„Literal“ „între ghilimele“ „“

Număr

Numărul se scrie fără spații, în format zecimal. Partea fracționată este separată cu simbolul „.”. De exemplu:

Data

Literalul de dată este scris folosind literalul cheie DATETIME. După acest cuvânt cheie, între paranteze, separate prin virgule, sunt enumerate anul, luna, ziua, orele, minutele, secundele. Ora este opțională.

De exemplu:
DATA (1975, 1, 06) - 6 ianuarie 1975
DATA ORA (2006, 12, 2, 23, 56, 57) - 2 decembrie 2006, 23 ore 56 minute 57 secunde, 23 ore 56 minute 57 secunde

boolean

Valorile booleene pot fi scrise folosind literalele True, False.

Sens

Pentru a specifica literali de alte tipuri (enumerări de sistem, date predefinite), este folosit cuvântul cheie Value, urmat de numele literal din paranteze.
Valoare (Tip de cont. Activ)

Operații pe numere

unar -

Această operațiune are scopul de a inversa semnul unui număr. De exemplu:
-Vânzări.Cantitate

Unar +

Această operație nu efectuează nicio acțiune asupra numărului. De exemplu:
+ Vânzări.Cantitate

binar -

Această operație este concepută pentru a calcula diferența dintre două numere. De exemplu:
Solduri și cifre de afaceri. Sold inițial - Solduri și cifre de afaceri. Sold final
Solduri SI Cifra de afaceri.Sold initial - 100
400 – 357

Binar +

Această operație este concepută pentru a calcula suma a două numere. De exemplu:
Solduri și cifre de afaceri. Sold inițial + Solduri și cifre de afaceri
Solduri SI Cifra de afaceri.Sold initial + 100
400 + 357

Muncă

Această operație este concepută pentru a calcula produsul a două numere. De exemplu:
Nomenclator.Preț * 1.2
2 * 3.14

Divizia

Această operație are scopul de a obține rezultatul împărțirii unui operand la altul. De exemplu:
Nomenclator.Preţ / 1.2
2 / 3.14

Restul diviziei

Această operație are scopul de a obține restul împărțirii unui operand la altul. De exemplu:
Nomenclatură.Preţ% 1.2
2 % 3.14

Operații cu șiruri

Concatenare (binar +)

Această operațiune este menită să concateneze două șiruri. De exemplu:
Nomenclatură.Articol + „:” + Nomenclatură.Nume

Ca

Această operație verifică dacă șirul se potrivește cu modelul trecut.

Valoarea operatorului LIKE este TRUE dacă valoarea<Выражения>se potrivește cu modelul și FALSE în caz contrar.

Următoarele personaje în<Строке_шаблона>are sens în afară de caracterul de linie următoare:

  • % - procent: o secvență care conține zero sau mai multe caractere arbitrare;
  • _ - subliniere: un caracter arbitrar;
  • […] - unul sau mai multe caractere între paranteze drepte: un caracter, oricare dintre cele enumerate între paranteze drepte. Enumerarea poate conține intervale, de exemplu, a-z, adică un caracter arbitrar inclus în interval, inclusiv capetele intervalului;
  • [^…] - între paranteze pătrate o pictogramă de negație urmată de unul sau mai multe caractere: orice caracter, cu excepția celor enumerate după pictograma de negație;

Orice alt simbol înseamnă el însuși și nu are nicio semnificație suplimentară. Dacă este necesar să scrieți unul dintre caracterele enumerate ca dvs., atunci acesta trebuie să fie precedat de<Спецсимвол>specificat după cuvântul cheie ESCAPE.

De exemplu, șablonul
„% ABC [abvg] \ _ abc%” SYMBOL SPECIAL „\”

înseamnă un subșir format dintr-o succesiune de caractere: litera A; literele B; literele B; o cifră; una dintre literele a, b, c sau d; caracter de subliniere; literele a; literele b; literele c. Mai mult, această secvență poate fi localizată pornind de la o poziție arbitrară în linie.

Operatii de comparatie

Egal

Această operație are scopul de a compara doi operanzi pentru egalitate. De exemplu:
Sales.Contractor = Sales.NomenclatureMainSupplier

Nu este egal

Această operație are scopul de a compara doi operanzi pentru inegalitate. De exemplu:
Vânzări.Vânzări Contractor.NomenclaturăMainSupplier

Mai puțin

Această operație are scopul de a verifica dacă primul operand este mai mic decât al doilea. De exemplu:
VânzăriCurrent.Suma

Mai mult

Această operație are scopul de a verifica dacă primul operand este mai mare decât al doilea. De exemplu:
SalesCurrent.Total> SalesPast.Amount

Mai puțin sau egal

Această operație are scopul de a verifica dacă primul operand este mai mic sau egal cu al doilea. De exemplu:
VânzăriCurrent.Suma

Mai mult sau egal

Această operație are scopul de a verifica dacă primul operand este mai mare sau egal cu al doilea. De exemplu:
SalesCurrent.Amount> = SalesPast.Amount

Operațiunea B

Această operațiune verifică prezența unei valori în lista de valori transmisă. Rezultatul operației va fi True dacă valoarea este găsită sau False în caz contrar. De exemplu:
Elementul B (& elementul 1 și articolul 2)

Operația de verificare a existenței unei valori într-un set de date

Operația verifică existența unei valori în setul de date specificat. Setul de date de validare trebuie să conțină un câmp. De exemplu:
Vânzări Contrapărți către contrapărți

Operație de verificare a unei valori pentru NULL

Această operație returnează True dacă valoarea este NULL. De exemplu:
Vânzări.Contractantul ESTE NUL

Operația de verificare a unei valori pentru inegalitatea NULL

Această operație returnează True dacă valoarea nu este NULL. De exemplu:
Vânzări.Contractantul NU ESTE NUL

Operații logice

Operațiile logice iau expresii booleene ca operanzi.

Operațiunea NU

Operația NU returnează True dacă operandul său este False și False dacă operandul său este True. De exemplu:
NOT Document.Consignee = Document.Shipper

Operațiunea ȘI

Operatorul AND returnează True dacă ambii operanzi sunt True și False dacă unul dintre operanzi este False. De exemplu:
Document.Consignee = Document.Shipper AND Document.Consignee = & Contraparte

SAU operare

Operația SAU returnează True dacă unul dintre operanzi este True și False dacă ambii operanzi sunt False. De exemplu:
Document.Consignee = Document.Carrier SAU Document.Consignee = & Contraparte

Funcții agregate

Funcțiile agregate efectuează anumite acțiuni asupra unui set de date.

Sumă

Funcția de agregare Sum calculează suma valorilor expresiei transmise acesteia ca argument pentru toate înregistrările de detalii. De exemplu:
Sumă (Vânzări.Suma Cifra de afaceri)

Cantitate

Funcția Count calculează numărul de valori non-nule. De exemplu:
Cantitate (Vânzări. Antreprenor)

Număr de diferite

Această funcție calculează numărul de valori distincte. De exemplu:
Cantitate (Vânzări diverse. Antreprenor)

Maxim

Funcția primește valoarea maximă. De exemplu:
Maxim (Solduri.Cantitate)

Minim

Funcția primește valoarea minimă. De exemplu:
Minim (Solduri.Cantitate)

Media

Funcția primește media valorilor non-NULL. De exemplu:
Medie (Solduri. Sumă)

Alte operațiuni

Operațiunea SELECT

Operation Select este conceput pentru a selecta una dintre mai multe valori atunci când sunt îndeplinite anumite condiții. De exemplu:
Alegere Când Sumă> 1000 Apoi Sumă Altfel 0 Sfârșit

Reguli pentru compararea a două valori

Dacă tipurile de valori comparate diferă unele de altele, atunci relația dintre valori este determinată în funcție de prioritatea tipurilor:
NULL (cel mai mic);
boolean;
Număr;
Data;
Linia;
Tipuri de referință

Relațiile dintre diferitele tipuri de referință sunt determinate pe baza numerelor de referință ale tabelelor corespunzătoare unui anumit tip.

Dacă tipurile de date se potrivesc, atunci valorile sunt comparate conform următoarelor reguli:
Tipul boolean are o valoare TRUE mai mare decât valoarea FALSE;
tipul Număr are regulile obișnuite de comparare pentru numere;
tipul Date are date anterioare mai mici decât cele ulterioare;
pentru tipul String - comparații de șiruri în conformitate cu caracteristicile naționale stabilite ale bazei de date;
tipurile de referință sunt comparate pe baza valorilor lor (numerele de înregistrare etc.).

Lucrul cu valori NULL

Orice operație în care valoarea unuia dintre operanzi este NULL va avea ca rezultat NULL.

Exista si exceptii:
operația AND va returna NULL numai dacă niciunul dintre operanzi nu este fals;
operația SAU va returna NULL numai dacă niciunul dintre operanzi nu este adevărat.

Priorități operaționale

Operațiunile au următoarele priorități (prima linie are cea mai mică prioritate):
SAU;
ȘI;
NU;
B ESTE NUL NU ESTE NUL;
=, <>, <=, <, >=, >;
binar +, binar -;
*, /, %;
Unar +, unar -.

Funcțiile limbajului de expresie ale sistemului de compunere a datelor

calculati

Funcția Calculate este concepută pentru a evalua o expresie în contextul unei grupări. Funcția are următorii parametri:
Expresie. Tastați șir. Conține o expresie calculată;
Gruparea. Tastați șir. Conține numele grupării în contextul căreia expresia urmează să fie evaluată. Dacă un șir gol este folosit ca nume de grupare, calculul va fi efectuat în contextul grupării curente. Dacă linia GeneralTotal este folosită ca nume de grupare, calculul va fi efectuat în contextul totalului general. În caz contrar, calculul se va efectua în contextul grupării părinte cu același nume. De exemplu:
Sumă (Vânzări.Suma Cifra de afaceri) / Calculați („Suma (Vânzări.Suma Cifra de afaceri)”, „TotalTotal”)

În acest exemplu, rezultatul va fi raportul dintre suma pentru câmpul Sales.SumTurnover din înregistrarea de grupare și valoarea aceluiași câmp în întregul aspect.

Nivel

Funcția este menită să obțină nivelul curent de înregistrare.

Exemplu:
Nivel()

NumărComandă

Obțineți următorul număr de ordine.

Exemplu:
NumărComandă ()

NumberOrderInGroup

Returnează următorul număr secvenţial din gruparea curentă.

Exemplu:
NumberOrderInGrouping ()

Format

Obțineți șirul formatat al valorii transmise.

Șirul de format este setat în conformitate cu șirul de format 1C: Enterprise.

Parametri:
Sens;
Formatați șirul.

Exemplu:
Format (Facturi.SumDoc, „NPT = 2”)

Începutul perioadei

Parametri:

    • Minut;
    • Zi;
    • O săptămână;
    • Lună;
    • Sfert;
    • Deceniu;
    • Jumătate de an.

Exemplu:
Începutul perioadei (DateTime (2002, 10, 12, 10, 15, 34), „Lună”)

Rezultat:

01.10.2002 0:00:00

Sfârșitul perioadei

Funcția este concepută pentru a extrage o anumită dată dintr-o dată dată.

Parametri:

  • Data. Tastați Data. Data specificată;
  • Tipul perioadei. Tastați șir. Conține una dintre valorile:
    • Minut;
    • Zi;
    • O săptămână;
    • Lună;
    • Sfert;
    • Deceniu;
    • Jumătate de an.

Exemplu:
EndPeriod (DateTime (2002, 10, 12, 10, 15, 34), „Săptămâna”)

Rezultat:

13.10.2002 23:59:59

Adăugați la data

Funcția este destinată să adauge o anumită valoare datei.

Parametri:

  • Tip de mărire. Tastați șir. Conține una dintre valorile:
    • Minut;
    • Zi;
    • O săptămână;
    • Lună;
    • Sfert;
    • Deceniu;
    • Jumătate de an.
Valoare - cu cât ar trebui mărită data. Număr de tip. Partea fracționată este ignorată.

Exemplu:
Adăugați la dată (DateTime (2002, 10, 12, 10, 15, 34), „Lună”, 1)

Rezultat:

12.11.2002 10:15:34

Diferența de dată

Funcția este concepută pentru a obține diferența dintre două date.

Parametri:

  • Expresie. Tastați Data. data originală;
  • Expresie. Tastați Data. Data scăzută;
  • Tip de diferență. Tastați șir. Conține una dintre valorile:
    • Al doilea;
    • Minut;
    • Zi;
    • Lună;
    • Sfert;

Exemplu:
DIFERENTA (DATA ORA (2002, 10, 12, 10, 15, 34),
DATA (2002, 10, 14, 9, 18, 06), „ZIUA”)

Rezultat:

Subșir

Această funcție este concepută pentru a extrage un subșir dintr-un șir.

Parametri:

  • Linia. Tastați șir. Șirul din care se extrage subșirul;
  • Poziţie. Număr de tip. Poziția caracterului din care începe subșirul care urmează să fie extras din șir;
  • Lungime. Număr de tip. Lungimea subșirului de selectat.

Exemplu:
SUBSTRAT (Contractanti.Adresa, 1, 4)

Lungimea liniei

Funcția este concepută pentru a determina lungimea unui șir.

Parametru:
Linia. Tastați șir. Șirul care trebuie specificat în lungime.

Exemplu:
Șir (Conturi.Adresă)

Această funcție este concepută pentru a extrage un an dintr-o valoare de tipul Date.

Parametru:
Data. Tastați Data. Data până la care este determinat anul.

AN (Data facturii)

Sfert

Această funcție are scopul de a extrage un sfert de număr dintr-o valoare de tip Date. Numărul sfert este în mod normal în intervalul de la 1 la 4.

Parametru
Data. Tastați Data. Data până la care se stabilește trimestrul

TRIMESTRE (Data expedierii)

Lună

Această funcție are scopul de a extrage numărul lunii dintr-o valoare de tipul Date. Numărul lunii este în mod normal în intervalul de la 1 la 12.
Data. Tastați Data. Data până la care se stabilește luna.
LUNA (Data facturii)

Ziua Anului

Această funcție este concepută pentru a obține ziua anului dintr-o valoare de tip Date. Ziua anului este în mod normal în intervalul de la 1 la 365 (366).
Data. Tastați Data. Data până la care se stabilește ziua anului.
ZIUA ANULUI (Data facturii)

Zi

Această funcție este destinată să obțină ziua lunii dintr-o valoare de tip Date. Ziua lunii este în mod normal între 1 și 31.
Data. Tastați Data. Data până la care se stabilește ziua lunii.
ZI (Data facturii)

O săptămână

Această funcție are scopul de a obține numărul săptămânii din an dintr-o valoare de tip Date. Săptămânile anului sunt numerotate începând cu 1.
Data. Tastați Data. Data după care sunt determinate numerele săptămânii.
SĂPTĂMÂNĂ (Data facturii)

Zi a săptămânii

Această funcție este destinată să obțină ziua săptămânii dintr-o valoare de tip Date. Ziua săptămânii este în mod normal între 1 (luni) și 7 (duminică).
Data. Tastați Data. Data după care este determinată ziua săptămânii.
ZIUA SĂPTĂMÂNII (Data facturii)

Această funcție este concepută pentru a obține ora din zi dintr-o valoare de tip Data. Ora zilei variază de la 0 la 23.
Data. Tastați Data. Data după care este determinată ora zilei.
ORA (Data expedierii)

Minut

Această funcție este destinată să obțină minutul unei ore dintr-o valoare de tip Date. Minutul orei variază de la 0 la 59.
Data. Tastați Data. Data după care este determinat minutul orei.
MINUT (Data facturii)

Al doilea

Această funcție este destinată să obțină o secundă dintr-un minut dintr-o valoare de tip Date. Secunda dintr-un minut variază de la 0 la 59.
Data. Tastați Data. Data după care sunt determinate secundele minutei.
AL DOILEA (Data facturii)

Expres

Această funcție are scopul de a extrage un tip dintr-o expresie care poate conține un tip complex. Dacă expresia conține un alt tip decât cel cerut, va fi returnată o valoare NULL.

Parametri:
Expresia care trebuie convertită;
Indicație tip. Tastați șir. Conține un șir de tip. De exemplu, „Număr”, „Șir”, etc. Pe lângă tipurile primitive, acest șir poate conține numele tabelului. În acest caz, se va încerca să se exprime la o referire la tabelul specificat.

Exemplu:
Express (Data.Props1, „Număr (10.3)”)

Da Null

Această funcție returnează valoarea celui de-al doilea parametru dacă valoarea primului parametru este NULL.

În caz contrar, va fi returnată valoarea primului parametru.

Exemplu:
YesNULL (Suma (Vânzări.Suma Cifra de afaceri), 0)

Funcții comune ale modulului

O expresie a motorului de compoziție de date poate conține apeluri la funcții ale modulelor de configurare comune globale. Nu este necesară nicio sintaxă suplimentară pentru a apela astfel de funcții.

Exemplu:
Nume prescurtat (Documents.Link, Documents.Date, Documents.Number)

În acest exemplu, funcția „AbreviatedName” va fi apelată din modulul de configurare generală.

Rețineți că utilizarea funcțiilor modulelor comune este permisă numai atunci când este specificat parametrul corespunzător al procesorului de compoziție a datelor.

În plus, funcțiile modulelor comune nu pot fi utilizate în expresii de câmp personalizate.

[trebuie să vă înregistrați pentru a vedea linkul]

Limbajul de expresie al sistemului de compunere a datelor

Limbajul de expresie al sistemului de compunere a datelor este conceput pentru a scrie expresii utilizate în diferite părți ale sistemului.

Expresiile sunt utilizate în următoarele subsisteme:

  • schema de compunere a datelor - pentru descrierea câmpurilor calculate, a câmpurilor totale, a expresiilor de relație etc.
  • setări de compoziție a datelor - pentru descrierea expresiilor de câmp personalizate;
  • șablon de compoziție a datelor - pentru descrierea expresiilor de relații ale setului de date, descrierea parametrilor șablonului etc.

Literale

Expresiile pot conține literale. Literale de următoarele tipuri sunt posibile:

  • Linia;
  • Număr;
  • Data;
  • boolean.

Linia

Un literal șir este scris în caractere „” „, de exemplu:

„Literal șir”

Dacă trebuie să utilizați caracterul "" "în interiorul unui șir literal, ar trebui să utilizați două astfel de caractere.

De exemplu:

„Literal“ „între ghilimele“ „“

Număr

Numărul se scrie fără spații, în format zecimal. Partea fracționată este separată cu simbolul „.”. De exemplu:

10.5 200

Data

Literalul de dată este scris folosind literalul cheie DATETIME. După acest cuvânt cheie, între paranteze, separate prin virgule, sunt enumerate anul, luna, ziua, orele, minutele, secundele. Ora este opțională.

De exemplu:

DATA ORA (1975, 1, 06) - 6 ianuarie 1975 DATA (2006, 12, 2, 23, 56, 57) - 2 decembrie 2006, 23 ore 56 minute 57 secunde, 23 ore 56 minute 57 secunde

boolean

Valorile booleene pot fi scrise folosind literalele True, False.

Sens

Pentru a specifica literali de alte tipuri (enumerări de sistem, date predefinite), este folosit cuvântul cheie Value, urmat de numele literal din paranteze.

Valoare (Tip de cont. Activ)

Operații pe numere

unar -

Această operațiune are scopul de a inversa semnul unui număr. De exemplu:

Vânzări.Număr

Unar +

Această operație nu efectuează nicio acțiune asupra numărului. De exemplu:

Vânzări.Număr

binar -

Această operație este concepută pentru a calcula diferența dintre două numere. De exemplu:

Resturi și rulaje. Sold inițial - Resturi și rulaje. Sold final Resturi și rulaje. Sold inițial - 100 400 - 357

Binar +

Această operație este concepută pentru a calcula suma a două numere. De exemplu:

Solduri și cifre de afaceri. Sold inițial + Solduri și cifre de afaceri. Solduri și cifre de afaceri. Sold inițial + 100 400 + 357

Muncă

Această operație este concepută pentru a calcula produsul a două numere. De exemplu:

Nomenclator.Preț * 1,2 2 * 3,14

Divizia

Această operație are scopul de a obține rezultatul împărțirii unui operand la altul. De exemplu:

Nomenclator.Pret / 1.2 2 / 3.14

Restul diviziei

Această operație are scopul de a obține restul împărțirii unui operand la altul. De exemplu:

Nomenclatură Preț% 1,2 2% 3,14

Operații cu șiruri

Concatenare (binar +)

Această operațiune este menită să concateneze două șiruri. De exemplu:

Nomenclatură.Articol + „:” + Nomenclatură.Nume

Ca

Această operație verifică dacă șirul se potrivește cu modelul trecut.

Valoarea operatorului LIKE este TRUE dacă valoarea<Выражения>se potrivește cu modelul și FALSE în caz contrar.

Următoarele personaje în<Строке_шаблона>are sens în afară de caracterul de linie următoare:

  • % - procent: o secvență care conține zero sau mai multe caractere arbitrare;
  • _ - subliniere: un caracter arbitrar;
  • […] - unul sau mai multe caractere între paranteze drepte: un caracter, oricare dintre cele enumerate între paranteze drepte. Enumerarea poate conține intervale, de exemplu, a-z, adică un caracter arbitrar inclus în interval, inclusiv capetele intervalului;
  • [^…] - între paranteze pătrate o pictogramă de negație urmată de unul sau mai multe caractere: orice caracter, cu excepția celor enumerate după pictograma de negație;

Orice alt simbol înseamnă el însuși și nu are nicio semnificație suplimentară. Dacă este necesar să scrieți unul dintre caracterele enumerate ca dvs., atunci acesta trebuie să fie precedat de<Спецсимвол>specificat după cuvântul cheie ESCAPE.

De exemplu, șablonul

„% ABC [abvg] \ _ abc%” SYMBOL SPECIAL „\”

înseamnă un subșir format dintr-o succesiune de caractere: litera A; literele B; literele B; o cifră; una dintre literele a, b, c sau d; caracter de subliniere; literele a; literele b; literele c. Mai mult, această secvență poate fi localizată pornind de la o poziție arbitrară în linie.

Operatii de comparatie

Egal

Această operație are scopul de a compara doi operanzi pentru egalitate. De exemplu:

Sales.Contractor = Sales.NomenclatureMainSupplier

Nu este egal

Această operație are scopul de a compara doi operanzi pentru inegalitate. De exemplu:

Vânzări, antreprenor<>Vânzări.NomenclaturăMainSupplier

Mai puțin

Această operație are scopul de a verifica dacă primul operand este mai mic decât al doilea. De exemplu:

VânzăriCurrent.Suma< ПродажиПрошлые.Сумма

Mai mult

Această operație are scopul de a verifica dacă primul operand este mai mare decât al doilea. De exemplu:

SalesCurrent.Total> SalesPast.Amount

Mai puțin sau egal

Această operație are scopul de a verifica dacă primul operand este mai mic sau egal cu al doilea. De exemplu:

VânzăriCurrent.Suma<= ПродажиПрошлые.Сумма

Mai mult sau egal

Această operație are scopul de a verifica dacă primul operand este mai mare sau egal cu al doilea. De exemplu:

SalesCurrent.Amount> = SalesPast.Amount

Operațiunea B

Această operațiune verifică prezența unei valori în lista de valori transmisă. Rezultatul operației va fi True dacă valoarea este găsită sau False în caz contrar. De exemplu:

Elementul B (& elementul 1 și articolul 2)

Operația de verificare a existenței unei valori într-un set de date

Operația verifică existența unei valori în setul de date specificat. Setul de date de validare trebuie să conțină un câmp. De exemplu:

Vânzări Contrapărți către contrapărți

Operație de verificare a unei valori pentru NULL

Această operație returnează True dacă valoarea este NULL. De exemplu:

Vânzări.Contractantul ESTE NUL

Operația de verificare a unei valori pentru inegalitatea NULL

Această operație returnează True dacă valoarea nu este NULL. De exemplu:

Vânzări.Contractantul NU ESTE NUL

Operații logice

Operațiile logice iau expresii booleene ca operanzi.

Operațiunea NU

Operația NU returnează True dacă operandul său este False și False dacă operandul său este True. De exemplu:

NOT Document.Consignee = Document.Shipper

Operațiunea ȘI

Operatorul AND returnează True dacă ambii operanzi sunt True și False dacă unul dintre operanzi este False. De exemplu:

Document.Consignee = Document.Shipper AND Document.Consignee = & Contraparte

SAU operare

Operația SAU returnează True dacă unul dintre operanzi este True și False dacă ambii operanzi sunt False. De exemplu:

Document.Consignee = Document.Carrier SAU Document.Consignee = & Contraparte

Funcții agregate

Funcțiile agregate efectuează anumite acțiuni asupra unui set de date.

Sumă

Funcția de agregare Sum calculează suma valorilor expresiei transmise acesteia ca argument pentru toate înregistrările de detalii. De exemplu:

Sumă (Vânzări.Suma Cifra de afaceri)

Cantitate

Funcția Count calculează numărul de valori non-nule. De exemplu:

Cantitate (Vânzări. Antreprenor)

Număr de diferite

Această funcție calculează numărul de valori distincte. De exemplu:

Cantitate (Vânzări diverse. Antreprenor)

Maxim

Funcția primește valoarea maximă. De exemplu:

Maxim (Solduri.Cantitate)

Minim

Funcția primește valoarea minimă. De exemplu:

Minim (Solduri.Cantitate)

Media

Funcția primește media valorilor non-NULL. De exemplu:

Medie (Solduri. Sumă)

Alte operațiuni

Operațiunea SELECT

Operation Select este conceput pentru a selecta una dintre mai multe valori atunci când sunt îndeplinite anumite condiții. De exemplu:

Alegere Când Sumă> 1000 Apoi Sumă Altfel 0 Sfârșit

Reguli pentru compararea a două valori

Dacă tipurile de valori comparate diferă unele de altele, atunci relația dintre valori este determinată în funcție de prioritatea tipurilor:

  • NULL (cel mai mic);
  • boolean;
  • Număr;
  • Data;
  • Linia;
  • Tipuri de referință

Relațiile dintre diferitele tipuri de referință sunt determinate pe baza numerelor de referință ale tabelelor corespunzătoare unui anumit tip.

Dacă tipurile de date se potrivesc, atunci valorile sunt comparate conform următoarelor reguli:

  • Tipul boolean are o valoare TRUE mai mare decât valoarea FALSE;
  • tipul Număr are regulile obișnuite de comparare pentru numere;
  • tipul Date are date anterioare mai mici decât cele ulterioare;
  • pentru tipul String - comparații de șiruri în conformitate cu caracteristicile naționale stabilite ale bazei de date;
  • tipurile de referință sunt comparate pe baza valorilor lor (numerele de înregistrare etc.).

Lucrul cu valori NULL

Orice operație în care valoarea unuia dintre operanzi este NULL va avea ca rezultat NULL.

Exista si exceptii:

  • operația AND va returna NULL numai dacă niciunul dintre operanzi nu este fals;
  • operația SAU va returna NULL numai dacă niciunul dintre operanzi nu este adevărat.

Priorități operaționale

Operațiunile au următoarele priorități (prima linie are cea mai mică prioritate):

  • B ESTE NUL NU ESTE NUL;
  • =, <>, <=, <, >=, >;
  • binar +, binar -;
  • *, /, %;
  • Unar +, unar -.

Funcțiile limbajului de expresie ale sistemului de compunere a datelor

calculati

Funcția Calculate este concepută pentru a evalua o expresie în contextul unei grupări. Funcția are următorii parametri:

  • Expresie. Tastați șir. Conține o expresie calculată;
  • Gruparea. Tastați șir. Conține numele grupării în contextul căreia expresia urmează să fie evaluată. Dacă un șir gol este folosit ca nume de grupare, calculul va fi efectuat în contextul grupării curente. Dacă linia GeneralTotal este folosită ca nume de grupare, calculul va fi efectuat în contextul totalului general. În caz contrar, calculul se va efectua în contextul grupării părinte cu același nume. De exemplu:
Sumă (Vânzări.Suma Cifra de afaceri) / Calculați („Suma (Vânzări.Suma Cifra de afaceri)”, „TotalTotal”)

În acest exemplu, rezultatul va fi raportul dintre suma pentru câmpul Sales.SumTurnover din înregistrarea de grupare și valoarea aceluiași câmp în întregul aspect.

Nivel

Funcția este menită să obțină nivelul curent de înregistrare.

Nivel()

NumărComandă

Obțineți următorul număr de ordine.

NumărComandă ()

NumberOrderInGroup

Returnează următorul număr secvenţial din gruparea curentă.

NumberOrderInGrouping ()

Format

Obțineți șirul formatat al valorii transmise.

Șirul de format este setat în conformitate cu șirul de format 1C: Enterprise.

Parametri:

  • Sens;
  • Formatați șirul.

Format (Facturi.SumDoc, „NPT = 2”)

Începutul perioadei

Parametri:

    • Minut;
    • Zi;
    • O săptămână;
    • Lună;
    • Sfert;
    • Deceniu;
    • Jumătate de an.

Începutul perioadei (DateTime (2002, 10, 12, 10, 15, 34), „Lună”)

Rezultat:

01.10.2002 0:00:00

Sfârșitul perioadei

Funcția este concepută pentru a extrage o anumită dată dintr-o dată dată.

Parametri:

  • Data. Tastați Data. Data specificată;
  • Tipul perioadei. Tastați șir. Conține una dintre valorile:
    • Minut;
    • Zi;
    • O săptămână;
    • Lună;
    • Sfert;
    • Deceniu;
    • Jumătate de an.

EndPeriod (DateTime (2002, 10, 12, 10, 15, 34), „Săptămâna”)

Rezultat:

13.10.2002 23:59:59

Adăugați la data

Funcția este destinată să adauge o anumită valoare datei.

Parametri:

  • Tip de mărire. Tastați șir. Conține una dintre valorile:
    • Minut;
    • Zi;
    • O săptămână;
    • Lună;
    • Sfert;
    • Deceniu;
    • Jumătate de an.
  • Valoare - cu cât ar trebui mărită data. Număr de tip. Partea fracționată este ignorată.

Adăugați la dată (DateTime (2002, 10, 12, 10, 15, 34), „Lună”, 1)

Rezultat:

12.11.2002 10:15:34

Diferența de dată

Funcția este concepută pentru a obține diferența dintre două date.

Parametri:

  • Expresie. Tastați Data. data originală;
  • Expresie. Tastați Data. Data scăzută;
  • Tip de diferență. Tastați șir. Conține una dintre valorile:
    • Al doilea;
    • Minut;
    • Zi;
    • Lună;
    • Sfert;

DIFERENTĂ (DATA ORA (2002, 10, 12, 10, 15, 34), DATA ORA (2002, 10, 14, 9, 18, 06), „ZIUA”)

Rezultat:

Subșir

Această funcție este concepută pentru a extrage un subșir dintr-un șir.

Parametri:

  • Linia. Tastați șir. Șirul din care se extrage subșirul;
  • Poziţie. Număr de tip. Poziția caracterului din care începe subșirul care urmează să fie extras din șir;
  • Lungime. Număr de tip. Lungimea subșirului de selectat.

SUBSTRAT (Contractanti.Adresa, 1, 4)

Lungimea liniei

Funcția este concepută pentru a determina lungimea unui șir.

Parametru:

  • Linia. Tastați șir. Șirul care trebuie specificat în lungime.

Șir (Conturi.Adresă)

An

Această funcție este concepută pentru a extrage un an dintr-o valoare de tipul Date.

Parametru:

  • Data. Tastați Data. Data până la care este determinat anul.

AN (Data facturii)

Sfert

Această funcție are scopul de a extrage un sfert de număr dintr-o valoare de tip Date. Numărul sfert este în mod normal în intervalul de la 1 la 4.

Parametru

  • Data. Tastați Data. Data până la care se stabilește trimestrul
TRIMESTRE (Data expedierii)

Lună

Această funcție are scopul de a extrage numărul lunii dintr-o valoare de tipul Date. Numărul lunii este în mod normal în intervalul de la 1 la 12.

  • Data. Tastați Data. Data până la care se stabilește luna.
LUNA (Data facturii)

Ziua Anului

Această funcție este concepută pentru a obține ziua anului dintr-o valoare de tip Date. Ziua anului este în mod normal în intervalul de la 1 la 365 (366).

  • Data. Tastați Data. Data până la care se stabilește ziua anului.
ZIUA ANULUI (Data facturii)

Zi

Această funcție este destinată să obțină ziua lunii dintr-o valoare de tip Date. Ziua lunii este în mod normal între 1 și 31.

  • Data. Tastați Data. Data până la care se stabilește ziua lunii.
ZI (Data facturii)

O săptămână

Această funcție are scopul de a obține numărul săptămânii din an dintr-o valoare de tip Date. Săptămânile anului sunt numerotate începând cu 1.

  • Data. Tastați Data. Data după care sunt determinate numerele săptămânii.
SĂPTĂMÂNĂ (Data facturii)

Zi a săptămânii

Această funcție este destinată să obțină ziua săptămânii dintr-o valoare de tip Date. Ziua săptămânii este în mod normal între 1 (luni) și 7 (duminică).

  • Data. Tastați Data. Data după care este determinată ziua săptămânii.
ZIUA SĂPTĂMÂNII (Data facturii)

Ora

Această funcție este concepută pentru a obține ora din zi dintr-o valoare de tip Data. Ora zilei variază de la 0 la 23.

  • Data. Tastați Data. Data după care este determinată ora zilei.
ORA (Data expedierii)

Minut

Această funcție este destinată să obțină minutul unei ore dintr-o valoare de tip Date. Minutul orei variază de la 0 la 59.

  • Data. Tastați Data. Data după care este determinat minutul orei.
MINUT (Data facturii)

Al doilea

Această funcție este destinată să obțină o secundă dintr-un minut dintr-o valoare de tip Date. Secunda dintr-un minut variază de la 0 la 59.

  • Data. Tastați Data. Data după care sunt determinate secundele minutei.
AL DOILEA (Data facturii)

Expres

Această funcție are scopul de a extrage un tip dintr-o expresie care poate conține un tip complex. Dacă expresia conține un alt tip decât cel cerut, va fi returnată o valoare NULL.

Parametri:

  • Expresia care trebuie convertită;
  • Indicație tip. Tastați șir. Conține un șir de tip. De exemplu, „Număr”, „Șir”, etc. Pe lângă tipurile primitive, acest șir poate conține numele tabelului. În acest caz, se va încerca să se exprime la o referire la tabelul specificat.

Express (Data.Props1, „Număr (10.3)”)

Da Null

Această funcție returnează valoarea celui de-al doilea parametru dacă valoarea primului parametru este NULL.

În caz contrar, va fi returnată valoarea primului parametru.

YesNULL (Suma (Vânzări.Suma Cifra de afaceri), 0)

Funcții comune ale modulului

O expresie a motorului de compoziție de date poate conține apeluri la funcții ale modulelor de configurare comune globale. Nu este necesară nicio sintaxă suplimentară pentru a apela astfel de funcții.

În acest exemplu, funcția „AbreviatedName” va fi apelată din modulul de configurare generală.

Rețineți că utilizarea funcțiilor modulelor comune este permisă numai atunci când este specificat parametrul corespunzător al procesorului de compoziție a datelor.

În plus, funcțiile modulelor comune nu pot fi utilizate în expresii de câmp personalizate.

Una dintre cele mai importante domenii ale software-ului de afaceri este raportarea. Soarta afacerii poate depinde (și nu în sens figurat!) De cât de ușor este să ajustați raportul existent la nevoile în schimbare ale afacerii (și ale legislației) sau să faceți unul nou, fie că este un raport pt. biroul fiscal sau o diagramă a dependenței cererii de bunuri de sezon și de alți factori. ... Un sistem de raportare puternic și flexibil care vă permite să extrageți cu ușurință datele necesare din sistem, să le prezentați într-o formă ușor de înțeles, permițând utilizatorului final să reconfigureze un raport standard pentru a vedea datele într-o nouă lumină - acesta este un ideal pe care fiecare sistemul de afaceri ar trebui să depună eforturi pentru.

În platforma 1C: Enterprise, un mecanism numit „Sistem de compunere a datelor” (abreviat ACS) este responsabil pentru generarea de rapoarte. În acest articol vom încerca să oferim o scurtă descriere a ideii și arhitecturii mecanismului ACS și a capacităților acestuia.


ACS este un mecanism bazat pe descrierea declarativă a rapoartelor. ACS este destinat pentru a construi rapoarte și pentru a afișa informații care au o structură complexă. Apropo, pe lângă dezvoltarea rapoartelor, mecanismul ACS este folosit și în 1C: Enterprise într-o listă dinamică, un instrument pentru afișarea informațiilor din listă cu funcționalitate bogată (afișarea listelor plate și ierarhice, design condiționat de linii, grupări etc. ).

Un pic de istorie

În prima versiune a platformei 1C: Enterprise 8, versiunea 8.0, rapoartele au fost făcute după cum urmează:
  1. Una sau mai multe interogări au fost scrise în limbajul de interogare 1C (limbaj asemănător SQL, mai multe despre el mai jos).
  2. A fost scris un cod care a transferat rezultatele interogărilor executate într-un document foaie de calcul sau într-o diagramă. Codul ar putea face, de asemenea, lucrări care nu pot fi făcute într-o solicitare - de exemplu, a calculat valori folosind limbajul 1C încorporat.
Abordarea este simplă, dar nu cea mai convenabilă - există un minim de setări vizuale, totul trebuie programat „corp la mână”. Iar unul dintre atuurile de la acea vreme a platformei complet noi „1C: Enterprise 8” era minimizarea în soluția aplicată a cantității de cod care trebuie scris manual, în special datorită designului vizual. Ar fi logic să urmați aceeași cale în mecanismul de generare a rapoartelor. Acest lucru a fost realizat prin dezvoltarea unui nou mecanism - Sistemul de compunere a datelor.

Una dintre ideile care au stat la baza ACS a fost flexibilitatea și personalizarea rapoartelor, în plus, disponibile atât pentru dezvoltator, cât și pentru utilizatorul final. În mod ideal, am dori să oferim utilizatorului final acces la același set de instrumente de proiectare a rapoartelor ca și dezvoltatorului. Ar fi logic să punem la dispoziția tuturor un singur set de instrumente. Ei bine, deoarece instrumentele implică utilizatorul final, înseamnă că trebuie să eliminați la minimum utilizarea programării în ele (cel mai bine este să o eliminați cu totul) și să utilizați la maximum setările vizuale.

Formularea problemei

Sarcina echipei de dezvoltare a fost următoarea - să realizeze un sistem de raportare bazat nu pe un algoritmic (adică prin scrierea codului), ci pe o abordare declarativă a creării de rapoarte. Și credem că sarcina a fost rezolvată cu succes. Din experiența noastră, aproximativ 80% din raportarea necesară poate fi implementată folosind ACS fără o singură linie de cod (cu excepția scrierii formulelor pentru câmpurile calculate), mai ales prin setări vizuale.
Dezvoltarea primei versiuni a ACS a durat aproximativ 5 ani-om.

Două limbi

Există două limbi implicate în raportare. Unul este limbajul de interogare folosit pentru a prelua date. Al doilea este un limbaj de expresie al compoziției de date, conceput pentru a scrie expresii utilizate în diferite părți ale sistemului, de exemplu, în setările de compoziție a datelor, pentru a descrie expresii ale câmpurilor personalizate.

Limbajul de interogare

Limbajul de interogare se bazează pe SQL și este ușor de stăpânit de SQL cunoscător. Exemplu de cerere:

Este ușor să vezi analogii secțiunilor standard pentru o interogare SQL - SELECT, FROM, GROUP BY, ORDER BY.

În același timp, limbajul de interogare conține un număr semnificativ de extensii menite să reflecte specificul sarcinilor financiare și economice și să minimizeze eforturile de dezvoltare a soluțiilor aplicate:

  • Referință punct la punct la câmpuri. Dacă câmpurile unui tabel sunt de tip referință (stochează referințe la obiecte dintr-un alt tabel), dezvoltatorul se poate referi la ele în textul de interogare cu „.” Telefon).
  • Formarea multidimensională și pe mai multe niveluri a rezultatelor. Totalurile si subtotalurile se formeaza tinand cont de grupare si ierarhie, nivelurile pot fi parcurse in orice ordine cu insumarea subtotalurilor, se asigura constructia corecta a totalurilor pe dimensiuni de timp.
  • Suport pentru mese virtuale. Tabelele virtuale furnizate de sistem vă permit să obțineți date aproape gata făcute pentru majoritatea aplicațiilor, fără a fi nevoie de interogări complexe. Deci, un tabel virtual poate furniza date despre soldurile bunurilor în contextul perioadelor la un moment dat. În același timp, tabelele virtuale profită la maximum de informațiile stocate, de exemplu, totaluri calculate anterior etc.
  • Tabele temporare. Limbajul de interogare vă permite să utilizați tabele temporare în interogări. Cu ajutorul lor, puteți îmbunătăți performanța interogărilor, în unele cazuri reduceți numărul de blocări și faceți textul interogării mai ușor de citit.
  • Solicitări de lot. Pentru o muncă mai convenabilă cu tabelele temporare, limbajul de interogare acceptă lucrul cu interogări în lot - astfel, crearea unui tabel temporar și utilizarea acestuia sunt plasate într-o singură interogare. O cerere de lot este o succesiune de cereri separate prin punct și virgulă (";"). Cererile din pachet sunt executate una dupa alta. Rezultatul executării unei cereri de lot, în funcție de metoda utilizată, va fi fie rezultatul returnat de ultima solicitare din lot, fie o matrice a rezultatelor tuturor solicitărilor din lot în ordinea în care solicitările din lot urma.
  • Obținerea de reprezentări ale câmpurilor de referință. Fiecare tabel de obiecte (care stochează o referință sau un document) are un câmp virtual - „Vizualizare”. Acest câmp conține reprezentarea textuală a obiectului și facilitează munca redactorului raportului. Deci, pentru un document, acest câmp conține toate informațiile cheie - numele tipului de document, numărul și data acestuia (de exemplu, „Vânzare 000000003 din data de 06/07/2017 17:49:14”), salvând dezvoltatorul de la scrierea unui câmp calculat.
  • si etc.
Mecanismul de solicitare modifică automat cererea, ținând cont de rolurile cărora le aparține utilizatorul, în numele căruia se face solicitarea (adică, utilizatorul va vedea doar datele pe care are dreptul să le vadă) și opțiunile funcționale (adică, în conformitate cu cea configurată în funcționalitatea soluției aplicației).

Există, de asemenea, extensii speciale ale limbajului de interogare pentru ACS. Extinderea se realizează folosind instrucțiuni speciale de sintaxă, incluse între acolade și plasate direct în textul interogării. Cu ajutorul extensiilor, dezvoltatorul stabilește ce operațiuni poate efectua utilizatorul final prin personalizarea raportului.

De exemplu:

  • SELECTAȚI. Această propoziție descrie câmpurile pe care utilizatorul le poate selecta pentru afișare. După acest cuvânt cheie, aliasurile de câmp din lista de selecție a interogărilor principale care vor fi disponibile pentru personalizare sunt listate, separate prin virgule. Exemplu: (SELECTARE articol, depozit)
  • UNDE. Descrie câmpurile pe care utilizatorul poate filtra. Această propunere folosește câmpuri de tabel. Nu este permisă utilizarea aliasurilor de câmpuri ale listei de selectare. Fiecare parte a uniunii poate conține propriul element WHERE. Exemple: (WHERE Item. *, Warehouse), (WHERE Document.Date> = & StartDate, Document.Date<= &ДатаКонца}
  • si etc.
Un exemplu de utilizare a extensiilor:

Limbajul de exprimare al compoziției datelor

Limbajul de expresie al compoziției datelor este destinat să scrie expresii utilizate, în special, pentru a descrie expresii de câmp personalizate. ACS vă permite să definiți câmpuri personalizate în raport folosind fie propriile expresii, fie seturi de opțiuni cu condiții pentru selectarea lor (analog cu CASE în SQL). Câmpurile personalizate sunt analoge cu câmpurile calculate. Acestea pot fi setate atât în ​​configurator, cât și în modul 1C: Enterprise, dar funcțiile modulelor comune nu pot fi folosite în expresiile câmpurilor personalizate. Prin urmare, câmpurile personalizate sunt destinate utilizatorului mai degrabă decât dezvoltatorului.

Exemplu:

Procesul de creare a unui raport privind ACS

Când creăm un raport, trebuie să creăm un aspect care determină modul în care datele vor fi afișate în raport. Puteți crea un aspect bazat pe schema de compoziție a datelor. Schema de compoziție a datelor descrie esența datelor care sunt furnizate raportului (de unde să obțineți datele și cum puteți controla compoziția acestora). Schema de compunere a datelor este o bază pe baza căreia pot fi generate tot felul de rapoarte. O schemă de compunere a datelor poate conține:
  • solicitați text cu instrucțiuni ale sistemului de compunere a datelor;
  • descrierea mai multor seturi de date;
  • o descriere detaliată a câmpurilor disponibile;
  • descrierea relațiilor dintre mai multe seturi de date;
  • descrierea parametrilor de regăsire a datelor;
  • descrierea layout-urilor câmpurilor și grupărilor;
  • si etc.

De exemplu, puteți adăuga o interogare ca set de date la schema de compoziție a datelor și puteți apela constructorul de interogare, care vă permite să compuneți grafic o interogare de complexitate arbitrară:

Rezultatul rulării designerului de interogări va fi textul interogării (în limbajul de interogare 1C: Enterprise). Acest text poate fi ajustat manual dacă este necesar:

Pot exista mai multe seturi de date într-o schemă de compoziție a datelor, seturile de date pot fi legate într-un aspect într-un mod arbitrar, pot fi adăugate câmpuri calculate, pot fi setați parametrii de raport etc. Merită menționată o caracteristică interesantă a mecanismului de interogare din 1C: Enterprise. Interogările sunt în cele din urmă traduse într-un dialect al SQL specific DBMS cu care aplicația interacționează direct. În general, încercăm să folosim la maximum capacitățile serverelor DBMS (suntem limitați de faptul că folosim doar acele capabilități care sunt disponibile simultan în toate DBMS suportate de platforma 1C: Enterprise - MS SQL, Oracle, IBM DB2 , PostgreSQL). Astfel, la nivel de interogare în câmpurile calculate, putem folosi doar acele funcții care sunt traduse în SQL.

Dar la nivelul schemei de compunere a datelor, putem deja adăuga câmpuri personalizate și folosi funcții în ele în limbajul de dezvoltare 1C încorporat (inclusiv cele scrise de noi), ceea ce extinde foarte mult capacitățile rapoartelor. Din punct de vedere tehnic, arată așa - tot ce poate fi tradus în SQL este tradus în SQL, interogarea este executată la nivel DBMS, rezultatele interogării sunt plasate în memoria serverului de aplicații 1C și ACS calculează pentru fiecare înregistrare valorile ​​de câmpuri calculate, ale căror formule sunt scrise în limbajul 1C.


Adăugarea de câmpuri personalizate

Puteți adăuga un număr arbitrar de tabele și diagrame la raport:


Designer de rapoarte


Raport de execuție

Cu ajutorul ACS, utilizatorul poate adăuga filtre complexe la raport (care vor fi adăugate la cerere în locurile potrivite), design condiționat (care vă permite să formatați câmpurile afișate în diferite moduri - după font, culoare, etc. - în funcție de valorile lor) și multe altele...

Procesul de construire și generare a unui raport poate fi descris pe scurt după cum urmează:

  • Dezvoltatorul în timpul proiectării cu ajutorul designerului (sau în timpul rulării cu ajutorul codului) definește schema de compunere a datelor:
    • Text de solicitare/cereri
    • Descrierea câmpurilor calculate
    • Relații dintre cereri (dacă sunt mai multe)
    • Parametrii de raportare
    • Setări implicite
    • etc.
  • Setările de mai sus sunt salvate în aspect
  • Utilizatorul deschide un raport
    • Poate face setări suplimentare (de exemplu, modifică valorile parametrilor)
    • Apăsați butonul „Generare”.
  • Setările utilizatorului sunt aplicate unei scheme de compoziție a datelor definită de dezvoltator.
  • Se formează un șablon intermediar de compoziție a datelor, care conține instrucțiuni despre de unde să obțineți datele. În special, solicitările specificate în layout sunt ajustate. De exemplu, câmpurile care nu sunt utilizate în raport sunt eliminate din cerere (acest lucru se face pentru a minimiza cantitatea de date primite). Toate câmpurile care sunt incluse în formulele de câmp calculate sunt adăugate la interogare.
  • Procesorul de compunere a datelor este implicat. Procesorul de compoziție execută interogări, comunică seturi de date, calculează valorile câmpurilor și resurselor calculate și realizează grupări. Într-un cuvânt, face toate calculele care nu au fost efectuate la nivel de SGBD.
  • Procesorul de ieșire a datelor lansează o solicitare de execuție și trimite datele primite într-un document de foaie de calcul, diagramă etc.


Procesul de generare a unui raport de către mecanismul ACS

Încercăm să minimizăm cantitatea de date de raport transferate de la server la aplicația client. La afișarea datelor într-un document foaie de calcul, la deschiderea unui document foaie de calcul, transferăm de pe server doar acele linii pe care utilizatorul le vede la începutul documentului. Pe măsură ce utilizatorul se deplasează de-a lungul liniilor documentului, datele lipsă sunt pompate de la server la client.

Setari personalizate

Toate instrumentele ACS sunt disponibile atât pentru dezvoltator, cât și pentru utilizatorul final. Dar practica a arătat că utilizatorul final este adesea intimidat de abundența capacităților instrumentului. Mai mult, în majoritatea cazurilor, utilizatorul final nu are nevoie de toată puterea setărilor - trebuie doar să aibă acces rapid la setarea unuia sau doi parametri ai raportului (de exemplu, perioada și contrapartea). Începând cu o anumită versiune a platformei, dezvoltatorul de rapoarte are posibilitatea de a marca ce setări de raport sunt disponibile utilizatorului. Acest lucru se face folosind caseta de selectare „Include în setările utilizatorului”. De asemenea, în setările raportului a apărut indicatorul „Mod de afișare”, care ia una dintre cele trei valori:
  • Acces rapid. Setarea va fi afișată direct în partea de sus a ferestrei de raport.
  • Ca de obicei. Setarea va fi disponibilă prin butonul „Setări”.
  • Nu e disponibil. Setarea nu va fi disponibilă pentru utilizatorul final.


Setarea modului de afișare la momentul proiectării


Afișarea setării în modul „Acces rapid” în timpul rulării (sub butonul „Generare”)

Planuri de dezvoltare

Una dintre direcțiile prioritare în dezvoltarea ACS pentru noi este simplificarea setărilor utilizatorului. Experiența noastră arată că pentru unii utilizatori finali, lucrul cu setări personalizate este încă o muncă serioasă. Luăm în considerare acest lucru și lucrăm în această direcție. În consecință, va deveni, de asemenea, mai ușor pentru dezvoltatori să lucreze cu ACS, deoarece noi, ca și înainte, dorim să oferim un set de instrumente unificat pentru personalizarea rapoartelor atât pentru dezvoltator, cât și pentru utilizatorul final.

Salutări, dragii mei cititori! Să continuăm cu elementele de bază ale sistemului de layout. În această serie de articole, ați învățat diferența dintre un set de date - o interogare față de o interogare obișnuită. De asemenea, v-ați uitat la parametrii tabelelor virtuale și v-ați familiarizat cu extensia limbajului de interogare. Acum aruncați o privire asupra conținutului, ceea ce învățați aici. Noroc!

Funcțiile limbajului de expresie ACS.

Când o interogare este construită în aspect, atunci funcțiile standard ale limbajului de interogare sunt utilizate în interiorul acesteia. Dar ACS vă permite să definiți funcții suplimentare. Unele funcții sunt similare cu funcțiile din limbajul de interogare, dar sintaxa este diferită. De exemplu, funcția „StartPeriod”:

Începutul perioadei (DateTime (2002, 10, 12, 10, 15, 34), „Lună”)

Această funcție diferă de funcția limbajului de interogare din al doilea parametru. Șirul „Lună” este folosit aici, în timp ce în funcția de limbaj de interogare este folosit literal MONTH.

Descrierea funcțiilor poate fi găsită prin deschiderea Configuratorului: Ajutor -> Cuprins -> Sistem de compunere a datelor -> Limbajul de expresie al sistemului de compunere a datelor -> Funcțiile limbajului de expresie ale sistemului de compoziție a datelor.

Unde pot fi utilizate funcțiile limbajului de expresie ACS dacă nu pot fi utilizate în limbajul de interogare?

  • Pe fila din coloana Expresie.
  • În fila „Parametri” din coloana „Expresie”.
  • În fila „Setări” din coloana „Câmpuri personalizate”. Utilizatorul își poate crea propriile câmpuri și le poate scrie expresii.
  • În fila Seturi de date, în coloanele Vizualizare expresii și expresii de aranjament.
    Acestea sunt expresii care personalizează câmpurile de compoziție a datelor.

Caracteristicile operațiunii ACS.

Când utilizați un set de date, o interogare are o serie de caracteristici care apar
la optimizarea ACS.

  • Interogarea rezultată este scurtată în conformitate cu setarea variantei de raport,
    deoarece unele câmpuri sunt eliminate în interogarea rezultată.
  • În plus, tabelele pot fi șterse din interogarea rezultată dacă interogarea descrie tabele temporare și atunci acestea nu sunt folosite nicăieri.
  • Același lucru este valabil și pentru seturile de date, dacă am descris multe seturi de date în schemă, dar folosim doar unele dintre ele, atunci sistemul va primi informații doar despre seturile de date utilizate, iar restul seturilor de date vor fi eliminate din șablonul de compoziție de date rezultat. .

Aceste caracteristici ar putea avea consecințe negative? Da, deoarece în unele cazuri cererea nu va fi formată așa cum ne-am dorit. Prin urmare, trebuie să țineți cont de aceste caracteristici atunci când construiți interogări complexe.

Setările de bază ale câmpurilor ACS.

În fila „Seturi de date”, la crearea unui set de date de tip interogare, câmpurile de compunere sunt completate automat. După cum puteți vedea, câmpurile conțin un număr mare de setări.

Difuzor "Camp" conține numele câmpului, care este obținut din baza de informații (IB).
O valoare imuabilă care este codificată de către cerere. Se potrivește cu pseudonimul cererii.

Dar există o particularitate. Dacă schimbăm aliasul, de exemplu „Nomenclatură”, în Designerul de interogări de pe fila „Uniuni/ Aliasuri” din coloana „Nume câmp”, în „Produs”, atunci va apărea un nou câmp „Produs” în „Seturi de date”. " din aspect, dar în același timp este lăsat și câmpul "Nomenclatură". Acest lucru se datorează faptului că este setat indicatorul de completare automată. Cu această setare, sistemul nu poate înțelege că câmpul „Articol” este același cu câmpul „Nomenclatură”, prin urmare, pentru orice eventualitate, câmpul este adăugat de două ori.

Ar putea acest design să dăuneze experienței utilizatorului? Da. La urma urmei, două câmpuri „Produs” și „Nomenclatură” vor apărea în setările opțiunii de raport. Utilizatorului nu va fi clar cum diferă, deși aceste selecții sunt identice.

Deși puteți exclude aspectul câmpului „Nomenclatură” bifând casetele din „Constrângere câmp” – „Condiție” și „Constrângere atribute” – fila „Condiție” din fila „Seturi de date” din setările câmpului. În plus, puteți debifa caseta de selectare „Completare automată” și completați toate câmpurile din Designerul de interogări din fila „Compoziția datelor”.

Difuzor "Cale" indică modul în care ne vom referi la câmpul din toate filele din compoziția datelor. O valoare pe care o puteți schimba după cum credeți de cuviință. Sunt permise spații în numele căii, dar un astfel de nume este cuprins între paranteze drepte. Dar este mai bine ca calea să fie fără spații, deoarece acesta este un domeniu de serviciu. Mai bine schimbați titlul bifând caseta din coloana Titlu.

De ce a trebuit să creați două câmpuri diferite „Câmp” și „Cale” dacă numele lor sunt aproape întotdeauna aceleași? Pentru că există multe seturi de date în uz. De exemplu, dacă al doilea set de date va fi o uniune, atunci pentru a se potrivi câmpurile, trebuie să aveți aceleași căi. În alte cazuri, căile pot fi lăsate neschimbate dacă numele lor sunt clare.

Puteți utiliza următoarea metodă pentru a lucra cu coloana „Cale”. Specificând o cale, puteți crea detalii virtuale imbricate pentru un articol. De exemplu, să punem atributul „Calitate” în interiorul atributului „Produs”. Să schimbăm câmpul „Cale” al atributului „Calitate” în „Produs.Calitate”. Acum în fila „Setări” din fila „Câmpuri selectate” nu vom găsi câmpul „Calitate”, dar va apărea în interiorul câmpului „Produs”.

Să aruncăm o privire mai atentă asupra setărilor de limitare a accesibilității. După cum puteți vedea, există două linii pentru a restricționa accesibilitatea în coloane „Limitarea câmpului”și „Restricționarea cerințelor”.

Coloane care limitează câmpurile ACS

Coloana „Constrângere câmp” înseamnă că vor fi impuse constrângeri câmpului însuși. Coloana „Restricție de atribute” înseamnă că vor fi impuse restricții asupra atributelor imbricate ale acestui câmp dacă câmpul aparține unui tip de date complex, cum ar fi o referință sau un document.

Fiecare linie este împărțită în încă patru coloane. Dacă marcajul este setat pentru un câmp sau atribute ale acestui câmp:

  • Camp, atunci acestea nu vor fi disponibile pentru selectare în fila „Setări” din fila „Câmpuri selectate”.
  • Condiție, atunci acestea nu vor fi disponibile ca o condiție în fila „Setări” din fila „Selectare”.
  • grup, apoi în fila „Setări” când se creează o nouă grupare, gruparea după acestea nu va fi disponibilă.
  • Comanda, atunci acestea nu vor fi disponibile pentru comandă în fila „Setări” din fila „Sortare”.

Difuzor „Expresie de prezentare” necesare pentru a modifica reprezentarea unui câmp ca urmare a raportului. De exemplu, trebuie să afișați nu numai numele produsului, ci și articolul acestuia. Prin urmare, în această coloană, puteți scrie următoarele:

Produs. Articol + "-" + Produs. Nume

În acest domeniu, putem folosi toate capabilitățile limbajului ACS și putem accesa funcțiile modulelor comune.

Dacă în configurație există un modul comun numit „For SKD” și acest modul definește o funcție comună (cu cuvântul cheie „Export”) „GetView” cu parametrul „Link”, atunci în câmpul „View Expression” vom scrie :

Pentru SKD. GetView (articol)

Dar trebuie să folosiți această oportunitate cu atenție, mai ales dacă funcția modulului comun este accesarea bazei de date, deoarece acest apel are loc după ce au fost primite toate datele pentru raport. De fapt, pentru fiecare linie, interogarea va fi executată din nou.

Difuzor „Expresie de comandă” necesare pentru a defini o sortare non-standard. Puteți utiliza aceleași construcții aici ca în câmpul Expresie de vizualizare.

Ei bine, a spus totul, așa cum a promis. Dacă aveți întrebări, scrieți-le în comentarii. Pentru a vă fixa materialul în minte, voi pregăti un test.

Top articole similare