1s skd przykłady pól obliczeniowych. Schemat układu danych (1C SKD). Operacje na liczbach
1. Oblicz (ocena)- przeznaczony do oceny wyrażenia w kontekście pewnego grupowania. Funkcja służy do zapewnienia zgodności z poprzednie wersje platformy. Zamiast tego zaleca się użycie funkcji Evaluate Expression.
Składnia :
Oblicz (wyrażenie, grupowanie, typ obliczenia)
Opcje :
- Wyrażenie(Linia). Zawiera wyliczone wyrażenie;
- grupowanie(Linia). Zawiera nazwę grupy, w której kontekście ma być oceniane wyrażenie. Jeśli nazwa grupy to pusta linia, obliczenia zostaną wykonane w kontekście aktualnego grupowania. Jeśli jako nazwę grupowania zostanie użyty ciąg GrandTotal, obliczenie zostanie wykonane w kontekście sumy całkowitej. W przeciwnym razie obliczenia zostaną wykonane w kontekście grupy nadrzędnej o tej nazwie.
Na przykład:
Amount(Sales.AmountTurnover) / Calculate("Kwota(Sales.AmountTurnover)", "TotalTotal").
W ten przykład w efekcie otrzymasz stosunek kwoty w polu „Sales.AmountTurnover” rekordu grupującego do kwoty tego samego pola w całym layoucie. - Typ obliczeń(Linia). Jeśli ten parametr jest ustawiony na „GeneralTotal”, wyrażenie zostanie obliczone dla wszystkich rekordów grupujących. Jeżeli wartość parametru to „Grupa”, wartości zostaną obliczone dla bieżącego rekordu grupy grupy.
Składnia :
CalculateExpression (wyrażenie, grupowanie, typ obliczania, początek, koniec, sortowanie, sortowanie hierarchiczne, wartości uchwytów SameOrder)
Opcje :
- Wyrażenie(Linia). Zawiera wyliczone wyrażenie;
- grupowanie(Linia). Zawiera nazwę grupy, w której kontekście ma być oceniane wyrażenie. Jeśli jako nazwa grupowania zostanie użyty pusty ciąg, obliczenia zostaną wykonane w kontekście bieżącego grupowania. Jeśli jako nazwę grupowania zostanie użyty ciąg GrandTotal, obliczenie zostanie wykonane w kontekście sumy całkowitej. W przeciwnym razie obliczenia zostaną wykonane w kontekście grupy nadrzędnej o tej nazwie;
- Typ obliczeń(Linia). Jeśli ten parametr jest ustawiony na „GeneralTotal”, wyrażenie zostanie obliczone dla wszystkich rekordów grupujących. Jeżeli wartość parametru to „Grupa”, wartości zostaną obliczone dla bieżącego rekordu grupy grupy. Jeżeli parametr ma wartość „GroupingNotResource”, to podczas obliczania funkcji dla rekordu grupy według zasobów, wyrażenie zostanie obliczone dla pierwszego rekordu grupy pierwotnego grupowania. Podczas obliczania funkcji CalculateExpression z wartością „GroupNotResource” dla rekordów grupowych, które nie są grupowane według zasobów, funkcja jest oceniana w taki sam sposób, w jaki zostałaby obliczona z wartością parametru „Group”. Konstruktor układu kompozycji danych, podczas generowania układu układu kompozycji danych, podczas wyświetlania pola, zasobu, według którego wykonywane jest grupowanie, wyprowadza wyrażenie do układu, który jest obliczany przy użyciu funkcji Oblicz wyrażenie z określonym parametrem "GroupingNotResource" . W przypadku pozostałych zasobów pogrupowanych według zasobu zwracane są regularne wyrażenia zasobów. Jeśli parametr jest ustawiony na „Hierarchia”, wówczas wyrażenie musi zostać ocenione dla nadrzędnego wpisu hierarchicznego, jeśli taki istnieje, oraz dla całego grupowania, jeśli nie ma nadrzędnego wpisu hierarchicznego. Konstruktor układu podczas generowania wyrażenia dla pola „% w grupie hierarchii” generuje wyrażenie zawierające relację wyrażenia zasobu z funkcją CalculateExpression dla wyrażenia zasobu, które jest oceniane dla bieżącego grupowania z obliczeniem „Hierarchia” rodzaj.
- Początek. Określa, który rekord ma rozpocząć fragment, w którym należy obliczyć funkcje agregujące wyrażenia i z którego rekordu należy pobrać wartości pól spoza funkcji agregujących. Ciąg zawierający jeden z:
- "Pierwszy". Musisz zdobyć pierwszy rekord grupowania. Po słowie w nawiasach można podać wyrażenie, którego wynik zostanie użyty jako przesunięcie od początku grupowania. Wynikowa wartość musi być liczbą całkowitą większą od zera. Na przykład First(3) - pobranie trzeciego rekordu od początku grupowania. Jeśli pierwszy wpis znajduje się poza grupą, uważa się, że nie ma żadnych wpisów. Na przykład, jeśli są 3 rekordy, a chcesz uzyskać pierwszy (4), uważa się, że nie ma rekordów.
- "Ostatni". Musisz uzyskać najnowszy wpis grupowania. Po słowie w nawiasach można podać wyrażenie, którego wynik zostanie użyty jako przesunięcie od końca grupowania. Wynikowa wartość musi być liczbą całkowitą większą od zera. Na przykład Last(3) - pobierz trzeci rekord od końca grupowania. Jeśli ostatni rekord wykracza poza grupowanie, uważa się, że nie ma zapisów. Na przykład, jeśli są 3 rekordy, a chcesz uzyskać Last(4), uważa się, że nie ma rekordów.
- "Poprzedni". Musisz uzyskać poprzedni wpis grupowania. Po słowie w nawiasach można podać wyrażenie, którego wynik zostanie użyty jako przesunięcie wstecz z bieżącego rekordu grupowania. Na przykład Poprzedni(2) — pobierz poprzedni z poprzedniego rekordu. Jeśli poprzedni rekord znajduje się poza grupowaniem (na przykład, drugi rekord grupowania musi otrzymać Poprzedni(3)), to uzyskiwany jest pierwszy rekord grupowania. Pobierając poprzedni rekord dla sumy grupowania, uważa się, że uzyskano pierwszy rekord.
- "Następny". Musisz uzyskać kolejny wpis grupujący. Po słowie w nawiasach można określić wyrażenie, którego wynik zostanie użyty jako przesunięcie do przodu z bieżącego rekordu grupowania. Na przykład Next(2) - pobierz następny z następnego rekordu. Jeśli kolejny rekord wykracza poza grupowanie, uważa się, że nie ma rekordów. Na przykład, jeśli są 3 rekordy, a trzeci rekord otrzyma Dalej, uważa się, że nie ma rekordów. Po odebraniu następnego rekordu dla sumy grupowej uważa się, że nie ma rekordu.
- "Aktualny". Musisz zdobyć aktualny wpis. Po pobraniu dla sumy grupowania pobierany jest pierwszy rekord.
- „Wartość Graniczna”. Konieczność uzyskania rekordu o określonej wartości. Po słowie RestrictingValue w nawiasie należy podać wyrażenie, którego wartością chcemy rozpocząć fragment, pierwsze pole porządkowania. Rekord będzie pierwszym rekordem, którego wartość pola porządkowania jest większa lub równa określonej wartości. Na przykład, jeśli pole Okres jest używane jako pole porządkowe i ma wartości 01.01.2010, 02.01.2010, 03.01.2010 i chcesz uzyskać LimitValue(DateTime(2010 , 1, 15)), wówczas otrzymamy zapis z datą 02.01.2010.
- Koniec. Określa, do którego rekordu ma być kontynuowany fragment, w którym oceniane jest wyrażenie agregujące. Ciąg zawierający jeden z:
- "Pierwszy".
- "Ostatni".
- "Poprzedni".
- "Następny".
- "Aktualny".
- „Wartość Graniczna”.
- Sortowanie. Ciąg, który zawiera listę wyrażeń oddzielonych przecinkami, w którym kierunku należy uporządkować sekwencję. Jeśli nie zostanie określony, porządkowanie odbywa się w taki sam sposób, jak w przypadku grupowania, dla którego obliczane jest wyrażenie. Po każdym wyrażeniu możesz określić słowo kluczowe Asc, aby posortować w kolejności rosnącej, Malejąco, aby posortować w kolejności malejącej, Auto-sort, aby posortować pola przywoływane według pól, według których ma być sortowany obiekt, do którego się odwołuje. Słowo AutoOrder może być używane zarówno ze słowami Ascending, jak i Descending.
- HierarchicznySortuj. Podobny do sortowania. Służy do porządkowania rekordów hierarchicznych. Jeśli nie zostanie określony, konstruktor układu generuje kolejność zgodnie z kolejnością określoną w parametrze Sortuj.
- Obsługa zamówienia o tych samych wartościach. Ciąg zawierający jeden z:
- „Razem” – oznacza, że sekwencja uporządkowanych rekordów służy do określenia poprzedniego i następnego rekordu;
- „Oddzielnie” – oznacza, że poprzedni i następny rekord są ustalane na podstawie wartości wyrażeń zamawiających;
1. 01 stycznia 2001 Iwanow M. 10
2. 02 stycznia 2001 Pietrow S. 20
3. 02 stycznia 2001 Sidorow R. 30
4. 03 stycznia 2001 Pietrow S. 40
Podczas korzystania z przetwarzania tych samych wartości zamówień „Oddzielnie” poprzedni do rekordu 3 będzie rekordem 2, a przy użyciu „Razem” - rekordem 1. A fragment bieżącego rekordu do rekordu 2 dla „Oddzielnie” będzie rekord 2, a dla "Razem" - rekordy 2 i 3. Zatem suma dla bieżącego rekordu dla "Oddzielnie" wyniesie 20, a dla "Razem" - 50. Jeżeli w polu Start i Parametry końcowe, nie można określić przesunięcia dla pozycji "Pierwsza", "Ostatnia", "Poprzednia", "Następna". Wartość domyślna to „Oddzielne”.
Uzyskanie stosunku kwoty w polu „Sales.AmountTurnover” rekordu grupującego do kwoty tego samego pola w całym layoucie:
Amount(Sales.AmountTurnover) / CalculateExpression("Amount(Sales.AmountTurnover)", "TotalTotal").
W tym przykładzie obliczana jest wartość bieżącej hierarchii:
Wybór
Gdy poziom() > 0
Następnie EvaluateExpression("Referencja", "Hierarchia")
Inny Null
Koniec
Uwagi:
Funkcja uwzględnia wybór grupowania, ale nie uwzględnia selekcji hierarchicznych. Funkcji nie można zastosować do grupy w wyborze grupy tej grupy. Na przykład przy wyborze grupowania Nomenklatury nie można użyć wyrażenia Oblicz wyrażenie ("Sum(SumTurnover)", "TotalTotal") > 1000 . Ale takie wyrażenie może być użyte w selekcji hierarchicznej. Jeżeli rekord końcowy poprzedza rekord początkowy, to uważa się, że nie ma rekordów do obliczania danych szczegółowych i obliczania funkcji agregujących. Podczas obliczania wyrażeń przedziałów dla sumy końcowej (parametr Grouping jest ustawiony na „GrandTotal”) uważa się, że nie ma rekordów do obliczania danych szczegółowych i obliczania funkcji agregujących. Konstruktor układu podczas generowania wyrażenia funkcji Calculate Expression, jeśli wyrażenie porządkowania zawiera pola, których nie można użyć w grupowaniu, zastępuje funkcję Calculate Expression wartością NULL.
3. EvalExpressionWithGroupArray - funkcja zwraca tablicę, której każdy element zawiera wynik obliczenia wyrażenia do grupowania po określonym polu.
Składnia :
ComputeExpressionGroupedArray(Expression, GroupingFieldExpressions, SelectRecords, SelectGroups)
Opcje :
- Wyrażenie(String) — wyrażenie do oceny. Na przykład „Kwota (Kwota Obrót)”;
- Wyrażenia poloweGrupy
- Wybór rekordu
- Wybór grupowania- wybór stosowany do rekordów grupowych. Na przykład: "Kwota (Kwota Obrotu) > &Parametr1".
Maximum(Calculate ExpressionWith GroupingArray("Kwota(Kwota Obrotu)", "Kontrahent"));
Kreator układu podczas generowania wyrażeń dla danych wyjściowych pole niestandardowe, w wyrażeniu, w którym znajduje się tylko funkcja CalculateArrayWithGrouping, generuje wyrażenie wyjściowe w taki sposób, że dane są wyświetlane w widoku, a dane są uporządkowane.
Na przykład dla pola niestandardowego z wyrażeniem:
Oblicz ExpressionWith GroupingArray("Kwota(Kwota Obrotu)", "Kontrahent")
konstruktor układu wygeneruje następujące wyrażenie dla danych wyjściowych:
ConcatenateStrings(Array(Order(CalculateExpressionWithGroupingValueTable("View(Amount(DataSet.AmountTurnover))), Amount(DataSet.AmountTurnover)", "DataSet.Counterparty"), "2")))
4. EvalExpressionWithGroupValueTable - funkcja zwraca tabelę wartości, której każdy element zawiera wynik obliczenia wyrażenia do grupowania po określonym polu.
Składnia :
Oblicz wyrażenie za pomocą GroupingValueTable (wyrażenie, grupowanie wyrażeń pól, wybieranie rekordów, wybieranie grupowań)
Opcje :
- Wyrażenie(String) — wyrażenie do oceny. Wiersz może zawierać wiele wyrażeń oddzielonych przecinkami. Po każdym wyrażeniu może następować opcjonalne słowo kluczowe AS i nazwa kolumny tabeli wartości. Na przykład: „Kontrahent, Kwota (Kwota Obrotu) jako WielkośćSprzedaży”.
- Wyrażenia poloweGrupy- grupowanie wyrażeń pól oddzielonych przecinkami. Na przykład „Wykonawca, Strona”;
- Wybór rekordu to wyrażenie stosowane do szczegółowych rekordów. Na przykład „Znak usunięcia = Fałsz”. Jeśli w tym parametrze zostanie użyta funkcja agregująca, wystąpi błąd podczas komponowania danych;
- Wybór grupowania- wybór stosowany do rekordów grupowych. Na przykład: "Kwota (Kwota Obrotu) > &Parametr1".
Oblicz wyrażenie z tabelą GroupingValue ("Kontrahent jako kontrahent, kwota (kwota obrotu) jako wielkość sprzedaży", "kontrahent")
Wynikiem działania tej funkcji będzie tabela wartości z kolumnami Kontrahent i Wielkość sprzedaży, w której znajdą się kontrahenci z ich wielkościami sprzedaży.
Konstruktor układu podczas generowania układu konwertuje parametry funkcji na warunki pól układu danych. Na przykład pole Konto zostanie przekonwertowane na Zestaw danych.Konto.
Na przykład pole niestandardowe z wyrażeniem:
Oblicz wyrażenie z tabelą GroupingValue ("Kontrahent, Kwota (Kwota Obrotu)", "Kontrahent")
Konstruktor układu wygeneruje następujące wyrażenie dla danych wyjściowych:
ConnectStrings(GetPart(Order(CalculateExpressionWithGroupingValueTable("DataSet.Account, DataSet.AccountView, Sum(DataSet.AmountTurnover), View(DataSet.AmountTurnover), DataSet.Ordering Field"), "DataSet.Account"), "5, 1, 3 " ), "2, 4"))
5. Poziom (poziom) - funkcja ma na celu uzyskanie aktualnego poziomu nagrywania.
Składnia :
Poziom()
Przykład :
Poziom()
6. Numer w kolejności (SequenceNumber) - uzyskaj kolejny numer seryjny.
Składnia :
Numer zamówienia()
Przykład :
Numer zamówienia()
7. Numer Sekwencji W Grupowaniu — zwraca następny numer sekwencyjny w bieżącym grupowaniu.
Przykład :
LiczbaWZamówieniuWGrupie()
8. Formatuj - pobierz sformatowany ciąg przekazanej wartości.
Składnia :
Format(Wartość, Ciąg formatu)
Opcje :
- Oznaczający- wyrażenie do sformatowania;
- Ciąg formatu- ciąg formatu jest ustawiony zgodnie z ciągiem formatu 1C:Enterprise.
Format(Faktury wydatków.KwotaDoc, "NPV=2")
9. Początek okresu (BeginOfPeriod)
Składnia :
PoczątekOkresu(Data,RodzajOkresu)
Opcje :
- data(Data). podana data;
- Typ okresu
PeriodStart(DateTime(2002, 10, 12, 10, 15, 34), "Miesiąc")
Wynik: 01.10.2002 0:00:00
10. EndPeriod (EndOfPeriod) - funkcja służy do wyodrębnienia określonej daty z podanej daty.
Składnia :
KoniecOkresu(Data,RodzajOkresu)
Opcje :
- data(Data). podana data;
- Typ okresu(Linia). Zawiera jedną z następujących wartości: Minuta; Godzina; Dzień; Tydzień; Miesiąc; Kwartał; Rok; Dekada; Pół roku.
EndPeriod(DateTime(2002, 10, 12, 10, 15, 34), "Tydzień")
Wynik: 13.10.2002 23:59:59
11. DodajKdate (DataDodaj) - funkcja ma na celu dodanie określonej wartości do daty.
Składnia :
AddToDate (wyrażenie, typ przyrostu, wartość)
Opcje :
- Wyrażenie(Data). oryginalna data;
- Typ powiększenia(Linia). Zawiera jedną z następujących wartości: Minuta; Godzina; Dzień; Tydzień; Miesiąc; Kwartał; Rok; Dekada; Pół roku.
- Wartość(Numer). O ile trzeba zwiększyć datę, część ułamkowa jest ignorowana.
AddToDate(DateTime(2002, 10, 12, 10, 15, 34), "Miesiąc", 1)
Wynik: 11.12.2002 10:15:34 AM
12. Różnica daty - funkcja ma na celu uzyskanie różnicy między dwiema datami.
Składnia :
DifferenceDate(Expression1 , Expression2 , DifferenceType)
Opcje :
- Wyrażenie1(Data). Odjęta data;
- Wyrażenie2(Data). oryginalna data;
- Rodzaj Różnica(Linia). Zawiera jedną z następujących wartości: Druga; Minuta; Godzina; Dzień; Miesiąc; Kwartał; Rok.
RÓŻNICA DATY(DATA CZAS(2002, 10, 12, 10, 15, 34),
DATETIME(2002, 10, 14, 9, 18, 06), "DZIEŃ")
Wynik: 2
13. Podciąg - podana funkcja ma na celu wyodrębnienie podciągu z ciągu.
Składnia :
Podciąg (ciąg, pozycja, długość)
Opcje :
- Linia(Linia). Ciąg, z którego wyodrębniony jest podciąg;
- Pozycja(Numer). Pozycja znaku, od którego zaczyna się podciąg, który ma zostać wyodrębniony z ciągu;
- Długość(Numer). Długość wybranego podciągu.
SUBSTRING(Konta.Adres, 1, 4)
14. Długość struny - funkcja służy do określenia długości ciągu.
Składnia :
Długość ciągu (ciąg)
Parametr :
- Linia(Linia). Ciąg, którego długość jest określana.
Ciąg(Konta.Adres)
15. rok- funkcja ta służy do wyodrębnienia roku z wartości typu Date.
Składnia :
Rok (data)
Parametr :
- data(Data). Data, do której ustalany jest rok.
ROK (włącznie z datą)
16. Kwartał (Kwartał) - funkcja ta służy do wyodrębnienia numeru kwartału z wartości typu Date. Numer bloku zwykle waha się od 1 do 4.
Składnia :
Kwartał (data)
Parametr :
- data(Data). Data, do której ustalany jest kwartał
KWARTAŁ(Faktura.Data)
17. Miesiąc - funkcja ta służy do wyodrębnienia numeru miesiąca z wartości typu Date. Numer miesiąca zwykle mieści się w zakresie od 1 do 12.
Składnia :
Miesiąc (data)
Parametr :
- data(Data). Data, do której ustalany jest miesiąc.
MIESIĄC(Faktura.Data)
18. Dzień Roku - ta funkcja jest przeznaczona do pobrania dnia roku z wartości typu Data. Dzień w roku zwykle waha się od 1 do 365(366).
Składnia :
DzieńRok (Data)
Parametr :
- data(Data). Data, do której ustalany jest dzień roku.
DZIEŃ ROKU (Data wygaś.)
19. Dzień (Dzień)- ta funkcja jest przeznaczona do pobrania dnia miesiąca z wartości typu Data. Dzień miesiąca zwykle waha się od 1 do 31.
Składnia :
Data dnia)
Parametr :
- data(Data). Data, do której ustalane są dni miesiąca.
DZIEŃ(Data wygaśnięcia)
20. Tydzień - funkcja ta służy do pobrania numeru tygodnia w roku z wartości typu Date. Tygodnie w roku są ponumerowane od 1.
Składnia :
Tydzień (data)
Parametr :
- data(Data). Data, do której ustalane są numery tygodni.
TYDZIEŃ (data wygaś.z.)
21. Dzień tygodnia (WeekDay) - ta funkcja jest przeznaczona do pobrania dnia tygodnia z wartości typu Data. Dzień tygodnia zwykle waha się od 1 (poniedziałek) do 7 (niedziela).
Składnia :
Dzień tygodnia (data)
Parametr :
- data(Data). Data, do której ustalany jest dzień tygodnia.
DZIEŃ TYGODNIA (Data wygaś.)
22. Godzina- funkcja ta służy do pobrania godziny dnia z wartości typu Date. Godzina dnia waha się od 0 do 23.
Składnia :
Godzina (data)
Parametr :
- data(Data). Data, do której ustalana jest godzina dnia.
GODZINA (data wygaś.z.)
23. Minuta - funkcja ta służy do pobrania minuty godziny z wartości typu Date. Minuta godziny waha się od 0 do 59.
Składnia :
Minuta (data)
Parametr :
- data(Data). Data, do której ustalana jest minuta godziny.
MINUTA (data wygaś.z.)
24. Drugi - ta funkcja jest przeznaczona do pobrania sekundy minuty z wartości typu Date. Sekunda minuty wynosi od 0 do 59.
Składnia :
Druga (data)
Parametr :
- data(Data). Data, do której określane są sekundy minuty.
SEC (data wygaś.z.)
25. Ekspres (obsada) - ta funkcja służy do wyodrębnienia typu z wyrażenia, które może zawierać typ kompozytowy. Jeśli wyrażenie zawiera typ inny niż wymagany typ, zostanie zwrócona wartość NULL.
Składnia :
Express (wyrażenie, wskazanie typu)
Opcje :
- Wyrażenie- wyrażenie do konwersji;
- Wskazanie typu(Linia). Zawiera ciąg znaków. Na przykład „Numer”, „Ciąg” itp. Z wyjątkiem typów prymitywnych podany ciąg może zawierać nazwę tabeli. W takim przypadku zostanie podjęta próba wyrażenia odwołania do podanej tabeli.
Express(Dane.Atrybut1, "Liczba(10,3)")
26. IsNull (IsNull) - ta funkcja zwraca wartość drugiego parametru, jeśli wartość pierwszego parametru jest NULL. W przeciwnym razie zostanie zwrócona wartość pierwszego parametru.
Składnia :
IsNull(wyrażenie1, wyrażenie2)
Opcje :
- Wyrażenie1- sprawdzona wartość;
- Wyrażenie2- wartość zwracana, jeśli wartość Expression1 wynosi NULL.
IsNULL(Kwota(Sprzedaż.KwotaObrót), 0)
27.ACos- oblicza arcus cosinus w radianach.
Składnia :
ACos(wyrażenie)
Parametr :
- Wyrażenie(Numer). Wartość cosinusa (w zakresie -1 ... 1) określająca kąt.
Składnia :
ASin(wyrażenie)
Parametr :
- Wyrażenie(Numer). Wartość sinus (w zakresie -1 ... 1) określająca kąt.
Składnia :
ATan(wyrażenie)
Parametr :
- Wyrażenie(Numer). Wartość stycznej, za pomocą której określany jest kąt.
Składnia :
Cos (wyrażenie)
Parametr :
- Wyrażenie
Składnia :
Wyrażenie (wyrażenie)
Parametr :
- Wyrażenie(Numer). Wartość stopnia.
Składnia :
Dziennik (wyrażenie)
Parametr :
- Wyrażenie
Składnia :
Log10 (wyrażenie)
Parametr :
- Wyrażenie(Numer). Oryginalna liczba jest większa niż 0.
Składnia :
Pow (podstawa, wykładnik)
Opcje :
- Baza(Numer). Podstawa operacji potęgowania.
- Indeks(Numer). Wykładnik potęgowy.
Składnia :
Grzech (wyrażenie)
Parametr :
- Wyrażenie(Numer). Określone w radianach.
Składnia :
Sqrt(Wyrażenie)
Parametr :
- Wyrażenie(Numer). Liczba nieujemna.
Składnia :
opalenizna (wyrażenie)
Parametr :
- Wyrażenie(Numer). Wartość sinusa, przez którą określany jest kąt.
Składnia :
Env (wyrażenie, głębia bitowa)
Opcje :
- Wyrażenie(Numer). Numer początkowy;
- Głębokość bitowa(Numer). Liczba miejsc dziesiętnych do zaokrąglenia.
Składnia :
Int(Wyrażenie)
Parametr :
- Wyrażenie(Numer). Liczba ułamkowa.
Wyrażenie mechanizmu kompozycji danych może zawierać wywołania funkcji do globalnych wspólnych modułów konfiguracyjnych. Do wywoływania takich funkcji nie jest wymagana dodatkowa składnia.
Przykład :
Skrócona nazwa (Dokumenty.Link, Dokumenty.Data, Dokumenty.Numer)
W tym przykładzie funkcja „ShortName” zostanie wywołana z modułu konfiguracji ogólnej.
Należy zauważyć, że użycie funkcji współużytkowanego modułu jest dozwolone tylko wtedy, gdy określono odpowiednią opcję procesora kompozycji danych.
Ponadto w wyrażeniach pól niestandardowych nie można używać typowych funkcji modułów.
41. Reprezentacja - ta funkcja zwraca ciąg reprezentujący przekazanej wartości typu niepierwotnego. W przypadku wartości typu pierwotnego zwraca samą wartość.
<Пустое значение>".
Przykład :
Zobacz Konto)
42. Sznurek - ta funkcja konwertuje przekazaną wartość na ciąg.
Jeżeli jako parametr użyta zostanie tablica lub tabela wartości, to funkcja zwraca ciąg zawierający ciąg reprezentujący wszystkie elementy tablicy, oddzielone znakami „;”. Jeśli jakikolwiek element ma pustą reprezentację w postaci ciągu, to ciąg „<Пустое значение>".
Przykład :
Ciąg (data sprzedaży)
43. ValueFilled (ValueIsFilled)
W przypadku wartości NULL Undefined zawsze zwraca wartość False.
W przypadku wartości Boolean zawsze zwraca True.
W przypadku innych typów zwraca True, jeśli wartość różni się od wartości domyślnej dla tego typu.
Przykład :
Wypełniona wartość (data dostawy)
44. PoziomWGrupie (PoziomWGrupie) - ta funkcja pobiera aktualny poziom rekordu w stosunku do grupowania.
Może służyć do uzyskiwania poziomu zagnieżdżenia wpisu w grupowaniu hierarchicznym.
Przykład :
PoziomW Grupie()
45. Typ wartości
Składnia :
TypWartości (Wyrażenie)
Parametr :
- Wyrażenie(Linia). Wartość ciągu typu.
Oblicz wyrażenie- dość skomplikowany Funkcja ACS dla zrozumienia, a przykłady zastosowań w informacjach referencyjnych są raczej nieliczne. W tym artykule omówiono przykłady, które z pewnością przydadzą się każdemu programiście:
- suma bieżąca w grupie;
- suma bieżąca w tabeli przestawnej;
- pobieranie poprzedniej wartości;
- Wyjście PM w jednej linii.
1. Uzyskanie wskaźnika na skumulowanej sumie
Pobierz ilość towarów w skumulowanej sumie na poziomie grupowania. W tym celu tworzymy pole obliczeniowe (patrz rysunek 1).W zakładce „Zasoby” ustaw funkcję dla pola obliczeniowego:
CalculateExpression("Suma (liczba obrotów)", "Pierwszy", "Bieżący")
który zsumuje ilość produktów od pierwszego do bieżącego rekordu (patrz rysunek 2).
Jeżeli chcesz otrzymać ilość towaru na zasadzie memoriałowej na poziomie rekordów szczegółowych, to dla pola obliczeniowego w zakładce „Pola obliczeniowe” ustawiana jest funkcja Przelicz wyrażenie (patrz Rysunek 3).
W zależności od poziomu odbioru sumy bieżącej tworzymy grupowanie (patrz Rysunek 4): na poziomie zasobu – grupowanie po towarach, na poziomie RD – grupowanie rekordów szczegółowych.
Rysunek 4. Grupowanie raportów ze skumulowaną sumą |
2. Uzyskanie wartości wskaźnika z poprzedniego wiersza
Uzyskaj kurs wymiany na datę i poprzednią datę. Aby to zrobić, utwórz pole obliczeniowe i wpisz następujące wyrażenie w polu wyrażenia (patrz Rysunek 5):EvaluateExpression("Kurs", "Poprzedni", "Poprzedni")
który przyjmie poprzednią wartość kursu walutowego za aktualna linia, ostatni parametr funkcji ogranicza odbiór danych.
Ponieważ pracujemy na poziomie rekordów szczegółowych, od razu przechodzimy do zakładki „Ustawienia” i tworzymy grupowanie – rekordy szczegółowe.
3. Uzyskanie wskaźnika ze skumulowaną sumą w tabeli przestawnej
Ilość towaru otrzymamy na zasadzie memoriałowej w kontekście okresu. W tym celu tworzymy pole obliczeniowe (patrz rysunek 1). Na karcie „Zasoby” dla pola obliczeniowego określ następujące wyrażenie (patrz Rysunek 6):CalculateExpression("Kwota (Liczba Obrotów)", "Okres", "Pierwszy", "Bieżący")
która na poziomie grupowania obliczy ilość towaru w zakresie od pierwszego wiersza do bieżącego w kontekście okresu dla każdego towaru.
W zakładce „Ustawienia” tworzymy tabelę z grupowaniem według pozycji w rzędzie i grupowaniem według okresu w kolumnie (patrz Rysunek 7).
4. Dane wyjściowe części tabelarycznej w jednym wierszu
W artykule omówiono metody wyprowadzania danych tabelarycznych w jednym wierszu, w tym metodę wykorzystującą funkcję Calculate ExpressionOblicz wyrażenie- dość złożona funkcja ACS do zrozumienia, a przykłady zastosowań w informacjach referencyjnych są raczej nieliczne. W tym artykule omówiono przykłady, które z pewnością przydadzą się każdemu programiście:
- suma bieżąca w grupie;
- suma bieżąca w tabeli przestawnej;
- pobieranie poprzedniej wartości;
- Wyjście PM w jednej linii.
1. Uzyskanie wskaźnika na skumulowanej sumie
Pobierz ilość towarów w skumulowanej sumie na poziomie grupowania. W tym celu tworzymy pole obliczeniowe (patrz rysunek 1).W zakładce „Zasoby” ustaw funkcję dla pola obliczeniowego:
CalculateExpression("Suma (liczba obrotów)", "Pierwszy", "Bieżący")
który zsumuje ilość produktów od pierwszego do bieżącego rekordu (patrz rysunek 2).
Jeżeli chcesz otrzymać ilość towaru na zasadzie memoriałowej na poziomie rekordów szczegółowych, to dla pola obliczeniowego w zakładce „Pola obliczeniowe” ustawiana jest funkcja Przelicz wyrażenie (patrz Rysunek 3).
W zależności od poziomu odbioru sumy bieżącej tworzymy grupowanie (patrz Rysunek 4): na poziomie zasobu – grupowanie po towarach, na poziomie RD – grupowanie rekordów szczegółowych.
Rysunek 4. Grupowanie raportów ze skumulowaną sumą |
2. Uzyskanie wartości wskaźnika z poprzedniego wiersza
Uzyskaj kurs wymiany na datę i poprzednią datę. Aby to zrobić, utwórz pole obliczeniowe i wpisz następujące wyrażenie w polu wyrażenia (patrz Rysunek 5):EvaluateExpression("Kurs", "Poprzedni", "Poprzedni")
który przyjmie poprzednią wartość kursu dla aktualnej linii, ostatni parametr funkcji ogranicza odbiór danych.
Ponieważ pracujemy na poziomie rekordów szczegółowych, od razu przechodzimy do zakładki „Ustawienia” i tworzymy grupowanie – rekordy szczegółowe.
3. Uzyskanie wskaźnika ze skumulowaną sumą w tabeli przestawnej
Ilość towaru otrzymamy na zasadzie memoriałowej w kontekście okresu. W tym celu tworzymy pole obliczeniowe (patrz rysunek 1). Na karcie „Zasoby” dla pola obliczeniowego określ następujące wyrażenie (patrz Rysunek 6):CalculateExpression("Kwota (Liczba Obrotów)", "Okres", "Pierwszy", "Bieżący")
która na poziomie grupowania obliczy ilość towaru w zakresie od pierwszego wiersza do bieżącego w kontekście okresu dla każdego towaru.
W zakładce „Ustawienia” tworzymy tabelę z grupowaniem według pozycji w rzędzie i grupowaniem według okresu w kolumnie (patrz Rysunek 7).
4. Dane wyjściowe części tabelarycznej w jednym wierszu
W artykule omówiono metody wyprowadzania danych tabelarycznych w jednym wierszu, w tym metodę wykorzystującą funkcję Calculate ExpressionW świetle nadchodzącego wydania 8.2.14 postaram się opisać niektóre z nowych funkcji systemu kompozycji danych.
Otwórz schemat kompozycji danych, najlepiej w zewnętrznym raporcie, aby ułatwić jego edycję.
Dodajemy zestaw danych zapytania i zapisujemy, ręcznie lub za pomocą kreatora zapytań, najprostsze zapytanie:
1. Skonfiguruj żądanie w ACS.
2. Ustaw pola obliczeniowe w ACS
3. Konfigurujemy układ danych na zakładce ustawień
4. Uruchamiamy 1C Enterprise 8.2.14. Otwieramy raport. Tworzymy, otrzymujemy.
Opis samych nowych funkcji:
1. Aktualna data()
Zwraca datę systemową. Podczas układania układu układu we wszystkich wyrażeniach występujących w układzie funkcja CurrentDate() jest zastępowana wartością bieżącej daty.
2. WYRAŻENIE OBLICZENIOWE()
Składnia:
Oblicz wyrażenie(,)
Opis:
Funkcja jest przeznaczona do oceny wyrażenia w kontekście pewnego grupowania.
Funkcja uwzględnia wybór grupowania, ale nie uwzględnia selekcji hierarchicznych.
Funkcji nie można zastosować do grupy w wyborze grupy tej grupy. Na przykład przy wyborze grupy Nomenklatury nie można użyć wyrażenia Oblicz wyrażenie („Suma(SumTurnover)”, „TotalTotal”) > 1000. Ale takie wyrażenie może być użyte w selekcji hierarchicznej.
Jeżeli rekord końcowy poprzedza rekord początkowy, to uważa się, że nie ma rekordów do obliczania danych szczegółowych i obliczania funkcji agregujących.
Podczas obliczania wyrażeń przedziałów dla sumy całkowitej (parametr Grouping jest ustawiony na GrandTotal ) uważa się, że nie ma rekordów do obliczania danych szczegółowych i obliczania funkcji agregujących.
Kreator układu podczas generowania wyrażenia funkcji Oblicz wyrażenie, jeśli wyrażenie porządkujące zawiera pola, których nie można użyć w grupowaniu, zastępuje funkcję Oblicz wyrażenie na ZERO.
Opcje
Typ: Linia. Wyrażenie do oceny.
Typ: Linia. Zawiera nazwę grupy, w której kontekście ma być oceniane wyrażenie. Jeśli jako nazwa grupowania zostanie użyty pusty ciąg, obliczenia zostaną wykonane w kontekście bieżącego grupowania. Jeśli jako nazwę grupowania zostanie użyty ciąg GrandTotal, obliczenie zostanie wykonane w kontekście sumy całkowitej. W przeciwnym razie obliczenia zostaną wykonane w kontekście grupy nadrzędnej o tej nazwie.
Na przykład:
Sum(Sales.SumTurnover)/Calculate("Sum(Sales.SumTurnover)", "TotalTotal")
W tym przykładzie wynikiem będzie stosunek kwoty do pola Sprzedaż.Kwota Obrót grupowanie wpisów do sumy tego samego pola w całym układzie;
Typ: Linia. Parametr może przyjmować następujące wartości:
· Ogólny wynik— wyrażenie zostanie ocenione dla wszystkich rekordów grupujących.
· Hierarchia— wyrażenie zostanie ocenione dla nadrzędnej pozycji hierarchicznej, jeśli taka istnieje, oraz dla całego grupowania, jeśli nie ma nadrzędnej pozycji hierarchicznej.
· grupowanie— wyrażenie zostanie ocenione dla bieżącego rekordu grupy zgrupowania.
· GrupowanieNieZasób— przy obliczaniu funkcji dla rekordu grupowego według zasobów wyrażenie będzie obliczane dla pierwszego rekordu grupowego z grupowania początkowego.
Przy obliczaniu funkcji Oblicz wyrażenie() ze znaczeniem GrupowanieNieZasób dla rekordów grupowych, które nie są grupowaniami po zasobach, funkcja jest obliczana w taki sam sposób, jak byłaby obliczona, gdyby wartość parametru była równa wartości grupowanie.
Konstruktor układu kompozycji danych, podczas generowania układu układu kompozycji danych, podczas wyświetlania pola zasobu, według którego wykonywane jest grupowanie, umieszcza wyrażenie w układzie, które jest obliczane za pomocą funkcji Oblicz wyrażenie() , określając parametr GrupowanieNieZasób. W przypadku innych zasobów pogrupowanych według zasobu umieszczane są regularne wyrażenia zasobów.
Typ: Linia. Określa, który rekord ma rozpocząć fragment, w którym należy obliczyć funkcje agregujące wyrażenia i z którego rekordu należy pobrać wartości pól spoza funkcji agregujących. Wartość może być jedną z następujących:
· Pierwszy (pierwszy)
· Ostatni (ostatni)
· Poprzedni (poprzedni )
· Dalej (następny )
· Bieżący (bieżący)
· Wartość Ograniczająca(WartośćGranicy) Wartość Ograniczająca
Typ: Linia. Wskazuje, do którego rekordu należy kontynuować fragment, w którym należy obliczyć funkcje agregujące wyrażenia. Wartość może być jedną z następujących:
· Pierwszy (pierwszy). Musisz zdobyć pierwszy rekord grupowania. Po słowie w nawiasach można podać wyrażenie, którego wynik zostanie użyty jako przesunięcie od początku grupowania. Wynikowa wartość musi być liczbą całkowitą większą od zera. Na przykład First(3) - pobranie trzeciego rekordu od początku grupowania.
Jeśli pierwszy wpis znajduje się poza grupą, uważa się, że nie ma żadnych wpisów. Na przykład, jeśli istnieją 3 rekordy, a chcesz uzyskać First(4) , uważa się, że nie ma żadnych rekordów.
· Ostatni (ostatni). Musisz uzyskać najnowszy wpis grupowania. Po słowie w nawiasach można podać wyrażenie, którego wynik zostanie użyty jako przesunięcie od końca grupowania. Wynikowa wartość musi być liczbą całkowitą większą od zera. Na przykład Last(3) - pobierz trzeci rekord od końca grupowania.
Jeśli ostatni wpis znajduje się poza grupą, uważa się, że nie ma wpisów. Na przykład, jeśli są 3 rekordy, a chcesz uzyskać Last(4) , uważa się, że nie ma rekordów.
· Poprzedni (poprzedni ). Musisz uzyskać poprzedni wpis grupowania. Po słowie w nawiasach można podać wyrażenie, którego wynik zostanie użyty jako przesunięcie wstecz z bieżącego rekordu grupowania. Na przykład Poprzedni(2) — pobierz poprzedni z poprzedniego rekordu.
Jeśli poprzedni rekord znajduje się poza grupowaniem (na przykład, drugi rekord grupowania wymaga Poprzedni(3) , to uzyskiwany jest pierwszy rekord grupowania.
Pobierając poprzedni rekord dla sumy grupowania, uważa się, że uzyskano pierwszy rekord.
· Dalej (następny ). Musisz uzyskać kolejny wpis grupujący. Po słowie w nawiasach można określić wyrażenie, którego wynik zostanie użyty jako przesunięcie do przodu z bieżącego rekordu grupowania. Na przykład Next(2) - pobierz następny z następnego rekordu.
Jeśli kolejny rekord wykracza poza grupowanie, uważa się, że nie ma rekordów. Na przykład, jeśli istnieją 3 rekordy, a trzeci rekord otrzyma Next() , uważa się, że nie ma rekordów.
Po odebraniu następnego rekordu dla sumy grupowej uważa się, że nie ma rekordu.
· Bieżący (bieżący). Musisz zdobyć aktualny wpis.
Po pobraniu dla sumy grupowania pobierany jest pierwszy rekord.
· Wartość Ograniczająca(WartośćGranicy). Konieczność uzyskania rekordu o określonej wartości. Po słowie Wartość Ograniczająca w nawiasach należy podać wyrażenie, którego wartością chcemy rozpocząć fragment, pierwsze pole porządkowania.
Rekord będzie pierwszym rekordem, którego wartość pola porządkowania jest większa lub równa określonej wartości. Na przykład, jeśli używasz pola Okres jako pola porządkowania i ma ono wartości 01.01.2010 , 02.01.2010 , 03.01.2010 , a chcesz uzyskać LimitValue(DateTime(2010, 1, 15)), wówczas otrzymamy zapis z datą 02.01.2010.
Typ: Linia. Wymienione są wyrażenia oddzielone przecinkami, które opisują reguły porządkowania. Jeśli nie zostanie określony, porządkowanie odbywa się w taki sam sposób, jak w przypadku grupowania, dla którego obliczane jest wyrażenie. Po każdym wyrażeniu może następować słowo kluczowe Asc(dla porządku rosnącego), Malejąco(dla porządku malejącego) i Automatyczne układanie(dla uporządkowania pól referencyjnych według pól, według których chcesz uporządkować obiekt, do którego się odwołujemy). Słowo Automatyczne układanie może być używany jak ze słowem Asc i słowem Malejąco.
Typ: Linia. Taki sam jak parametr Sortowanie. Służy do porządkowania rekordów hierarchicznych. Jeśli nie określono, konstruktor układu generuje kolejność zgodnie z kolejnością określoną w parametrze Sortowanie.
Typ: Linia. Określa regułę określania poprzedniego lub następnego rekordu, jeśli istnieje wiele rekordów z ta sama wartość zamawianie:
· Osobno wskazuje, że sekwencja uporządkowanych rekordów jest używana do określenia poprzedniego i następnego rekordu. Domyślna wartość.
· Razem razem) wskazuje, że poprzedni i następny rekord są określane na podstawie wartości wyrażeń porządkujących.
Na przykład, jeśli wynikowa sekwencja jest uporządkowana według daty:
№ | data | Pełne imię i nazwisko | Oznaczający |
1 | 01 stycznia 2001 |
Iwanow M. |
10 |
2 | 02 stycznia 2001 | Pietrow S. | 20 |
3 | 03 stycznia 2001 | Sidorow R. | 30 |
4 | 04 stycznia 2001 | Pietrow S. | 40 |
Osobno, następnie:
§ poprzedni wpis do wpisu 3 będzie wpisem 2.
prąd, prąd(odpowiednio parametry Początek oraz Koniec), to dla rekordu 2 ten fragment będzie się składał z jednego rekordu 2. Wyrażenie będzie równe 20.
Jeśli wartość parametru to Razem, następnie:
§ poprzedni wpis do wpisu 3 będzie wpisem 1.
§ jeżeli wyliczany fragment jest zdefiniowany jako prąd, prąd(odpowiednio parametry Początek oraz Koniec), to dla rekordu 2 ten fragment będzie się składał z rekordów 2 i 3. Wyrażenie CalculateExpression("Suma(Wartość)", Bieżący, Bieżący) będzie równa 50.
Przy określaniu wartości parametru równej Razem, w parametrach Początek oraz Koniec nie można określić przesunięcia dla pozycji Pierwszy , Ostatni , Poprzedni , Następny.
CalculateExpression("Kwota (Kwota Obrotu)", "Pierwszy", "Bieżący")
Jeśli chcesz uzyskać wartość grupowania z poprzedniego wiersza, możesz użyć następującego wyrażenia:
CalculateExpression("Kurs", "Poprzedni")
Lista Nowy cechy:ComputeExpressionGrupowana tablica(,) -
Funkcja zwraca tablicę, której każdy element zawiera wynik oceny wyrażenia do grupowania według określonego pola.
ComputeExpressionGrupowana tabela wartości(,) -
Funkcja zwraca tabelę wartości, której każdy wiersz zawiera wynik oceny wyrażeń do grupowania według określonego pola
Wypełnione wartości() — Zwraca True, jeśli wartość jest inna niż wartość domyślna tego typu, inna niż NULL , inna niż odwołanie o wartości null, inna niż Undefined . Wartości logiczne są testowane pod kątem NULL . Ciągi są sprawdzane pod kątem znaków innych niż białe znaki.
Format(,) — Pobierz sformatowany ciąg przekazanej wartości. Ciąg formatu jest ustawiany zgodnie z ciągiem formatu systemu 1C:Enterprise.
Podciąg(, , ) — ta funkcja służy do wybierania podciągu z ciągu.
Długość łańcucha() — funkcja służy do określenia długości ciągu. Parametr jest wyrażeniem typu string
Linia() — Jeśli jako parametr zostanie przekazana tablica, funkcja zwraca ciąg znaków zawierający reprezentacje wszystkich elementów tablicy, oddzielone znakami „;”. Jeżeli jako parametr przekazano tabelę wartości, to funkcja zwraca ciąg znaków zawierający reprezentacje wszystkich wierszy tabeli wartości, a reprezentacje komórek każdego wiersza są oddzielone znakami „;”, a wiersze są oddzielone znakiem nowej linii. Jeśli dowolny element ma pustą reprezentację w postaci ciągu, zamiast jego reprezentacji wyświetlany jest ciąg.
W tej krótkiej notatce chcę pokazać, jak można zsumować wartości na różnych poziomach grupowania w raporcie za pomocą systemu kompozycji danych.
Jak pokazano na obrazku, tylko na poziomie grupowania „Grupy towarów” obliczany jest zasób „Zamówienie”, wyświetla on ilość zamówienia dla bieżącej grupy towarów na podstawie określonych warunków:
Tę wartość można obliczyć tylko na tym poziomie grupowania, ponieważ powyżej lub poniżej nie ma wartości do obliczenia. Na przykład na poziomie rekordów szczegółowych nie ma danych o maksymalnej liczbie w grupie, ponieważ dane te są prawdziwe tylko dla grupy jako całości, a nie dla jej poszczególnych składników.
W związku z tym teraz konieczne jest obliczenie sum dla wyższych grup („Magazyny”, „Typy magazynów”) i sumy.
W tym celu używana jest funkcja Oblicz wyrażenie za pomocą zgrupowanej tablicy:
OCENA WYRAŻENIA GRUPOWANIA TABLIC (EVALEXPRESSIONWithGROUPARRAY)
Składnia:
ComputeExpressionGrupowana tablica(,)
Opis:
Funkcja zwraca tablicę, której każdy element zawiera wynik oceny wyrażenia do grupowania według określonego pola.
Konstruktor układu podczas generowania układu konwertuje parametry funkcji na warunki pól układu danych. Na przykład pole Konto zostanie przekonwertowane na Zestaw danych.Konto.
Konstruktor układu podczas generowania wyrażeń do wyświetlania pola niestandardowego, którego wyrażenie zawiera tylko funkcję CalculateArrayWithGroupArray(), generuje wyrażenie wyjściowe w taki sposób, że informacje wyjściowe są uporządkowane. Na przykład dla pola niestandardowego z wyrażeniem:
Oblicz ExpressionWith GroupingArray("Kwota(Kwota Obrotu)", "Kontrahent")
Konstruktor układu wygeneruje następujące wyrażenie dla danych wyjściowych:
ConcatenateStrings(Array(Order(CalculateGroup ExpressionValueTable("View(Amount(DataSet.AmountTurnover))),Amount(DataSet.AmountTurnover)","DataSet.Counterparty"),"2")))
Opcje:
Typ: ciąg. Wyrażenie do oceny. Ciąg, na przykład Amount(AmountTurnover).
Typ: ciąg. Grupowanie wyrażeń pól – grupowanie wyrażeń pól oddzielonych przecinkami. Na przykład Wykonawca, Strona.
Typ: ciąg. Wyrażenie opisujące filtr zastosowany do rekordów szczegółowych. Funkcje agregujące nie są obsługiwane w wyrażeniu. Na przykład znak usunięcia = fałsz.
Typ: ciąg. Wyrażenie opisujące filtr zastosowany do rekordów grupowych. Na przykład kwota (kwota obrotu) > &Parametr1.
Przykład:
Maximum(Calculate ExpressionWith GroupingArray("Kwota(Kwota Obrotu)", "Kontrahent"));
Szczegółowy opis składni funkcji można znaleźć pod adresem http://its.1c.ru/db/v837doc#bookmark:dev:TI000000582
Teraz do obliczeń zduplikujemy pole „Zamówienie” z różnymi wartościami „Oblicz według ...”, używając następujących wyrażeń, zauważ, że na każdym wyższym poziomie wartości poziomów niższego używane są grupy.
W rezultacie otrzymujemy następującą konstrukcję: