Wszystko o tuningu samochodów

Tworzenie i praca z żądaniami (dla początkujących). Tworzenie i praca z zapytaniami (dla początkujących) 1c typ dokumentu w zapytaniu

Klyuev V.V.

http://prof1c.kklab.ru

Stworzenie ipraca z prośbami. Najprostsze operacjedla początkujących(Regularna aplikacja)

Dzień dobry

Dzisiaj chcę wam opowiedzieć, jak rozpocząć pracę z zapytaniami i nauczyć się (oczywiście stopniowo), jak pracować z zapytaniami w 1C. Dla tych, którzy znają zapytania MS
SQL będzie oczywiście dużo prostszy.

Otwórzmy zatem konfigurator i utwórzmy nowe przetwarzanie zewnętrzne.

Po czym otrzymamy okno z naszą obróbką. Przejdźmy bezpośrednio do eksperymentów na żądaniach, w tym celu utworzymy w naszym przetwarzaniu nowy formularz - i w tym celu na liście (białe pole) wybierz Formularze - i kliknij (+) Dodaj, zaakceptuj wszystkie proponowane domyślne parametry formularza i kliknij gotowe.

Dlatego stworzyliśmy dla Ciebie pusty formularz z przyciskami i. W oknie z formularzem wybierz zakładki i od razu przejdź do pisania kodu, który zostanie wykonany po kliknięciu przycisku Wykonaj. Aby to zrobić, znajdź procedurę ButtonExecutePress(Button)

i napisz następujący kod:

Procedura ButtonExecutePress(Button) Request = Nowe żądanie() ; Wniosek. Tekst = „WYBIERZ | * | Z| Dokument . Faktura płatna Kupującemu" ; Wynik = Zapytanie. Wykonaj (). Rozładuj (); Koniec procedury

Skomentujmy to, co tutaj napisaliśmy. Do wniosku wybraliśmy wszystkie dokumenty „Faktura do zapłaty na rzecz Kupującego”. Od razu zaznaczam, że w zależności od konfiguracji w jakiej eksperymentujesz, przyjrzyj się składowi dokumentów w swojej konfiguracji i zamiast wskazanej przeze mnie „Faktury do zapłaty na rzecz Kupującego” podstaw dowolny obiekt Dokumentu z lista dokumentów w Twojej konfiguracji, najlepiej tak, aby dokumenty tego typu były tworzone w bazie informacji, aby uniknąć pustego wyniku zapytania. Chcę również zwrócić uwagę na ważną kwestię - jeśli takich dokumentów jest zbyt wiele, wówczas realizacja żądania może zająć trochę czasu - z uwagi na to, że nie ograniczamy żądania do warunków i zaznaczamy wszystkie pola - co oznacza gwiazdka ( *) Powiedz nam.

Za pomocą słowa kluczowego „Wybierz” zamawiamy naszą prośbę o wybranie wszystkich pól (*) (szczegółów dokumentu) z dokumentu „Faktura do zapłaty dla Kupującego”.

Ważny:
Chciałbym również zauważyć, że pisząc język zapytań, obiekty konfiguracyjne powinny być adresowane w liczbie pojedynczej, a nie w liczbie mnogiej. W tym
w przypadku obiektu Dokumenty w konfiguracji (gałąź Dokumenty) - żądanie zawiera Dokument. Także do składu dokumentów – przechodzimy przez kropkę (.) – i nazwy dokumentu.

Wynik żądania otrzymujemy w postaci tabeli wartości, o czym świadczy zastosowana przez nas metoda (parametr) - Upload, czyli najpierw wykonaliśmy
request (Uruchom), a dopiero potem wgraj wynik zapytania do tabeli wartości i tabela wartości znajduje się w zmiennej Result.

Następnie zapisujemy nasze przetwarzanie do pliku, w tym celu klikamy Plik->Zapisz jako i wpisujemy nazwę pliku, dla mojego przetwarzania ustawiam nazwę „ExternalProcessing1Demo”, aby nie szukać przetwarzania przez dłuższy czas, możesz zapisać go na pulpicie, wtedy będziemy musieli go otworzyć)).

