Reprezentacja we wniosku 1s. Funkcje pracy z polem View i funkcją View() języka zapytań

Postanowiłem wnieść swój wkład i opisać te cechy języka, które nie zostały omówione w powyższych artykułach. Artykuł skierowany jest do początkujących programistów.

1. Projekt „IZ”.

Aby uzyskać dane z bazy danych, wcale nie jest konieczne stosowanie konstrukcji „FROM”.
Przykład: Musimy wybrać wszystkie informacje o bankach z katalogu banków.
Wniosek:

WYBIERZ katalog.Banki.*

Wybiera wszystkie pola z katalogu Banki. I jest podobny do żądania:

WYBIERZ Banki.* Z katalogu.Banki AS Banki

2. Porządkowanie danych według pola referencyjnego

Kiedy musimy uporządkować dane zapytania według typów pierwotnych: „String”, „Numer”, „Data” itp., to wszystko rozwiązuje się za pomocą konstrukcji „ORDER BY”, jeśli chcesz uporządkować dane według pola referencyjnego? Pole referencyjne to link, unikalny identyfikator, tj. Z grubsza rzecz biorąc, dowolny zestaw znaków i zwykła kolejność mogą dać wynik, który nie jest całkowicie oczekiwany. Do zamówienia pól referencyjnych stosowana jest konstrukcja „AUTO ZAMÓWIENIE”. Aby to zrobić, należy najpierw uporządkować dane bezpośrednio według typu referencyjnego za pomocą konstrukcji „ORDER BY”, a następnie konstrukcji „AUTO ORDER”.

W tym przypadku dla dokumentów kolejność będzie następować w kolejności „Data->Numer”, dla podręczników w „Widoku Głównym”. Jeżeli uporządkowanie nie następuje poprzez pola referencyjne, wówczas nie zaleca się stosowania konstrukcji „AUTO ZAMÓWIENIE”.

W niektórych przypadkach konstrukcja „AUTO ZAMÓWIENIE” może spowolnić proces selekcji. Podobnie możesz przepisywać dokumenty bez automatycznego porządkowania:

3.Uzyskanie reprezentacji tekstowej typu referencyjnego. Projekt „PREZENTACJA”.

Gdy zachodzi potrzeba wyświetlenia pola typu referencyjnego, np. pola „Bank”, będącego odnośnikiem do elementu katalogu „Banki”, należy pamiętać, że wyświetlając to pole, należy uwzględnić podzapytanie do pola „Banki”. Banki” zostanie automatycznie uruchomiony w celu uzyskania widoku katalogu. Spowoduje to spowolnienie przesyłania danych. Aby tego uniknąć, należy w żądaniu zastosować konstrukcję „PREZENTACJA”, aby od razu uzyskać reprezentację obiektu, a następnie wyświetlić ją do obejrzenia.

W systemie kompozycji danych ten mechanizm jest domyślnie stosowany, jednak tworząc układy w komórkach należy określić reprezentację pola referencyjnego i np. samo łącze umieścić w transkrypcie.

4. Warunek próbkowania danych według szablonu.

Na przykład musisz zdobyć telefony komórkowe pracowników w formie (8 -123-456-78-912). Aby to zrobić, musisz ustawić w żądaniu następujący warunek:

WYBIERZ pracownika.Imię, Pracownik.Telefon JAKO telefon Z katalogu.Pracownicy JAKO Pracownicy GDZIE Telefon JAK „__-___-___-__-__”

Znak „_” jest znakiem usługowym i zastępuje dowolny znak.

5. Jednoczesne wykorzystanie sum i grupowań.


Sumy są często używane w połączeniu z grupowaniem; w tym przypadku funkcje agregujące nie mogą być określone w sumach.

WYBIERZ Świadczenie usług.Organizacja AS Organizacja, świadczenie usług.Nomenklatura AS Nomenklatura, SUM(Świadczenie usług.Ilość dokumentu) AS Suma dokumentu Z dokumentu.Świadczenie usług AS Świadczenie usług GRUPA WG świadczenie usług.Organizacja, świadczenie Usług.Nomenklatura WYNIKI PRZEZ OGÓLNE, Organizacja, Nomen klatura

W takim przypadku zapytanie zwróci prawie to samo, co poniższe zapytanie:

WYBIERZ Świadczenie usług.Organizacja AS Organizacja, Świadczenie usług.Nomenklatura AS Nomenklatura, Świadczenie usług.Ilość dokumentu JAKO Ilość dokumentu Z dokumentu.Świadczenie usług JAKO Świadczenie usług WYNIKI KWOTA (Ilość dokumentu) PRZEZ OGÓLNE, Organizacja, Nomenklatura

Tylko pierwsze zapytanie zwinie rekordy o tej samej nomenklaturze.

6. Pola dereferencyjne.

Odwoływanie się do pól za pomocą kropki nazywa się operacją dereferencji pola odniesienia. Na przykład Płatność.Organizacja.Jednostka administracyjna. W tym przypadku w polu referencyjnym „Organizacja” dokumentu „Płatność” odnosi się to do innej tabeli „Organizacje”, w której zostanie uzyskana wartość atrybutu „Jednostka administracyjna”. Ważne jest, aby zrozumieć, że uzyskując dostęp do pól za pomocą kropki, platforma domyślnie tworzy podzapytanie i łączy te tabele.

Wniosek:

Można przedstawić jako:

WYBIERZ Płatność.Link, Płatność.Organizacja, Płatność.Organizacja, Organizacje. Jednostka administracyjna Z Dokument.Płatność JAKO Płatność LEWY DOŁĄCZ Katalog.Organizacje AS Organizacja Płatność za oprogramowanie.Organizacja = Organizacje.Link

Podczas wyłuskiwania pól referencyjnych typu złożonego struktura próbuje utworzyć niejawne połączenia ze wszystkimi tabelami, które są częścią typu tego pola. W takim wypadku zapytanie nie będzie optymalne.Jeżeli wiadomo jaki to typ pola to należy ograniczyć takie pola ze względu na typ konstruktem WYRAZIĆ().

Na przykład istnieje rejestr akumulacji „Płatności nierozdzielone”, w którym kilka dokumentów może pełnić funkcję rejestratora. W takim przypadku nieprawidłowe jest uzyskanie wartości danych rejestratora w ten sposób:

WYBIERZ UnallocatedPayments.Register.Date, ..... Z RegisterAccumulation.UnallocatedPayments AS UnallocatedPayments

powinieneś ograniczyć typ pola złożonego do rejestratora:

WYBIERZ EXPRESS(UnallocatedPayments.Zarejestruj jako dokument.Płatność).Data, ..... Z RegisterAccumulation.UnallocatedPayments AS UnallocatedPayments

7. Konstrukcja „GDZIE”

W przypadku lewego złączenia dwóch tabel, gdy na prawą tabelę nałożymy warunek „GDZIE”, otrzymamy wynik podobny do wyniku przy wewnętrznym złączeniu tabel.

Przykład. Należy wybrać wszystkich Klientów z Katalogu Klientów i dla tych klientów, którzy posiadają dokument płatniczy o wartości atrybutu „Organizacja” = &Organizacja, wyświetlić dokument „Płatność”, dla tych, którzy go nie posiadają, nie wyświetlają go.

Wynik zapytania zwróci rekordy tylko dla tych klientów, którzy w parametrze mieli płatność według organizacji, a pozostałych klientów odfiltruje. Dlatego należy najpierw otrzymać wszystkie płatności za „taką a taką” organizację w tabeli tymczasowej, a następnie połączyć ją z katalogiem „Klienci” za pomocą lewego złączenia.

WYBIERZ Płatność.Link JAKO Płatność, Płatność.Udziałowiec JAKO Klient MIEJSCE doPłatności Z Dokumentu.Płatność JAKO Płatność GDZIE Płatność.Oddział = &Oddział; /////////////////////////////////////////////// ///////////////////////// WYBIERZ Clients.Link AS Client, ISNULL(tPayment.Payment, "") AS Payment FROM Directory .Clients AS Klienci Opuścili POŁĄCZENIE dopłatności JAKO OPROGRAMOWANIE dopłat Klienci.Link = topłatności.Klient

Możesz obejść ten stan w inny sposób. Konieczne jest nałożenie warunku „GDZIE” bezpośrednio na relację między dwiema tabelami. Przykład:

WYBIERZ Klienci.Link, Płatność.Link Z katalogu.US_Subscribers AS US_Subscribers LEWE POŁĄCZENIE Dokument.Płatność AS Oprogramowanie płatnicze (Clients.Link = Płatność.Klient ORAZ Płatność.Klient.Nazwa JAK „Pakiet cukru”) GRUPA WEDŁUG Klientów.Link, Płatność. Połączyć

8. Łączy się z tabelami zagnieżdżonymi i wirtualnymi

Zagnieżdżone zapytania często konieczne do pobrania danych w oparciu o pewien warunek. Jeśli następnie użyjesz ich w połączeniu z innymi tabelami, może to krytycznie spowolnić wykonanie zapytania.

Na przykład dla niektórych klientów musimy uzyskać kwotę salda na bieżącą datę.

