Finn et element i listen over verdier 1c. Universell samlingsstruktur

Hva handler denne artikkelen om?

Denne artikkelen fortsetter serien med artikler "De første trinnene i 1C-utvikling." Den dekker prinsipper for å jobbe med universelle samlinger. Etter å ha lest artikkelen vil du lære:

  • Hva er universelle samlinger, og når og i hvilke tilfeller bør de brukes?
  • Hva har alle universelle samlinger til felles? Hvilke teknikker kan du bruke for å jobbe med dem alle?
  • Hva er en array, hvordan og når skal den brukes? Hvilke metoder har han?
  • Hvorfor bruke en struktur? Hvordan er det forskjellig fra en matrise?
  • Når bør du bruke en verdiliste? Hvordan vises det på skjemaet?
  • Samsvar – hva er det og når skal det brukes? Hva er fordelene med struktur?
  • Hva brukes verditabellen til? Hvordan beskrive dens struktur? Hvordan legge til/fjerne linjer? Hvordan vises det på skjemaet?
  • Verditre - hva brukes det til? Hvordan fylle ut og vise skjemaet? Hvordan jobbe med det?

Anvendbarhet

Artikkelen diskuterer 1C:Enterprise 8.3-plattformen til den nåværende utgaven.

Hvordan jobbe med universelle samlinger i 1C

En samling av verdier er en beholder som vanligvis kan inneholde et hvilket som helst antall elementer. Imidlertid er det ofte ingen strenge begrensninger på datatypen.

Du kan legge til verdier til en generisk samling. Alle verdier i samlingen kan krysses. Disse samlingene brukes hovedsakelig til en eller annen form for behandling i algoritmer. De. Dette er noen dynamiske strukturer som eksisterer mens algoritmen kjører.

Det er viktig å forstå at samlinger ikke lagres i en database (vi snakker ikke om datatypen Value Store, som kan lagre nesten alle typer data).

Eksistere forskjellige typer universelle samlinger: Array, Structure, Matching, Fixed Array, Value Table, Tabelldel etc. Men alle samlinger har lignende oppførsel.

En samling kan opprettes som et resultat av operasjonen av en funksjon (funksjonen returnerer en universell samling som en verdi).

Du kan hente en ny samling manuelt ved å ringe konstruktøren og opprette en forekomst av klassen.

For eksempel: OurArray = New Array;

Konstruktørene for mange generiske samlinger er parameterisert.

Så, i konstruktøren for Du kan angi antall medlemmer i de tilsvarende dimensjonene. De. du kan umiddelbart erklære multidimensjonal .

Den tilsvarende beskrivelsen av konstruktøren er i syntaksassistenten.

Ved å bruke konstruktørparametere kan du dermed umiddelbart angi ønsket oppførsel av dette objektet.

Men parametrene er valgfrie; utvikleren kan ikke angi dem og videre definere oppførselen til Arrayen slik han finner passende.

Nesten enhver universell samling kan opprettes ved hjelp av en konstruktør (unntaket er tabelldeler, som fungerer som konfigurasjonsobjekter).

For universelle samlinger er det vanlige begreper som indeks og tall. Hvert element i samlingen har en indeks. I dette tilfellet starter indeksen fra null.

For å få tilgang til et element OurArray, kan du bruke indekstilgang; for dette er indeksen angitt i hakeparenteser.

For eksempel, OurArray. Vær oppmerksom på at i dette tilfellet returnerer systemet Array-elementet med indeks 3, og i rekkefølge er dette det fjerde elementet i Arrayen.

For noen samlinger er det også konseptet med et linjenummer. Linjenummeret begynner med en. For eksempel, for tabelldelen er det en egenskap som radnummer. Det er viktig å huske på at hvis vi kjenner linjenummeret og ønsker å få tilgang til det etter indeks, bør vi bruke en verdi en mindre enn linjenummeret som indeks.

Konseptet med linjenummer finnes ikke i alle samlinger, men hovedsakelig i de som kan vises i brukergrensesnittet.

Alle samlinger bruker samlingselementgjennomgang. Bypass er mulig på to måter: syklus for Og syklus For hver av.

Metodene som gjelder for de fleste generiske samlinger er Count, Index, Add, Insert, Delete og Find.

Count er en funksjon som returnerer antall elementer i en samling. Den kan brukes før en syklus Til, som vist på figuren.

Indeksmetoden finnes ikke for alle samlinger, men bare for de som kan referere til elementene. Et eksempel er Verditabell.

Verditabell– dette er en spesifikk samling av rader; rader kan inneholde forskjellige kolonner med forskjellige typer verdier.