Teraz nauczmy się trochę podstaw debugowania. Aby to zrobić, teraz w polu obok tekstu Wynik = ... kliknij dwukrotnie lewym przyciskiem myszy, aby pojawiło się czerwone kółko, powinieneś otrzymać coś takiego:

Zatem ustawiliśmy teraz punkt przerwania na linii z wynikiem, teraz uruchommy konfigurację do debugowania naciskając klawisz (F 5) lub przycisk
na pasku narzędzi:

Teraz w trybie 1C:Enterprise, który uruchomiliśmy, otwórzmy zapisany plik przetwarzania->Otwórz i znajdź miejsce, w którym zapisałeś plik przetwarzania, wybierz go i kliknij Otwórz. Kliknij przycisk „Uruchom” w naszym przetwarzaniu. Jeśli wszystko zrobiłeś poprawnie, automatycznie przejdziesz do trybu konfiguratora i w miejscu, w którym został zainstalowany nasz punkt przerwania, zobaczysz następujący komunikat:

Na naszym okręgu pojawiła się strzałka - przeszliśmy do wykonywania naszego kodu krok po kroku i wtedy zobaczymy najciekawszą rzecz. Jeśli zrobiłeś wszystko poprawnie, teraz możesz uzyskać wynik żądania.

Aby zwizualizować żądanie wykonaj następujące czynności: W górnym menu konfiguratora znajdź menu Debugowanie i wybierz polecenie Tableau.

Na dole okna konfiguratora otworzy się puste okno -> Tableau. W tym oknie są puste linie. Kliknij dwukrotnie pustą podświetloną linię i wpisz słowo Wynik. Powinieneś otrzymać następujące informacje:

Zatem w określonym przez nas oknie powinniśmy otrzymać wynik wykonania naszego kodu, a mianowicie teraz - zmienną „Wynik”, ponieważ nie wykonaliśmy jeszcze tej linii kodu - mamy pustą wartość i typ danych zmiennej jest „Nieokreślony”.

Zróbmy krok - wykonaj określoną linię kodu. W tym celu należy nacisnąć klawisz lub w menu Debug->Krok przez... (F 10).

A co widzimy na naszym Tableau:

Widzimy razem z Tobą - wartość zmiennej i typ zmiennej. Teraz możemy także obejrzeć zawartość naszej tabeli wartości, w tym celu należy najechać kursorem myszy na pole wynikowe, kliknąć prawym przyciskiem myszy i wybrać „Pokaż wartość w osobnym oknie”

Otrzymujemy okno z wybranymi przez nas dokumentami, które znajdują się w zmiennej Result

Podsumowując:

Nauczyłeś się tworzyć proste zapytanie, a także brałeś udział w debugowaniu swojego kodu, a nawet przeglądałeś wynik naszego zapytania w konfiguratorze.

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”. W tym celu należy najpierw uporządkować dane bezpośrednio według typu referencyjnego stosując konstrukcję „ORDER BY”, a następnie konstrukcję „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 o charakterze referencyjnym, np. pola „Bank”, będącego odnośnikiem do elementu katalogu „Banki”, należy pamiętać, że wyświetlając to pole, pojawia się 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 Oprogramowanie Organizacje Płatność.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 przyjąć 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 Płatność Z katalogu .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, a zapytanie wykorzystuje złączenia w tabelach wirtualnych, wówczas zaleca się przeniesienie dostępu do tabel wirtualnych do tabeli tymczasowej, a następnie wykonanie 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 FROM wUsers AS wUsers GRUPA WG wUsers.Imię i nazwisko, wUsers.Data Narodziny

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.”