WYBIERZ UnallocatedPaymentsRemains.Customer, UnallocatedPaymentsRemains.AmountRemaining FROM (WYBIERZ Clients.Link AS Link FROM Directory.Clients AS Clients WHERE Clients.Link IN(&Clients)) AS NestedQuery LEWO DOŁĄCZ RegisterAccumulations.UnallocatedPayments. Salda AS UnallocatedPayments BY Zagnieżdżone żądanie.Link = UnallocatedPaymentsBa lance. Klient

Wykonując takie zapytanie, optymalizator DBMS może popełnić błędy przy wyborze planu, co doprowadzi do nieoptymalnego wykonania zapytania. Podczas łączenia dwóch tabel optymalizator DBMS wybiera algorytm łączenia tabel na podstawie liczby rekordów w obu tabelach. Jeśli istnieje zapytanie zagnieżdżone, niezwykle trudno jest określić liczbę rekordów, które zwróci zapytanie zagnieżdżone. Dlatego zamiast zapytań zagnieżdżonych należy zawsze używać tabel tymczasowych. Przepiszmy więc prośbę.

WYBIERZ Klienci.Link AS Link UMIEŚĆ tKlientów Z katalogu.Klienci JAKO Klienci GDZIE
Klienci.Link B (&Klienci) ; /////////////////////////////////////////////// ////////////////////////// WYBIERZ tClients.Link, UnallocatedPaymentsRemains.AmountRemaining, FROM tClients AS tClients LEFT DOŁĄCZ RegisterAccumulations.UnallocatedPayments.Balances (, Client IN (WYBIERZ tClients.Link Z tClients)) AS UnallocatedPaymentsBalances tClients.Link = UnallocatedPaymentsBalances.Clients

W tym przypadku optymalizator będzie w stanie określić z ilu rekordów korzysta tabela tymczasowa tClients i będzie mógł wybrać optymalny algorytm łączenia tabel.

Wirtualne stoły , pozwalają na uzyskanie praktycznie gotowych danych dla większości stosowanych zadań (Kawałek Pierwszy, Kawałek Ostatni, Pozostałości, Obroty, Pozostałości i Obroty) Słowo klucz jest tutaj wirtualne. Tabele te nie mają charakteru fizycznego, lecz są kompilowane przez system na bieżąco, tj. Po otrzymaniu danych z tablic wirtualnych system pobiera dane z tablic rejestrów końcowych, zestawia je, grupuje i wydaje użytkownikowi.

Te. Podczas łączenia się z tabelą wirtualną nawiązywane jest połączenie z podzapytaniem. W tym przypadku optymalizator DBMS może również wybrać nieoptymalny plan połączeń. Jeżeli zapytanie nie zostanie wygenerowane wystarczająco szybko i wykorzystuje złączenia w tabelach wirtualnych, wówczas zaleca się przeniesienie dostępu do tabel wirtualnych do tabeli tymczasowej, a następnie dokonanie złączenia pomiędzy dwiema tabelami tymczasowymi. Przepiszmy poprzednią prośbę.

WYBIERZ Klienci.Link AS Link UMIEŚĆ tKlientów Z katalogu.Klienci JAKO Klienci INDEKS WEDŁUG łącza GDZIE
Klienci.Link B (&Klienci) ; /////////////////////////////////////////////// ////////////////////////// WYBIERZ UnallocatedPayments.AmountBalance, UnallocatedPayments.Client AS Klient MIEJSCE salda Z RegisterAccumulations.UnallocatedPayments.Balances(, Klient B ( WYBIERZ tClients. Link Z tClients)) AS UnallocatedPaymentsBalance; /////////////////////////////////////////////// ////////////////////////// WYBIERZ tClients.Link, toRemainders.AmountRemaining AS AmountRemaining OD tClients AS tClients LEFT DOŁĄCZ doRemainders AS Remainders PRZEZ tClients.Link = tPozostałe.Klient

9.Sprawdzanie wyniku żądania.

Wynik zapytania może być pusty; aby sprawdzić puste wartości, użyj następującej konstrukcji:

ResRequest = Request.Execute(); Jeśli resQuery.Empty() Następnie wróć; koniecJeśli;

metoda Pusty() należy stosować przed metodami Wybierać() Lub Rozładować(), ponieważ odzyskanie kolekcji wymaga czasu.

Nie jest dla nikogo odkrywcą, że używanie zapytań w pętli jest wyjątkowo niepożądane. Może to mieć krytyczny wpływ na czas działania określonej funkcji. Jest wysoce pożądane, aby otrzymać wszystkie dane w żądaniu, a następnie przetworzyć je w pętli. Ale czasami zdarzają się przypadki, gdy przeniesienie żądania poza pętlę staje się niemożliwe. W tym przypadku dla optymalizacji można przenieść tworzenie zapytania poza pętlę i w pętli podstawić niezbędne parametry i wykonać zapytanie.

Żądanie = Nowe żądanie; Query.Text = "WYBIERZ | Klienci.Link, | Klienci.Data urodzenia |FROM | Katalog.Klienci AS Klienci |GDZIE | Klienci.Link = &Klient"; Dla każdego wiersza z tabeli TableClients Loop Query.SetParameter("Client", Client); QueryResult = Query.Execute().Wybierz(); Koniec cyklu;

Dzięki temu system nie będzie musiał sprawdzać składni żądania w pętli.

11. Konstrukcja „MIEĆ”.

Projekt dość rzadki w prośbach. Umożliwia nakładanie warunków na wartości funkcji agregujących (SUMA, MINIMUM, ŚREDNIA itp.). Na przykład musisz wybrać tylko tych klientów, których kwota płatności we wrześniu wyniosła ponad 13 000 rubli. Jeśli skorzystasz z warunku „GDZIE” będziesz musiał najpierw utworzyć tabelę tymczasową lub zagnieżdżone zapytanie, pogrupować tam rekordy według kwoty płatności, a następnie zastosować warunek. Konstrukcja „HAVING” pomoże tego uniknąć.

WYBIERZ Płatność.Klient, KWOTA(Kwota.Płatności) JAKO Kwota Z Dokumentu.Płatność JAKO Płatność GDZIE MIESIĄC(Data.Płatności) = 9 GRUPA WG Płatności.Klient MAJĄCY KWOTĘ(Kwota.Płatności) > 13000

Aby to zrobić w konstruktorze, wystarczy przejść do zakładki „Warunki”, dodać nowy warunek i zaznaczyć pole wyboru „Niestandardowy”. Potem po prostu napisz Kwota (płatność. kwota) > 13000


12. Wartość NULL

Nie będę tutaj opisywał zasad logiki trójwartościowej w bazie danych, artykułów na ten temat jest wiele. Krótko o tym jak ZERO może mieć wpływ na wynik zapytania. Wartość NULL w rzeczywistości nie jest wartością i fakt, że wartość jest niezdefiniowana, jest nieznany. Dlatego każda operacja z wartością NULL zwraca wartość NULL, niezależnie od tego, czy jest to dodawanie, odejmowanie, dzielenie czy porównanie. Wartości NULL nie można porównać z wartością NULL, ponieważ nie wiemy, co porównać. Te. oba te porównania to: NULL = NULL, NULL<>NULL nie jest prawdą ani fałszem, nie jest znane.

Spójrzmy na przykład.

Dla tych klientów, którzy nie mają płatności, musimy wyświetlić pole „Podpisz” z wartością „Brak płatności”. Co więcej, wiemy na pewno, że mamy takich klientów. I żeby oddać istotę tego co napisałem powyżej, zróbmy to tak.

WYBIERZ „Brak płatności” jako atrybut, NULL jako dokument MIEJSCE dopłat; /////////////////////////////////////////////// ///////////////////////// WYBIERZ Klienci.Połącz AS Klienta, Płatność.Link JAK Płatność PUT tClientPayment Z Katalogu.Klienci JAKO Klienci LEWY Dokument POŁĄCZENIA. Klienci oprogramowania płatniczego Payment AS.Link = Payment.Shareholder; /////////////////////////////////////////////// ///////////////////////// WYBIERZ tClientPayment.Client Z tClientPayment AS tClientPayment DOŁĄCZENIE WEWNĘTRZNE tPayment AS tTopay PRZEZ tClientPayment.Payment = tPayment.Dokument

Zwróć uwagę na drugą tabelę tymczasową tClientPayment. Lewym złączeniem wybieram wszystkich klientów i wszystkie płatności dla tych klientów. Dla klientów, którzy nie mają płatności, pole „Płatność” będzie miało wartość NULL. Kierując się logiką, w pierwszej tabeli tymczasowej „tPayments” wyznaczyłem 2 pola, jedno z nich NULL, drugie wiersze „Nie ma płatności”. W trzeciej tabeli łączę tabele „tClientPayment” i „tPayment” za pomocą pól „Płatność” i „Dokument” złączeniem wewnętrznym. Wiemy, że w pierwszej tabeli pole „Dokument” ma wartość NULL, a w drugiej tabeli osoby, które nie mają płatności w polu „Płatność” również mają wartość NULL. Co nam da takie połączenie? Ale to nic nie zwróci. Ponieważ porównanie NULL = NULL nie daje wartości True.

