Pobieranie danych wyświetlanych na liście dynamicznej

Oprócz prymitywnych typów danych, które można znaleźć w dowolnym języku programowania, w 1C istnieją unikalne typy. Każdy z nich ma swoje własne właściwości, metody, funkcje, cel i niuanse zastosowania w systemie. Jednym z tego typu jest lista dynamiczna, która znacznie ułatwia wiele zastosowanych zadań. Dlatego programiści muszą znać i umieć obsługiwać to uniwersalne narzędzie.

Funkcje list dynamicznych w 1C

Celem tego typu jest wyświetlenie informacji z dowolnych tabel bazy danych, niezależnie od ich typu. Mechanizm powstał na bazie SKD i ma podobne możliwości. Ale to nie znaczy, że koniecznie będziesz musiał napisać prośbę w języku 1C, chociaż taka możliwość istnieje i należy z niej skorzystać. Możesz po prostu określić tabelę, której informacje Cię interesują, a 1C niezależnie wygeneruje proste zapytanie.

Aby zobaczyć jak powstaje lista dynamiczna i jakie dane pokazuje, należy otworzyć w konfiguratorze zarządzane formularze, w których się ona znajduje: na liście szczegółów za pomocą menu kontekstowego otwórz jej właściwości i zwróć uwagę na „Niestandardowe” Żądanie”. Jeżeli nie ma checkboxa, to parametr „Tabela główna” odzwierciedla tabelę bazy danych, z której pobierane są dane. W przeciwnym razie lista dynamiczna odzwierciedla dane niestandardowego zapytania, co można zobaczyć otwierając ustawienia listy.

Niestandardowy schemat zapytań jest znacznie częściej używany, ponieważ zapewnia doskonałą możliwość łączenia i wyświetlania szerokiej gamy danych. Najczęściej mechanizm ten wykorzystywany jest do odzwierciedlenia stanów magazynowych, cen towarów, wpływów, wydatków czy zakupów. Należy go używać ostrożnie, ponieważ w przypadku złożonych zapytań wydajność może spaść.

Kolejna przydatna właściwość listy dynamicznej otwiera się po kliknięciu napisu „Ustawienia listy”. To menu pozwala uczynić informacje bardziej dostępnymi i zrozumiałymi dla użytkowników końcowych, nawet przy użyciu standardowego zestawu pól. Niezależnie od tego, czy żądanie jest arbitralne, czy nie, wyświetli się zakładka „Ustawienia”, w której możesz określić:

  • Dynamiczny wybór listy;
  • Grupy;
  • Sortowanie;
  • Dekoracje.

Użycie parametrów sprawia, że ​​listy dynamiczne są uniwersalne i dość elastyczne. Można je także powiązać ze szczegółami na zarządzanym formularzu, a dane będą się zmieniać w zależności od parametrów wybranych przez użytkownika. Zastosowanie tych mechanizmów można zrozumieć i docenić, rozważając przykłady rzeczywistych problemów.

Jako przykład rozważmy zadanie odzwierciedlenia pozostałości nomenklatury w kontrolowanej formie. W praktyce takie zlecenia występują dość często w różnych konfiguracjach, a lista dynamiczna idealnie sprawdza się jako narzędzie. Do tego zadania będziemy musieli użyć niestandardowego zapytania, parametrów listy dynamicznej i jej ustawień.

Dla większej przejrzystości utwórzmy osobne przetwarzanie zewnętrzne i umieśćmy na nim dynamiczną listę. Do realizacji naszych planów tabela z nazewnictwem nie wystarczy, dlatego musimy pozwolić na dowolne zapytanie. Opiszemy w nim lewe połączenie katalogu z listą towarów i rejestrem sald oraz ustawimy katalog jako tabelę główną. Ten schemat umożliwi użytkownikom pracującym z listą dynamiczną dodawanie lub zmienianie elementów.



WYBIERZ NomenklaturęList.Nazwa AS Nazwa, Towary w magazynachPozostałe.Magazyn AS Magazyn, Towary wWarehousesRemainings.QuantityRemaining AS QuantityRemaining FROM Directory.Nomenklatura AS NomenklaturaLista LEWE POŁĄCZENIE RejestrAkumulacje.Towary w magazynach.Pozostałe(&bieżąca data,) AS TowaryNaUS skarbyPozostała nomenklatura oprogramowania List.Link = ProductsInWarehousesRemainings.Nomenklatura GDZIE

Ponieważ w naszym żądaniu użyto parametru „CurrentDate”, musimy ustawić jego wartość przed rozpoczęciem przetwarzania. W tym celu w module formularza w procedurze „When CreatedOnServer” za pomocą standardowego polecenia przypisz mu funkcję „CurrentSessionDate”. Musimy także wyświetlić listę dynamiczną na formularzu kontrolnym i dla przejrzystości zmienić kolejność pól. Przeciągnij atrybut „Nomenklatura Pozostała” na elementy formularza (lewa górna część) i za pomocą niebieskich strzałek zmień kolejność pól w tabeli na formularzu.

&Na serwerze Procedura po utworzeniu na serwerze (awaria, przetwarzanie standardowe) Nomenklatura pozostaje. Parametry. Ustaw ParameterValue("CurrentDate", CurrentSessionDate()) EndProcedure


Już na tym etapie możemy otworzyć nasze zewnętrzne przetwarzanie w 1C i sprawdzić, czy lista dynamiczna działa. Możemy przeglądać salda, tworzyć pozycje i grupy oraz wyszukiwać. Często klienci proszą o dodanie możliwości wyboru daty, w której będą widzieć salda. W przypadku formularza z listą dynamiczną odbywa się to poprzez dodanie dodatkowego pola i ustawienie za jego pomocą parametrów.

Dodaj atrybut „DateRemaining” typu „Date” i przenieś go do elementów formularza. W polu zdarzenia tworzymy zdarzenie „OnChange” i piszemy kod ustawiający parametr „CurrentDate” wykorzystywany w żądaniu dynamicznym. Aby użytkownik otwierając formularz od razu zrozumiał, z jaką datą widzi salda, wprowadzimy drobne zmiany w procedurze „When CreatedOnServer”.



&OnServerProcedureWhenCreatingOnServer(Failure, StandardProcessing)RemainingDate = CurrentSessionDate(); Pozycja Remains.Parameters.SetParameterValue("CurrentDate", RemainingDate); Koniec procedury &Na kliencie Procedura Pozostała dataWhenChanged(Element)Nomenklatura Remaining.Parameters.SetParameterValue("CurrentDate",RemainingDate); Koniec procedury

W rezultacie nasz formularz Lista dynamiczna może odzwierciedlać salda na dowolny dzień.

Rozważaliśmy tylko niewielką część możliwości tego zestawu narzędzi, ale to już wystarczy, aby zrozumieć wygodę tego typu listy dynamicznej. Podobny mechanizm stosowany jest przy wielu zadaniach, jednak najczęściej spotykany jest w typowych konfiguracjach w zarządzanych formularzach:

  1. Wybór;
  2. Listy.

Aby otrzymać dynamiczną listę i jej żądanie w standardowych zarządzanych formularzach, programista musi otworzyć żądany formularz w konfiguratorze. W sekcji szczegółów znajdź szczegóły z typem danych „DynamicList” (najczęściej jest on wyróżniony pogrubioną czcionką). Jego właściwości zawierają tekst żądania, wybory i inne ustawienia.

Platforma 1C:Enterprise 8.2 może pracować z wieloma rekordami w tabeli bazy danych w sposób dynamiczny, czyli odczytywać dane porcjami. Wcześniej w artykułach przyglądaliśmy się mechanizmowi list dynamicznych i metodom optymalizacji pracy z nimi.

Dzisiaj rozwiążemy niestandardowy problem dotyczący list dynamicznych. Całość będziemy musieli obliczyć korzystając z atrybutu dokumentu „Kwota” i wyświetlić ją w stopce listy. W podobny sposób oblicz średnią wartość pola „Ocena” i wyświetl ją również w stopce listy dynamicznej. Obliczenie sumy pól musi uwzględniać selekcję dokonaną przez użytkownika w ustawieniach listy dokumentów.

Cała trudność polega na tym, że lista dynamiczna nie otrzymuje wszystkich wpisów na raz, ale otrzymuje je porcjami. W związku z tym nie możemy od razu uzyskać podsumowania wszystkich dokumentów odpowiadających bieżącej selekcji. Jak obliczyć całość?

Realizacja

Przejdźmy zatem do rozwiązania problemu. Zacznijmy od zmiany formy, następnie opiszemy algorytm uzyskiwania wartości końcowych.

Forma i interfejs

Najpierw przygotujmy formularz dokumentu, w którym zostaną wyświetlone pola wynikowe. Aby to zrobić, dodamy dwa szczegóły w postaci ciągu znaków „Ocena” i „Kwota”.

Łączne wartości dokumentów zostaną zapisane w tych szczegółach.

Aby wyświetlić wartości szczegółów w stopce listy dynamicznej, należy włączyć odpowiednią opcję dla powiązanego elementu formularza listy (patrz poniższy zrzut ekranu).

Teraz musisz zdecydować, w jakim zdarzeniu będą aktualizowane wyniki w stopce listy. Aby ułatwić programowanie, dodajmy polecenie „Aktualizuj” i odpowiedni element formularza do panelu poleceń. Po wykonaniu tego polecenia sumy zostaną zaktualizowane.

W konfiguracji testowej, którą można pobrać z linku na końcu artykułu, dodałem także podsumowanie zdarzenia aktualizacji podczas nagrywania dokumentu. W tym przypadku wykorzystywany jest mechanizm powiadamiania poprzez formularz. Nie będziemy się nad tym rozwodzić bardziej szczegółowo.

Algorytm

Pozostaje najbardziej problematyczna część - musisz uzyskać wartości całkowite. Postępujmy następująco: utworzymy żądanie do bazy danych o uzyskanie wartości pól końcowych zgodnie z selekcją ustawioną na liście dynamicznej. Warto wziąć pod uwagę, że selekcja może mieć złożony warunek z grup.

Uwaga: ustawienia list dynamicznych (patrz zrzut ekranu powyżej) opierają się na mechanizmach systemu składu danych (DCS). W związku z tym możesz pracować z nimi w podobny sposób (programowo dodając, zmieniając, czytając itp.).

Etapy tworzenia wniosku o uzyskanie wyników są następujące:

1. Otrzymujemy wstępne zapytanie o listę dynamiczną.

Jak widzimy, żądanie wybiera wszystkie szczegóły dokumentu. Aby dodać trochę więcej złożoności, dodałem własne pole „Poziom oceny”, wygenerowane przez konstrukcję „SELECT”.

2. Tworzymy tekst warunków żądania (sekcja „GDZIE”) i zastępujemy go pierwotnym żądaniem.

Musimy dodać warunki do otrzymanego tekstu żądania źródła zgodnie ze skonfigurowaną dynamiczną listą wyboru.

Procedura w zależności od typu przekazanego elementu selekcji (grupa lub element selekcji) generuje odpowiedni tekst warunku. Wszystkie warunki w grupie są otoczone nawiasami, a te zawarte w grupie również są otoczone nawiasami. Warunki pomiędzy wyrażeniami zależą od grupy nadrzędnej (warunek „AND” jest umieszczany pomiędzy najwyższymi elementami w hierarchii).

Jeśli element ma ustawioną flagę użycia (właściwość „Usage”), wówczas element jest przetwarzany. Wygenerowany tekst zależy także od warunku porównania (Równy, nierówny, na liście itp.). Zależność wygenerowanego tekstu warunku od rodzaju porównania widać w poniższej funkcji.

Inną interesującą funkcją, moim zdaniem, jest „GetFieldTextByView”. Jest to potrzebne, aby w warunkach zapytania zastąpić pola utworzone przez wyrażenia języka zapytań. Powyżej do pierwotnego żądania dodałem pole „Poziom oceny”. Jeśli użytkownik użyje go przy wyborze, całe wyrażenie musi zostać podstawione w warunku zapytania. Ta funkcja pobiera tekst pola z żądania na podstawie jego reprezentacji. W przypadku tak złożonych pól zwróci cały tekst wyrażenia.

Więcej szczegółów na temat algorytmu znajdziesz w konfiguracji testowej dołączonej do artykułu. Poniżej znajduje się zrzut ekranu ustawień wyboru i wygenerowanych dla nich warunków żądania.

Wygenerowany tekst warunku jest dołączany do oryginalnego żądania listy dynamicznej. Wynik zapytania umieszczany jest w tabeli tymczasowej.

3. Pierwsze zapytanie umieszczamy w tabeli tymczasowej i dokonujemy grupowania według pól podsumowujących z niezbędnymi funkcjami agregującymi.

Przypomnę, że musimy uzyskać średnią wartość dla pola „Ocena” i kwotę całkowitą dla pola „Kwota”. Wygenerowaliśmy już zapytanie uwzględniające selekcje, pozostaje jedynie wyliczyć wartości całkowite. Odbywa się to za pomocą następującego żądania:

Po wykonaniu żądania przetwarzamy uzyskany wynik, zwracamy go klientowi i zapisujemy w szczegółach formularza, który stworzyliśmy wcześniej. Ostatecznie wyniki wyświetliły się w stopce listy dynamicznej (patrz pierwszy zrzut ekranu w artykule).

Optymalność rozwiązania

Ogólnie rzecz biorąc, takie podejście może mieć negatywny wpływ na wydajność. Na przykład, jeśli program obliczy sumę bez zaznaczenia zestawu na liście dynamicznej, liczba wybranych rekordów może być ogromna (na przykład na przestrzeni kilku lat). W rezultacie każda aktualizacja wyników może trwać kilkadziesiąt (!!!) sekund. Dlatego obliczanie wyników ma sens tylko wtedy, gdy dokonano selekcji. Ustawiam te warunki w konfiguracji testowej.

Ponadto możemy obliczyć sumy i zażądać tylko po stronie serwera. Dlatego musisz poważnie podejść do serwera, ponieważ procedurę aktualizacji sum można wykonywać bardzo często. Wyobraź sobie dziennik paragonów z kasy fiskalnej w organizacji branżowej, w którym można wprowadzić do 5 paragonów na minutę i do 300 paragonów na godzinę. Za każdym razem, gdy dokument jest tworzony, sumy zostaną zaktualizowane. Dlatego rozsądne byłoby ograniczenie przesyłanego ruchu poprzez zastosowanie procedur wyrwania z kontekstu.

Poniższy zrzut ekranu przedstawia kod programu wywołującego pozakontekstową funkcję serwera, która zwraca sumy.

Pierwszy parametr przekazuje dynamiczną selekcję z listy, drugi to struktura typu „SelectionFieldNameSelectionFieldValueType”. Należy pamiętać, że pierwszy parametr funkcji jest uzyskiwany jako jego własna wartość. Nie potrafię dokładnie powiedzieć dlaczego, ale jeśli przekażesz zaznaczenie jako link, platforma wyświetli błąd informujący, że zaznaczenia nie można zmienić. Tylko w ten sposób udało się obejść błąd.->

Uwaga: zastosowanie procedur pozakontekstowych pozwala kilkukrotnie zmniejszyć wielkość przesyłanego ruchu, ponieważ dane formularzy nie są przesyłane do serwera, w przeciwieństwie do procedur serwera kontekstowych (dyrektywa „&OnServer”).

Wniosek

Podsumowując, powiem, że takie podejście do obliczania sum na liście dynamicznej jest nieprawidłowe z punktu widzenia metodologii rozwoju. Poprawne byłoby uzyskanie sumy za pomocą rejestrów. Na przykład w dzienniku czeków ponownie możemy uzyskać kwotę pieniędzy w bieżącej kasie z dokumentów lub z odpowiedniego rejestru akumulacji.

Dodatkowo, zastosowanie rejestrów akumulacyjnych umożliwi wyliczenie sum bez uwzględnienia selekcji, gdyż system optymalnie współpracuje z już obliczonymi sumami za poprzednie miesiące.

Niemniej jednak metoda opisana w artykule ma miejsce przy rozwiązywaniu problemów.

Pliki do pobrania:

Drukuj (Ctrl+P)

Lista dynamiczna

1. Informacje ogólne

Lista dynamiczna to specjalny typ danych, który umożliwia wyświetlenie w formularzu dowolnych informacji z tabel bazy danych. Aby to zrobić, musisz określić tabelę, z której chcesz wyświetlić dane, lub opisać wynikowy wybór w języku zapytań.
Mechanizm opiera się na systemie kompozycji danych i zapewnia możliwości sortowania, selekcji, wyszukiwania, grupowania i warunkowego formatowania otrzymanych danych. W tym przypadku źródłem danych jest żądanie, które system generuje automatycznie (na podstawie podanych danych) lub zapisuje je ręcznie programista.

Ryż. 1. Opcje tworzenia listy dynamicznej

Podczas tworzenia atrybutów formularza typu Lista dynamiczna programista może wybrać dwa sposoby utworzenia zapytania o dane:
● Określając tabelę główną – w tym przypadku wystarczy podać tabelę (właściwość Tabela główna), z której chcesz pobrać dane, a system automatycznie wygeneruje zapytanie o dane (patrz prawa część na rys. 1).
● Ręczne generowanie żądania - w tym celu należy ustawić właściwość Żądanie niestandardowe (patrz lewa strona rys. 1). Po tym terminie możliwe będzie ręczne wygenerowanie żądania uzyskania danych z bazy danych.
Zapytanie może pobrać dane z wielu tabel, można więc określić tabelę podstawową. Dzieje się tak, aby lista dynamiczna mogła określić, które dane są pierwotne, a które wtórne, a także mogła poprawnie wybierać i wyświetlać informacje, a także udostępniać standardowe polecenia. Jeśli jednak w zapytaniu nie można określić tabeli głównej, nie można jej określić, ale wtedy
lista dynamiczna nie będzie udostępniać poleceń związanych z tabelą główną. Dodatkowo w tym przypadku (bez określenia tabeli głównej) efektywność pozyskiwania danych za pomocą listy dynamicznej zostanie znacznie zmniejszona.
Aby poprawić wydajność, zaleca się, aby wszelkie sprzężenia używane w zapytaniu niestandardowym wyłącznie w celu uzyskania dodatkowych danych były opcjonalne przy użyciu rozszerzenia języka zapytań systemu kompozycji danych.
Dla listy dynamicznej, która jest głównym atrybutem formularza, istnieje możliwość ustawienia wartości selekcji za pomocą parametru formularza Wybór. W tym celu konieczne jest, aby nazwa właściwości struktury znajdowała się w parametrze Wybór,
pokrywała się z nazwą pola wyboru listy dynamicznej. W takim przypadku wartość właściwości konstrukcji zostanie ustawiona jako właściwa wartość elementu selekcji. Jeżeli jako wartość elementu parametru Wybór dynamicznej formy listy zostanie przekazana tablica, stała tablica lub lista wartości, to do selekcji dodawany jest warunek z opcją Na liście, w odpowiedniej wartości z których umieszczana jest lista wartości (na które konwertowana jest tablica i stała tablica).
Dowolnym zapytaniem na liście dynamicznej może być zapytanie, w którym parametr służy do wygenerowania wartości pola, na przykład:

WYBIERAĆ
WYBÓR
KIEDY Dostawa. Współczynnik = 1 WTEDY &Prezentacja
INACZEJ Dostawa. Współczynnik
KONIEC JAKO Stosunek
Z

Ponadto, jeśli typ wartości parametru różni się od typu atrybutu obiektu (np. Rekwizyty 1 ma typ Numer, a wartością parametru jest typ Linia), to aby poprawnie wyświetlić pole, należy jawnie rzutować wartość parametru na żądany typ:

WYBIERAĆ
WYBÓR
KIEDY Dostawa. Współczynnik = 1 WTEDY WYRAŻONA(&Reprezentacja JAKO String(100)) W PRZECIWNYM WYPADKU Dostawa. Współczynnik
KONIEC JAKO Stosunek
Z
Dokument.Dostawa produktów JAK dostarczyć

Jeżeli pole, za pomocą którego dokonywany jest wybór, zostanie wyłączone przy użyciu opcji funkcjonalnych, to wybór za pomocą takiego pola nie zostanie zainstalowany, nawet jeśli wartość wyboru zostanie przekazana jako parametry formularza lub łącza parametrów wyboru.
Korzystając z właściwości Dynamiczny odczyt danych, wskazujesz liście dynamicznej potrzebę odczytywania danych w małych porcjach
(więcej szczegółów na temat sposobów uzyskiwania danych przy użyciu listy dynamicznej i buforowania danych można znaleźć poniżej). Niezależnie od tego atrybutu obowiązują następujące warunki:

● Jeśli tryb widoku jest ustawiony na listę hierarchiczną, zostaną odczytane tylko dane bieżącej grupy i dane wszystkich elementów nadrzędnych (bez dzieci).
● Jeśli ustawiony jest tryb widoku drzewa, odczytywane będą tylko dane z otwartych węzłów drzewa.
● Jednorazowe ładowanie dynamicznych danych listowych nie jest obsługiwane, jeśli ustawione jest przeglądanie hierarchiczne (właściwość Wyświetl jest ustawiona na Drzewo), a początkowe wyświetlanie drzewa jest ustawione na Rozwiń wszystkie poziomy. Aby uzyskać dane, zostanie wysłanych do serwera tyle żądań, ile jest węzłów na wyświetlonej liście.
W ramach pojedynczego pobrania danych lista dynamiczna ponownie wykorzystuje wcześniej utworzone tabele tymczasowe, jeśli spełnione są następujące warunki:
● Zapytanie wsadowe listy nie zawiera żadnych zapytań po głównym zapytaniu wsadowym.
● Skład tabel tymczasowych i znajdujących się w nich pól nie uległ zmianie w stosunku do poprzedniego wykonania żądania wsadowego.

W swojej pracy lista dynamiczna wykorzystuje wartości następujących właściwości szczegółów obiektu metadanych:
● format,
● format edycji,
● wskazówka,
● znak do podkreślania wartości ujemnych,
● maska,
● znak trybu wieloliniowego,
● znak zaawansowanego montażu,
● tryb hasła.
Podczas wyświetlania i edycji wyboru i parametrów systemu kompozycji danych używany jest format edycji odpowiedniego pola.

2. Ograniczenia i funkcje

Ustawiając wybór na liście dynamicznej, należy pamiętać, że wybór nie ma wpływu na grupy, jeśli tryb wyświetlania listy dynamicznej to Lista hierarchiczna lub Drzewo. Przez „grupy” rozumiemy element katalogu lub planu charakterystycznych typów, którego właściwość ThisGroup jest ustawiona na True.
Kwalifikacje są automatycznie stosowane przez dynamiczną listę do standardowych szczegółów: Właściciel, Rodzic, Data, Okres i TaGrupa.
przy użyciu standardowych narzędzi systemu kompozycji danych. Selekcji, automatycznie stosowanej przez dynamiczną listę do kluczowych pól, można dokonać zarówno standardowo za pomocą systemu składu danych, jak i bezpośrednio dodając warunki do tekstu żądania W do pól stołu głównego. Dzięki zastosowaniu selekcji za pomocą narzędzi układu można je zastosować zarówno w zapytaniach zagnieżdżonych, jak iw parametrach tabel wirtualnych.

Podczas opracowywania list dynamicznych zaleca się testowanie wszystkich list dynamicznych za pomocą niestandardowych zapytań. Podczas procesu weryfikacji należy upewnić się, czy jeśli zapytanie listowe zawiera zagnieżdżone zapytania lub tabele wirtualne, a w nich dostępne są pola z aliasami odpowiadającymi aliasom standardowych szczegółów Właściciel, Rodzic, Data, Okres, TaGrupa lub pola kluczowe wyboru, wówczas pola te są prawidłowe i odpowiadają standardowym szczegółom, z którymi odpowiada ich pseudonim. Jeśli tak nie jest, należy zmienić żądanie tak, aby pasowało do lub
pseudonim był inny.
Jeśli zdecydujesz się na ręczne wygenerowanie żądania, na żądanie zostaną nałożone pewne ograniczenia:
● Używanie instrukcji FIRST w zapytaniu dotyczącym listy dynamicznej nie jest obsługiwane. Jeżeli zachodzi potrzeba skorzystania z selekcji ograniczonej ilością rekordów na liście dynamicznej należy przerobić żądanie wygenerowania listy dynamicznej w taki sposób, aby faktyczna treść żądania znalazła się w podzapytaniu i ograniczyć ilość rekordów otrzymane w tym podzapytaniu. Zamiast podzapytania możesz także użyć tabeli tymczasowej.
● Zaznaczanie, sortowanie i grupowanie nie są obsługiwane:

  • Zgodnie ze szczegółami części tabelarycznych.
  • Wyświetl pola.
  • Pole Wersja danych.
  • Pole PredefiniowaneDataName.
  • Pole typu tabeli planu kont.
  • Pole Typ ruchu tabeli rejestru akumulacji.
  • Typ polaWartości charakterystycznej tabeli planu typu.
  • Pole typu Typ;
  • Pole typu String (nieograniczona długość).
  • Pole typu BinaryData.

● Sortowanie i grupowanie według pól Subconto nie jest obsługiwane<НомерСубконто>i WyświetlSubconto<НомерСубконто>Tabele RuchySubconto rejestru księgowego.
● Grupowanie według pól będących wyrażeniami języka zapytań zawierających funkcje agregujące nie jest obsługiwane.
● Gdy wybrana jest tabela główna, zapytanie o listę dynamiczną ma następujące ograniczenia:

  • Złączenia nie są obsługiwane.
  • Sekcja ZAMÓW PRZEZ nie jest obsługiwana. Powinieneś użyć zapytania bez tabeli głównej lub ustawić niezbędną kolejność poprzez ustawienia listy dynamicznej.

● Jeśli lista dynamiczna jest wyświetlana jako lista lub drzewo hierarchiczne, wówczas wpis nie będzie wyświetlany jako lista dynamiczna, chyba że zostanie wyświetlony co najmniej jeden element nadrzędny tej pozycji. Innymi słowy, aby wyświetlić element listy hierarchicznej, lista dynamiczna musi także wyświetlać wszystkich rodziców tego elementu aż do góry listy. W tym przypadku przez górę listy mamy na myśli albo
element główny obiektu hierarchicznego wyświetlanego na liście dynamicznej lub element ustawiony jako właściwość ParentTopLevel rozszerzenia tabeli formularza dla listy dynamicznej.

Używanie poniższych tabel jako tabeli głównej listy dynamicznej nie jest obsługiwane:

● Tabela, która nie posiada klucza jednoznacznie identyfikującego każdy rekord tabeli (odniesienie dla tabel obiektowych i klucz rekordu dla tabel rejestrowych). Jednakże poniższe tabele można ustawić jako główną tabelę listy dynamicznej (pomimo braku klucza):

● Tabela Subconto rejestru księgowego;
● wszystkie wirtualne tabele rejestru księgowego, z wyjątkiem tabeli MovementsSubconto;
● tabele wartości stałych (w tym tabela Stałych);
● tabele zewnętrznych źródeł danych bez kluczowych pól;
● tabele kostek zewnętrznych źródeł danych;
● tablice rejestrów akumulacji:

  • stół obrotowy;
  • tabela bilansowa;
  • tabela obrotów i sald.

● tablice rejestrów obliczeniowych:

  • tabela faktycznego okresu ważności;
  • dane harmonogramu;
  • podstawowe dane.

● Tabele tabelarycznych części obiektów;
● Tabele rejestracji zmian (wykorzystywane w mechanizmach wymiany danych);
● Tabele sekwencji;
● Tabele przeliczeniowe (wykorzystywane w mechanizmach rozliczeń okresowych).
● Tabela używana w zapytaniu tylko w sprzężeniu zewnętrznym.

Innymi słowy lista dynamiczna z podaną tabelą główną będzie działać poprawnie jeśli w wyniku wykonania zapytania:
podanego jako źródło danych, liczba wierszy uzyskanych z tabeli głównej nie zwiększa się (biorąc pod uwagę narzuconą selekcję). Jeżeli w wyniku wykonania zapytania zwiększy się liczba wierszy uzyskanych przez zapytanie z tabeli głównej, doprowadzi to do naruszenia unikalności klucza rekordów tabeli wyświetlanej na liście. W takim przypadku należy wyłączyć korzystanie z głównej tabeli listy dynamicznej.
Pracując z listą dynamiczną należy uwzględnić prawa dostępu do szczegółów wyświetlanych na liście:
● Dane z kolumn listy dynamicznej, które są oznaczone właściwością Zawsze używaj, ale dla których bieżący użytkownik nie ma prawa Widok, nie są przesyłane do strony klienta. Dostęp do danych takich kolumn (za pomocą właściwości CurrentData i metody RowData())
nie jest możliwe po stronie klienta.
● Jeśli bieżący użytkownik nie ma prawa Widok do pola kluczowego listy dynamicznej, pobranie danych z tej listy dynamicznej spowoduje błąd naruszenia zasad dostępu.
W przypadku listy dynamicznej wyświetlającej listę wyliczeniową nie ma możliwości interaktywnego dostosowywania listy.
Skład kolumn i ustawienia listy dynamicznej są powiązane z polami zapytania za pomocą aliasów pól wyboru. Jeśli alias nie jest jawnie określony w zapytaniu o pole wyboru, a pole jest polem systemowym, wówczas jako alias używana jest nazwa pola dla angielskiej wersji języka wbudowanego.
Podana relacja oznacza, że ​​przy zmianie (lub jawnym określeniu aliasu dla pola, dla którego zastosowano automatyczny alias)
alias pola zapytania generującego dane listy dynamicznej, ustawienia atrybutów listy dynamicznej zostaną utracone, elementy formularza „utracą” wyświetlane szczegóły, ustawienia listy dynamicznej staną się nieprawidłowe itp.
Jeśli źródłem danych listy dynamicznej jest tabela (zwykła lub wirtualna), która umożliwia ustawienie selekcji według okresu, to jeśli użytkownik ustawi okres wyświetlania na takiej liście dynamicznej (polecenie Ustaw przedział daty...),
określone granice okresu zostaną ustawione jako wartości selekcji lub parametry tabeli wirtualnej. Jeśli za pomocą rozszerzenia języka
zapytań do systemu kompozycji danych, jawnie podano nazwy parametrów tabeli wirtualnej - parametry z określonym
nazwy. Tabele, dla których można kontrolować okres wyświetlania lub przetwarzania danych:
● tablice rejestrowe (główne lub wirtualne), dla których istnieje możliwość wyboru po okresie (dla rejestru rozliczeniowego - po okresie rejestracji);
● główne tabele dokumentów, procesów biznesowych i zadań;
● główne tabele dzienników dokumentów;
● tablice ciągu głównego, tablice brzegów ciągu.
Parametr zapytania o listę dynamiczną może być tablicą lub listą wartości. Jeśli jednak parametr jest listą wartości, wówczas jako wartość do wyboru zostanie użyta tylko pierwsza wartość z listy. Jeśli lista dynamiczna korzysta z zapytania z parametrami, wstępne ustawienie wartości parametrów należy wykonać w procedurze obsługi OnCreateOnServer.
Wyświetlając dane listy dynamicznej, należy pamiętać o następujących kwestiach:
● Kiedy programowo zmieniasz właściwości listy dynamicznej, panele poleceń skojarzone z listą nie są automatycznie ponownie wypełniane.
z tą dynamiczną listą.
● Jeżeli wiele pól jest zgrupowanych w grupę przy użyciu trybu grupowania w komórce i w zgrupowanych polach znajduje się pole wyświetlane w formie checkboxa, to to pole wyboru będzie zawsze wyświetlane jako pierwsze w wynikowej komórce (na lewo od tekst).
Na liście dynamicznej podczas określania typu danych dla pól, których wyrażenia zawierają parametry, pola lub literały, wynikowy typ jest określany na podstawie typów pól i literałów. Jeśli typ wartości parametru nie zostanie uwzględniony w wynikowym typie danych, jego wartość zostanie obcięta.
Na przykład w poniższym przykładzie pole będzie typu Liczba.

WYBÓR
KIEDY TO KŁAMSTWO
WTEDY 5
W PRZECIWNYM RAZIE
&Parametr
KONIEC

Jeśli ustawisz parametr Parametr na wartość innego typu, lista dynamiczna dla tego pola otrzyma wartość 0 (wartość domyślna dla typu Liczba).
Jeżeli w takiej sytuacji zachodzi potrzeba wybrania parametru innego typu, zaleca się zastosowanie konstrukcji języka zapytań WYRAZIĆ. Na przykład,
jeśli w powyższym przykładzie trzeba przekazać do parametru ciąg znaków nie dłuższy niż 100 znaków, to należy zastąpić proste wskazanie parametru wyrażeniem z jawnym rzutowaniem typu:

WYBÓR
KIEDY TO KŁAMSTWO
WTEDY 5
W PRZECIWNYM RAZIE
EXPRESS(&Parametr AS String(100))
KONIEC

