1c jak grupować według linii w zapytaniu. Grupowanie w zapytaniu

W tym artykule przyjrzymy się grupowanie w zapytaniach 1C 8 i
funkcje agregujące za pomocą którego odbywa się to grupowanie.

Najłatwiej wyjaśnić, czym jest grupowanie, na przykładzie.
Załóżmy, że mamy tabelę z ilością towarów w magazynach:

I chcemy uzyskać kolejną tabelę z tej tabeli, gdzie dla każdego produktu będzie jego suma
ilość we wszystkich magazynach:

Tutaj grupa nam pomoże.

Abyś mógł sam poeksperymentować w konsoli zapytań, odtwórzmy to
tę sytuację za pomocą małego zapytania. Najpierw utwórzmy tabelę początkową:

WYBIERZ „Centralny” JAKO Magazyn, „Ołówek” JAKO Produkt, 45 JAK Ilość POŁĄCZ WSZYSTKO WYBIERZ „Centralny”, „Pióro”, 30 POŁĄCZ WSZYSTKO WYBIERZ „Biuro”, „Ołówek”, 15 POŁĄCZ WSZYSTKO WYBIERZ „Biuro”, „Pióro” , 25

Teraz umieśćmy naszą oryginalną tabelę w tymczasowej i wybierzmy z niej dane
grupowanie według pól Produkt

WYBIERZ „Centralny” JAKO Magazyn, „Ołówek” JAKO Produkt, 45 AS Ilość MIEJSCE VT_Ilość POŁĄCZ WSZYSTKO WYBIERZ „Centralny”, „Pióro”, 30 POŁĄCZ WSZYSTKO WYBIERZ „Biuro”, „Ołówek”, 15 POŁĄCZ WSZYSTKO WYBIERZ „Biuro”, " Uchwyt", 25 ; /////////////////////////////////////////////// ////////////////////////// WYBIERZ TU_Ilość.Produkt, SUM(VT_Quantity.Quantity) AS Ilość Z VT_Quantity AS VT_Quantity GRUPUJ WEDŁUG VT_Quantity.Product

Kod bezpośrednio zaangażowany w grupowanie jest zaznaczony pogrubioną czcionką.
SUMA() jest funkcją agregującą.
GRUPUJ WEDŁUG- to jest operator, po którym następuje lista
pola oddzielone przecinkami, według których przeprowadzane jest grupowanie. Zasadniczo powinno być
wymienione są wszystkie pola z tej sekcji WYBIERAĆ z wyjątkiem tych, którym
Stosowane są funkcje agregujące. W przeciwnym razie żądanie zakończy się
błąd.

Zatem grupowanie wydaje się zwijać tabelę w następujące po niej pola
GRUPUJ WEDŁUG. Do pozostałych pól stosowana jest jedna lub inna funkcja agregująca.
W nawiązaniu do naszego przykładu, przed grupowaniem rekordów z produktami Długopis
I Ołówek mamy dwie sztuki, a po zgrupowaniu - po jednej na raz.
Podczas pracy z tabelami wartości podobną funkcję pełni metoda Zawalić się(),
z tą różnicą, że tam można otrzymać kwotę jedynie za pola nieuwzględnione w grupowaniu.
W zapytaniach można używać kilku funkcji agregujących. Wypiszmy je
i rzuć okiem.

SUMA()- podsumowuje wartości pól;
MINIMUM()- wybiera wartość minimalną spośród wszystkich wartości pól;
MAKSYMALNY()- wybiera maksimum ze wszystkich wartości pól;
PRZECIĘTNY()- oblicza wartość średnią (Suma/Ilość);
ILOŚĆ()- wyświetla liczbę rekordów;
ILOŚĆ (RÓŻNA)- wyświetla liczbę rekordów, których wartości różnią się;
Zademonstrujmy ich pracę na naszym przykładzie. Dodajmy do naszej prośby inne agregaty
funkcje z wyjątkiem KWOTY.

SELECT VT_Quantity.Item, SUM(VT_Quantity.Quantity) AS Suma, MIN(VT_Quantity.Quantity) AS Minimum, MAX(VT_Quantity.Quantity) AS Maksimum, ŚREDNIA(VT_Quantity.Quantity) AS Średnia Z VT_Quantity AS VT_Quantity GROUP Oprogramowanie VT_Quantity.Product

W wyniku wykonania zapytania otrzymujemy następującą tabelę:

Oto jesteśmy w terenie Ilość dostał całkowity zapisy w tabeli,
i w terenie IlośćRóżne- liczba rekordów, które znajdują się w polu
Produkt znaczenia są różne. W odniesieniu do naszego stołu tak jest Ołówek
I Długopis.

Jak widać z ostatniego przykładu, jeśli wszystkie pola w żądaniu zostały zastosowane
funkcje agregujące, a następnie użyj GRUPUJ WEDŁUG nie ma potrzeby.

Ten mechanizm zapytań służy do obliczania wskaźników dla wybranych pól grupujących.

Na przykład, aby rozwiązać problemy: określ kwotę całej sprzedaży kontrahenta w danym okresie, maksymalny lub średni rachunek.

Szybkie przejście

Podstawowa składnia:

WYBIERAĆ<ГруппировочныеПоля>, <СУММА(<РасчетноеПоле>)>
Z<Источник>
GRUPUJ WEDŁUG
<ГруппировочныеПоля>

Okazuje się, że w dyrektywie GROUP BY duplikowane są wszystkie pola z SELECT, z wyjątkiem tych, dla których wykonywane są obliczenia. Podczas dodawania pola w konstruktorze odbywa się to automatycznie, jeśli śledzisz je ręcznie, w przeciwnym razie pojawi się błąd: „Pole nie jest częścią grupy”.

Zwracam uwagę, że nie jest konieczne dodawanie prymitywnych wartości (liczby, daty, ciągu znaków) ani szczegółów linków już istniejących w grupie linków.

Może również nie być w ogóle funkcji agregujących, w takim przypadku zapytanie będzie działać tak, jakby użyto funkcji SELECT DISTINCT.

//To żądanie otrzyma liczbę unikalnych artykułów przechodzących przez każdy magazyn w systemie
WYBIERAĆ
Pozostałe zapasy,
ILOŚĆ (POZOSTAŁY RÓŻNE INwentarze. Nomenklatura) JAKO Nomenklatura,
1,
DATACZAS(2017,1,12),
Pozostałe zapasy.Magazyn.Nazwa
Z
RejestracjaAkumulacje Salda zapasów AS Salda zapasów

GRUPUJ WEDŁUG
Pozostałe zapasy.Magazyn

Funkcje grupujące (agregowane)

  • SUMA (<Поле>)
  • ILOŚĆ(<Поле>)
  • ILOŚĆ (RÓŻNA<Поле>)
  • MAKSYMALNE (<Поле>)
  • MINIMUM (<Поле>)
  • PRZECIĘTNY(<Поле>)

Inne opcje grupowania

Dopuszczalne jest stosowanie operatorów matematycznych nad funkcjami grupującymi (+,*,/,-), a także konstrukcja SELECT zarówno na górze jednostki, jak i wewnątrz (w zależności od potrzeb)

WYBIERAĆ
,
SUM(Salda zapasówObrót. Suma Obrót) AS Kwota Obrót,
SUM(Salda zapasówObrót. Ilość Obrót) AS Ilość Obrót,
WYBÓR
KIEDY SUM(Salda zapasówObrót.IlośćObrót) = 0
WTEDY 0
W przeciwnym razie SUM(Salda zapasówObrót.KwotaObrót) / SUM(Salda zapasówObrót.IlośćObrót)
KONIEC JAKO średnia cena
Z

