1s ställer in en dynamisk lista av användaren. Sätt att hämta och cachelagra data med en dynamisk lista

Hem för nybörjarutvecklare Lär dig programmera

Det finns ett formulär som innehåller en dynamisk lista med en godtycklig begäran. Hur ställer man in de nödvändiga parametrarna i denna begäran när man öppnar formuläret?

Ett av problemen som uppstår när man öppnar ett formulär kan vara att den dynamiska listan i det öppnade formuläret innehåller en godtycklig fråga med parametrar. Och när du öppnar ett sådant formulär måste du överföra specifika parametervärden till den här listan.

Denna uppgift löses genom att skapa ytterligare formulärparametrar, skicka de nödvändiga värdena till dem och ställa in dem till förfrågningsparametrarna i formulärhändelsehanteraren OnCreateOnServer.

Låt oss anta att det finns ett register Priser på varor . Listformen för detta register innehåller en dynamisk lista med en godtycklig fråga:

SELECT Varuprisinformation Register Period, Varuprisinformation Register Varor, Varuprisinformation Register.<= &КонецПериода

Som du kan se av förfrågningstexten har begäran tre parametrar: Product , StartPeriod och EndPeriod . För normal funktion av formuläret måste värdena för dessa parametrar ställas in när formuläret öppnas, annars kommer ett fel att tas emot som ett resultat av att formuläret öppnas.

För att skicka anpassade parametrar till ett formulär är det en bra idé att skapa dem i formulärredigeraren.

Generellt sett är detta inte nödvändigt. Alla parametrar som skickas till funktionen OpenForm() kommer att vara tillgängliga i formulärhändelsehanteraren OnCreateOnServer. Men det är ändå bättre att skapa dem uttryckligen i formen.

Sedan, för det första, i formulärmodulen behöver du inte kontrollera om sådana parametrar finns eller inte. Och för det andra underlättar det explicita skapandet av formparametrar stödet för den tillämpade lösningen av de utvecklare som inte deltog i skapandet.

Så låt oss skapa tre parametrar för listformen för informationsregistret: StartPeriod, EndPeriod (typ Datum) och Product (typ) DirectoryLink.Products).

Nu, i form av varukatalogelementet, låt oss skapa kommandot Decemberpriser med följande text:

FormParameters = New Structure("StartPeriod, EndPeriod, Item", "20121201000000", "20121231235959", Object.Reference); OpenForm("InformationRegister.Prices of Goods.Form.ListForm",FormParameters);

Med detta kommando öppnar vi formuläret för informationsregisterlistan och skickar värdena för tre parametrar till det.

I själva informationsregisterformuläret, i formuläret händelsehanterare OnCreateOnServer, ställ in de godkända värdena som parametrar för en godtycklig begäran om en dynamisk lista enligt följande:

&OnServerCreateOnServerProcedure(Failure, StandardProcessing) List.Parameters.SetParameterValue("PeriodStart", Parameters.PeriodStart); List.Parameters.SetParameterValue("EndPeriod", Parameters.EndPeriod); List.Parameters.SetParameterValue("Product", Parameters.Product); Slutprocedur

Skriv ut (Ctrl+P)

dynamisk lista

1. Allmän information

En dynamisk lista är en speciell datatyp som låter dig visa godtycklig information från databastabeller på ett formulär. För att göra detta måste du ange tabellen, de data som du vill visa från eller beskriva det resulterande urvalet på frågespråket.
Mekanismen är baserad på ett datasammansättningssystem och ger alternativ för sortering, val, sökning, gruppering och villkorlig bearbetning av mottagen data. I det här fallet är datakällan en begäran som antingen genereras automatiskt av systemet (baserat på angivna data) eller skrivs av utvecklaren manuellt.

Ris. 1. Alternativ för att skapa en dynamisk lista

När du skapar ett formulärattribut av typ DynamicList Utvecklaren kan välja två sätt att fråga efter data:
● Genom att specificera huvudtabellen – i det här fallet räcker det bara att specificera tabellen (egenskapen Main table) som du vill hämta data från, så genererar systemet automatiskt en fråga för data (se höger sida i Figur 1).
● Manuell generering av en begäran – för att göra detta måste du ställa in egenskapen Custom request (se den vänstra sidan av fig. 1). Därefter kommer manuell generering av en begäran för att hämta data från infobasen att vara tillgänglig.
Med en fråga kan du välja data från flera tabeller, så att du kan ange en primär tabell. Detta är nödvändigt så att den dynamiska listan kan avgöra vilka data som är primära och vilka som är sekundära, och kan korrekt välja och visa information, samt tillhandahålla standardkommandon. Men om det är omöjligt att bestämma huvudtabellen i frågan, kan den utelämnas, men då
den dynamiska listan kommer inte att tillhandahålla kommandon relaterade till den underliggande tabellen. Dessutom, i det här fallet (utan att specificera huvudtabellen), kommer effektiviteten att erhålla data med en dynamisk lista att minska avsevärt.
Av prestandaskäl rekommenderas att alla kopplingar som används i en godtycklig fråga endast för att hämta ytterligare data görs valfria genom att använda ett frågespråktillägg för datakompositionssystemet.
För en dynamisk lista, som är formulärets huvudattribut, är det möjligt att ställa in urvalsvärdena med hjälp av formulärparametern Urval. För att göra detta är det nödvändigt att namnet på egenskapen för strukturen, som finns i parametern Urval,
matchade namnet på det dynamiska listvalsfältet. I det här fallet kommer värdet på strukturegenskapen att ställas in som rätt värde för urvalselementet. Om en array, en fast array eller en värdelista skickas som värdet av ett element i parametern Dynamic list form Selection, läggs ett villkor med alternativet In List till i urvalet, i det högra värdet för vilket listan över värden placeras (till vilken arrayen och den fasta arrayen konverteras).
En godtycklig fråga i en dynamisk lista kan vara en fråga där en parameter används för att generera värdet på ett fält, till exempel:

VÄLJ
VAL
NÄR Delivery.Factor = 1 DÅ &Slämning
ANNAT Leverans. Koefficient
SLUT SOM Koefficient
FRÅN

