Hitta ett element i värdelistan 1c. Universell samlingsstruktur

Vad handlar den här artikeln om?

Den här artikeln fortsätter serien med artiklar "Första stegen i 1C-utveckling." Den täcker principer för att arbeta med universella samlingar. Efter att ha läst artikeln kommer du att lära dig:

  • Vad är universella samlingar, och när och i vilka fall ska de användas?
  • Vad har alla universella samlingar gemensamt? Vilka tekniker kan du använda för att arbeta med dem alla?
  • Vad är en array, hur och när ska den användas? Vilka metoder har han?
  • Varför använda en struktur? Hur skiljer den sig från en array?
  • När ska man använda en värdelista? Hur visar man det på formuläret?
  • Efterlevnad – vad är det och när ska det användas? Vilka är fördelarna med strukturen?
  • Vad används värdetabellen till? Hur ska man beskriva dess struktur? Hur lägger man till/tar bort rader? Hur visar man det på formuläret?
  • Värdeträd - vad används det till? Hur fyller man i och visar formuläret? Hur arbetar man med det?

Tillämplighet

Artikeln diskuterar 1C:Enterprise 8.3-plattformen i den nuvarande utgåvan.

Hur man arbetar med universella samlingar i 1C

En samling värden är en behållare som vanligtvis kan innehålla hur många element som helst. Det finns dock ofta inga strikta begränsningar för datatypen.

Du kan lägga till värden till en generisk samling. Alla värden i samlingen kan passeras. Dessa samlingar används främst för någon form av bearbetning i algoritmer. De där. Det här är några dynamiska strukturer som existerar medan algoritmen körs.

Det är viktigt att förstå att samlingar inte lagras i en databas (vi pratar inte om datatypen Value Store, som kan lagra nästan alla typer av data).

Existera olika sorter universella samlingar: Array, Structure, Matching, Fixed Array, Value Table, Tabelldel etc. Men alla samlingar har liknande beteende.

En samling kan skapas som ett resultat av driften av en funktion (funktionen returnerar en universell samling som ett värde).

Du kan få en ny samling manuellt genom att anropa konstruktorn och skapa en instans av klassen.

Till exempel: OurArray = New Array;

Konstruktörerna för många generiska samlingar är parametriserade.

Så, i konstruktören för Du kan ange antalet medlemmar i motsvarande dimensioner. De där. du kan omedelbart förklara flerdimensionell .

Motsvarande beskrivning av konstruktorn finns i syntaxassistenten.

Med hjälp av konstruktorparametrar kan du alltså omedelbart ställa in önskat beteende av detta föremål.

Men parametrarna är valfria; utvecklaren kan inte ställa in dem och ytterligare definiera Arrayens beteende som han tycker är lämpligt.

Nästan vilken universell samling som helst kan skapas med en konstruktor (undantaget är tabelldelar, som fungerar som konfigurationsobjekt).

För universella samlingar finns vanliga begrepp som index och nummer. Varje element i samlingen har ett index. I det här fallet börjar indexet från noll.

För att komma åt ett element OurArray, kan du använda indexåtkomst, för detta anges indexet inom hakparenteser.

Till exempel, OurArray. Observera att i det här fallet returnerar systemet Array-elementet med index 3, och i ordning är detta det fjärde elementet i Arrayen.

För vissa samlingar finns också konceptet med ett radnummer. Radnumret börjar med ett. Till exempel, för tabelldelen finns det en sådan egenskap som radnummer. Det är viktigt att komma ihåg att om vi känner till radnumret och vill komma åt det via index, så ska vi använda ett värde ett mindre än radnumret som index.

Konceptet med ett radnummer finns inte i alla samlingar, utan främst i de som kan visas i användargränssnittet.

Alla samlingar använder samlingselementtraversal. Bypass är möjligt på två sätt: cykla för Och cykel För var och en av.

De metoder som gäller för de flesta generiska samlingar är Räkna, Index, Lägg till, Infoga, Ta bort och Sök.

Count är en funktion som returnerar antalet element i en samling. Den kan användas före en cykel För, som visas i figuren.

Indexmetoden finns inte för alla samlingar, utan endast för de vars element kan refereras. Ett exempel är Värdetabell.

Värdetabell– detta är en specifik samling rader; rader kan innehålla olika kolumner med olika typer av värden.

Varje rad representerar en oberoende enhet. Du kan få en länk till den; genom den här raden kan du komma åt värdena för kolumnerna på den här raden.

