Câmpuri calculate în cererea 1s. Limbajul de expresie al sistemului de compoziție a datelor (1Cv8). Operație de verificare a unei valori pentru inegalitatea NULL

25.10.2019 Programe

Limbajul de expresie al sistemului de compoziție 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:

  • diagramă de dispunere a datelor - pentru a descrie câmpurile calculate, câmpurile totale, expresiile de conexiune etc.;
  • setări de aspect al datelor - pentru a descrie expresii de câmp personalizate;
  • layout layout data - pentru descrierea expresiilor pentru conectarea seturilor de date, descrierea parametrilor de layout etc.

Literale

Expresia poate conține literale. Sunt posibile următoarele tipuri de literale:

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

Linia

Un șir literal este scris cu 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țională este separată folosind simbolul „.”. De exemplu:

10.5 200

Data

Un literal de dată este scris folosind literalul cheie DATETIME. Dupa asta cuvânt cheie, între paranteze, separate prin virgule, sunt enumerate anul, luna, ziua, orele, minutele, secundele. Nu este necesară specificarea timpului.

De exemplu:

DATETIME(1975, 1, 06) – 6 ianuarie 1975 DATETIME(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 (True), False (False).

Sens

Pentru a specifica literali de alte tipuri (enumerări de sistem, date predefinite), se folosește cuvântul cheie Valoare, urmat de numele literalului din paranteze.

Valoare(AccountType. Activ)

Operații pe numere

unar –

Această operațiune are scopul de a schimba semnul unui număr în semnul opus. De exemplu:

Vânzări.Cantitate

Unar +

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

Vânzări.Cantitate

binar -

Această operație are scopul de a calcula diferența dintre două numere. De exemplu:

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

Binar +

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

RemainingsAndTurnover.InitialRemaining + RemainingAndTurnover.Turnover ResiduesAndTurnover.InitialRemaining + 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 este concepută pentru 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 este concepută pentru a obține restul atunci când un operand este împărțit la altul. De exemplu:

Nomenclatură.Preţ % 1,2 2 % 3,14

Operații cu șiruri

Concatenare (binar +)

Această operație este concepută pentru a concatena două șiruri. De exemplu:

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

Ca

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

Valoarea operatorului LIKE este TRUE dacă valoarea<Выражения>satisface modelul, iar FALSE în caz contrar.

Următoarele personaje în<Строке_шаблона>au un sens diferit de doar un alt caracter din rând:

  • % - procent: o secvență care conține zero sau mai multe caractere arbitrare;
  • _ - subliniere: un caracter arbitrar;
  • […] - unul sau mai multe caractere în paranteza patrata: un caracter, oricare dintre cele enumerate între paranteze pătrate. Enumerarea poate conține intervale, de exemplu a-z, adică un caracter arbitrar inclus în interval, incluzând 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 poartă nicio sarcină suplimentară. Dacă unul dintre caracterele enumerate trebuie să fie scris ca el însuși, atunci trebuie să fie precedat de<Спецсимвол>, specificat după cuvântul cheie SPECIAL CHARACTER (ESCAPE).

De exemplu, șablon

„%ABV[abvg]\_abv%” CARACTER 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; sublinia; literele a; literele b; literele v. Mai mult, această secvență poate fi localizată pornind de la o poziție arbitrară în linie.

Operații de comparație

Egal

Această operație este menită să compare doi operanzi pentru egalitate. De exemplu:

Sales.Counterparty = Sales.NomenclatureMainSupplier

Nu este egal

Această operație este menită să compare doi operanzi pentru inegalitate. De exemplu:

Vânzări.Contraparte<>Vânzări.NomenclaturăMainSupplier

Mai puțin

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

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

Mai mult

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

SalesCurrent.Sum > SalesPast.Sum

Mai puțin sau egal

Această operație este concepută pentru 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 este concepută pentru a verifica dacă primul operand este mai mare sau egal cu al doilea. De exemplu:

SalesCurrent.Amount >= SalesPast.Amount

Operațiunea B

Această operație 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:

Articolul B (&Produs1, &Produs2)

Operațiune de verificare a prezenței unei valori într-un set de date

Operația verifică prezenț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.Contrapartea ESTE NULL

Operație de verificare a unei valori pentru inegalitatea NULL

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

Vânzări Contrapartea NU ESTE NUL

Operații logice

Operațiile logice acceptă expresii de tip boolean ca operanzi.

Operațiunea NU

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

NOT Document.Consignee = Document.Expeditor

Operațiunea I

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

Document.Consignee = Document.Expeditor AND Document.Consignee = &Contraparte

SAU operare

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

Document.Consignee = Document.Expeditor SAU Document.Consignee = &Contraparte

Funcții agregate

Funcțiile agregate efectuează o anumită acțiune asupra unui set de date.

Sumă

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

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

Cantitate

Funcția Count calculează numărul de valori, altele decât NULL. De exemplu:

Cantitate (Vânzări. Contraparte)

Număr de diferite

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

Cantitate (Vânzări diverse. Contraparte)

Maxim

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

Maxim (Rămas.Cantitate)

Minim

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

Minim(Rămas.Cantitate)

In medie

Funcția obține media valorilor non-NULL. De exemplu:

Medie (Cantitate rămasă)

Alte operațiuni

Operațiunea SELECT

Operația Select are scopul de a selecta una dintre mai multe valori atunci când sunt îndeplinite anumite condiții. De exemplu:

Selectați Când Sumă > 1000 Apoi Sumă În caz contrar 0 Sfârșit

Reguli pentru compararea a două valori

Dacă tipurile de valori comparate sunt diferite unele de altele, atunci relațiile dintre valori sunt determinate pe baza priorității tipurilor:

  • NULL (cel mai mic);
  • boolean;
  • Număr;
  • Data de;
  • 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 sunt aceleași, atunci valorile sunt comparate conform următoarelor reguli:

  • pentru tipul boolean valoarea TRUE este mai mare decât valoarea FALSE;
  • tipul Number are regulile obișnuite de comparare pentru numere;
  • pentru tipul Date, datele anterioare sunt mai mici decât cele ulterioare;
  • pentru tipul String - compararea șirurilor în conformitate cu caracteristicile naționale stabilite ale bazei de date;
  • tipurile de referință sunt comparate pe baza valorilor lor (numărul de înregistrare etc.).

Lucrul cu valoare NULL

Orice operație în care unul dintre operanzi este NULL va produce un 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 operanzii săi 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 compoziție a datelor

calculati

Funcția Calculate este concepută pentru a calcula o expresie în contextul unei anumite 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ă șirul GrandTotal este folosit ca nume de grup, calculul va fi efectuat în contextul totalului general. În caz contrar, calculul va fi efectuat în contextul grupului 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)”, „Total”)

