Żądanie wsadowe 1s 8. Zbiorcze żądania dotyczące manekinów

Przyjrzyjmy się, jak zmieniono (a raczej uzupełniono) składnię tekstów zapytań na prostym przykładzie: Trwa przetwarzanie dokumentu Materiały eksploatacyjne zawierające w części tabelarycznej Dobra lista sprzedanych towarów i ich ilość. Przy sporządzaniu takiego dokumentu należy zapewnić kontrolę sald ujemnych zgromadzonych w rejestrze akumulacji sald Pozostały towar.

Strukturę konfiguracji pokazano na rysunku.

(16,22 kilobajtów) Liczba pobrań: 64

Utwórzmy zapytanie dla części tabelarycznej dokumentu i tabeli wirtualnej Resztki rejestr akumulacji. Weźmy pod uwagę możliwe zduplikowane linie w dokumencie; w tym celu pogrupujemy rekordy.

Żądanie = Nowe żądanie;
Żądanie.Tekst = "
|WYBIERZ
| Nomenklatura,
| SUM(ilość dokumentu) AS ilość_dokumentu,
| MINIMUM(ISNULL(Pozostała ilość rej.,0)) AS Reg_Quantity
|OD
| Dokument.Materiały eksploatacyjne.Towary AS Doc
| POŁĄCZENIE LEWE
| RegisterAccumulations.RemainingProducts.Remaining() AS Reg
| PRZEZ
| Doc.Nomenklatura = Reg.Nomenklatura
|GDZIE
| Link = &Link
|GRUPA WEDŁUG Nomenklatury Dokumentów";

//Przejście przez rejestr

Koniec cyklu;

Zakończ procedurę

Oczywiście powyższe zapytanie nie jest absolutnie optymalne. Wykorzystując zapytania zagnieżdżone zoptymalizujemy to: część tabelaryczną dokumentu zgrupujemy przed połączeniem z tabelą sald; listę towarów przekażemy do parametrów tabeli wirtualnej jako wartość warunku do wyliczenia sald . W efekcie nasza prośba przyjmie następującą formę:

|WYBIERZ
| Nomenklatura,

|OD
| (WYBIERAĆ

| Z
| Dokument.Materiały eksploatacyjne.Towary
| GDZIE
| Link = &Link
| GRUPA WEDŁUG Nomenklatury) AS Doc
| POŁĄCZENIE LEWE
Nomenklatura B
| (WYBIERZ RÓŻNE
| Nomenklatura
| Z
| Dokument.Materiały eksploatacyjne.Towary
| GDZIE
| Link = &Link)) AS Reg
| PRZEZ

Jeżeli zapytanie wymagałoby uzyskania danych z pozostałych różnych rejestrów, wówczas wartość filtra, a co za tym idzie nasze drugie zagnieżdżone zapytanie, zostałoby powtórzone we wszystkich parametrach wirtualnych tabel, oczywiście przy każdym zagnieżdżonym zapytaniu system ponownie uzyskuje dostęp do bazy danych aby uzyskać dane.

Stoły tymczasowe

Nie pamiętam, od której wersji stało się możliwe używanie tabel tymczasowych w zapytaniach. W tym celu należy skorzystać z obiektu Temporary Table Manager. Zasadniczo menedżer tabel tymczasowych opisuje przestrzeń nazw tabel tymczasowych i jest odpowiedzialny za ich tworzenie i niszczenie w bazie danych.

Same tabele tymczasowe są w rzeczywistości fizycznie tworzone w bazie danych, dlatego należy traktować je ostrożnie, ponieważ podsystem dyskowy jest obecnie najwolniejszym elementem technologii i bezpośrednio od niego zależy szybkość tworzenia i niszczenia tabel.

Przepiszmy zapytanie tak, aby korzystało z tabel tymczasowych. W tabelach tymczasowych umieścimy pogrupowaną część tabelaryczną dokumentu oraz listę produktów dla filtra tabeli wirtualnej:

Procedura przetwarzania (awaria, tryb)

MVT = Nowy menedżer tymczasowych tabel;