Indexmetoden låter dig bestämma vilket index som motsvarar en given rad (det vill säga den aktuella positionen för raden i tabellen). Indexvärden börjar på noll.

Nästan alla universella samlingar har metoder för att lägga till nya värden till en given samling. Figuren visar hur man fyller en Array med värden från 0 till 10 på två sätt.

För att lägga till ett element till Arrayen kan vi använda metoden Lägg till, ange värdet som ska läggas till inom parentes. I detta fall kommer värdet att läggas till i slutet av listan, dvs. Arrayen kommer ständigt att öka på grund av den sista positionen.

En annan metod som låter dig lägga till värden till en samling är Föra in. Det skiljer sig från metoden Lägg till genom att du kan ange var det tillagda elementet ska infogas.

Syntax: Föra in (,)

Den första parametern anger indexet i vilket det nya värdet ska infogas. De där. till exempel kan vi ange att varje värde ska infogas i början av listan (andra metoden i figuren ovan).

Använd metoden för att ta bort element från en samling Radera. Delete-metoden anger genom index vilket element vi ska ta bort.

Syntax: Radera()
Användningsexempel: OurArray.Delete(5);

Det bör noteras att för de samlingar där strängar representerar en oberoende enhet (till exempel för Värdetabeller), kan vi också använda metoden för att hämta indexet för att senare ta bort den här raden.

Nästan alla samlingar har en metod för att söka efter ett värde - Hitta. Värdet vi vill hitta skickas till metoden. Vissa samlingar låter dig ställa in vissa begränsningar.

Till exempel i Värdetabell du kan ange i vilka rader och kolumner du vill söka.

Om värdet hittas returnerar den här metoden indexet eller den angivna strängen. Om värdet inte hittas returneras ett värde av typen Odefinierad. I förhållande till en Array, returnerar Index, eller värde Odefinierad.

Användningsexempel: OurVariable = OurArray.Find(8);

Universella samlingar kan rensas mycket snabbt, d.v.s. ta bort absolut alla element. För detta ändamål används metoden Klar(), som tar bort Array-element, rader Värdetabeller, eller data från andra samlingar.

Ytterligare metoder för Array

Metod BBorder() returnerar antalet element minus ett. De där. om vi använder en slinga För, då istället för Kvantitetsmetoden kan vi omedelbart använda metoden Gräns().

Speciellt kan variabeln QuantityInArray definieras annorlunda:

QuantityInArray = OurArray.InBorder();
Då, när man beskriver själva cykeln, bör man inte subtraheras från denna variabel.

Med Set-metoden kan du tilldela ett värde till ett Array-element efter index.

Syntax: Installera(,)

Exempel: OurArray.Set(2,8);

Alternativt alternativ: OurArray = 8;

Du kan använda metoden för en Array Skaffa sig, för att läsa ett värde vid ett index utan att använda hakparenteser.

Syntax: Skaffa sig()

Exempel: OurVariable = OurArray.Get(2);

Alternativt alternativ: OurVariable = OurArray;

Universell samlingsstruktur

En struktur, som en Array, kan ha ett obegränsat antal element, men innehållet i elementet skiljer sig från Arrayen.

Strukturen är en samling, vars värde består av ett par. Det första elementet i paret kallas Nyckel. Det andra elementet i paret är Menande.

Nyckelär en strikt strängdatatyp som beskriver ett värde. Till exempel, Till nyckeln"Kod" kan motsvara värdet 113; Till nyckeln"Namn" betyder "Vasya". Själva värdet är inte föremål för en datatypsbegränsning.

Strukturen är väldigt bekväm att använda om vi vill skapa en viss lista med parametrar. Om det här Strukturera kallad Vår struktur, då kommer vi att hänvisa till dess två värden enligt följande: OurStructure.Code och OurStructure.Name.

Den här typen av åtkomst är mycket bekvämare än om vi definierade alla parametrar i en Array och nådde dem via index.

Struktur gör programkoden läsbar (förståelig). Struktur används ganska ofta, mycket oftare än Array.

Den används för att beskriva vissa parametrar, av vilka det ofta finns ett ganska stort antal i alla algoritmer.

Dessutom används strukturen om proceduren och funktionen innehåller ett stort antal godkända parametrar.

Då är det mycket bekvämare att skriva in alla parametrar i strukturen och skicka det vidare. De där. parametrarna för procedurer och funktioner är "packade".