W tym artykule chcemy omówić z Tobą wszystko Funkcje języka zapytań 1C, I konstrukcje języka zapytań. Jaka jest różnica między funkcją a designem? Funkcja jest wywoływana z nawiasami i możliwymi parametrami, a konstrukcja jest zapisywana bez nawiasów. Niewątpliwie wszystkie struktury i funkcje języka zapytań 1C sprawiają, że proces pozyskiwania danych jest elastyczny i wielofunkcyjny. Te funkcje i konstrukcje mają zastosowanie do pól żądań, a niektóre także do warunków.

Funkcje języka zapytań 1C

Bo jasny opis Funkcje języka zapytań 1C jest znacznie mniej powszechne niż opisy struktur, postanowiliśmy zacząć przyglądać się funkcjom. Przyjrzyjmy się teraz każdemu z osobna, opisując jego przeznaczenie, składnię i przykład użycia, a więc:

1. Funkcjonować DATA CZAS- funkcja tworzy stałe pole typu "Data".

Składnia: DATA CZAS(<Год>,<Месяц>,<День>,<Час>,<Минута>,<Секунда>)

Przykład użycia:

2. Funkcja RÓŻNICA DATY- zwraca różnicę pomiędzy dwiema datami w jednym z wymiarów (rok, miesiąc, dzień, godzina, minuta, sekunda). Pomiar przekazywany jest jako parametr.

Składnia: RÓŻNICA DATA(<Дата1>, <Дата2>, <Тип>)

Przykład użycia:

Query.Text = "WYBIERZ | RÓŻNICA DATA(DATACZAS(2015, 4, 17), DATACZAS(2015, 2, 1), DZIEŃ) | JAKO Ilość dni";

3. Funkcja WARTOŚĆ- ustawia stałe pole z predefiniowanym rekordem z bazy danych, można też otrzymać pusty link dowolnego typu.

Składnia: WARTOŚĆ(<Имя>)

Przykład użycia:

Request.Text = "WYBIERZ //predefiniowany element | WARTOŚĆ(Katalog.Waluty.Dolar) Dolar AS, //pusty link | WARTOŚĆ(Dokument.Odbiór towarów i usług.EmptyLink) AS Paragon, //wartość przelewu | WARTOŚĆ(Przelew . Osoba prawna. Osoba fizyczna) AS Indywidualna, //konto predefiniowane | WARTOŚĆ(Plan kont. Samonośne. Materiały) AS Konto_10" ;

4. WYBIERZ funkcję- mamy przed sobą analogię konstrukcji IF, która jest używana w kodzie, tylko ta jest używana w zapytaniach 1C.

Składnia: WYBÓR KIEDY<Выражение>NASTĘPNIE<Выражение>W PRZECIWNYM RAZIE<Выражение>KONIEC

Przykład użycia:

Request.Text = //jeśli kwota jest większa niż 7500, to powinien obowiązywać rabat w wysokości 300 rubli, //więc jeśli warunek zostanie spełniony, to funkcja //zwróci Sum - 300 //w przeciwnym razie żądanie zwróci po prostu Sum "WYBIERZ | WYBIERZ | KIEDY TCReceipts.Kwota > 7500 | WTEDY TCReceipts.Amount - 300 | ELSE TCReceipts.Amount | END JAK KwotaZ Rabatem |FROM | Dokument.Odbiór TowarówUsługi.Towary JAKO TCReceipts";

5. Funkcja EKSPRES- pozwala wyrazić pole stałe określonego typu.

Składnia: EXPRESS (nazwa pola jako nazwa typu)

Przykład użycia:

Query.Text = "WYBIERZ RÓŻNE | Numer.sprzedaży.Rejestratora, | WYBIERZ | KIEDY Rejestr.Sprzedaż LINK Dokument.Wydatek | WTEDY WYRAŻONY(Dokument.Sprzedaż.Registrar AS.Wydatek) | ELSE WYBIERZ | KIEDY Sprzedawca.Registrar LINK Dokument.Implementacja | THEN EXPRESS(Dokument sprzedaży.Rejestrator AS.Wdrożenie) | END | ... | END AS Numer | OD | ZarejestrujAkumulacje.Zakupy AS Zakupy";