GRUPUJ WEDŁUG
Salda zapasówObrót.Nomenklatura

Przykład żądania bez funkcji:
WYBIERAĆ
Salda zapasówObrót.Nomenklatura
Z
RejestrAkumulacje.Salda zapasów.Obrót AS Salda zapasówObrót

GRUPUJ WEDŁUG
Salda zapasówObrót.Nomenklatura

Możesz używać agregacji w łączonych tabelach, ale zaleca się użycie funkcji IsNULL na górze

WYBIERAĆ
Nomenklatura referencyjna.Link,
ISNULL(SUM(Salda zapasówObrót.KwotaObrót), 0) Kwota AS
Z
Katalog.Nomenklatura AS RefNomenklatura
POŁĄCZENIE LEWE RejestrAkumulacje.Salda zapasów.Obrót AS Salda zapasówObrót
Oprogramowanie (Salda zapasówTurnover.Nomenclature = SprNomenclature.Link)

GRUPUJ WEDŁUG

Nomenklatura ref.Link

Grupowanie w Projektancie zapytań

Wyprodukowano na karcie o tej samej nazwie.

  • Z dostępnych pól wybierane są pola grupowe oraz pola sumowalne (dla każdego z nich wybierana jest funkcja sumująca).
  • Pośrodku znajdują się przyciski dodawania, które można także przeciągać i upuszczać za pomocą myszy
  • Konstruktor zwykle wybiera samą funkcję (koniecznie sprawdź jej działania)

Język zapytań w 1C 8 jest uproszczonym analogiem dobrze znanego „strukturalnego języka programowania” (jak się go częściej nazywa, SQL). Ale w 1C służy tylko do odczytu danych; obiektowy model danych służy do zmiany danych.

Kolejną interesującą różnicą jest rosyjska składnia. Chociaż w rzeczywistości można używać konstrukcji anglojęzycznych.

Przykładowe żądanie:

WYBIERAĆ
Banki.Imię,
Banki.CorrAccount
Z
Katalog.Banki JAK Banki

Dzięki temu żądaniu będziemy mogli zobaczyć informacje o nazwie i rachunku korespondencyjnym wszystkich banków istniejących w bazie.

Język zapytań jest najprostszy i skuteczna metoda uzyskanie informacji. Jak widać z powyższego przykładu, w języku zapytań konieczne jest wykorzystanie nazw metadanych (jest to lista obiektów systemowych składających się na konfigurację, czyli katalogi, dokumenty, rejestry itp.).

Opis konstrukcji języka zapytań

Struktura zapytania

Aby uzyskać dane wystarczy skorzystać z konstrukcji „SELECT” i „FROM”. Najprostsze żądanie wygląda następująco:

WYBIERZ * Z Katalogów.Nomenklatura

Gdzie „*” oznacza zaznaczenie wszystkich pól tabeli, a Katalogi.Nomenklatura – nazwę tabeli w bazie danych.

Spójrzmy na bardziej złożony i ogólny przykład:

WYBIERAĆ
<ИмяПоля1>JAK<ПредставлениеПоля1>,
Suma(<ИмяПоля2>) JAK<ПредставлениеПоля2>
Z
<ИмяТаблицы1>JAK<ПредставлениеТаблицы1>
<ТипСоединения>MIESZANINA<ИмяТаблицы2>JAK<ПредставлениеТаблицы2>
PRZEZ<УсловиеСоединениеТаблиц>

GDZIE
<УсловиеОтбораДанных>

GRUPUJ WEDŁUG
<ИмяПоля1>

SORTUJ WEDŁUG
<ИмяПоля1>

WYNIKI
<ИмяПоля2>
PRZEZ
<ИмяПоля1>

W tym zapytaniu wybieramy dane pól „FieldName1” i „FieldName1” z tabel „TableName1” i „TableName”, przypisujemy synonimy do pól za pomocą operatora „HOW” i łączymy je za pomocą określonego warunku „TableConnectionCondition ”.

Z otrzymanych danych wybieramy tylko te, które spełniają warunek z „GDZIE” „Warunek wyboru danych”. Następnie grupujemy żądanie według pola „Nazwa pola 1”, sumując „Nazwa pola 2” Tworzymy sumy dla pola „Nazwa pola 1” i ostatnie pole „Nazwa pola 2”.

Ostatnim krokiem jest posortowanie żądania za pomocą konstrukcji ORDER BY.

Projekty ogólne

Spójrzmy na ogólne struktury języka zapytań 1C 8.2.

PIERWSZYN

Używając tego operatora, możesz otrzymać n pierwszych rekordów. Kolejność rekordów jest ustalana na podstawie kolejności w zapytaniu.

WYBIERZ PIERWSZYCH 100
Banki.Imię,
Banki. Kod AS BIC
Z
Katalog.Banki JAK Banki
SORTUJ WEDŁUG
Banki.Nazwa

Do żądania zostanie przesłanych pierwszych 100 wpisów z katalogu „Banki”, posortowanych alfabetycznie.

DOZWOLONY

Ten projekt jest odpowiedni do pracy z mechanizmem. Istotą mechanizmu jest ograniczenie odczytu (i innych działań) do użytkowników dla konkretnych rekordów w tabeli bazy danych, a nie dla całej tabeli.

Jeśli użytkownik spróbuje za pomocą zapytania odczytać niedostępne dla niego rekordy, otrzyma komunikat o błędzie. Aby tego uniknąć należy zastosować konstrukcję „ALLOWED”, czyli żądanie będzie czytać tylko te rekordy, które mu na to pozwalają.

WYBIERZ DOZWOLONE
Repozytorium dodatkowych informacji Link
Z
Katalog.Repozytorium informacji dodatkowych

RÓŻNY

Użycie „RÓŻNE” zapobiegnie wprowadzaniu zduplikowanych linii do wyniku zapytania 1C. Duplikacja oznacza, że ​​wszystkie pola żądania są zgodne.

WYBIERZ PIERWSZYCH 100
Banki.Imię,
Banki. Kod AS BIC
Z
Katalog.Banki JAK Banki

Pusty stół

Konstrukcja ta jest bardzo rzadko używana do łączenia zapytań. Podczas dołączania może być konieczne określenie pustej tabeli zagnieżdżonej w jednej z tabel. Operator „EmptyTable” doskonale się do tego nadaje.

Przykład z pomocy 1C 8:

WYBIERZ numer łącza, pustą tabelę. (nr, pozycja, ilość) jako kompozycję
Z Dokumentu. Faktura za wydatki
POŁĄCZ WSZYSTKO
WYBIERZ numer łącza, zawartość. (numer wiersza, produkt, ilość)
Z Dokument.Faktura.Dokument.Faktura.Skład.*

ISNULL

Bardzo przydatna funkcja, która pozwala uniknąć wielu błędów. YesNULL() umożliwia zastąpienie wartości NULL żądaną. Bardzo często używane do sprawdzania obecności wartości w połączonych tabelach, na przykład:

WYBIERAĆ
Link do nomenklatury,
IsNULL(Pozostały element.Pozostała ilość,0) AS Ilość pozostała
Z


Można wykorzystać na inne sposoby. Przykładowo, jeśli dla każdego wiersza nie wiadomo, w której tabeli występuje dana wartość:

ISNULL(Data otrzymania faktury, Data wystawienia faktury)