Aby żądanie zwróciło oczekiwany wynik napiszmy je od nowa:

WYBIERZ „Brak płatności” JAKO atrybut, WARTOŚĆ(Document.Payment.EmptyLink) JAKO Dokument MIEJSCE toPayments; /////////////////////////////////////////////// ///////////////////////// WYBIERZ Clients.Link AS Client, ISNULL(Payment.Link, VALUE(Document.Payment.EmptyLink )) JAK Płatność PUT tClientPayment Z katalogu.Klienci JAKO Klienci LEWY POŁĄCZENIE Dokument.Płatność JAKO Płatność PRZEZ Klientów.Link = Płatność.Udziałowiec; /////////////////////////////////////////////// ///////////////////////// WYBIERZ tClientPayment.Client Z tClientPayment AS tClientPayment DOŁĄCZENIE WEWNĘTRZNE tPayment AS tTopay PRZEZ tClientPayment.Payment = tPayment.Dokument

Teraz w drugiej tabeli tymczasowej wskazaliśmy, że jeśli pole „Płatność” ma wartość NULL, to pole to = pusty link do dokumentu płatności. W pierwszej tabeli zastąpiliśmy także NULL pustym odwołaniem. Teraz połączenie obejmuje pola inne niż NULL i żądanie zwróci oczekiwany wynik.

Wszystkie prośby zawarte w artykule odzwierciedlają sytuacje, które chciałbym rozważyć i nic więcej. O Nie mogą być urojeniowe ani nieoptymalne, najważniejsze jest to, że odzwierciedlają istotę przykładu.

13. Nieudokumentowana cecha projektu „WYBÓR KIEDY…TO…KOŃC”.

W przypadku konieczności opisania w żądaniu konstrukcji „Warunki” stosujemy standardową składnię:

WYBIERZ WYBÓR, GDY Users.Name = „Vasya Pupkin” WTEDY „Nasz ulubiony pracownik” W przeciwnym razie „Nie wiemy tego” KONIEC JAKO Pole 1 Z katalogu.Użytkownicy JAKO Użytkownicy

A co jeśli na przykład w żądaniu będziemy musieli uzyskać nazwę miesiąca? Pisanie ogromnej konstrukcji w żądaniu jest brzydkie i czasochłonne, dlatego powyższa forma pisania może nam pomóc:

WYBIERZ MIESIĄC(US_CalculationConsumption_ScheduleTurnover.CalculationPeriod) KIEDY 1 NASTĘPNIE „styczeń” KIEDY 2 NASTĘPNIE „luty” KIEDY 3 NASTĘPNIE „marzec” KIEDY 4 NASTĘPNIE „kwiecień” KIEDY 5 NASTĘPNIE „maj” KIEDY 6 NASTĘPNIE „czerwiec” KIEDY 7 WTEDY „lipiec” K KIEDY 8 WTEDY „Sierpień” KIEDY 9 WRZESIEŃ KIEDY 10 WTEDY „październik” KIEDY 11 WTEDY „listopad” KIEDY 12 WTEDY „grudzień” KOŃCZY SIĘ JAKO MIESIĄC

Teraz projekt wygląda mniej uciążliwie i jest łatwy do zrozumienia.

14. Wykonywanie zapytań wsadowych.


Aby nie mnożyć żądań, możesz utworzyć jedno duże żądanie, podzielić je na pakiety i pracować z nimi.
Na przykład muszę pobrać z katalogu „Użytkownicy” następujące pola: „Data urodzenia” i dostępne role dla każdego użytkownika. prześlij to do różnych części tabelarycznych formularza. Oczywiście możesz to zrobić w jednym żądaniu, wtedy będziesz musiał iterować po rekordach lub je zwinąć, albo możesz to zrobić w ten sposób:

WYBIERZ Użytkownicy.Link AS Imię i nazwisko, Użytkownicy.Data urodzenia, Użytkownicy.Rola PUT vtUsers Z katalogu.Użytkownicy JAKO Użytkownicy; /////////////////////////////////////////////// ////////////////////////// WYBIERZ tueUsers.Imię i nazwisko, tueUsers.Data urodzenia Z tueUsers AS tueUsers GRUPA WG tueUsers.imię i nazwisko, tueUsers . Data urodzenia; /////////////////////////////////////////////// ////////////////////////// WYBIERZ wUsers.Imię i nazwisko, wUsers.Role Z wUsers AS wUsers GRUPA WG wUsers.Imię i nazwisko, wUsers.Data narodzin

tPackage = Żądanie.WykonajPakiet();

TP_BirthDate = tPackage.Upload();
TP_Roles = tPakiet.Rozładuj();

Jak widzimy, zapytanie można wykonać wsadowo, a wynik można przetworzyć w postaci tablicy. W niektórych przypadkach jest to bardzo wygodne.

15. Warunki w żądaniu zbiorczym

Przykładowo mamy żądanie zbiorcze, gdzie najpierw pobieramy pola: „Imię, Data urodzenia, Kod” z katalogu „Użytkownicy” i chcemy uzyskać rekordy z warunkami dla tych pól z katalogu „Osoby fizyczne”.

WYBIERZ Users.Individual.Name AS Imię, Users.Individual.Date of Birth AS Data urodzenia, Users.Individual.Code AS Kod MIEJSCE vtUsers Z katalogu.Users AS Users; /////////////////////////////////////////////// ////////////////////////// WYBIERZ OSOBY. Link JAKO OSOBA Z katalogu. OSOBY JAKO INDYWIDUALNE.

Możesz narzucić takie warunki:

WHERE Individuals.Code IN (WYBIERZ vtUsers.Code FROM vtUsers) ORAZ Individuals.Name IN (WYBIERZ vtUsers.Code FROM vtUsers) ORAZ Individuals.BirthDate IN (WYBIERZ vtUsers.DateBirth FROM tvUsers)

A możesz to zrobić w ten sposób:

WHERE (Individuals.Code, Individuals.Name, Individuals.Date of Birth) IN (WYBIERZ wuUsers.Code, wtoUsers.Name, wtoUsers.Date of Birth FROM wuUsers)

Ponadto konieczne jest utrzymanie porządku.

16. Wywołanie konstruktora zapytań dla „warunku” w żądaniu wsadowym

Kiedy konieczne jest nałożenie warunku, jak w powyższym przykładzie, możesz zapomnieć, jak to czy tamto pole jest wywoływane w wirtualnej tabeli.
Na przykład musisz nałożyć warunek na pole „Data urodzenia”, a w wirtualnej tabeli to pole nazywa się „Data urodzenia dłużnika”, a jeśli zapomnisz imienia, będziesz musiał wyjść z edycji warunku bez zapisz i spójrz na nazwę pola. Aby tego uniknąć, możesz zastosować następującą technikę.

Należy wstawić nawiasy po konstrukcji „B” i pozostawić pomiędzy nawiasami pustą przestrzeń (spację), wybrać tę spację i wywołać konstruktor zapytań. Projektant będzie miał dostęp do wszystkich tabel zapytania wsadowego. Technika ta działa zarówno na wirtualnych tablicach rejestrowych, jak i na zakładce „Warunki”. W tym drugim przypadku należy zaznaczyć pole „P (warunek dowolny)” i wejść w tryb edycji „F4”.

Zapytania często były wymyślane na bieżąco i służyły jedynie zilustrowaniu „technik”, które rozważałem.

Chciałem przyjrzeć się wykorzystaniu indeksów w zapytaniach, ale jest to bardzo szeroki temat. Umieszczę to w osobnym artykule lub dodam tutaj później.

aktualizacja 1. Punkty 11,12
aktualizacja2. Punkty 13,14,15,16

Używane książki:
Język zapytań „1C:Enterprise 8” - E.Yu. Chrustalewa
Rozwój zawodowy w systemie 1C:Enterprise 8.”

Język zapytań jest jednym z podstawowych mechanizmów 1C 8.3 dla programistów. Za pomocą zapytań można szybko odzyskać dowolne dane zapisane w bazie danych. Jego składnia jest bardzo podobna do SQL, ale są pewne różnice.

Główne zalety języka zapytań 1C 8.3 (8.2) w porównaniu z SQL:

  • dereferencja pól referencyjnych (odniesienie jednego lub większej liczby punktów do szczegółów obiektu);
  • praca z wynikami jest bardzo wygodna;
  • możliwość tworzenia wirtualnych tabel;
  • wniosek może zostać napisany w języku angielskim i rosyjskim;
  • możliwość blokowania danych w celu uniknięcia zakleszczeń.

Wady języka zapytań w 1C:

  • w przeciwieństwie do SQL, w zapytaniach 1C nie pozwalają na zmianę danych;
  • brak procedur przechowywanych;
  • niemożność konwersji ciągu znaków na liczbę.

Rzućmy okiem na nasz mini samouczek na temat podstawowych konstrukcji języka zapytań 1C.