Czy istnieje inna możliwość wykorzystania funkcji EXPRESS w polach typów mieszanych, gdzie one występują? Najprostszym przykładem jest „Rejestrator” dla dowolnego rejestru. Dlaczego więc możemy potrzebować zakwalifikować typ w rejestratorze? Rozważmy sytuację, gdy wybierzemy od rejestratora pole „Numer”, z której tabeli zostanie wybrany numer? Prawidłowa odpowiedź ze wszystkich! Dlatego, aby nasze zapytanie działało szybko, powinniśmy określić typ jawny za pomocą funkcji EXPRESS

Przykład użycia:

Query.Text = "SELECT | EXPRESS(Nomenklatura.Komentarz AS Line(300)) AS Komentarz, | EXPRESS(Nomenklatura.Suma AS Number(15,2)) AS Suma |FROM | Katalog.Nomenklatura AS Nomenklatura";

6. Funkcja ISNULL(alternatywna pisownia ISNULL) - jeżeli pole jest typu NULL to zostaje ono zastąpione drugim parametrem funkcji.

Składnia: ISNULL(<Поле>, <ПодставляемоеЗначение>)

Przykład użycia:

Należy również pamiętać, że wskazane jest ZAWSZE zastępowanie typu NULL jakąś wartością, ponieważ porównanie z typem NULL zawsze zwraca FALSE, nawet jeśli porównasz NULL z NULL. Najczęściej wartości NULL powstają w wyniku łączenia tabel (wszystkie typy złączeń z wyjątkiem złączeń wewnętrznych).

Query.Text = //Wybierz całą pozycję i jej salda //jeśli w jakiejś pozycji nie ma salda, pojawi się pole //NULL, które zostanie zastąpione wartością 0 "SELECT | Nr Link, | ISNULL (ProductsInStockRemains.InStockRemaining, 0) AS Pozostała | Z | Katalog.Nomenklatura AS Nr | LEWE POŁĄCZENIE Zarejestruj akumulacje. GoodsInWarehouses. Pozostało AS GoodsInWarehousesRemains | ON (GoodsInWarehousesRemains. Nomenklatura = No. Link)";

7. Funkcja REPREZENTACJA- pozwala uzyskać reprezentację pola żądania.

Składnia: WYDAJNOŚĆ(<НаименованиеПоля>)

Przykład użycia:

Query.Text = "SELECT | REPRESENTATION(FreeRemainingRemains.Nomenclature) AS Nomenklatura, | REPRESENTATION(FreeRemainingRemaining.Warehouse) AS Warehouse, | FreeRemainingRemaining.InStockRemaining |FROM |Akumulacja Register.FreeRemaining.Remaining AS FreeRemainingRemaining";

Konstruuje w języku zapytań 1C

Rozmawialiśmy z Tobą powyżej Funkcje języka zapytań 1C, teraz czas się zastanowić konstrukcje w języku zapytań 1C, są nie mniej ważne i przydatne, zaczynajmy.

1. LINK budowlany- jest operatorem logicznym służącym do sprawdzania typu referencyjnego. Najczęściej spotykane podczas sprawdzania pola typu złożonego względem określonego typu. Składnia: POŁĄCZYĆ<Имя таблицы>

Przykład użycia:

Request.Text = //jeśli typem wartości rejestratora jest dokument Paragon, //wtedy zapytanie zwróci „Odbiór towaru”, w przeciwnym razie „Sprzedaż towaru” „WYBIERZ | WYBIERZ | KIEDY Remainings.Registrar LINK Dokument.Odbiór towaru i Usługi | WTEDY ""Odbiór"" | W przeciwnym razie ""Konsumpcja" | END AS Rodzaj ruchu | OD | Rejestr akumulacji. Pozostałe produkty w magazynach JAKO Pozostałości" ;

2. Projekt MIĘDZY- operator ten sprawdza, czy wartość mieści się w podanym zakresie.

Składnia: MIĘDZY<Выражение>I<Выражение>

Przykład użycia:

Request.Text = //pobierz całą nomenklaturę, której kod mieści się w zakresie od 1 do 100 "SELECT | Nomenclature.Link |FROM | Directory.Nomenclature AS Nomenklatura |WHERE | Nomenklatura.Code BETWEEN 1 AND 100" ;

3. HIERARCHIA konstrukcji B i B- sprawdź, czy wartość znajduje się na przesyłanej liście (tablice, tabele wartości itp. można przesyłać w formie listy). Operator IN HIERARCHY umożliwia podgląd hierarchii (przykład wykorzystania Planu kont).

Składnia: W(<СписокЗначений>), W HIERARCHII (<СписокЗначений>)

Przykład użycia:

Request.Text = //wybierz wszystkie subkonta konta "WYBIERZ | Samonośne. Połącz konto AS | Z | Plan kont. Samonośne AS Samonośne | GDZIE | Samonośne. Link W WARTOŚCI HIERARCHII (Schemat kont Konta. Samonośne. Towary)";

4. Projekt PODOBNY- Ta funkcja pozwala nam porównać ciąg znaków ze wzorcem ciągu.

Składnia: TAK JAK "<ТекстШаблона>"

Opcje wzoru wiersza:

% - ciąg zawierający dowolną liczbę dowolnych znaków.

Jeden dowolny znak.

[...] - dowolny pojedynczy znak lub ciąg znaków umieszczony w nawiasach kwadratowych. Wyliczenie może określać zakresy, na przykład a-z, co oznacza dowolny znak zawarty w zakresie, łącznie z końcami zakresu.

[^...] - dowolny pojedynczy znak lub ciąg znaków umieszczony w nawiasach kwadratowych, z wyjątkiem tych wymienionych po znaku negacji.

Przykład użycia:

Query.Text = //znajdź całą nomenklaturę zawierającą rdzeń TABUR i rozpoczynającą się //małą lub dużą literą t "WYBIERZ | Nomenklatura. Link | Z | Katalog. Nomenklatura AS Nomenklatura | GDZIE | Produkty. Nazwa LIKE "" [Tt ]abur%""" ;

5. Projekt DOZWOLONY- operator ten pozwala na wybranie z bazy danych tylko tych rekordów, do których osoba wywołująca ma uprawnienia do odczytu. Uprawnienia te konfiguruje się na poziomie rekordu (RLS).

Składnia: ALLOWED jest zapisywany po słowie kluczowym SELECT

Przykład użycia:

Request.Text = "WYBIERZ DOZWOLONE | Kontrahenci. Link | Z | Katalog. Kontrahenci JAKO Kontrahenci";

6. Projektowanie RÓŻNE- umożliwia wybranie rekordów, w których nie ma duplikatów rekordów.

Składnia: VARIOUS jest zapisywane po słowie kluczowym SELECT

Przykład użycia:

Request.Text = //wybiera rekordy, do których czytelnik ma uprawnienia "WYBIERZ RÓŻNE | Kontrahenci.Nazwa |FROM | Katalog. Kontrahenci JAKO Kontrahenci" ;

Ponadto konstrukcji RÓŻNE można używać z operatorem DOZWOLONYM i innymi operatorami.

Przykład użycia:

Request.Text = //wybiera różne rekordy, do których czytelnik ma uprawnienia "WYBIERZ DOZWOLONE RÓŻNE | Kontrahenci.Nazwa |FROM | Katalog. Kontrahenci JAKO Kontrahenci";

7. Najpierw zaprojektuj- wybiera z wyniku zapytania liczbę rekordów określoną w parametrze.

Składnia: PIERWSZY<число>

Przykład użycia:

Request.Text = //wybierz pierwsze 4 numery CCD z katalogu "WYBIERZ PIERWSZE 4 | Numery CCD. Link | Z | Katalog. Numery CCD JAKO Numery CCD";

8. Projekt DLA ZMIANY- pozwala na zablokowanie stołu, działa tylko w transakcjach (dotyczy tylko zamków automatycznych).

Składnia: DLA ZMIANY<НаименованиеТаблицы>