HOW to operator, który pozwala nam przypisać nazwę (synonim) do tabeli lub pola. Przykład użycia widzieliśmy powyżej.

Konstrukcje te są bardzo podobne - pozwalają uzyskać ciąg znaków reprezentujący pożądaną wartość. Jedyna różnica polega na tym, że REPRESENTATION konwertuje dowolne wartości na typ string, natomiast REPRESENTATIONREF konwertuje tylko wartości referencyjne. REPREZENTACJA REFERENCYJNA jest zalecana do stosowania w zapytaniach systemowych składu danych w celu optymalizacji, chyba że pole danych referencyjnych ma być używane w selekcjach.

WYBIERAĆ
View(Link), //string, np. „Raport zaliczkowy nr 123 z dnia 10.10.2015
View(DeletionMark) AS DeleteMarkText, //string, „Tak” lub „Nie”
ViewReferences(DeletionMark) AS DeleteMarkBoolean //boolean, Prawda lub Fałsz
Z
Dokument.Raport wstępny

WYRAZIĆ

Express umożliwia konwersję wartości pól na żądany typ danych. Wartość można przekonwertować na typ pierwotny lub typ referencyjny.

Express dla typu referencyjnego służy do ograniczania żądanych typów danych w polach typu złożonego, często używanego do optymalizacji wydajności systemu. Przykład:

EXPRESS (TableCost.Subconto1 AS Directory.Pozycje kosztów).Typ działalnościForTaxAccountingCosts

W przypadku typów pierwotnych funkcja ta jest często używana do ograniczenia liczby znaków w polach o nieograniczonej długości (takich pól nie można porównywać). Aby uniknąć błędu” Nieprawidłowe parametry w operacji porównania. Nie można porównać pól
nieograniczona długość i pola niekompatybilnych typów
", należy wyrazić takie pola w następujący sposób:

EXPRESS (Komentarz jako linia (150))

RÓŻNICA

Uzyskaj 267 lekcji wideo na 1C za darmo:

Przykład użycia IS NULL w żądaniu 1C:

WYBRAĆ Z
Nr ref
LEWE POŁĄCZENIE RejestrAkumulacje.Produkty wmagazynach.Pozostałe JAKO Pozostały produkt
Software NomenclatureRef.Link = Sold GoodsCommitteesRemains.Nomenclature
GDZIE NIE Pozostałe produkty to NULL

Typ danych w zapytaniu można określić za pomocą funkcji TYPE() i VALUETYPE() lub za pomocą operatora logicznego REFERENCE. Obie funkcje są podobne.

Predefiniowane wartości

Oprócz używania przekazanych parametrów w zapytaniach w języku zapytań 1C, możesz używać predefiniowanych wartości lub . Na przykład przelewy, predefiniowane katalogi, plany kont i tak dalej. W tym celu używana jest konstrukcja „Value()”.

Przykład użycia:

GDZIE Nomenklatura.Rodzaj nomenklatury = Wartość(Katalog.Typy nomenklatury.Produkt)

GDZIE Kontrahenci.Rodzaj informacji kontaktowych = Wartość(Wyliczenie.Rodzaje informacji kontaktowych.Telefon)

GDZIE Salda konta. Konto księgowe = Wartość (Plan kont. Zysk. Zyski Strata)

Znajomości

Istnieją 4 rodzaje połączeń: LEWY, PRAWIDŁOWY, KOMPLETNY, WEWNĘTRZNY.

POŁĄCZENIE LEWE i PRAWE

Złączenia służą do łączenia dwóch tabel na podstawie określonego warunku. Funkcja kiedy LEWO DOŁĄCZ polega na tym, że bierzemy w całości pierwszą określoną tabelę i warunkowo wiążemy drugą tabelę. Pola drugiej tabeli, których nie można było obwiązać warunkiem, są wypełniane wartością ZERO.

Na przykład:

Zwróci całą tabelę Kontrahentów i wypełni pole „Bank” tylko w tych miejscach, w których spełniony będzie warunek „Nazwa Kontrahenta = Nazwa Banku”. Jeżeli warunek nie jest spełniony, pole Bank zostanie ustawione na wartość ZERO.

PRAWO DOŁĄCZ w języku 1C absolutnie podobne LEWE połączenie, z wyjątkiem jednej różnicy - w PRAWO POŁĄCZENIA Tabela „główna” jest drugą, a nie pierwszą.

PEŁNE POŁĄCZENIE

PEŁNE POŁĄCZENIE różni się od lewej i prawej tym, że wyświetla wszystkie rekordy z dwóch tabel i łączy tylko te, które może połączyć według warunku.

Na przykład:

Z

PEŁNE POŁĄCZENIE
Katalog.Banki JAK Banki

PRZEZ

Język zapytań zwróci obie tabele w całości tylko wtedy, gdy spełniony zostanie warunek złączenia rekordów. W przeciwieństwie do złączenia lewego/prawego, wartość NULL może pojawić się w dwóch polach.

WEWNĘTRZNE POŁĄCZENIE

WEWNĘTRZNE POŁĄCZENIE różni się od pełen tematów, który wyświetla tylko te rekordy, które można połączyć według zadanego warunku.

Na przykład:

Z
Katalog Kontrahentów AS Klienci

WEWNĘTRZNE POŁĄCZENIE
Katalog.Banki JAK Banki

PRZEZ
Klienci.Nazwa = Banki.Nazwa

To zapytanie zwróci tylko wiersze, w których bank i kontrahent mają tę samą nazwę.

Wspomnienia

Konstrukcje JOIN i JOIN ALL łączą dwa wyniki w jeden. Te. wynik wykonania dwóch zostanie „połączony” w jeden, wspólny.

Oznacza to, że system działa dokładnie tak samo jak zwykły, tylko dla tabeli tymczasowej.

Jak korzystać z INDEKSÓW BY

Należy jednak wziąć pod uwagę jedną kwestię. Tworzenie indeksu w tabeli tymczasowej również wymaga czasu. Dlatego wskazane jest stosowanie konstrukcji „ ” tylko wtedy, gdy wiadomo na pewno, że w tabeli tymczasowej będzie więcej niż 1-2 rekordy. W przeciwnym razie efekt może być odwrotny – wydajność indeksowanych pól nie rekompensuje czasu potrzebnego na zbudowanie indeksu.

WYBIERAĆ
Kursy walut Najnowszy przekrój Waluta AS Waluta,
Kursy walut Najnowszy przekrój.
Kursy walut PUT
Z
Rejestr informacyjny.Kursy walut.Ostatni kawałek (&kropka,) Kursy walut ASOstatni kawałek
INDEKS WG
Waluta
;
WYBIERAĆ
CenyNomenklatura.Nomenklatura,
CenyNomenklatury.Cena,
CenyNomenklatury.Waluta,
Kursy walut.Stawka
Z
Rejestr informacyjny.Nomenklatura cen.Ostatni kawałek(&kropka,
Nomenklatura B (&Nomenklatura) AND PriceType = &PriceType) AS PriceNomenklatura
LEWO DOŁĄCZ Kursy walut jako kursy walut
Ceny oprogramowaniaNomenklatury.Waluta = Kursy walut.Waluta

Grupowanie

Język zapytań 1C umożliwia korzystanie ze specjalnych funkcji agregujących podczas grupowania wyników zapytań. Grupowania można również używać bez funkcji agregujących, aby „eliminować” duplikaty.

Istnieją następujące funkcje:

Kwota, ilość, liczba różnych, maksymalna, minimalna, średnia.

Przykład 1:

WYBIERAĆ
Sprzedaż towarów i usług Nomenklatura towarów,
SUM(Sales of GoodsServicesGoods.Quantity) AS Ilość,
SUMA(Sales of GoodsServicesGoods.Amount) JAKO Kwota
Z

GRUPUJ WEDŁUG
Sprzedaż towarów i usług Nomenklatura towarów

Żądanie otrzymuje wszystkie wiersze z towarami i podsumowuje je według ilości i kwot według pozycji.

Przykład nr 2

WYBIERAĆ
Banki.Kod,
ILOŚĆ (RÓŻNE Banki.Link) JAKO liczba duplikatów
Z
Katalog.Banki JAK Banki
GRUPUJ WEDŁUG
Banki.Kod

Ten przykład wyświetli listę kodów BIC w katalogu „Banki” i pokaże, ile duplikatów istnieje dla każdego z nich.

Wyniki

Wyniki są sposobem na uzyskanie danych z systemu o strukturze hierarchicznej. Funkcje agregujące mogą być używane w polach podsumowań, tak samo jak w przypadku grupowania.

Jednym z najpopularniejszych sposobów wykorzystania wyników w praktyce jest odpis partii towaru.

WYBIERAĆ




Z
Dokument Sprzedaż towarów i usług Towary JAK sprzedawać towary i usługi Towary
SORTUJ WEDŁUG

WYNIKI
SUMA(ilość),
SUMA(Suma)
PRZEZ
Nomenklatura

Wynikiem zapytania będzie następująca hierarchia:

Wyniki ogólne

Jeśli chcesz uzyskać sumy dla wszystkich „sum”, użyj operatora „OGÓLNE”.

WYBIERAĆ
Sprzedaż towarów i usług Nomenklatura AS Nomenklatura,
Dokument Sprzedaży Towarów i Usług Towarowych Link AS,
Sprzedaż towarów i usług Towary Ilość AS Ilość,
Sprzedaż towarów i usług Towary Kwota JAKO Kwota
Z
Dokument Sprzedaż towarów i usług Towary JAK sprzedawać towary i usługi Towary
SORTUJ WEDŁUG
Data sprzedaży towarów i usług
WYNIKI
SUMA(ilość),
SUMA(Suma)
PRZEZ
SĄ POSPOLITE,
Nomenklatura

W wyniku wykonania żądania otrzymujemy następujący wynik:

W którym 1 poziom grupowania to agregacja wszystkich niezbędnych pól.

Układanie

Operator ORDER BY służy do sortowania wyniku zapytania.

Sortowanie typów pierwotnych (łańcuch, liczba, wartość logiczna) przebiega zgodnie ze zwykłymi zasadami. W przypadku pól typu referencyjnego sortowanie odbywa się według wewnętrznej reprezentacji łącza (unikalnego identyfikatora), a nie według kodu lub reprezentacji referencyjnej.

WYBIERAĆ

Z
Katalog.Nomenklatura AS Nomenklatura
SORTUJ WEDŁUG
Nazwa

Żądanie wyświetli listę nazw w katalogu nomenklatury, posortowaną alfabetycznie.

Automatyczne zamówienie

Wynikiem zapytania bez sortowania jest chaotycznie przedstawiony zestaw wierszy. Twórcy platformy 1C nie gwarantują, że wiersze będą wyświetlane w tej samej kolejności podczas wykonywania identycznych zapytań.

Jeśli chcesz wyświetlać rekordy tabeli w stałej kolejności, musisz użyć konstrukcji Auto-Order.

WYBIERAĆ
Nomenklatura.Nazwa AS Nazwa
Z
Katalog.Nomenklatura AS Nomenklatura
AUTOMATYCZNE ZAMÓWIENIE

Wirtualne stoły

Tabele wirtualne w 1C to unikalna cecha języka zapytań 1C, której nie można znaleźć w innych podobnych składniach. Wirtualny stół – szybki sposób uzyskiwanie informacji profilowych z rejestrów.

Każdy typ kasy ma swój własny zestaw wirtualnych tabel, które mogą się różnić w zależności od ustawień kasy.

  • cięcie pierwszego;
  • wycięcie tego ostatniego.
  • resztki;
  • rewolucje;
  • salda i obroty.
  • ruchy z subconto;
  • rewolucje;
  • prędkość Dt Kt;
  • resztki;
  • salda i obroty
  • podkonto.
  • baza;
  • dane wykresu;
  • faktyczny okres ważności.

Dla twórcy rozwiązania dane są pobierane z jednej (wirtualnej) tabeli, ale w rzeczywistości platforma 1C pobiera z wielu tabel, przekształcając je do wymaganej formy.

WYBIERAĆ
Nomenklatura produktów w pozostałościach magazynowych i obrotach,
ProduktyW MagazynachPozostałeI Obrót.IlośćPoczątkowaPozostała,
ProduktyW MagazynachPozostająIObrót.IlośćObrót,
TowaryW MagazynachPozostająIObrót.IlośćPrzychodzące,
TowaryW MagazynachPozostająIObrót.IlośćKonsumpcja,
ProduktyW MagazynachPozostałeI Obrót.IlośćOstatecznaPozostała
Z
ZarejestrujAkumulacje.Towary w magazynach.Pozostałości i obrót jako towary w magazynachPozostają i obrót

To żądanie pozwala szybko uzyskać duża liczba dane.

Opcje wirtualnego stołu

Bardzo ważnym aspektem pracy z tabelami wirtualnymi jest wykorzystanie parametrów. Parametry tabeli wirtualnej to wyspecjalizowane parametry służące do wyboru i konfiguracji.

W przypadku takich tabel niewłaściwe jest stosowanie selekcji w konstrukcji „WHERE”. Oprócz tego, że zapytanie staje się nieoptymalne, możliwe jest otrzymanie błędnych danych.

Przykład użycia tych parametrów:

Rejestr nagromadzeń towarów w magazynach i obrotów (oraz początek okresu i koniec okresu, miesiąc, ruchy i granice okresu, nomenklatura = i wymagana nomenklatura).

Algorytm dla tabel wirtualnych

Przykładowo najczęściej używana tablica wirtualna typu „Pozostałości” przechowuje dane z dwóch tabel fizycznych – sald i ruchów.

Podczas korzystania z wirtualnej tabeli system wykonuje następujące manipulacje:

  1. Najbliższą obliczoną wartość pod względem daty i wymiarów otrzymujemy w tabeli sum.
  2. „Dodaj” kwotę z tabeli ruchów do kwoty z tabeli sum.


Taki proste kroki może znacznie poprawić wydajność całego systemu.

Korzystanie z Konstruktora zapytań

Konstruktor zapytań– narzędzie wbudowane w system 1C Enterprise, które znacznie ułatwia rozwój zapytań do baz danych.

Kreator zapytań ma dość prosty, intuicyjny interfejs. Niemniej jednak przyjrzyjmy się bardziej szczegółowo użyciu konstruktora zapytań.

Konstruktor tekstu zapytania uruchamiany jest z menu kontekstowego (prawy przycisk myszy) w żądanym miejscu w kodzie programu.

Opis konstruktora żądań 1C

Przyjrzyjmy się każdej karcie projektanta bardziej szczegółowo. Wyjątkiem jest zakładka Konstruktor, która jest tematem na inną dyskusję.

Zakładka Tabele i pola

Na tej karcie określa się źródło danych i pola, które należy wyświetlić w raporcie. Zasadniczo opisano tutaj konstrukcje SELECT.. FROM.

