Zobrazení dat pomocí dynamického seznamu

Kromě primitivních datových typů, které lze nalézt v jakémkoli programovacím jazyce, existují v 1C jedinečné typy. Každý z nich má své vlastní vlastnosti, metody, funkce, účel a nuance použití v systému. Jedním z těchto typů je dynamický seznam, který značně usnadňuje mnoho aplikovaných úloh. Proto musí vývojáři tento univerzální nástroj znát a umět s ním zacházet.

Vlastnosti dynamických seznamů v 1C

Účelem tohoto typu je zobrazení informací z libovolných databázových tabulek bez ohledu na jejich typ. Mechanismus byl vytvořen na základě SKD a má podobné schopnosti. To však neznamená, že budete muset nutně napsat žádost v jazyce 1C, i když tato příležitost existuje a měla by být použita. Můžete jednoduše zadat tabulku, jejíž informace vás zajímají, a 1C nezávisle vygeneruje jednoduchý dotaz.

Chcete-li vidět, jak se dynamický seznam tvoří a jaká data zobrazuje, musíte v konfigurátoru otevřít spravované formuláře, kde se nachází: v seznamu podrobností otevřete pomocí kontextové nabídky jeho vlastnosti a věnujte pozornost „Vlastní Požadavek“. Pokud není žádné zaškrtávací políčko, pak parametr „Hlavní tabulka“ odráží databázovou tabulku, ze které jsou data přebírána. Jinak dynamický seznam odráží data vlastního dotazu, která lze zobrazit otevřením nastavení seznamu.

Vlastní schéma dotazů se používá mnohem častěji, protože poskytuje vynikající příležitost kombinovat a zobrazovat širokou škálu dat. Nejčastěji se tento mechanismus používá k zohlednění skladových zůstatků, cen položek, příjemek, výdajů nebo nákupů. Musíte jej používat opatrně, protože výkon může u složitých dotazů klesnout.

Další užitečná vlastnost dynamického seznamu se otevře, když kliknete na nápis „Nastavení seznamu“. Tato nabídka umožňuje učinit informace přístupnějšími a srozumitelnějšími pro koncové uživatele, a to i při použití standardní sady polí. Bez ohledu na to, zda je požadavek libovolný nebo ne, uvidíte kartu „Nastavení“, kde můžete zadat:

  • Dynamický výběr seznamu;
  • Skupiny;
  • Třídění;
  • Výzdoba.

Díky použití parametrů jsou dynamické seznamy univerzální a poměrně flexibilní. Můžete je také propojit s podrobnostmi na spravovaném formuláři a data se budou měnit v závislosti na parametrech vybraných uživatelem. Použití těchto mechanismů lze pochopit a ocenit zvážením příkladů problémů ze skutečného života.

Jako příklad uveďme úkol reflektovat pozůstatky nomenklatury na řízeném formuláři. V reálné praxi se takové objednávky v různých konfiguracích vyskytují poměrně často a jako nástroj je ideální dynamický seznam. Pro tento úkol budeme muset použít vlastní dotaz, parametry dynamického seznamu a jeho nastavení.

Pro větší přehlednost vytvořme samostatné externí zpracování a umístěme na něj dynamický seznam. K realizaci našich plánů nebude stačit tabulka s nomenklaturou, takže musíme povolit libovolný dotaz. V něm popíšeme levé propojení adresáře se seznamem položek a evidencí zůstatků a nastavíme adresář jako hlavní tabulku. Toto schéma umožní uživatelům, kteří pracují s dynamickým seznamem, přidávat nebo měnit položky.



SELECT NomenclatureList.Name AS Name, GoodsInWarehousesRemainings.Warehouse AS Warehouse, GoodsInWarehousesRemainings.QuantityRemaining AS QuantityRemaining AS QuantityRemaining FROM Directory.Nomenclature AS NomenclatureList LEFT CONNECTIONRegistraceAkumulace.GoodsVe skladuSoučasné pokladyD. ist.Link = ProductsInWarehousesRemainings.Nomenklatura WHERE

Protože náš požadavek používal parametr „CurrentDate“, musíme před zpracováním nastavit jeho hodnotu. Chcete-li to provést, v modulu formuláře v proceduře „When CreatedOnServer“ mu pomocí standardního příkazu přiřaďte funkci „CurrentSessionDate“. Musíme také zobrazit dynamický seznam na kontrolním formuláři a pro přehlednost změnit pořadí polí. Přetáhněte atribut „Zbývající nomenklatura“ do prvků formuláře (vlevo nahoře) a pomocí modrých šipek změňte pořadí polí v tabulce ve formuláři.

&Na serveru Postup při vytvoření na serveru (selhání, standardní zpracování) Nomenklatura zůstává. Parametry. Set ParameterValue("CurrentDate", CurrentSessionDate()) EndProcedure


Již v této fázi můžeme otevřít naše externí zpracování v 1C a vidět, že dynamický seznam funguje. Můžeme se dívat na zůstatky, vytvářet položky a skupiny a vyhledávat. Zákazníci často žádají o přidání možnosti vybrat si datum, kdy uvidí zůstatky. V případě formuláře s dynamickým seznamem je toho dosaženo pomocí dodatečného pole a jeho pomocí nastavení parametrů.

Přidejte atribut „DateRemaining“ typu „Datum“ a přeneste jej do prvků formuláře. V poli události vytvoříme událost „OnChange“ a napíšeme kód pro nastavení parametru „CurrentDate“ použitého v dynamickém požadavku. Aby uživatel při otevření formuláře okamžitě pochopil, k jakému datu vidí zůstatky, provedeme malé změny v postupu „When CreatedOnServer“.



&OnServerProcedureWhenCreatingOnServer(Failure, StandardProcessing)RemainingDate = CurrentSessionDate(); Item Remains.Parameters.SetParameterValue("CurrentDate", RemainingDate); Konec procedury &Na klientovi Postup Remaining DateWhenChanged(Element)Nomenklatura Remaining.Parameters.SetParameterValue("CurrentDate",RemainingDate); Konec procedury

Výsledkem je, že náš formulář Dynamický seznam může odrážet zůstatky k jakémukoli datu.

Zvážili jsme pouze malou část možností této sady nástrojů, ale to již stačí k pochopení výhodnosti tohoto typu dynamického seznamu. Podobný mechanismus se používá pro mnoho úloh, ale nejčastěji se vyskytuje v typických konfiguracích ve spravovaných formulářích:

  1. Výběr;
  2. Seznamy.

Pro obdržení dynamického seznamu a jeho požadavku ve standardních spravovaných formulářích musí vývojář otevřít požadovaný formulář v konfigurátoru. V sekci podrobností najděte podrobnosti s datovým typem „DynamicList“ (nejčastěji je zvýrazněn tučně). Jeho vlastnosti obsahují text požadavku, výběry a další nastavení.

Platforma 1C:Enterprise 8.2 může pracovat s mnoha záznamy v databázové tabulce dynamickým způsobem, to znamená číst data po částech. Dříve v článcích jsme se zabývali mechanismem dynamických seznamů a metodami pro optimalizaci práce s nimi.

Dnes budeme řešit nestandardní problém pro dynamické seznamy. Budeme muset vypočítat celkovou částku pomocí atributu dokumentu „Částka“ a zobrazit ji v patičce seznamu. Podobně vypočítejte průměrnou hodnotu pro pole „Hodnocení“ a zobrazte ji také v patičce dynamického seznamu. Výpočet celkových polí musí zohledňovat výběr nastavený uživatelem v nastavení seznamu dokladů.

