1c förbigå den dynamiska listtabellen. Hämtar dynamisk listdata

I processen att slutföra konfigurationer stöter varje 1C-programmerare på 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 funktionerna i en dynamisk lista, låt oss skapa extern bearbetning, lägg till huvudformuläret. Låt oss lägga till ett nytt attribut till formuläret med typen "Dynamisk lista". Låt oss gå in på dess egenskaper och se vad som finns där.
Vi är intresserade av egendomen "Anpassad begäran". Om du aktiverar det visar vi alla funktionerna i en dynamisk lista. Vi kommer att kunna skriva en förfrågan genom att använda nästan alla funktioner i 1C: Enterprise-systemets frågespråk. Markera rutan och klicka på länken "Öppna":

Som standard kommer vår lista att visa en lista med artiklar med det totala saldot 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 "Directory.Nomenclature", detta kommer att tillåta oss att arbeta med en dynamisk lista, som med en lista med nomenklatur - lägg till, ändra, markera katalogelement för radering. Det gör också att ställa in huvudbordet överkomlig möjlighet dynamisk dataavläsning - detta innebär att provtagningen 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 ett värde 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 du vill ställa 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 eller behöver hjälp av en konsult?


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


I "OnChange"-hanteraren för formulärelementet "Date" anropar vi metoden "SetParameterValue" och skickar värdet för det associerade attributet som värdet. På ett liknande sätt, låt oss ändra proceduren "När du skapar på server" 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:




Låt oss anta att användare vill se antingen aktuella saldon eller planerade kvitton. Låt oss överväga ett av implementeringsalternativen. Låt oss lägga till ett formulärattribut av boolesk typ och en tillhörande switch:


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 "Vid ändring" för formulärelementet "Visa kvantitet vid kvitto". 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 måste en serverprocedur anropas:


Resultat av de ändringar som gjorts:



Plattform 1C:Enterprise 8.2 kan arbeta med många poster i en databastabell på ett dynamiskt sätt, det vill säga läsa data i delar. Tidigare i artiklar tittade vi på mekanismen för dynamiska listor och metoder för att optimera arbetet med dem.

Idag kommer vi att lösa ett icke-standardproblem för dynamiska listor. Vi kommer att behöva beräkna summan med dokumentattributet "Amount" och visa det i sidfoten på listan. Beräkna på samma sätt medelvärdet för fältet "Betyg" och visa det i sidfoten i den dynamiska listan. Beräkningen av de totala fälten måste ta hänsyn till det val som användaren ställt in i dokumentlistans inställningar.

Hela svårigheten ligger i det faktum att en dynamisk lista inte tar emot alla poster på en gång, utan tar emot dem i portioner. Följaktligen kan vi inte omedelbart få en sammanfattning av alla dokument som motsvarar det aktuella urvalet. Hur beräknar man summan?

Genomförande

Och så, låt oss gå vidare till att lösa problemet. Låt oss börja med att ändra formen, sedan kommer vi att beskriva algoritmen för att erhålla de slutliga värdena.

Form och gränssnitt

Låt oss först förbereda ett dokumentformulär för att visa de resulterande fälten. För att göra detta kommer vi att lägga till två strängdetaljer i formen "Betyg" och "Belopp".

De totala värdena för dokumenten kommer att registreras i dessa detaljer.

För att visa värdena för detaljer i sidfoten i en dynamisk lista måste du aktivera motsvarande alternativ för det associerade elementet i listformuläret (se följande skärmdump).

Nu måste du bestämma vilken händelse resultaten i listans sidfot ska uppdateras. För att underlätta utvecklingen, låt oss lägga till kommandot "Uppdatera" och motsvarande formulärelement till kommandopanelen. När detta kommando utförs kommer totalsummorna att uppdateras.

I testkonfigurationen, som du kan ladda ner från länken i slutet av artikeln, har jag även lagt till en sammanfattande uppdateringshändelse vid inspelning av ett dokument. I det här fallet används mekanismen för formuläranmälan. Vi kommer inte att uppehålla oss mer i detalj.

Algoritm

Den mest problematiska delen kvarstår - du måste få de totala värdena. Låt oss fortsätta enligt följande: vi kommer att skapa en begäran till databasen för att erhålla värdena för de slutliga fälten i enlighet med urvalet i den dynamiska listan. Det är värt att tänka på att urvalet kan ha ett komplext tillstånd från grupper.

Obs: inställningarna för dynamiska listor (se skärmdump ovan) är baserade på mekanismerna för datakompositionssystemet (DCS). Följaktligen kan du arbeta med dem på ett liknande sätt (programmässigt lägga till, ändra, läsa, etc.).

Stadierna för att skapa en begäran för att få resultat är som följer:

1. Vi tar emot den första begäran om den dynamiska listan.

Som vi kan se väljer begäran alla dokumentdetaljer. För att lägga till lite mer komplexitet lade jag till mitt eget "Rating Level"-fält, genererat av "SELECT"-konstruktionen.

2. Vi bildar texten i begärandevillkoren (avsnittet "VAR") och ersätter den med den ursprungliga begäran.

Vi måste lägga till villkor till den mottagna källbegäranstexten i enlighet med det konfigurerade dynamiska listvalet.