I det här fallet, om parametervärdestypen skiljer sig från objektattributtypen (t.ex. Rekvisita 1 har typ siffra, och parameterns värde är typen Linje), sedan för att visa fältet korrekt måste du uttryckligen casta parametervärdet till önskad typ:

VÄLJ
VAL
NÄR Delivery.Factor = 1 DÅ EXPRESS(&Representation AS String(100)) ANNARS Leverans. Koefficient
SLUT SOM Koefficient
FRÅN
Document.DeliveryProducts AS Leverans

Om fältet som filtret är inställt på är inaktiverat med hjälp av funktionella alternativ, är filtret i detta fält inte inställt, även om filtervärdet skickas som formulärparametrar eller länkar för urvalsparameter.
Genom att använda egenskapen Dynamisk dataläsning indikeras en dynamisk lista för att behöva läsa data i små portioner
(för mer information om hur man hämtar data från en dynamisk lista och hur man cachelagrar data, se nedan). Oavsett denna egenskap gäller följande villkor:

● Om visningsläget är inställt på hierarkisk lista, kommer endast data för den aktuella gruppen och data för alla överordnade element (inga underordnade element) att läsas.
● Om trädvyläget är inställt, kommer endast data från öppna trädnoder att läsas.
● Engångsladdning av dynamisk listdata stöds inte när en hierarkisk vy är inställd (egenskapen Display är inställd på Träd) och den initiala trädvyn är inställd på Expandera alla nivåer. För att få data kommer lika många förfrågningar till servern att göras som det finns noder i den visade listan.
Inom en enda datainsamling återanvänder en dynamisk lista tidigare skapade temporära tabeller, med förbehåll för följande villkor:
● Det finns inga frågor efter huvudsatsfrågan i listans batchfråga.
● Sammansättningen av temporära tabeller och deras fält har inte ändrats sedan föregående körning av batchfrågan.

I sitt arbete använder den dynamiska listan värdena för följande egenskaper för attributen för metadataobjekt:
● format,
● redigeringsformat,
● tips,
● tecken på att markera negativa värden,
● mask,
● tecken på flerlinjeläge,
● tecken på avancerad redigering,
● lösenordsläge.
Vid visning och redigering av urvalet och parametrarna för datakompositionssystemet används redigeringsformatet för motsvarande fält.

2. Begränsningar och funktioner

När du ställer in ett filter i en dynamisk lista, kom ihåg att filtret inte påverkar grupper om visningsläget för den dynamiska listan är Hierarkisk lista eller Träd. Med "grupper" menas ett element i en referensbok eller en plan av typer av egenskaper, där ThisGroup-egenskapen är satt till True.
Filter som automatiskt tillämpas av den dynamiska listan på standardattributen Owner, Parent, Date, Period och ThisGroup tillämpas
standardmedel för datasammansättningssystemet. Filter som automatiskt tillämpas av en dynamisk lista på nyckelfält kan appliceras både med standardhjälp av datakompositionssystemet och genom att direkt lägga till ett villkor i frågetexten I på huvudtabellens fält. Som ett resultat av layoutverktygens användning av filter kan de tillämpas både i kapslade frågor och i virtuella tabellparametrar.

När du utvecklar dynamiska listor är det en bra idé att testa alla dynamiska listor med anpassade frågor. Under verifieringsprocessen bör du se till att om listfrågan innehåller kapslade frågor eller virtuella tabeller och fält med alias som matchar aliasen för standardattributen Owner, Parent, Date, Period, ThisGroup eller nyckelfält är tillgängliga för val, då är dessa fält giltiga och matchar standardattributen som de har samma alias med. Om så inte är fallet bör du ändra begäran så att de matchar eller
alias är annorlunda.
Om manuell frågegenerering väljs, införs vissa begränsningar för frågan:
● Användningen av FIRST-satsen i en dynamisk listfråga stöds inte. Om du behöver använda ett urval begränsat av antalet poster i en dynamisk lista, bör du omarbeta frågan för att generera en dynamisk lista på ett sådant sätt att det faktiska innehållet i frågan placeras i en underfråga och begränsa antalet poster mottogs i denna underfråga. Du kan också använda en tillfällig tabell istället för en underfråga.
● Filtrering, sortering och gruppering stöds inte:

  • Enligt detaljerna i tabellsektionerna.
  • Visa fält.
  • DataVersion-fältet.
  • Fältet PredefinedDataName.
  • Fält Kontoplanstabelltyp.
  • Fältet MovementType i ackumuleringsregistertabellen.
  • Fält TypeValues ​​av tabellen över egenskaper typ plan.
  • Typfält Typ;
  • Typfält String (obegränsad längd).
  • Fält av typen BinaryData.

● Sortering och gruppering efter Subconto-fält stöds inte<НомерСубконто>och Typ Subconto<НомерСубконто>Tabeller RörelserSubconto redovisningsregister.
● Gruppering efter fält som är frågespråksuttryck som innehåller aggregerade funktioner stöds inte.
● Med huvudtabellen vald har den dynamiska listfrågan följande begränsningar:

  • Anslutningar stöds inte.
  • Användningen av ORDER BY-sektionen stöds inte. Du bör använda en fråga utan huvudtabell eller ställa in nödvändig ordning genom de dynamiska listinställningarna.

● Om en dynamisk lista visas som en hierarkisk lista eller träd, kommer en post inte att visas som en dynamisk lista om inte minst en förälder till denna post visas. Med andra ord, för att visa ett element i en hierarkisk lista, måste den dynamiska listan också visa alla föräldrar till det elementet upp till toppen av listan. I det här fallet betyder toppen av listan antingen
rotelementet för det hierarkiska objektet som återges av den dynamiska listan, eller elementet som anges som egenskapen ParentTopLevel för tabelltillägget för dynamisk lista.

Användningen av följande tabeller som huvudtabell i en dynamisk lista stöds inte:

● En tabell som inte har en nyckel som unikt identifierar varje tabellpost (referens för objekttabeller och inmatningsnyckel för registertabeller). Följande tabeller kan dock ställas in som huvudtabell i en dynamisk lista (trots avsaknaden av en nyckel):