Przykład użycia:

Query.Text = "WYBIERZ | Wolne pozostałości Pozostałości. Nomenklatura, | Wolne pozostałości Pozostałości. Magazyn, | Wolne pozostałości Pozostałości. W magazynie Pozostało | Z | Rejestr nagromadzeń. Wolne pozostałości. Pozostałości AS Wolne pozostałości Pozostałości | DO ZMIANY | Rejestr nagromadzeń . Wolne pozostałości. Pozostałości”;

9. Projekt ZAMÓW PRZEZ- porządkuje dane według określonego pola. Jeżeli pole jest linkiem to przy ustawianiu flagi AUTOMATYCZNE ZAMÓWIENIE Sortowanie będzie odbywać się według reprezentacji łącza; jeśli flaga jest wyłączona, łącza są sortowane według starszeństwa adresu łącza w pamięci.

Składnia: SORTUJ WEDŁUG<НаименованиеПоля>AUTOMATYCZNE ZAMÓWIENIE

Przykład użycia:

Query.Text = "WYBIERZ | Wolne pozostałości Pozostałości. Nomenklatura AS Nomenklatura, | Wolne pozostałości pozostałe. Magazyn AS Magazyn, | Wolne pozostałości pozostałe. W magazynie Pozostałe | OD | Zarejestruj nagromadzenia. Wolne pozostałości. Pozostałe jako Wolne pozostałe pozostałości | | ZAMÓW PRZEZ | Nomenklatura | AUTO ZAMÓW VANIE";

10. Projekt GRUPA WG- służy do grupowania ciągów zapytań według określonych pól. Z każdą funkcją agregującą należy używać pól numerycznych.

Składnia: GRUPUJ WEDŁUG<НаименованиеПоля1>, .... , <НаименованиеПоляN>

Przykład użycia:

Query.Text = "WYBIERZ | ItemsInWarehouses.Nomenklatura AS Nomenklatura, | ItemsInWarehouses.Warehouse, | SUM(ItemsInWarehouses.InStock) AS INSTOCK |FROM | RegisterAccumulations.ItemsInWarehouses AS ItemsInWarehouses | |GROUP BY | ItemsInWarehouses.Nomenklatura, | ItemsAtWarehouse a h.Magazyn" ;

11. Projekt MIEĆ- umożliwia zastosowanie funkcji agregującej do warunku wyboru danych, podobnie jak w przypadku konstrukcji WHERE.

Składnia: MAJĄCY<агрегатная функция с условием>

Przykład użycia:

Query.Text = //wybiera zgrupowane rekordy, w których pole InStock jest większe niż 3 "SELECT | ItemsInStocks.Nomenclature AS Nomenklatura, | ItemsInWarehouses.Warehouse, | SUM(ItemsInStocks.InStock) AS INSTOCK |FROM | RegisterAccumulations.ItemsInStocks AS ItemsInStocks | | GRUPUJ WEDŁUG | ProductsInWarehouses.Nomenklatura, | ProductsInWarehouses.Warehouse | |DOSTĘPNE | KWOTA(ProductsInWarehouses.InStock) > 3" ;

12. INDEKS Budowlany WG- służy do indeksowania pola zapytania. Wykonanie zapytania z indeksowaniem trwa dłużej, ale przyspiesza przeszukiwanie zaindeksowanych pól. Można go używać tylko w tabelach wirtualnych.

Składnia: INDEKS WG<Поле1, ... , ПолеN>

Przykład użycia:

Query.Text = "WYBIERZ | Ts.NameOS, | Ts.FolderNumber, | Ts.CodeOS, | Ts.Term, | Ts.Type | PLACE DataTs | FROM | &Ts AS Ts | | INDEX BY | Ts.NameOS, | Ts .KodeksOS";

13. Projekt GDZIE- umożliwia nałożenie warunku na dowolne pola wyboru. W rezultacie zostaną uwzględnione tylko rekordy spełniające warunek.

Składnia: GDZIE<Условие1 ОператорЛогСоединения УсловиеN>