Żądanie = Nowe żądanie;
Żądanie.Tekst = "
|WYBIERZ
| Nomenklatura, SUM(ilość) AS Ilość
|Umieść DocTCH
|OD
| Dokument.Materiały eksploatacyjne.Towary
|GDZIE
| Link = &Link
|GRUPUJ WEDŁUG nomenklatury";

Żądanie = Nowe żądanie;
Query.TemporaryTableManager = MVT;
Query.Text = "WYBIERZ RÓŻNE
| Nomenklatura
|Umieść listę produktów
|OD
| Dokument.Materiały eksploatacyjne.Towary
|GDZIE
| Link = &Link";

Żądanie = Nowe żądanie;
Query.TemporaryTableManager = MVT;
Żądanie.Tekst = "
|WYBIERZ
| Nomenklatura,
| Dokument.Quantity AS Doc_Quantity,
| ISNULL(Pozostała ilość rej.,0) AS Ilość_rej
|OD
| DocTCH AS Doc
| POŁĄCZENIE LEWE
| RejestracjaNagromadzeń.Pozostałości towarów.Pozostałości(,
| Nomenklatura
| Z
| PRZEZ
| Nomenklatura Dokumentu = Nomenklatura Regułowa”;

RequestResult = Request.Execute();
Wybór = QueryResult.Select();

Podczas gdy pętla Select.Next()

//Sprawdzanie sald ujemnych

//Przejście przez rejestr

Koniec cyklu;

Zakończ procedurę

W przypadku korzystania z tabel tymczasowych instrukcja jest używana w tekście zapytania Miejsce aby utworzyć nową tabelę tymczasową, w tym przypadku system nie przekazuje do wyniku zapytania zawartości tej tabeli (patrz uwaga 1 i uwaga 2 w tekście powyżej), ale liczbę rekordów umieszczonych w tabeli tymczasowej if; chcesz, nie możesz zaakceptować tej wartości.

Możliwe jest także skorzystanie z instrukcji Zniszczyć w tym przypadku tabela tymczasowa zostanie zniszczona, w przeciwnym razie tabele tymczasowe zostaną zniszczone wraz z obiektem menedżera tabel tymczasowych.

W naszym głównym zapytaniu użyłem nazw tabel tymczasowych jako wskazania źródła danych (trzeba im przypisać synonim, co widzimy w tekście). Tablic tymczasowych możesz używać jako źródła wielokrotnie, co umiejętnie wykorzystane pozwoli Ci skrócić tekst zapytania (poprawiając czytelność skomplikowanych zapytań) i zwiększyć szybkość (przy korzystaniu z danych tabeli tymczasowej w kilku miejscach zapytania) .

Żądania zbiorcze

Zapytania wsadowe logicznie uzupełniają funkcjonalność tabel tymczasowych i zapewniają więcej opcji podczas pracy z zapytaniami.

W zapytaniu wsadowym można właściwie opisać kilka zapytań, zarówno połączonych ze sobą za pomocą tabel tymczasowych, jak i niepowiązanych (jest to możliwe, ale nie jest jasne dlaczego?). Dzięki temu możesz wykonywać wszystkie żądania sekwencyjnie i otrzymać w rezultacie albo tablicę z wynikami każdego żądania, albo wynik ostatniego. Aby otrzymać tablicę z wynikami zapytania należy zastosować metodę Wykonaj wsad() obiekt żądania i uzyskać wynik ostatniego żądania Uruchom zapytanie().

W tekście żądania żądania pakietu są oddzielone symbolem „;”. (średnik). Na żądanie wsadowe istnieje tylko jedna przestrzeń nazw dla tabel wirtualnych. Korzystanie z menedżera tabel tymczasowych nie jest wymagane, ale jest możliwe, jeśli chcesz przekazywać tabele tymczasowe z jednego zapytania wsadowego do drugiego.

Przepiszmy procedurę, aby używać żądań wsadowych:

Procedura przetwarzania (awaria, tryb)

Żądanie = Nowe żądanie;
Żądanie.Tekst = "
|WYBIERZ
| Nomenklatura, SUM(ilość) AS Ilość
|Umieść DocTCH
|OD
| Dokument.Materiały eksploatacyjne.Towary
|GDZIE
| Link = &Link
|GRUPUJ WEDŁUG nomenklatury
|;
|WYBIERZ RÓŻNE
| Nomenklatura
|Umieść listę produktów
|OD
| Dokument.Materiały eksploatacyjne.Towary
|GDZIE
| Link = &Link
|;
|WYBIERZ
| Nomenklatura,
| Dokument.Quantity AS Doc_Quantity,
| ISNULL(Pozostała ilość rej.,0) AS Ilość_rej
|OD
| DocTCH AS Doc
| POŁĄCZENIE LEWE
| RejestracjaNagromadzeń.Pozostałości towarów.Pozostałości(,
| Nomenklatura B(WYBIERZ RÓŻNE
| Nomenklatura
| Z
| Lista produktów AS Lista produktów)) AS Reg
| PRZEZ
| Nomenklatura Dokumentu = Nomenklatura Regułowa”;

Podczas gdy pętla Select.Next()

//Sprawdzanie sald ujemnych

//Przejście przez rejestr

Koniec cyklu;

Zakończ procedurę

W rzeczywistości usunąłem definicję obiektu zapytania i użycie tymczasowego menedżera tabel, połączyłem teksty zapytań (zwróć uwagę na separator „;” między tekstami). W efekcie tekst zapytania stał się bardziej czytelny (a przy korzystaniu z kreatora zapytań czytelność zapytania znacznie wzrasta).

Po wykonaniu zapytania do zmiennej Wyniki tablicy będziemy mieli 3 elementy. Pierwsze dwa będą zawierać liczbę charakteryzującą liczbę rekordów umieszczonych w tabelach tymczasowych DokumentTC I Lista produktów, a trzecia będzie zawierać wybór z polami Nomenklatura, Doktor_ Ilość i Reg_ Ilość.

Do zmiennej Wynik zapytania dostanie się tylko próbka.

Cóż, to wszystko w przypadku żądań zbiorczych. Bardzo wygodny mechanizm zarówno z punktu widzenia pisania zapytań, jak i z punktu widzenia czytania złożonych zapytań.

Blog firmowy 1C GOODWILL

Platforma 1C Enterprise umożliwia sekwencyjne wykonywanie kilku zapytań na raz. W 1C nazywa się to pakietem żądań. W ramach jednego pakietu każde żądanie jest oddzielone średnikiem.

Aby uzyskać etapową realizację zapytań w pakiecie, z reguły początkowo tworzone są tabele tymczasowe, a następnie tworzone są warunki ich udostępniania, takie jak filtry, złączenia i złączenia. Dzięki temu zostaje osiągnięty efekt końcowy. Tabele tymczasowe uzyskane w wyniku jakichkolwiek zapytań w partii istnieją do końca partii jako całości lub do czasu wykonania zapytania, które niszczy tabele tymczasowe.

Dodatkowo zastosowanie zapytań wsadowych oraz tabel tymczasowych znacznie zwiększa czytelność całego segmentu tego kodu. Złożone zapytania, które zawierają również zapytania zagnieżdżone, mogą być bardzo trudne do zrozumienia. Jeśli jednak podzielisz długie, złożone zapytanie na kilka, a nawet użyjesz tabel tymczasowych, nie tylko poprawi to percepcję, ale w większości przypadków doprowadzi do zwiększenia wydajności.

Kolejnym ważnym szczegółem na korzyść zapytań wsadowych w 1C jest to, że w przeciwieństwie do zapytań zagnieżdżonych możemy osobno uzyskać wynik każdego zapytania w partii.

Przykład tworzenia pakietu żądań w języku 1C

Aby zobaczyć przykład tworzenia pakietu zapytań skorzystamy z projektanta zapytań, którego dla przejrzystości wywołamy z konsoli zapytań. Dzięki temu od razu możemy zobaczyć wynik wykonania pakietu.

Utwórzmy proste żądanie wsadowe. Sugeruję natychmiastowe wklejenie tekstu żądania do konsoli, a następnie otwarcie projektanta i sprawdzenie, jak powstaje pakiet żądań. Dodaj nowe żądanie do konsoli i wklej następujący tekst:

Samonośne.Rodzic,

Kod samonośny,

Kod szybkiego wyboru, samonośny.

Imię samonośne.

Samonośny.Typ,

Samonośny arkusz pozabilansowy,

Ilościowe, samonośne.

Plan kont Samonośny AS Samonośny

////////////////////////////////////////////////////////////////////////////////

Typy samonośneSubconto.Numer linii AS Numer linii,

Samonośne typy Subconto.ViewSubconto AS TypeSubconto,

Self-supportingTypesSubconto.TypeSubconto.Name AS Nazwa,

Typy samonośneSubconto.TypeSubconto.ValueType ASValueType,

Typy samonośneSubconto.OnlyTurnover AS OnlyTurnover,

Self-supportingTypesSubconto.Summary AS Sumative

Plan kont. Rodzaje subkont AS. Rodzaje subkont

SORTUJ WEDŁUG

Typy samonośneSubconto.NumberLines

Dla mnie wygląda to tak:

Przejdźmy teraz do projektanta zapytań. Tutaj będziemy zainteresowani zakładką „Zamów pakiet”:

Jak widać, mamy pakiet dwóch próśb. Klikając dwukrotnie na którykolwiek z nich, możesz przystąpić do jego edycji:

Kliknij przycisk „OK” i spróbuj zobaczyć wynik żądania wsadowego.

Ustawmy parametr „Konto”. Możesz wybrać dowolne konto z planu kont. Jak już zapewne się domyślasz, ten pakiet żądań musi otrzymać właściwości konta. Kliknij „Uruchom” i zobacz wynik:

Metody Run() i RunBatch()

Oprócz metody Execute(), która jeden po drugim wykona wszystkie żądania wsadowo i zwróci wynik ostatniego żądania, w 1C istnieje metoda ExecuteBatch(). Zwraca tablicę próbek każdego żądania w partii. W powyższym przykładzie jest to dokładnie ta metoda.

ArrayResults = Query.ExecuteBatch();

Wybór1 = ArrayResults.Select();

Jeśli Wybierz1.Dalej() Następnie

//Akcje z wyborem 1

koniecJeśli;

SelectionViewsSubconto = ArrayResults.Select();

Post Praca z żądaniami wsadowymi w 1C 8.3 i 8.2 po raz pierwszy pojawił się na blogu firmowym 1C GOODWILL.

Proste zapytania

Rozważmy, jak zmieniono (a właściwie uzupełniono) składnię zapytania na poniższym przykładzie: Zaksięgowano dokument Materiały eksploatacyjne, który w sekcji tabelarycznej Produkty zawiera listę sprzedanych produktów i ich ilość. Do realizacji tego dokumentu konieczna jest kontrola sald ujemnych zarejestrowanych w rejestrze kumulacji sald Pozostałości Towarowych.

Rysunek przedstawia strukturę konfiguracji.

Utwórzmy zapytanie o wirtualną tabelę Pozostałości rejestru akumulacji i części tabelarycznej dokumentu. Aby uwzględnić możliwe powtórzenia wierszy w dokumencie, będziemy grupować rekordy.

Oczywiście powyższe zapytanie nie jest wystarczająco optymalne. Zoptymalizujmy to za pomocą zapytań zagnieżdżonych: zgrupuj część tabelaryczną przed połączeniem jej z tabelą sald dokumentu, przekaż listę jednostek produktu do parametrów wirtualnej tabeli jako warunek wyliczenia sald. Wynikowe zapytanie będzie wyglądać następująco:


Jeżeli zapytanie wymaga pozyskania danych z pozostałych różnych rejestrów, wówczas wartość filtru i drugie podzapytanie zostanie powtórzone w każdym parametrze wirtualnych tabel, a przy każdym podzapytaniu system będzie kontaktował się z bazą danych w celu uzyskania danych.

Stoły tymczasowe

Od pewnego czasu w zapytaniach istnieje możliwość wykorzystania tabel tymczasowych, do obsługi których wykorzystywany jest obiekt „Menedżer tabel tymczasowych”. Zasadniczo menedżer tabel tymczasowych zawiera opis przestrzeni nazw tabel tymczasowych i zapewnia ich tworzenie i usuwanie z bazy danych.

Tabele tymczasowe są fizycznie przechowywane w bazie danych, dlatego należy z nich korzystać ostrożnie, ponieważ Podsystem dyskowy jest najmniej wydajną częścią technologii i bezpośrednio od niego zależy szybkość tworzenia i usuwania tabel.

Zmieńmy zapytanie, aby uwzględnić użycie tabel tymczasowych. Tabele tymczasowe będą zawierać tabelaryczną część dokumentu w formie pogrupowanej oraz listę produktów do filtrowania wirtualnych tabel:

Użycie tabel tymczasowych w zapytaniu wymaga użycia instrukcji Place w celu utworzenia nowej tabeli tymczasowej, a wynikiem zapytania nie jest zawartość tabeli, ale liczba rekordów umieszczonych w tabeli tymczasowej.

Dodatkowo można skorzystać z instrukcji Destroy - w tym przypadku tabela tymczasowa zostanie usunięta, w przeciwnym razie tabele tymczasowe zostaną zniszczone przez obiekt menadżera tabel tymczasowych wraz z tabelami.

W zapytaniu głównym jako wskazanie źródła danych wykorzystano nazwy tabel tymczasowych (należy nadać im synonim). Tablic tymczasowych możesz używać jako źródła wielokrotnie, co przy prawidłowym użyciu pozwala na skrócenie tekstu zapytania i zwiększenie szybkości (przy korzystaniu z tabeli tymczasowej w różnych miejscach zapytania).

Żądania zbiorcze

Zapytania wsadowe znacznie rozszerzają funkcjonalność tabel tymczasowych i zapewniają nowe możliwości podczas pracy z zapytaniami.

W rzeczywistości zapytanie wsadowe może opisywać kilka zapytań, zarówno połączonych ze sobą poprzez tabele tymczasowe, jak i niezależnych. W rezultacie wydaje się, że wszystkie zapytania są wykonywane sekwencyjnie i kończą się tablicą wyników każdego zapytania lub wynikiem tylko ostatniego. Tablicę wyników zapytania uzyskuje się za pomocą metody ExecutePackage() obiektu żądania, a aby uzyskać wynik tylko z ostatniego żądania należy skorzystać z metody ExecuteQuery().

Żądania zbiorcze w tekście żądania muszą być oddzielone znakiem „;”. Pojedyncze żądanie wsadowe ma jedną przestrzeń nazw dla tabel wirtualnych. Korzystanie z menedżera tabel tymczasowych nie jest konieczne, ale jest możliwe, jeśli chcesz przekazać tabele tymczasowe do innego zapytania wsadowego.

Zmieńmy procedurę biorąc pod uwagę żądania wsadowe:

Faktycznie usunięto definicję obiektu zapytania i nie zastosowano tymczasowego menedżera tabel, a teksty zapytań zostały scalone. Dzięki temu tekst żądania stał się bardziej czytelny.

Po wykonaniu żądania zmienna Result Array będzie zawierać 3 elementy. Pierwsze dwa to liczba rekordów DocTCH i Product List umieszczonych w tabelach tymczasowych; trzecia będzie zawierać wybór za pomocą pól Doc_Quantity, Nomenclature i Reg_Quantity.

Zmienna Wynik zapytania zawiera tylko wybór.

Zapytania wsadowe są zatem bardzo wygodnym narzędziem zarówno do pisania, jak i odczytywania złożonych zapytań.

Platforma 1C Enterprise umożliwia sekwencyjne wykonywanie kilku zapytań na raz. W 1C nazywa się to pakietem żądań. W ramach jednego pakietu każde żądanie jest oddzielone średnikiem.

Aby uzyskać etapową realizację zapytań w pakiecie, z reguły początkowo tworzone są tabele tymczasowe, a następnie tworzone są warunki ich udostępniania, takie jak filtry, złączenia i złączenia. Dzięki temu zostaje osiągnięty efekt końcowy. Tabele tymczasowe uzyskane w wyniku jakichkolwiek zapytań w partii istnieją do końca partii jako całości lub do czasu wykonania zapytania, które niszczy tabele tymczasowe.

Dodatkowo zastosowanie zapytań wsadowych oraz tabel tymczasowych znacznie zwiększa czytelność całego segmentu tego kodu. Złożone zapytania, które zawierają również zapytania zagnieżdżone, mogą być bardzo trudne do zrozumienia. Jeśli jednak podzielisz długie, złożone zapytanie na kilka, a nawet użyjesz tabel tymczasowych, nie tylko poprawi to percepcję, ale w większości przypadków doprowadzi do zwiększenia wydajności.

Kolejnym ważnym szczegółem na korzyść zapytań wsadowych w 1C jest to, że w przeciwieństwie do tego możemy osobno uzyskać wynik każdego zapytania w partii.

Przykład tworzenia pakietu żądań w języku 1C

Aby zobaczyć przykład tworzenia pakietu zapytań skorzystamy z projektanta zapytań, którego dla przejrzystości wywołamy z konsoli zapytań. Dzięki temu od razu możemy zobaczyć wynik wykonania pakietu.

Utwórzmy proste żądanie wsadowe. Sugeruję natychmiastowe wstawienie tekstu żądania do , a następnie otwarcie go i sprawdzenie, jak powstaje pakiet żądań. Dodaj nowe żądanie do konsoli i wklej następujący tekst:

Uzyskaj 267 lekcji wideo na 1C za darmo:

Linka samonośna,
Samonośne.Rodzic,
Kod samonośny,
Kod szybkiego wyboru, samonośny.
Imię samonośne.
Samonośny.Typ,
Samonośny arkusz pozabilansowy,
Ilościowe, samonośne.
Z
Plan kont Samonośny AS Samonośny
GDZIE
Self-supporting.Link = &Konto
;
////////////////////////////////////////////////////////////////////////////////

WYBIERAĆ
Typy samonośneSubconto.Numer linii AS Numer linii,
Samonośne typy Subconto.ViewSubconto AS TypeSubconto,
Self-supportingTypesSubconto.TypeSubconto.Name AS Nazwa,
Typy samonośneSubconto.TypeSubconto.ValueType ASValueType,
Typy samonośneSubconto.OnlyTurnover AS OnlyTurnover,
Self-supportingTypesSubconto.Summary AS Sumative
Z
Plan kont. Rodzaje subkont AS. Rodzaje subkont
GDZIE
Self-supportingTypesSuaccount.Link = &Konto
SORTUJ WEDŁUG
Typy samonośneSubconto.NumberLines

Dla mnie wygląda to tak:

Przejdźmy teraz do projektanta zapytań. Tutaj będziemy zainteresowani zakładką „Zamów pakiet”:

Jak widać, mamy pakiet dwóch próśb. Klikając dwukrotnie na którykolwiek z nich, możesz przystąpić do jego edycji:

Kliknij przycisk „OK” i spróbuj zobaczyć wynik żądania wsadowego.

Ustawmy parametr „Konto”. Możesz wybrać dowolne konto z planu kont. Jak już zapewne się domyślasz, ten pakiet żądań powinien otrzymać właściwości konta. Kliknij „Uruchom” i zobacz wynik:

Metody Run() i RunBatch()

Kiedy moje zapytanie stało się tak skomplikowane, że przekroczyło granice mojego zrozumienia, zdecydowałem się użyć zapytań wsadowych.

Stanąłem jednak przed faktem, że nic o nich nie wiedziałem. Okazało się, że wszystko jest bardzo proste. Już za 5 minut będziesz mógł korzystać z zapytań wsadowych. Zacznij czytać.

Jak się okazało, wszystko jest bardzo proste. Wystarczy napisać kilka zapytań oddzielonych średnikami. Wynik zostanie zwrócony w ostatnim żądaniu.

Żądania wsadowe pojawiły się dopiero w wersji 8.1.11.67.4.

Oto treść żądania:

WYBIERZ T1.Zn UMIEŚĆ VTBletters Z (WYBIERZ „A” JAKO Zn POŁĄCZ WSZYSTKO WYBIERZ „B”) JAKO T1;

WYBIERZ T1.ZN UMIEŚĆ VTDIGITS Z (WYBIERZ „1” JAKO VN POŁĄCZ WSZYSTKO WYBIERZ „2”) JAKO T1;

WYBIERZ TB.Zn, TC.Zn, TB.Zn+TC.Zn Z liter VTB jako TB, numerów VTC jako TC

Zapytania wsadowe są obsługiwane w dowolnej zwykłej konsoli zapytań.

Rysunek przedstawia przykładową realizację żądania:

A teraz trochę z doświadczenia. Dlaczego potrzebujemy żądań zbiorczych?

Faktem jest, że możesz umieścić jakiś wynik pośredni w tabeli tymczasowej, który może być później potrzebny w kilku kolejnych zapytaniach.

Poprzednio, gdy nie było tabel tymczasowych, tekst zapytania musiał zostać zduplikowany.

Można oczywiście obejść się bez zapytania wsadowego, wykonując kolejno kilka zapytań i manipulując zagnieżdżonymi tabelami. Ale jest to wygodniejsze w przypadku żądań wsadowych. Po prostu piszesz zapytanie i nie myślisz o umieszczeniu tabel tymczasowych. Wszystko dzieje się samo.

Dodatkowo, jeśli zastosowany zostanie system składu danych (DCS), inteligentnie dobiera niezbędne pola i minimalizuje cały pakiet zapytań.

Jeśli żądania miały metodę Żądanie.Uruchom() więc teraz jest metoda Żądanie. Wykonaj wsad(), która zwraca wszystkie tabele z pakietu w postaci tablicy.

Ogłoszenie żądań zbiorczych na stronie 1c znajduje się tutaj: http://v8.1c.ru/overview/release_8_1_11/#Functional

Historia życia

Pozwólcie, że wyjaśnię, co skłoniło mnie do uruchomienia żądań wsadowych.

Wyobraźmy sobie więc, że istnieje dokument zawierający część tabelaryczną. W kolumnie” Błąd» wskazuje, czy podczas wypełniania dokumentu wystąpił błąd. W kolumnie” Błędy tekstowe» może występować jedno lub więcej zdań z tekstami błędów. Rodzaje błędów zawartych w zdaniach są znane z góry.

Umieściliśmy więc listę wszystkich błędów w tabeli Kody błędów- zawiera kod błędu i podciąg wyszukiwania.

Otrzymujemy jeden, dwa lub więcej błędów dla każdej linii. Ponieważ W jednym wierszu może znajdować się kilka błędów.

Ale błąd może nie zostać rozpoznany, tj. flaga " Błąd" oznacza, ale tekst błędu nie zawierał kodu błędu.

Wykonujemy lewe złączenie, gdzie kod błędu to NULL, podajemy kod błędu „ Inne błędy» .

Ale problem polegał na tym, że kodów błędów było około 200, więc lewe łącze działało bardzo długo. Musiałem go zastąpić łączem wewnętrznym, które latało. Ale jednocześnie utracone zostały linie, dla których nie znaleziono błędu. Nadal nie mogłem wymyślić, jak umieścić te linie w wyniku.

Zapytanie zostało napisane pod system układu tj. Zasadniczo nie można używać żadnych tabel wartości ani tabel tymczasowych. Tutaj z pomocą przychodzą zapytania wsadowe.

Po prostu jeszcze raz połączyłem wszystkie linie z błędami ze wszystkimi liniami, dla których znaleziono błędy, i nadal dodałem typ błędu „Inne błędy”.

informacje o mobie