Jeżeli dowolny tekst żądania listy dynamicznej używa parametrów w wyrażeniach pól wyboru, należy jawnie wskazać typ parametrów za pomocą konstrukcji WYRAZIĆ. Na przykład zamiast &Nomenklatura AS Nomenklatura używać
EXPRESS(&Nomenklatura AS Katalog.Nomenklatura) AS Nomenklatura. W przeciwnym razie przeszukiwanie paska wyszukiwania może działać
nieprawidłowe lub powodują błędy.

3. Metody odzyskiwania i buforowania danych za pomocą listy dynamicznej

Podczas uzyskiwania danych do wyświetlenia lista dynamiczna wykorzystuje jedną z trzech metod:
1. Odczyt z bazy danych odbywa się fragmentami o liczbie elementów danych nieco większej niż liczba wierszy jednocześnie wyświetlanych na liście (ale nie mniejszej niż 20). Dane nie są buforowane na serwerze.
2. Odczyt z bazy danych odbywa się na stronach po 1000 pozycji danych. Dane są buforowane na serwerze. Dane hierarchiczne są buforowane: dla każdego elementu nadrzędnego buforowane są nie więcej niż 2 strony elementów. Na jedną listę dynamiczną buforowanych jest nie więcej niż 20 stron elementów. Buforowanie zostanie włączone przez dynamiczną listę dla następujących tabel:
● Kryteria selekcji;
● Wszystkie tabele rejestru księgowego, z wyjątkiem tabeli głównej i tabeli MovementsSubconto;
● Wszystkie tabele rejestrów akumulacji, z wyjątkiem tabeli głównej;
● Wszystkie tabele rejestru informacyjnego, z wyjątkiem tabeli głównej;
● Wszystkie tabele rejestru obliczeniowego, z wyjątkiem tabeli głównej;
● Wirtualna tabela zadań według wykonawców;
● Tabele źródeł zewnętrznych bez kluczy;
● Kostki ze źródeł zewnętrznych.

3. Odczyt z bazy danych odbywa się na stronach po 1000 elementów. Pierwsza część to 1 strona. Każda kolejna porcja zwiększa się o 1 stronę (po osiągnięciu końca poprzedniej próbki). Im bliżej końca wyświetlanych danych przesuwa się „punkt widzenia”, tym większa jest próbka odczytywana z bazy danych, która ostatecznie staje się równa wszystkim wyświetlanym danym. Dane są buforowane na serwerze. Maksymalna liczba wpisów w pamięci podręcznej i liście dynamicznej wynosi 1 000 000.
W zależności od tego, co wybierze główna tabela listy dynamicznej i jaką wartość przyjmuje właściwość Dynamic Reading, stosowana jest ta lub inna metoda odczytu danych:

● Jako wartość właściwości Tabela główna określona jest jedna z następujących tabel: plan wymiany, katalog, lista dokumentów, arkusz dokumentów, typ planu cech, plan kont, plan typów obliczeń, proces biznesowy, zadanie, tabela punkty procesu biznesowego:



● Jako wartość właściwości Tabela główna określono jedną z następujących tabel: tabela główna rejestru informacyjnego, rejestr akumulacji, rejestr księgowy, rejestr obliczeniowy, wirtualna tabela rejestru księgowego MovementsSubconto:

● Właściwość dynamicznego odczytu:
● Zainstalowano: stosowana jest metoda 1 (opis metod znajduje się powyżej).
● Reset: Stosowana jest metoda 2 (opis metod znajduje się powyżej).

● Właściwość Tabela główna zawiera tabelę kryteriów wyboru lub tabelę zadań według wykonawców (Zadania według wykonawcy):
● Klucz identyfikujący wiersz tabeli: Link.

● Właściwość Main table określa wirtualną tablicę rejestru informacyjnego SliceFirst lub SliceLast:
● Klucz identyfikujący wiersz tabeli: RecordKey.
● Właściwość odczytu dynamicznego nie ma zastosowania.
● Stosowana jest Metoda 2 (opis metod znajduje się powyżej).

● Właściwość Tabela główna jest ustawiona na jedną z wirtualnych tabel rejestrów, z wyjątkiem wymienionych powyżej:

● Właściwość odczytu dynamicznego nie ma zastosowania.

● Nie określono właściwości tabeli głównej, użyte zostało dowolne zapytanie:
● Klucz identyfikujący wiersz tabeli: Numer.
● Właściwość odczytu dynamicznego nie ma zastosowania.
● Stosowana jest Metoda 3 (opis metod znajduje się powyżej).

W celu wyświetlenia dane przesyłane są do klienta porcjami, których wielkość jest zbliżona do wielkości porcji w I sposobie odczytu danych (opisanym na początku tego rozdziału).
Kiedy tworzysz formularz zawierający listę dynamiczną, do klienta jest początkowo przekazywanych 45 elementów danych z każdej widocznej listy dynamicznej (jeśli lista zawiera więcej niż 45 pozycji). Jeśli lista dynamiczna wyświetla więcej niż 45 wierszy, po otwarciu formularza zostanie wykonane dodatkowe wywołanie serwera w celu pobrania brakujących elementów danych.

4. Ustawienia listy dynamicznej

Ustawienia listy właściwości - kliknięcie hiperłącza Otwórz powoduje otwarcie formularza umożliwiającego ustawienie wyświetlania listy dynamicznej. Konfigurowanie listy odbywa się w taki sam sposób, jak podobne operacje w systemie kompozycji danych.


Ryż. 2. Warunkowe stylizowanie listy dynamicznej

Konfigurując listę dynamiczną w konfiguracji, twórca aplikacji ma możliwość wykonania następujących czynności:
● ustaw pola, według których chcesz sortować;
● opisać wybór danych na liście;
● określić ustawienia wyglądu warunkowego;
● ustaw pola, według których chcesz grupować dane.
Jeśli nie jesteś zadowolony z domyślnego sortowania zainstalowanego przez system, sensowne jest ustawienie sortowania dla programisty.

RADA. Należy pamiętać, że zły dobór pól sortujących (oraz selekcja i grupowanie danych) negatywnie wpływa na efektywność próbkowania dynamicznego.
Z punktu widzenia twórcy aplikacji ustawienia listy dynamicznej składają się z kilku połączonych ze sobą części. Główną właściwością, za pomocą której można zarządzać ustawieniami listy dynamicznej, jest Ustawienia Linkera. Obiekt ten zawiera trzy zestawy ustawień, które po uruchomieniu systemu określają ostateczne ustawienia zastosowane do listy dynamicznej:
● Ustawienia – ustawienia utworzone w trybie Konfiguratora. Właściwość Order listy dynamicznej zapewnia szybki dostęp do właściwości Settings.Order narzędzia do tworzenia ustawień listy dynamicznej, dzięki czemu następujące konstrukcje są równoważne:
List.Order i List.SettingsLinker.Settings.Order;
● Ustawienia użytkownika – są to ustawienia, które użytkownik zmienia w trybie 1C:Enterprise;
● Stałe ustawienia – te ustawienia są ustawiane z poziomu wbudowanego języka. Właściwość ta zawiera także wartości selekcji, które przekazywane są do formularza za pomocą jego parametrów. Właściwości listy dynamicznej Wybór, Opcje, Wygląd warunkowy zapewniają szybki dostęp do stałych ustawień kreatora ustawień listy dynamicznej. Innymi słowy, te wywołania są równoważne:
List.Settings Composer.FixedSettings.Selection i List.Selection.
Podczas tworzenia ostatecznych ustawień listy dynamicznej różne opcje ustawień są łączone w następujący sposób:
● Jeśli jakikolwiek typ ustawień jest w całości oznaczony jako niestandardowe, wówczas powstałe ustawienia będą zawierać ustawienia niestandardowe
(List.ComposerSettings.UserSettings). Ponadto, jeśli jakiekolwiek elementy ustawień zostaną oznaczone jako niedostępne, wówczas ustawienia te zostaną umieszczone w ustawieniach wynikowych z właściwości List.Settings Composer. Ustawienia.
● Jeśli jakiś typ ustawień jest oznaczony jako niestandardowe nie w całości, ale element po elemencie, to:
● Elementy oznaczone jako niestandardowe zostaną uwzględnione w ustawieniach wynikowych z właściwości List.SettingsComposer.CustomSettings.
● Elementy oznaczone jako niedostępne zostaną uwzględnione w ustawieniach wynikowych z właściwości List.SettingsComposer.Settings.
● Stałe ustawienia (List.SettingsComposer.FixedSettings) są dodawane do ustawień wynikowych „tak jak są”. Jednocześnie niedopuszczalne jest, aby w ustawieniach stałych i użytkownika znajdowały się ustawienia o tej samej nazwie, np. selekcja z tą samą lewą wartością w warunku.