Przykład użycia:

Query.Text = //wybrano wszystkie rekordy z CompensationRemaining<>0 i //AmountForCalcCompRemaining > 100 "SELECT | CompensationRPORemains.Counterparty, |CompensationRPORemains.Child, | CompensationRPORemains.CompensationRemaining, | CompensationRPORemains.AmountForCalcCompRemains |Place DataTz |FROM | Rejestr akumulacji.CompensationRP.Remains AS CompensationRPRemains | WHERE |WynagrodzenieRPORemaining.WynagrodzeniePozostałe<>0 | I CompensationRPORemains.AmountForCalcCompRemaining> 100" ;

14. WYNIKI PROJEKTOWANIA... OGÓLNE- służy do obliczania sum; projekt określa pola, według których będą obliczane sumy oraz funkcje agregujące stosowane do pól sumy. W przypadku stosowania sum dla każdego pola po konstrukcji TOTAL dane są grupowane. Istnieje opcjonalna konstrukcja OGÓLNA, której użycie zapewnia również dodatkowe grupowanie. Poniżej zobaczysz przykładowy wynik żądania.

Składnia: WYNIKI<АгрегатнаяФункция1, ... , АгрегатнаяФункцияN>PRZEZ<ОБЩИЕ> <Поле1, ... , ПолеN>

Przykład użycia:

Request.Text = "WYBIERZ | Obliczenia. Umowa z kontrahentem. Rodzaj umowy AS Rodzaj kontraktu, | Obliczenia. Umowa z kontrahentem Kontrakt AS, | Obliczenia. Kontrahent, | Obliczenia. Kwota salda rozliczeń wzajemnych Saldo AS | OD | Rejestr akumulacji. Wzajemne Rozliczenie z kontrahentami Salda AS Obliczenia | OGÓŁEM | KWOTA (Saldo) | Oprogramowanie | OGÓLNE, | Rodzaj umowy";

Rysunek przedstawia grupowania jakie powstały w trakcie realizacji żądania, górna odnosi się do sekcji OGÓLNE, a druga do pola Typ umowy z kontrahentem.

Zapytanie to potężne narzędzie, które służy do szybkiego (w porównaniu do wszystkich innych metod) uzyskiwania i przetwarzania danych zawartych w różnych obiektach bazy informacji 1C.

Utwórz prośbę

Żądanie tworzone jest jako oddzielny obiekt posiadający wymagany atrybut Tekst, gdzie faktycznie znajduje się samo żądanie. Dodatkowo do żądania można przekazać różne parametry niezbędne do jego wykonania. Po uzupełnieniu tekstu i parametrów żądania należy wykonać żądanie, a wynik wykonania umieścić w selekcji lub tabeli wartości. Wszystko wygląda mniej więcej tak:

//Utwórz żądanie
Żądanie = nowe żądanie;

//Wpisz tekst żądania
Wniosek. Tekst= „Tutaj piszemy tekst wniosku”;

//Przekaż parametry do żądania
Wniosek. SetParameter("NazwaParametru", WartośćParametru) ;

//Wykonaj żądanie
Wynik = zapytanie. Uruchomić() ;

//Prześlij wynik zapytania do zaznaczenia
Próbka = wynik. Wybierać() ;

//Prześlij wynik zapytania do tabeli wartości
Tabela = Wynik. Rozładuj() ;

//Ostatnie akcje można łączyć
Pobierz = Zapytanie. Uruchomić() . Wybierać() ;
//Lub
Tabela = Zapytanie. Uruchomić() . Rozładuj() ;

Podstawy języka zapytań 1C

Najprostsze i najczęściej używane zapytania służą do uzyskania danych z jakiegoś źródła. Źródłem mogą być niemal wszystkie obiekty zawierające dowolne dane: katalogi, dokumenty, rejestry, stałe, wyliczenia, plany typów cech itp.

Z tych obiektów za pomocą zapytania można uzyskać wartości szczegółów, części tabeli, szczegóły części tabeli, zmiany, zasoby itp.