Hver linje representerer en uavhengig enhet. Du kan få en lenke til den; gjennom denne linjen får du tilgang til verdiene til kolonnene i denne linjen.

Indeksmetoden lar deg bestemme hvilken indeks som tilsvarer en gitt rad (det vil si gjeldende plassering av raden i tabellen). Indeksverdier starter på null.

Nesten enhver universell samling har metoder for å legge til nye verdier til en gitt samling. Figuren viser hvordan du fyller en Array med verdier fra 0 til 10 på to måter.

For å legge til et element til Arrayen kan vi bruke metoden Legg til, angi verdien som skal legges til i parentes. I dette tilfellet vil verdien legges til på slutten av listen, dvs. Matrisen vil stadig øke på grunn av den siste posisjonen.

En annen metode som lar deg legge til verdier til en samling er Sett inn. Det er forskjellig fra metoden Legg til ved at du kan spesifisere hvor det tilføyde elementet skal settes inn.

Syntaks: Sett inn (,)

Den første parameteren spesifiserer indeksen som den nye verdien skal settes inn i. De. for eksempel kan vi spesifisere at hver verdi skal settes inn i begynnelsen av listen (andre metode i figuren over).

For å fjerne elementer fra en samling, bruk metoden Slett. Slettmetoden spesifiserer ved indeks hvilket element vi skal slette.

Syntaks: Slett()
Brukseksempel: OurArray.Delete(5);

Det skal bemerkes at for de samlingene der strenger representerer en uavhengig enhet (for eksempel for Verditabeller), kan vi også bruke metoden for å hente indeksen for senere å slette denne raden.

Nesten alle samlinger har en metode for å søke etter en verdi - Finne. Verdien vi ønsker å finne overføres til metoden. Noen samlinger lar deg sette noen begrensninger.

For eksempel i Verditabell du kan spesifisere radene og kolonnene du vil søke i.

Hvis verdien blir funnet, returnerer denne metoden indeksen eller den angitte strengen. Hvis verdien ikke blir funnet, returneres en verdi av typen Udefinert. I forhold til en Array, returnerer Indeks, eller verdi Udefinert.

Brukseksempel: OurVariable = OurArray.Find(8);

Universelle samlinger kan tømmes veldig raskt, dvs. fjerne absolutt alle elementer. Til dette formål brukes metoden Klar(), som fjerner Array-elementer, rader Verditabeller, eller data fra andre samlinger.

Ytterligere metoder for Array

Metode BBorder() returnerer antall elementer minus én. De. hvis vi bruker en løkke Til, så i stedet for Kvantitet-metoden kan vi umiddelbart bruke metoden Grense().

Spesielt kan variabelen QuantityInArray defineres annerledes:

QuantityInArray = OurArray.InBorder();
Når man skal beskrive selve syklusen, bør man ikke trekkes fra denne variabelen.

Sett-metoden lar deg tilordne en verdi til et Array-element etter indeks.

Syntaks: Installere(,)

Eksempel: OurArray.Set(2,8);

Alternativt alternativ: OurArray = 8;

Du kan bruke metoden for en Array , for å lese en verdi ved en indeks uten å bruke hakeparenteser.

Syntaks: Få()

Eksempel: OurVariable = OurArray.Get(2);

Alternativt alternativ: OurVariable = OurArray;

Universell samlingsstruktur

En struktur, som en matrise, kan ha et ubegrenset antall elementer, men innholdet i elementet er forskjellig fra matrisen.

Strukturen er en samling, der hver verdi består av et par. Det første elementet i paret kalles Nøkkel. Det andre elementet i paret er Betydning.

Nøkkel er en streng datatype som beskriver en verdi. For eksempel, Til nøkkelen"Kode" kan tilsvare verdien 113; Til nøkkelen"Navn" som betyr "Vasya". Selve verdien er ikke underlagt en datatypebegrensning.

Strukturen er veldig praktisk å bruke hvis vi ønsker å lage en bestemt liste med parametere. Hvis dette Struktur kalt Vår struktur, så vil vi referere til de to verdiene som følger: OurStructure.Code og OurStructure.Name.

Denne typen tilgang er mye mer praktisk enn om vi definerte alle parameterne i en Array og fikk tilgang til dem ved hjelp av indeks.

Struktur gjør programkoden lesbar (forståelig). Struktur brukes ganske ofte, mye oftere enn Array.

Det brukes til å beskrive visse parametere, som det ofte er ganske mange av i alle algoritmer.

I tillegg brukes strukturen hvis prosedyren og funksjonen inneholder et stort antall beståtte parametere.