Ponieważ zapytania w 1C pozwalają tylko na odbieranie danych, każde zapytanie musi zaczynać się od słowa „WYBIERZ”. Po tym poleceniu wskazane są pola, z których należy pobrać dane. Jeżeli wpiszesz „*”, wybrane zostaną wszystkie dostępne pola. Miejsce, z którego zostaną wybrane dane (dokumenty, rejestry, spisy itp.) wskazane jest po słowie „OD”.

W omówionym poniżej przykładzie nazwy całej nomenklatury wybierane są z katalogu „Nomenklatura”. Po słowie „JAK” wskazane są aliasy (nazwy) tabel i pól.

WYBIERAĆ
Nomenklatura Nazwa AS Nazwa nomenklatury
Z
Katalog.Nomenklatura AS Nomenklatura

Obok polecenia „WYBIERZ” możesz określić słowa kluczowe:

  • RÓŻNY. Zapytanie wybierze tylko wiersze, które różnią się co najmniej jednym polem (bez duplikatów).
  • PIERWSZY rz, Gdzie N– liczba wierszy od początku wyniku, które należy wybrać. Najczęściej tę konstrukcję stosuje się w połączeniu z sortowaniem (ORDER BY). Na przykład, gdy chcesz wybrać określoną liczbę dokumentów, które są aktualne według daty.
  • DOZWOLONY. Konstrukcja ta umożliwia wybranie z bazy danych tylko tych rekordów, które są dostępne dla bieżącego użytkownika. W wyniku użycia tego słowa kluczowego użytkownik otrzyma komunikat o błędzie podczas próby zapytania o rekordy, do których nie ma dostępu.

Te słowa kluczowe mogą być używane razem lub osobno.

DLA ZMIANY

Niniejsza propozycja blokuje dane, aby zapobiec wzajemnym konfliktom. Zablokowane dane nie zostaną odczytane z innego połączenia aż do zakończenia transakcji. W tej klauzuli możesz określić konkretne tabele, które mają być zablokowane. W przeciwnym razie wszyscy zostaną zablokowani. Konstrukcja dotyczy wyłącznie trybu automatycznego ryglowania.

Najczęściej przy odbiorze salda stosowana jest klauzula „DO ZMIANY”. Przecież gdy w programie pracuje jednocześnie kilku użytkowników, jeden otrzymuje salda, drugi może je zmieniać. W takim przypadku otrzymana reszta nie będzie już poprawna. Jeśli zablokujesz dane tą propozycją, to dopóki pierwszy pracownik nie otrzyma prawidłowego salda i nie wykona przy nim wszystkich niezbędnych manipulacji, drugi pracownik będzie zmuszony poczekać.

WYBIERAĆ
Wzajemne rozliczenia Pracownik,
Wzajemne rozliczenia Kwota wzajemnych rozliczeń Saldo
Z
Rejestr Akumulacji Wzajemne rozliczenia z pracownikami Salda AS Wzajemne rozliczenia
DLA ZMIANY

GDZIE

Projekt jest konieczny, aby narzucić pewnego rodzaju selekcję przesyłanym danym. W niektórych przypadkach pozyskiwania danych z rejestrów rozsądniejsze jest określenie warunków selekcji w parametrach tablic wirtualnych. W przypadku użycia opcji „WHERE” w pierwszej kolejności pobierane są wszystkie rekordy, a dopiero potem stosowana jest selekcja, co znacznie spowalnia zapytanie.

Poniżej znajduje się przykład zapytania o pozyskanie osób kontaktowych na konkretne stanowisko. Parametr wyboru ma format: &NazwaParametru (nazwa parametru jest dowolna).

WYBÓR (przypadek)

Konstrukcja umożliwia określenie warunków bezpośrednio w treści żądania.

W poniższym przykładzie „AdditionalField” będzie zawierać tekst w zależności od tego, czy dokument został zaksięgowany, czy nie:

WYBIERAĆ
WstępT&U.Link,
WYBÓR
KIEDY WstępT&U.Wykonane
WTEDY „Dokument został przyjęty!”
W przeciwnym razie „Dokument nie został wysłany...”
KONIEC JAKO Pole dodatkowe
Z
Dokument Odbiór towarów i usług JAK Warunki odbioru

DOŁĄCZYĆ

Złączenia łączą dwie tabele w oparciu o określony warunek relacji.

POŁĄCZENIE LEWE/PRAWE

Istota złączenia LEFT polega na tym, że pierwsza określona tabela jest pobierana w całości, a druga jest z nią łączona zgodnie z warunkiem połączenia. Jeśli w drugiej tabeli nie ma rekordów odpowiadających pierwszej tabeli, wówczas jako ich wartości zostaje podstawiona wartość NULL. Mówiąc najprościej, tabela główna jest pierwszą określoną tabelą, a dane drugiej tabeli (jeśli istnieją) są już zastąpione jej danymi.

Przykładowo konieczne jest uzyskanie pozycji towarowych z dokumentów „Odbiór towarów i usług”, a cen z rejestru informacyjnego „Ceny pozycji”. W takim przypadku, jeśli nie zostanie znaleziona cena dla żadnej pozycji, zamiast tego zamień NULL. Wybrane zostaną wszystkie pozycje z dokumentu niezależnie od tego czy mają cenę czy nie.

WYBIERAĆ
Nomenklatura odbioru i U,
Ceny.Cena
Z
Dokument Odbiór towarów i usług Towar JAK Odbiór Regulamin
DOŁĄCZENIE WEWNĘTRZNE RejestrInformacje.CenyNomenklatura.SliceLast AS Ceny
Otrzymanie oprogramowania i nomenklatura = Ceny. Nomenklatura

W PRAWEJ wszystko jest dokładnie odwrotnie.

PEŁNE POŁĄCZENIE

Ten typ połączenia różni się od poprzednich tym, że w rezultacie zwrócone zostaną wszystkie rekordy zarówno pierwszej, jak i drugiej tabeli. Jeśli w pierwszej lub drugiej tabeli na podstawie określonego warunku połączenia nie zostaną znalezione żadne rekordy, zamiast tego zostanie zwrócona wartość NULL.

W przypadku korzystania z połączenia pełnego w poprzednim przykładzie wybrane zostaną wszystkie pozycje towarowe z dokumentu „Odbiór towarów i usług” oraz wszystkie najnowsze ceny z rejestru „Ceny pozycji”. Wartości nieodnalezionych rekordów zarówno w pierwszej, jak i drugiej tabeli będą równe NULL.

WEWNĘTRZNE POŁĄCZENIE

Różnica między INNER JOIN a FULL JOIN polega na tym, że jeśli w co najmniej jednej tabeli nie zostanie znaleziony rekord, zapytanie w ogóle go nie wyświetli. W rezultacie wybrane zostaną tylko te pozycje pozycji z dokumentu „Odbiór towarów i usług”, dla których istnieją zapisy w rejestrze informacyjnym „Ceny pozycji”, jeśli w poprzednim przykładzie „PEŁNE” zastąpimy „WEWNĘTRZNY”.

GRUPUJ WEDŁUG

Grupowanie w zapytaniach 1C umożliwia zwijanie wierszy tabeli (pola grupujące) zgodnie z pewną wspólną cechą (pola grupujące). Pola grupujące można wyświetlić wyłącznie przy użyciu funkcji agregujących.

Wynikiem poniższego zapytania będzie lista typów produktów wraz z maksymalnymi cenami dla nich.

WYBIERAĆ
,
MAX(Cena.Cena) AS Cena
Z

GRUPUJ WEDŁUG
Ceny.Nomenklatura.Rodzaj nomenklatury

WYNIKI

W przeciwieństwie do grupowania, w przypadku korzystania z sum wyświetlane są wszystkie rekordy i dodawane są do nich wiersze sumy. Grupowanie wyświetla tylko uogólnione rekordy.

Wyniki można sumować dla całej tabeli (słowo kluczowe „OGÓLNE”), dla kilku pól, dla pól o strukturze hierarchicznej (słowa kluczowe „HIERARCHY”, „TYLKO HIERARCHIA”). Przy podsumowywaniu wyników nie ma konieczności stosowania funkcji agregujących.

Przyjrzyjmy się przykładowi podobnemu do powyższego, używając grupowania. W takim przypadku wynik zapytania zwróci nie tylko zgrupowane pola, ale także szczegółowe rekordy.

WYBIERAĆ
Ceny.Nomenklatura.Rodzaj nomenklatury AS Rodzaj nomenklatury,
Ceny. Cena AS Cena
Z
Rejestr informacji Ceny nomenklatury Migawka najnowszych cen AS
WYNIKI
MAKSYMALNA (Cena)
PRZEZ
TypNomenklatura

MAJĄCY

Operator ten jest podobny do operatora WHERE, ale jest używany tylko w przypadku funkcji agregujących. Pozostałe pola, poza tymi używanymi przez ten operator, należy zgrupować. Operator WHERE nie ma zastosowania do funkcji agregujących.

W poniższym przykładzie wybierane są ceny maksymalne artykułu, jeśli przekraczają 1000, pogrupowane według rodzaju artykułu.

WYBIERAĆ