Celý problém spočívá v tom, že dynamický seznam nepřijímá všechny položky najednou, ale přijímá je po částech. Proto nemůžeme okamžitě získat souhrn všech dokumentů odpovídajících aktuálnímu výběru. Jak vypočítat součet?

Implementace

A tak přejděme k řešení problému. Začneme změnou formy, poté si popíšeme algoritmus pro získání konečných hodnot.

Forma a rozhraní

Nejprve si připravíme formulář dokumentu pro zobrazení výsledných polí. Za tímto účelem přidáme dva řetězce údajů ve formuláři „Hodnocení“ a „Částka“.

V těchto detailech budou zaznamenány celkové hodnoty pro dokumenty.

Chcete-li zobrazit hodnoty podrobností v zápatí dynamického seznamu, musíte povolit odpovídající možnost pro přidružený prvek formuláře seznamu (viz následující snímek obrazovky).

Nyní se musíte rozhodnout, u jaké události budou aktualizovány výsledky v zápatí seznamu. Pro usnadnění vývoje přidáme do příkazového panelu příkaz "Aktualizovat" a odpovídající formulářový prvek. Po provedení tohoto příkazu budou součty aktualizovány.

V testovací konfiguraci, kterou si můžete stáhnout z odkazu na konci článku, jsem přidal i souhrnnou událost aktualizace při nahrávání dokumentu. V tomto případě se používá formulářový oznamovací mechanismus. Nebudeme se tím podrobněji zabývat.

Algoritmus

Nejproblematičtější část zůstává - musíte získat celkové hodnoty. Postupujeme následovně: vytvoříme požadavek na databázi, abychom získali hodnoty konečných polí v souladu s výběrem nastaveným v dynamickém seznamu. Stojí za zvážení, že výběr může mít složitou podmínku ze skupin.

Poznámka: Nastavení pro dynamické seznamy (viz snímek obrazovky výše) jsou založena na mechanismech systému skládání dat (DCS). Podle toho s nimi můžete pracovat podobným způsobem (programově přidávat, měnit, číst atd.).

Fáze vytváření žádosti o získání výsledků jsou následující:

1. Obdržíme počáteční požadavek na dynamický seznam.

Jak vidíme, požadavek vybere všechny detaily dokumentu. Aby to bylo trochu složitější, přidal jsem své vlastní pole „Úroveň hodnocení“, generované konstrukcí „SELECT“.

2. Zpracujeme text podmínek poptávky (sekce „KDE“) a dosadíme do původní žádosti.

Potřebujeme přidat podmínky k přijatému zdrojovému textu požadavku v souladu s nakonfigurovaným dynamickým výběrem seznamu.

Postup v závislosti na typu předávaného prvku výběru (skupina nebo prvek výběru) vygeneruje odpovídající text podmínky. Všechny podmínky ve skupině jsou ohraničeny závorkami a podmínky ve skupině jsou také ohraničeny závorkami. Podmínky mezi výrazy závisí na nadřazené skupině (podmínka „AND“ je umístěna mezi horními prvky v hierarchii).

Pokud má prvek nastaven příznak použití (vlastnost "Usage"), je prvek zpracován. Vygenerovaný text také závisí na porovnávací podmínce (Rovno, nerovná se, v seznamu atd.). Závislost vygenerovaného textu podmínky na typu porovnání je vidět v následující funkci.

Další zajímavou funkcí je podle mého názoru „GetFieldTextByView“. Je potřeba, aby se do podmínek dotazu nahradila pole, která jsou tvořena výrazy dotazovacího jazyka. Výše jsem k původní žádosti přidal pole „Úroveň hodnocení“. Pokud jej uživatel použije při výběru, musí být do podmínky dotazu nahrazen celý výraz. Tato funkce získá text pole z požadavku na základě jeho reprezentace. U takto složitých polí vrátí celý text výrazu.

Další podrobnosti o algoritmu naleznete v testovací konfiguraci připojené k článku. Níže je snímek obrazovky nastavení výběru a podmínek požadavku, které jsou pro ně vygenerovány.

Vygenerovaný text podmínky se připojí k původní žádosti o dynamický seznam. Výsledek dotazu je umístěn v dočasné tabulce.

3. První dotaz umístíme do dočasné tabulky a provedeme seskupení podle souhrnných polí s nezbytnými agregačními funkcemi.

Dovolte mi připomenout, že potřebujeme získat průměrnou hodnotu pro pole „Hodnocení“ a celkovou částku pro pole „Částka“. Již jsme vygenerovali požadavek zohledňující výběry, zbývá pouze vypočítat celkové hodnoty. To se provádí pomocí následující žádosti:

Po provedení požadavku výsledný výsledek zpracujeme, vrátíme klientovi a zapíšeme do údajů formuláře, které jsme vytvořili dříve. Nakonec jsme dostali výsledky zobrazené v patičce dynamického seznamu (viz první snímek obrazovky v článku).

Optimalita řešení

Obecně může mít tento přístup negativní dopad na výkon. Pokud například program počítá součet bez nastaveného výběru v dynamickém seznamu, může být počet vybraných záznamů obrovský (například za několik let). V důsledku toho může každá aktualizace výsledků trvat desítky (!!!) sekund. Proto má smysl vypočítat výsledky pouze v případě, že byl proveden výběr. Tyto podmínky jsem nastavil v testovací konfiguraci.

Navíc můžeme vypočítat pouze součty a požadavky na straně serveru. Proto musíte k serveru přistupovat vážně, protože postup aktualizace součtů lze provádět velmi často. Představte si pokladní deník účtenek v obchodní organizaci, kde lze za minutu zadat až 5 účtenek a až 300 účtenek za hodinu. Pokaždé, když je dokument napsán, součty budou aktualizovány. Proto by bylo rozumné snížit přenášený provoz pomocí postupů vytržených z kontextu.

Následující snímek obrazovky ukazuje kód programu pro volání funkce serveru mimo kontext, která vrací součty.

Prvním parametrem je předání dynamického výběru seznamu, druhým je struktura typu „SelectionFieldNameSelectionFieldValueType“. Vezměte prosím na vědomí, že první parametr ve funkci je získán jako vlastní hodnota. Nemohu přesně říci proč, ale pokud předáte výběr jako odkaz, platforma zobrazí chybu, že výběr nelze změnit. Chyba se obešla pouze tímto způsobem.->

Poznámka: použití procedur mimo kontext umožňuje několikanásobně snížit velikost přenášeného provozu, protože data formuláře nejsou přenášena na server, na rozdíl od kontextově citlivých serverových procedur (direktiva "&OnServer").

Závěr

Na závěr řeknu, že tento přístup k výpočtu součtů v dynamickém seznamu je z hlediska metodiky vývoje nesprávný. Bylo by správné získat součet podle registrů. Například v šekovém deníku opět můžeme získat peněžní částku v aktuální pokladně buď z dokladů, nebo z příslušné akumulační evidence.

Použití akumulačních registrů vám navíc umožní vypočítat součty bez zohlednění výběru, protože systém optimálně pracuje s již vypočtenými součty za předchozí měsíce.

Přesto při řešení problémů probíhá metoda popsaná v článku.

Soubory ke stažení:

Tisknout (Ctrl+P)

Dynamický seznam

1. Obecné informace

Dynamický seznam je speciální datový typ, který umožňuje zobrazit libovolné informace z databázových tabulek ve formuláři. Chcete-li to provést, musíte určit tabulku, ze které chcete zobrazit data, nebo popsat výsledný výběr v dotazovacím jazyce.
Mechanismus je založen na systému skládání dat a poskytuje možnosti pro třídění, výběr, vyhledávání, seskupování a podmíněné formátování přijatých dat. Zdrojem dat je v tomto případě požadavek, který je buď vygenerován systémem automaticky (na základě zadaných dat), nebo zapsán ručně vývojářem.