Separat bör det noteras att som Nyckel Absolut inte vilken linje som helst kan visas i strukturen. Vissa restriktioner gäller.

Nyckel bör fungera som en identifierare. Det betyder att i Klyuche det får inte finnas några mellanslag och det får inte börja med ett nummer.

Acceptabel start Nyckel med en bokstav eller understreck. Således, Nyckel måste uppfylla kraven för att skapa identifierare.

Låt oss notera hur annars en struktur skiljer sig från en array. Det finns en metod i strukturen Föra in, det finns två sätt att infoga i Array: Föra in(till en viss position) och Lägg till(till slutet av listan). I en Array är alla element ordnade.

Struktur är en sorts oordnad uppsättning. Det är därför det bara finns en insättningsmetod för en struktur.

Värdet infogas inte vid en specifik position, utan i den angivna uppsättningen. En struktur kan inte nås via index, som andra generiska samlingar.

Strukturelement nås endast med nyckelnamn. För varje loop fungerar dock även för strukturen, men du bör inte lita på ordningen på strukturelementen.

En struktur skapas på samma sätt som andra generiska samlingar genom att använda New constructor, som specificerar datatypen Structure.

Liksom en array kan en strukturs konstruktor ha parametrar. De där. det är möjligt att beskriva själva innehållet i en struktur med hjälp av en konstruktor.

Till skillnad från en Array, där du helt enkelt kan ange antalet element för alla dimensioner, kan du i en Structure specificera själva innehållet.

Till exempel: OurStructure = Ny struktur ("Kod, Namn", 133, "Vasya");

Separerade med kommatecken listas först namnen på nycklarna, och sedan, i samma sekvens, parametrarnas värden.

Det finns en metod för att lägga till ett nytt värde till strukturen Föra in, som infogar ett nytt par (nyckel och värde).

Till exempel: OurStructure.Insert(“FamilyMembers”,3);

Strukturen kännetecknas av en annan metod som används ganska ofta. Detta är metoden Fast egendom.

Med den här metoden kan du förstå om det finns ett element i den här strukturen vars nyckel har ett sådant och ett sådant namn.

Om ett sådant element finns kommer systemet att returnera värdet True, annars – False.

Till exempel uttrycket OurStructure.Property ("familjemedlemmar") kommer att vara lika med värdet True. Denna metod används ganska ofta när man analyserar strukturen.

Som med alla universella samlingar är det möjligt att komma åt egenskaperna för en struktur genom index. Men indexet för strukturen är ett strängvärde.

Till exempel: Report(OurStructure[“Familjemedlemmar”]);

Vi bör dock inte glömma att en struktur är en oordnad uppsättning objekt, varför åtkomst med index 0, 1, 2 är oacceptabelt.

Generisk samling Värdelista

ListVärdenär en linjär lista över element av valfri datatyp.

Varje element består av flera värden. Schematiskt kan en värdelista representeras som en lista med fyra kolumner.

Första kolumnen - Mark. Den har en boolesk datatyp och låter användaren antingen markera eller avmarkera rutorna.

Den andra kolumnen är en bild som på något sätt visuellt kan representera detta element, d.v.s. matcha denna sträng med en bild.

Den tredje kolumnen är själva det lagrade värdet, dvs. detta är vilken typ av data som helst och den kan vara olika i olika rader.

Fjärde kolumnen är presentationen, d.v.s. detta är en slags strängbeskrivning av ett givet värde. Vyn kommer att visas för användaren när han tittar på detta element. I det här fallet, om representationen inte är specificerad, kommer systemet att försöka erhålla representationer för elementet som finns i denna position.

ListVärden– det här är objektet som användaren visuellt kan arbeta med. De där. ListVärden kan visas på formuläret.

Användaren kan utföra vissa åtgärder med den. Förutom, ListVärden kan härledas oberoende med hjälp av metoder, dvs. visas på skärmen i någon gren av algoritmen (med undantag för serverkoden) så att användaren väljer någon rad eller markerar några rutor.

Vi hittar ListVärden i sitaxassistenten. Konstruktör ListVärden inte parametrerad (du kan inte ställa in några standardvärden).

Det finns metoder som:

  • Föra in(,) ;
  • Lägg till(,);
  • Kvantitet();
  • Index().

Det finns också speciella metoder, t.ex. UnloadValues(). Detta skapar en Array till vilken värdelistan kopieras. Till exempel:

Array of Elements = List of PriceTypes.OutloadValues();

Det finns också en omvänd metod:
ListPriceTypes.LoadValues(ArrayItems);

Det finns sökmetoder:
FindByValue(); FindByIdentifier().

Det finns en kopieringsmetod:
ListCopy = PriceTypeList.Copy();
Den här metodenär avsedd att göra någon form av modifiering av kopian.

Det finns metoder:
SortByValue();
SortByView().

Metoder Välj föremål(,) Och MarkItems() anropa en modal dialogruta som stoppar exekveringen av algoritmen tills användaren stänger fönstret.

För att använda dessa metoder i konfigurationsegenskaper Sätt att använda modalitet måste ställas in på Använda sig av.

Exempelkod anropad från en hanterad applikationsmodul:

Visa denna kod i användarläge (modal dialog).

Nedan ListVärden används som en tillgänglig datatyp för formulärattribut. Vi skapar ett nytt attribut för bearbetningsformuläret och definierar dess typ ListVärden och visa det på formuläret.

Skapa ett nytt team Fyll i gåvor, överför det till formuläret och definiera en åtgärdshanterare för det.

I användarläge, när du klickar på knappen Fyll i gåvor i bearbetningsformuläret, visas en komplett lista.

Om så önskas kan listan redigeras: vissa element kan läggas till, vissa kan tas bort.

Mångsidig kollektion

Denna samling är väldigt lik Strukturera. Precis som struktur är mappningar uppsättningar av värden som består av en nyckel och själva värdet.

Den största skillnaden är att vilken datatyp som helst kan anges som nyckeln, såväl som för värdet. Med tanke på denna funktion är det nödvändigt att komma åt matchningsvärdet per index; nyckelvärdet indikeras som indexvärdet.

Nyckeln kan vara en annan datatyp än en sträng. Egenskaperna och metoderna för att arbeta med Compliance är nästan desamma som för Structure.

Compliance Constructor, till skillnad från strukturen, innehåller inte möjligheten att specificera parametrar.

Användningsexempel:

Korrespondens är bekväm att använda när du behöver ansluta två strukturer. Till exempel måste varje rad i tabelldelen matchas med en rad från värdetabellen.
I detta fall används tabellsektionsraden som matchningsnyckel och motsvarande värde anges.

När du infogar element i en samling Matcha utöver metoden Föra in(,) Ett annat sätt att infoga ett värde är att använda den vanliga uppdragsoperatorn.

Till exempel: OurMatch = NewMatch;
Match = 999;

De där. om ett element inte fanns i samlingen kommer det att läggas till med hjälp av uppdragsoperatorn, och om det fanns kommer det att uppdateras.

Detta är i motsats till struktur.

Värdetabell för universell samling

Värdetabellär en tabell med ett godtyckligt antal rader och ett godtyckligt antal kolumner. Korsningen kan lagra värden av vilken datatyp som helst. Vid behov kan kolumner skrivas in, d.v.s. du kan bestämma i vilken kolumn vilken typ av data som lagras.

Du kan lämna kolumnerna oskrivna, sedan kan värden lagras i en kolumn i olika rader olika typer.

Skillnader Värdetabeller från en tvådimensionell array:

  • detta är ett objekt som användaren kan arbeta med (värdetabellen kan visas på skärmen, användaren kan fylla i den och den inmatade informationen kan sedan läsas);
  • bygga index för snabb sökning;
  • kloning, fylla en hel kolumn med ett visst värde, ladda upp alla kolumner till en array.

Värdetabell används som en slags informationslagringsbuffert. Värdetabell returneras och accepteras som en parameter av många systemmetoder. Det är möjligt att bygga en fråga mot värdetabellen.

Så, Värdetabell består av en uppsättning rader och en uppsättning kolumner. Både rader och kolumner är samlingar.

De där. inne i samlingen Värdetabell det finns ytterligare två samlingar. Låt oss vända oss till syntaxassistenten och hitta Värdetabell.

Datatyper som stöds: sig själv Värdetabell, som består av strängar. Varje rad representeras av en datatyp RowTableValues, som har sina egna egenskaper och sina egna metoder. Tillgängliga Samling av tabellkolumnerValues har också vissa egenskaper.

Viktig poäng! Proceduren som skapar Värdetabell, måste kompilera &OnServer.

Innan du börjar arbeta med Värdetabell måste du bestämma vilka kolumner den kommer att innehålla (dvs skapa dem). Syntax:

Lägg till(,)
(frivillig)
Typ: Sträng.
(frivillig)
Typ: BeskrivningTyper
(frivillig)
Typ: Sträng.
(frivillig)
Typ: Antal.

Till exempel:

För att anropa denna procedur använder vi kommandot.

I beskrivning Värdetabeller inslagen i samlingen är precis RowsTableValues.

Till skillnad från kolumner, som endast består av egenskaper (namn, typ, rubrik, bredd), i RowTableValues Det finns både egenskaper (åtkomst via kolumnnamn) och metoder (du kan få och ställa in ett värde, arbeta med ägare).

För att lägga till en ny rad i tabellen måste du använda metoden antingen Lägg till(), eller Föra in(). I det andra fallet bör du ange vid vilken position den önskade linjen ska placeras.

För att tilldela ett värde till en kolumn använder vi en punkt för att komma åt kolumnnamnet eller indexet (med hakparenteser).

För fyllning Värdetabeller Följande metoder kan användas:

Klar()– för att ta bort alla rader från Värdetabeller.

FillValues(,)– låter dig fylla alla kolumner eller valda kolumner med ett värde.
LoadColumn(,)– laddar en kolumn från arrayen.
UnloadColumn()– laddar ur kolumnen i en array.

De två sista metoderna är praktiska att använda när du behöver överföra en kolumn från en värdetabell till en annan.

Kopiera(,)– låter dig skapa en ny baserat på en befintlig tabell Värdetabell, och inte alla rader och alla kolumner, utan bara några av dem. Returvärde - Värdetabell.

Du kan kopiera strukturen Värdetabeller. Det finns en motsvarande metod för detta CopyColumns(). Vi får en tom Värdetabell med den struktur som krävs.

I Värdetabell det finns en metod Total(). Du kan ange i vilken kolumn du vill summera de numeriska värdena. I förhållande till den tidigare visade koden i tablån kan du beräkna värdet: TK.Total (”Belopp”).

I Värdetabell det är möjligt att gruppera (komprimera) numeriska värden med identiska värden för vissa kolumner med metoden Kollaps(,).

I förhållande till den tidigare visade koden i tablån kan du beräkna värdet: TK.Collapse ("Veckodag", "Belopp").

Värdetabell kan visas på användarskärm så att du kan utföra alla åtgärder med den. Men till skillnad från ListVärden Du kan inte bara ta fram en tabell på skärmen från programkoden.

Att visa Värdetabell skapa ett formulärattribut på skärmen och tilldela det en datatyp Värdetabell.

Efter det ska den resulterande tabellen visas på formuläret.

I formulärmodulen i slutet av den tidigare kompilerade algoritmen (i Proceduren för att skapa en värdetabell) bör du lägga till:
ValueInFormData(TK, Tabell);

Universell samling Värdeträd

en universell kollektion som är väldigt lik Värdetabell. Skillnaden mot en tabell är att trädets rader kan vara underordnade varandra, d.v.s. någon sorts hierarki kan bildas.

Detta kan också reflekteras på skärmen. Ett värdeträd består uttryckligen av en samling rader och en samling kolumner. Det finns två egenskaper i trädet: rader och kolumner.

Eftersom rader kan vara underordnade varandra, kan varje rad ha en överordnad, såväl som dess underordnade rader.

Låt oss skapa motsvarande trädkommando och dess bearbetningsprocedur.

Låt oss skapa där det finns en överordnad rad och två underordnade rader.

Låt oss skapa formulärattributen DerZn(datatyp – Värdeträd).

För det här attributet skapar vi kolumnerna År och Månad.

Flytta motsvarande element DerZn på formuläret.

I slutet Procedurer TreeOnServer() låt oss lägga till:

ValueInFormData(TreeZn, DerZn);

Låt oss kolla vad som hände i användarläge.

Med hjälp av en knapp Lägg till du kan lägga till nya rader. De kan också bilda en hierarki.

För att korsa alla element i värdeträdet kommer vi att behöva använda rekursion, dvs. kallar en procedur från sig själv. Bearbetning av ett värdeträd kan till exempel se ut så här:

Detta avslutar vår första bekantskap med universella samlingar.

I nästa artikel kommer vi att titta på vilken viktig mekanism en utvecklare kan använda för att förenkla åtkomsten till ett katalogelement från programkoden.

Full syntax (klicka för att expandera)

ListVärden

Beskrivning:

En värdelista är ett objekt som inte är sparat i databasen, vilket gör att du kan bygga dynamiska uppsättningar värden för att lösa gränssnittsproblem och manipulera dem (lägg till, redigera, ta bort element, sortera). Den kan fyllas med värden av vilken typ som helst, d.v.s. I en lista kan typerna av lagrade värden vara olika. Ett exempel på att använda det här objektet är att organisera valet av ett specifikt dokument från en lista över möjliga dokument som genereras med hjälp av en komplex algoritm.

Samlingsobjekt: ValueListElement

Det är möjligt för ett objekt att kringgå samlingen med hjälp av operatören För varje... Från... Cykel. Genomgången väljer elementen i samlingen.

Det är möjligt att komma åt ett insamlingselement med [...]-operatören. Indexet för elementet skickas som ett argument ( numrering från 0).

Egenskaper:

Metoder:

Infoga (Index, Värde, Representation, Etikett, Bild) Infogar ett nytt element i listan med värden på positionen vid det angivna indexet.SelectElement (Titel, Element) Tar fram ett fönster för att interaktivt välja ett av elementen som ingår i värdelistan. Element- elementet till vilket värdelistan initialt ska placeras under interaktivt val. Om parametervärdet inte är ett värdelistelement som ingår i denna lista, kommer positionering inte att ske.UnloadValues() Skapar en array och kopierar värdena för värdelistans element till den.Lägg till(Värde, Representation, Etikett, Bild)Lägger till ett nytt element i slutet av värdelistan.LoadValues(ArrayValues) Laddar en lista med värden med värdena från den passerade arrayen. I detta fall raderas alla tidigare element i listan.Fyll i anteckningar(Mark) Anger en markering för alla element i värdelistan.Index(Element)Hämtar indexet för ett element i en värdelista. Om den inte hittas returneras -1.Count() Får antalet element i värdelistan.FindByValue(SearchValue) Söker efter värdet på ett element i en värdelista. Om inget element lagrar ett värde som är lika med sökvärdet, returneras värdet Odefinierad. Sök efter ID(Identifier) ​​Hämtar listan över värdeelement efter identifierare. Om elementet inte hittas returneras det Odefinierad. MarkItems(Rubrik) Ställer in eller avmarkerar (interaktivt) objekten i värdelistan. Returnerar Sann, om knappen "OK" trycks ned i dialogrutan, Lögn- annars.Clear() Rensar listan med värden och tar bort alla element från den.ShowElementSelection(DescriptionNotificationsOnClosing, Title, Element) Tar fram ett fönster för att interaktivt välja ett av elementen som ingår i värdelistan.ShowMark objekt(Beskrivning av stängningsvarningar, rubrik) Designad för att interaktivt ställa in markeringslägen för element i värdelistan.Get(Index)Hämtar värdet efter index. Fungerar liknande operatören.Shift (Element, Offset) Flyttar ett element i värdelistan framåt eller bakåt med ett specificerat antal positioner.Copy() Skapar en kopia av en lista med värden.SortByValue(Riktning) Sorterar en lista med värden i stigande eller fallande ordning av de värden som lagras av elementen. Se exempel nedan.SortByView(Riktning) Sorterar listan med värden i stigande eller fallande ordning i alfabetisk ordning av representationerna av de element som ingår i värdelistan. Se exempel nedan.Ta bort (Element) Tar bort ett element från en värdelista, där Element- index för elementet som ska raderas, eller själva elementet.

Designers:

Ny värdelista
&OnClient Procedur ExecuteCode(Command) /// Hur man skapar en lista med värden i 1s 8.3, 8.2 List = New ValueList; /// Hur man lägger till ett element i värdelistan i 1s 8.3, 8.2 // lägg till metodparametrar:// - betydelse // - prestanda // - märke (obligatoriskt) // - bild (obligatoriskt) Lista. Lägg till (1980, // elementvärde "Året för Vasyas födelse"// prestanda); Lista. Lägg till(1985, "Året för Julias födelse") ; // värden kan vara av olika slag Lista. Add("Polina" , "Barnets namn" ); /// Hur man infogar ett element i en lista med värden i 1s 8.3, 8.2 // sätt in i position nr 2 (elementen numreras från 0) // element med värde 2010 och representation // "Året deras gemensamma dotter föddes" Lista. Infoga(2, 2010, "Året som deras gemensamma dotter föddes") ; /// Hur man kringgår element i värdelistan i 1s 8.3, 8.2 För varje element från listan Loop Report( Element. Representation + ": " + String(Element. Value) ); EndCycle ; /// Hur man rensar listan med värden i 1s 8.3, 8.2 Lista. Klar() ; Lista. Add("måndag"); Lista. Add("tisdag"); Lista. Add("onsdag" ); /// Hur man tar reda på antalet element i en lista med värden, samt /// få ett listelement av dess index i 1s 8.3, 8.2 // numrering från början För index = 0 efter lista. Kvantitet() - 1 cykelrapport(lista[Index]) ; EndCycle ; /// Hur man hittar ett listelement efter dess värde i 1s 8.3, 8.2 ValueTuesday = Lista. FindByValue("Tisdag"); /// Hur man tar reda på indexet för ett element i en lista i 1s 8.3, 8.2 Report(List.Index(ValueTuesday)); // 1, eftersom numrering börjar från noll /// Hur man sorterar en lista efter dess värden i 1s 8.3, 8.2 // var: måndag, tisdag, onsdag Lista. SortByValue(SortDirection.Descending) ; // blev: onsdag, måndag, tisdag /// Hur man tar bort ett element från en lista med värden i 1s 8.3, 8.2 // ta bort det första elementet // parameter: listelement // eller elementindex// du kan göra den här listan. Delete(List[ 0 ]) ; // eller så // List.Delete(0); /// Hur man flyttar ett element i en värdelista i 1s 8.3, 8.2 // flytta nollelementet en position framåt // var: Måndag tisdag Lista. Flytta(0, 1); // blev: tisdag måndag /// Hur man gör en kopia av en lista i 1s 8 ListCopy = Lista. Copy() ; Färger = NewValueList; Färger. Add("Röd" ); Färger. Add("Grön" ); Färger. Add("Blå" ); /// Hur man laddar upp listvärden till en array i 1s 8.3, 8.2 ArrayColors = Färger. UnloadValues() ; /// Hur man laddar listvärden från en array i 1s 8.3, 8.2 Färger. LoadValues(ArrayColors) ; Slut på procedur /// Hur man gör ett modelllöst urval av ett värde från en lista /// värden i 1s 8.3, 8.2&Om klientproceduren Hur man gör en icke-ModalValueSelection(Command) Colors = New ValueList; Färger. Add("Röd" ); Färger. Add("Grön" ); Färger. Add("Blå" ); // proceduren AfterSelectingElement definieras precis nedan AlertAfterElementSelection = New DescriptionAlerts( "AfterElementSelection", ThisObject ); Färger. ShowElementSelection( NotificationAfterElementSelection, "Välj din favoritfärg"); Slut på procedur &På klient procedur efter elementval (element, parametrar) Exportera om element<>Undefined Then Report(Element.Value) ; EndIf ; Slut på procedur /// Hur man gör en modelllös markering av värden från en lista /// värden i 1s 8.3, 8.2&Om klientproceduren Hur man gör en icke-modal märkning av värden (kommando) Färger = Ny lista över värden; Färger. Add("Röd" ); Färger. Add("Grön" ); Färger. Add("Blå" ); // procedur AfterMarkingElements definieras precis nedan AlertAfterMarkingItems = New DescriptionAlerts( "AfterMarkingItems", ThisObject ); Färger. ShowTagItems( AlertAfterTagItems, "Välj dina favoritfärger"); Färger. FillNotes(True) ; Slut på procedur &på klientprocedur efter märkning av element (element, parametrar) Exportera om element<>Odefinierad Sedan för varje färg från element Cycle If Color. Markera sedan Rapportera (Color.Value) ; EndIf ; EndCycle ; EndIf ; Slut på procedur /// Hur man gör ett modalt val av ett värde från en lista i 1s 8.3, 8.2&Om klientproceduren Hur man gör en ModalValueSelection(Command) Colors = New ValueList; Färger. Add("Röd" ); Färger. Add("Grön" ); Färger. Add("Blå" ); SelectColor = Färger. Välj föremål( "Välj din favoritfärg"); Om Välj Färg<>Undefined Then Report(SelectColor.Value) ; EndIf ; Slut på procedur /// Hur man modalt markerar värden från en lista /// värden i 1s 8.3, 8.2&Om klientproceduren Hur man gör ett modalt värdemärke (kommando) Färger = Ny lista över värden; Färger. Add("Röd" ); Färger. Add("Grön" ); Färger. Add("Blå" ); Om färger. MarkItems( "Välj dina favoritfärger") Sedan för varje färg från färgcykeln om färg. Markera sedan Rapportera (Color.Value) ; EndIf ; EndCycle ; EndIf ; // så här kan du ställa in alla märken på en gång // lista till ett specifikt värde Färger. FillNotes(True) ; Slut på procedur /// Ladda ner och kör dessa exempel på din dator

