Oblicz wyrażenie skd. Przydatne przykłady schematów kompozycji danych

Przykład jak można uzyskać pola poprzedniego rekordu w grupie i nie tylko. Wygodne do obliczania różnicy między wartościami poprzedniej ceny a obecną.

Istotą rozwiązania jest wykorzystanie funkcji języka wyrażeń SKD Oblicz wyrażenie() w dodanym polu obliczeniowym, które nazwałem Delta. Funkcja posiada następujące parametry:

Opcje:

  • Wyrażenie. Typ Linia;
  • grupowanie. Typ Linia;
  • Typ obliczeń. Typ Linia;
  • Początek
  • Koniec. Ciąg zawierający jedną z opcji;
  • Sortowanie. Linia;
  • HierarchicznySortuj;
  • Obsługa zamówienia o tych samych wartościach

Interesują nas parametry 4 i 5 ( Początek oraz Koniec). Wyrażenie będzie wyglądać tak:

isNULL((OBLICZ WYRAŻENIE("Cena", "Poprzednia", "Poprzednia") - Cena), 0)

Tutaj obliczamy poprzednią wartość pola Cena £ i odejmij od niego bieżącą wartość pola Cena £. Naturalnie dla pierwszego rekordu poprzednia wartość nie zostanie obliczona i wynik odejmowania od wartości bieżącego pola będzie równy Null, więc aby wszystko było „czyste” używamy funkcji isNULL(isNull) do zamiany Null na zero .

Umieść tabelę wartości w komórce dokumentu arkusza kalkulacyjnego

Czasami konieczne jest umieszczenie części tabelarycznej dokumentu lub danych, które są wierszami części tabelarycznej w jednej komórce dokumentu arkusza kalkulacyjnego, na przykład tak:

Aby to zrobić, musisz użyć funkcji: ComputeExpressionGrupowana tabela wartości() , który ma parametry:

  • Wyrażenie jest wyrażeniem do oceny. Wpisz ciąg. 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”;
  • Wybór grupowania- wybór stosowany do rekordów grupowych. Na przykład: "Kwota (Kwota Obrotu) > &Parametr1".

W tym celu tworzymy pole obliczeniowe, w którym wyświetlimy wynikową tabelę, następnie umieszczamy to pole w zasobach z wyrażeniem CalculateExpressionGroupedValueTable("Nazewnictwo, ilość")

Kolumny liczbowe

Przykład numeracji kolumn w SKD.

Istota rozwiązania:

  1. Tworzymy zapytanie, w którym numerujemy wiersze wyniku zapytania w ramach pewnego podporządkowania
  2. Wyświetlanie wyniku w tabeli przestawnej

WAŻNY!

Po ponumerowaniu wierszy w zapytaniu należy je umieścić w BT, a następnie wybrać z tego BT, w przeciwnym razie ACS zrobi wszystko po swojemu i niewłaściwe pola wpadną do grupowania

Aby uzyskać wynik, musisz utworzyć pole obliczeniowe z wyrażeniem „Pracownik” + Format (NPP, „FH=3; FH=”) oraz obliczoną nazwę pola, w której łatwo jest umieścić Pracownika, wtedy to pole umieszczamy Pełne imię i nazwisko do zasobu z wyrażeniem Maksimum (imię i nazwisko) lub po prostu Pełne imię i nazwisko- bez różnicy

Grupy naprzemienne z podświetlaniem kolorów

Gdzieś na Mista lub na tym samym 1Cskd.ru pojawiło się pytanie, jak wyróżnić linie tworzące grupy o różnych kolorach

Osiąga się to poprzez utworzenie pola obliczeniowego:

Oblicz wyrażenie("Ilość (różne elementy)","Pierwszy", "Poprzedni","Razem") % 2

Liczymy ilość różnych „zgrupowań” pola Nomenklatury, zgrupowania można policzyć ustawiając wartość parametru ProcessingSameOrderValues ​​= „Razem”

Pozostała część dzielenia przez dwa wyjaśni, czy ta grupa jest parzysta, czy nie, odpowiednio tworzymy warunkowy element projektu z warunkiem Pole = 1

Pozostanie w kontekście cech. Charakterystyka na linię z ilością w nawiasach

Na tym samym 1CSkd.ru był taki temat, w którym autor prosi o pomoc w sporządzeniu raportu, gdzie w jednej z kolumn wymagana jest lista cech (rozmiary butów) wraz z ich liczbą. http://1cskd.ru/2013/05/podskazhite-novichku-v-skd/