ÎN în acest exemplu rezultatul va fi raportul dintre suma pentru câmpul „Vânzări.Suma Cifra de afaceri” din înregistrarea grupării și valoarea aceluiași câmp în întregul aspect.

Nivel

Funcția este concepută pentru a obține nivelul curent de înregistrare.

Nivel()

NumberInOrder

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

NumberByOrder()

NumberInOrderInGrouping

Returnează următorul număr ordinal din gruparea curentă.

NumberByOrderInGroup()

Format

Obțineți un șir formatat al valorii transmise.

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

Opțiuni:

  • Sens;
  • Formatați șirul.

Format(Facturi consumabile. Sumă document, „NPV=2”)

Începutul perioadei

Opțiuni:

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

StartPeriod(DateTime(2002, 10, 12, 10, 15, 34), „Month”)

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ă.

Opțiuni:

  • Data de. Tip Data. Data specificată;
  • Tipul perioadei. Tastați șir. Conține una dintre următoarele valori:
    • Minut;
    • Zi;
    • O săptămână;
    • Lună;
    • Sfert;
    • Deceniu;
    • Jumatate de an.

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

Rezultat:

13.10.2002 23:59:59

AddToDate

Funcția este concepută pentru a adăuga o anumită valoare unei date.

Opțiuni:

  • Tip de mărire. Tastați șir. Conține una dintre următoarele valori:
    • Minut;
    • Zi;
    • O săptămână;
    • Lună;
    • Sfert;
    • Deceniu;
    • Jumatate de an.
  • Sumă – cu cât trebuie să măriți data. Număr de tip. Partea fracționată este ignorată.