● Underkontotabell för redovisningsregistret;
● alla virtuella tabeller i redovisningsregistret, förutom tabellen MovementsSubconto;
● tabeller med konstanta värden (inklusive tabellen Konstanter);
● tabeller över externa datakällor utan nyckelfält;
● kubtabeller över externa datakällor;
● ackumuleringsregistertabeller:

  • omsättningstabell;
  • balans tabell;
  • tabell över omsättningar och saldon.

● beräkningsregistertabeller:

  • faktisk giltighetsperiod tabell;
  • grafdata;
  • grundläggande information.

● Tabeller över tabellformade delar av föremål;
● Ändringsregistreringstabeller (används i datautbytesmekanismer);
● Sekvenstabeller;
● Konverteringstabeller (används i återkommande avräkningsmotorer).
● En tabell som endast används i en fråga i en yttre koppling.

Med andra ord kommer en dynamisk lista med en specificerad huvudtabell att fungera korrekt om, som ett resultat av exekvering av en fråga,
specificeras som en datakälla ökar inte antalet rader som tas emot från huvudtabellen (med hänsyn till det pålagda urvalet). Om antalet rader som tas emot av frågan från huvudtabellen ökar, som ett resultat av exekveringen av en fråga, kommer detta att leda till en kränkning av unikheten hos rekordnyckeln i tabellen som visas i listan. I det här fallet måste du inaktivera användningen av den dynamiska listtabellen.
När du arbetar med en dynamisk lista är det nödvändigt att ta hänsyn till åtkomsträttigheterna till detaljerna som visas av listan:
● Data för dynamiska listkolumner som är markerade med egenskapen Använd alltid, men för vilka den aktuella användaren inte har vyrättigheten, överförs inte till klientsidan. Åtkomst till data för sådana kolumner (med CurrentData-egenskapen och RowData()-metoden)
på klientsidan är inte möjligt.
● Om den aktuella användaren inte har Visa-rättigheten på ett nyckelfält i en dynamisk lista, resulterar att data från denna dynamiska lista i ett åtkomstbrottsfel.
För en dynamisk lista som visar en uppräkningslista finns det inget sätt att interaktivt anpassa listan.
Sammansättningen av kolumnerna och inställningarna för den dynamiska listan är associerade med fälten i frågan genom aliasen för urvalsfälten. Om aliaset för urvalsfältet inte är explicit specificerat i frågan och fältet är ett systemfält, används fältnamnet för den engelska versionen av det inbyggda språket som alias.
Den angivna relationen innebär att när du ändrar (eller uttryckligen anger ett alias för ett fält som använde ett automatiskt alias)
alias för frågefältet som genererar dynamisk listdata, inställningarna för det dynamiska listattributet kommer att gå förlorade, formulärelementen "förlorar" de visade attributen, de dynamiska listinställningarna blir felaktiga, etc.
I händelse av att datakällan för en dynamisk lista är en tabell (vanlig eller virtuell), som låter dig ställa in valet efter period, om användaren ställer in visningsperioden i en sådan dynamisk lista (Ställ in datumintervall .. . kommando),
de angivna periodgränserna kommer att ställas in som urvalsvärden eller virtuella tabellparametrar. Om medel för språkförlängning
frågor för datasammansättningssystemet specificerade uttryckligen namnen på parametrarna för den virtuella tabellen - parametrarna kommer att ställas in med den angivna
namn. Tabeller för vilka det är möjligt att styra perioden för visning eller bearbetning av data:
● tabeller över register (huvud- eller virtuella), för vilka det finns möjlighet att välja per period (för beräkningsregistret - efter registreringsperiod);
● huvudtabeller över dokument, affärsprocesser och uppgifter;
● huvudtabeller över dokumentjournaler;
● huvudsekvenstabeller, tabeller över sekvensgränser.
Frågeparametern för en dynamisk lista kan vara en matris eller en lista med värden. Men om parametern är en lista med värden kommer endast det första värdet i listan att användas som filtervärde. Om en dynamisk lista använder en fråga med parametrar, måste den initiala inställningen av parametervärdena göras i OnCreateAtServer-hanteraren.
Tänk på följande när du visar dynamisk listdata:
● Programmatisk ändring av egenskaperna för en dynamisk lista fyller inte automatiskt på kommandorader som är associerade med
med denna dynamiska lista.
● Om flera fält är grupperade i en grupp med grupperingsläge I cellen och i de grupperade fälten finns ett fält som visas med en kryssruta, då kommer denna kryssruta alltid att visas först i den resulterande cellen (till vänster om texten) ).
I en dynamisk lista, när man definierar datatypen för fält vars uttryck inkluderar parametrar, fält eller literaler, bestäms den resulterande typen av typen av fält och literaler. Om parametervärdetypen inte ingår i den resulterande datatypen kommer dess värde att trunkeras.
Till exempel, i följande exempel kommer fältet att vara av typen Number.

VAL
NÄR FALSKT
DÅ 5
ANNAT
&Parameter
SLUTET

Om du tilldelar parametern Parameter ett värde av en annan typ, kommer den dynamiska listan för detta fält att få värdet 0 (standardvärdet för nummertypen).
Om det i en sådan situation krävs att välja en parameter av en annan typ, rekommenderas att använda frågespråkskonstruktionen UTTRYCKA. Till exempel,
om du i exemplet ovan vill skicka en sträng som inte är längre än 100 tecken till parametern, bör du ersätta den enkla indikationen av parametern med ett uttryck med en explicit typkonvertering:

VAL
NÄR FALSKT
DÅ 5
ANNAT
EXPRESS(&Parameter AS String(100))
SLUTET

Om parametrar används i uttrycken för urvalsfälten i den fria texten i den dynamiska listfrågan, måste du uttryckligen ange typen av parametrar med hjälp av konstruktionen UTTRYCKA. Till exempel istället för &Nomenclature AS Nomenklatur använda sig av
EXPRESS(&Nomenclature AS Directory.Nomenclature) AS Nomenclature. Annars kan det fungera att söka i sökfältet.
felaktiga eller kasta fel.

3. Metoder för att erhålla och cachelagra data med en dynamisk lista

När en dynamisk lista tar emot data att visa använder en av tre metoder:
1. Läsning från databasen utförs i omgångar där antalet dataelement något överstiger antalet rader som visas samtidigt av listan (men inte mindre än 20). Data cachelagras inte på servern.
2. Läsning från databasen görs på sidor med 1 000 dataobjekt. Data cachelagras på servern. Hierarkisk data cachelagras: inte mer än 2 elementsidor cachelagras för varje överordnad. Högst 20 objektsidor cachelagras per dynamisk lista. Cachning kommer att aktiveras av dynamisk lista för följande tabeller:
● Urvalskriterier;
● Alla redovisningstabeller, förutom huvudtabellen och tabellen MovementsSubconto;
● Alla tabeller i ackumuleringsregistret, utom huvudtabellen;
● Alla tabeller i informationsregistret, utom huvudtabellen;
● Alla tabeller i beräkningsregistret, utom huvudtabellen;
● Virtuell tabell TasksBy Performer;
● Tabeller över externa källor utan nycklar;
● Externa källkuber.

3. Läsning från databasen görs på sidor om 1 000 artiklar. Den första delen är lika med 1 sida. Varje nästa del ökar med 1 sida (när slutet av föregående prov nås). Ju närmare "synpunkten" rör sig mot slutet av den visade data, desto större urval läses från databasen, i gränsen blir lika med alla visade data. Data cachelagras på servern. Det maximala antalet poster i cachen och den dynamiska listan är 1 000 000.
Beroende på vad som väljs av huvudtabellen i den dynamiska listan och vilket värde egenskapen Dynamic Read tar, används en eller annan metod för att läsa data:

● En av följande tabeller anges som värdet på egenskapen Main table: utbytesplan, uppslag, dokumentförteckning, dokumentjournal, diagram över karaktäristiska typer, kontoplan, diagram över beräkningstyper, affärsprocess, uppgift, tabell över affärsprocesspunkter:



● En av följande tabeller anges som värdet på egenskapen Main table: informationsregistrets huvudtabell, ackumuleringsregistret, redovisningsregistret, avräkningsregistret, den virtuella tabellen i redovisningsregistret MovementsSubconto:

● Dynamisk läsegenskap:
● Installerad: Metod 1 används (metoderna beskrivs ovan).
● Återställning: Metod 2 används (metoderna beskrivs ovan).

● Som egenskapen Main table specificeras en urvalskriterietabell eller en tabell med uppgifter efter executor (TasksBy Executor):
● Nyckel som identifierar en tabellrad: Länk.

● Egenskapen Main table är inställd på informationsregistrets virtuella tabell SliceFirst eller SliceLast:
● Nyckel som identifierar en tabellrad: RecordKey.
● Egenskapen Dynamic Read är inte tillämplig.
● Metod 2 används (metoderna beskrivs ovan).

● En av de virtuella registertabellerna anges som egenskapen Main table, förutom de som anges ovan:

● Egenskapen Dynamic Read är inte tillämplig.

● Egenskapen Main table är inte specificerad, en godtycklig fråga används:
● Nyckel som identifierar en tabellrad: Nummer.
● Egenskapen Dynamic Read är inte tillämplig.
● Metod 3 används (metoderna beskrivs ovan).

För visning överförs data till klienten i bitar, vars storlek liknar chunkstorleken i den första dataavläsningsmetoden (beskrivs i början av detta avsnitt).
När du skapar ett formulär som innehåller en dynamisk lista skickas initialt 45 dataposter för varje synlig dynamisk lista till klienten (om listan har fler än 45 objekt). Om den dynamiska listan visar mer än 45 rader kommer ett extra serveranrop att göras för att hämta de saknade dataobjekten när formuläret öppnas.

4. Dynamiska listinställningar

Listinställningsegenskap – genom att klicka på hyperlänken Öppna öppnas formuläret för dynamiska listvisningsinställningar. Att sätta upp listan görs på samma sätt som liknande operationer i datasammansättningssystemet.


Ris. 2. Villkorlig styling av en dynamisk lista

När du ställer in en dynamisk lista i konfigurationen har utvecklaren av den tillämpade lösningen möjlighet att göra följande:
● ställ in fälten för vilka beställning ska utföras;
● beskriv valet av data i listan;
● ange villkorliga formateringsinställningar;
● ställ in de fält som du vill gruppera data efter.
Det är vettigt att ställa in sorteringen till utvecklaren om standardsortering som ställts in av systemet inte är lämplig.

RÅD. Man bör komma ihåg att dåligt urval av sorteringsfält (liksom urval och gruppering av data) negativt påverkar effektiviteten av dynamisk sampling.
Ur en applikationsutvecklares synvinkel består dynamiska listinställningar av flera delar som är sammankopplade. Huvudegenskapen genom vilken du kan styra inställningarna för en dynamisk lista är LinkerSettings. Det här objektet innehåller tre uppsättningar inställningar som, när systemet körs, bestämmer de slutliga inställningarna som tillämpas på den dynamiska listan:
● Inställningar - inställningar skapade i konfiguratorläget. Order dynamic list-egenskapen ger snabb åtkomst till Settings.Order-egenskapen för den dynamiska listinställningsbyggaren, så följande konstruktioner är likvärdiga:
List.Order och List.SettingsComposer.Settings.Order;
● Användarinställningar är de inställningar som användaren kan ändra i 1C:Enterprise-läge;
● FixedSettings - Dessa inställningar ställs in från det inbyggda språket. Den här egenskapen innehåller också urvalsvärden som skickas till formuläret med hjälp av dess parametrar. Egenskaperna för den dynamiska listan Filter, Parametrar, Villkorligt utseende ger snabb åtkomst till de fasta inställningarna för den dynamiska listinställningsbyggaren. Med andra ord är dessa samtal likvärdiga:
List.SettingsComposer.FixedSettings.Filter och List.Filter.
När du skapar den slutliga inställningen för den dynamiska listan, kombineras olika inställningar enligt följande:
● Om någon typ av inställningar är helt markerade som användardefinierade, så ingår användarinställningar i de resulterande inställningarna
(List.SettingsComposer.UserSettings). I det här fallet, om några inställningselement är markerade som otillgängliga, kommer dessa inställningar att placeras i de resulterande inställningarna från egenskapen List.Settings Composer. Inställningar.
● Om någon typ av inställningar är markerade som användarspecifika inte helt, utan element för element, då:
● Element markerade som anpassade kommer att inkluderas i de resulterande inställningarna från egenskapen List.SettingsComposer.CustomSettings.
● Objekt markerade som otillgängliga kommer att inkluderas i de resulterande inställningarna från egenskapen List.SettingsComposer.Settings.
● Fasta inställningar (List.SettingsComposer.FixedSettings) läggs till de resulterande inställningarna "i befintligt skick". Samtidigt är situationen oacceptabel när de fasta och användarinställningarna innehåller inställningar med samma namn, till exempel val med samma vänstra värde i villkoret.

Om det finns inställningar i de dynamiska listinställningarna som är inaktiverade med hjälp av funktionsalternativen, kommer dessa inställningar att tas bort från listan över tillgängliga inställningar när den dynamiska listdata tas emot.
Kontroll över vilka inställningar som kommer att vara tillgängliga för användaren och vilka som inte kommer att utföras i fönstret för dynamiska listinställningar.


Ris. 3. Hantera inkludering i användarinställningar

Kryssrutan längst ner i fönstret (se fig. 3) är ansvarig för att placera hela typen av inställningar i inställningarna (vanliga eller snabba). Den här funktionen är tillgänglig för urval, ordning, gruppering och villkorlig stil. Om inställningarna har angetts med redigeringsläget Snabbval, måste du i gruppegenskapen Anpassade inställningar i formulärtabellen som visar den dynamiska listan ange en tom formulärgrupp där elementen som är associerade med snabbanvändarinställningarna för den dynamiska listan vara lokaliserad. Om gruppen inte är specificerad kommer inte snabba användarinställningar att visas i formuläret. Det är också möjligt att uttryckligen anropa skapandet av anpassade inställningar med hjälp av språket 1C:Enterprise med metoden CreateUserSettingsFormItems() för den dynamiska listtillägget.
Det är också möjligt att välja möjligheten att placera specifika inställningsposter i användarinställningarna. Denna funktion är tillgänglig för urval och villkorade designelement (se fig. 3).

Om det är nödvändigt att några speciella inställningar laddas när du öppnar en dynamisk lista, kan detta göras på två sätt:
● Använda parametern CustomSettings dynamiska listformulär. Data i denna parameter kommer att placeras i användarinställningarna för den dynamiska listan.
● Använda den dynamiska listformparametern UserSettingsKey. Om du anger denna parameter när du öppnar formuläret, kommer användarinställningarna som finns i inställningslagringen med den angivna nyckeln att laddas in i den dynamiska listan, som är formulärets huvudattribut.

5. Sök i en dynamisk lista

Den dynamiska listan som finns på formuläret ger möjlighet att utföra en interaktiv sökning i den visade informationen. Sökningen kan utföras med hjälp av följande verktyg: söksträng, sökdialog, sök efter aktuellt värde, använda sökhistoriken och ställa in perioden (för dynamiska listor som visar dokument). Sökresultatet är en begränsad uppsättning poster
en dynamisk lista (över de som är tillgängliga för en given användare) som matchar sökkriterierna.
Det finns tre egenskaper för den hanterade formulärtabellen som visar den dynamiska listan för att styra sökmöjligheterna för en dynamisk lista:
● Söksträngens position - definierar söksträngens position. Kan ta följande värden: Auto, Kommandopanel, Nej, Topp, Botten.


Ris. 4. Sökfält i dynamisk lista

Om värdet för den här egenskapen är inställt på Kommandofält, kommer ett sökfält att visas i formulärets kommandofält (om den dynamiska listan är formulärets huvudattribut) eller i kommandofältet som är associerat med den dynamiska listan. Sökfältet placerat i kommandofältet trycks alltid till höger kant av kommandofältet (tillsammans med knapparna till höger om sökfältet).
Om egenskapen är inställd på Nej, kommer söksträngen att saknas i formuläret, och en dialogruta öppnas när du börjar skriva söksträngen.
Om egenskapen är inställd på Top, kommer sökfältet att placeras mellan listans kommandofält och tabellen som visar den dynamiska listan. Om egenskapen är inställd på Botten, kommer söksträngen att placeras omedelbart efter tabellen som visar den dynamiska listan.


● Om egenskapen Kompatibilitetsläge är inställd på Använd inte eller äldre än version 8.3.4, är värdet Kommandopanelen.
Övergången till sökfältet görs på följande sätt:
● Genom att trycka på tangentkombinationen Ctrl+F;
● Mus;
● När du börjar skriva i en dynamisk lista (baserat på värdet för den dynamiska listans SearchOnType-egenskap).
● Visa statusposition - beskriver var vytillståndet kommer att visas: vilka fält som söktes och vilka värden
sökte i varje fält. Kan ta följande värden: Auto, None, Top, Bottom


Ris. 5. Sökstatus i dynamisk lista

Om egenskapen är inställd på Nej, kommer vytillståndet inte att finnas på formuläret. Som ett resultat kommer det att vara möjligt att avgöra om sökningen utfördes eller inte bara genom tillgängligheten av knappen Avbryt sökning.
Om egenskapen är inställd på Top, kommer vytillståndet att placeras mellan listans kommandofält och tabellen som visar den dynamiska listan. Om egenskapen är inställd på Botten, kommer vytillståndet att placeras omedelbart efter tabellen som visar den dynamiska listan.
Om formuläret skapades i 1C:Enterprise version 8.3.4 och tidigare, är egenskapen inställd på No. Om formuläret skapades i 1C:Enterprise version 8.3.5 och senare är egenskapen inställd på Auto. Det verkliga värdet av fastigheten i detta fall kommer att bestämmas enligt följande:
● Om egenskapen Kompatibilitetsläge är inställd på version 8.3.4 (och lägre) – Nej;
● Om egenskapen Kompatibilitetsläge är inställd på Använd inte eller äldre än version 8.3.4, är värdet Top;
● Sökkontrollposition - bestämmer var sökkontrollknappen ska visas. Knappen öppnar en meny som innehåller följande information: kommandon Sök efter aktuellt värde, Avancerad sökning, Avbryt sökning, Ställ in period (för listor över dokument och tidskrifter) och historik över sökfrågor (senaste 5 frågorna). Egenskapen kan ha värden: Auto, Nej, Kommandopanel.


Ris. 6. Sökhantering i en dynamisk lista

Om egenskapen är inställd på Nej, kommer sökkontrollknappen inte att finnas i formuläret (men kommandona kommer att vara tillgängliga via menyn Mer). Kommandofältsegenskapsvärdet placerar en knapp på kommandofältet som är kopplat till en tabell som visar en dynamisk lista.
Om formuläret skapades i 1C:Enterprise version 8.3.4 och tidigare, är egenskapen inställd på No. Om formuläret skapades i 1C:Enterprise version 8.3.5 och senare är egenskapen inställd på Auto. Det verkliga värdet av fastigheten i detta fall kommer att bestämmas enligt följande:
● Om egenskapen Kompatibilitetsläge är inställd på version 8.3.4 (och lägre) – Nej;
● Om egenskapen Kompatibilitetsläge är inställd på Använd inte eller äldre än version 8.3.4, är värdet Kommandopanelen;
Om det finns flera kommandopaneler i formuläret, vars kommandokälla är en tabell i det hanterade formuläret (visar dynamiska listdata), kommer söksträngen och sökkontrollknappen att finnas i endast en kommandopanel:
● Eller i kommandofältet i själva den dynamiska listan (om autoslutförande är aktiverat för det)
● Eller i någon av de återstående kommandopanelerna.

Tänk på funktionerna i att använda sökning i en dynamisk lista:
● För att göra sökningen bekväm att använda (inklusive vad gäller prestanda) måste du aktivera fulltextsökning för alla konfigurationsobjekt som kan användas som huvudtabell i en dynamisk lista. Fulltextsökningen bör också innehålla alla detaljer om konfigurationsobjekt som kan visas i en dynamisk lista och för vilka en sökning kan krävas.
Om objektet utesluts från fulltextsökning, kommer sökmekanismen i fråga att fungera, men prestandan för en sådan sökning kommer att vara extremt låg. Det rekommenderas inte att använda sökning på objekt som inte indexeras med fulltextsökning.
● Applikationslösningen måste ha ett schemalagt jobb som regelbundet uppdaterar fulltextsökindexet.

● Sökningen utförs inte på alla kolumner i den dynamiska listan (och konfigurationsobjektet), utan endast på de kolumner som visas i tabellen.
● Sökning i en dynamisk lista efter fält av referenstyper med godtycklig representation utförs av fält som används för
representationsbildning (se här). Fälten som ingår i vyn erhålls med hänsyn till ViewFieldsGetProcess()-hanteraren för motsvarande objekt.
● För dynamiska listor med en specificerad huvudtabell används en fulltextsökning mot huvudtabellen. Alla oindexerade länkar från huvudtabellen kommer att läggas till i fulltextsökresultaten. Resultatet av fulltextsökningen för huvudtabellen används som ett filter efter nyckelfält. En fulltextsökning utförs också på fält som visas i listan från andra tabeller (om fulltextsökning används för fältet och konfigurationsobjektet). Utan fulltextsökning aktiverad kan data vara
hittas, men själva sökningen kommer att gå mycket långsamt.
Om ett fel uppstår när du försöker utföra en fulltextsökning, kommer sökningen att utföras utan att använda fulltextsökning.
Detta kan till exempel hända när du söker med en bokstav och ett stort antal rader i infobasen som börjar med denna bokstav.
● Om ett fält i huvudtabellen i en dynamisk lista använder ett urval med jämförelsetypen Lika med, kommer ett urvalsvärde att läggas till i sökfrågan för denna tabell när du utför en fulltextsökning.
● Söksträngen är uppdelad i ord. Denna partitionering görs enligt följande regler:
● Raden delas med mellanslag och tabulatortecken som avgränsare.
● Sedan bearbetas varje resulterande fragment:
● Om fragmentet är en representation av ett datum (med eller utan tid) baserat på sessionens aktuella lokalitet, är fragmentet ordet.
● Annars delas fragmentet ytterligare med tecknen ",.-/\" som avgränsare. I det här fallet tas varje resulterande fragment av strängen som ett ord.

● För varje ord bildas en egen uppsättning villkor, som kombineras "av ELLER". Denna uppsättning villkor genereras om en fulltextsökning efter ett givet ord i tabellen som detta fält hämtades från returnerade minst ett objekt, eller om en fulltextsökning inte användes för detta fält. Villkoren är utformade enligt följande:
● För ett fält av typen String är villkoret FieldName LIKE %Word%.
● För ett fält av typen Number är villkoret Fältnamn=Värde, där Värde är ett ord som har kastats till Number. Om casten inte kan utföras kommer fältsökningen inte att utföras.
● Ordet söks som en delsträng i standardrepresentationen av den booleska typen som definieras för den aktuella sessionen. Om sökordet hittas i en vy görs en sökning efter värdet som motsvarar den vy i vilken ordet hittades. Samtidigt används inte de vyer som anges med egenskapen Format form element för sökningen.
● För ett datumtypfält är villkoret Fältnamn>=DagStart(ord) OCH Fältnamn<=КонецДня(Слово). Если Слово подобно дате, в которой год
specificeras med en eller två siffror, kommer året att omvandlas till det aktuella århundradet och detta värde kommer att ersättas i sökvillkoret.
● För referensfält görs sökningen på de fält som används för att bilda representationen av länken. Sök i vart och ett av dessa fält
utförs enligt reglerna som beskrivs ovan. Sökningen använder inte de fält som används för att bilda en godtycklig presentation av data.
Uppsättningen villkor för varje ord kombineras "med OCH".
● För värden med inledande nollor kan du söka antingen på en sträng med inledande nollor eller på en sträng som anges utan inledande nollor.
● Om den dynamiska listan visar en lista med dokument eller en dokumenthistorik, visas det angivna listvyintervallet också i formulärområdet som är avsett för att visa vystatus för den önskade dynamiska listan.
● Kommandot Sök efter aktuellt värde är inte tillgängligt om huvudtabellen i den dynamiska listan är ett urvalskriterium.
● De hittade fragmenten av linjer markeras när de visas i tabellen.
● Endast en söksträng stöds per kolumn. Om du lägger till en ny sökterm för en kolumn som redan genomsöks kommer att ersätta sökuttrycket snarare än att lägga till de två söktermerna.
● Om formuläret inte har ett formulärelementtillägg av formuläret Visa en söksträng som är kopplad till en tabell (egenskapen Source för formulärelementtillägget) som visar en dynamisk lista och tryck sedan på tangentkombinationen Ctrl+F öppnar sökdialogrutan.


Ris. 7. Sökdialog

Om formuläret har ett tillägg för formulärelement av formuläret Visa en söksträng som är associerad med en tabell (egenskapen Source för tillägget formulärelement) som visar en dynamisk lista, bör kommandot Avancerad sökning användas för att öppna sökdialog.
● Tänk på följande när du använder sökdialogrutan:
● Om du öppnar sökdialogrutan med kortkommandon visas värdet för den aktuella cellen på raden Vad ska sökas, och värdet på alternativknappen Hur söker man ställs in på Exakt matchning.

● Att öppna en sökdialogruta genom att direkt börja skriva en söksträng i en dynamisk lista gör att värdet för alternativknappen Hur söker man ställs in på Del av en sträng och den inskrivna texten kommer in i fältet Vad ska sökas.

6. Få data som visas av den dynamiska listan

När du använder dynamiska listor kan du behöva utföra olika åtgärder på den data som för närvarande visas av den dynamiska listan, med hänsyn till de pålagda filtren och tillämpad sökning. Sådana åtgärder inkluderar: bearbetning av den visade informationen, till exempel, posta om de valda dokumenten eller ställa in några detaljer för de valda objekten, generera en lista över tillgängliga objekt (med design, etc.), till exempel för att skriva ut eller spara i ett kalkylarksdokument .
För att få data som visas i en dynamisk lista, använd GetDataCompositionSchemeExecutable() och
GetDataCompositionSettingsExecutable().
Exempel på datahämtning:

Schema = Items.List.GetExecutableDataCompositionSchema();
Settings = Items.List.GetDataCompositionSettingsExecutable();
Layout Layout Builder = New Data Layout Layout Builder();
LayoutLayout = LayoutComposer.Run(Scheme, Settings);
CompositionProcessor = NewDataCompositionProcessor;
LayoutProcessor.Initialize(LayoutLayout);
OutputProcessor = New OutputProcessorofDataCompositionResultIntoSpreadsheetDocument;
Return OutputProcessor.Output(CompositionProcessor);

Att få in data i en samling av värden (tabell eller värdelista) görs på liknande sätt.
Att hämta data från en dynamisk lista på detta sätt har ett antal funktioner som måste beaktas när man utvecklar applikationslösningar:
● Följande tabelldesign stöds inte:
● Linjefärgsväxling;
● Huvudbild;
● källarbild;
● Källarbakgrundsfärg;
● Färg på sidfoten;
● Teckensnitt för sidfot;
● Horisontellt läge i källaren;
● Lösenordsläge.
● Det villkorliga utseendet som anges för det hanterade formuläret stöds inte.
● När du sorterar en hierarkisk tabell i stigande ordning, efter ett fält av typen Länk, placeras poster som innehåller en nolllänk alltid först.

I processen att slutföra konfigurationer möter varje 1C-programmerare dynamiska listor.
En dynamisk lista är ett gränssnittsobjekt som används för att visa olika listor med databasobjekt eller icke-objektdata - registerposter.
Till exempel används en dynamisk lista för att visa en lista med objekt:

För att demonstrera möjligheterna med en dynamisk lista, låt oss skapa en extern bearbetning, lägg till huvudformuläret. Låt oss lägga till ett nytt attribut med typen "Dynamisk lista" i formuläret. Låt oss gå till dess fastigheter och se vad som finns där.
Vi är intresserade av egenskapen "Anpassad begäran". Om du aktiverar det visar vi alla möjligheter med en dynamisk lista. Vi kommer att kunna skriva en fråga med nästan alla funktioner i frågespråket i 1C: Enterprise-systemet. Markera rutan och klicka på länken "Öppna":

Som standard kommer vår lista att visa en lista över artiklar med ett totalt saldo för alla lager. För att implementera en sådan lista, lägg till följande fråga:


Som huvudtabell kommer vi att välja "Katalog. Nomenklatur", detta kommer att tillåta oss att arbeta med en dynamisk lista, som med en lista med nomenklatur - lägg till, ändra, markera för raderingselement i katalogen. Att ställa in huvudtabellen gör också möjligheten till dynamisk dataläsning tillgänglig - detta innebär att valet kommer att göras i portioner efter behov.
Därefter måste vi skapa formulärelement för vår lista:

Om vi ​​försöker köra vår bearbetning i det här formuläret får vi ett felmeddelande:


För att eliminera det måste du ställa in värdet för parametern "Period". För att göra detta kan du använda metoden "SetParameterValue" i samlingen "Parameters" i den dynamiska listan. Metoden tar två parametrar:
. "Parameter" - Typ: String; DataCompositionParameter. Namnet på parametern eller datasammansättningsparametern vars värde ska ställas in;
. "Värde" - Typ: Godtycklig. Värdet som ska ställas in.
Kan anropas i "OnCreateOnServer"-hanteraren i formuläret:

Har du en fråga, behöver du hjälp av en konsult?


Låt oss ge användaren möjlighet att ändra perioden för att ta emot saldon. För att göra detta, låt oss lägga till attributet och formulärelementet "Datum" som är kopplat till det:


I "OnChange"-hanteraren för formulärelementet "Date" anropar du metoden "SetParameterValue" och skickar värdet för det associerade attributet som värdet. På samma sätt kommer vi att ändra proceduren "På CreationAtServer" i formuläret. Eftersom metoden är tillgänglig på klienten finns det inget behov av att anropa servern:


Nu, när datumet ändras, kommer saldonen att uppdateras automatiskt:




Anta att användare vill se antingen aktuella saldon eller beräknade kvitton. Låt oss överväga ett av implementeringsalternativen. Låt oss lägga till ett booleskt formulärattribut och en tillhörande alternativknapp:


När vi ändrar värdet på omkopplaren kommer vi att ändra texten i begäran. För att göra detta kommer vi att använda händelsehanteraren "OnChange" av formulärelementet "DisplayQuantityToReceipt". Vi måste ändra egenskapen "QueryText" för den dynamiska listan beroende på värdet på attributet. Eftersom den här egenskapen inte är tillgänglig på klienten krävs ett anrop till servern:


Resultatet av de ändringar som gjorts:



Förutom primitiva datatyper som kan hittas i alla programmeringsspråk, finns det unika typer i 1C. Var och en av dem har sina egna egenskaper, metoder, funktioner, syfte och användningsnyanser i systemet. En av dessa typer är en dynamisk lista, som avsevärt förenklar många tillämpade uppgifter. Det är därför utvecklare bör känna till och kunna hantera detta mångsidiga verktyg.

Funktioner av dynamiska listor i 1C

Syftet med denna typ är att visa information från alla databastabeller, oavsett typ. Mekanismen skapades på basis av SKD och har liknande möjligheter. Men detta betyder inte att du definitivt kommer att behöva skriva en fråga på 1C-språket, även om denna möjlighet finns och du måste använda den. Du kan helt enkelt ange tabellen, informationen som du är intresserad av, och 1C kommer självständigt att generera en enkel fråga.

För att se hur en dynamisk lista bildas och vilken data den visar, måste du öppna hanterade formulär, var den finns, i konfiguratorn: i listan med detaljer, öppna dess egenskaper via snabbmenyn och var uppmärksam på "Anpassad Begäran” objekt. Om det inte finns någon kryssruta, så återspeglar parametern "Huvudtabell" databastabellen som data hämtas ifrån. Annars återspeglar den dynamiska listan anpassade frågedata, som kan ses genom att öppna listinställningarna.

Ett godtyckligt frågeschema är mycket vanligare, eftersom det ger en fantastisk möjlighet att kombinera och visa en mängd olika data. Oftast används denna mekanism för att återspegla lagersaldon, artikelpriser, inkomster, utgifter eller inköp. Du måste använda det försiktigt, eftersom prestandan kan sjunka med komplexa frågor.

En annan användbar egenskap för den dynamiska listan öppnas genom att klicka på inskriptionen "Listinställningar". Denna meny gör det möjligt att, även när du använder en standarduppsättning fält, göra information mer tillgänglig och begriplig för slutanvändare. Oavsett om det är en godtycklig begäran eller inte, kommer du att se fliken "Inställningar" där du kan ange:

  • Val av en dynamisk lista;
  • grupperingar;
  • sortering;
  • Registrering.

Användningen av parametrar gör dynamiska listor mångsidiga och tillräckligt flexibla. Du kan också binda dem till rekvisita på ett hanterat formulär, och data kommer att ändras beroende på de alternativ som valts av användaren. Användningen av dessa mekanismer kan förstås och uppskattas genom att titta på exempel på verkliga problem.

Tänk som ett exempel på problemet med att återspegla resterna av nomenklaturen på ett hanterat formulär. I praktiken är sådana order ganska vanliga i olika konfigurationer, och den dynamiska listan är idealisk som ett verktyg. För denna uppgift måste vi använda en godtycklig fråga, dynamiska listparametrar och dess inställningar.

För större tydlighet, låt oss skapa en separat extern bearbetning och placera en dynamisk lista på den. För att implementera våra planer kommer det att finnas få tabeller med nomenklatur, så vi måste tillåta en godtycklig begäran. I den kommer vi att beskriva referensbokens vänstra koppling med listan över nomenklatur och register över rester och sätta uppslagsboken som huvudtabell. Ett sådant schema kommer att tillåta användare, medan de arbetar med en dynamisk lista, att lägga till eller ändra nomenklaturen.



Välj en nomenklatur.

Eftersom parametern CurrentDate användes i vår begäran måste vi ställa in dess värde innan vi använder bearbetningen. För att göra detta, i formulärmodulen i proceduren "On CreationOnServer" med ett standardkommando, tilldela funktionen "CurrentSessionDate" till den med ett standardkommando. Vi behöver också visa en dynamisk lista på kontrollformuläret och ändra ordningen på fälten för tydlighetens skull. Dra rekvisitan "Nomenklaturrester" till formulärelementen (övre till vänster) och använd de blå pilarna för att ändra ordningen på fälten i tabellen på formuläret.

&At Server Procedur vid skapandeAt Server(Failure, StandardProcessing) Nomenclature Remains.Parameters.SetParameterValue("CurrentDate",CurrentSessionDate()) EndProcedure


Redan i detta skede kan vi öppna vår externa bearbetning i 1C och se att den dynamiska listan fungerar. Vi kan titta på saldonen, skapa nomenklatur och grupper och söka. Ofta ber kunderna att få lägga till möjligheten att välja datum för vilket de ska se saldot. I fallet med ett formulär med en dynamisk lista tillhandahålls detta av ett extra fält och inställning av parametrar som använder det.

Vi lägger till attributet "Remains Date" av typen "Date" och överför det till formulärelementen. I fälthändelserna skapar vi en händelse "OnChange" och skriver koden för att ställa in parametern "CurrentDate" som används i den dynamiska frågan. Så att när användaren öppnar formuläret förstår användaren omedelbart vilket datum han ser saldona, vi kommer att göra små ändringar i "OnCreateOnServer" -proceduren.



&OnServerProcedureOnCreateOnServer(Failure, StandardProcessing)RemainsDate = CurrentSessionDate(); Item Remains.Parameters.SetParameterValue("CurrentDate", RemainsDate); Slut på procedur &Vid klienten Procedur RemainsDateOnChange(Element) Item Remains.Parameters.SetParameterValue("CurrentDate",RemainsDate); Slutprocedur

Som ett resultat kan vårt Dynamic List-formulär visa saldon för vilket datum som helst.

Vi har bara täckt en liten del av funktionerna i denna verktygslåda, men detta är redan tillräckligt för att förstå bekvämligheten med denna typ av dynamisk lista. En liknande mekanism används för många uppgifter, men oftast finns den i typiska konfigurationer i hanterade former:

  1. urval;
  2. Listor.

För att få en dynamisk lista och dess begäran i typiska hanterade former måste utvecklaren öppna det önskade formuläret i konfiguratorn. I attributsektionen hittar du attributet med datatypen "DynamicList" (oftast är det i fetstil). Dess egenskaper innehåller texten för begäran, val och andra inställningar.