1s dvodimenzionalni niz. Univerzalna kolekcija Drvo vrijednosti

01.11.2019 Programi

1C niz je jednostavan skup vrijednosti. Možete dodati vrijednosti različitih vrsta u jedan 1C niz. Nakon dodavanja, prisutnost vrijednosti u 1C nizu može se provjeriti pomoću ugrađenog pretraživanja.

Često se koristi niz 1C:
A) Za odabire
B) Da biste spremili popis vrijednosti kako biste ga dalje koristili, na primjer, proslijedite ga kao parametar funkciji/proceduri.

Rad s 1C nizovima

Kreirajmo 1C polje od 2 vrijednosti:
Niz = Novi niz(); //niz bez fiksnog broja vrijednosti

Niz.Dodaj(RNG.SlučajniBroj(0, 1000));
Niz.Dodaj(RNG.SlučajniBroj(0, 1000));

//kruži kroz svaku vrijednost 1C polja, bez obzira koliko ih ima

Izvješće (vrijednost);
EndCycle;

Kreirajmo 1C polje od 10 vrijednosti:
Niz = Novi niz(10); //niz s fiksnim brojem vrijednosti
RNG = NoviGeneratorSlučajnihBrojeva(); //popunit ćemo nasumičnim brojevima

//indeks niza počinje od nule, a ne od jedinice
//10 komada su od 0 do 9
Za Sch = 0 do 9 ciklusa
//pristup nizuNazivNiza[Indeks]
Niz[RNG] = RNG.SlučajniBroj(0, 1000); //nasumični broj od 0 do 1000
EndCycle;

//proći kroz svaku vrijednost niza, bez obzira koliko ih ima
Za svaku vrijednost iz ciklusa polja
Izvješće (vrijednost);
EndCycle;

//napomena - postoji 10 vrijednosti polja, to znači da ih je 10 prema zadanim postavkama i svaka vrijednost je NEDEFINIRANA dok ne postavimo drugu
//ovo ne znači da ne možemo dodati drugu vrijednost, 11e, koristeći ArrayName.Add();

Višedimenzionalni niz

Kreirajmo višedimenzionalni niz 1C 2x2. Višedimenzionalni niz je 1C, što znači da svaka ćelija 1C niza ne sadrži vrijednost, već također sadrži 1C niz.

Višedimenzionalni niz 1C ne mora biti fiksiran. Napravimo višedimenzionalni niz 1C 2x2 bez navođenja fiksnog broja vrijednosti:

Stvaranje 1C polja od nule

Pribavljanje podataka je dugotrajan postupak koji zahtijeva mnogo vremena i resursa. Stoga, ako trebate više puta raditi s primljenim podacima, ima smisla primiti ih jednom i spremiti u 1C polje kako biste dalje radili s već primljenim i spremljenim podacima.

Na primjer, redak verzije programa izgleda ovako: "11.0.9.5" - četiri broja odvojena točkama. Verziju možemo pretvoriti u "računalni" format - niz od četiri numeričke vrijednosti. Zatim možemo dalje međusobno usporediti verzije:

Dobivanje gotovog 1C polja s podacima

Niz 1C može se dobiti iz popisa vrijednosti pomoću metode spList.UnloadValues() i iz tablice vrijednosti pomoću metode tableTable.UnloadColumn().

U donjem primjeru postavljamo upit - odabiremo sve poveznice dokumenata iz baze podataka.

  • RequestResult = Request.Execute() //izvršava zahtjev
  • tzResult = Rezultat upita Upload() //učitava rezultat u tablicu vrijednosti
  • mArray of Links = tzResult.UnloadColumn("ColumnName") //prebacuje stupac tablice u niz

Dobivanje 1C polja od drugih objekata i njegovo korištenje kao odabir u zahtjevu

Kada se na obrascu nalazi popis dokumenata (ili tablica vrijednosti), korisnik može kursorom odabrati jednu liniju. Također možete dopustiti da više redaka bude odabrano u isto vrijeme. Za odabir više redaka (ako forma to ne dopušta) potrebno je držati pritisnutu tipku CTRL ili SHIFT.

Dodajte tablicu vrijednosti debelom klijentskom obrascu i odaberite DocumentList.DocumentName kao njegovu vrstu. U njegovim svojstvima odaberite način odabira – više.

Možemo programski dobiti popis odabranih nizova:

Ako koristite kontrolirani oblik, tada prvo morate dodati atribut obrasca s vrstom DynamicList iu njegovim svojstvima odabrati glavnu tablicu - potreban dokument. Povucite rekvizite na obrazac. U svojstvima elementa obrasca (!) također odaberite – način odabira – višestruko (tako postavljeno prema zadanim postavkama).

Pristup 1C nizu odabranih nizova izgledat će ovako:
Elements.FormAttributeName. Odabrani redovi

O čemu je ovaj članak?

Ovaj članak nastavlja seriju članaka “Prvi koraci u razvoju 1C.” Obuhvaća principe rada s univerzalnim zbirkama. Nakon čitanja članka naučit ćete:

  • Što su univerzalne zbirke te kada iu kojim slučajevima ih treba koristiti?
  • Što je zajedničko svim univerzalnim kolekcijama? Koje tehnike možete koristiti za rad sa svima njima?
  • Što je niz, kako i kada ga koristiti? Kakve metode ima?
  • Zašto koristiti strukturu? Kako se razlikuje od niza?
  • Kada biste trebali koristiti popis vrijednosti? Kako to prikazati na obrascu?
  • Sukladnost – što je to i kada ga koristiti? Koje su prednosti u pogledu strukture?
  • Za što se koristi tablica vrijednosti? Kako opisati njegovu strukturu? Kako dodati/ukloniti linije? Kako to prikazati na obrascu?
  • Stablo vrijednosti - čemu služi? Kako ispuniti i prikazati obrazac? Kako raditi s njim?