AddToDate(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.

Opțiuni:

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

DATEDIFERENCE(DATETIME(2002, 10, 12, 10, 15, 34), DATETIME(2002, 10, 14, 9, 18, 06), „DAY”)

Rezultat:

Subșir

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

Opțiuni:

  • Linia. Tastați șir. Șirul din care este extras 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 alocat.

SUBSTRING(Conturi.Adresă, 1, 4)

Lungimea liniei

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

Parametru:

  • Linia. Tastați șir. Un șir a cărui lungime este specificată.

Linie(Contrapărți.Adresă)

An

Această funcție este concepută pentru a extrage anul dintr-o valoare de tip Date.

Parametru:

  • Data de. Tip Data. Data până la care este determinat anul.

AN (Cheltuieli.Data)

Sfert

Această funcție este concepută pentru a extrage numărul trimestrului dintr-o valoare de tip Date. Numărul sfertului variază în mod normal de la 1 la 4.

Parametru

  • Data de. Tip Data. Data până la care se determină trimestrul
QUARTER(Cheltuială.Data)

Lună

Această funcție este concepută pentru a extrage numărul lunii dintr-o valoare de tip Date. Numărul lunii variază în mod normal de la 1 la 12.

  • Data de. Tip Data. Data până la care este determinată luna.
MONTH(Cheltuială.Data)

Ziua Anului

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

  • Data de. Tip Data. Data până la care se stabilește ziua anului.
DAYYEAR(ExpenseAccount.Date)

Zi

Această funcție este concepută pentru a obține ziua lunii dintr-o valoare de tip Date. Ziua lunii variază în mod normal între 1 și 31.

  • Data de. Tip Data. Data până la care se stabilește ziua lunii.
ZI (Cheltuieli.Data)

O săptămână

Această funcție este concepută pentru 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 de la 1.

  • Data de. Tip Data. Data după care sunt determinate numerele săptămânii.
SĂPTĂMÂNĂ(Cheltuială.Data)

Zi a săptămânii

Această funcție este concepută pentru a obține ziua săptămânii dintr-o valoare de tip Date. Ziua normală a săptămânii variază de la 1 (luni) la 7 (duminică).

  • Data de. Tip Data. Data după care este determinată ziua săptămânii.
ZIUA SĂPTĂMÂNII (Cheltuieli.Data)

Ora

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

  • Data de. Tip Data. Data după care este determinată ora zilei.
HOUR(Cheltuieli.Data)

Minut

Această funcție este concepută pentru a obține minutul orei dintr-o valoare de tip Date. Minutul orei variază de la 0 la 59.

  • Data de. Tip Data. Data după care este determinat minutul orei.
MINUT(Cheltuieli.Data)

Al doilea

Această funcție este concepută pentru a obține secunda dintr-un minut dintr-o valoare de tip Date. Secunda dintr-un minut variază de la 0 la 59.

  • Data de. Tip Data. Data după care sunt determinate secundele minutei.
SECOND(Cheltuieli.Data)

Expres

Această funcție este concepută pentru a extrage un tip dintr-o expresie care poate conține un tip compus. Dacă expresia conține un alt tip decât cel cerut, va fi returnat NULL.

Opțiuni:

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

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

EsteNull

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.Sumă Cifra de afaceri), 0)

Funcțiile modulelor comune

O expresie de motor 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 comune ale modulului este permisă numai dacă este specificat parametrul corespunzător al procesorului de compoziție a datelor.

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

CalculateExpression este o funcție ACS destul de dificil de înțeles, iar exemplele de aplicare în informațiile de referință sunt destul de rare. Acest articol discută exemple care vor fi cu siguranță utile oricărui dezvoltator:

  1. total cumulat în grupare;
  2. total cumulat într-un tabel încrucișat;
  3. obținerea valorii anterioare;
  4. Ieșire PM pe o linie.

1. Obținerea unui indicator pe bază de angajamente

Să obținem cantitatea de bunuri ca total cumulat la nivel de grupare. Pentru a face acest lucru, creați un câmp calculat (vezi Figura 1).
În fila „Resurse”, setați funcția pentru câmpul calculat:
CalculateExpression(„Suma(CantitateCifra de afaceri)”, „Primul”, „Actual”)
care va însuma numărul de produse din prima înregistrare la cea actuală (vezi Figura 2).

Dacă cantitatea totală cumulată a unui articol trebuie să fie obținută la nivelul înregistrărilor detaliate, atunci setăm funcția CalculateExpression pentru câmpul calculat în fila „Câmpuri calculate” (vezi Figura 3).
În funcție de nivelul de obținere a totalului cumulat, creăm o grupare (vezi Figura 4): la nivel de resurse - grupare pe mărfuri, la nivel de telecomandă - grupare de înregistrări detaliate.
Figura 4. Grupări de rapoarte cu totaluri cumulate

2. Obținerea valorii indicatorului din rândul anterior

Să obținem cursul de schimb pentru data și data anterioară. Pentru a face acest lucru, creați un câmp calculat și scrieți următoarea expresie în câmpul de expresie (vezi Figura 5):
CalculateExpression(„Rata”, „Anterior”, „Anterior”)
care va lua valoarea anterioară a cursului de schimb pt linia curentă, ultimul parametru al funcției limitează datele primite.
Deoarece lucrăm la nivelul înregistrărilor detaliate, mergem imediat la fila „Setări” și creăm o grupare - înregistrări detaliate.

3. Obținerea unui indicator ca total cumulat într-un tabel încrucișat

Să obținem cantitatea de bunuri pe bază de angajamente pe perioadă. Pentru a face acest lucru, creați un câmp calculat (vezi Figura 1). În fila „Resurse”, specificăm următoarea expresie pentru câmpul calculat (vezi Figura 6):
CalculateExpression(„Suma(CantitateCifra de afaceri)”, „Perioada”, „Primul”, „Actual”)
care la nivelul grupării va calcula cantitatea de mărfuri în intervalul de la primul rând până la cel curent în contextul perioadei pentru fiecare articol.
În fila „Setări”, creați un tabel cu gruparea după element pe rând și gruparea după perioadă într-o coloană (vezi Figura 7).

4. Ieșirea datelor tabelare într-o singură linie

Metodele de afișare a datelor tabelare într-o singură linie, inclusiv metoda care utilizează funcția CalculateExpression, sunt discutate în articol