Proceduren, beroende på typen av det godkända urvalselementet (grupp eller urvalselement), genererar motsvarande villkorstext. Alla villkor i en grupp är omgivna av parentes, och de som ingår i gruppen är också omgivna av parenteser. Villkoren mellan uttryck beror på den överordnade gruppen (ett "OCH"-villkor placeras mellan de översta elementen i hierarkin).

Om ett element har en användningsflagga (egenskapen "Användning"), bearbetas elementet. Den genererade texten beror också på jämförelsevillkoret (Lika, inte lika, i en lista, etc.). Beroendet av den genererade villkorstexten på typen av jämförelse kan ses i följande funktion.

En annan intressant funktion, enligt min mening, är "GetFieldTextByView". Det behövs för att ersätta fält som bildas av frågespråksuttryck i frågevillkoren. Ovan lade jag till fältet "Rating Level" till den ursprungliga begäran. Om användaren använder det i urvalet måste hela uttrycket ersättas i frågevillkoret. Denna funktion hämtar texten i ett fält från en begäran baserat på dess representation. För sådana komplexa fält kommer det att returnera hela texten i uttrycket.

För mer information om algoritmen, se testkonfigurationen som bifogas artikeln. Nedan finns en skärmdump av urvalsinställningarna och de förfrågningsvillkor som genereras för dem.

Den genererade villkorstexten läggs till den ursprungliga dynamiska listbegäran. Resultatet av frågan placeras i en tillfällig tabell.

3. Vi placerar den första frågan i en temporär tabell och utför gruppering efter sammanfattningsfält med nödvändiga aggregerade funktioner.

Låt mig påminna dig om att vi måste få medelvärdet för fältet "Betyg" och det totala beloppet för fältet "Belopp". Vi har redan genererat en förfrågan med hänsyn till urvalen, det enda som återstår är att beräkna de totala värdena. Detta görs med följande begäran:

Efter att ha utfört begäran behandlar vi det resulterande resultatet, returnerar det till klienten och skriver det i formulärdetaljerna som vi skapade tidigare. I slutändan fick vi resultaten som visas i sidfoten på den dynamiska listan (se den första skärmdumpen i artikeln).

Lösningens optimalitet

I allmänhet kan detta tillvägagångssätt ha en negativ inverkan på prestandan. Till exempel, om programmet kommer att beräkna totalsumman utan etablerat urval i en dynamisk lista kan antalet utvalda poster vara enormt (till exempel över flera år). Som ett resultat kan varje uppdatering av resultaten ta tio (!!!) sekunder. Därför är det vettigt att bara beräkna resultaten om urvalet har fastställts. Dessa villkor installeras i en testkonfiguration.

Dessutom kan vi bara beräkna summan och begäran på serversidan. Därför måste du närma dig servern på allvar, eftersom proceduren för att uppdatera summorna kan utföras mycket ofta. Föreställ dig en kassakvittojournal i en branschorganisation, där upp till 5 kvitton kan matas in per minut och upp till 300 kvitton per timme. Varje gång ett dokument skrivs kommer totalsummorna att uppdateras. Därför skulle det vara rimligt att minska den överförda trafiken genom att använda procedurer utanför sammanhanget.

Följande skärmdump visar programkod anropar en serverfunktion utanför sammanhanget som returnerar summor.

Den första parametern skickar det dynamiska listvalet, den andra är en struktur av typen "SelectionFieldNameSelectionFieldValueType". Observera att den första parametern i funktionen erhålls som sitt eget värde. Jag kan inte säga exakt varför, men om du skickar urvalet som en länk ger plattformen ett felmeddelande som säger att urvalet inte kan ändras. Felet kringgicks endast på detta sätt.->

Notera: användningen av procedurer utanför sammanhanget gör att du kan minska storleken på överförd trafik med flera gånger, eftersom formulärdata inte överförs till servern, till skillnad från kontextkänsliga serverprocedurer ("&OnServer"-direktivet).

Slutsats

Avslutningsvis kommer jag att säga att detta tillvägagångssätt för att beräkna totaler i en dynamisk lista är felaktigt ur utvecklingsmetodiksynpunkt. Det skulle vara korrekt att få summan av register. Till exempel, i checkjournalen, återigen, kan vi få pengarna i det aktuella kassaregistret antingen från dokument eller från motsvarande ackumuleringsregister.

Dessutom kommer användningen av ackumuleringsregister att låta dig beräkna totaler utan att ta hänsyn till urval, eftersom systemet fungerar optimalt med redan beräknade totaler för tidigare månader.

Ändå sker metoden som beskrivs i artikeln när man löser problem.

Filer för nedladdning:

Äntligen har drömmen för varje sjuåring gått i uppfyllelse. Hur ofta bad användare av program 7.7 om ett normalt urval av objekt? Så att du kan se saldon, priser och ställa in filter. Vi var tvungna att hitta på olika knep, bland annat att skriva externa komponenter. I 1C 8.2 dök dynamiska listor upp. Jag föreslår att vi överväger vad det är och vad de kan ge oss i 1C 8.3.

Låt oss ta några som grund testkonfiguration 1C: "Enterprise Accounting 3.0". Vi kommer inte att göra ett urval nu, vi lägger bara till ett annat urvalsformulär i katalogen "Nomenklatur" och gör det tillfälligt till det huvudsakliga:

När det skapas kommer systemet som standard att lägga till ett tabellfält av typen "Dynamisk lista" i formuläret.

Låt oss gå in på dess egenskaper och se vad som finns där.

Först och främst är vi intresserade av kryssrutan "Anpassad begäran". Detta kommer att avslöja för oss alla fördelarna med en dynamisk lista. Vi kommer att ha möjlighet att skriva vår egen förfrågan, med parametrar. Markera rutan och klicka på länken "Öppna":

Ett fönster öppnas med färdig kod på . För närvarande är alla fält i katalogen "Nomenklatur" helt enkelt listade där.

Få 267 videolektioner på 1C gratis:

Som du kan se finns det en samtalsknapp " " och en kryssruta som gör det möjligt att dynamiskt ändra innehållet i listan. Det vill säga när en annan användare ändrar något i katalogen kommer det också att ändras i vår lista. Dessutom finns det en flik "Inställningar", men det kommer vi att beröra senare.

Anpassad fråga i dynamisk lista

Låt oss först skapa den begäran vi behöver med saldon och priser. Sådär:

Fliken "Inställningar".

Och nu det bästa! Gå till fliken "Inställningar". Och vi ser omedelbart att vi på den första fliken kan göra valfritt val för vilket fält som helst i begäran:

Programmatisk inställning av frågeparametrar i en dynamisk lista 1C 8.3

Glöm inte att vi har två parametrar i begäran: "Period" och "Pristyp". Vi måste skicka in dem i begäran, annars kommer det att uppstå ett fel.

Låt oss skriva dessa parametrar i formulärparametrarna och lägga till följande rader i formulärmodulen:

&OnServerProcedureWhenCreatingOnServer(Failure, StandardProcessing) List. Alternativ. SetParameterValue("Period" , Parametrar. Datum) ; Lista. Alternativ. SetParameterValue("PriceType", Parameters.PriceType) ; Slut på förfarandet

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 från vilken tabell du vill visa data, eller beskriva det resulterande urvalet i ett frågespråk.
Mekanismen är baserad på ett datasammansättningssystem och ger möjligheter att sortera, välja, söka, gruppera och villkorligt formatera mottagna data. I det här fallet är datakällan en begäran, som antingen genereras av systemet automatiskt (baserat på angivna data) eller skrivs manuellt av utvecklaren.

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

När du skapar formulärattribut av typen DynamicList en utvecklare kan välja två sätt att skapa en datafråga:
● Genom att specificera huvudtabellen - i det här fallet behöver du bara ange tabellen (Main table-egenskap) från vilken du vill ta emot data, och systemet kommer automatiskt att generera en fråga för data (se den högra delen i Fig. 1).
● Generera en begäran manuellt - för detta måste du ställa in egenskapen Custom request (se den vänstra sidan av fig. 1). Efter detta kommer manuell generering av en begäran att hämta data från infobasen att vara tillgänglig.
En fråga kan hämta data från flera tabeller, så du kan ange en primär tabell. Detta för att den dynamiska listan ska kunna avgöra vilken data som är primär och vilken som är sekundär, 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 inte specificeras, men då
den dynamiska listan kommer inte att tillhandahålla kommandon relaterade till huvudtabellen. Dessutom, i det här fallet (utan att specificera huvudtabellen) kommer effektiviteten att erhålla data med en dynamisk lista att reduceras avsevärt.
För att förbättra prestandan rekommenderas det att alla kopplingar som används i en anpassad fråga endast för att erhålla 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ärden med hjälp av en formulärparameter Urval. För att göra detta är det nödvändigt att namnet på strukturegenskapen som finns i parametern Urval,
sammanföll med 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 urvalsparametern i en dynamisk listform, så läggs ett villkor med alternativet In List till i urvalet, i rätt värde varav en lista med 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ÄLJA
VAL
NÄR Leverans.koefficient = 1 DÅ &Presentation
ANNAT Leverans. Koefficient
SLUT SOM Förhållande
FRÅN

Dessutom, om typen av parametervärde skiljer sig från typen av objektattribut (t.ex. Rekvisita 1 har typ siffra, och parametervärdet är typ Linje), för att visa fältet korrekt måste du uttryckligen casta parametervärdet till önskad typ:

VÄLJA
VAL
NÄR Delivery.Coefficient = 1 DÅ EXPRESS(&Representation AS String(100)) ANNARS Leverans. Koefficient
SLUT SOM Förhållande
FRÅN
Document.Delivery of Products HUR man levererar

Om fältet som valet ställs in är inaktiverat med hjälp av funktionella alternativ, installeras inte val av ett sådant fält, även om urvalsvärdet skickas som formulärparametrar eller urvalsparameterlänkar.
Genom att använda egenskapen Dynamisk dataläsning indikerar du för en dynamisk lista behovet av att läsa data i små portioner
(för mer information om sätt att få data med hjälp av en dynamisk lista och datacache, se nedan). Oavsett detta attribut gäller följande villkor:

● Om det hierarkiska listvyläget är inställt, endast data för den aktuella gruppen och data för alla överordnade element(utan underordnade element).
● 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 om hierarkisk surfning är inställd (Display-egenskapen är inställd på Träd) och den initiala trädvisningen ä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 datahämtning återanvänder en dynamisk lista tidigare skapade temporära tabeller om följande villkor är uppfyllda:
● Listbatchfrågan har inga frågor efter huvudbatchfrågan.
● Sammansättningen av temporära tabeller och fälten i dem är oförändrad från föregående körning av batchbegäran.

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

2. Begränsningar och funktioner

När du ställer in val i en dynamisk lista, kom ihåg att val inte påverkar grupper om visningsläget för den dynamiska listan är Hierarkisk lista eller Träd. Med "grupper" menar vi ett element i en katalog eller plan av karaktäristiska typer vars ThisGroup-egenskap är satt till True.
Kvalifikationer som automatiskt tillämpas av en dynamisk lista på standarddetaljerna Ägare, Förälder, Datum, Period och ThisGroup tillämpas
standardmedel datasammansättningssystem. Urval, som automatiskt tillämpas av en dynamisk lista på nyckelfält, kan tillämpas både med standardhjälp av datasammansättningssystemet och genom att direkt lägga till villkor i förfrågningstexten I till fälten i huvudtabellen. Som ett resultat av tillämpningen av val med hjälp av layoutverktyg kan de tillämpas både i kapslade frågor och i parametrar för virtuella tabeller.

När du utvecklar dynamiska listor rekommenderas det att testa alla dynamiska listor med anpassade frågor. Under verifieringsprocessen bör du se till att om en listfråga innehåller kapslade frågor eller virtuella tabeller och i dessa fält med alias som matchar aliasen för standardinformationen Ägare, Förälder, Datum, Period, Denna grupp eller nyckelfält är tillgängliga för val, då är dessa fält giltiga och motsvarar standarddetaljerna som deras smeknamn matchar. Om så inte är fallet bör du ändra begäran så att de matchar eller
smeknamnet var annorlunda.
Om du väljer att manuellt generera en begäran, införs vissa begränsningar för begäran:
● Användning 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 begäran för att generera en dynamisk lista på ett sådant sätt att det faktiska innehållet i begäran 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.
● Val, sortering och gruppering stöds inte:

  • Genom detaljer tabellformade delar.
  • Visa fält.
  • DataVersion-fältet.
  • Fördefinierat DataName-fält.
  • Fält för typ av kontoplanstabell.
  • Fält Typ av rörelse för ackumuleringsregistertabellen.
  • Fält TypeValues ​​för den karakteristiska typplanstabellen.
  • 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 ViewSubconto<НомерСубконто>Tabeller Rörelser Underkonto till redovisningsregistret.
● Gruppering efter fält som är frågespråksuttryck som innehåller aggregerade funktioner.
● När huvudtabellen är vald har den dynamiska listfrågan följande begränsningar:

  • Anslutningar stöds inte.
  • Sektionen ORDER BY 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 den posten visas. Med andra ord, för att visa ett element i en hierarkisk lista, måste en dynamisk lista också visa alla föräldrar till det elementet upp till toppen av listan. I det här fallet menar vi med toppen av listan antingen
rotelementet för det hierarkiska objektet som visas av en dynamisk lista, eller elementet som är inställt som egenskapen ParentTopLevel för ett formulärtabelltillägg för en dynamisk lista.

Att använda följande tabeller som huvudtabell i en dynamisk lista stöds inte:

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

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

  • rotationsbord;
  • balans tabell;
  • tabell över omsättning och saldon.

● beräkningsregistertabeller:

  • tabell över faktisk giltighetstid;
  • schemadata;
  • grundläggande information.

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