MAX(Cena.Cena) AS Cena
Z
Rejestr informacji Ceny nomenklatury Migawka najnowszych cen AS
GRUPUJ WEDŁUG
Ceny.Nomenklatura.Rodzaj nomenklatury
MAJĄCY
MAKSYMALNE(Ceny.Cena) > 1000

SORTUJ WEDŁUG

Operator ORDER BY sortuje wynik zapytania. Aby mieć pewność, że rekordy są wyświetlane w spójnej kolejności, używana jest funkcja AUTO ORDER. Typy pierwotne są sortowane według zwykłych zasad. Typy odwołań są sortowane według identyfikatora GUID.

Przykład uzyskania listy pracowników posortowanej według nazw:

WYBIERAĆ
Pracownicy.Nazwa AS Nazwa
Z
Katalog.Pracownicy JAK Pracownicy
SORTUJ WEDŁUG
Nazwa
AUTOMATYCZNE ZAMÓWIENIE

Inne konstrukcje języka zapytań 1C

  • ŁĄCZYĆ– wyniki dwóch zapytań w jedno.
  • POŁĄCZ WSZYSTKO– podobnie jak COMBINE, ale bez grupowania identycznych wierszy.
  • PUSTY STOLIK– czasami używane podczas łączenia zapytań w celu określenia pustej zagnieżdżonej tabeli.
  • MIEJSCE– tworzy tabelę tymczasową w celu optymalizacji złożonych zapytań 1C. Takie żądania nazywane są żądaniami wsadowymi.

Funkcje języka zapytań

  • PODCIĄG obcina ciąg znaków od określonej pozycji do określonej liczby znaków.
  • ROK... DRUGI pozwalają uzyskać wybraną wartość typu numerycznego. Parametrem wejściowym jest data.
  • POCZĄTEK OKRESU i KONIEC OKRESU używane podczas pracy z datami. Rodzaj okresu (DZIEŃ, MIESIĄC, ROK itp.) wskazywany jest jako dodatkowy parametr.
  • DODATK.DATA pozwala na dodanie lub odjęcie od daty określonego czasu określonego typu (DRUGA, MINUTA, DZIEŃ itp.).
  • RÓŻNICA określa różnicę pomiędzy dwiema datami, wskazując rodzaj wartości wyjściowej (DZIEŃ, ROK, MIESIĄC itp.).
  • ISNULL zastępuje brakującą wartość określonym wyrażeniem.
  • REPREZENTACJA i LINKI REPREZENTACYJNE uzyskać ciąg znaków reprezentujący określone pole. Zastosuj odpowiednio do dowolnych wartości i tylko wartości referencyjnych.
  • TYP, WARTOŚCI TYPU służą do określenia typu parametru wejściowego.
  • POŁĄCZYĆ jest logicznym operatorem porównania dla typu wartości atrybutu.
  • WYRAZIĆ używany do konwersji wartości na żądany typ.
  • DATA CZAS pobiera wartość typu „Data” z wartości numerycznych (rok, miesiąc, dzień, godzina, minuta, sekunda).
  • OZNACZAJĄCY w żądaniu 1C służy do wskazania predefiniowanych wartości - katalogów, wyliczeń, planów typów cech. Przykład użycia: " Gdzie Osoba prawna = Wartość (Wyliczenie. Osoba prawna. Osoba fizyczna)«.

Konstruktor zapytań

Do tworzenia zapytań za pomocą 1C istnieje bardzo wygodny wbudowany mechanizm - projektant zapytań. Zawiera następujące główne zakładki:

  • „Tabele i pola” – zawiera pola do wybrania oraz ich źródła.
  • „Połączenia” – opisuje warunki struktury POŁĄCZENIE.
  • „Grupowanie” – zawiera opis struktur grupujących oraz zsumowanych na ich podstawie pól.
  • „Warunki” – odpowiada za wybór danych w zapytaniu.
  • „Zaawansowane” – dodatkowe parametry zapytania, takie jak słowa kluczowe dla komendy „WYBIERZ” itp.
  • „Złączenia/Aliasy” - wskazane są możliwości łączenia tabel i określone aliasy (konstrukcja „JAK”).
  • „Zamówienie” odpowiada za sortowanie wyników zapytań.
  • „Sumy” – podobne do zakładki „Grupowanie”, ale używane w konstrukcji „SUMY”.

Treść samego żądania można wyświetlić, klikając przycisk „Zapytanie” w lewym dolnym rogu. W tej formie można go poprawić ręcznie lub skopiować.


Poproś o konsolę

Aby szybko wyświetlić wynik zapytania w trybie korporacyjnym lub debugować złożone zapytania, użyj . Zawiera tekst żądania, ustawia parametry i wyświetla wynik.

Konsolę zapytań możesz pobrać na dysku ITS lub poprzez plik .

W artykule przedstawiono przydatne techniki pracy z zapytaniami 1C v.8.2, a także informacje, które nie są dobrze znane na temat języka zapytań. Nie staram się podawać pełnego opisu języka zapytań, ale chcę zatrzymać się tylko na niektórych punktach, które mogą być dla kogoś przydatne.

Zacznijmy więc. Prośba jest przedmiotem specjalnym w 1C 8.2, który służy do generowania i wykonywania zapytań do tabel bazy danych w systemie. Aby wykonać zapytanie, musisz utworzyć tekst zapytania, który opisuje, które tabele zostaną użyte jako źródła danych zapytania, które pola należy wybrać, jakie sortowanie i grupowanie zastosować itp. Więcej o zapytaniach możesz przeczytać w książce „Przewodnik programisty 1C 8.2”. Język zapytań 1C 8.2 jest bardzo podobny pod względem składni do innych języków zapytań do baz danych SQL, ale istnieją również różnice. Wśród głównych zalet wbudowanego języka zapytań warto zwrócić uwagę na dereferencję pól, obecność wirtualnych tabel, wygodną pracę z sumami i pola bez typu w zapytaniach. Wadą jest to, że nie można używać zapytania jako pola wyjściowego, nie można używać procedur składowanych i nie można konwertować ciągu znaków na liczbę.

Punkt po punkcie przekażę informacje i zalecenia dotyczące języka zapytań:
1. Aby zwiększyć czytelność żądania i zmniejszyć liczbę parametrów żądania, możesz użyć literału, aby uzyskać dostęp do predefiniowanych danych konfiguracyjnych w żądaniu WARTOŚĆ (REPREZENTACJA WARTOŚCI). Jako reprezentacja wartości, wartości wyliczeń, predefiniowane dane katalogów, plany typów obliczeń, plany typów cech, plany kont, puste łącza, wartości punktów trasy, wartości transferów systemowych ( na przykład Typ ruchu akumulacyjnego, Typ konta).
Przykłady:

GDZIE Miasto = WARTOŚĆ(Katalog.Miasta.Moskwa)
GDZIE Miasto = WARTOŚĆ(Directory.Cities.EmptyLink)
WHEREProductType = WARTOŚĆ(Enumeration.ProductTypes.Service)
WHEREmovementType = WARTOŚĆ (MovementTypeAccumulation.Incoming)
GDZIE jest punkt trasy =
WARTOŚĆ(BusinessProcess.Agreement.RoutePoint.Agreement)

Wyrażenie w nawiasach zawsze zaczyna się od pojedynczego słowa (Katalog, Wyliczenie itp.), które odpowiada typowi predefiniowanej wartości.

2. Automatyczne zamawianie w zapytaniu może znacznie spowolnić proces. Jeśli sortowanie nie jest potrzebne, lepiej w ogóle go nie używać. W wielu przypadkach bardziej efektywne jest zapisanie sortowania za pomocą słowa kluczowego SORTUJ WEDŁUG.

3. Należy zadbać o to, aby przy korzystaniu z aliasów nie pojawiało się niejednoznaczne pole. W przeciwnym razie system nie będzie wiedział, do którego obiektu należy uzyskać dostęp.
Przykład żądania z niejednoznacznym polem:
WYBIERAĆ
Nomenklatura.Link,
Pozostałe towaryPozostałe.IlośćPozostała
Z
Katalog.Nomenklatura AS Nomenklatura
POŁĄCZENIE LEWE Zarejestruj nagromadzenia Pozostały towar Pozostały AS Pozostały towar Pozostały
Oprogramowanie Pozostałe produktyRemaining.Nomenclature = Nomenclature.Link
Należy skorygować alias tabeli np. tak: „Directory.Nomenclature AS Nomenclature1”, a „Nomenclature.Link” należy poprawić odpowiednio do „Nomenclature1.Link”.

4.Czasami przydatne jest uzyskanie reprezentacji pól referencyjnych za pomocą słowa kluczowego WYDAJNOŚĆ wraz z linkiem, tak aby nie było ponownego dostępu do bazy. Jest to przydatne podczas wyświetlania wyniku zapytania w tabeli.
Przykład:
WYBIERAĆ
REPREZENTACJA(Dokument.Kontrahent) JAKO Odbiorca,
PREZENTACJA(Dokument.Baza)
Z
Dokument. Faktura jako dokument