I denna enhet kommer vi att bekanta oss med en ny datatyp av 1C-språket, som kallas Listvärden.

Värdelistaär en array, men med stor kapacitet. Och i så fall är det också en samling data och du kan lägga in en uppsättning siffror i den:

// skapade en lista med värden

List.Add(23);

Än så länge ser allt mycket ut som en array, eller hur? Men låt oss gå vidare. För att nu visa dessa siffror för användaren skriver vi:

// gå igenom varje element i listan för varje element från listan Loop Report(Element.Value);

// visa värdet för elementet EndCycle;

Och här är den första skillnaden. Elementen i en vanlig array är själva siffrorna. Och tillgång till det aktuella värdet av ett element Lista vi använder alternativet Menande, med hjälp av konstruktionen Element. Menande.

Låt oss titta på några ytterligare funktioner Värderingar.

Kan sortera

Vi kan till exempel enkelt sortera en lista med värden. Listan kan göra detta själv:

List.SortByValue(SortDirection.Age); I fallet med en vanlig array skulle vi behöva implementera en av sorteringsalgoritmerna (till exempel "bubbla").

Kan söka

Värdelistan kan söka efter dess element på egen hand. Låt oss säga att vi vill ta reda på om ett nummer som angetts av användaren finns i vår lista:

AngeNumber(Number); // angav ett nummer från användaren FoundElement = List. FindByValue(Number);

If FoundItem = Undefined Then OpenValue("Number " + Number + " finns inte i listan!"); Annat

OpenValue("Number " + Number + " finns i listan. Här är det:" + FoundElement.Value);

endIf; ListVärden

Stöder insättning och radering

En lista med värden, som en array, stöder infogning och borttagning av element:

Lista. Insert(0, 1000);

// infoga tusen i början av listan List.Delete(O); // och omedelbart ta bort den från listan Lista. Insert(List.Quantity(), 13);

// infoga 13 i slutet av listan Report(List[List.Quantity() - 1]);

// visa det sista elementet i listan (13)

Stöder fyrkantiga konsoler

Som du redan förstått börjar numreringen av listelement också från noll, och vi kan komma åt vilket element som helst genom dess index med hakparenteser:

Rapport(List.Value); // visa det andra elementet i listan. Således kan vi gå igenom alla element i listan så här:

För A = 0 By List.Quantity() - 1 Loop Report(List[A].Value);

EndCycle;

Kan skapa en kopia av sig själv

Värdelistan har bara en fantastisk funktion - den kan skapa en kopia av sig själv:

ListCopy = List.Copy();

// gjorde en kopia av listan // nu kan vi säkert ändra kopian av listan // medan den ursprungliga listan inte kommer att ändra kopian av listan. Värde = 123456;

Kan förvandlas till en array

Och slutligen kan du enkelt dumpa alla element i listan i en array när som helst:

ArrayNumbers = Lista. UnloadValues();

// dumpade i en array

För A = 0 Av ArrayNumber.Quantity() - 1 cykel

Report(ArrayNumbers[A]); // inget behov av att ange // alternativ Värde

EndCycle;

För att öva och konsolidera materialet i den här enheten, rekommenderas att du slutför följande uppgift.

Det är nödvändigt att ange 5 nummer från användaren, hitta den största och minsta av dem och visa dem för användaren. Lösningen måste använda en värdelista.

Lösning

List = New ValueList;

// skapade en lista med värden för A = 1 till 5 cykelnummer = 0;

AngeNumber(Number); // ange ett nummer från användaren List.Add(Number); // och lägg till den i listan EndCycle; // och så vidare 5 gånger

// sortera listan med nummer

Lista. Sortera efterValue(SortDirection.Age);

// efter sortering är det första elementet i listan // det minsta elementet, och det sista är det största OpenValue("Minsta element" + List +

", och den största " + List[List.Quantity() - 1]);




Topp