Med andra ord kommer en dynamisk lista med den angivna huvudtabellen att fungera korrekt om, som ett resultat av exekvering av frågan,
specificeras som en datakälla ökar inte antalet rader som erhålls från huvudtabellen (med hänsyn till det pålagda urvalet). Om, som ett resultat av att köra en fråga, antalet rader som erhålls av frågan från huvudtabellen ökar, kommer detta att leda till en kränkning av unikheten hos nyckeln i tabellens poster 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 måste du ta hänsyn till åtkomsträttigheter till detaljerna som visas av listan:
● Data från dynamiska listkolumner som är markerade med egenskapen Använd alltid, men för vilka nuvarande användaren Det finns ingen vyrätt. Tillgång till data för sådana kolumner (med CurrentData-egenskapen och RowData()-metoden)
inte möjligt på kundsidan.
● Om den aktuella användaren inte har rättigheten Visa på ett nyckelfält i en dynamisk lista, resulterar hämtning av data från den dynamiska listan i ett åtkomstfel.
För en dynamisk lista som visar en uppräkningslista finns det inget alternativ att interaktivt anpassa listan.
Sammansättningen av kolumnerna och inställningarna för den dynamiska listan är associerade med frågefälten med hjälp av alias för urvalsfälten. Om ett alias inte uttryckligen anges i en fråga för ett urvalsfält och fältet är ett system, används fältnamnet för den engelska versionen av det inbyggda språket som ett alias.
Den angivna relationen innebär att när man ändrar (eller uttryckligen specificerar ett alias för ett fält för vilket ett automatiskt alias användes)
alias för frågefältet som genererar den dynamiska listdatan, inställningarna för dynamisk listattribut kommer att gå förlorade, formulärelementen "förlorar" de visade detaljerna, de dynamiska listinställningarna blir felaktiga, etc.
Om datakällan för en dynamisk lista är en tabell (vanlig eller virtuell), som låter dig ställa in ett urval per period, då om användaren ställer in visningsperioden i en sådan dynamisk lista (kommando Ställ in datumintervall...),
de angivna periodgränserna kommer att ställas in som urvalsvärden eller virtuella tabellparametrar. Om med hjälp av språkförlängning
frågor för datasammansättningssystemet, namnen på de virtuella tabellparametrarna specificerades uttryckligen - parametrarna med den angivna
namn. Tabeller för vilka det är möjligt att styra perioden för visning eller bearbetning av data:
● registertabeller (huvud- eller virtuella), för vilka det är möjligt att välja efter period (för beräkningsregistret - efter registreringsperiod);
● huvudtabeller över dokument, affärsprocesser och uppgifter;
● huvudtabeller över dokumentjournaler;
● huvudsekvenstabeller, sekvensgränstabeller.
Den dynamiska listfrågeparametern 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 urvalsvärde. Om den dynamiska listan använder en fråga med parametrar, första installationen parametervärden måste köras i OnCreationOnServer-hanteraren.
Tänk på följande när du visar dynamisk listdata:
● När du programmatiskt ändrar egenskaperna för en dynamisk lista fylls inte kommandopanelerna som är kopplade till listan automatiskt i igen.
med denna dynamiska lista.
● Om flera fält är grupperade i en grupp med grupperingsläget i en cell och i de grupperade fälten finns ett fält som visas som en kryssruta, kommer denna kryssruta alltid att visas först i den resulterande cellen (till vänster om text).
I en dynamisk lista, när man bestämmer 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 DET ÄR LÖGN
DÅ 5
ANNAT
&Parameter
SLUTET

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

VAL
NÄR DET ÄR LÖGN
DÅ 5
ANNAT
EXPRESS(&Parameter AS String(100))
SLUTET

Om den godtyckliga texten i en dynamisk listförfrågan använder parametrar i uttrycken för urvalsfälten, bör du uttryckligen ange vilken typ av parametrar som använder 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 orsaka fel.

3. Metoder för att hämta och cachelagra data med en dynamisk lista

När du hämtar data att visa använder en dynamisk lista en av tre metoder:
1. Läsning från databasen utförs i bitar med ett antal dataelement något större än 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 sidor med element cachelagras för varje förälder. Högst 20 sidor med objekt cachelagras per dynamisk lista. Cachning kommer att aktiveras av en dynamisk lista för följande tabeller:
● Urvalskriterier;
● Alla tabeller i redovisningsregistret, förutom huvudtabellen och tabellen MovementsSubconto;
● Alla ackumuleringsregistertabeller, utom huvudtabellen;
● Alla tabeller i informationsregistret, utom huvudtabellen;
● Alla tabeller i beräkningsregistret, utom huvudtabellen;
● Virtuell tabell med uppgifter per artist;
● Tabeller över externa källor utan nycklar;
● Kuber från externa källor.

3. Läsning från databasen utförs i sidor om 1 000 element. Den första delen är lika med 1 sida. Varje efterföljande 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 informationen, desto större läses provet från databasen och blir så småningom 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 Reading 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, katalog, dokumentförteckning, dokumentjournal, plan för karaktäristiktyper, kontoplan, plan för 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, beräkningsregistret, den virtuella tabellen i redovisningsregistret MovementsSubconto:

● Dynamisk läsegenskap:
● Installerad: metod 1 används (beskrivning av metoderna ges ovan).
● Återställ: Metod 2 används (beskrivning av metoder ges ovan).

● Egenskapen Main table innehåller urvalskriteriumtabellen eller uppgiftstabellen efter executor (Tasks By Performer):
● Nyckel som identifierar en tabellrad: Länk.

● Egenskapen Main table anger den virtuella tabellen för informationsregistret SliceFirst eller SliceLast:
● Nyckel som identifierar en tabellrad: RecordKey.
● Egenskapen Dynamisk läsning är inte tillämplig.
● Metod 2 används (beskrivning av metoder ges ovan).

● Egenskapen Main table är inställd på en av virtuella tabeller andra register än de som anges ovan:

● Egenskapen Dynamisk läsning är inte tillämplig.

● Egenskapen Main table är inte specificerad, en godtycklig fråga används:
● Nyckel som identifierar en tabellrad: Nummer.
● Egenskapen Dynamisk läsning är inte tillämplig.
● Metod 3 används (beskrivning av metoder ges ovan).

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

4. Dynamiska listinställningar

Inställningar för egenskapslista - genom att klicka på hyperlänken Öppna öppnas ett formulär för att ställa in visningen av en dynamisk lista. Att sätta upp en lista görs på samma sätt som liknande operationer i ett datasammansättningssystem.


Ris. 2. Villkorlig styling av en dynamisk lista