Rýže. 1. Možnosti pro vytvoření dynamického seznamu

Při vytváření atributů formuláře typu DynamicList vývojář si může vybrat dva způsoby, jak vytvořit datový dotaz:
● Zadáním hlavní tabulky – v tomto případě stačí zadat tabulku (Vlastnost Hlavní tabulka), ze které chcete přijímat data, a systém automaticky vygeneruje dotaz na data (viz pravá část na Obr. 1).
● Ruční generování požadavku - k tomu je potřeba nastavit vlastnost Vlastní požadavek (viz levá strana obr. 1). Poté bude k dispozici ruční generování požadavku na získání dat z infobáze.
Dotaz může načíst data z více tabulek, takže můžete zadat primární tabulku. Je to proto, aby dynamický seznam mohl určit, která data jsou primární a která sekundární, a mohl správně vybrat a zobrazit informace a také poskytovat standardní příkazy. Pokud však není možné v dotazu určit hlavní tabulku, nelze ji zadat, ale pak
dynamický seznam nebude poskytovat příkazy související s hlavní tabulkou. Navíc se v tomto případě (bez uvedení hlavní tabulky) výrazně sníží efektivita získávání dat dynamickým seznamem.
Pro zlepšení výkonu se doporučuje, aby všechna spojení použitá ve vlastním dotazu pouze k získání dodatečných dat byla volitelná pomocí rozšíření systému dotazování na složení dat.
U dynamického seznamu, který je hlavním atributem formuláře, je možné nastavit hodnoty výběru pomocí parametru formuláře Výběr. K tomu je nutné, aby jméno vlastnosti struktury umístěné v parametru Výběr,
se shodovalo s názvem pole dynamického výběru seznamu. V tomto případě bude hodnota vlastnosti struktury nastavena jako správná hodnota prvku výběru. Pokud je pole, pevné pole nebo seznam hodnot předáno jako hodnota prvku parametru Výběr formuláře dynamického seznamu, pak se k výběru přidá podmínka s možností V seznamu se správnou hodnotou. z nichž je umístěn seznam hodnot (na které se pole a pevné pole převedou).
Libovolný dotaz v dynamickém seznamu může být dotaz, ve kterém se parametr používá ke generování hodnoty pole, například:

VYBRAT
VÝBĚR
KDYŽ dodávka. Koeficient = 1 POTOM &Prezentace
JINAK Dodání. Součinitel
KONEC AS Poměr
Z

Navíc, pokud se typ hodnoty parametru liší od typu atributu object (např. Rekvizity1 má typ Číslo a hodnotou parametru je typ Čára), pak pro správné zobrazení pole musíte explicitně přetypovat hodnotu parametru na požadovaný typ:

VYBRAT
VÝBĚR
KDYŽ Delivery.Coefficient = 1 THEN EXPRESS(&Representation AS String(100)) ELSE Delivery. Součinitel
KONEC AS Poměr
Z
Dokument.Dodání produktů JAK DODAT

Pokud je pole, kterým se nastavuje výběr, zakázáno pomocí funkčních možností, pak se výběr pomocí takového pole nenainstaluje, i když je hodnota výběru předána jako parametry formuláře nebo odkazy na parametry výběru.
Pomocí vlastnosti Dynamické čtení dat udáváte dynamickému seznamu potřebu číst data po malých částech
(další podrobnosti o způsobech získávání dat pomocí dynamického seznamu a ukládání dat do mezipaměti viz níže). Bez ohledu na tento atribut platí následující podmínky:

● Pokud je režim zobrazení nastaven na hierarchický seznam, budou načtena pouze data aktuální skupiny a data všech nadřazených prvků (bez potomků).
● Pokud je nastaven režim stromového zobrazení, budou se číst pouze data z otevřených uzlů stromu.
● Jednorázové načtení dat dynamického seznamu není podporováno, pokud je nastaveno hierarchické procházení (Vlastnost zobrazení je nastavena na Strom) a počáteční zobrazení stromu je nastaveno na Rozbalit všechny úrovně. Pro získání dat bude na server odesláno tolik požadavků, kolik je uzlů v zobrazeném seznamu.
V rámci jediného načítání dat dynamický seznam znovu použije dříve vytvořené dočasné tabulky, pokud jsou splněny následující podmínky:
● Dávkový dotaz seznamu nemá po hlavním dávkovém dotazu žádné dotazy.
● Složení dočasných tabulek a polí v nich se oproti předchozímu provedení dávkového požadavku nezměnilo.

Ve své práci dynamický seznam používá hodnoty následujících vlastností podrobností objektu metadat:
● formát,
● editační formát,
● nápověda,
● znak pro zvýraznění záporných hodnot,
● maska,
● víceřádkový znak režimu,
● známka pokročilé úpravy,
● režim hesla.
Při zobrazování a editaci výběru a parametrů systému skládání dat se používá editační formát odpovídajícího pole.

2. Omezení a vlastnosti

Při nastavování výběru v dynamickém seznamu mějte na paměti, že výběr neovlivňuje skupiny, pokud je režim zobrazení dynamického seznamu Hierarchický seznam nebo Strom. „Skupinami“ rozumíme prvek adresáře nebo plánu typů charakteristik, jejichž vlastnost ThisGroup je nastavena na hodnotu True.
Kvalifikace automaticky aplikované dynamickým seznamem na standardní podrobnosti Vlastník, Rodič, Datum, Období a Tato skupina
pomocí standardních nástrojů systému pro skládání dat. Výběr, automaticky aplikovaný dynamickým seznamem na klíčová pole, lze použít jak standardními prostředky systému skládání dat, tak přímo přidáním podmínek do textu požadavku V do polí hlavní tabulky. Díky použití výběrů pomocí nástrojů pro rozvržení je lze použít jak ve vnořených dotazech, tak v parametrech virtuálních tabulek.

Při vývoji dynamických seznamů se doporučuje otestovat všechny dynamické seznamy pomocí vlastních dotazů. Během procesu ověřování byste se měli ujistit, že pokud dotaz na seznam obsahuje vnořené dotazy nebo virtuální tabulky a v nich pole s aliasy, která se shodují s aliasy standardních podrobností, jsou k dispozici pole vlastník, rodič, datum, období, tato skupina nebo klíčová pole výběr, pak jsou tato pole platná a odpovídají standardním detailům, se kterými se shoduje jejich přezdívka. Pokud tomu tak není, měli byste změnit požadavek tak, aby se shodovaly resp
přezdívka byla jiná.
Pokud se rozhodnete ručně vygenerovat požadavek, pak se na požadavek vztahují určitá omezení:
● Použití příkazu FIRST v dotazu na dynamický seznam není podporováno. Pokud potřebujete použít výběr omezený počtem záznamů v dynamickém seznamu, měli byste přepracovat požadavek na generování dynamického seznamu tak, aby byl skutečný obsah požadavku umístěn do poddotazu a omezit počet záznamů přijaté v tomto dílčím dotazu. Místo poddotazu můžete také použít dočasnou tabulku.
● Výběr, řazení a seskupování nejsou podporovány:

  • Podle podrobností tabulkových částí.
  • Zobrazit pole.
  • Pole DataVersion.
  • Pole PredefinedDataName.
  • Pole typu tabulky účtové osnovy.
  • Pole Typ pohybu tabulky akumulačního registru.
  • Pole TypeValues ​​tabulky charakteristického typového plánu.
  • Typ pole Typ;
  • Pole typu String (neomezená délka).
  • Pole typu BinaryData.