5. Użyj w żądaniu EXPRESS (pole jako typ) pozwala na usunięcie zbędnych tabel z połączenia z polem o złożonym typie danych. Przyspiesza to w ten sposób realizację żądania.
Przykład (rejestrator to pole typu złożonego dla tabeli fizycznej rejestru nagromadzenia Pozostałych Towarów, w żądaniu wybierana jest Data i Numer dokumentów Odbioru Towaru, natomiast przy dostępie do szczegółów dokumentu Data i Numer poprzez Rejestratora, nie ma wielokrotnego powiązania tabeli rejestrowej z tabelami dokumentów będących rejestratorami dla rejestru Pozostałych Towarów):
WYBIERZ RÓŻNE[b] EKSPRESOWY (Pozostały towar. Dokument rejestracyjny AS. Odbiór towaru). Numer JAKO NUMER ODBIORU,
[b] EKSPRESOWY (Pozostałe towary. Dokument rejestracyjny AS. Odbiór towarów). Data JAKO DATA ODBIORU
[b] OD Rejestr Nagromadzeń Pozostały Towar Jako Pozostały Towar GDZIE (EKSPRESOWY(Pozostałe towary.Dokument rejestratora AS.Odbiór towarów) NIE JEST NULL)

6. Jeżeli w konfiguracji 1C znajdują się użytkownicy, którzy mają ograniczone uprawnienia do niektórych obiektów konfiguracyjnych, w żądaniu do takich obiektów należy użyć słowa kluczowego DOZWOLONY aby żądanie zostało wykonane bez błędu (Wybierz opcję Dozwolone...)

7. Podczas łączenia tabel zawierających tabele zagnieżdżone (np. Dokument z częścią tabelaryczną) słowo kluczowe może się przydać OPRÓŻNIJ TABELĘ gdy np. jeden z dokumentów nie posiada części tabelarycznej.
Przykład:
WYBIERZ numer łącza, pustą tabelę. (nr, pozycja, ilość) jako kompozycję

POŁĄCZ WSZYSTKO
WYBIERZ numer łącza, skład. (numer wiersza, nazewnictwo, ilość)
Z dokumentu.Faktura

8.Przy pracy ze złączeniami tabel zawierających po jednym wierszu może zaistnieć konieczność połączenia wierszy tabel (w obu tabelach nie ma pola, za pomocą którego można by je połączyć). Można to osiągnąć stosując konstrukcję „ Tabela PEŁNYCH POŁĄCZEŃ według wartości TRUE" Jeżeli tabele mają więcej niż jeden wiersz, wynikiem będzie liczba wierszy równa iloczynowi liczby wierszy obu tabel. Jeżeli w jednej tabeli znajduje się O wierszy, to liczba wierszy w wynikowej tabeli będzie równa liczbie wierszy w drugiej tabeli. Aby połączyć takie tabele, można również użyć iloczynu kartezjańskiego tabel, w którym w tabeli wynikowej pojawią się wszystkie kombinacje wierszy z obu tabel. Musimy pamiętać, że jeśli w jednej z tabel będzie 0 wierszy, to iloczyn kartezjański będzie wynosił 0, więc lepsze będzie pełne złączenie. Ogólnie rzecz biorąc, zamiast pełnego połączenia PRAWDA Można użyć dowolnego innego rodzaju złączenia, ale w tym przypadku możliwe jest również, że tabela wynikowa będzie miała 0 wierszy, nawet jeśli jedna z tabel ma niezerową liczbę wierszy. W przypadku złączenia pełnego taka sytuacja wystąpi tylko w jednym przypadku, gdy liczba wierszy w obu tabelach będzie równa 0. Jeśli wiesz, że w tabeli jest dokładnie co najmniej jeden wiersz, możesz użyć POŁĄCZENIE LEWE z inną tabelą z warunkiem PRAWDA.
Przykład (co prawda wymyślony dla pełnego łączenia):
WYBIERAĆ
Pierwszy 1
Płeć.Link,
K. Kontrahent
Z
Wyliczenie Płeć AS Płeć
PEŁNE POŁĄCZENIE (Wybierz pierwsze 1 D. Kontrahent Z dokumentu. Sprzedaż towarów JAK D Umówić się D. Moment czasu) JAK TO ZROBIĆ
WŁ.(PRAWDA)

9. Aby uzyskać unikalne rekordy dla określonego pola, bardziej poprawne jest użycie słowa kluczowego zamiast grupowania RÓŻNY w żądaniu, ponieważ ta konstrukcja jest znacznie jaśniejsza i słowo kluczowe GRUPUJ WEDŁUG ma szersze zastosowanie i jest często używany, jeśli dodatkowo konieczne jest obliczenie funkcji agregujących przez grupowanie. W niektórych przypadkach konieczne jest wyprowadzenie ograniczonej liczby linii. W tym celu należy w opisie zgłoszenia podać słowo kluczowe PIERWSZY a po nim - wymagana liczba linii.
Przykład dla PIERWSZY:
Wybierz Pierwsze 5
Katalog.Nomenklatura.Nazwa,
Katalog.Nomenklatura.Cena zakupu
Sortuj według
Katalog.Nomenklatura.PurchaseCena malejąco
Przykład dla RÓŻNY:
Wybierz opcję Różne
Dokument.Materiał eksploatacyjny.Kontrahent

10.Funkcji agregujących w zapytaniu można używać bez słowa kluczowego GRUPA. W takim przypadku wszystkie wyniki zostaną zgrupowane w jednej linii.
Przykład:
Wybierać
Kwota (faktura.kwota) jako kwota
Z
Dokument.Faktura.Skład jako faktura

11.W zapytaniach w polach selekcji masz swobodny dostęp do szczegółów pól selekcji. Ta funkcja nazywa się dereferencją wybranego pola. Jeżeli źródłem danych jest tabela zagnieżdżona (tabelaryczna część dokumentu), to w polach wyboru można także uzyskać dostęp do pól tabeli głównej (np. poprzez pole Link można uzyskać dostęp do pola tabeli głównej Konto)
Przykład:
WYBIERAĆ[B] Odbiór towarów i usług Towary Ilość AS Ilość, Odbiór towarów i usług. Towar. Link. Kontrahent Z GDZIE
Stosowanie dereferencji pól ma jedną cechę charakterystyczną, jeśli w żądaniu znajdują się grupy. W przypadku zapytań z grupowaniami na listach pól zapytań można swobodnie uzyskać dostęp do szczegółów pól grupujących.
Przykład:
WYBIERAĆ
Odbiór Towarów i Usług Towarów Nomenklatura,
Odbiór towarów i usług Towary Nomenklatura Kod,
SUMA (Odbiór towarów i usług Towary. Ilość) AS Ilość,
Odbiór Towarów i Usług Towar. Link. Kontrahent,
Odbiór towarów i usług.Towary.Połączenie.Data
Z
Dokument Odbiór towarów i usług Towar JAK Odbiór towarów i usług Towary
GDZIE
Odbiór towarów i usługGoods.Link = &Link
GRUPUJ WEDŁUG
Odbiór Towarów i Usług Towarów Nomenklatura,
Odbiór towarów i usługTowar.Link
Pomoc 1C mówi, że jeśli istnieje grupowanie, w polach wyboru zapytania mogą brać udział tylko pola grupujące i funkcje agregujące dla pól wyboru. Istnieje jeden wyjątkowy przypadek, gdy funkcje agregujące są stosowane do pól zagnieżdżonej tabeli. W tym przypadku na liście pól selekcji możliwy jest dostęp do pól tabeli najwyższego poziomu, bez grupowania wyników według tych pól.
Przykład:
WYBIERAĆ
Odbiór towarów i usług Towary (SUMA (ilość), nomenklatura),
Odbiór Towarów i Usług Link,
Odbiór towarów i usług Kontrahent
Z
Dokument Odbiór towarów i usług JAK Odbiór towarów i usług
GRUPUJ WEDŁUG
Odbiór towarów i usług Towary (Nomenklatura)

12. Czasami zamiast określać jakiekolwiek pole w grupowaniu, warto w polach wyboru zapytania umieścić następujący parametr:
WYBIERAĆ DocProducts.Nomenklatura, &Kontrahent, &Okres, SUMA(DocProducts.Quantity * DocProducts.K) AS Ilość, SUMA(DocProducts.Amount) JAKO Kwota Z Dokument.Dopuszczenie.Produkty AS DocProducts GDZIE DocProducts.Link = &Link
GRUPUJ WEDŁUG DocProducts.Nomenklatura
A następnie ustaw parametr w treści żądania:
Request.SetParameter("&Konto", WybierzKonto);
Query.SetParameter("&Kropka", Data);

13. W zapytaniach uniwersalnych parametry można stosować w opisie źródeł danych zapytania, w warunkach GDZIE, w warunkach łączenia tabel i parametrach tabel wirtualnych. Istnieją dwie techniki tworzenia zapytań ogólnych:
A) wykorzystanie mechanizmu łączenia ciągów znaków, dodanie zmiennych do tekstu żądania;
Przykład 1:

OrderingType =?(SOME ZMIENNA, „”, „DESC”);
Query.Text = "Wybierz... Ułóż WEDŁUG pola 1 " + Typ zamówienia + "...";
Przykład 2:
Query.Text = "Wybierz pole 1...";