Jeśli ustawienia listy dynamicznej zawierają ustawienia, które są wyłączone przy użyciu opcji funkcjonalnych, ustawienia te zostaną usunięte z listy dostępnych ustawień po pobraniu danych listy dynamicznej.
Kontrolowanie, które ustawienia będą dostępne dla użytkownika, a które nie, odbywa się w oknie ustawień listy dynamicznej.


Ryż. 3. Kontroluj włączenie w ustawieniach użytkownika

Pole wyboru znajdujące się w dolnej części okna (patrz rys. 3) odpowiada za umieszczenie w ustawieniach całego typu ustawień (normalnych lub szybkich). Ta funkcja jest dostępna do wyboru, porządkowania, grupowania i warunkowania. Jeżeli ustawienia określone są w trybie edycji Szybki wybór, to we właściwości Grupa ustawień użytkownika tabeli formularza wyświetlającego listę dynamiczną należy określić pustą grupę formularza, w której będą znajdować się elementy powiązane z szybkimi ustawieniami użytkownika zostanie zlokalizowana lista dynamiczna. Jeżeli grupa nie zostanie określona, ​​szybkie ustawienia użytkownika nie zostaną wyświetlone w formularzu. Możliwe jest również jawne wywołanie tworzenia ustawień niestandardowych przy użyciu wbudowanego języka przy użyciu metody CreateCustomSettingsFormItems() dynamicznego rozszerzenia listy.
Można także wybrać, czy w ustawieniach użytkownika mają być umieszczane określone elementy ustawień. Ta funkcja jest dostępna dla elementów wyboru i projektu warunkowego (patrz rysunek 3).

Jeśli podczas otwierania listy dynamicznej chcesz załadować jakieś specjalne ustawienia, możesz to zrobić na dwa sposoby:
● Korzystanie z parametru formularza listy dynamicznej UserSettings. Dane zawarte w tym parametrze zostaną umieszczone w ustawieniach listy dynamicznej użytkownika.
● Korzystanie z formularza dynamicznej listy parametrUserSettingsKey. Jeśli określisz ten parametr podczas otwierania formularza, to ustawienia użytkownika znajdujące się w magazynie ustawień z określonym kluczem zostaną wczytane do listy dynamicznej, która jest głównym atrybutem formularza.

5. Szukaj na liście dynamicznej

Dynamiczna lista znajdująca się na formularzu daje możliwość interaktywnego wyszukiwania wyświetlanych danych. Wyszukiwanie można przeprowadzić za pomocą następujących narzędzi: paska wyszukiwania, okna wyszukiwania, wyszukiwania bieżącej wartości, korzystania z historii wyszukiwania i ustawiania kropki (dla dynamicznych list wyświetlających dokumenty). Wynikiem wyszukiwania jest ograniczony zestaw rekordów
dynamiczna lista (dostępnych dla danego użytkownika) spełniających kryteria wyszukiwania.
Aby kontrolować możliwości wyszukiwania listy dynamicznej, w zarządzanym formularzu, który wyświetla listę dynamiczną, znajdują się trzy właściwości tabeli:
● Pozycja szukanego ciągu – określa pozycję szukanego ciągu. Może przyjmować następujące wartości: Auto, Pasek poleceń, Brak, Góra, Dół.


Ryż. 4. Wyszukaj ciąg na dynamicznej liście

Jeżeli wartość tej właściwości jest ustawiona na Panel poleceń, to szukany ciąg zostanie wyświetlony w panelu poleceń formularza (jeśli głównym atrybutem formularza jest lista dynamiczna) lub w panelu poleceń powiązanym z listą dynamiczną. Pasek wyszukiwania umieszczony w pasku poleceń jest zawsze dociśnięty do prawej krawędzi paska poleceń (wraz z przyciskami znajdującymi się po prawej stronie paska wyszukiwania).
Jeśli właściwość jest ustawiona na Nie, szukany ciąg nie pojawi się w formularzu, a gdy zaczniesz wpisywać szukany ciąg, otworzy się okno dialogowe.
Jeśli właściwość jest ustawiona na Góra, pasek wyszukiwania będzie zlokalizowany pomiędzy paskiem poleceń listy a tabelą wyświetlającą listę dynamiczną. Jeśli właściwość jest ustawiona na Bottom, szukany ciąg zostanie umieszczony bezpośrednio po tabeli wyświetlającej listę dynamiczną.


● Jeśli właściwość Tryb zgodności jest ustawiona na Nie używaj lub jest starsza niż wersja 8.3.4 – wartością jest Panel poleceń.
Przejdź do linii wyszukiwania w następujący sposób:
● Naciskając kombinację klawiszy Ctrl+F;
● Mysz;
● Kiedy zaczynasz pisać na liście dynamicznej (biorąc pod uwagę wartość właściwości SearchOnTyping listy dynamicznej).
● Wyświetl pozycję stanu – opisuje, gdzie będzie wyświetlany stan widoku: jakie pola były przeszukiwane i jakie wartości
szukać na każdym polu. Może przyjmować następujące wartości: Auto, Brak, Góra, Dół


Ryż. 5. Wyszukaj stan na liście dynamicznej

Jeśli właściwość jest ustawiona na Nie, stan widoku nie będzie obecny na formularzu. Dzięki temu, czy wyszukiwanie zostało zakończone, czy nie, będzie można określić jedynie na podstawie dostępności przycisku Anuluj wyszukiwanie.
Jeśli właściwość jest ustawiona na Góra, stan widoku będzie zlokalizowany pomiędzy paskiem poleceń listy a tabelą wyświetlającą listę dynamiczną. Jeśli właściwość jest ustawiona na Dół, stan widoku zostanie umieszczony bezpośrednio po tabeli wyświetlającej dynamiczną listę.
Jeśli formularz został utworzony w 1C:Enterprise w wersji 8.3.4 i wcześniejszych, właściwość jest ustawiona na Nie. Jeśli formularz został utworzony w 1C:Enterprise w wersji 8.3.5 i starszej, właściwość jest ustawiona na Auto. Rzeczywista wartość nieruchomości w tym przypadku zostanie ustalona w następujący sposób:
● Jeżeli właściwość Tryb zgodności jest ustawiona na wersję 8.3.4 (i niższą) – wartość Nie;
● Jeśli właściwość Tryb zgodności jest ustawiona na Nie używaj lub jest starsza niż wersja 8.3.4 – wartość Top;
● Pozycja kontroli wyszukiwania – określa, gdzie pojawi się przycisk kontroli wyszukiwania. Przycisk otwiera menu, w którym znajdują się następujące informacje: polecenia Znajdź według aktualnej wartości, Wyszukiwanie zaawansowane, Anuluj wyszukiwanie, Ustaw okres (dla list dokumentów i dzienników) oraz historię zapytań wyszukiwania (ostatnie 5 zapytań). Właściwość może przyjmować następujące wartości: Auto, Brak, Panel poleceń.


Ryż. 6. Zarządzanie wyszukiwaniem na liście dynamicznej

Jeżeli właściwość jest ustawiona na Nie, wówczas przycisk kontroli wyszukiwania nie będzie na formularzu (ale polecenia będą dostępne z poziomu menu Więcej). Wartość właściwości Pasek poleceń umieszcza przycisk na pasku poleceń skojarzonym z tabelą wyświetlającą dynamiczną listę.
Jeśli formularz został utworzony w 1C:Enterprise w wersji 8.3.4 i wcześniejszych, właściwość jest ustawiona na Nie. Jeśli formularz został utworzony w 1C:Enterprise w wersji 8.3.5 i starszej, właściwość jest ustawiona na Auto. Rzeczywista wartość nieruchomości w tym przypadku zostanie ustalona w następujący sposób:
● Jeżeli właściwość Tryb zgodności jest ustawiona na wersję 8.3.4 (i niższą) – wartość Nie;
● Jeśli właściwość Tryb zgodności jest ustawiona na Nie używaj lub jest starsza niż Wersja 8.3.4 – wartością jest Panel Poleceń;
Jeżeli na formularzu znajduje się kilka paneli poleceń, dla których źródłem poleceń jest jedna tabela zarządzanego formularza (wyświetlająca dynamiczne dane w formie listy), wówczas linia wyszukiwania i przycisk kontroli wyszukiwania będą zlokalizowane tylko w jednym panelu poleceń:
● Lub na pasku poleceń samej listy dynamicznej (jeśli ma włączone automatyczne uzupełnianie)
● Lub w którymkolwiek z pozostałych paneli poleceń.