Da er det mye mer praktisk å skrive alle parameterne inn i strukturen og sende den videre. De. parametrene for prosedyrer og funksjoner er "pakket".

Separat bør det bemerkes at as Nøkkel Absolutt ingen linje kan vises i strukturen. Visse restriksjoner gjelder.

Nøkkel skal fungere som en identifikator. Dette betyr at i Klyuche det må ikke være mellomrom og det kan ikke starte med et tall.

Akseptabel start Nøkkel med en bokstav eller understrek. Dermed, Nøkkel må tilfredsstille kravene for å opprette identifikatorer.

La oss legge merke til hvordan ellers en struktur skiller seg fra en matrise. Det er en metode i strukturen Sett inn, er det to metoder for innsetting i Array: Sett inn(til en bestemt posisjon) og Legg til(til slutten av listen). I en matrise er alle elementene ordnet.

Struktur er et slags uordnet sett. Dette er grunnen til at det kun er en innsettingsmetode for en struktur.

Verdien settes ikke inn i en bestemt posisjon, men i det angitte settet. En struktur kan ikke nås via indeks, som andre generiske samlinger.

Strukturelementer er kun tilgjengelig med nøkkelnavn. For hver løkke fungerer imidlertid også for strukturen, men du bør ikke stole på rekkefølgen til strukturelementene.

En struktur opprettes på samme måte som andre generiske samlinger ved å bruke New constructor, som spesifiserer datatypen Structure.

Som en matrise kan en strukturs konstruktør ha parametere. De. det er mulig å beskrive selve innholdet i en struktur ved hjelp av en konstruktør.

I motsetning til en Array, hvor du ganske enkelt kan spesifisere antall elementer for alle dimensjoner, kan du i en Structure spesifisere selve innholdet.

For eksempel: OurStructure = Ny struktur ("Kode, navn", 133, "Vasya");

Separert med kommaer, er navnene på tastene først oppført, og deretter, i samme sekvens, verdiene til parameterne.

Det er en metode for å legge til en ny verdi til strukturen Sett inn, som setter inn et nytt par (nøkkel og verdi).

For eksempel: OurStructure.Insert(“Familiemedlemmer”,3);

Strukturen er preget av en annen metode som brukes ganske ofte. Dette er metoden Eiendom.

Ved å bruke denne metoden kan du forstå om det er et element i denne strukturen hvis nøkkel har et slikt og et slikt navn.

Hvis et slikt element eksisterer, vil systemet returnere verdien True, ellers – False.

For eksempel uttrykket OurStructure.Property ("familiemedlemmer") vil være lik verdien True. Denne metoden brukes ganske ofte når man analyserer strukturen.

Som med enhver universell samling, er det mulig å få tilgang til egenskapene til en struktur etter indeks. Men indeksen for strukturen er en strengverdi.

For eksempel: Rapport(OurStructure[“Familiemedlemmer”]);

Vi bør imidlertid ikke glemme at en struktur er et uordnet sett med objekter, og det er grunnen til at tilgang med indeks 0, 1, 2 er uakseptabelt.

Generisk samling Verdiliste

Listeverdier er en lineær liste over elementer av en hvilken som helst datatype.

Hvert element består av flere verdier. Skjematisk kan en liste over verdier representeres som en liste med fire kolonner.

Første kolonne - merke. Den har en boolsk datatype og lar brukeren enten merke av eller fjerne avmerkingsboksene.

Den andre kolonnen er et bilde som på en eller annen måte visuelt kan representere dette elementet, dvs. match denne strengen med et bilde.

Den tredje kolonnen er selve den lagrede verdien, dvs. dette er alle typer data, og det kan være forskjellig i forskjellige linjer.

Fjerde spalte er presentasjonen, d.v.s. dette er en slags strengbeskrivelse av en gitt verdi. Visningen vil bli vist til brukeren når han ser på dette elementet. I dette tilfellet, hvis representasjonen ikke er spesifisert, vil systemet prøve å få representasjoner for elementet i denne posisjonen.

Listeverdier– dette er objektet som brukeren visuelt kan arbeide med. De. Listeverdier kan vises på skjemaet.

Brukeren kan utføre noen handlinger med den. I tillegg, Listeverdier kan utledes uavhengig ved hjelp av metoder, dvs. vises på skjermen i en eller annen gren av algoritmen (med unntak av serverkode), slik at brukeren velger en linje eller krysser av i noen bokser.

Vi finner Listeverdier i sitax-assistenten. Konstruktør Listeverdier ikke parameterisert (du kan ikke angi noen standardverdier).

Det finnes metoder som:

  • Sett inn(,) ;
  • Legg til(,);
  • Mengde();
  • Indeks().