● Třídění a seskupování podle polí Subconto není podporováno<НомерСубконто>a ViewSubconto<НомерСубконто>Tabulky PohybyPodkonto účetního registru.
● Seskupování podle polí, která jsou výrazy dotazovacího jazyka obsahující agregační funkce, není podporováno.
● Když je vybrána hlavní tabulka, má dotaz na dynamický seznam následující omezení:

  • Spojení nejsou podporována.
  • Sekce ORDER BY není podporována. Měli byste použít dotaz bez hlavní tabulky nebo nastavit potřebné řazení pomocí nastavení dynamického seznamu.

● Pokud je dynamický seznam zobrazen jako hierarchický seznam nebo strom, pak se položka nezobrazí jako dynamický seznam, pokud není zobrazen alespoň jeden rodič této položky. Jinými slovy, k zobrazení prvku hierarchického seznamu musí dynamický seznam zobrazit také všechny rodiče tohoto prvku až na začátek seznamu. V tomto případě horním okrajem seznamu máme na mysli buď
kořenový prvek hierarchického objektu zobrazeného dynamickým seznamem nebo prvek nastavený jako vlastnost ParentTopLevel rozšíření tabulky formulářů pro dynamický seznam.

Použití následujících tabulek jako hlavní tabulky dynamického seznamu není podporováno:

● Tabulka, která nemá klíč, který jednoznačně identifikuje každý záznam tabulky (odkaz pro tabulky objektů a klíč záznamu pro tabulky registrů). Následující tabulky však lze nastavit jako hlavní tabulku dynamického seznamu (přestože nemají klíč):

● Tabulka dílčích údajů účetní evidence;
● všechny virtuální tabulky účetního registru kromě tabulky MovementsSubconto;
● tabulky konstantních hodnot (včetně tabulky Konstanty);
● tabulky externích zdrojů dat bez klíčových polí;
● tabulky kostek externích zdrojů dat;
● tabulky akumulačního registru:

  • otočný stůl;
  • bilanční tabulka;
  • tabulka obratu a zůstatků.

● tabulky výpočtového registru:

  • tabulka skutečné doby platnosti;
  • rozvrhová data;
  • základní data.

● Tabulky tabulkových částí objektů;
● Změnit registrační tabulky (používané v mechanismech výměny dat);
● Sekvenční tabulky;
● Konverzní tabulky (používané v mechanismech periodického vypořádání).
● Tabulka, která se používá v dotazu pouze ve vnějším spojení.

Jinými slovy, dynamický seznam se zadanou hlavní tabulkou bude fungovat správně, pokud v důsledku provedení dotazu
zadaný jako zdroj dat se počet řádků získaných z hlavní tabulky nezvyšuje (s ohledem na vynucený výběr). Pokud se v důsledku provedení dotazu zvýší počet řádků získaných dotazem z hlavní tabulky, povede to k narušení jedinečnosti klíče záznamů tabulky zobrazené seznamem. V tomto případě musíte zakázat použití hlavní tabulky dynamického seznamu.
Při práci s dynamickým seznamem musíte vzít v úvahu přístupová práva k detailům zobrazeným seznamem:
● Data ze sloupců dynamického seznamu, které jsou označeny vlastností Vždy použít, ale pro které aktuální uživatel nemá právo Zobrazit, se nepřenášejí na stranu klienta. Přístup k datům takových sloupců (pomocí vlastnosti CurrentData a metody RowData())
na straně klienta není možné.
● Pokud aktuální uživatel nemá právo Zobrazit na klíčové pole dynamického seznamu, načítání dat z tohoto dynamického seznamu povede k chybě narušení přístupu.
U dynamického seznamu, který zobrazuje seznam výčtů, neexistuje možnost interaktivního přizpůsobení seznamu.
Složení sloupců a nastavení dynamického seznamu jsou spojeny s poli dotazu pomocí aliasů polí výběru. Pokud alias není explicitně specifikován v dotazu na výběrové pole a pole je systémové, pak se jako alias použije název pole pro anglickou verzi vestavěného jazyka.
Zadaný vztah znamená, že při změně (nebo explicitním zadání aliasu pro pole, pro které byl použit automatický alias)
alias pole dotazu, které generuje data dynamického seznamu, nastavení atributů dynamického seznamu bude ztraceno, prvky formuláře „ztratí“ zobrazené podrobnosti, nastavení dynamického seznamu bude nesprávné atd.
Pokud je zdrojem dat dynamického seznamu tabulka (běžná nebo virtuální), která umožňuje nastavit výběr podle období, pak pokud uživatel nastaví období zobrazení v takovém dynamickém seznamu (příkaz Nastavit interval data...),
zadané hranice období budou nastaveny jako hodnoty výběru nebo parametry virtuální tabulky. Pokud pomocí jazykového rozšíření
dotazy na systém skládání dat byly explicitně specifikovány názvy parametrů virtuální tabulky - parametry se zadanými
jména. Tabulky, u kterých je možné řídit období pro zobrazení nebo zpracování dat:
● evidovat tabulky (hlavní nebo virtuální), u kterých je možné vybírat podle období (pro kalkulační registr - podle registračního období);
● hlavní tabulky dokumentů, obchodních procesů a úkolů;
● hlavní tabulky deníků dokumentů;
● hlavní sekvenční tabulky, tabulky hranic sekvencí.
Parametr dotazu na dynamický seznam může být pole nebo seznam hodnot. Pokud je však parametrem seznam hodnot, pak se jako hodnota výběru použije pouze první hodnota v seznamu. Pokud dynamický seznam používá dotaz s parametry, musí být počáteční nastavení hodnot parametrů provedeno v obslužné rutině OnCreateOnServer.
Při zobrazování dat dynamického seznamu mějte na paměti následující body:
● Když programově změníte vlastnosti dynamického seznamu, panely příkazů přidružené k seznamu se automaticky znovu neobsadí.
s tímto dynamickým seznamem.
● Pokud je více polí seskupeno do skupiny s režimem seskupování v buňce a ve seskupených polích je pole, které je zobrazeno jako zaškrtávací políčko, pak se toto zaškrtávací políčko vždy zobrazí jako první ve výsledné buňce (vlevo od text).
V dynamickém seznamu při určování datového typu pro pole, jejichž výrazy zahrnují parametry, pole nebo literály, je výsledný typ určen typy polí a literálů. Pokud typ hodnoty parametru není zahrnut ve výsledném datovém typu, bude jeho hodnota zkrácena.
Například v následujícím příkladu bude pole typu Číslo.

VÝBĚR
KDYŽ JE TO LEŽ
PAK 5
V OPAČNÉM PŘÍPADĚ
&Parametr
KONEC

Pokud nastavíte parametr Parametr na hodnotu jiného typu, dynamický seznam pro toto pole obdrží hodnotu 0 (výchozí hodnota pro typ Číslo).
Pokud v takové situaci potřebujete vybrat parametr jiného typu, doporučuje se použít konstrukci dotazovacího jazyka VYJÁDŘIT. Například,
pokud ve výše uvedeném příkladu potřebujete do parametru předat řetězec ne delší než 100 znaků, měli byste nahradit jednoduchou indikaci parametru výrazem s explicitním typem cast:

VÝBĚR
KDYŽ JE TO LEŽ
PAK 5
V OPAČNÉM PŘÍPADĚ
EXPRESS(&Parametr AS řetězec(100))
KONEC

Pokud libovolný text požadavku na dynamický seznam používá parametry ve výrazech polí výběru, měli byste explicitně uvést typ parametrů pomocí konstrukce VYJÁDŘIT. Například místo toho &Nomenklatura AS Nomenklatura použití
EXPRESS(&Nomenclature AS Directory.Nomenclature) AS Nomenklatura. V opačném případě může fungovat vyhledávání pomocí vyhledávacího pole
nesprávné nebo způsobit chyby.

3. Metody pro načítání a ukládání dat do mezipaměti s dynamickým seznamem

Při získávání dat k zobrazení používá dynamický seznam jednu ze tří metod:
1. Čtení z databáze se provádí po blocích s počtem datových prvků mírně větším, než je počet řádků současně zobrazených seznamem (ale ne méně než 20). Data nejsou uložena v mezipaměti serveru.
2. Čtení z databáze se provádí na stránkách po 1000 datových položkách. Data jsou ukládána do mezipaměti na serveru. Hierarchická data se ukládají do mezipaměti: pro každého rodiče se neukládají do mezipaměti více než 2 stránky prvků. Na jeden dynamický seznam není uloženo více než 20 stránek položek. Ukládání do mezipaměti bude povoleno dynamickým seznamem pro následující tabulky:
● Kritéria výběru;
● Všechny tabulky účetní evidence kromě hlavní tabulky a tabulky PohybySubkonto;
● Všechny tabulky akumulačních registrů, kromě hlavní tabulky;
● všechny tabulky informačního registru kromě hlavní tabulky;
● Všechny tabulky výpočtového registru kromě hlavní tabulky;
● Virtuální tabulka úkolů podle účinkujících;
● Tabulky externích zdrojů bez klíčů;
● Kostky z externích zdrojů.

3. Čtení z databáze se provádí na stránkách po 1 000 prvcích. První část se rovná 1 stránce. Každá následující část se zvětší o 1 stránku (když se dosáhne konce předchozí ukázky). Čím blíže se „bod pohledu“ posouvá ke konci zobrazovaných dat, tím větší je vzorek z databáze načten a nakonec se rovná všem zobrazeným datům. Data jsou ukládána do mezipaměti na serveru. Maximální počet záznamů v mezipaměti a dynamickém seznamu je 1 000 000.
V závislosti na tom, co je vybráno hlavní tabulkou dynamického seznamu a jakou hodnotu má vlastnost Dynamické čtení, se používá jeden nebo druhý způsob čtení dat:

● Jako hodnota vlastnosti Hlavní tabulka je uvedena jedna z následujících tabulek: plán výměny, adresář, seznam dokladů, deník dokladů, plán typů charakteristik, účtový rozvrh, plán typů kalkulací, obchodní proces, úkol, tabulka body obchodního procesu:



● Jako hodnota vlastnosti Main table je zadána jedna z následujících tabulek: hlavní tabulka registru informací, registr akumulace, účetní registr, kalkulační registr, virtuální tabulka účetního registru MovementsSubconto:

● Vlastnosti dynamického čtení:
● Instalováno: používá se metoda 1 (popis metod je uveden výše).
● Reset: Používá se metoda 2 (popis metod je uveden výše).

● Vlastnost Hlavní tabulka obsahuje tabulku výběrových kritérií nebo tabulku úloh podle vykonavatele (Tasks By Performer):
● Klíč identifikující řádek tabulky: Odkaz.

● Vlastnost Main table určuje virtuální tabulku registru informací SliceFirst nebo SliceLast:
● Klíč identifikující řádek tabulky: RecordKey.
● Vlastnost Dynamické čtení nelze použít.
● Používá se metoda 2 (popis metod je uveden výše).

● Vlastnost Hlavní tabulka je nastavena na jednu z tabulek virtuálních registrů, kromě výše uvedených:

● Vlastnost Dynamické čtení nelze použít.

● Není specifikována vlastnost Main table, používá se libovolný dotaz:
● Klíč identifikující řádek tabulky: Číslo.
● Vlastnost Dynamické čtení nelze použít.
● Používá se metoda 3 (popis metod je uveden výše).

Pro zobrazení se data přenášejí klientovi po částech, jejichž velikost je podobná velikosti části v 1. způsobu čtení dat (popsáno na začátku této části).
Když vytvoříte formulář, který obsahuje dynamický seznam, klientovi se zpočátku předá 45 datových položek pro každý viditelný dynamický seznam (pokud má seznam více než 45 položek). Pokud dynamický seznam zobrazuje více než 45 řádků, bude při otevření formuláře provedeno další volání serveru, aby se načetly chybějící datové položky.

4. Nastavení dynamického seznamu

Nastavení seznamu vlastností - kliknutím na hypertextový odkaz Otevřít se otevře formulář pro nastavení zobrazení dynamického seznamu. Nastavení seznamu se provádí stejným způsobem jako podobné operace v systému skládání dat.


Rýže. 2. Podmíněný styl dynamického seznamu

Při nastavování dynamického seznamu v konfiguraci má vývojář aplikace možnost provést následující:
● nastavte pole, podle kterých chcete třídit;
● popsat výběr dat v seznamu;
● určit podmíněná nastavení vzhledu;
● nastavte pole, podle kterých chcete data seskupit.
Má smysl nastavit řazení na vývojáře, pokud nejste spokojeni s výchozím řazením nastaveným systémem.

RADA. Je třeba připomenout, že špatný výběr třídicích polí (stejně jako výběr a seskupování dat) negativně ovlivňuje účinnost dynamického vzorkování.
Z pohledu vývojáře aplikace se nastavení dynamického seznamu skládá z několika částí, které jsou vzájemně propojeny. Hlavní vlastností, jejímž prostřednictvím můžete spravovat nastavení dynamického seznamu, je Nastavení linkeru. Tento objekt obsahuje tři sady nastavení, které při spuštění systému určují konečná nastavení použitá pro dynamický seznam:
● Nastavení – nastavení vytvořená v režimu Konfigurátor. Vlastnost Order dynamického seznamu poskytuje rychlý přístup k vlastnosti Settings.Order nástroje pro tvorbu nastavení dynamického seznamu, takže následující konstrukce jsou ekvivalentní:
List.Order a List.SettingsLinker.Settings.Order;
● UserSettings – to jsou nastavení, která jsou změněna uživatelem v režimu 1C:Enterprise;
● Pevná nastavení – tato nastavení se nastavují z vestavěného jazyka. Tato vlastnost také obsahuje hodnoty výběru, které se přenášejí do formuláře pomocí jeho parametrů. Vlastnosti dynamického seznamu Výběr, Možnosti, Podmíněný vzhled poskytují rychlý přístup k pevným nastavením nástroje pro tvorbu nastavení dynamického seznamu. Jinými slovy, tato volání jsou ekvivalentní:
List.Settings Composer.FixedSettings.Selection a List.Selection.
Při vytváření konečného nastavení pro dynamický seznam se různé možnosti nastavení kombinují následovně:
● Pokud je jakýkoli typ nastavení zcela označen jako vlastní, pak výsledná nastavení zahrnují vlastní nastavení
(List.ComposerSettings.UserSettings). Navíc, pokud jsou některé prvky nastavení označeny jako nedostupné, pak se tato nastavení umístí do výsledného nastavení z vlastnosti List.Settings Composer. Nastavení.
● Pokud je jakýkoli typ nastavení označen jako vlastní nikoli celý, ale prvek po prvku, pak:
● Položky označené jako vlastní budou zahrnuty do výsledného nastavení vlastnosti List.SettingsComposer.CustomSettings.
● Položky označené jako nedostupné budou zahrnuty do výsledného nastavení z vlastnosti List.SettingsComposer.Settings.
● Pevná nastavení (List.SettingsComposer.FixedSettings) jsou přidána k výsledným nastavením „tak jak jsou“. Zároveň je nepřijatelné, aby pevné a uživatelské nastavení obsahovalo nastavení stejného názvu, například výběr se stejnou levou hodnotou v podmínce.

