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
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:
Î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
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.
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.
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.
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.
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.
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.
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.
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.
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:
- total cumulat în grupare;
- total cumulat într-un tabel încrucișat;
- obținerea valorii anterioare;
- 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).