Primjenjivost

U članku se govori o platformi 1C:Enterprise 8.3 trenutnog izdanja.

Kako raditi s univerzalnim zbirkama u 1C

Zbirka vrijednosti je spremnik koji obično može sadržavati bilo koji broj elemenata. Međutim, često nema strogih ograničenja za vrstu podataka.

Možete dodati vrijednosti generičkoj zbirci. Sve vrijednosti u kolekciji se mogu proći. Ove zbirke se uglavnom koriste za neku vrstu obrade u algoritmima. Oni. Ovo su neke dinamičke strukture koje postoje dok algoritam radi.

Važno je razumjeti da se zbirke ne pohranjuju u bazu podataka (ne govorimo o vrsti podataka Value Store, koja može pohraniti gotovo sve vrste podataka).

Postoje različite vrste generičkih zbirki: Niz, Struktura, Podudaranje, Fiksni niz, Tablica vrijednosti, Tablični dio itd. Ali sve zbirke imaju slično ponašanje.

Kolekcija se može stvoriti kao rezultat rada funkcije (funkcija vraća univerzalnu kolekciju kao vrijednost).

Novu kolekciju možete dobiti ručno pozivanjem konstruktora i stvaranjem instance klase.

Na primjer: Naš niz = Novi niz;

Konstruktori za mnoge generičke zbirke su parametrizirani.

Dakle, u konstruktoru za Možete odrediti broj članova u odgovarajućim dimenzijama. Oni. možete odmah proglasiti višedimenzionalnim .

Odgovarajući opis konstruktora nalazi se u pomoćniku za sintaksu.

Dakle, koristeći parametre konstruktora, možete odmah postaviti željeno ponašanje zadanog objekta.

Ali parametri su izborni; programer ih ne može postaviti i dalje definirati ponašanje niza kako mu odgovara.

Gotovo svaka univerzalna kolekcija može se stvoriti pomoću konstruktora (iznimka su dijelovi tablice koji djeluju kao konfiguracijski objekti).

Za univerzalne zbirke postoje uobičajeni koncepti kao što su indeks i broj. Svaki element zbirke ima indeks. U ovom slučaju, indeks počinje od nule.

Za pristup elementu Naš niz, možete koristiti pristup indeksu; za to je indeks naveden u uglatim zagradama.

Na primjer, Naš niz. Imajte na umu da u ovom slučaju sustav vraća element niza s indeksom 3, a redom je to četvrti element niza.

Za neke zbirke postoji i koncept broja retka. Broj retka počinje s jedan. Na primjer, za tablični dio postoji takvo svojstvo kao broj retka. Važno je imati na umu da ako znamo broj retka i želimo mu pristupiti putem indeksa, tada bismo trebali koristiti vrijednost jedan manju od broja retka kao indeks.

Koncept broja retka ne postoji u svim zbirkama, već uglavnom u onima koje se mogu prikazati u korisničkom sučelju.

Sve zbirke koriste obilazak elemenata zbirke. Premosnica je moguća na dva načina: ciklus Za I ciklus Za svaki od.

Za većinu generičkih zbirki, metode koje se primjenjuju su brojanje, indeksiranje, dodavanje, umetanje, brisanje i pronalaženje.

Count je funkcija koja vraća broj elemenata u kolekciji. Može se koristiti prije ciklusa Za, kao što je prikazano na slici.

Metoda Index ne postoji za sve zbirke, već samo za one na čije se elemente može referencirati. Primjer je Tablica vrijednosti.

Tablica vrijednosti– ovo je posebna zbirka redaka, retci mogu sadržavati različite stupce s različiti tipovi vrijednosti.

Svaka linija predstavlja neovisnu cjelinu. Možete dobiti vezu do njega; kroz ovaj redak možete pristupiti vrijednostima stupaca u ovom retku.

Metoda indeksa omogućuje vam da odredite koji indeks odgovara danom retku (odnosno trenutnom položaju retka u tablici). Vrijednosti indeksa počinju od nule.

Gotovo svaka univerzalna kolekcija ima metode za dodavanje novih vrijednosti danoj kolekciji. Slika prikazuje kako popuniti polje vrijednostima od 0 do 10 na dva načina.

Za dodavanje elementa u polje možemo koristiti metodu Dodati, označite vrijednost koju želite dodati u zagradama. U tom slučaju vrijednost će biti dodana na kraj popisa, tj. Niz će se stalno povećavati zbog zadnje pozicije.

Druga metoda koja vam omogućuje dodavanje vrijednosti u zbirku je Umetnuti. Razlikuje se od metode Dodati u tome što možete odrediti gdje želite umetnuti dodani element.

Sintaksa: Umetni (,)

Prvi parametar specificira indeks u koji će se umetnuti nova vrijednost. Oni. na primjer, možemo odrediti da se svaka vrijednost umetne na početak popisa (druga metoda na gornjoj slici).

Da biste uklonili elemente iz zbirke, koristite metodu Izbrisati. Metoda Delete indeksom određuje koji ćemo element obrisati.

Sintaksa: Izbrisati()
Primjer upotrebe: Naš niz.Izbriši(5);

Treba napomenuti da za one zbirke gdje nizovi predstavljaju nezavisnu cjelinu (na primjer, for Tablice vrijednosti), također možemo koristiti metodu dobivanja indeksa kako bismo kasnije izbrisali ovaj red.

Gotovo sve zbirke imaju metodu za traženje vrijednosti - Pronaći. Vrijednost koju želimo pronaći prosljeđuje se metodi. Neke vam zbirke dopuštaju postavljanje nekih ograničenja.

Na primjer, u Tablica vrijednosti možete odrediti retke i stupce u kojima želite pretraživati.

Ako je vrijednost pronađena, ova metoda vraća indeks ili navedeni niz. Ako vrijednost nije pronađena, vraća se vrijednost tipa Nedefiniran. U odnosu na niz, vraća Indeks, odnosno vrijednost Nedefiniran.

Primjer upotrebe: NašaVarijabla = NašNiz.Pronađi(8);

Univerzalne zbirke mogu se vrlo brzo očistiti, tj. ukloniti apsolutno sve elemente. U tu svrhu koristi se metoda Čisto(), koji uklanja elemente polja, retke Tablice vrijednosti, ili podatke iz drugih zbirki.

Dodatne metode za Array

metoda BBorder() vraća broj elemenata minus jedan. Oni. ako koristimo petlju Za, tada umjesto metode količine možemo odmah koristiti metodu Granica().

Konkretno, varijabla QuantityInArray mogla bi se definirati drugačije:

KoličinaInArray = NašArray.InBorder();
Zatim, kada se opisuje sam ciklus, ne treba se oduzimati od ove varijable.

Metoda Set omogućuje vam dodjeljivanje vrijednosti elementu niza prema indeksu.

Sintaksa: Instalirati(,)

Primjer: Naš niz.Set(2,8);

Alternativna opcija: Naš niz = 8;

Možete koristiti metodu za polje Dobiti, za čitanje vrijednosti u indeksu bez korištenja uglatih zagrada.

Sintaksa: Dobiti()

Primjer: Naša varijabla = naš niz.Get(2);

Alternativna opcija: Naša varijabla = naš niz;

Univerzalna zbirka Struktura

Struktura, kao i polje, može imati neograničen broj elemenata, ali se sadržaj elementa razlikuje od sadržaja niza.

Struktura je zbirka od kojih se svaka vrijednost sastoji od para. Prvi element para naziva se Ključ. Drugi element para je Značenje.

Ključ je striktni tip podataka niza koji opisuje vrijednost. Na primjer, Do ključa"Kod" može odgovarati vrijednosti 113; Do ključa"Ime" znači "Vasya". Sama vrijednost ne podliježe ograničenju vrste podataka.

Struktura je vrlo zgodna za korištenje ako želimo kreirati određeni popis parametara. Ako ovo Struktura nazvao Naša Struktura, tada ćemo se pozivati ​​na njegove dvije vrijednosti na sljedeći način: OurStructure.Code i OurStructure.Name.

Ova vrsta pristupa mnogo je praktičnija nego da definiramo sve parametre u nizu i pristupamo im indeksom.

Struktura čini programski kod čitljivim (razumljivim). Struktura se koristi prilično često, puno češće nego niz.

Koristi se za opisivanje određenih parametara, kojih je često prilično velik broj u svim algoritmima.

Osim toga, Struktura se koristi ako procedura i funkcija sadrže velik broj proslijeđenih parametara.

Tada je puno prikladnije upisati sve parametre u strukturu i proslijediti je dalje. Oni. “pakiraju” se parametri procedura i funkcija.

Zasebno treba napomenuti da as Ključ U strukturi se ne može pojaviti baš bilo koja linija. Primjenjuju se određena ograničenja.

Ključ treba djelovati kao identifikator. To znači da u Klyuche ne smije biti razmaka i ne može započeti brojem.

Prihvatljiv početak Ključ slovom ili podvlakom. Tako, Ključ mora zadovoljiti zahtjeve za kreiranje identifikatora.

Zabilježimo kako se još struktura razlikuje od niza. Postoji metoda u Strukturi Umetnuti, postoje dvije metode za umetanje u polje: Umetnuti(na određeni položaj) i Dodati(do kraja liste). U polju su svi elementi poredani.

Struktura je vrsta neuređenog skupa. Zbog toga postoji samo metoda umetanja za strukturu.

Vrijednost se ne umeće na određeno mjesto, već u navedeni skup. Strukturi se ne može pristupiti putem indeksa, kao drugim generičkim zbirkama.

Strukturnim elementima pristupa se samo putem ključa. Međutim, For Every petlja također radi za strukturu, ali ne biste se trebali oslanjati na redoslijed elemenata strukture.

Struktura se stvara na isti način kao i druge generičke zbirke korištenjem New konstruktora, navodeći tip podataka Structure.

Kao niz, konstruktor strukture može imati parametre. Oni. moguće je opisati sam sadržaj Strukture pomoću konstruktora.

Za razliku od polja, gdje možete jednostavno odrediti broj elemenata za sve dimenzije, u strukturi možete odrediti sam sadržaj.

Na primjer: OurStructure = Nova struktura (“Šifra, ime”, 133, “Vasja”);

Odvojeni zarezima, prvo se navode nazivi ključeva, a zatim, sukladno tome, u istom nizu, vrijednosti parametara.

Postoji metoda za dodavanje nove vrijednosti strukturi Umetnuti, koji umeće novi par (ključ i vrijednost).

Na primjer: NašaStruktura.Insert(“Članovi obitelji”,3);

Strukturu karakterizira još jedna metoda koja se dosta često koristi. Ovo je metoda Vlasništvo.

Pomoću ove metode možete razumjeti postoji li element u ovoj strukturi čiji ključ ima to i to ime.

Ako takav element postoji, sustav će vratiti vrijednost True, inače – False.

Na primjer, izraz OurStructure.Property ("Članovi obitelji") bit će jednaka vrijednosti True. Ova metoda se često koristi pri analizi strukture.

Kao i kod svake univerzalne zbirke, svojstvima strukture moguće je pristupiti putem indeksa. Ali indeks za strukturu je vrijednost niza.

Na primjer: Izvješće(NašaStruktura[“Članovi obitelji”]);

Međutim, ne treba zaboraviti da je Struktura neuređeni skup objekata, zbog čega je pristup indeksom 0, 1, 2 neprihvatljiv.

Generička zbirka Popis vrijednosti

ListValues je linearna lista elemenata bilo koje vrste podataka.

Svaki element se sastoji od nekoliko vrijednosti. Shematski, popis vrijednosti može se prikazati kao popis s četiri stupca.

Prvi stupac - Ocjena. Ima Booleov tip podataka i omogućuje korisniku da označi ili poništi okvire.

Drugi stupac je slika koja može nekako vizualno prikazati ovaj element, tj. spoji ovaj niz sa slikom.

Treći stupac je sama pohranjena vrijednost, tj. ovo je bilo koja vrsta podataka, i u različite linije može biti drugačije.

Četvrti stupac je prezentacija, tj. ovo je neka vrsta opisa niza dana vrijednost. Pogled će biti prikazan korisniku kada pogleda ovaj element. U ovom slučaju, ako prikaz nije specificiran, sustav će pokušati dobiti prikaze za element koji se nalazi na ovom položaju.

ListValues– to je objekt s kojim korisnik može vizualno raditi. Oni. ListValues može se prikazati na obrascu.

Korisnik može izvršiti neke radnje s njim. Osim, ListValues može se zaključiti neovisno korištenjem metoda, tj. prikazati na ekranu u nekoj grani algoritma (s izuzetkom koda poslužitelja) tako da korisnik odabere neki redak ili označi neke kućice.

Naći ćemo ListValues u pomoćniku sitakse. Konstruktor ListValues nije parametrizirano (ne možete postaviti zadane vrijednosti).

Postoje metode kao što su:

  • Umetni(,) ;
  • Dodati(,);
  • Količina();
  • Indeks().

Postoje i posebne metode, npr. UnloadValues(). Ovo stvara niz u koji se kopira popis vrijednosti. Na primjer:

Niz elemenata = popis vrsta cijena.OutloadValues();

Postoji i obrnuta metoda:
ListPriceTypes.LoadValues(ArrayItems);

Postoje metode pretraživanja:
TražiPoVrijednosti(); FindByIdentifier().

Postoji metoda kopiranja:
ListCopy = PriceTypeList.Copy();
Ova metoda namijenjen je izradi neke vrste izmjene kopije.

Postoje metode:
Poredaj po vrijednosti();
PoredajPoPogledu().

Metode Odaberite stavku(,) I Označi Stavke() pozvati modalni dijaloški okvir koji zaustavlja izvođenje algoritma dok korisnik ne zatvori prozor.

Za korištenje ovih metoda u svojstvima konfiguracije Način korištenja modaliteta mora biti postavljeno na Koristiti.

Primjer koda pozvanog iz modula upravljane aplikacije:

Prikaži ovaj kod u korisničkom načinu rada (modalni dijaloški okvir).

Ispod ListValues koristi se kao dostupna vrsta podataka za atribute obrasca. Kreiramo novi atribut obrasca obrade i definiramo njegov tip ListValues i prikazati ga na obrascu.

Mi stvaramo novi tim Ispunite darove, prenesite ga u obrazac i definirajte rukovatelj akcijom za njega.

U korisničkom načinu rada, kada kliknete gumb Ispuni darove u obrascu za obradu, pojavit će se dovršeni popis.

Po želji se popis može uređivati: neki se elementi mogu dodati, neki ukloniti.

Raznovrsna usklađenost prikupljanja

Ova zbirka je vrlo slična Struktura. Baš kao i struktura, mapiranja su skupovi vrijednosti koji se sastoje od ključa i same vrijednosti.

Glavna razlika je u tome što se bilo koji tip podataka može navesti kao ključ, kao i kao vrijednost. S obzirom na ovu značajku, potrebno je pristupiti vrijednosti podudaranja prema indeksu; vrijednost ključa naznačena je kao vrijednost indeksa.

Ključ može biti vrsta podataka različita od niza. Svojstva i metode rada s Complianceom gotovo su iste kao i kod Structure.

Konstruktor usklađenosti, za razliku od Strukture, ne sadrži mogućnost specificiranja parametara.

Primjer upotrebe:

Dopisivanje je prikladno za korištenje kada trebate povezati bilo koje dvije strukture. Na primjer, svaki red u tabličnom dijelu mora se podudarati s retkom iz tablice vrijednosti.
U ovom slučaju, redak odjeljka tablice koristi se kao ključ za podudaranje i prikazuje se odgovarajuća vrijednost.

Prilikom umetanja elemenata u kolekciju Podudaranje uz metodu Umetnuti(,) Drugi način za umetanje vrijednosti je korištenje uobičajenog operatora dodjele.

Na primjer: Naša utakmica = Nova utakmica;
Podudaranje = 999;

Oni. ako element nije bio prisutan u kolekciji, tada će biti dodan pomoću operatora dodjele, a ako je bio prisutan, ažurirat će se.

Ovo je u suprotnosti sa strukturom.

Tablica vrijednosti univerzalne zbirke

Tablica vrijednosti je tablica s proizvoljnim brojem redaka i proizvoljnim brojem stupaca. Raskrižje može pohraniti vrijednosti bilo koje vrste podataka. Po potrebi se stupci mogu tipkati, odnosno možete odrediti u kojem se stupcu koji tip podataka sprema.

Možete ostaviti stupce bez tipova, tada se vrijednosti različitih tipova mogu pohraniti u jedan stupac u različitim recima.

Razlike Tablice vrijednosti iz dvodimenzionalnog niza:

  • ovo je objekt s kojim korisnik može raditi (tablica vrijednosti se može prikazati na ekranu, korisnik je može popuniti, a zatim pročitati unesene podatke);
  • izrada indeksa za brzo pretraživanje;
  • kloniranje, ispunjavanje cijelog stupca određenom vrijednošću, učitavanje svih stupaca u polje.

Tablica vrijednosti koristi se kao vrsta međuspremnika za pohranu informacija. Tablica vrijednosti se vraća i prihvaća kao parametar od strane mnogih metoda sustava. Moguće je izraditi upit prema tablici vrijednosti.

Tako, Tablica vrijednosti sastoji se od skupa redaka i skupa stupaca. I redovi i stupci su zbirke.

Oni. unutar zbirke Tablica vrijednosti postoje još dvije zbirke. Obratimo se pomoćniku za sintaksu i pronađimo Tablica vrijednosti.

Podržani tipovi podataka: sam Tablica vrijednosti, koji se sastoji od nizova. Svaki red je predstavljen tipom podataka RedakTablicaVrijednosti, koji ima svoja svojstva i svoje metode. Dostupno Zbirka vrijednosti stupaca tablice također ima određena svojstva.

Važna točka! Postupak koji stvara Tablica vrijednosti, mora kompilirati &OnServer.

Prije nego počnete raditi sa Tablica vrijednosti, trebate odrediti koje će stupce sadržavati (tj. kreirati ih). Sintaksa:

Dodati(,)
(neobavezno)
Tip: Žica.
(neobavezno)
Tip: DescriptionTypes
(neobavezno)
Tip: Žica.
(neobavezno)
Tip: Broj.

Na primjer:

Za pozivanje ove procedure upotrijebit ćemo naredbu.

U opisu Tablice vrijednosti elementi zbirke su upravo RedoviTablicaVrijednosti.

Za razliku od stupaca koji se sastoje samo od svojstava (Naziv, Tip, Naslov, Širina), u RedakTablicaVrijednosti Postoje i svojstva (pristup po nazivu stupca) i metode (možete dobiti i postaviti vrijednost, raditi s vlasnicima).

Dodati nova linija u tablicu trebate koristiti metodu bilo Dodati(), ili Umetnuti(). U drugom slučaju, trebali biste naznačiti na kojem mjestu treba postaviti željenu liniju.

Da bismo stupcu dodijelili vrijednost, koristimo točku za pristup nazivu ili indeksu stupca (koristeći uglate zagrade).

Za punjenje Tablice vrijednosti Mogu se koristiti sljedeće metode:

Čisto()– za uklanjanje svih redaka iz Tablice vrijednosti.

FillValues(,)– omogućuje popunjavanje svih stupaca ili odabranih stupaca jednom vrijednošću.
Učitaj stupac(,)– učitava stupac iz niza.
UnloadColumn()– istovaruje stupac u polje.

Posljednje dvije metode prikladne su za korištenje kada trebate prenijeti stupac iz jedne tablice vrijednosti u drugu.

Kopirati(,)– dopušta na temelju postojeću tablicu stvoriti novi Tablica vrijednosti, i to ne sve retke i sve stupce, već samo neke od njih. Povratna vrijednost – Tablica vrijednosti.

Možete kopirati strukturu Tablice vrijednosti. Za to postoji odgovarajuća metoda Kopiraj stupce(). Uzet ćemo praznu Tablica vrijednosti sa potrebnom strukturom.

U Tablica vrijednosti postoji metoda Ukupno(). Možete odrediti stupac u kojem želite zbrojiti numeričke vrijednosti. U odnosu na prethodno prikazani kod u tablici, možete izračunati vrijednost: TK. Ukupno (“Iznos”).

U Tablica vrijednosti metodom je moguće grupirati (sažimati) numeričke vrijednosti po identičnim vrijednostima određenih stupaca Kolaps(,).

U odnosu na prethodno prikazani kod u tablici, možete izračunati vrijednost: TK.Kolaps(“Dan u tjednu”, “Iznos”).

Tablica vrijednosti može se prikazati na korisničkom zaslonu tako da s njim možete izvoditi bilo kakve radnje. Ali za razliku od ListValues Ne možete jednostavno pozvati tablicu na zaslonu iz programskog koda.

Prikazati Tablica vrijednosti na zaslonu izradite atribut obrasca i dodijelite mu vrstu podataka Tablica vrijednosti.

Nakon toga na obrascu treba prikazati dobivenu tablicu.

U modul forme na kraju prethodno sastavljenog algoritma (u Proceduri za izradu tablice vrijednosti) treba dodati:
ValueInFormData(TK, Tablica);

Univerzalna kolekcija Drvo vrijednosti

univerzalna zbirka koja je vrlo slična Tablica vrijednosti. Razlika od tablice je u tome što redovi stabla mogu biti podređeni jedni drugima, tj. može se formirati neka vrsta hijerarhije.

To se također može odraziti na ekranu. Stablo vrijednosti eksplicitno se sastoji od zbirke redaka i zbirke stupaca. U stablu postoje dva svojstva: Redovi i Stupci.

Budući da redovi mogu biti podređeni jedan drugome, svaki red može imati roditelja, kao i njegovi podređeni redovi.

Kreirajmo odgovarajuću naredbu Tree i postupak njezine obrade.

Kreirajmo u kojem postoji jedan nadređeni red i dva podređena reda.

Kreirajmo atribute obrasca DerZn(tip podataka – Stablo vrijednosti).

Za ovaj atribut stvorit ćemo stupce Godina i Mjesec.

Pomaknite odgovarajući element DerZn na obrascu.

Na kraju Procedure TreeOnServer() dodajmo:

ValueInFormData(TreeZn, DerZn);

Provjerimo što se dogodilo u korisničkom načinu rada.

Pomoću gumba Dodati možete dodati nove retke. Oni također mogu formirati hijerarhiju.

Da bismo prešli sve elemente stabla vrijednosti, morat ćemo koristiti rekurziju, tj. pozivanje procedure iz sebe. Na primjer, obrada stabla vrijednosti može izgledati ovako:

Ovime završavamo naše prvo upoznavanje s univerzalnim kolekcijama.

U sljedećem članku ćemo pogledati koji važan mehanizam programer može koristiti za pojednostavljenje pristupa elementu direktorija iz programskog koda.

Korištenje nizova u 1C pomaže organizirati elemente koji se koriste u radu.

Ovo je softverski skup elemenata. Služi za:

  • Odabir vrijednosti.
  • Sortiranje. Svakoj poziciji u nizu dodijeljen je indeks. To olakšava pretragu. A možete se pozvati na objekt tako da napišete njegov broj.
  • Kombiniranje i spremanje zapisa.
  • Razdvajanje grupa, stvaranje podnizova.
  • Niz je sam po sebi objekt. Varijabla će mu biti pridružena. Možete se pozivati ​​na pojedine njegove dijelove ili ga u cijelosti koristiti u postupcima. Na primjer, možete kombinirati vrijednosnu grupu “Zaposlenici odjela N” i tamo unijeti imena i prezimena zaposlenika.

Napravimo analogiju. Zamislite policu za knjige. Knjige u njemu raspoređene su u različite "ćelije". Ako vodite evidenciju, znat ćete gdje se koji objekt nalazi. I možete ga dobiti bez poteškoća. Ali ako su knjige, časopisi i novine kaotično razbacane po stolu, potraga za pravom stvari trajat će dugo. Iako to ne odražava sve mogućnosti jedinstvenih zbirki.

Stvaranje

Rad s 1C nizovima počinje njihovim stvaranjem. Potrebna vam je “lokacija” - polje u koje ćete unijeti kod.

  1. Otvorite "Konfigurator" ("Konfiguracija").
  2. Desnom tipkom miša kliknite na "Obrada".
  3. Odaberite "Dodaj".
  4. Pojavljuje se podizbornik Processing1. Odaberite ga. Informacije o tome bit će prikazane u radnom području.
  5. Na kartici Osnovno unesite naziv. Recimo "TestArray".
  6. Otvorite odjeljak "Obrasci".
  7. Kliknite na ikonu povećala.
  8. Provjerite opciju "Obrazac za obradu".
  9. Kliknite na "Gotovo".
  10. Otvorit će se prozor s tri okvira. U gornjem desnom kutu idite na karticu "Timovi".
  11. Ikona plus za dodavanje pozicije.
  12. Pojavit će se stavka "Tim1". Odaberite ga.
  13. U polje "Ime" unesite ime. Na primjer, "TestValues". Kopirajte ga u "Zaglavlje".
  14. U retku "Akcija" kliknite na povećalo.
  15. Stavka "Stvori na klijentu" i "U redu".
  16. Ovdje je modul u koji možete unijeti kod.

Za prikaz međurezultata stvorite "gumb". Zašto je to potrebno u nizu - shvatit ćete malo kasnije.

  1. Idite na karticu "Obrasci". Ona je dolje.
  2. Desnom tipkom miša kliknite na "Command Bar".
  3. "Dodaj - gumb".
  4. Dajte mu bilo koje ime. Ili možete ostaviti zadani.
  5. U polju "Naziv tima" kliknite na ikonu elipse.
  6. Odaberite "TestValues". Ako je tim drugačije nazvan, bit će drugačiji naslov.