Pokud nastavení dynamického seznamu obsahuje nastavení, která jsou zakázána pomocí funkčních možností, budou tato nastavení při načtení dat dynamického seznamu odstraněna ze seznamu dostupných nastavení.
Nastavení, která nastavení budou uživateli k dispozici a která ne, se provádí v okně nastavení dynamického seznamu.


Rýže. 3. Kontrolujte zahrnutí do uživatelského nastavení

Zaškrtávací políčko ve spodní části okna (viz obr. 3) je zodpovědné za umístění celého typu nastavení do nastavení (normální nebo rychlé). Tato funkce je k dispozici pro výběr, řazení, seskupování a podmínění. Pokud jsou nastavení zadána v režimu úprav Rychlý výběr, pak ve vlastnosti Skupina uživatelských nastavení tabulky formuláře zobrazujícího dynamický seznam musíte zadat prázdnou skupinu formuláře, ve které budou prvky spojené s rychlým uživatelským nastavením bude umístěn dynamický seznam. Pokud není skupina uvedena, rychlé uživatelské nastavení se ve formuláři nezobrazí. Je také možné explicitně vyvolat vytvoření vlastních nastavení pomocí vestavěného jazyka pomocí metody CreateCustomSettingsFormItems() rozšíření dynamického seznamu.
Je také možné zvolit, zda umístit konkrétní položky nastavení do uživatelského nastavení. Tato funkce je k dispozici pro výběr a podmíněné prvky návrhu (viz obrázek 3).

Pokud potřebujete při otevírání dynamického seznamu načíst nějaké speciální nastavení, lze to provést dvěma způsoby:
● Použití parametru formuláře dynamického seznamu UserSettings. Údaje obsažené v tomto parametru budou umístěny v nastavení dynamického seznamu uživatele.
● Pomocí formuláře dynamického seznamu parametrUserSettingsKey. Pokud tento parametr zadáte při otevírání formuláře, pak se do dynamického seznamu, který je hlavním atributem formuláře, načtou uživatelská nastavení umístěná v úložišti nastavení se zadaným klíčem.

5. Hledejte v dynamickém seznamu

Dynamický seznam umístěný na formuláři poskytuje možnost interaktivně vyhledávat zobrazená data. Vyhledávání lze provádět pomocí následujících nástrojů: vyhledávací lišta, vyhledávací dialog, vyhledání aktuální hodnoty, použití historie vyhledávání a nastavení období (u dynamických seznamů zobrazujících dokumenty). Výsledkem hledání je omezená sada záznamů
dynamický seznam (seznamů dostupných danému uživateli), které odpovídají kritériím vyhledávání.
Chcete-li ovládat možnosti vyhledávání dynamického seznamu, existují tři vlastnosti tabulky ve spravovaném formuláři, který zobrazuje dynamický seznam:
● Pozice vyhledávacího řetězce – definuje pozici vyhledávacího řetězce. Může nabývat následujících hodnot: Auto, Panel příkazů, Žádný, Nahoře, Dole.


Rýže. 4. Vyhledejte řetězec v dynamickém seznamu

Pokud je hodnota této vlastnosti nastavena na Příkazový panel, pak se hledaný řetězec zobrazí v příkazovém panelu formuláře (pokud je dynamický seznam hlavním atributem formuláře) nebo v příkazovém panelu spojeném s dynamickým seznamem. Panel vyhledávání umístěný na panelu příkazů je vždy přitisknut k pravému okraji panelu příkazů (spolu s tlačítky umístěnými napravo od panelu vyhledávání).
Pokud je vlastnost nastavena na Ne, pak hledaný řetězec ve formuláři nebude a když začnete hledaný řetězec psát, otevře se dialogové okno.
Pokud je vlastnost nastavena na hodnotu Nahoře, bude vyhledávací panel umístěn mezi panelem příkazů seznamu a tabulkou zobrazující dynamický seznam. Pokud je vlastnost nastavena na Dole, hledaný řetězec se umístí hned za tabulku zobrazující dynamický seznam.


● Pokud je vlastnost Režim kompatibility nastavena na Nepoužívat nebo starší než verze 8.3.4 – hodnota je Příkazový panel.
Přejděte na vyhledávací řádek následovně:
● Stisknutím kombinace kláves Ctrl+F;
● Myš;
● Když začnete psát do dynamického seznamu (s přihlédnutím k hodnotě vlastnosti SearchOnTyping dynamického seznamu).
● Pozice stavu zobrazení – popisuje, kde se zobrazí stav zobrazení: jaká pole byla prohledávána a jaké hodnoty
hledali v každém oboru. Může nabývat následujících hodnot: Auto, None, Top, Bottom


Rýže. 5. Stav vyhledávání v dynamickém seznamu

Pokud je vlastnost nastavena na Ne, nebude ve formuláři zobrazen stav zobrazení. V důsledku toho bude možné zjistit, zda bylo vyhledávání dokončeno nebo ne, pouze dostupností tlačítka Zrušit vyhledávání.
Pokud je vlastnost nastavena na hodnotu Nahoře, bude stav zobrazení umístěn mezi panelem příkazů seznamu a tabulkou zobrazující dynamický seznam. Pokud je vlastnost nastavena na Dolní, bude stav zobrazení umístěn bezprostředně za tabulkou zobrazující dynamický seznam.
Pokud byl formulář vytvořen v 1C:Enterprise verze 8.3.4 a starší, vlastnost je nastavena na Ne. Pokud byl formulář vytvořen v 1C:Enterprise verze 8.3.5 a starší, vlastnost je nastavena na Auto. Skutečná hodnota nemovitosti bude v tomto případě stanovena takto:
● Pokud je vlastnost Režim kompatibility nastavena na verzi 8.3.4 (a nižší) – hodnota Ne;
● Pokud je vlastnost Režim kompatibility nastavena na Nepoužívat nebo starší než verze 8.3.4 – hodnota Top;
● Search Control Position – Určuje, kde se objeví ovládací tlačítko vyhledávání. Tlačítko otevře nabídku, která obsahuje následující informace: příkazy Najít podle aktuální hodnoty, Rozšířené hledání, Zrušit hledání, Nastavit období (pro seznamy dokladů a deníků) a historii vyhledávacích dotazů (posledních 5 dotazů). Vlastnost může nabývat následujících hodnot: Auto, Žádný, Panel příkazů.


Rýže. 6. Správa vyhledávání v dynamickém seznamu

Pokud je vlastnost nastavena na Ne, pak ovládací tlačítko hledání ve formuláři nebude (ale příkazy budou dostupné pomocí nabídky Více). Hodnota vlastnosti Panel příkazů umístí tlačítko na panel příkazů přidružený k tabulce zobrazující dynamický seznam.
Pokud byl formulář vytvořen v 1C:Enterprise verze 8.3.4 a starší, vlastnost je nastavena na Ne. Pokud byl formulář vytvořen v 1C:Enterprise verze 8.3.5 a starší, vlastnost je nastavena na Auto. Skutečná hodnota nemovitosti bude v tomto případě stanovena takto:
● Pokud je vlastnost Režim kompatibility nastavena na verzi 8.3.4 (a nižší) – hodnota Ne;
● Pokud je vlastnost Režim kompatibility nastavena na Nepoužívat nebo starší než verze 8.3.4 – hodnota je Příkazový panel;
Pokud je na formuláři několik příkazových panelů, jejichž zdrojem příkazů je jedna tabulka spravovaného formuláře (zobrazující data dynamického seznamu), pak bude vyhledávací řádek a ovládací tlačítko vyhledávání umístěny pouze v jednom příkazovém panelu:
● Nebo na příkazovém řádku samotného dynamického seznamu (pokud má povoleno automatické dokončování)
● Nebo v kterémkoli ze zbývajících příkazových panelů.