Det finnes også spesielle metoder, f.eks. UnloadValues(). Dette oppretter en matrise som listen over verdier kopieres til. For eksempel:

Array of Elements = Liste over PriceTypes.OutloadValues();

Det er også en omvendt metode:
ListPriceTypes.LoadValues(ArrayItems);

Det finnes søkemetoder:
FinnByValue(); FindByIdentifier().

Det er en kopieringsmetode:
ListCopy = PriceTypeList.Copy();
Denne metoden er ment å gjøre en form for modifikasjon av kopien.

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

Metoder Velg en(,) Og MarkItems() kall opp en modal dialogboks som stopper kjøringen av algoritmen til brukeren lukker vinduet.

For å bruke disse metodene i konfigurasjonsegenskaper Måte å bruke modalitet på må settes til Bruk.

Eksempelkode kalt fra en administrert applikasjonsmodul:

Vis denne koden i brukermodus (modal dialog).

Under Listeverdier brukes som en tilgjengelig datatype for skjemaattributter. Vi oppretter et nytt attributt for behandlingsskjemaet og definerer typen Listeverdier og vis det på skjemaet.

Opprette et nytt team Fyll inn gaver, overfør det til skjemaet og definer en handlingsbehandler for det.

I brukermodus, når du klikker på Fyll ut gaver-knappen i behandlingsskjemaet, vil en utfylt liste vises.

Om ønskelig kan listen redigeres: noen elementer kan legges til, noen kan fjernes.

Allsidig innsamlingsoverholdelse

Denne samlingen er veldig lik Struktur. Akkurat som struktur, er kartlegginger sett med verdier som består av en nøkkel og selve verdien.

Hovedforskjellen er at enhver datatype kan spesifiseres som nøkkelen, så vel som for verdien. Med tanke på denne funksjonen er det nødvendig å få tilgang til samsvarsverdien etter indeks; nøkkelverdien er angitt som indeksverdien.

Nøkkelen kan være en annen datatype enn en streng. Egenskapene og metodene for å jobbe med Compliance er nesten de samme som for Structure.

Compliance Constructor, i motsetning til strukturen, inneholder ikke muligheten til å spesifisere parametere.

Brukseksempel:

Korrespondanse er praktisk å bruke når du trenger å koble sammen to strukturer. For eksempel må hver rad i tabelldelen matches med en rad fra verditabellen.
I dette tilfellet brukes tabellseksjonsraden som Match-tasten og den tilsvarende verdien er indikert.

Ved innsetting av elementer i en samling Match i tillegg til metoden Sett inn(,) En annen måte å sette inn en verdi på er å bruke den vanlige tildelingsoperatøren.

For eksempel: OurMatch = NewMatch;
Match = 999;

De. hvis et element ikke var til stede i samlingen, vil det bli lagt til ved hjelp av oppdragsoperatøren, og hvis det var til stede, vil det bli oppdatert.

Dette er i motsetning til struktur.

Verditabell for universell samling

Verditabell er en tabell med et vilkårlig antall rader og et vilkårlig antall kolonner. Krysset kan lagre verdier av enhver datatype. Om nødvendig kan kolonner skrives inn, det vil si at du kan bestemme i hvilken kolonne hvilken type data som er lagret.

Du kan la kolonnene ikke skrives inn, deretter kan verdiene lagres i én kolonne i forskjellige rader forskjellige typer.

Forskjeller Verditabeller fra en todimensjonal matrise:

  • dette er et objekt som brukeren kan jobbe med (verditabellen kan vises på skjermen, brukeren kan fylle den ut, og de angitte dataene kan deretter leses);
  • bygge indekser for raskt søk;
  • kloning, fylle en hel kolonne med en bestemt verdi, laste opp alle kolonner til en matrise.

Verditabell brukes som en slags informasjonslagringsbuffer. Verditabell returneres og aksepteres som en parameter av mange systemmetoder. Det er mulig å bygge en spørring mot verditabellen.

Så, Verditabell består av et sett med rader og et sett med kolonner. Både rader og kolonner er samlinger.

De. inne i samlingen Verditabell det er to samlinger til. La oss gå til syntaksassistenten og finne Verditabell.

Støttede datatyper: seg selv Verditabell, som består av strenger. Hver rad er representert av en datatype Radtabellverdier, som har sine egne egenskaper og sine egne metoder. Tilgjengelig Samling av tabellkolonnerverdier har også visse egenskaper.

Viktig poeng! Prosedyren som skaper Verditabell, må kompilere &OnServer.