Przyjrzyjmy się funkcjom wyszukiwania na liście dynamicznej:
● Aby wyszukiwanie było wygodne w użyciu (w tym pod względem wydajności), należy włączyć wyszukiwanie pełnotekstowe dla wszystkich obiektów konfiguracyjnych, które mogą służyć jako główna tabela listy dynamicznej. Ponadto wyszukiwanie pełnotekstowe powinno obejmować wszystkie szczegóły obiektów konfiguracyjnych, które mogą być wyświetlane na liście dynamicznej i dla których może być wymagane wyszukiwanie.
Jeśli obiekt zostanie wykluczony z wyszukiwania pełnotekstowego, wówczas dany mechanizm wyszukiwania będzie działał, ale wydajność takiego wyszukiwania będzie bardzo niska. Nie zaleca się wyszukiwania obiektów, które nie są indeksowane w trybie wyszukiwania pełnotekstowego.
● Rozwiązanie aplikacyjne musi posiadać rutynowe zadanie polegające na regularnej aktualizacji indeksu wyszukiwania pełnotekstowego.

● Wyszukiwanie nie jest przeprowadzane we wszystkich kolumnach listy dynamicznej (i obiekcie konfiguracyjnym), ale tylko w tych kolumnach, które są wyświetlane w tabeli.
● Wyszukiwanie na liście dynamicznej według pól typów referencyjnych z dowolną reprezentacją odbywa się według pól, które są używane
formacja reprezentacji (patrz tutaj). Pola zawarte w widoku są uzyskiwane z uwzględnieniem procedury obsługi ViewFieldGettingProcessing() odpowiedniego obiektu.
● W przypadku list dynamicznych z określoną tabelą główną, wyszukiwanie pełnotekstowe jest wykorzystywane w tabeli głównej. Wszystkie nieindeksowane linki z tabeli głównej zostaną dodane do wyników wyszukiwania pełnotekstowego. Wynik pełnotekstowego wyszukiwania tabeli głównej jest używany jako wybór na podstawie kluczowych pól. Wyszukiwaniu pełnotekstowemu podlegają także pola wyświetlane na liście z innych tabel (jeżeli pole i obiekt konfiguracyjny korzystają z wyszukiwania pełnotekstowego). Bez włączonego wyszukiwania pełnotekstowego dane mogą być
znaleziono, ale samo wyszukiwanie będzie bardzo powolne.
Jeśli podczas próby wyszukiwania pełnotekstowego wystąpi błąd, wyszukiwanie zostanie przeprowadzone bez zastosowania wyszukiwania pełnotekstowego.
Może się to zdarzyć na przykład podczas wyszukiwania jednej litery i dużej liczby wierszy w bazie informacji rozpoczynających się od tej litery.
● Jeśli dla pola w tabeli głównej listy dynamicznej zostanie użyta selekcja z typem porównania Równe, to podczas wyszukiwania pełnotekstowego do zapytania wyszukiwania tej tabeli zostanie dodana wartość selekcji.
● Szukany ciąg jest dzielony na słowa. Podział ten przeprowadzany jest według następujących zasad:
● Linia jest dzielona przy użyciu spacji i tabulacji jako ograniczników.
● Następnie każdy powstały fragment jest przetwarzany:
● Jeśli fragment jest reprezentacją daty (z czasem lub bez) w oparciu o ustawienia regionalne bieżącej sesji, wówczas fragmentem jest słowo.
● W przeciwnym razie fragment jest dzielony dalej, używając znaków „,.-/\” jako ograniczników. W tym przypadku każdy powstały fragment ciągu jest traktowany jako słowo.

● Dla każdego słowa tworzony jest własny zestaw warunków, które są łączone „za pomocą LUB”. Ten zestaw warunków generowany jest w przypadku, gdy wyszukiwanie pełnotekstowe danego słowa w tabeli, z której uzyskano to pole, zwróciło co najmniej jeden obiekt, lub dla tego pola nie zastosowano wyszukiwania pełnotekstowego. Warunki są tworzone w następujący sposób:
● Dla pola typu String, warunek ma postać FieldName LIKE %Word%.
● W przypadku pola typu Number warunek ma postać NazwaPola=Wartość, gdzie Wartość jest słowem przekonwertowanym na typ Number. Jeśli nie można wykonać rzutu, wyszukiwanie w terenie nie zostanie wykonane.
● Słowo jest wyszukiwane jako podciąg w domyślnej reprezentacji logicznej zdefiniowanej dla bieżącej sesji. Jeśli wyszukiwane słowo zostanie znalezione w widoku, następnie wyszukuje wartość odpowiadającą widokowi, w którym słowo zostało znalezione. W tym przypadku wyszukiwanie nie korzysta z widoków określonych za pomocą właściwości Format elementu formularza.
● W przypadku pola typu Date warunek wygląda następująco: FieldName>=StartofDay(Word) ANDFieldName<=КонецДня(Слово). Если Слово подобно дате, в которой год
wskazany przez jedną lub dwie cyfry, rok zostanie zredukowany do bieżącego stulecia, a wartość ta zostanie dodana do warunku wyszukiwania.
● W przypadku pól referencyjnych wyszukiwanie odbywa się na polach użytych do utworzenia widoku referencyjnego. W każdym z tych pól wyszukaj
wykonywane według zasad opisanych powyżej. W wyszukiwaniu nie są używane pola służące do tworzenia niestandardowej reprezentacji danych.
Zestaw warunków dla każdego słowa jest łączony „AND”.
● W przypadku wartości z zerami wiodącymi można wyszukiwać ciąg znaków z zerami wiodącymi lub określony ciąg znaków bez zer wiodących.
● Jeżeli na liście dynamicznej wyświetlana jest lista dokumentów lub historia dokumentów, określony przez Ciebie interwał przeglądania listy wyświetlany jest także w obszarze formularza zarezerwowanym do wyświetlania stanu widoku dla żądanej listy dynamicznej.
● Polecenie wyszukiwania według aktualnej wartości nie jest dostępne, jeśli kryterium wyboru jest tabela główna listy dynamicznej.
● Znalezione fragmenty ciągu są podświetlone, gdy są wyświetlane w tabeli.
● W jednej kolumnie obsługiwany jest tylko jeden ciąg wyszukiwania. Podczas dodawania nowego zapytania do kolumny, która jest już przeszukiwana, wyszukiwane wyrażenie zostanie zastąpione, a nie dodane do siebie dwa wyszukiwane hasła.
● Jeżeli formularz nie posiada elementu formularza, dodatek formularza Wyświetlanie ciągu wyszukiwania powiązanego z tabelą (właściwość dodawania elementu formularza Source) wyświetlającą dynamiczną listę, to naciśnięcie kombinacji klawiszy Ctrl+F otwiera okno wyszukiwania.


Ryż. 7. Okno wyszukiwania

Jeżeli formularz zawiera dodatek elementu formularza w postaci ciągu wyszukiwania formularza powiązanego z tabelą (właściwość dodania elementu formularza Source) wyświetlającą dynamiczną listę, to aby otworzyć okno wyszukiwania należy skorzystać z polecenia Wyszukiwanie zaawansowane.
● Korzystając z okna wyszukiwania, pamiętaj o następujących kwestiach:
● Otwarcie okna wyszukiwania za pomocą skrótu klawiaturowego powoduje wyświetlenie wartości bieżącej komórki w wierszu Co szukać, a wartość przełącznika Jak szukać jest ustawiona na Według dokładnego dopasowania.

● Otwarcie okna wyszukiwania poprzez bezpośrednie rozpoczęcie wpisywania szukanego ciągu na dynamicznej liście powoduje, że wartość przełącznika Jak szukać jest ustawiona na wartość Przez część ciągu, a wpisany tekst trafia do pola Co do pola wyszukiwania.

6. Pobieranie danych wyświetlanych na dynamicznej liście