Źródłem może być fizyczna tabela bazy danych, wirtualna tabela rejestrów, tabele tymczasowe, zapytania zagnieżdżone itp.

W menu kontekstowym wirtualnych tabel możesz ustawić parametry wirtualnej tabeli:

Zakładka Połączenia

Zakładka służy do opisu połączeń kilku tabel i tworzy konstrukcje ze słowem POŁĄCZENIE.

Zakładka Grupowanie

Na tej zakładce system umożliwia grupowanie i podsumowywanie wymaganych pól tabeli wynikowej. Opisuje zastosowanie konstrukcji GROUP BY, SUMA, MINIMUM, ŚREDNIA, MAKSYMALNA, ILOŚĆ, LICZBA RÓŻNYCH.

Zakładka Warunki

Odpowiedzialny za wszystko, co pojawia się w tekście żądania po konstrukcji WHERE, czyli za wszystkie warunki nałożone na otrzymane dane.

Zakładka Zaawansowane

Patka Dodatkowo pełen najróżniejszych parametrów, które są bardzo ważne. Przyjrzyjmy się każdej z właściwości.

Grupowanie Wybieranie rekordów:

  • Pierwszy N– parametr zwracający do zapytania tylko N rekordów (operator FIRST)
  • Żadnych duplikatów– zapewnia niepowtarzalność otrzymywanych rekordów (operator DIFFERENT)
  • Dozwolony– pozwala wybrać tylko te rekordy, które system pozwala wybrać biorąc pod uwagę (konstrukcja DOZWOLONA)

Grupowanie Typ żądania określa, jakiego typu będzie zapytanie: pobieranie danych, tworzenie tabeli tymczasowej lub niszczenie tabeli tymczasowej.

Poniżej flaga Zablokuj odebrane dane do późniejszej modyfikacji. Umożliwia włączenie możliwości ustawienia blokowania danych, co zapewnia bezpieczeństwo danych od momentu ich odczytania do momentu ich zmiany (dotyczy tylko trybu Blokowanie automatyczne, dobór DO ZMIANY).

Karta Łączenia/Aliasy

Na tej zakładce projektanta zapytań możesz ustawić możliwość łączenia różnych tabel i aliasów (konstrukcja HOW). Tabele są wskazane po lewej stronie. Jeśli ustawisz flagi naprzeciwko tabeli, zostanie zastosowana konstrukcja UNITE, w przeciwnym razie - UNITE ALL (różnice między obiema metodami). Prawa strona wskazuje zgodność pól w różne stoły, jeśli nie określono żadnego dopasowania, zapytanie zwróci wartość NULL.

Zakładka Zamów

Określa kolejność sortowania wartości (ORDER BY) – malejąco (DESC) lub rosnąco (ASC).

Jest też ciekawa flaga - Automatyczne zamówienie(w zapytaniu - AUTO ZAMÓWIENIE). Domyślnie system 1C wyświetla dane w „chaotycznej” kolejności. Jeśli ustawisz tę flagę, system będzie sortował dane według danych wewnętrznych.

Karta Zapytanie wsadowe

Na karcie projektanta zapytań możesz tworzyć nowe, a także używać ich jako nawigacji. W tekście żądania pakiety są oddzielone symbolem „;” (przecinek).

Przycisk „Zapytanie” w projektancie zapytań

W lewym dolnym rogu kreatora zapytań znajduje się przycisk Zapytanie, za pomocą którego w każdej chwili możesz sprawdzić treść żądania:

W tym oknie możesz dokonać zmian w żądaniu i je wykonać.


Korzystanie z konsoli zapytań

Konsola zapytań jest prosta i wygodnym sposobem do debugowania złożonych zapytań i szybkiego uzyskiwania informacji. W tym artykule postaram się opisać jak korzystać z Query Console oraz podać link do pobrania Query Console.

Przyjrzyjmy się bliżej temu narzędziu.

Pobierz konsolę zapytań 1C

Przede wszystkim, aby rozpocząć pracę z konsolą zapytań, należy ją skądś pobrać. Zabiegi dzieli się zwykle na dwa rodzaje – formy kontrolowane i konwencjonalne (czasami nazywane są 8.1 i 8.2/8.3).

Próbowałem połączyć te dwa widoki w jednym przetwarzaniu - żądany formularz otwiera się w żądanym trybie pracy (w trybie zarządzanym konsola działa tylko w trybie grubym).

Opis konsoli zapytań 1C

Zacznijmy od przeglądu konsoli zapytań z opisem głównego panelu przetwarzania:

W nagłówku konsoli zapytań widoczny jest czas wykonania ostatniego zapytania z dokładnością do milisekund, co pozwala na porównanie różnych projektów pod względem wydajności.

Pierwsza grupa przycisków na pasku poleceń odpowiada za zapisywanie bieżących zapytań do pliku zewnętrznego. Jest to bardzo wygodne, zawsze możesz wrócić do pisania złożonego wniosku. Lub na przykład przechowuj listę typowych przykładów niektórych projektów.

Po lewej stronie w polu „Zapytanie” możesz tworzyć nowe zgłoszenia i zapisywać je w strukturze drzewiastej. Druga grupa przycisków odpowiada za zarządzanie listą żądań. Za jego pomocą możesz utworzyć, skopiować, usunąć, przenieść wniosek.

  • Wykonaćwniosek– proste wykonanie i rezultaty
  • Wykonaj pakiet– umożliwia przeglądanie wszystkich zapytań pośrednich w partii zapytań
  • Przeglądanie tabel tymczasowych– pozwala zobaczyć wyniki, jakie zwracają zapytania tymczasowe w tabeli

Parametry żądania:

Umożliwia ustawienie bieżących parametrów żądania.

W oknie parametrów zapytania interesujące jest:

  • Przycisk Pobierz z żądania automatycznie wyszukuje wszystkie parametry w żądaniu dla wygody programisty.
  • Flaga Wspólne parametry dla wszystkich żądań– jeśli jest zainstalowany, jego przetwarzanie nie czyści parametrów przy przechodzeniu od żądania do żądania na ogólnej liście żądań.

Ustaw parametr z listą wartości To bardzo proste, wystarczy wybrać wartość parametru, kliknąć przycisk kasowania wartości (krzyżyk), system poprosi o wybranie typu danych, gdzie należy wybrać „Lista wartości”:

Również w górnym panelu znajduje się przycisk umożliwiający wywołanie ustawień konsoli zapytań:

Tutaj możesz określić parametry automatycznego zapisywania zapytań i parametry wykonania zapytań.

Tekst żądania jest wprowadzany w polu żądania konsoli. Można to zrobić po prostu wpisując test zapytania lub wywołując specjalne narzędzie - projektanta zapytań.

Projektant zapytań 1C 8 jest wywoływany z menu kontekstowego (prawy przycisk myszy) po kliknięciu pola wejściowego:

W tym menu znajdują się również przydatne funkcje, takie jak usuwanie lub dodawanie podziałów wierszy („|”) do żądania lub otrzymywanie kodu żądania w tej wygodnej formie:

Żądanie = Nowe żądanie;
Żądanie.Tekst = ”
|WYBIERZ
| Waluty.Link
|OD
| Katalog.Waluty AS Waluty”;
RequestResult = Request.Execute();

Dolne pole konsoli zapytań wyświetla pole wyniku zapytania, dlatego też powstało takie przetwarzanie:



Ponadto konsola zapytań oprócz listy może wyświetlać dane w formie drzewa - dla zapytań zawierających sumy.

Optymalizacja zapytań