När du skapar en dynamisk lista i konfigurationen har applikationsutvecklaren möjlighet att göra följande:
● ställ in de fält som du vill sortera efter;
● beskriv valet av data i listan;
● ange villkorliga utseendeinställningar;
● ställ in de fält som du vill gruppera data efter.
Det är vettigt att ställa in sorteringen till utvecklaren om du inte är nöjd med standardsortering installerad av systemet.

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 hantera 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. Den dynamiska listegenskapen Order tillhandahåller snabb åtkomst till egenskapen Settings.Order för den dynamiska listinställningsbyggaren, så följande konstruktioner är likvärdiga:
List.Order och List.SettingsLinker.Settings.Order;
● UserSettings – dessa är inställningar som ändras av användaren i 1C:Enterprise-läge;
● Fasta inställningar – dessa inställningar ställs in från det inbyggda språket. Den här egenskapen innehåller också urvalsvärden som överförs till formuläret med hjälp av dess parametrar. De dynamiska listegenskaperna Selection, Options, Conditional Appearance ger snabb åtkomst till de fasta inställningarna för den dynamiska listinställningsbyggaren. Med andra ord är dessa samtal likvärdiga:
List.Settings Composer.FixedSettings.Selection och List.Selection.
När du skapar de slutliga inställningarna för en dynamisk lista kombineras olika inställningsalternativ enligt följande:
● Om någon typ av inställningar är helt markerade som anpassade, inkluderar de resulterande inställningarna de anpassade inställningarna
(List.ComposerSettings.UserSettings). Dessutom, 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 anpassade inte helt, utan element för element, då:
● Objekt 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 det oacceptabelt att de fasta och användarinställningarna innehåller inställningar med samma namn, till exempel val med samma vänstervärde i villkoret.

Om det finns inställningar i de dynamiska listinställningarna som är inaktiverade med funktionella alternativ, kommer dessa inställningar att tas bort från listan tillgängliga inställningar vid hämtning av dynamisk listdata.
Styrning av vilka inställningar som kommer att vara tillgängliga för användaren och vilka som inte kommer att göras i fönstret för dynamiska listinställningar.


Ris. 3. Kontrollera 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 (normal eller snabb). Den här funktionen är tillgänglig för urval, ordning, gruppering och villkorsanpassning. Om inställningar anges med redigeringsläge Snabbt urval, sedan i egenskapen Custom Settings Group i formulärtabellen som visar den dynamiska listan, måste du ange en tom formulärgrupp där element som är associerade med snabba anpassade inställningar för den dynamiska listan kommer att finnas. 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 det inbyggda språket med metoden CreateCustomSettingsFormItems() för det dynamiska listtillägget.
Det är också möjligt att välja om specifika inställningsobjekt ska placeras i användarinställningarna. Denna funktion är tillgänglig för urval och villkorade designelement (se figur 3).

Om du behöver några speciella inställningar som ska laddas när du öppnar en dynamisk lista kan detta göras på två sätt:
● Använda den dynamiska listformparametern UserSettings. Datan i denna parameter kommer att placeras i användarens dynamiska listinställningar.
● Använda den dynamiska listformen parameterUserSettingsKey. Om du anger denna parameter när du öppnar ett formulär, 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

En dynamisk lista som finns på formuläret ger möjlighet att interaktivt söka i den visade informationen. Sökningen kan utföras med hjälp av följande verktyg: sökfältet, sökdialogrutan, 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
dynamisk lista (från tillgänglig till denna användare) som matchar sökkriterierna.
Det finns tre tabellegenskaper för att styra sökmöjligheter i en dynamisk lista: kontrollerad form, visar en dynamisk lista:
● Söksträngens position – bestämmer positionen för söksträngen. Kan ta följande värden: Auto, Kommandofält, Ingen, Topp, Botten.


Ris. 4. Söksträng i en dynamisk lista

Om värdet för den här egenskapen är inställt på kommandopanelen kommer söksträngen att visas i formulärets kommandopanel (om den dynamiska listan är formulärets huvudattribut) eller i kommandopanelen som är associerad 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 inte att finnas i formuläret och när du börjar skriva söksträng en dialog öppnas.
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.
Gå till sökraden enligt följande:
● Genom att trycka på tangentkombinationen Ctrl+F;
● Mus;
● När du börjar skriva i en dynamisk lista (med hänsyn till värdet på egenskapen SearchOnTyping för den dynamiska listan).
● Visa tillståndsposition – 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ök tillstånd 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 har slutförts eller inte endast 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 äldre ä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) – värde Nej;
● Om egenskapen Kompatibilitetsläge är inställd på Använd inte eller äldre än version 8.3.4 – värde Topp;
● 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 dokument- och journallistor) och sökfrågehistorik (senaste 5 frågorna). Egenskapen kan ha följande värden: Auto, Ingen, Kommandopanel.


Ris. 6. Hantera sökning i en dynamisk lista

Om egenskapen är inställd på Nej, kommer inte sökkontrollknappen 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 äldre ä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) – värde Nej;
● Om egenskapen Kompatibilitetsläge är inställd på Använd inte eller äldre än version 8.3.4 – värdet är Kommandopanelen;
Om det finns flera kommandopaneler på ett formulär, vars kommandokälla är en tabell i det hanterade formuläret (visar dynamisk listdata), kommer sökraden och sökkontrollknappen att finnas i endast en kommandopanel:
● Eller i kommandofältet i själva den dynamiska listan (om den har aktiverat automatisk komplettering)
● Eller i någon av de återstående kommandopanelerna.