Podívejme se na funkce použití vyhledávání v dynamickém seznamu:
● Aby bylo vyhledávání pohodlné (včetně výkonu), musíte povolit fulltextové vyhledávání pro všechny konfigurační objekty, které lze použít jako hlavní tabulku dynamického seznamu. Fulltextové vyhledávání by také mělo zahrnovat všechny podrobnosti o konfiguračních objektech, které mohou být zobrazeny v dynamickém seznamu a pro které může být vyžadováno vyhledávání.
Pokud je objekt vyloučen z fulltextového vyhledávání, bude příslušný vyhledávací mechanismus fungovat, ale výkon takového vyhledávání bude extrémně nízký. Nedoporučuje se používat vyhledávání na objektech, které nejsou indexovány fulltextovým vyhledáváním.
● Aplikační řešení musí mít rutinní úlohu, která pravidelně aktualizuje index fulltextového vyhledávání.

● Vyhledávání se neprovádí ve všech sloupcích dynamického seznamu (a konfiguračního objektu), ale pouze ve sloupcích, které jsou zobrazeny v tabulce.
● Vyhledávání v dynamickém seznamu podle polí typů odkazů s libovolnou reprezentací se provádí podle polí, pro která se používají
formace reprezentace (viz zde). Pole zahrnutá v pohledu se získají s přihlédnutím k obslužné rutině ViewFieldGettingProcessing() odpovídajícího objektu.
● U dynamických seznamů se zadanou hlavní tabulkou se používá fulltextové vyhledávání v hlavní tabulce. Všechny neindexované odkazy z hlavní tabulky budou přidány do výsledků fulltextového vyhledávání. Výsledek fulltextového vyhledávání hlavní tabulky se použije jako výběr na základě klíčových polí. Fulltextové vyhledávání se provádí i na polích zobrazených v seznamu z jiných tabulek (pokud pole a konfigurační objekt využívají fulltextové vyhledávání). Bez aktivovaného fulltextového vyhledávání mohou být data
nalezen, ale samotné vyhledávání bude velmi pomalé.
Pokud při pokusu o fulltextové vyhledávání dojde k chybě, bude vyhledávání provedeno bez použití fulltextového vyhledávání.
To se může stát například při hledání jednoho písmene a velkého počtu řádků v informační základně začínajících tímto písmenem.
● Pokud je pro pole v hlavní tabulce dynamického seznamu použit výběr s typem porovnání Rovná se, pak při provádění fulltextového vyhledávání bude k vyhledávacímu dotazu pro tuto tabulku přidána hodnota výběru.
● Hledaný řetězec je rozdělen na slova. Tento oddíl se provádí podle následujících pravidel:
● Řádek je přerušen pomocí mezer a tabulátorů jako oddělovačů.
● Poté je zpracován každý výsledný fragment:
● Pokud je fragment reprezentací data (s časem nebo bez času) na základě aktuálního národního prostředí relace, pak je slovo fragment.
● V opačném případě se fragment dále rozdělí pomocí znaků „,.-/\“ jako oddělovačů. V tomto případě je každý výsledný fragment řetězce považován za slovo.

● Pro každé slovo je vytvořena vlastní sada podmínek, které jsou kombinovány „NEBO“. Tato sada podmínek je generována, pokud fulltextové vyhledávání pro dané slovo v tabulce, ze které bylo toto pole získáno, vrátilo alespoň jeden objekt nebo nebylo pro toto pole použito fulltextové vyhledávání. Podmínky se tvoří takto:
● Pro pole typu String je podmínkou NázevPole LIKE %Word%.
● Pro pole typu Číslo má podmínka tvar NázevPole=Hodnota, kde Hodnota je slovo převedené na typ Číslo. Pokud nelze provést obsazení, vyhledávání pole se neprovede.
● Slovo je vyhledáno jako podřetězec ve výchozí booleovské reprezentaci definované pro aktuální relaci. Pokud je hledané slovo nalezeno v pohledu, hledá hodnotu odpovídající pohledu, ve kterém bylo slovo nalezeno. V tomto případě hledání nepoužívá pohledy zadané pomocí vlastnosti prvku formuláře Form.
● U pole typu Datum vypadá podmínka takto: NázevPole>=Počáteční den(Slovo) ANDNázevPole<=КонецДня(Слово). Если Слово подобно дате, в которой год
označeno jednou nebo dvěma číslicemi, rok bude redukován na aktuální století a tato hodnota bude přidána do vyhledávací podmínky.
● U referenčních polí se provádí vyhledávání v polích použitých k vytvoření referenčního pohledu. V každém z těchto polí hledejte
provádí podle výše popsaných pravidel. Vyhledávání nepoužívá pole použitá k vytvoření vlastní reprezentace dat.
Sady podmínek pro každé slovo jsou spojeny „AND“.
● Pro hodnoty s úvodními nulami můžete hledat buď řetězec s úvodními nulami, nebo řetězec zadaný bez úvodních nul.
● Pokud dynamický seznam zobrazuje seznam dokumentů nebo historii dokumentů, interval zobrazení seznamu, který určíte, se zobrazí také v oblasti formuláře vyhrazené pro zobrazení stavu zobrazení pro požadovaný dynamický seznam.
● Příkaz hledání podle aktuální hodnoty není dostupný, pokud je kritériem výběru hlavní tabulka dynamického seznamu.
● Nalezené fragmenty řetězce jsou při zobrazení v tabulce zvýrazněny.
● Pro jeden sloupec je podporován pouze jeden vyhledávací řetězec. Při přidávání nového vyhledávacího dotazu pro sloupec, který je již prohledáván, bude hledaný výraz nahrazen namísto sčítání dvou vyhledávacích dotazů.
● Pokud formulář nemá přidání prvku formuláře k formuláři Zobrazení vyhledávacího řetězce spojeného s tabulkou (vlastnost Zdroj přidání prvku formuláře) zobrazující dynamický seznam, stisknutím kombinace kláves Ctrl+F se otevře vyhledávací dialog.


Rýže. 7. Vyhledávací dialog

Pokud formulář obsahuje přidání prvku formuláře do formuláře Zobrazení vyhledávacího řetězce spojeného s tabulkou (vlastnost Zdroj přidání prvku formuláře) zobrazující dynamický seznam, pak k otevření dialogového okna pro vyhledávání byste měli použít příkaz Rozšířené vyhledávání.
● Při používání vyhledávacího dialogu mějte na paměti následující body:
● Otevření vyhledávacího dialogu pomocí klávesové zkratky způsobí, že se hodnota aktuální buňky zobrazí na řádku Co hledat a hodnota přepínače Jak hledat je nastavena na Podle přesné shody.

● Otevření vyhledávacího dialogu přímým zahájením zadávání vyhledávacího řetězce do dynamického seznamu vede k tomu, že hodnota přepínače Jak hledat je nastavena na hodnotu Podle části řetězce a zadaný text skončí v poli Co do vyhledávacího pole.

6. Zobrazení dat pomocí dynamického seznamu