Sada možete početi raditi sa zbirkama. Ali nemojte misliti da u 1C možete odmah rastaviti niz u niz. Bolje je početi s nečim lakšim. Iako su sve funkcije skup operatora koje samo trebate zapamtiti.

  1. Otvorite karticu "Modul".
  2. Tekst koji dolazi nakon dvije kose crte (dvije kose crte - “//”) može se obrisati. Izgleda otprilike ovako "//Umetni sadržaj rukovatelja". Ovo su objašnjenja. Napisali su ih programeri kako se ne bi zbunili u kodu.
  3. Napišite svoj tekst između operatora “Procedura” i “End of Procedure”.
  4. Sada stvorite skup vrijednosti. Smislite varijablu koja će ga uvjetno označavati. Recimo "FirstArray".
  5. Mora biti povezan s objektom. Da biste to učinili, unesite naredbu “FirstArray = New Array()”. Ovo je zbirka koja može sadržavati neograničen broj elemenata. Ako imate fiksnu veličinu, navedite je nakon naredbe u zagradi "Novi niz (5)". Sukladno tome, dvodimenzionalna kolekcija će izgledati kao “Novi niz (7, 5)”. Možete kreirati višedimenzionalne skupove.
  6. Dok tipkate, mogu se pojaviti prijedlozi koji predlažu odgovarajuće operatore.
  7. Riječi se razlikuju po boji. Varijable imaju jednu boju, funkcije drugu.
  8. Iza svake naredbe stavite točku i zarez ";". I radi praktičnosti, počnite s novim odlomkom.
  9. S praznim setom ne možete ništa. Niti organizirati, niti ispisati, niti rastaviti niz u niz u 1C. Stoga u njega moramo umetnuti elemente.
  10. Unesite "FirstArray.Add(Value1);". Zatim "FirstArray.Add(Value2);" i tako dalje.
  11. Objekti se numeriraju od nule. To jest, varijabli "Value1" bit će dodijeljen indeks "0". Kolekciju možete sami ispuniti s "Vrijednost0" kako se ne biste zabunili.

Čemu sve ovo? I zašto taj misteriozni "gumb"? Pokušajmo pokrenuti jednostavnu funkciju.

  1. Ispod kolekcije napišite naredbu “Izvješće (FirstArray);” Indeks elementa naveden je u uglastim zagradama. To jest, adresa naše "Vrijednosti0".
  2. Formatirajte modul. Ovo je provjera grešaka. U velikim blokovima možete ostaviti nešto nedovršeno zbog nepažnje: nestavite točku i zarez, ne zatvorite zagrade ili neispravno napišite varijablu. Sastavljač će to istaknuti.
  3. Kliknite na gumb u obliku znaka "Play" (trokut u krugu) za pokretanje programa koji ste napisali.
  4. Kliknite na "Usluga" i odaberite svoj gumb.
  5. Kliknite na nju.
  6. Pojavljuje se poruka “Vrijednost0”. Ovo je rezultat izvršenja funkcije.

Najviše prikazano jednostavan rad, tako da razumijete kako nizovi općenito funkcioniraju. S njima možete stvoriti složene i višerazinski programi. Prikažite objekte, sortirajte, uklonite ponavljanja, podijelite u skup podnizova, kombinirajte, podijelite, tražite informacije. Samo trebate poznavati operatere.

Funkcije

svi dostupne funkcije nalazi se u priručniku programa. Nabrojimo nekoliko da pokažemo princip.

Kako pretvoriti 1C niz u niz:

TestArray = Novi niz(4);
TestArray = Ovo;
TestArray = Gotovo;
TestArray = Dakle;
RowTest = VrijednostInRowInt(TestArray);
Izvješće (Test niza);

Ispišite ga na "Gumb" i dobijte frazu. Ovo može biti dio većeg modula - u kojem slučaju naredba Izvještaj nije potrebna.

Da biste rastavili niz u niz podnizova u 1C, potreban vam je separator. Uvjetna oznaka nakon koje će se tekst podijeliti. Recimo da postoji riječ "Protokol". I stavit ćemo separator "O". Unesite naredbu "TestArray = ExpandStringInArray(Protocol, "O") ;" Odvojeno ćete dobiti “Pr”, “T”, “K” i “L”. Razdjelnik se briše. I riječ je podijeljena u nekoliko podnizova.

Evo kako to primijeniti u praksi. Imate niz s punim imenima zaposlenika. I potrebno je da se polja "Prezime", "Ime" i "Patronim" automatski popune prilikom odabira pozicije. Da biste to učinili, puno ime mora biti podijeljeno u tri komponente. Koristite "razmak" kao separator.

Obično se za to koristi složeni modul: petlja s veliki iznos operateri. Ciklički blokovi s uvjetom grade se prema principu “Ako (uvjet), onda (akcija1), inače (akcija2)”. Prvo, program provjerava je li uvjet istinit. Ako da, tada pokreće prvu funkciju. Ako ne, drugi.

Petlja će provjeriti svaki znak u nizu. Ako tamo nema separatora, nastavlja dalje. Ako tamo postoji graničnik, on dodaje vrijednost skupu podnizova. Tu se mogu koristiti i drugi operatori: na primjer, "AbcrLP" je kratica određenih znakova desno i lijevo od retka.

Svaki modul mora biti "završen" kako bi uslužni program prestao izvršavati proceduru. U petlji s "If" ova izjava je "EndIf". Na ciklusu bez uvjeta - "Kraj ciklusa". Svaka funkcija mora biti dovršena zasebno.

Traži i sortiraj

Zbirke mogu sadržavati golemu količinu podataka. Moramo ih naučiti tražiti i sortirati.

Za pokretanje pretraživanja u nizu u 1C upotrijebite operator "Pronađi". Željenu vrijednost možete pronaći i vizualno. Ali ako postoje stotine elemenata, bolje je stvoriti dodatni modul i pokrenuti potprogram. Pokažimo to koristeći jednostavnu funkciju kao primjer. Ali ovo je prikladno za sve blokove.

ArrayTest = Novi niz(3);
ArrayTest = "Telefon";
ArrayTest = "Laptop";
ArrayTest = "Računalo";
Indeks = ArrayTest.Find("Telefon");
Ako Indeks ‹› Nedefinirano Onda
Izvješće("Pretraživanje završeno" + ArrayTest[Index]);

I ne zaboravite staviti "terminating statement".

Zbirka je navedena kao primjer. Napravili smo skup od tri vrijednosti. I napravili smo kratki ciklus. Ako uslužni program ne pronađe odgovarajući element, prikazat će poruku "Nedefinirano". Ako ga nađe, pokazat će rezultat.

Razvrstavanje 1C polja jednostavno je nezamjenjivo pri radu s velikim količinama podataka. Morate se nekako snaći u njima. Bolje ih je rasporediti određenim redoslijedom. Recimo da imate kolekciju pod nazivom “YourArray”. Da ga dovedu u red

TestList = Nova lista vrijednosti;
TestList.LoadValues(YourArray);
TestList.SortByValue(SortDirection.Age);
VašArray = TestList.UnloadValues();

Umjesto “Uzlazno” možete staviti “Silazno”. Rezultat se također može učitati u tablicu vrijednosti:

Ispitna tablica = Nova tablica vrijednosti;
TestTable.Columns.Add("Stupac");
TestTable.LoadColumn(YourArray, “Column”);
TestTable.Sort("Silazno stupac");
VašArray = TestTable.UnloadColumn("Stupac")

Postoje i složene metode sortiranja: “Bubble”, “Quick”, “Shaker”, “Recursion”. Imaju višerazinske i duge algoritme.

Tablice i popisi

Informacije se mogu slati između različiti tipovi zbirke. Za prijenos niza u tablicu vrijednosti u 1C:

ArrayTelephone = Novi niz;
ArrayPhone.Add("Pametni telefon");
ArrayPhone.Add("Tablet");
ArrayPhone.Add("Telefon");
TableTest = Nova tablica vrijednosti;
TableTest.Columns.Add("Mobilni telefoni");
TableTest.Add();
TableTest.Add();
TableTest.Add();
TableTest.LoadColumn(ArrayTelephone, “Mobilni telefoni”);
Za svaki red iz ciklusa TableTest
Izvješće(String.Mobile);

Ne zaboravite dodati naredbu o završetku petlje na kraju.

Pretvaranje niza u popis vrijednosti u 1C prilično je jednostavno. Samo trebate prenijeti podatke iz jedne zbirke u drugu.

NewList = NewValueList();
NewList.LoadValues(YourArray);

U programiranju se jedan problem može riješiti različiti putevi. I 1C nije iznimka. Linearni algoritmi, petlje, petlje s uvjetom, petlje s brojačem. Postoji mnogo opcija. Za navigaciju nizom potrebne su vam neke 1C vještine.

Koncept "niza" odavno se koristi u programiranju i najčešće se shvaća kao određena struktura u memoriji koja se sastoji od niza elemenata. Niz u 1C je najjednostavnija od univerzalnih kolekcija vrijednosti. Osim niza, univerzalne zbirke uključuju:

  1. Popis vrijednosti (za razliku od niza, vrijednosti s popisa imaju reprezentaciju, implementirana je mogućnost sortiranja i prikaza zbirke u sučelju);
  2. Tablica vrijednosti je zbirka koja ima stupce za prošireni opis vrijednosti; slična struktura može se dobiti izvršavanjem upita;
  3. Stablo je vrlo slično stolu, zajedno sa strukturom podređenosti;
  4. Struktura - dinamički skup imena i vrijednosti varijabli;
  5. Usklađivanje - slično strukturi, samo što se varijable ne podudaraju s reprezentacijama nizova, već jedna s drugom.

Metode polja

Programsko stvaranje instance niza događa se pomoću operatora New() (slika 1).

Kao što se može vidjeti iz gornjeg primjera, nizovi se mogu stvoriti s fiksnim brojem elemenata ili bez ovog ograničenja.

Prije nego počnemo raspravljati o metodama za rad s nizom, definirajmo dva koncepta:

  • Indeks elementa – može se predstaviti kao serijski broj jedne vrijednosti;
  • Broj elemenata – broj elemenata u kolekciji, njegovo određivanje je dostupno metodom Quantity().

Važno je znati: u 1C, brojanje broja vrijednosti bilo koje zbirke počinje od 1, a distribucija indeksa od 0, tj. prvi element u nizu ima indeks 0. Dakle, prelaženje zbirke pomoću petlje s iterator bi trebao početi od 0 i završiti s brojem elemenata minus 1, inače će vas sustav obavijestiti o pojavi iznimke pomoću prozora (slika 2).

sl.2

Svaki konfiguracijski objekt ima svoje metode za rad, niz nije iznimka, nabrojimo ih uz neko objašnjenje:

  • BBorder() – koristeći metodu koju možete dobiti maksimalni indeks element, za prazan niz bit će vraćena vrijednost (-1);
  • Insert() – ova metoda ima dva parametra: indeks i vrijednost, indeks pokazuje gdje treba umetnuti u niz novi element, dodana vrijednost može biti prazna;
  • Add() – ovaj način umetanja vrijednosti može se koristiti kada je položaj elementa nevažan, uz njegovu pomoć će se novi podaci upisati na kraj postojećeg niza;
  • Find() – ako je uspješan, vraća indeks vrijednosti navedene u zagradama, inače vraća “Nedefinirano”;
  • Clear() – briše kolekciju;
  • Get() – čita podatke koji se nalaze u nizu na navedenom indeksu, mogu se zamijeniti uglate zagrade ;
  • Delete() – briše element s navedenim indeksom;
  • Set() – zamjenjuje podatke u navedenoj ćeliji niza.

Jednodimenzionalni i višedimenzionalni nizovi

U najjednostavnijem slučaju, jednodimenzionalni niz može sadržavati vrijednosti različite vrste(Sl.3)

sl.3.

Rezultat izvršavanja gornjeg koda prikazan je na slici 4

sl.4

Tako smo dobili jednodimenzionalni niz koji se sastoji od string vrijednosti, veze na element imenika i datuma. Štoviše, prilikom dodavanja elemenata koristili smo dvije različite metode Add() i Insert(); da smo koristili metodu Add() prilikom dodavanja datuma, naš rezultat bi imao nešto drugačiji izgled.

U srednjoj školi se uvodi koncept dvodimenzionalne matrice. To je skup podataka od kojih svaki element ima dva indeksa (u najjednostavnijem slučaju okomiti i vodoravni serijski broj), koji najbolje ilustrira koncept dvodimenzionalnog niza.

Prilikom izrade takve matrice možete odrediti broj redaka i stupaca koji će se koristiti.

Recimo da se susrećemo sa zadatkom kreiranja niza prezimena, imena i oca dva zaposlenika. Pomoću koda (slika 5) kreiramo odgovarajući niz s fiksnim brojem stupaca i redaka.

sl.5

Da bismo ga prešli, potrebne su nam dvije petlje, u prvoj petlji obilazimo niz red po red, u drugom rastavljamo red na elemente. To se može učiniti pomoću ciklusa “Za svaki .... Od" (Sl. 6)

sl.6

Ili korištenjem petlje s iteratorom "Za ... po" (Slika 7)

sl.7

U načelu, broj dimenzija određenog niza može biti bilo koji; druga stvar je da je u slučaju velikog broja razina detalja prilično teško stvoriti graditelja za čitanje podataka.

Korištenje polja

Nizovi u 1C najčešće se koriste za:

  1. Stvaranje različitih odabira koji se koriste pri radu s upitima i drugim zbirkama vrijednosti;
  2. Prijenos popisa kao parametara između procedura i funkcija;
  3. Razmjena podataka s vanjskim komponentama povezanim COM tehnologijom.

Naravno, ovo je daleko od potpunog popisa svrha za koje se objekt "Array" može koristiti.