Låt oss titta 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 när det gäller prestanda) måste du aktivera fulltextsökning för alla konfigurationsobjekt som kan användas som huvudtabellen i den dynamiska listan. Fulltextsökningen bör också inkludera alla detaljer om konfigurationsobjekt som kan visas i en dynamisk lista och för vilka en sökning kan krävas.
Om ett objekt 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 av fulltextsökning.
● Applikationslösningen måste ha rutinuppgift, som regelbundet uppdaterar sökindexet i fulltext.

● 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 ViewFieldGettingProcessing()-hanteraren för motsvarande objekt.
● För dynamiska listor med en specificerad huvudtabell används fulltextsökning i huvudtabellen. Alla oindexerade länkar från huvudtabellen kommer att läggas till i fulltextsökresultaten. Resultatet av en fulltextsökning efter huvudtabellen används som ett urval baserat på nyckelfält. En fulltextsökning utförs också på fält som visas i listan från andra tabeller (om fältet och konfigurationsobjektet använder fulltextsökning). 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 tillämpa fulltextsökningen.
Detta kan till exempel hända när man söker på en bokstav och ett stort antal rader in informationsbas, som börjar med detta brev.
● Om ett urval med jämförelsetypen Equals används för ett fält i huvudtabellen i en dynamisk lista, 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 partition utförs enligt följande regler:
● Linjen bryts med mellanslag och tabulatortecken som avgränsare.
● Sedan bearbetas varje resulterande fragment:
● Om fragmentet är en datumrepresentation (med eller utan tid) baserat på den aktuella sessionslokalen, är ordet fragmentet.
● 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, har villkoret formen Fältnamn=Värde, där Värde är ett ord som konverterats till Nummertypen. Om casten inte kan utföras kommer fältsökningen inte att utföras.
● Ordet letas upp som en delsträng i den booleska standardrepresentationen som definieras för den aktuella sessionen. Om sökordet hittas i en vy, söker det sedan efter det värde som motsvarar vyn där ordet hittades. I det här fallet använder sökningen inte vyer som anges med egenskapen Format form element.
● För ett fält av typen Datum ser villkoret ut som Fältnamn>=StartofDay(Word) ANDFieldName<=КонецДня(Слово). Если Слово подобно дате, в которой год
indikeras med en eller två siffror, kommer året att reduceras till det aktuella århundradet och detta värde kommer att läggas till sökvillkoret.
● För referensfält görs en sökning på de fält som används för att bilda referensvyn. Sök i vart och ett av dessa fält
utförs enligt reglerna som beskrivs ovan. Sökningen använder inte fält som används för att bilda en anpassad datarepresentation.
Uppsättningen av villkor för varje ord kombineras "OCH".
● För värden med inledande nollor kan du söka antingen strängen med inledande nollor eller strängen som anges utan inledande nollor.
● Om en dynamisk lista visar en lista med dokument eller en dokumenthistorik, visas listvisningsintervallet som du anger också i området för formuläret som är reserverat 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 urvalskriteriet.
● Hittade strängfragment markeras när de visas i tabellen.
● Endast en söksträng stöds för en kolumn. När du lägger till en ny sökfråga för en kolumn som redan genomsöks, kommer sökuttrycket att ersättas i stället för att de två sökfrågorna läggs ihop.
● Om formuläret inte har ett tillägg av formulärelement av formuläret Söksträngsvisning kopplat till tabellen (egenskap för tillägg av formulärelement Source) som visar en dynamisk lista, öppnar du sökdialogrutan genom att trycka på tangentkombinationen Ctrl+F.


Ris. 7. Sök dialog

Om formuläret innehåller ett tillägg av formulärelement av formuläret Söksträngsvisning som är associerat med en tabell (formelementtillägg Source-egenskap) som visar en dynamisk lista, bör du använda kommandot Avancerad sökning för att öppna sökdialogrutan.
● Tänk på följande när du använder sökdialogrutan:
● Om du öppnar sökdialogrutan med ett kortkommando visas värdet för den aktuella cellen på raden Vad ska du söka och värdet för reglaget Hur söker du ställs in på Efter exakt matchning.

● Att öppna sökdialogrutan genom att direkt börja skriva en söksträng i den dynamiska listan leder till att värdet på knappen Hur söker man ställs in på värdet By del av strängen, och den inskrivna texten hamnar i fältet Vad till sökfältet.

6. Få data att visas av en dynamisk lista

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 val och sökningar som tillämpas. Sådana åtgärder inkluderar: bearbeta den visade informationen, till exempel, skicka om valda dokument eller ställa in vissa detaljer för valda objekt, generera en lista över tillgängliga objekt (med design, etc.), till exempel för att skriva ut eller spara till ett kalkylarksdokument.
För att få data som visas av en dynamisk lista bör du använda GetExecutableDataCompositionSchema() och
GetExecutableDataCompositionSettings().
Exempel på att ta emot data:

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