Při používání dynamických seznamů může být nutné provést různé akce s daty aktuálně zobrazenými dynamickým seznamem, s ohledem na použité výběry a hledání. Mezi takové akce patří: zpracování zobrazených informací, například opětovné odeslání vybraných dokumentů nebo nastavení některých detailů pro vybrané objekty, vygenerování seznamu dostupných objektů (s designem atd.), například pro tisk nebo uložení do tabulkového dokumentu.
Chcete-li získat data, která jsou zobrazena dynamickým seznamem, měli byste použít GetExecutableDataCompositionSchema() a
GetExecutableDataCompositionSettings().
Příklad příjmu dat:

Schema = Elements.List.GetExecutableDataCompositionSchema();
Settings = Items.List.GetExecutableDataCompositionSettings();
LayoutLinker = newDataCompositionLayoutLinker();
LayoutLayout = LayoutComposer.Execute(Scheme, Settings);
CompositionProcessor = newDataCompositionProcessor;
LayoutProcessor.Initialize(LayoutLayout);
OutputProcessor = Nový OutputProcessorDataCompositionResultInTabularDocument;
ReturnOutputProcessor.Output(CompositionProcessor);

Získávání dat do kolekce hodnot (tabulky nebo seznamu hodnot) se provádí stejným způsobem.
Získávání dat dynamického seznamu tímto způsobem má řadu funkcí, které je třeba vzít v úvahu při vývoji aplikačních řešení:
● Následující design tabulky není podporován:
● Střídání barev čar;
● Obrázek záhlaví;
● Obrázek suterénu;
● Barva pozadí zápatí;
● Barva textu zápatí;
● Písmo zápatí;
● Vodorovná poloha v suterénu;
● Režim hesla.
● Podmíněný vzhled určený pro spravovaný formulář není podporován;
● Při řazení hierarchické tabulky ve vzestupném pořadí podle pole typu Odkaz jsou vždy na prvním místě záznamy obsahující prázdný odkaz.

V procesu dokončování konfigurací se každý programátor 1C setká s dynamickými seznamy.
Dynamický seznam je objekt rozhraní sloužící k zobrazení různých seznamů databázových objektů nebo neobjektových dat – položek registrů.
Například dynamický seznam se používá k zobrazení seznamu položek:

Abychom demonstrovali schopnosti dynamického seznamu, vytvoříme externí zpracování a přidáme hlavní formulář. Do formuláře s typem „Dynamický seznam“ přidáme nový atribut. Pojďme do jeho vlastností a podívejme se, co tam je.
Máme zájem o vlastnost „Vlastní požadavek“. Jeho povolení nám ukáže všechny možnosti dynamického seznamu. Budeme schopni napsat požadavek pomocí téměř všech možností dotazovacího jazyka systému 1C: Enterprise. Zaškrtněte políčko a klikněte na odkaz „Otevřít“:

Náš seznam standardně zobrazí seznam položek s celkovým zůstatkem za všechny sklady. Chcete-li implementovat takový seznam, přidejte následující dotaz:


Jako hlavní tabulku vybereme “Directory.Nomenclature”, to nám umožní pracovat s dynamickým seznamem, jako se seznamem nomenklatury - přidávat, měnit, označovat prvky adresáře pro mazání. Instalace hlavní tabulky také umožňuje dynamické čtení dat - to znamená, že výběr bude proveden po částech, podle potřeby.
Dále musíme vytvořit prvky formuláře pro náš seznam:

Pokud se pokusíme spustit zpracování v tomto formuláři, zobrazí se chyba:


Chcete-li to odstranit, musíte nastavit hodnotu parametru „Period“. K tomu můžete použít metodu „SetParameterValue“ kolekce „Parameters“ dynamického seznamu. Metoda má dva parametry:
. "Parametr" - Typ: Řetězec; DataCompositionParameter. Název parametru nebo parametru složení dat, jehož hodnotu chcete nastavit;
. „Hodnota“ – Typ: Libovolný. Hodnota, která se má nastavit.
Lze volat v obslužné rutině „OnCreateOnServer“ formuláře:

Máte dotaz nebo potřebujete pomoc od konzultanta?


Uživateli poskytneme možnost změnit období pro příjem zůstatků. Chcete-li to provést, přidejte atribut a s ním spojený formulářový prvek „Datum“:


V obslužné rutině „OnChange“ prvku formuláře „Date“ zavoláme metodu „SetParameterValue“ a jako hodnotu předáme hodnotu přidruženého atributu. Podobným způsobem změňme proceduru formuláře „Při vytváření na serveru“. Protože je metoda dostupná na klientovi, není třeba volat server:


Nyní, když se datum změní, zůstatky budou automaticky aktualizovány:




Předpokládejme, že uživatelé chtějí vidět buď aktuální zůstatky, nebo plánované účtenky. Zvažme jednu z možností implementace. Pojďme přidat atribut formuláře typu boolean a přidružený přepínač:


Při změně hodnoty přepínače změníme text požadavku. K tomu použijeme obslužnou rutinu události „Při změně“ pro prvek formuláře „Zobrazit množství při příjmu“. Potřebujeme změnit vlastnost „QueryText“ dynamického seznamu v závislosti na hodnotě atributu. Protože tato vlastnost není na klientovi k dispozici, je třeba zavolat proceduru serveru:


Výsledek provedených změn:



Konečně se splnil sen každého sedmiletého dítěte. Jak často uživatelé programu 7.7 žádali o normální výběr položek? Takže můžete vidět zůstatky, ceny a nastavit filtry. Museli jsme vymýšlet různé triky, včetně psaní externích komponent. V 1C 8.2 se objevily dynamické seznamy. Navrhuji zvážit, co to je a co nám mohou dát v 1C 8.3.

Vezměme si jako základ určitou testovací konfiguraci 1C: „Enterprise Accounting 3.0“. Nyní nebudeme provádět výběr, pouze přidáme další formulář výběru do adresáře „Nomenklatura“ a dočasně z něj uděláme hlavní:

Po vytvoření systém standardně přidá do formuláře pole tabulky typu „Dynamický seznam“.

Pojďme do jeho vlastností a podívejme se, co tam je.

Nejprve nás zajímá zaškrtávací políčko „Vlastní požadavek“. To nám odhalí všechny výhody dynamického seznamu. Budeme mít možnost napsat vlastní požadavek s parametry. Zaškrtněte políčko a klikněte na odkaz „Otevřít“:

Otevře se okno s hotovým kódem v . Prozatím jsou zde jednoduše uvedena všechna pole adresáře „Nomenklatura“.

Získejte 267 videolekcí na 1C zdarma:

Jak vidíte, je zde tlačítko pro volání „ “ a zaškrtávací políčko, které umožňuje dynamicky měnit obsah seznamu. To znamená, že když jiný uživatel něco změní v adresáři, změní se to i v našem seznamu. Kromě toho existuje karta „Nastavení“, ale té se dotkneme později.

Vlastní dotaz v dynamickém seznamu

Nejprve vytvořte požadavek, který potřebujeme, se zůstatky a cenami. Takhle:

Záložka „Nastavení“.

A teď ta nejlepší část! Přejděte na kartu „Nastavení“. A hned vidíme, že na první záložce můžeme provést libovolný výběr pro libovolné pole v požadavku:

Programové nastavení parametrů dotazu v dynamickém seznamu 1C 8.3

Nezapomeňte, že v požadavku máme dva parametry: „Období“ a „Typ ceny“. Musíme je předat do požadavku, jinak dojde k chybě.

Zapišme tyto parametry do parametrů formuláře a do modulu formuláře přidejte následující řádky:

Seznam &OnServerProcedureWhenCreatingOnServer(Failure, StandardProcessing). Možnosti. SetParameterValue("Období" , Parametry. Datum) ; Seznam. Možnosti. SetParameterValue("PriceType", Parametry.PriceType) ; Konec procedury