Aby uzyskać tekst żądania, często wygodnie jest go użyć Konstruktor żądania. Jest wywoływany po kliknięciu prawym przyciskiem myszy w dowolnym miejscu modułu programu.

Na przykład, jeśli chcesz uzyskać wartości wszystkich szczegółów katalogu Kontrahenci, wówczas żądanie będzie wyglądać następująco:

Wniosek. Tekst = "WYBIERAĆ
| *
|OD
| Katalog. Kontrahenci”
;

Jeśli chcesz uzyskać tylko indywidualne dane, wykonaj następujące czynności:

Wniosek. Tekst = "WYBIERAĆ
| Kod,
| Nazwa,
| Rodzic
|OD
| Katalog. Kontrahenci”
;

Aby otrzymać taką prośbę, wyślij wiadomość w formacie Konstruktor zapytań należy zaznaczyć odpowiednie pola na zakładce Tabele i pola.

Do wybranych w zapytaniu elementów i źródeł możesz przypisać aliasy i wykorzystać je później zarówno w samym zapytaniu, jak i podczas pracy z wynikiem. Dodatkowo żądanie może zawierać pola z predefiniowaną konkretną wartością lub z wartością wyliczoną:

Wniosek. Tekst = "WYBIERAĆ
| Klienci.Kod AS Numer,

| Pole 1000 AS z wartością
|OD
;

Pobierz = Zapytanie. Uruchomić() . Wybierać() ;

Żegnaj Wyborze. Następna () pętla
Numer Klienta = Próbka. Numer;
NazwaKlienta = Wybór. Nazwa;
Wartość = próbka. PoleZWartością;
Koniec cyklu ;

Użyj tej zakładki, aby ustawić aliasy Związki/aliasy V Konstruktor zapytań.

Na zakładce ręcznie tworzone jest pole z wartością stałą lub wyliczoną Tabele i pola, w kolumnie Pola.

Wszystkie wybrane elementy można ułożyć w kolejności do przodu lub do tyłu. Możesz wybrać jedno lub więcej pól do zamówienia. Oprócz aranżacji czasami pomocne może być wybranie tylko jednego lub kilku pierwszych elementów.

//Uporządkuj klientów według nazwy od A do Z i wybierz pierwszych 10
Wniosek. Tekst = „WYBIERZ PIERWSZE 10
| Klienci.Kod AS Numer,
| Klienci.Nazwa AS Nazwa,
| Pole 1000 AS z wartością
|OD

| ZAMÓW PRZEZ
| Nazwa"
;

//Wybierz najnowszego klienta alfabetycznego
Wniosek. Tekst = „WYBIERZ TOP 1
| Klienci.Kod AS Numer,
| Klienci.Nazwa AS Nazwa,
| Pole 1000 AS z wartością
|OD
| Katalog Kontrahenci AS Klienci
| ZAMÓW PRZEZ
| Imię ZMNIEJSZENIE”
;

Możesz ograniczyć wybór elementów do tych, do których użytkownik ma uprawnienia dostępu. Lub usuń zduplikowane linie z wyniku zapytania.

//Próbkowanie danych udostępnionych użytkownikowi
Wniosek. Tekst = „WYBIERZ DOZWOLONE
| Klienci.Kod AS Numer,
| Klienci.Nazwa AS Nazwa,
| Pole 1000 AS z wartością
|OD
| Katalog. Kontrahenci AS Klienci”
;

//Wybór niepowtarzających się elementów
Wniosek. Tekst = „WYBIERZ RÓŻNE
| Klienci.Kod AS Numer,
| Klienci.Nazwa AS Nazwa,
| Pole 1000 AS z wartością
|OD
| Katalog. Kontrahenci AS Klienci”
;

Kolejność ustalana jest na zakładce Zamówienie V Konstruktor zapytań na zakładce znajduje się liczba wybranych elementów, parametry rozdzielczości i powtarzalności Dodatkowo.

Ciąg dalszy nastąpi…