Att få in data i en värdesamling (tabell eller värdelista) görs på samma sätt.
Att erhålla dynamiska listdata på detta sätt har ett antal funktioner som måste beaktas när man utvecklar applikationslösningar:
● Följande tabelldesign stöds inte:
● Omväxlande linjefärger;
● Huvudbild;
● Bild på källaren;
● Sidfots bakgrundsfä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 ett hanterat formulär stöds inte.
● När du beställer en hierarkisk tabell i stigande ordning efter ett fält av typen Länk, placeras alltid poster som innehåller en tom länk först.

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 i hög grad underlättar många tillämpade uppgifter. Det är därför utvecklare måste känna till och kunna hantera detta universella 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 nödvändigtvis måste skriva en förfrågan på 1C-språket, även om denna möjlighet finns och bör användas. Du kan helt enkelt ange tabellen vars information intresserar dig och 1C kommer att generera en enkel fråga oberoende av varandra.

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

Det anpassade frågeschemat är mycket vanligare, eftersom detta ger en utmärkt möjlighet att kombinera och visa en mängd olika data. Oftast används denna mekanism för att återspegla lagersaldon, artikelpriser, kvitton, utgifter eller inköp. Du måste använda den försiktigt, eftersom prestanda kan sjunka för komplexa frågor.

En annan användbar egenskap för en dynamisk lista öppnas när du klickar på inskriptionen "Listinställningar". Den här menyn låter dig göra information mer tillgänglig och begriplig för slutanvändare, även när du använder en standarduppsättning fält. Oavsett om begäran är godtycklig eller inte, kommer du att se fliken "Inställningar", där du kan ange:

  • Dynamiskt listval;
  • Grupper;
  • Sortering;
  • Dekor.

Användningen av parametrar gör dynamiska listor universella och ganska flexibla. Du kan också länka dem till detaljer på ett hanterat formulär, och data kommer att ändras beroende på de parametrar som valts av användaren. Användningen av dessa mekanismer kan förstås och uppskattas genom att överväga exempel på verkliga problem.

Som ett exempel, betrakta uppgiften att återspegla resterna av nomenklaturen på en kontrollerad form. I praktiken förekommer sådana beställningar ganska ofta i olika konfigurationer, och en dynamisk lista är idealisk som ett verktyg. För denna uppgift måste vi använda en anpassad 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 räcker inte tabellen med nomenklaturen, så vi måste tillåta en godtycklig fråga. I den kommer vi att beskriva den vänstra anslutningen av katalogen med listan över poster och saldoregistret och ställa in katalogen som huvudtabell. Detta schema gör det möjligt för användare som arbetar med en dynamisk lista att lägga till eller ändra objekt.



SELECT NomenclatureList.Name AS Namn, GoodsInWarehousesRemainings.Warehouse AS Warehouse, GoodsInWarehousesRemainings.QuantityRemaining AS QuantityRemaining FROM Directory.Nomenclature AS NomenclatureList VÄNSTER ANSLUTNING RegisterAccumulations.GoodsInWarehouses,ASCurrents. ing software NomenclatureList.Link = ProductsInWarehousesRemainings.Nomenclature WHERE

Eftersom vår begäran använde parametern "CurrentDate", måste vi ställa in dess värde innan vi använder bearbetning. För att göra detta, i formulärmodulen i "When CreatedOnServer"-proceduren, med ett standardkommando, tilldela den funktionen "CurrentSessionDate". Vi behöver också visa den dynamiska listan på kontrollformuläret och ändra ordningen på fälten för tydlighetens skull. Dra attributet "Nomenclature Remaining" till formulärelementen (övre vänstra delen) och använd de blå pilarna för att ändra ordningen på fälten i tabellen i formuläret.

&På serverproceduren när den skapas på servern (fel, standardbearbetning) nomenklatur kvar. Parametrar. Ställ in ParameterValue("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å saldon, skapa poster och grupper och söka. Ofta ber kunderna att få lägga till möjligheten att välja datum då de kommer att se saldon. I fallet med ett formulär med en dynamisk lista uppnås detta genom ett extra fält och inställning av parametrar med hjälp av det.

Lägg till attributet "DateRemaining" av typen "Date" och överför det till formulärelementen. I fälthändelserna skapar vi händelsen "OnChange" och skriver koden för att ställa in parametern "CurrentDate" som används i den dynamiska begäran. Så att när användaren öppnar formuläret omedelbart förstår vilket datum han ser saldona, kommer vi att göra små ändringar i proceduren "When CreatedOnServer".



&OnServerProcedureWhenCreatingOnServer(Failure, StandardProcessing)RemainingDate = CurrentSessionDate(); Objekt Remains.Parameters.SetParameterValue("CurrentDate", RemainingDate); Slut på procedur &På klienten Procedur Återstående DateWhenChanged(Element)Nomenclature Remaining.Parameters.SetParameterValue("CurrentDate",RemainingDate); Slut på förfarandet

Som ett resultat kan vårt Dynamic List-formulär spegla saldon från vilket datum som helst.

Vi har bara övervägt 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 den finns oftast i typiska konfigurationer i hanterade former:

  1. Urval;
  2. Listor.

För att få en dynamisk lista och dess begäran i standardhanterade formulär måste utvecklaren öppna det önskade formuläret i konfiguratorn. I detaljavsnittet hittar du detaljerna med datatypen "DynamicList" (oftast är den markerad i fetstil). Dess egenskaper innehåller förfrågningstext, urval och andra inställningar.