Jeśli JAKAŚ ZMIENNA = 1 To
Żądanie.Text = Żądanie.Tekst + ",Pole2 ...";
koniecJeśli;
B) użyj parametrów w różnych częściach żądania (na przykład w sekcji źródeł danych żądania), a następnie wbudowanej metody językowej - STREPLACE(). Projektując zapytania uniwersalne, warto zapoznać się z właściwościami obiektów METADANE(), za pomocą którego możesz określić nazwę tabeli dla jakiegoś linku (na przykład dla dokumentu będzie to mniej więcej tak - Link . METADATA().NAME), przekazany przez parametr do jakiejś uniwersalnej procedury.
Przykład:
Wybierać
DocTch.Nomenklatura,
...
Z
&Niektóre DocTC JAKO DocTC
Następnie ustaw parametr w treści żądania
Request.Text = StrReplace(Request.Text, "&SomeDocTCH", "Dokument."+Link.Metadata().Nazwa+.Produkty");

Parametry mogą być używane w warunkach zapytania, aby włączyć warunek opcjonalny &Parametr LUB NIE SomeWłaściwość:
Request.SetParameter(“&Parametr”, “Kontrahent.Name=””Iwanow”””);
Używając literału PRAWDA możesz usunąć niektóre filtry z żądania
Request.SetParameter("&Parametr", True);

14. Bardzo przydatne w kreatorze zapytań jest polecenie menu kontekstowego tabeli - " Zmień nazwę tabeli...", za pomocą którego można wymyślić jakąś uogólnioną nazwę źródła danych. Aby utworzyć zapytania do tabel tego samego typu, o podobnej strukturze, przydatne może się okazać, aby druga tabela skopiowała tekst zapytania z pierwszej tabeli, przejdź do okna projektanta zapytań i wybierz pozycję z menu kontekstowego tabeli - Zamień tabelę... i wybierz drugą tabelę.

15. Podczas pracy z tworzeniem zapytań zagnieżdżonych w sekcjach warunków lub parametrów tabel wirtualnych projektanta zapytań stosowana jest technika podświetlania spacji w nawiasach, po czym w menu kontekstowym pojawia się pozycja „Projektant zapytań”, oraz podczas edycji zapytania zagnieżdżonego w warunku podświetlone zostanie całe zapytanie w nawiasach.
Przykład zagnieżdżonego zapytania:
Produkt B (Wybierz produkt...)

16. Projektując raporty ACS w zapytaniach do rejestrów bilansowych, wygodniej i poprawniej jest zastosować wyrażenie jako parametr Okres AddToDate(EndPeriod(okres, DZIEŃ), DRUGI, 1), gdyż salda wirtualne uzyskiwane są na początku okresu, nie licząc ostatniej sekundy. W przypadku dokumentów nie można stosować techniki +1 sekundy: zgodnie z nowym sposobem księgowania dokumentów, salda rejestrowe muszą wpłynąć za Okres określony przez obiekt Granica z momentem dokumentu obejmującym (a nie datą dokument +1 sekunda!), a według starego sposobu wysyłania - w momencie powstania dokumentu (a nie w dacie dokumentu!). Analizując obroty lub dane za okres, wygodnie jest dodać parametr z typem Okres standardowy(w tym przypadku nie ma konieczności podawania ostatniej daty interwału na koniec dnia). W przypadku standardowego pola „Początek okresu” w polu „Wyrażenie” należy wpisać „&Kropka.Data rozpoczęcia" A dla standardowego pola „Koniec okresu” w polu „Wyrażenie” wpisz „ &Okres.Data zakończenia”. Wiele przydatnych informacji na temat języka zapytań można znaleźć nie w asystencie składni, ale w pełnej pomocy konfiguratora 1C 8.2 (przycisk F1)

17. Funkcja zapytania CzyNull(wygodniej jest napisać wersję angielską CzyNull) jest zwykle używany do pozbycia się wartości Null dla numerycznych pól zapytań. W niektórych przypadkach można zastosować na przykład całkowite połączenie dwóch tabel IsNull (Parametr 1, Parametr 2) może z powodzeniem zastąpić projekt WYBÓR KIEDY… WTEDY… INACZEJ… KONIEC, gdy dla dowolnego pola wartości NULL mogą znajdować się zarówno w pierwszej tabeli, jak i w drugiej (ta konstrukcja pozwala uzyskać dla pola wartość różną od Null). Ale musimy o tym pamiętać, w przeciwieństwie do operatora warunkowego WYBÓR funkcjonować CzyNull konwertuje typ drugiego argumentu na typ pierwszego argumentu, co należy wziąć pod uwagę, jeśli typy argumentów są różne!
Przykład:
IsNull(Reg.Remaining,0)
IsNull(Doc.Product,Doc1.Item)

18. W konstrukcji warunkowej WYBÓR Istnieje alternatywna składnia prostego przypadku testowania równości do określonej wartości, jest ona jednak nieudokumentowana:
Wyrażenie wyboru Gdy 1 Następnie „wysoki”, gdy 2 Następnie „średni” W innym przypadku „niski” koniec

19. Operator sprawdzający wartość NULL Tak, zero(Możemy polecić użycie wersji angielskiej Jest zerowy). Konstrukcja ta pojawiła się, ponieważ każda operacja porównująca dwie wartości, z których przynajmniej jedna ma wartość Null, jest zawsze fałszywa. Pisać Gdzie nazwa = Null zło. Interesująca jest także forma negacji tego operatora Brak zera- źle, ale dobrze Tak Nie Null lub kształt Nie (pole 1 ma wartość null)- jest to znacząca różnica w stosunku do wszystkich operatorów używanych w połączeniu z operatorem He.

20. Czasami przydatna jest forma operatora W aby sprawdzić dopasowanie do jednej z wymienionych wartości.
Przykład:
...Gdzie jest Produkt.Nazwa B („Sprzęt AGD”, „Komputery”)
W przypadku podręczników przydatny może być formularz operatora W sprawdzanie członkostwa w hierarchii.
Przykład:
...Gdzie jest nomenklatura W HIERARCHII (&Grupa)
Operator W często używane do sprawdzania, czy wartość jest uwzględniona w wyniku podzapytania.
Przykład:
...Gdzie Nomenklatura.Link B (Wybierz Nomenklaturę.Link...).
W podzapytaniu możesz uzyskać dostęp do zewnętrznych pól zapytania w warunku.
Przykład:
// Wybierz nazwy produktów, które były obecne
// na fakturach
WYBIERAĆ
Produkty.Nazwa
Z
Katalog.Nomenklatura JAK Produkty
GDZIE
Produkty.Link B
(WYBIERAĆ
Skład faktury. Nazewnictwo
Z
Dokument.Faktura.Skład JAKO Skład faktury
GDZIE
InvoiceContent.Nomenclature = Products.Link)
Operacja W można używać z tablicami, listami wartości, tabelami wartości, zagnieżdżonymi zapytaniami. W takim przypadku możliwe jest zmniejszenie warunków
Składnia podzapytania
(wyrażenie1, wyrażenie2,...,wyrażenieN) In (Wybierz wyrażenie1, wyrażenie2,...,wyrażenieN...)
Składnia tabeli wartości
(wyrażenie1, wyrażenie2,...,wyrażenieN) In (&TK), gdzie używanych jest pierwszych N kolumn w tabeli wartości TK

20. W Internecie krąży dowcip o tym, jak zawsze postępuje projektant zapytań LEWYłączenie tabel (i zamiana ich), niezależnie od tego, jak określimy PRAWIDŁOWY:
1C: Przedsiębiorstwo uwielbia „w lewo”.

21. Wygodne jest debugowanie złożonych zapytań w konsoli zapytań. Jest ich wiele w Internecie. Po debugowaniu zapytania możesz je skopiować, a w projektancie zapytań znajduje się wspaniały przycisk „ Wniosek", gdzie możesz go wkleić w tej samej formie i zapisać (wcześniej można było go jedynie skopiować w konfiguratorze i sformatować żądanie za pomocą znaku podziału wiersza). W oknie, które otwiera się po kliknięciu przycisku „Zapytanie”, możesz edytować zapytanie i wyświetlić wynik wykonania, co jest dość wygodne.

22. Projektując raporty ACS należy pamiętać, że w przypadku konieczności zapewnienia filtrowania według określonego pola nie jest konieczne dodawanie parametru do treści żądania. Konstruktor zapytań ma zakładkę „ Skład danych", gdzie możesz dodać parametry do warunków. Dodatkowo na poziomie raportu ACS dostępna jest zakładka warunki, w której możesz dodać dowolne warunki i zapisać je w szybkich ustawieniach. W tym przypadku warunki będą uniwersalne (równość, nierówność, przynależność, umieszczenie na liście itp.).

23. Podczas pracy z dokumentami może zaistnieć potrzeba dodania sortowania według pola tabeli wirtualnej CHWILA CZASU, ale pech - w zapytaniach zagnieżdżonych sortowanie według tego pola nie działa poprawnie. Taniec z tamburynami pomaga: sortowanie według wirtualnego pola CHWILA CZASU zostaje zastąpiony dwoma rodzajami sortowania: według daty i według linku. Możesz także rozwiązać problem za pomocą tabeli tymczasowej, przenosząc zagnieżdżone zapytanie do osobnego zapytania. W wielu wersjach ta funkcja lub błąd nie został naprawiony.
Przykład nieprawidłowo działającego żądania, które otrzymuje ostatni zaksięgowany dokument dla określonego kontrahenta (a raczej tabelaryczną część dokumentu):

WYBIERAĆ
Produkty eksploatacyjne.Link,
Materiały eksploatacyjne.Numer linii,
Produkty eksploatacyjne.Produkt,
Przedmioty eksploatacyjne. Ilość,
Produkty eksploatacyjne Cena,
Przedmioty eksploatacyjne.Ilość
Z

GDZIE
Materiały eksploatacyjne Link B
(WYBIERZ TOP 1
D. Link
Z
Dokument.Materiał eksploatacyjny AS D
GDZIE
D. Link Przeprowadzono

ZAMÓW PRZEZ D. Link Moment czasu MALEJĄCY)

Możliwe rozwiązania:
A) Zamień na SORTUJ WEDŁUG NA
ZAMÓW PRZEZ D.Data OPIS.
ZAMÓW PRZEZ D.Link Malejąco