Før du begynner å jobbe med Verditabell, må du bestemme hvilke kolonner den skal inneholde (dvs. opprette dem). Syntaks:

Legg til(,)
(valgfri)
Type: String.
(valgfri)
Type: BeskrivelseTyper
(valgfri)
Type: String.
(valgfri)
Type: Antall.

For eksempel:

For å kalle denne prosedyren bruker vi kommandoen.

I beskrivelsen Verditabeller elementene i samlingen er presise RowsTableValues.

I motsetning til kolonner, som kun består av egenskaper (navn, type, overskrift, bredde), i Radtabellverdier Det er både egenskaper (tilgang ved kolonnenavn) og metoder (du kan få og angi en verdi, arbeid med eiere).

For å legge til en ny rad i tabellen må du heller bruke metoden Legg til(), eller Sett inn(). I det andre tilfellet bør du angi hvilken posisjon den nødvendige linjen skal plasseres.

For å tilordne en verdi til en kolonne, bruker vi en prikk for å få tilgang til kolonnenavnet eller indeksen (ved hjelp av firkantede parenteser).

For fylling Verditabeller Følgende metoder kan brukes:

Klar()– for å fjerne alle rader fra Verditabeller.

Fyllverdier(,)– lar deg fylle alle kolonner eller valgte kolonner med én verdi.
Last inn kolonne(,)– laster en kolonne fra matrisen.
UnloadColumn()– laster ut kolonnen i en matrise.

De to siste metodene er praktiske å bruke når du skal overføre en kolonne fra en verditabell til en annen.

Kopiere(,)– lar deg lage en ny basert på en eksisterende tabell Verditabell, og ikke alle rader og alle kolonner, men bare noen av dem. Returverdi – Verditabell.

Du kan kopiere strukturen Verditabeller. Det finnes en tilsvarende metode for dette CopyColumns(). Vi får en tom en Verditabell med nødvendig struktur.

I Verditabell det finnes en metode Total(). Du kan spesifisere kolonnen der du vil summere de numeriske verdiene. I forhold til den tidligere viste koden i tablået, kan du beregne verdien: TK.Total («Beløp»).

I Verditabell det er mulig å gruppere (skjule) numeriske verdier etter identiske verdier for visse kolonner ved å bruke metoden Kollapse(,).

I forhold til den tidligere viste koden i tablået, kan du beregne verdien: TK.Collapse(“Ukedag”, “Beløp”).

Verditabell kan vises på brukerskjerm slik at du kan utføre alle handlinger med den. Men i motsetning til Listeverdier Du kan ikke bare hente frem en tabell på skjermen fra programkoden.

Å vise Verditabell på skjermen, opprett et skjemaattributt og tilordne en datatype til det Verditabell.

Etter det skal den resulterende tabellen vises på skjemaet.

I skjemamodulen på slutten av den tidligere kompilerte algoritmen (i prosedyren for å lage en verditabell), bør du legge til:
ValueInFormData(TK, Tabell);

Universell samling Verdienes tre

en universell samling som er veldig lik Verditabell. Forskjellen fra en tabell er at radene i treet kan være underordnet hverandre, dvs. et slags hierarki kan dannes.

Dette kan også gjenspeiles på skjermen. Et verditre består eksplisitt av en samling rader og en samling kolonner. Det er to egenskaper i treet: rader og kolonner.

Siden rader kan være underordnet hverandre, kan hver rad ha en overordnet, så vel som dens underordnede rader.

La oss lage den tilsvarende Tree-kommandoen og dens behandlingsprosedyre.

La oss skape der det er en overordnet rad og to underordnede rader.

La oss lage skjemaattributtene DerZn(datatype – Verditre).

For dette attributtet oppretter vi kolonnene År og Måned.

Flytt det tilsvarende elementet DerZn på skjemaet.

På slutten Prosedyrer TreeOnServer() la oss legge til:

ValueInFormData(TreeZn, DerZn);

La oss sjekke hva som skjedde i brukermodus.

Ved hjelp av en knapp Legg til du kan legge til nye linjer. De kan også danne et hierarki.

For å krysse alle elementene i verditreet, må vi bruke rekursjon, dvs. kaller en prosedyre fra seg selv. For eksempel kan behandling av et verditre se slik ut:

Dette avslutter vårt første bekjentskap med universelle samlinger.

I neste artikkel skal vi se på hvilken viktig mekanisme en utvikler kan bruke for å forenkle tilgangen til et katalogelement fra programkode.

Full syntaks (klikk for å utvide)

Listeverdier

Beskrivelse:

En liste over verdier er et objekt som ikke er lagret i databasen, som lar deg bygge dynamiske sett med verdier for å løse grensesnittproblemer og manipulere dem (legge til, redigere, slette elementer, sortere). Den kan fylles med verdier av enhver type, dvs. I en liste kan typene lagrede verdier være forskjellige. Et eksempel på bruk av dette objektet er å organisere utvalget av et spesifikt dokument fra en liste over mulige dokumenter generert ved hjelp av en kompleks algoritme.

Samlingsartikler: ValueListElement

Det er mulig for et objekt å omgå samlingen ved hjelp av operatøren For hver... Fra... Syklus. Traverseringen velger elementene i samlingen.

Det er mulig å få tilgang til et samlingselement ved å bruke [...]-operatøren. Indeksen til elementet sendes som et argument ( nummerering fra 0).

Egenskaper:

Metoder:

Sett inn (indeks, verdi, representasjon, etikett, bilde) Setter inn et nytt element i listen over verdier på posisjonen ved den angitte indeksen.SelectElement (Header, Element) Kaller opp et vindu for interaktivt valg av ett av elementene som er inkludert i listen over verdier. Element- elementet som verdilisten i utgangspunktet skal plasseres til under interaktivt valg. Hvis parameterverdien ikke er et verdilisteelement inkludert i denne listen, vil ikke posisjonering forekomme.Unload Values() Oppretter en matrise og kopierer verdiene til listen over verdielementer inn i den.Legg til (Verdi, Representasjon, Etikett, Bilde) Legger til et nytt element på slutten av listen over verdier.Lastverdier(ArrayValues) Laster inn en liste over verdier med verdiene fra den beståtte matrisen. I dette tilfellet slettes alle tidligere elementer i listen.Fyll ut notater(Merke) Angir et merke for alle elementer i verdilisten.Indeks(Element) Henter indeksen til et element i en liste med verdier. Hvis ikke funnet, returneres -1.Count() Henter antall elementer i listen over verdier.FinnByValue(SearchValue) Søker etter verdien til et element i en liste med verdier. Hvis ingen elementer lagrer en verdi lik søkeverdien, returneres verdien Udefinert. Finn etter ID(Identifier) ​​Henter liste over verdier element etter identifikator. Hvis elementet ikke blir funnet, returneres det Udefinert. MarkItems(Overskrift) Angir eller fjerner merket (interaktivt) for elementene i listen over verdier. Returnerer ekte, hvis "OK"-knappen trykkes i dialogboksen, Å ligge- ellers.Clear() Tømmer listen over verdier, fjerner alle elementer fra den.ShowElementSelection(DescriptionNotificationsOnClosing, Title, Element) Kaller opp et vindu for interaktivt valg av ett av elementene som er inkludert i listen over verdier.ShowMark Items(Beskrivelse av lukkevarsler, topptekst) Designet for interaktivt å angi merketilstander for elementer i verdilisten.Get(Index)Henter verdien etter indeks. Fungerer på samme måte som operatøren.Shift (Element, Offset) Skifter et element i listen over verdier fremover eller bakover med et spesifisert antall posisjoner.Copy() Oppretter en kopi av en liste med verdier.SortByValue(Retning) Sorterer en liste over verdier i stigende eller synkende rekkefølge av verdiene lagret av elementene. Se eksempel nedenfor.SortByView(Retning) Sorterer listen over verdier i stigende eller synkende rekkefølge i alfabetisk rekkefølge av representasjonene av elementene som er inkludert i listen over verdier. Se eksempel nedenfor.Remove (Element) Fjerner et element fra en liste med verdier, hvor Element- indeks for elementet som skal slettes, eller selve elementet.

Designere:

Ny liste over verdier
&OnClient Prosedyre ExecuteCode(Kommando) /// Hvordan lage en liste over verdier i 1s 8.3, 8.2 List = New ValueList; /// Hvordan legge til et element i listen over verdier i 1s 8.3, 8.2 // legg til metodeparametere:// - betydning // - opptreden // - merke (obligatorisk) // - bilde (påkrevd) Liste. Legg til (1980, // elementverdi "Året for Vasyas fødsel"// opptreden ) ; Liste. Legg til(1985, "Året for Yulias fødsel") ; // verdier kan være av forskjellige typer Liste. Add("Polina" , "Barnets navn" ); /// Hvordan sette inn et element i en liste med verdier i 1s 8.3, 8.2 // sett inn i posisjon nr. 2 (elementer er nummerert fra 0) // element med verdi 2010 og representasjon // "Året deres felles datter ble født" Liste. Sett inn(2, 2010, "Året deres felles datter ble født") ; /// Hvordan omgå elementer i listen over verdier i 1s 8.3, 8.2 For hvert element fra listesløyferapport( Element. Representasjon + ": " + String(Element. Verdi) ); EndCycle ; /// Slik sletter du listen over verdier i 1s 8.3, 8.2 Liste. Clear() ; Liste. Add("mandag"); Liste. Add("tirsdag"); Liste. Add("onsdag" ); /// Hvordan finne ut antall elementer i en liste over verdier, samt /// få et listeelement etter indeksen i 1s 8.3, 8.2 // nummerering fra bunnen av For indeks = 0 etter liste. Mengde() - 1 syklusrapport(Liste[Indeks]) ; EndCycle ; /// Hvordan finne et listeelement etter verdien i 1s 8.3, 8.2 ValueTuesday = Liste. FindByValue("tirsdag"); /// Hvordan finne ut indeksen til et element i en liste i 1s 8.3, 8.2 Report(List.Index(ValueTuesday)) ; // 1, siden nummerering starter fra null /// Hvordan sortere en liste etter verdiene i 1s 8.3, 8.2 // var: mandag, tirsdag, onsdag Liste. SortByValue(SortDirection.Descending) ; // ble: onsdag, mandag, tirsdag /// Hvordan fjerne et element fra en liste over verdier i 1s 8.3, 8.2 // fjern det første elementet // parameter: listeelement // eller elementindeks// du kan gjøre denne listen. Slett(Liste[ 0 ]); // eller noe // Liste.Delete(0); /// Hvordan skifte et element i en liste med verdier i 1s 8.3, 8.2 // flytt nullelementet én posisjon fremover // var: mandag tirsdag Liste. Flytt(0, 1); // ble: tirsdag mandag /// Hvordan lage en kopi av en liste i 1s 8 ListCopy = Liste. Copy() ; Farger = NewValueList; Farger. Add("Rød" ); Farger. Add("Grønn" ); Farger. Add("Blå" ); /// Hvordan laste opp listeverdier til en matrise i 1s 8.3, 8.2 ArrayColors = Farger. UnloadValues() ; /// Slik laster du listeverdier fra en matrise i 1s 8.3, 8.2 Farger. LoadValues(ArrayColors) ; Slutt på prosedyre /// Hvordan lage et modellløst utvalg av en verdi fra en liste /// verdier i 1s 8.3, 8.2&Om klientprosedyren Hvordan lage et ikke-ModalValueSelection(Command) Colors = New ValueList; Farger. Add("Rød" ); Farger. Add("Grønn" ); Farger. Add("Blå" ); // prosedyre AfterSelectingElement er definert rett nedenfor AlertAfterElementSelection = New DescriptionAlerts( "AfterElementSelection", ThisObject ) ; Farger. ShowElementSelection( NotificationAfterElementSelection, "Velg din favorittfarge") ; Slutt på prosedyre &På klient-prosedyre etter elementvalg(element, parametere) Eksporter hvis element<>Undefined Then Report(Element.Value) ; Slutt om ; Slutt på prosedyre /// Hvordan lage en modellløs markering av verdier fra en liste /// verdier i 1s 8.3, 8.2&Om klientprosedyren Hvordan lage en ikke-modal merking av verdier (kommando) farger = ny liste over verdier; Farger. Add("Rød" ); Farger. Add("Grønn" ); Farger. Add("Blå" ); // prosedyre AfterMarkingElements er definert rett nedenfor AlertAfterMarkingItems = New DescriptionAlerts( "AfterMarkingItems", ThisObject ) ; Farger. ShowTagItems( AlertAfterTagItems, "Velg favorittfargene dine") ; Farger. FillNotes(True) ; Slutt på prosedyre &på klientprosedyre etter merking av elementer (elementer, parametre) Eksporter hvis elementer<>Udefinert Deretter for hver farge fra elementer, syklus hvis farge. Merk deretter Rapporter (Farge.Verdi) ; Slutt om ; EndCycle ; Slutt om ; Slutt på prosedyre /// Hvordan gjøre et modalt utvalg av en verdi fra en liste i 1s 8.3, 8.2&Om klientprosedyren Hvordan lage en ModalValueSelection(Command) Colors = New ValueList; Farger. Add("Rød" ); Farger. Add("Grønn" ); Farger. Add("Blå" ); SelectColor = Farger. Velg en( "Velg din favorittfarge") ; Hvis Velg farge<>Undefined Then Report(SelectColor.Value) ; Slutt om ; Slutt på prosedyre /// Slik merker du verdier fra en liste /// verdier i 1s 8.3, 8.2&Om klientprosedyren Hvordan lage et modalt verdimerke (kommando) Farger = Ny liste over verdier; Farger. Add("Rød" ); Farger. Add("Grønn" ); Farger. Add("Blå" ); Hvis farger. MarkItems( "Velg favorittfargene dine") Deretter for hver farge fra fargesyklus hvis farge. Merk deretter Rapporter (Farge.Verdi) ; Slutt om ; EndCycle ; Slutt om ; // dette er hvordan du kan sette alle merkene på en gang // liste til en bestemt verdi Farger. FillNotes(True) ; Slutt på prosedyre /// Last ned og kjør disse eksemplene på datamaskinen din