Jednym z najważniejszych punktów zwiększania produktywności przedsiębiorstwa 1C 8.3 jest optymalizacjaupraszanie. Ten punkt jest również bardzo ważny, kiedy zdanie certyfikatu. Poniżej omówimy typowe przyczyny nieoptymalnej wydajności zapytań i metody optymalizacji.

Wybory w tabeli wirtualnej przy użyciu konstrukcji WHERE

Konieczne jest zastosowanie filtrów do szczegółów wirtualnej tabeli tylko poprzez parametry VT. W żadnym wypadku nie należy używać konstrukcji WHERE do selekcji w tabeli wirtualnej; jest to poważny błąd z punktu widzenia optymalizacji. W przypadku selekcji za pomocą WHERE tak naprawdę system otrzyma WSZYSTKIE rekordy i dopiero wtedy wybierze te niezbędne.

PRAWIDŁOWY:

WYBIERAĆ

Z
Rejestr Skumulacji Wzajemnych rozliczeń z Uczestnikami Organizacji (.
,
Organizacja = &Organizacja
Oraz Indywidualne = &Indywidualne) JAK Wzajemne rozliczenia z Uczestnikami Organizacji Salda

ZŁO:

WYBIERAĆ
Wzajemne rozliczenia z Uczestnikami Organizacji Salda Kwota
Z
Rejestr Skumulacji Wzajemne rozliczenia z Uczestnikami Organizacji Salda (,) JAK Wzajemne rozliczenia z Uczestnikami Organizacji Salda
GDZIE
Wzajemne rozliczenia z Uczestnikami Organizacji Salda Organizacja = & Organizacja
ORAZ Wzajemne rozliczenia z Uczestnikami Organizacji Salda Indywidualne = &Indywidualne

Pobieranie wartości pola typu złożonego za pomocą kropki

Odbierając w zapytaniu przez kropkę dane typu złożonego, system łączy się złączeniem lewym dokładnie tyle tabel, ile jest możliwych typów w polu typu złożonego.

Na przykład wysoce niepożądane jest, aby optymalizacja miała dostęp do pola rekordu rejestru – rejestratora. Rejestrator ma złożony typ danych, wśród którego znajdują się wszystkie możliwe typy dokumentów, które mogą zapisywać dane do rejestru.

ZŁO:

WYBIERAĆ
Zestaw rekordów.Rejestrator.Data,
Zestaw rekordów.Ilość
Z
ZarejestrujAkumulacje.ProduktyOrganizacje AS SetRecords

Oznacza to, że w rzeczywistości takie zapytanie uzyska dostęp nie do jednej tabeli, ale do 22 tabel bazy danych (ten rejestr ma 21 typów rejestratorów).

PRAWIDŁOWY:

WYBIERAĆ
WYBÓR
WHEN ProductsOrg.Registrar LINK Dokument.Sprzedaż produktów i usług
THEN EXPRESS(ProductsOrg.Registrar AS Document.Sale of GoodsServices).Data
KIEDY GoodsOrg.Registrar LINK Dokument.Odbiór towarówUsługi
THEN EXPRESS (Dokument GoodsOrg.Registrar AS.Receipt of GoodsServices).Data
KONIEC JAKO DATA,
ProduktyOrg.Ilość
Z
ZarejestrujAkumulacje.ProduktyOrganizacje AS ProduktyOrganizacja

Lub drugą opcją jest dodanie takiej informacji do szczegółów, na przykład w naszym przypadku dodanie daty.

PRAWIDŁOWY:

WYBIERAĆ
ProduktyOrganizacje.Data,
ProduktyOrganizacje.Ilość
Z
Rejestr nagromadzeń towarów organizacji AS Towary organizacji

Podzapytania w warunku złączenia

Dla optymalizacji niedopuszczalne jest używanie podzapytań w warunkach łączenia, co znacznie spowalnia zapytanie. W takich przypadkach wskazane jest użycie VT. Aby się połączyć, musisz używać tylko metadanych i obiektów VT, po uprzednim zindeksowaniu ich według pól połączenia.

ZŁO:

WYBIERAĆ …

LEWE DOŁĄCZ (
WYBIERZ Z RegisterInformation.Limits
GDZIE …
GRUPUJ WEDŁUG...
) PRZEZ …

PRAWIDŁOWY:

WYBIERAĆ …
Limity PUT
Z Rejestr informacyjny.Limity
GDZIE …
GRUPUJ WEDŁUG...
INDEKS WG...;

WYBIERAĆ …
Z Dokument sprzedaży towarów i usług
LEWO DOŁĄCZ Limity
PRZEZ …;

Łączenie rekordów z wirtualnymi tabelami

Zdarzają się sytuacje, gdy przy łączeniu wirtualnego stołu z innymi system nie działa optymalnie. W tym przypadku, aby zoptymalizować wydajność zapytania, możesz spróbować umieścić wirtualną tabelę w tabeli tymczasowej, nie zapominając o zindeksowaniu połączonych pól w zapytaniu o tabelę tymczasową. Wynika to z faktu, że VT są często zawarte w kilku fizycznych tabelach DBMS, w wyniku czego kompilowane jest podzapytanie w celu ich wybrania, a problem okazuje się podobny do poprzedniego punktu.

Korzystanie z selekcji na podstawie pól nieindeksowanych

Jednym z najczęstszych błędów podczas pisania zapytań jest używanie warunków w polach nieindeksowanych, co jest sprzeczne reguły optymalizacji zapytań. System DBMS nie może optymalnie wykonać zapytania, jeśli zapytanie zawiera selekcję pól nieindeksowalnych. Jeśli weźmiesz tabelę tymczasową, musisz także zaindeksować pola połączeń.

Dla każdego warunku musi istnieć odpowiedni indeks. Odpowiedni indeks to taki, który spełnia następujące wymagania:

  1. Indeks zawiera wszystkie pola wymienione w warunku.
  2. Pola te znajdują się na samym początku indeksu.
  3. Selekcje te są kolejne, to znaczy wartości, które nie są objęte warunkiem zapytania, nie są „klinowane” między nimi.

Jeśli DBMS nie wybierze właściwych indeksów, przeskanowana zostanie cała tabela - będzie to miało bardzo negatywny wpływ na wydajność i może prowadzić do długotrwałego blokowania całego zestawu rekordów.

Używanie logicznego OR w warunkach

To wszystko, w tym artykule omówiono podstawowe aspekty optymalizacji zapytań, które powinien znać każdy ekspert 1C.

Bardzo przydatny darmowy kurs wideo na temat tworzenia i optymalizacji zapytań, gorąco polecam dla początkujących i nie tylko!

Załóżmy, że w naszych magazynach posiadamy następujący produkt:

Sekcja grupowania jest deklarowana przez słowo kluczowe GRUPUJ WEDŁUG. Dlaczego w zapytaniu potrzebne jest grupowanie? Całkowicie racja, jeśli chodzi o łączenie identycznych pól tabeli w grupę i uzyskiwanie podsumowujących wyników dla pozostałych. Grupowanie zwija podobne pola zapytania w jedno, zmniejszając w ten sposób liczbę wynikowych rekordów. Pozwolę sobie od razu zastrzeżenie: jeśli w zapytaniu stosowane jest grupowanie, to wszystkie pola należy podzielić na dwie kategorie: te, według których grupujemy i te, które grupujemy. Wyjaśnię na przykładzie, powiedzmy, że chcemy dowiedzieć się, ile mamy ogólnie towaru, nie biorąc pod uwagę magazynów, to napiszemy następujący kod zapytania:

Żądanie.Tekst = "
|WYBIERZ
| Produkty. Produkt,
| SUMA(Pozycje.Ilość) JAKO Ilość
|OD
|
|GRUPUJ WG
| Produkty.Produkt";

W tym przypadku polem, według którego przeprowadzane jest grupowanie, jest Produkt, a polem grupowanym jest Ilość. SUMA jest funkcją agregującą, wskazuje zapytaniu, że należy zsumować wszystkie dane dotyczące liczby identycznych produktów. Wynikiem tego zapytania będzie tabela taka jak:

Funkcje agregujące

Do zgrupowanych pól należy zastosować funkcję agregującą, jest to opcjonalnie SUM oraz MAXIMUM, MINIMUM, AVERAGE, QUANTITY, NUMBER OF DIFFERENT. Przyjrzyjmy się bliżej działaniu każdego z nich.

SUMA- dotyczy tylko pól numerycznych, dodaje przekazane do niego liczby. Jego wynik pokazano na powyższym rysunku.

PRZECIĘTNY- dotyczy tylko pól numerycznych, oblicza średnią - sumę przekazanych parametrów/ilość parametrów:

MAKSYMALNY- może być użyty dla dowolnych pól, otrzymuje maksimum z przekazanych parametrów. Załóżmy, że tekst żądania wygląda następująco:

Żądanie.Tekst = "
|WYBIERZ
| Produkty. Produkt,
| MAX(Produkty.Magazyn) AS Magazyn,
| MAKSYMALNA(przedmioty.ilość) JAKO ilość
|OD
| Katalog.Produkty AS Produkty
|GRUPUJ WG
| Produkty.Produkt";

Te. Ponownie mamy jedno pole grupujące Produkt i dwa pola grupujące: Magazyn i Ilość. Wynik tego zapytania będzie wyglądał następująco:

MINIMUM - może być użyty dla dowolnych pól, otrzymuje minimum przekazanych parametrów:

ILOŚĆ- można zastosować do dowolnych pól, pobiera liczbę przekazanych parametrów:

ILOŚĆ RÓŻNYCH- może być użyty dla dowolnych pól, pobiera liczbę różnych parametrów. Te. jeśli funkcja otrzyma parametry (1,1,2,3,3,3,4,4,4,4,4,5), to zwróci 5 . Funkcja COUNT zwróci 12. Zapytanie wykorzystujące funkcję COUNT OF DIFFERENT będzie wyglądać następująco:

Żądanie.Tekst = "
|WYBIERZ
| Produkty. Produkt,
| ILOŚĆ (RÓŻNE PRODUKTY. MAGAZYN) JAKO MAGAZYN,
| ILOŚĆ (RÓŻNE POZYCJE. Ilość) JAKO Ilość
|OD
| Katalog.Produkty AS Produkty
|GRUPUJ WG
| Produkty.Produkt";

Wynik:

Pogrupujmy według dwóch pól: Produkt i Magazyn:

Żądanie.Tekst = "
|WYBIERZ
| Produkty. Produkt,
| Produkty. Magazyn AS Magazyn,
| <АГРЕГАТНАЯ ФУНКЦИЯ>(Pozycje.Ilość) JAKO Ilość
|OD
| Katalog.Produkty AS Produkty
|GRUPUJ WG
| Produkty. Produkt,
| Produkty.Magazyn";

dla różnych funkcji agregujących wynik będzie następujący:

Podsumujmy:

Jeżeli w żądaniu zastosowano grupowanie, wówczas wszystkie pola należy podzielić na grupowalne (które zostaną „zwinięte”) i grupujące (poprzez które grupowanie zostanie przeprowadzone – „zwinięte”). Zgrupowane pola muszą mieć zastosowaną jedną z funkcji agregujących, chociaż funkcje takie jak SUM i ŚREDNIA można zastosować tylko do pól numerycznych.

Język zapytań 1C jest jedną z głównych różnic między wersjami 7.7 i 8. Jednym z najważniejszych punktów w nauce programowania 1C jest język zapytań. W 1C 8.3 zapytania są najpotężniejszym i najskuteczniejszym narzędziem do uzyskiwania danych. Język zapytań pozwala w wygodny sposób pozyskać informacje z bazy danych.

Sama składnia bardzo przypomina klasyczny T-SQL, z tą różnicą, że w 1C, używając języka zapytań, dane można odbierać tylko za pomocą konstrukcji Select. Język obsługuje również bardziej złożone konstrukcje, na przykład (żądanie w żądaniu). Zapytania w 1C 8 można pisać zarówno cyrylicą, jak i łaciną.

W tym artykule postaram się omówić główne słowa kluczowe w języku zapytań 1C:

  • wybierać
  • dozwolony
  • różny
  • wyrazić
  • Pierwszy
  • na zmianę
  • oznaczający
  • typ wartości (i operator REFERENCE)
  • wybór
  • Grupuj według
  • mający
  • ISNULL
  • Tak NULL
  • przyłącza - prawe, lewe, wewnętrzne, pełne.

A także kilka małych sztuczek języka 1C, za pomocą których można optymalnie skonstruować tekst żądania.

Do debugowania zapytań w systemie 1C 8.2 dostępne jest specjalne narzędzie - konsola zapytań. Możesz zobaczyć opis i pobrać go za pomocą linku -.

Przyjrzyjmy się najważniejszym i interesującym operatorom języka zapytań 1C.

WYBIERAĆ

W języku zapytań 1C Enterprise 8 każde zapytanie zaczyna się od słowa kluczowego WYBIERAĆ. W języku 1C nie ma konstrukcji AKTUALIZUJ, USUŃ, UTWÓRZ TABELĘ, WSTAW, te manipulacje są wykonywane w technologii obiektowej. Jego celem jest wyłącznie odczyt danych.

Na przykład:

WYBIERAĆ
Bieżący katalog.Nazwa
Z
Katalog.Nomenklatura AS Katalog bieżący

Zapytanie zwróci tabelę z nazwami elementów.

W pobliżu konstrukcji WYBIERAĆ możesz znaleźć słowa kluczowe DLA ZMIANY, DOZWOLONY, RÓŻNY, PIERWSZY

DOZWOLONY— wybiera z tabeli tylko rekordy, do których ma uprawnienia bieżący użytkownik.

RÓŻNY— oznacza, że ​​wynik nie będzie zawierał zduplikowanych linii.

WYBÓR (przypadek)

Bardzo często ten projekt jest niedoceniany przez programistów. Przykład jego użycia:

Bieżący katalog.Nazwa,

KIEDY bieżący katalog.usługa WTEDY

"Praca"

KONIEC JAK PRZEGLĄDAĆNomenklatura

Katalog.Nomenklatura AS Katalog bieżący

Przykład zwróci wartość tekstową w polu „Typ artykułu” - „Produkt” lub „Usługa”.

GDZIE

Projekt języka zapytań 1C, który pozwala narzucić selekcję otrzymanym danym. Należy pamiętać, że system odbiera wszystkie dane z serwera i dopiero wtedy są one wybierane na podstawie tego parametru.

WYBIERAĆ
Katalog.Nazwa
Z
Katalog bieżący. Nomenklatura AS Katalog bieżący
GDZIE CurrentDirectory.Service = TRUE

W przykładzie wybieramy rekordy, dla których wartość atrybutu „Service” jest ustawiona na „True”. W w tym przykładzie Można sobie poradzić z następującym warunkiem:

„GDZIE JEST SERWIS”