Osiąga się to za pomocą tej samej funkcji Oblicz wyrażenie z GroupingArray()

W tym przykładzie funkcja wygląda tak:

Oblicz wyrażenieZ GroupingArray("Charakterystyka nomenklatury.Opis +
""("" + Format(Liczba Reszt,""CH=0"") + "")""",
,
„Wartość Wypełniona (Nomenklatura Cech)”)

Trzeci parametr to wybór, pozwala uniknąć prezentacji pustego ciągu "" - w związku z tym nie zobaczysz pozostałości bez cech

Połącz dwie tabele za pomocą klucza Ciąg = Numer

Lub wariant konwersji wartości typu liczbowego na ciąg w SKD

Od czasu do czasu na forach pojawia się temat „Jak przekonwertować liczbę na ciąg w zapytaniu”. Jeśli piszesz raport na temat ACS i musisz wykonać taką transformację, nie musisz wpisywać żadnych sztuczek w żądaniu.

Aby przekonwertować liczbę na ciąg, po prostu użyj funkcji języka wyrażeń systemu kompozycji danych SKD Linia() lub Format()

Aby przekonwertować ciąg na liczbę, możesz użyć funkcji Obliczać()

Sortuj według ciągu jako według numeru

W moim przykładzie po prostu wyświetlę katalog pracowników, sortując go według numeru personelu (kodu)

Wynik będzie wyglądał tak:

Osiąga się to poprzez utworzenie pola obliczeniowego i użycie funkcji języka wyrażeń SKD Obliczać()

  1. Utwórz pole obliczeniowe Numer karty Numer, z wyrażeniem: Oblicz (Kod Pracownika)
  2. Sortuj według tego pola

w rzeczywistości jest to konwersja ciągu znaków na liczbę za pomocą funkcji języka wyrażeń SKD Obliczać()

Radzę również zajrzeć do "Samouczki wideo na skd" (łatwo wyszukiwane w Google)

Podczas tworzenia używam konwertowanego .

W ś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ślającą poprzedni lub następny rekord, jeśli istnieje wiele rekordów o tej samej wartości porządkowej:

· 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żesz 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.

  • 1C-Bitrix
  • Jednym z najważniejszych obszarów oprogramowania biznesowego jest raportowanie. Jak łatwo jest dostosować istniejący raport do zmieniających się potrzeb biznesu (i przepisów) lub zrobić nowy, może zależeć (a nie w przenośni!) losy biznesu, czy to raport dla urzędu skarbowego czyli wykres zależności popytu na towar od pory roku i innych czynników. Potężny i elastyczny system raportowania, który pozwala w łatwy sposób wydobyć odpowiednie dane z systemu, przedstawić je w zrozumiałej formie, pozwalając użytkownikowi końcowemu na rekonfigurację standardowego raportu, aby zobaczyć dane w nowym świetle - to idealne rozwiązanie, które każdy system biznesowy powinien dążyć.

    W platformie 1C:Enterprise za generowanie raportów odpowiada mechanizm zwany systemem składu danych (w skrócie ACS). W tym artykule postaramy się krótko opisać ideę i architekturę mechanizmu ACS oraz jego możliwości.


    ACS to mechanizm oparty na deklaratywnym opisie raportów. ACS jest przeznaczony do tworzenia raportów i wyświetlania informacji o złożonej strukturze. Nawiasem mówiąc, oprócz tworzenia raportów mechanizm ACS jest również wykorzystywany w 1C:Enterprise w dynamicznej liście, narzędziu do wyświetlania informacji o listach o bogatej funkcjonalności (wyświetlanie list płaskich i hierarchicznych, warunkowe formatowanie wierszy, grupowanie itp.) .

    Trochę historii

    W pierwszej wersji platformy 1C:Enterprise 8, wersja 8.0, raporty zostały sporządzone w następujący sposób:
    1. Jedno lub więcej zapytań zostało napisanych w języku zapytań 1C (język podobny do SQL, więcej na ten temat poniżej).
    2. Napisano kod, który przenosił wyniki wykonanych zapytań do dokumentu arkusza kalkulacyjnego lub wykresu. Kod mógłby również wykonać pracę, której nie można wykonać w zapytaniu - na przykład obliczał wartości za pomocą wbudowanego języka 1C.
    Podejście jest proste, ale nie najwygodniejsze - jest minimum ustawień wizualnych, wszystko musi być zaprogramowane ręcznie. A jednym z atutów w tym czasie zupełnie nowej platformy 1C:Enterprise 8 było zminimalizowanie ilości kodu w rozwiązaniu aplikacyjnym, które trzeba napisać ręcznie, w szczególności ze względu na projekt wizualny. Logiczne byłoby podążanie tą samą ścieżką w mechanizmie raportowania. Dokonano tego poprzez opracowanie nowego mechanizmu – Systemu Składowania Danych.

    Jednym z pomysłów, które stały się podstawą ACS, była elastyczność i dostosowywanie raportów, które są dostępne zarówno dla dewelopera, jak i użytkownika końcowego. W idealnej sytuacji chcielibyśmy dać użytkownikowi końcowemu dostęp do tego samego zestawu narzędzi do projektowania raportów, co programista. Logiczne byłoby udostępnienie wszystkim jednego zestawu narzędzi. Otóż ​​skoro narzędzia wiążą się z udziałem użytkownika końcowego, oznacza to, że wykorzystanie w nich programowania powinno zostać usunięte do minimum (najlepiej całkowicie wyeliminowane), a ustawienia wizualne powinny być maksymalnie wykorzystane.

    Sformułowanie problemu

    Zadanie stojące przed zespołem deweloperskim było takie - zrobić system raportowania oparty nie na algorytmicznym (czyli poprzez pisanie kodu), ale na deklaratywnym podejściu do tworzenia raportów. I wierzymy, że problem został pomyślnie rozwiązany. Z naszego doświadczenia wynika, że ​​około 80% wymaganego raportowania można zrealizować za pomocą ACS bez jednej linii kodu (z wyjątkiem pisania formuł dla pól obliczanych), w większości - poprzez ustawienia wizualne.
    Opracowanie pierwszej wersji ACS zajęło około 5 osobolat.

    Dwa języki

    W tworzenie raportów zaangażowane są dwa języki. Jednym z nich jest język zapytań używany do pobierania danych. Drugi to język wyrażeń kompozycji danych, przeznaczony do pisania wyrażeń używanych w różnych częściach systemu, na przykład w ustawieniach kompozycji danych, do opisywania niestandardowych wyrażeń pól.

    Język zapytań

    Język zapytań bazuje na SQL i jest łatwy do opanowania przez tych, którzy znają SQL. Przykład zapytania:

    Łatwo zobaczyć analogi standardowych sekcji zapytań SQL - SELECT, FROM, GROUP BY, ORDER BY.

    Jednocześnie język zapytań zawiera znaczną liczbę rozszerzeń mających na celu odzwierciedlenie specyfiki zadań finansowo-gospodarczych oraz maksymalne ograniczenie wysiłków w opracowywaniu stosowanych rozwiązań:

    • Odwoływanie się do pól za pomocą kropki. Jeśli pola dowolnej tabeli są typu referencyjnego (przechowują łącza do obiektów innej tabeli), programista może odwoływać się do nich w tekście zapytania poprzez „.”, podczas gdy liczba poziomów zagnieżdżenia takich łączy nie jest ograniczona przez system (np. Klient Zamówienie.Umowa.Organizacja. Telefon).
    • Wielowymiarowe i wielopoziomowe tworzenie wyników. Sumy i podsumy tworzone są z uwzględnieniem grupowania i hierarchii, poziomy można omijać w dowolnej kolejności z sumowaniem podsum, zapewniona jest poprawna konstrukcja sum według wymiarów czasowych.
    • Wsparcie dla wirtualnych tabel. Udostępniane przez system wirtualne tabele pozwalają na uzyskanie niemal gotowych danych dla większości zadań aplikacji bez konieczności pisania skomplikowanych zapytań. W ten sposób wirtualna tabela może dostarczyć danych o stanie towarów w kontekście okresów w określonym momencie. Jednocześnie wirtualne tabele maksymalnie wykorzystują przechowywane informacje, na przykład wcześniej obliczone sumy itp.
    • Tabele tymczasowe. Język zapytań umożliwia używanie w zapytaniach tabel tymczasowych. Za ich pomocą można poprawić wydajność zapytań, w niektórych przypadkach zmniejszyć liczbę blokad i ułatwić czytanie tekstu zapytania.
    • żądania zbiorcze. Dla wygodniejszej pracy z tabelami tymczasowymi język zapytań obsługuje pracę z zapytaniami wsadowymi - dzięki temu tworzenie tabeli tymczasowej i jej wykorzystanie jest umieszczone w jednym zapytaniu. Żądanie zbiorcze to sekwencja żądań oddzielona średnikiem (";"). Żądania w paczce są wykonywane jedno po drugim. Wynikiem wykonania zapytania wsadowego, w zależności od użytej metody, będzie wynik zwrócony przez ostatnie zapytanie w wiązce lub tablica wyników wszystkich żądań wsadowych w kolejności, w jakiej następują żądania w paczce .
    • Pobieranie widoków pól referencyjnych. Każda tabela obiektów (w której przechowywany jest katalog lub dokument) posiada wirtualne pole - „Reprezentacja”. To pole zawiera tekstową reprezentację obiektu i ułatwia pracę reportera. Czyli dla dokumentu to pole zawiera wszystkie kluczowe informacje - nazwę typu dokumentu, jego numer i datę (np. "Sprzedaż 000000003 od 07.06.2017 17:49:14"), zapisując dewelopera przed pisanie pola obliczeniowego.
    • itd.
    Silnik zapytań automatycznie modyfikuje zapytanie, uwzględniając role użytkownika, w imieniu którego zapytanie jest wykonywane (tj. użytkownik zobaczy tylko te dane, do których ma prawo zobaczyć) oraz opcje funkcjonalne (tj. zgodne z skonfigurowany w funkcjonalności rozwiązania aplikacyjnego).

    Istnieją również specjalne rozszerzenia języka zapytań dla SKD. Interpretacja odbywa się za pomocą specjalnych instrukcji składniowych zawartych w nawiasach klamrowych i umieszczonych bezpośrednio w tekście żądania. Za pomocą rozszerzeń programista określa, jakie operacje będzie mógł wykonać użytkownik końcowy, dostosowując raport.

    Na przykład:

    • WYBIERAĆ. To zdanie opisuje pola, które użytkownik będzie mógł wybrać do wyjścia. Po tym słowie kluczowym aliasy pól z głównej listy wyboru zapytań, które będą dostępne do dostosowania, są oddzielone przecinkami. Przykład: (SELECT Nomenklatura, Magazyn)
    • GDZIE. Opisuje pola, w których użytkownik może zastosować wybór. Ta propozycja wykorzystuje pola tabeli. Użycie aliasów pól listy wyboru jest niedozwolone. Każda część złącza może zawierać własny element WHERE. Przykłady: (WHERE Nomenclature.*, Warehouse ), (WHERE Document.Date >= &StartDate, Document.Date<= &ДатаКонца}
    • itd.
    Przykład wykorzystania rozszerzeń:

    Język wyrażenia kompozycji danych

    Język wyrażeń kompozycji danych jest przeznaczony do pisania wyrażeń używanych w szczególności do opisywania wyrażeń pól niestandardowych. ACS umożliwia definiowanie własnych pól w raporcie za pomocą własnych wyrażeń lub zestawów opcji z warunkami ich wyboru (analogicznie do CASE w SQL). Pola niestandardowe są analogiczne do pól obliczanych. Można je ustawić zarówno w konfiguratorze, jak iw trybie 1C:Enterprise, ale funkcji typowych modułów nie można używać w niestandardowych wyrażeniach pól. Dlatego pola niestandardowe są bardziej dla użytkownika niż dla programisty.

    Przykład:

    Proces tworzenia raportu na ACS

    Tworząc raport, musimy stworzyć układ, który definiuje sposób wyświetlania danych w raporcie. Możesz utworzyć układ na podstawie schematu kompozycji danych. Schemat kompozycji danych opisuje istotę danych dostarczanych do raportu (skąd uzyskać dane i jak można kontrolować ich kompozycję). Schemat kompozycji danych jest podstawą, na której można generować wszelkiego rodzaju raporty. Schemat kompozycji danych może zawierać:
    • tekst żądania z instrukcjami systemu składu danych;
    • opis kilku zbiorów danych;
    • szczegółowy opis dostępnych pól;
    • opis relacji między kilkoma zbiorami danych;
    • opis parametrów akwizycji danych;
    • opis rozmieszczenia pól i zgrupowań;
    • itd.

    Na przykład możesz dodać zapytanie do schematu kompozycji danych jako zestaw danych i wywołać konstruktor zapytań, który pozwala na graficzne skomponowanie zapytania o dowolnej złożoności:

    Wynikiem uruchomienia konstruktora zapytań będzie tekst zapytania (w języku zapytań 1C:Enterprise). Ten tekst można w razie potrzeby dostosować ręcznie:

    W schemacie kompozycji danych może istnieć kilka zestawów danych, zestawy danych można dowolnie łączyć w układzie, można dodawać pola obliczeniowe, ustawiać parametry raportu itp. Warto wspomnieć o ciekawej funkcji mechanizmu zapytań w 1C:Enterprise. Zapytania są ostatecznie tłumaczone na dialekt SQL specyficzny dla systemu DBMS, z którym aplikacja bezpośrednio współpracuje. Generalnie staramy się maksymalnie wykorzystać możliwości serwerów DBMS (ogranicza nas fakt, że korzystamy tylko z tych możliwości, które są jednocześnie dostępne we wszystkich DBMS obsługiwanych przez platformę 1C:Enterprise - MS SQL, Oracle, IBM DB2 , PostgreSQL). Tak więc na poziomie zapytania w polach obliczeniowych możemy używać tylko tych funkcji, które są tłumaczone na SQL.

    Ale już na poziomie schematu kompozycji danych możemy już dodawać niestandardowe pola i używać w nich funkcji we wbudowanym języku programowania 1C (w tym tych napisanych przez nas), co znacznie rozszerza możliwości raportów. Technicznie wygląda to tak - wszystko, co można przetłumaczyć na SQL, jest tłumaczone na SQL, zapytanie wykonywane jest na poziomie DBMS, wyniki zapytania są umieszczane w pamięci serwera aplikacji 1C, a ACS oblicza wartości pól obliczeniowych dla każdego rekordu, którego formuły są napisane w języku 1C.


    Dodawanie pól niestandardowych

    Do raportu możesz dodać dowolną liczbę tabel i wykresów:


    Projektant raportów


    Raportuj w czasie wykonywania

    Za pomocą ACS użytkownik może dodać do raportu złożone selekcje (które zostaną dodane do zapytania w odpowiednich miejscach), projektowanie warunkowe (pozwalające na różne formatowanie - czcionka, kolor itp. - pola wyjściowe w zależności od ich wartości) i wiele więcej.

    Krótko opisz proces tworzenia i generowania raportu w następujący sposób:

    • Deweloper w czasie projektowania z pomocą projektanta (lub w czasie wykonywania za pomocą kodu) definiuje schemat układu danych:
      • Tekst wniosku/prośby
      • Opis pól obliczanych
      • Relacje między zapytaniami (jeśli jest więcej niż jedno)
      • Opcje raportu
      • Ustawienia domyślne
      • Itp.
    • Powyższe ustawienia są zapisywane w układzie
    • Użytkownik otwiera raport
      • Ewentualnie dokonuje dodatkowych ustawień (np. zmienia wartości parametrów)
      • Naciska przycisk „Generuj”
    • Ustawienia użytkownika dotyczą schematu kompozycji danych zdefiniowanego przez programistę.
    • Tworzony jest pośredni układ kompozycji danych, zawierający instrukcje, skąd pobrać dane. W szczególności poprawiane są zapytania określone w układzie. Tak więc pola, które nie są używane w raporcie, są usuwane z żądania (odbywa się to w celu zminimalizowania ilości otrzymywanych danych). Wszystkie pola używane w formułach pól obliczanych są dodawane do zapytania.
    • Procesor składu danych jest dołączony do etui. Procesor układu wykonuje zapytania, łączy zestawy danych, oblicza wartości pól obliczanych i zasobów, wykonuje grupowanie. Jednym słowem wykonuje wszystkie obliczenia, które nie zostały wykonane na poziomie DBMS.
    • Procesor wyjściowy danych uruchamia zapytanie w celu wykonania i wyprowadza otrzymane dane do dokumentu arkusza kalkulacyjnego, wykresu itp.


    Proces generowania raportu przez mechanizm ACS

    Staramy się minimalizować ilość danych raportowych przesyłanych z serwera do aplikacji klienckiej. Wyświetlając dane w dokumencie arkusza kalkulacyjnego, otwierając dokument arkusza kalkulacyjnego, przesyłamy z serwera tylko te wiersze, które użytkownik widzi na początku dokumentu. Gdy użytkownik porusza się wzdłuż linii dokumentu, brakujące dane są pobierane z serwera do klienta.

    Ustawienia użytkownika

    Wszystkie narzędzia ACS są dostępne zarówno dla programisty, jak i użytkownika końcowego. Jednak praktyka pokazała, że ​​użytkownik końcowy jest często przerażony bogactwem możliwości narzędzi. Co więcej, w większości przypadków odbiorca końcowy nie potrzebuje całej mocy ustawień - wystarczy, że ma szybki dostęp do ustawienia jednego lub dwóch parametrów raportu (np. okres i kontrahent). Począwszy od określonej wersji platformy, twórca raportu ma możliwość zaznaczenia, które ustawienia raportu są dostępne dla użytkownika. Odbywa się to za pomocą pola wyboru „Uwzględnij w ustawieniach użytkownika”. Ponadto ustawienia raportu mają teraz flagę „Tryb wyświetlania”, która przyjmuje jedną z trzech wartości:
    • Szybki dostęp. Ustawienie zostanie wyświetlone bezpośrednio w górnej części okna raportu.
    • Zwykły. Ustawienie będzie dostępne za pomocą przycisku „Ustawienia”.
    • Niedostępne. Ustawienie nie będzie dostępne dla użytkownika końcowego.


    Ustawianie trybu wyświetlania w czasie projektowania


    Wyświetl ustawienie w trybie szybkiego dostępu w czasie wykonywania (pod przyciskiem Generuj)

    Plany rozwoju

    Jednym z priorytetów w rozwoju ACS jest dla nas uproszczenie ustawień użytkownika. Nasze doświadczenie pokazuje, że dla niektórych użytkowników końcowych praca z ustawieniami użytkownika to nadal poważna praca. Bierzemy to pod uwagę i pracujemy w tym kierunku. W związku z tym programiści będą mogli łatwiej pracować z ACS, ponieważ tak jak poprzednio, chcemy zapewnić jeden zestaw narzędzi do tworzenia raportów zarówno dla programisty, jak i użytkownika końcowego.

    W ś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 grupowania Nomenklatury nie można użyć wyrażenia Oblicz Wyrażenie ("Sum(SumTurnover)", "TotalTotal") > 1000. Takiego wyrażenia można jednak użyć przy wyborze hierarchicznym.

    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.

    Opcje

    <Выражение>

    Typ: ciąg. Wyrażenie do oceny.

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

    Typ: ciąg. 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.SumObrót)/Calculate("Suma(Sales.SumObrót)", "Całkowita suma")

    W tym przykładzie wynikiem będzie stosunek kwoty dla pola Sales.AmountVolume rekordu grupowania do kwoty tego samego pola w całym układzie;

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

    Typ: ciąg. Parametr może przyjmować następujące wartości:

    • GeneralTotal - wyrażenie zostanie obliczone dla wszystkich rekordów grupujących.
    • Hierarchia — wyrażenie zostanie ocenione dla nadrzędnego wpisu hierarchicznego, jeśli taki istnieje, oraz dla całego grupowania, jeśli nie ma nadrzędnego wpisu hierarchicznego.
    • Grupowanie — wyrażenie zostanie ocenione dla bieżącego rekordu grupowania.
    • GroupingNotResource — podczas obliczania funkcji dla rekordu grupy według zasobów wyrażenie zostanie obliczone dla pierwszego rekordu grupy pierwotnego grupowania.

    Przy obliczaniu funkcji Oblicz wyrażenie() z wartością GroupingNotResource dla rekordów grupowych, które nie są grupowane według zasobów, funkcja jest obliczana w taki sam sposób, jak zostałaby obliczona, gdyby wartość parametru była równa wartości Grouping.

    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 GroupingNotResource. W przypadku innych zasobów pogrupowanych według zasobu umieszczane są regularne wyrażenia zasobów.

    <Начало>

    Typ: ciąg. 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:

    <Конец>

    Typ: ciąg. 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 są 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) — pobiera 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 żadnych 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.

    • 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 są 3 rekordy, a trzeci rekord otrzyma Next(), to uważa się, że nie ma rekordów.

    Po odebraniu następnego rekordu dla sumy grupowej uważa się, że nie ma rekordu.

    • Prąd (prąd). Musisz zdobyć aktualny wpis.

    Po pobraniu dla sumy grupowania pobierany jest pierwszy rekord.

    • WartośćGranicy. 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.

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

    Typ: ciąg. 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żna określić słowa kluczowe Asc (aby sortować w kolejności rosnącej), Malejąco (aby sortować w kolejności malejącej) i AutoOrder (aby sortować pola, do których istnieją odniesienia, według pól, według których ma być sortowany obiekt, do którego prowadzi odwołanie). Słowo AutoOrder może być używane zarówno ze słowami Ascending, jak i Descending.

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

    Typ: ciąg. Podobne do opcji Sortuj. 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.

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

    Typ: ciąg. Określa regułę określającą poprzedni lub następny rekord, jeśli istnieje wiele rekordów o tej samej wartości porządkowej:

    • Oddzielnie oznacza, że ​​sekwencja uporządkowanych rekordów jest używana do określenia poprzedniego i następnego rekordu. Domyślna wartość.
    • Razem (razem) oznacza, że ​​poprzedni i następny rekord są ustalane 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

    Jeśli wartość parametru to Oddzielne, to:

    § poprzedni wpis do wpisu 3 będzie wpisem 2.

    § jeżeli fragment obliczeniowy jest zdefiniowany jako Bieżący, Bieżący (odpowiednio parametry Początek i Koniec), to dla rekordu 2 ten fragment będzie się składał z jednego rekordu 2. Wyrażenie Oblicz Wyrażenie („Suma (Wartość)”, Bieżący, Bieżący) będzie równa 20.

    Jeśli wartość parametru to Razem, to:

    § poprzedni wpis do wpisu 3 będzie wpisem 1.

    § jeżeli fragment obliczeniowy jest zdefiniowany jako Bieżący, Bieżący (odpowiednio parametry Początek i Koniec), to dla rekordu 2 ten fragment będzie się składał z rekordów 2 i 3. Wyrażenie CalculateExpression(„Sum(Value)”, Current, Current) będzie być równy 50.

    Podczas określania wartości parametru równej Razem w parametrach Początek i Koniec nie można określić przesunięcia dla pozycji Pierwsza, Ostatnia, Poprzednia, Następna.

    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 danego typu, inna niż NULL, inna niż odwołanie 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 - wyrażenie typu string

    Linia(<Выражение>) – Jeżeli jako parametr zostanie przekazana tablica, to 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 „; “ oraz ciągi znaków ze znakiem nowej linii. Jeśli jakiś element ma pustą reprezentację ciągu, to zamiast jego reprezentacji wyświetlany jest ciąg<Пустое значение>.

    Witaj drogi czytelniku! Mamy kolejną lekcję na temat podstaw systemu rozmieszczenia. Zapoznałeś się z funkcjami języka wyrażeń SKD, zobaczyłeś funkcje systemu układu, a także ustaliłeś podstawowe ustawienia pól układu. A teraz rozważymy nowy materiał. Iść!

    Dodatkowe ustawienia dla pól ACS.

    Kolumna "typ wartości" umożliwia określenie typu danych dla pola układu. Po co określać typ, na przykład w polu „Nomenklatura”, skoro już wiesz, jaki to typ? Jest to wymagane, jeśli pole układu jest typu złożonego. Możesz wybrać konkretny typ, wtedy przy filtrowaniu po tym polu zostaną wybrane wartości tego typu.

    Kolumna „Dostępne wartości” pozwala określić dostępne do wyboru wartości oraz ograniczyć wybór użytkownika do określonych granic.

    Kolumna "Dekoracje" umożliwia ustawienie wyglądu pola układu bez korzystania z układów. Możesz określić kolor czcionki, kolor ramki, orientację tekstu itd.

    Kolumna „Opcje edycji” umożliwia określenie sposobu edycji pola układu. Na przykład możesz określić szybki wybór elementów z listy w wyborze. Domyślnie pole układu dziedziczy wszystkie opcje edycji z obiektu metadanych.

    Pola obliczeniowe

    Możesz tworzyć własne pola obliczeniowe na karcie Pola obliczeniowe kompozycji danych.

    Po co nam pola obliczeniowe, skoro możemy je tworzyć na poziomie zapytania? Nie wszystkie pola można opisać zapytaniem. Jeśli musisz skomponować złożone pole z różnych zestawów danych, na przykład typów zapytań i obiektów, pola obliczeniowe są niezbędne. Nie możesz dodać pola kompozycji danych, jeśli źródłem danych jest zapytanie i autouzupełnianie, ale możesz dodać dowolną liczbę pól, korzystając z pól obliczeniowych.

    W kolumnie pola obliczeniowego „Wyrażenie” należy wpisać dowolne wyrażenie, które wykorzystuje pola kompozycji danych, odwołując się do ich ścieżki (kolumna „Ścieżka” w zakładce „Zbiory danych”). Albo możesz użyć funkcji transformacji matematycznej, albo możesz odwołać się do funkcji modułów ogólnych. Na przykład wpiszmy nazwę pola obliczeniowego „Odchylenie” w kolumnie „Ścieżka do danych”, a w polu „Wyrażenie”:

    Kwota - Cena* Ilość

    Sprawdź inny, a także możesz pobrać za pomocą tych funkcji.

    Zasadniczo pola obliczeniowe mają takie same ustawienia jak pola układu. Brakuje tu tylko kolumny Hierarchy Group. Podczas pisania pól obliczanych nie można odwoływać się do innych pól obliczanych.

    Jak przenieść parametry i wybory do raportu zbudowanego na ACS bez tworzenia formularza raportu?

    &Na kliencie // Przekazywanie parametrów do raportu ACS Procedura Przetwarzanie polecenia (parametr polecenia, parametry wykonania polecenia) Wybór = Nowa struktura("Nazewnictwo", parametr polecenia) ; FixedSettings = GetFixedSettings(); FormParameters = Nowa struktura ( "Kształt na otwartym, Wybór, klucz wariantu, ustawienia stałe", Prawda , Wybór, „Wariant raportu sprzedaży”, Ustawienia stałe) ; Otwórz formularz ( „Raport.Formularz.Sprzedaży”, Parametry formularza) ; EndProcedure &AtServer Function GetFixedSettings() Raport sprzedaży = Raporty. Raport sprzedaży. Tworzyć() ; SKD = ​​Raport sprzedaży. Schemat składu danych; Ustawienia = SKD. Ustawienia domyślne; StartPeriod = Ustawienia. ParametryDane. FindParameterValue( NewDataCompositionParameter("PoczątekOkresu") ); Początek okresu. Wartość = Początek Miesiąca(BieżącaData()) ; Początek okresu. Użycie = prawda ; StartPeriod = Ustawienia. ParametryDane. FindParameterValue( NewDataCompositionParameter("EndPeriod" ) ) ; Koniec okresu. Wartość = Miesiąc Zakończ(Bieżąca Data() ) ; Koniec okresu. Użycie = prawda ; Ustawienia zwrotu; Funkcje końcowe // GetFixedSettings()

    Jak wyrównać nagłówki kolumn do środka w raporcie SKD?

    Musisz ustawić dwa parametry w polu "Projekt" w zakładce "Zbiory danych":

    Pozycja pozioma: środek Pozycja pionowa: środek

    Również w zakładce "Ustawienia" na dole znajdziesz kolejną zakładkę: "Wygląd warunkowy". Tam dla każdej grupy, parametru itp. możesz ustawić żądany układ.

    Wygląda na to, że wszystko powiedział! Jak pamiętasz, masz możliwość zadawania pytań, jeśli takie są. Spróbuję odpowiedzieć. W przyszłości planuję napisać więcej artykułów na ten temat, więc nie zapomnij zasubskrybować aktualizacji naszej strony, aby tego nie przegapić! Pamiętaj też o wykonaniu testu, aby utrwalić materiał z tej lekcji.

    Na końcu artykułu chcę ci doradzić wolny od Anatolija Sotnikowa. To kurs od doświadczonego programisty. Pokaże Ci na osobnych zasadach, jak budować raporty w ACS. Musisz tylko uważnie słuchać i pamiętać! Otrzymasz odpowiedzi na pytania takie jak:
    • Jak stworzyć prosty raport listowy?
    • Do czego służą kolumny Pole, Ścieżka i Tytuł na karcie Pola?
    • Jakie są ograniczenia dotyczące pól układu?
    • Jak prawidłowo skonfigurować role?
    • Jakie są role pól układu?
    • Gdzie mogę znaleźć kartę układu danych w zapytaniu?
    • Jak skonfigurować parametry w SKD?
    • Dalsze ciekawsze...
    Może nie powinieneś sam próbować surfować po Internecie w poszukiwaniu potrzebnych informacji? Co więcej, wszystko jest gotowe do użycia. Po prostu zacznij! Wszystkie szczegóły dotyczące tego, co znajduje się w bezpłatnych samouczkach wideo