Podczas korzystania z list dynamicznych może być konieczne wykonanie różnych działań na danych aktualnie wyświetlanych na liście dynamicznej, biorąc pod uwagę zastosowane selekcje i wyszukiwania. Do takich działań zalicza się: przetworzenie wyświetlanych informacji, np. ponowne przesłanie wybranych dokumentów lub ustawienie niektórych szczegółów dla wybranych obiektów, wygenerowanie listy dostępnych obiektów (z projektem itp.), np. w celu wydrukowania lub zapisania do dokumentu arkusza kalkulacyjnego.
Aby uzyskać dane wyświetlane na liście dynamicznej, należy użyć funkcji GetExecutableDataCompositionSchema() i
GetExecutableDataCompositionSettings().
Przykład odbioru danych:

Schema = Elements.List.GetExecutableDataCompositionSchema();
Ustawienia = Items.List.GetExecutableDataCompositionSettings();
LayoutLinker = newDataCompositionLayoutLinker();
LayoutLayout = LayoutComposer.Execute(Schemat, Ustawienia);
CompositionProcessor = newDataCompositionProcessor;
LayoutProcessor.Initialize(LayoutLayout);
OutputProcessor = Nowy OutputProcessorDataCompositionResultInTabularDocument;
ReturnOutputProcessor.Output(CompositionProcessor);

Pobieranie danych do zbioru wartości (tabeli lub listy wartości) odbywa się w ten sam sposób.
Uzyskanie w ten sposób dynamicznych danych listowych posiada szereg cech, które należy uwzględnić przy opracowywaniu rozwiązań aplikacyjnych:
● Następujący projekt tabeli nie jest obsługiwany:
● Zmienne kolory linii;
● Obraz nagłówka;
● Zdjęcie piwnicy;
● Kolor tła stopki;
● Kolor tekstu stopki;
● Czcionka stopki;
● Pozycja pozioma w piwnicy;
● Tryb hasła.
● Wygląd warunkowy określony dla formularza zarządzanego nie jest obsługiwany;
● Przy porządkowaniu tabeli hierarchicznej w kolejności rosnącej według pola typu Link, na pierwszym miejscu zawsze umieszczane są rekordy zawierające puste łącze.

W procesie finalizowania konfiguracji każdy programista 1C napotyka listy dynamiczne.
Lista dynamiczna to obiekt interfejsu służący do wyświetlania różnych list obiektów bazy danych lub danych nieobiektowych – wpisów rejestru.
Na przykład lista dynamiczna służy do wyświetlania listy elementów:

Aby zademonstrować możliwości listy dynamicznej, utwórzmy przetwarzanie zewnętrzne i dodajmy formularz główny. Dodajmy do formularza nowy atrybut o typie „Lista dynamiczna”. Wejdźmy w jego właściwości i zobaczmy, co tam jest.
Interesuje nas właściwość „Żądanie niestandardowe”. Włączenie tej opcji pokaże nam wszystkie możliwości listy dynamicznej. Będziemy mogli napisać żądanie, wykorzystując prawie wszystkie możliwości języka zapytań systemu 1C: Enterprise. Zaznacz pole i kliknij link „Otwórz”:

Domyślnie na naszej liście będzie wyświetlana lista towarów z sumarycznym saldem dla wszystkich magazynów. Aby zaimplementować taką listę, dodaj następujące zapytanie:


Jako tabelę główną wybierzemy „Katalog.Nomenklatura”, co umożliwi nam pracę z listą dynamiczną, tak jak z listą nomenklatury – dodawanie, zmienianie, zaznaczanie elementów katalogu do usunięcia. Ponadto zainstalowanie tabeli głównej umożliwia dynamiczny odczyt danych - oznacza to, że selekcja będzie dokonywana porcjami, w miarę potrzeb.
Następnie musimy utworzyć elementy formularza dla naszej listy:

Jeśli spróbujemy uruchomić przetwarzanie w tym formularzu, pojawi się błąd:


Aby go wyeliminować, należy ustawić wartość parametru „Okres”. Można w tym celu skorzystać z metody „SetParameterValue” z kolekcji „Parameters” listy dynamicznej. Metoda przyjmuje dwa parametry:
. "Parametr" - Typ: String; Parametr składu danych. Nazwa parametru lub parametru kompozycji danych, którego wartość chcesz ustawić;
. „Wartość” — typ: arbitralna. Wartość do ustawienia.
Można go wywołać w procedurze obsługi „OnCreateOnServer” w postaci:

Masz pytanie lub potrzebujesz pomocy konsultanta?


Zapewnimy użytkownikowi możliwość zmiany okresu otrzymywania sald. W tym celu dodaj atrybut i powiązany z nim element formularza „Data”:


W procedurze obsługi „OnChange” elementu formularza „Date” wywołamy metodę „SetParameterValue”, przekazując jako wartość wartość powiązanego atrybutu. W podobny sposób zmieńmy procedurę „Podczas tworzenia na serwerze” formularza. Ponieważ metoda jest dostępna na kliencie, nie ma potrzeby wywoływania serwera:


Teraz, gdy zmieni się data, salda zostaną automatycznie zaktualizowane:




Załóżmy, że użytkownicy chcą zobaczyć salda bieżące lub planowane wpływy. Rozważmy jedną z opcji wdrożenia. Dodajmy atrybut formularza typu logicznego i powiązany przełącznik:


Zmieniając wartość przełącznika, zmienimy treść żądania. W tym celu użyjemy obsługi zdarzenia „Przy zmianie” dla elementu formularza „Wyświetl ilość przy odbiorze”. Musimy zmienić właściwość „QueryText” listy dynamicznej w zależności od wartości atrybutu. Ponieważ ta właściwość nie jest dostępna na kliencie, należy wywołać procedurę serwera:


Wynik wprowadzonych zmian:



Wreszcie spełniło się marzenie każdego siedmiolatka. Jak często użytkownicy programu 7.7 prosili o normalny wybór elementów? Dzięki temu możesz zobaczyć salda, ceny i ustawić filtry. Musieliśmy wymyślać różne triki, łącznie z napisaniem komponentów zewnętrznych. W 1C 8.2 pojawiły się listy dynamiczne. Proponuję rozważyć, co to jest i co mogą nam dać w 1C 8.3.

Przyjmijmy za podstawę pewną konfigurację testową 1C: „Enterprise Accounting 3.0”. Nie będziemy teraz dokonywać selekcji, po prostu dodamy kolejny formularz selekcji w katalogu „Nomenklatura” i uczynimy go tymczasowo głównym:

Po utworzeniu system domyślnie doda do formularza pole tabeli typu „Lista dynamiczna”.

Wejdźmy w jego właściwości i zobaczmy, co tam jest.

Przede wszystkim interesuje nas pole wyboru „Żądanie niestandardowe”. To ujawni nam wszystkie zalety listy dynamicznej. Będziemy mieli możliwość napisania własnego żądania wraz z parametrami. Zaznacz pole i kliknij link „Otwórz”:

Otworzy się okno z gotowym kodem w formacie . Na razie wszystkie pola katalogu „Nomenklatura” są tam po prostu wymienione.

Uzyskaj 267 lekcji wideo na 1C za darmo:

Jak widać, znajduje się tam przycisk wywołania „ ” oraz pole wyboru, które umożliwia dynamiczną zmianę zawartości listy. Oznacza to, że gdy inny użytkownik zmieni coś w katalogu, zmieni się to również na naszej liście. Ponadto istnieje zakładka „Ustawienia”, ale o tym porozmawiamy później.

Niestandardowe zapytanie na liście dynamicznej

Najpierw utwórzmy potrzebne nam żądanie z saldami i cenami. Tak:

Zakładka „Ustawienia”.

A teraz najlepsza część! Przejdź do zakładki „Ustawienia”. I od razu widzimy, że na pierwszej zakładce możemy dokonać dowolnej selekcji dla dowolnego pola w żądaniu:

Programowe ustawianie parametrów zapytania na liście dynamicznej 1C 8.3

Nie zapominaj, że w żądaniu mamy dwa parametry: „Okres” i „Typ ceny”. Musimy przekazać je do żądania, w przeciwnym razie wystąpi błąd.

Zapiszmy te parametry w parametrach formularza, a w module formularza dodajmy następujące linie:

&OnServerProcedureWhenCreatingOnServer(awaria, standardowe przetwarzanie) Lista. Opcje. SetParameterValue("Okres" , Parametry. Data) ; Lista. Opcje. SetParameterValue("Typ ceny", Parametry.Typ ceny) ; Koniec procedury