Zasadniczo wybieramy wiersze, w których wyrażenie znajdujące się po słowie kluczowym ma wartość „True”.

W wyrażeniach możesz używać warunków bezpośrednich:

GDZIE Kod = „005215”

Używając operatora „VALUE()” w warunkach, korzystaj z dostępu do predefiniowanych elementów i wyliczeń w żądaniu 1C:

GDZIE Typ elementu = Wartość (Wyliczenie. Typy pozycji. Produkt)

Wartości czasu można określić w następujący sposób:

WHERE Data odbioru > DATETIME(2012,01,01):

Najczęściej warunki określane są jako parametry przekazywane do żądania:

Uzyskaj 267 lekcji wideo na 1C za darmo:

WHERE Grupa Nomenklatury= &Grupa Nomenklatury

Na typ atrybutu można nałożyć warunek, jeśli jest on typu złożonego:

Jeśli chcesz ograniczyć wybór z listy wartości lub tablicy, możesz wykonać następujące czynności:

GDZIE jest Rejestr Akumulacji B (&Lista dokumentów do wyboru)

Warunek może być również złożony i składać się z kilku warunków:

WHERE Data odbioru > DATETIME(2012,01,01) AND NomenclatureGroup= &NomenclatureGroup ORAZ NIE Usługa

GRUPUJ WEDŁUG

Projekt języka zapytań 1C 8.2 używanego do grupowania wyniku.

Na przykład:

WYBIERAĆ
Odbiór Towarów i Usług Towarowych,
SUMA (odbiór towarów, usług, towarów. ilość) AS Ilość,
SUMA(Odbiór towarówUsługiDobra.Kwota) JAKO Kwota
Z
Dokument. Odbiór towarów i usług. JAK Odbiór towarów i usług

GRUPUJ WEDŁUG
Odbiór towarówUsługiTowary.Towary

To żądanie podsumowuje wszystkie wpływy według kwoty i ilości według pozycji.

Oprócz słowa kluczowego SUMA Możesz użyć innych funkcji agregujących: ILOŚĆ, ILOŚĆ RÓŻNYCH, MAKSYMALNY, MINIMUM, PRZECIĘTNY.

MAJĄCY

Projekt, o którym często się zapomina, a jest bardzo ważny i przydatny. Pozwala określić selekcję w formie funkcji agregującej, nie da się tego zrobić w projekcie GDZIE.

Przykład użycia HAVING w żądaniu 1C:

WYBIERAĆ
Odbiór Towarów i Usług Towarowych,
SUMA (odbiór towarów, usług, towarów. ilość) AS Ilość,
SUMA(Odbiór towarówUsługiDobra.Kwota) JAKO Kwota
Z
Dokument Odbiór Towarów i Usług. Towar JAK Odbiór Towarów i Usług

GRUPUJ WEDŁUG
Odbiór towarów i usług Towary

SUMA(Odbiór towarówUsługiTowary.Ilość) > 5

Wybierzemy więc liczbę produktów, które przybyły w ilości większej niż 5 sztuk.

OZNACZAJĄCY()

Na przykład:

GDZIE Bank = Wartość(Directory.Banks.EmptyLink)

GDZIE Typ nomenklatury = Wartość(Katalog.Typy nomenklatury.Produkt)

GDZIE Typ elementu = Wartość (Wyliczenie. Typy pozycji. Usługa)

TYP w żądaniu

Typ danych można sprawdzić za pomocą funkcji TYPE() i VALUETYPE() lub za pomocą operatora logicznego REFERENCE.

WYRAZIĆ()

Operator Express w zapytaniach 1C służy do konwersji typów danych.

Składnia: WYRAZIĆ(<Выражение>JAK<Тип значения>)

Za jego pomocą możesz konwertować wartości ciągów na datę lub wartości referencyjne na dane ciągów i tak dalej.

W praktyczne zastosowanie Operator Express() jest bardzo często używany do konwersji pól o nieograniczonej długości, ponieważ pól o nieograniczonej długości nie można wybierać, grupować itp. Jeśli takie pola nie zostaną przekonwertowane, pojawi się błąd Nie można porównywać pól o nieograniczonej długości z polami niekompatybilnych typów.

WYBIERAĆ
Informacje kontaktowe.Obiekt,
EXPRESS(ContactInfo.View AS ROW(150)) AS View
Z
Rejestr informacji Informacje kontaktowe JAK Informacje kontaktowe

GRUPUJ WEDŁUG
EXPRESS(ContactInfo.Representation AS ROW(150)),
Informacje kontaktowe.Obiekt

ISNULL (ISNULL)

Całkiem przydatna funkcja języka zapytań 1C, która sprawdza wartość w rekordzie i czy jest równa ZERO, Dzięki temu możesz zastąpić go swoją wartością. Najczęściej stosowane przy uzyskiwaniu wirtualnych tabel sald i obrotów w celu ukrycia ZERO i wstaw wyraźne 0 (zero).

ISNULL(Podatki za miesiąc. Zastosowane świadczenie FSS, 0)

Taka funkcja języka zapytań 1C ISNULL zwróci zero, jeśli nie ma wartości, co pozwoli uniknąć błędu.

DOŁĄCZYĆ

Istnieją 4 rodzaje połączeń: LEWY, PRAWIDŁOWY, KOMPLETNY, WEWNĘTRZNY.

POŁĄCZENIE LEWE i PRAWE

Złączenia służą do łączenia dwóch tabel na podstawie określonego warunku. Funkcja kiedy LEWO DOŁĄCZ polega na tym, że bierzemy w całości pierwszą określoną tabelę i warunkowo wiążemy drugą tabelę. Pola drugiej tabeli, których nie można było obwiązać warunkiem, są wypełniane wartością ZERO.

Przykład lewego połączenia w żądaniu 1C:

Zwróci całą tabelę i wypełni pole „Bank” tylko w tych miejscach, w których spełniony jest warunek „Kontrahenci.Nazwa = Banki.Nazwa”. Jeżeli warunek nie jest spełniony, pole Bank zostanie ustawione na wartość ZERO.

PRAWY DOŁĄCZ w języku 1C 8.3 absolutnie podobne LEWE połączenie, z jedną różnicą: w PRAWO POŁĄCZENIA Tabela „główna” jest drugą, a nie pierwszą.

PEŁNE POŁĄCZENIE

PEŁNE POŁĄCZENIE różni się od lewej i prawej tym, że wyświetla wszystkie rekordy z dwóch tabel i łączy tylko te, które może połączyć według warunku.

Na przykład:

PEŁNE POŁĄCZENIE
Katalog.Banki JAK Banki

PRZEZ

Język zapytań zwróci całkowicie obie tabele tylko wtedy, gdy spełniony zostanie warunek Połącz rekordy. W przeciwieństwie do złączenia lewego/prawego, wartość NULL może pojawić się w dwóch polach.

WEWNĘTRZNE POŁĄCZENIE

WEWNĘTRZNE POŁĄCZENIE różni się od pełnego tym, że wyświetla tylko te rekordy, które można połączyć według zadanego warunku.

Na przykład:

Z
Katalog Kontrahentów AS Klienci

WEWNĘTRZNE POŁĄCZENIE
Katalog.Banki JAK Banki

PRZEZ
Klienci.Nazwa = Banki.Nazwa

To zapytanie zwróci tylko wiersze, w których bank i kontrahent mają tę samą nazwę.

Wniosek

To tylko niewielka część składni języka zapytań 1C 8; w przyszłości postaram się rozważyć niektóre punkty bardziej szczegółowo, pokazać i wiele więcej!