B) Możesz przenieść zagnieżdżone zapytanie do tabeli tymczasowej:
WYBIERZ TOP 1
D. Link
WSTAW TZLink
Z
Dokument.Materiał eksploatacyjny AS D
GDZIE
D. Link Przeprowadzono
Oraz D.Kontrahent = &Kontrahent

SORTUJ WEDŁUG
D. Połączenie Moment czasu ZALEŻAJĄCY
;

////////////////////////////////////////////////////////////////////////////////
WYBIERAĆ
Produkty eksploatacyjne.Link,
Materiały eksploatacyjne.Numer linii,
Produkty eksploatacyjne.Produkt,
Przedmioty eksploatacyjne. Ilość,
Produkty eksploatacyjne Cena,
Przedmioty eksploatacyjne.Ilość
Z
Dokument.Materiały eksploatacyjne.Towary AS Materiały eksploatacyjne
GDZIE
Materiały eksploatacyjne Link B
(WYBIERAĆ
T.Link
Z
TZLink AS T)
C) Można odwołać się do głównej tabeli dokumentu, a dopiero potem do części tabelarycznej
WYBIERZ TOP 1
Materiały eksploatacyjne.Link,
Materiały eksploatacyjne. Towary.(
Połączyć,
Numer kolejki,
Produkt,
Ilość,
Cena,
Suma
)
Z
Dokument.Materiały eksploatacyjne JAKO Materiały eksploatacyjne
GDZIE
Wydatek.Kontrahent = &Kontrahent
I materiały eksploatacyjne. Przeprowadzone

SORTUJ WEDŁUG
Materiał eksploatacyjny. Moment ZMNIEJSZENIA

24. Wchodząc do tabeli głównej dokumentu (katalogu) można także uzyskać dostęp do danych w tabeli podrzędnej (części tabelarycznej). Ta szansa nazywa się wyłuskiwanie pól tabeli. Przykładowym zadaniem jest wyszukiwanie dokumentów zawierających konkretny produkt w sekcji tabelarycznej.
Przykład:
Wybierz Receipt.Link Z Document.Receipt gdzie Receipt.Goods.Nomenclature = &Nomenklatura.

Przewaga tego zapytania nad zapytaniem w zagnieżdżonej tabeli Receipt.Goods polega na tym, że jeśli w dokumentach znajdują się duplikaty, wynik zapytania zwróci tylko unikalne dokumenty bez użycia słowa kluczowego RÓŻNY.
Porównywać:
Wybierz różne produkty. Link z dokumentu. Paragon. Produkty jako produkty, gdzie Produkty. Nomenklatura = &Nomenklatura.
To chyba wszystko na ten temat. Oczywiste jest, że w języku zapytań nadal istnieje wiele pytań, których nie omówiłem. Do napisania tego artykułu wykorzystałem informacje, które otrzymałem po ukończeniu kursu podstawowego 1C 8.2 spec8.ru, a także z książki „Przewodnik programisty 1C 8.2” i Internetu.
Dziękuje za wszystko!

Aby wyświetlić pola referencyjne w raporcie, musisz uzyskać reprezentację pola referencyjnego w żądaniu, a podczas jego wyprowadzania użyj go, a nie samego łącza. W tej sekcji opisano niektóre funkcje pola „Widok” oraz funkcje uzyskiwania widoków - View(). Więcej informacji na temat wyprowadzania pól referencyjnych można znaleźć w sekcji „Wyprowadzanie pól referencyjnych”.

Reprezentacja terenowa

Każda tabela obiektów w bazie danych posiada wirtualne pole „Widok”. Pole to zawiera tekstową reprezentację obiektu. W zapytaniu można uzyskać to pole w taki sam sposób, jak inne pola tabeli, ale nie można na nim wykonywać żadnych operacji. Cecha ta wynika z faktu, że pole to jest wirtualne i tak naprawdę przy pobieraniu tego pola z bazy zapytanie otrzymuje kilka pól, a po otrzymaniu wartości pola z wyniku zapytania dokonuje konwersji otrzymanych wartości w sznurek. Zatem jedyne, co możesz zrobić z polem Widok, to umieścić je w wyniku zapytania.

W rezultacie nie zaleca się sortowania wyniku zapytania według pola „Widok”, ponieważ nie przyniesie to pożądanego rezultatu - wynik zapytania zostanie uporządkowany w kolejności rosnącej odniesień do obiektów. Więcej na ten temat przeczytasz w rozdziale „Funkcje porządkowania według pól referencyjnych”.

Widok funkcji()

Funkcja widoku ma na celu uzyskanie tekstowej reprezentacji dowolnej wartości, którą można uzyskać za pomocą języka zapytań. Funkcja View() działa zarówno dla typów referencyjnych, jak i pierwotnych. W przypadku typów referencyjnych wynik funkcji jest całkowicie podobny do otrzymania pola „Reprezentacja” z referencji przekazanej jako parametr do funkcji. W przypadku typów pierwotnych wynikiem funkcji jest ciąg znaków, na który została przekonwertowana wartość przekazana jako parametr. Osobliwością tej funkcji jest to, że jej wyniku nie można użyć w wyrażeniu. Cecha ta wynika z faktu, że konwersja wartości na ciąg znaków odbywa się już w momencie otrzymania danych z wyniku zapytania, gdyż Konwersja dowolnej wartości na ciąg znaków podczas wykonywania żądania na serwerze nie jest przeprowadzana, ponieważ podczas konwersji wartości na ciąg należy wziąć pod uwagę ustawienia lokalne.

Korzystanie z funkcji View() ma kilka zalet w porównaniu z użyciem pola View. Przykładowo w przypadku gdy pole z którego wyprowadzona jest reprezentacja może zawierać zarówno typ referencyjny jak i pierwotny, pobranie z takiego pola pola Representation wykropkowanego spowoduje, że reprezentacje dla wartości typu pierwotnego nie zostaną uzyskane. Jeżeli jednak dla takiego pola zostanie użyta funkcja Representation(), wówczas otrzymana zostanie reprezentacja łańcuchowa niezależnie od rodzaju wartości zawartej w polu. Dodatkowo, jeśli do pola będącego odwołaniem do więcej niż trzech tabel zostanie zastosowana funkcja View(), język zapytań pobiera z bazy danych tylko wartości referencyjne, a wartości widoku pobiera za pomocą jednego lub większej liczby dodatkowych zapytań. Takie zachowanie pozwala efektywniej uzyskiwać widoki dla pól, które odwołują się do dużej liczby tabel (np. do dowolnego katalogu), ze względu na to, że wykonujące zapytanie nie będzie zawierało dużej liczby połączeń niezbędnych do uzyskania pola tworzące widok.

Użycie funkcji Representation() może być przydatne także przy uzyskaniu reprezentacji pola – wyliczenia, w przypadku realizacji żądania poprzez połączenie COM

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, manipulacje te wykonywane są 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 tym przykładzie moglibyśmy spełnić następujący warunek:

„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 otrzymania > 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 Rejestrator 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 Towary Towary,
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 Towary

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 Towary Towary,
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 Towary

GRUPUJ WEDŁUG
Odbiór Towarów i Usług Towary.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 praktycznych zastosowaniach 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 własną wartością. Najczęściej używane 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 w oparciu o określony warunek. 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 = Nazwa Banków”. Jeżeli warunek nie jest spełniony, pole Bank zostanie ustawione na wartość ZERO.

PRAWO DOŁĄCZ w języku 1C 8.3 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:

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łnej tym, że wyświetla tylko te rekordy, które według zadanego warunku można było połączyć.

Na przykład:

Z
Katalog Kontrahenci 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!

KATEGORIE

POPULARNE ARTYKUŁY

2023 „kingad.ru” - badanie ultrasonograficzne narządów ludzkich