I denne enheten vil vi bli kjent med en ny datatype av 1C-språket, som kalles Listeverdier.

Liste over verdier er en rekke, men med store muligheter. Og i så fall er det også en samling av data, og du kan legge inn et sett med tall i den:

// opprettet en liste over verdier

List.Add(23);

Så langt ser alt mye ut som en array, gjør det ikke? Men la oss gå videre. For å nå vise disse tallene til brukeren, skriver vi:

// gå gjennom hvert element i listen For hvert element fra liste Loop Report(Element.Value);

// vis verdien av elementet EndCycle;

Og her er den første forskjellen. Elementene i en vanlig matrise er tallene i seg selv. Og tilgang til gjeldende verdi av et element Liste vi bruker alternativet Betydning, ved hjelp av konstruksjonen Element. Betydning.

La oss se på noen tilleggsfunksjoner Verdier.

Kan sortere

For eksempel kan vi enkelt sortere en liste med verdier. Listen kan gjøre dette selv:

List.SortByValue(SortDirection.Age); Når det gjelder en vanlig matrise, må vi implementere en av sorteringsalgoritmene (for eksempel "boble").

Kan søke

Listen over verdier kan søke etter elementene på egen hånd. La oss si at vi ønsker å finne ut om et nummer angitt av brukeren er til stede i listen vår:

EnterNumber(Tall); // skrev inn et tall fra brukeren FoundElement = List. FinnByValue(Tall);

If FoundItem = Undefined Then OpenValue("Number " + Number + " ikke funnet i listen!"); Ellers

OpenValue("Number " + Number + " er i listen. Her er det:" + FoundElement.Value);

slutt om; Listeverdier

Støtter innsetting og sletting

En liste med verdier, som en matrise, støtter innsetting og fjerning av elementer:

Liste. Sett inn(0, 1000);

// sett inn tusen helt i begynnelsen av listen List.Delete(O); // og fjern den umiddelbart fra listelisten. Insert(List.Quantity(), 13);

// sett inn 13 på slutten av listen Report(List[List.Quantity() - 1]);

// vis det siste elementet i listen (13)

Støtter firkantede braketter

Som du allerede har forstått, starter nummereringen av listeelementer også fra null, og vi kan få tilgang til ethvert element ved å bruke indeksen ved hjelp av firkantede parenteser:

Rapport(Liste.Verdi); // vis det andre elementet i listen. Dermed kan vi gå gjennom alle elementene i listen slik:

For A = 0 Etter List.Quantity() - 1 Loop Report(List[A].Value);

EndCycle;

Kan lage en kopi av seg selv

Listen over verdier har bare en flott funksjon - den kan lage en kopi av seg selv:

ListCopy = List.Copy();

// laget en kopi av listen // nå kan vi trygt endre kopien av listen // mens den opprinnelige listen ikke vil endre kopien av listen. Verdi = 123456;

Kan bli til en matrise

Og til slutt kan du enkelt dumpe alle elementene i listen inn i en matrise når som helst:

ArrayNumbers = Liste. UnloadValues();

// dumpet inn i en matrise

For A = 0 Av ArrayNumber.Quantity() - 1 syklus

Rapport(ArrayNumbers[A]); // trenger ikke å spesifisere // alternativ Verdi

EndCycle;

For å øve og konsolidere materialet til denne enheten, anbefales det å fullføre følgende oppgave.

Det er nødvendig å legge inn 5 tall fra brukeren, finne de største og minste av dem og vise dem til brukeren. Løsningen må bruke en verdiliste.

Løsning

List = New ValueList;

// opprettet en liste med verdier For A = 1 til 5 syklusnummer = 0;

EnterNumber(Tall); // skriv inn et tall fra brukeren List.Add(Number); // og legg den til listen EndCycle; // og så videre 5 ganger

// sorter listen over tall

Liste. Sort ByVerdi(SortDirection.Age);

// etter sortering er det første elementet i listen // det minste elementet, og det siste er det største OpenValue("Minste element" + Liste +

", og den største " + Liste[List.Quantity() - 1]);




Topp