1s 8.3 prikazuju tabelu vrijednosti. Koje metode postoje i kako tražiti nekoliko vrijednosti istovremeno

25.06.2023

Tabela vrijednosti je specifičan univerzalni objekat dizajniran za pohranjivanje podataka u tabličnom prikazu. Ključna razlika između tablice i objekata aplikacije je nedostatak vezivanja za fizičke tablice baze podataka. Tabela vrijednosti postoji samo u RAM, što, s jedne strane, pruža jedinstvene mogućnosti, as druge nameće određena ograničenja. Ipak, mogućnosti interakcije sa tabelom su uporedive sa interakcijom sa objektima koji stvarno postoje u bazi podataka.

Istorijski gledano, tablica vrijednosti u 1C ima dvostruku svrhu, jer je virtualni analog postojećih tablica, ali je istovremeno i kontrolni element. Sa prelaskom na upravljanu aplikaciju, veliki dio ove funkcionalnosti je zastario, ali i danas može biti element korisničkog sučelja, ali uz neka značajna ograničenja.

Struktura tablice vrijednosti kao objekta

Svojstva tabele vrednosti određuju se kombinacijama dve unapred definisane kolekcije: njenih kolona i njenih redova.

Tabela vrijednosti Kolone

Stupac tablice vrijednosti je njegovo definirajuće svojstvo. To je skup kolona tabele koji određuje njenu strukturu. Kolone odgovaraju poljima fizičkih tabela ili kolona poznatih iz korisničkog interfejsa tabelarnog odeljka ili dnevnika dokumenata. Kolona može imati interno ime, tip vrijednosti i naslov koji se prikazuje kada se radi interaktivno s tablicom.

Pošto su kolone kolekcija objekata, možete dodavati, brisati i uređivati ​​stupce.

Red tablice vrijednosti

Sa tačke gledišta softverski interfejs, redovi su zasebna kolekcija ugrađena u tablicu vrijednosti. Oni su analogni zapisima u fizičkim tabelama, odnosno redovima poznatim korisniku u tabelarnom dijelu ili dnevniku dokumenata. Svaki pojedinačni red je objekat sa skupom imenovanih svojstava, čija imena odgovaraju nazivima kolona tabele.

Stoga je interakcija sa stringom vrlo slična interakciji s drugim objektima. Možete čitati i pisati njegova svojstva, uključujući korištenje unaprijed definirane funkcije “FillPropertyValues()”. Pošto su redovi glavna kolekcija tabele vrednosti, metoda Clear() se koristi za brisanje svih redova u tabeli.

Kreirajte tablicu vrijednosti

Postoji mnogo načina da pripremite tablicu vrijednosti za upotrebu. Pogledajmo neke od njih. Svaki primjer će biti dat kao popis kodova s ​​komentarima.

Kreiranje tabele pomoću konstruktora

Glavna metoda koja vam omogućava da kreirate upravo onu tablicu koja je potrebna programeru je, nažalost, najzahtjevnija, jer zahtijeva ručno navođenje svih potrebnih svojstava tablice.

DemoTable = Nova tablica vrijednosti;

// Prije svega, inicijaliziramo tehničke specifikacije // Zatim određujemo potrebne parametre za nove stupce i dodajemo ih u kolekciju // Kreiranje stupca "Nomenklatura" Naziv = "Nomenklatura";

ValueType = New TypeDescription("DirectoryLink.Nomenclature"); Title = "Nomenklatura (proizvod)"; DemoTable.Columns.Add(Name, ValueType, Header);

// Opcija sa kopiranjem svih redova iz standarda tehničke specifikacije, ali sa očuvanjem samo dva navedena stupca standarda = "Nomenklatura, količina"; DemoTable = TableEtalon.Copy(, ColumnsEtalon);// Opcija s kopiranjem unaprijed odabranih redova iz standarda tehničke specifikacije, uz očuvanje dva navedena stupca Standarda = SelectIntoArrayRedovi koji su nam potrebni iz tablice standarda(); ColumnsStandard = "Nomenklatura, količina"; DemoTable = TableEtalon.Copy(RowsEtalon, ColumnsEtalon);

// Opcija za kopiranje redova iz standarda tehničke specifikacije pomoću navedenog filtera, uz očuvanje jedne kolone “Nomenklatura” // Svi redovi u kojima je vrijednost u stupcu Količina jednaka 0 će biti odabrani, samo kolona Nomenklatura Odabir reda = Nova struktura ("Količina" će se pojaviti u rezultujućoj tabeli , 0);

ColumnsStandard = "Nomenklatura"; DemoTable = TableEtalon.Copy(RowsEtalon, ColumnsEtalon);// Opcija sa kompletnom kopijom tabele i naknadnim brisanjem jednog reda sa vrednošću polja za količinu

jednaka nuli

i brisanje cijele kolone “Količina” Odabir reda = Nova struktura("Količina", 0);

U ovom kratkom članku pogledali smo osnovna svojstva i praktične tehnike za kreiranje tablice vrijednosti, dovoljne za razumijevanje i početak korištenja. Sam objekat tabele vrednosti je toliko višeslojan da detaljan opis njegove mogućnosti zahtijevaju pisanje posebnog članka o tehnikama i metodama rada.

Tablica vrijednosti na platformi 1C 8.3 (8.2) je univerzalna zbirka vrijednosti koju programer može koristiti kada razvoj softvera da implementirate svoje algoritme. U suštini, tablica 1C vrijednosti je dinamički skup vrijednosti koji ima stupce i stupce.

Članci o drugim univerzalnim zbirkama vrijednosti u 1C

Naučite programirati u 1C na mjestu iz moje knjige “Programiranje u 1C u 11 koraka”

  1. Knjiga je napisana jasno i jasno jednostavnim jezikom- za pocetnike.
  2. Naučite razumjeti 1C arhitekturu;
  3. Počećete pisati kod na 1C jeziku;
  4. Ovladati osnovnim tehnikama programiranja;
  5. Učvrstite svoje znanje uz pomoć problemske knjige;

Odličan vodič za razvoj u upravljanoj 1C aplikaciji, kako za početnike tako i za iskusne programere.

  1. Veoma pristupačne i jasan jezik prezentacija
  2. Knjiga se šalje na email V PDF format. Može se otvoriti na bilo kom uređaju!
  3. Shvatite ideologiju upravljana aplikacija 1C
  4. Naučite kako razviti upravljanu aplikaciju;
  5. Naučite razvijati upravljane 1C obrasce;
  6. Bićete u mogućnosti da radite sa osnovnim i neophodnim elementima upravljanih obrazaca
  7. Programiranje pod upravljanom aplikacijom će postati jasno

Promo kod za popust od 15% - 48PVXHeYu


Ako vam je ova lekcija pomogla da riješite bilo koji problem, svidjelo vam se ili smatralo korisnim, onda možete podržati moj projekat doniranjem bilo kojeg iznosa:

Možete platiti ručno:

Yandex.Money - 410012882996301
Web Money - R955262494655

Pridružite se mojim grupama.

Pretražite u tabeli 1C vrijednosti

Koje metode postoje i kako tražiti nekoliko vrijednosti istovremeno.

Postoje dvije posebne metode za pretraživanje tablice vrijednosti:

1. Pronađite

TVHorizon = Directories.Nomenclature.FindByName("TVHorizon");
FoundString = TZNomenclature.Find(TVHorizon);
//također možemo odrediti u kojim kolonama treba pretraživati ​​da bismo ubrzali pretragu
FoundString = TZNomenclature.Find(TVHorizon, "Nomenklatura");

Ova metoda vraća prvi pronađeni red sa željenom vrijednošću ili Undefined ako ga ne pronađe. Stoga je zgodno koristiti za pretraživanje jedinstvene vrijednosti, jer u suprotnom, kada se pronađe vrijednost, morat ćete je ukloniti iz tabele da biste pronašli sljedeću.

Da biste izbjegli ovu gnjavažu, postoji sljedeća metoda koja vam omogućava da pronađete niz podudarnih nizova:

2. FindStrings


Struktura odabira.Insert("Nomenklatura", TVHorizon); // prvo naznači kolonu gdje treba tražiti, a zatim šta tražiti.

Ovaj metod uvijek vraća niz, ali može biti prazan ako ništa nije pronađeno. I ova metoda, kao i prethodna, vraća redove tablice vrijednosti same, a ne same vrijednosti u zasebnom nizu. Stoga, promjenom vrijednosti u nizu niza ili, kao u prethodnoj metodi, za pronađeni niz, promijenit ćete vrijednost u obrađenoj tablici vrijednosti.

Još jedna dobra stvar u vezi ove metode je da može pretraživati ​​kroz nekoliko stupaca tablice vrijednosti odjednom:


SelectionStructure = Nova struktura;
Struktura odabira.Insert("Nomenklatura", TVHorizon);
Struktura odabira.Insert("Količina", 10);
FoundArray of Rows = TZNomenclature.FindLines(SelectionStructure);

Jedina negativna, kao što vidite, je da ne možete koristiti druge vrste poređenja osim "jednako"

Evo jedne male činjenice za početak - jednostavni primjeri rad sa tablicom vrijednosti:

1. Kreirajte tablicu vrijednosti

ValueTable = Nova tablica vrijednosti;


2. Kreirajte stupce za tablicu vrijednosti:

ValueTable.Columns.Add("Name");
Vrijednost Table.Columns.Add("Prezime");


3. Dodajte nove redove koristeći nazive kolona:


NewLine.Name = "Vasily";
NewLine.LastName = "Pupkin";


4. Kako potražiti vrijednost u tabeli vrijednosti:
Potrebno je pronaći red tabele koji sadrži željenu vrijednost.

FoundRow = ValueTable. Find(SearchValue);


5. Pronađite prvo pojavljivanje u određenim stupcima tablice vrijednosti

FoundRow = ValueTable.Find(SearchValue, "Dobavljač, Kupac");


6. Ako trebate pronaći sva pojavljivanja u tabeli vrijednosti:
Koristimo strukturu pretraživanja.

SearchStructure = Struktura("Zaposleni", SearchValue);
Niz pronađenih redova = ValueTable.FindRows(Struktura pretraživanja);


Kreirajmo strukturu pretraživanja čiji će svaki element sadržavati naziv kolone kao ključ i željenu vrijednost u ovoj koloni kao vrijednost. Prosljeđujemo strukturu pretraživanja kao parametar metodi FindLines(). Kao rezultat, dobijamo redove tabele.
Ako strukturi pretraživanja dodate pretragu za željenom vrijednošću, na primjer, također u stupcu Odgovorni, tada ćemo kao rezultat primjene metode FindRows() dobiti sve redove u kojima su i Zaposleni i Odgovorni jednaki tražena vrijednost.

7. Kako iterirati kroz tabelu vrijednosti slučajnim redoslijedom

Za svaki trenutni red iz petlje tabele vrijednosti
Izvještaj (Trenutni red.Naziv);
EndCycle;

Ista stvar koristeći indekse:

SeniorIndex = ValueTable.Quantity() - 1;
Za račun = 0 do ciklusa SeniorIndex
Izvještaj(Tablica vrijednosti[Račun].Naziv);
EndCycle;


8. Brisanje postojećeg reda tablice vrijednosti

ValueTable.Delete(Red za brisanje);

po indeksu

ValueTable.Delete(0);


9. Brisanje postojeće kolone tablice vrijednosti

ValueTable.Columns.Delete(ColumnDeleted);


po indeksu

ValueTable.Columns.Delete(0);

Potrebno je uzeti u obzir da će brisanje reda (ili stupca) "iz sredine" tablice vrijednosti dovesti do smanjenja za jedan indeks redova koji se nalaze "nakon" obrisanog

10. Kako popuniti tabelu vrijednosti ako su nazivi kolona sadržani u varijablama?

NewRow = ValueTable.Add();
NewRow[Ime kolone] = Vrijednost;


11. Kako popuniti cijelu kolonu tablice vrijednosti željenom vrijednošću?
Kolona Fiskalna računovodstvena zastavica u tabeli vrijednosti tabele vrijednosti mora biti popunjena vrijednošću False

Tabela vrijednosti Popunite vrijednosti (Netačno, "Zastava fiskalnog računovodstva");


Koristimo metodu FillValues() za tablicu vrijednosti. Prvi parametar je vrijednost koju treba popuniti. Drugi parametar je naziv kolone koju treba popuniti.

12. Kako popuniti tablicu vrijednosti “Tabela primatelja” podacima iz tablice vrijednosti “SourceTable”?

Ako tablica primatelja još ne postoji u vrijeme operacije ili njene prethodne kolone ne moraju biti spremljene, možete je kreirati kao potpunu kopiju originala

Tablica primatelja = Izvorna tablica.Copy();


Druga opcija: tablica ReceiverTable postoji i bilo bi šteta izgubiti svoje stupce i ograničenja na tipove podataka kolona. Ali morate popuniti podatke za stupce čija se imena podudaraju s imenima izvorne tablice.

Djelomični prijenos podataka za stupce s podudarnim nazivima:

Za svaki red izvorne tabele iz ciklusa izvorne tabele
FillPropertyValues(NewRow, SourceTableRow);
Kraj ciklusa


Za svaki red izvorne tabele, novi red se dodaje u prijemnu tabelu i vrednosti se popunjavaju u onim kolonama nove tabele čiji nazivi odgovaraju nazivima kolona u izvornoj tabeli

Ako tabele nemaju kolone sa istim imenima, odredišna tabela će na kraju sadržati onoliko redova sa nul vrednostima koliko je bilo redova u izvornoj tabeli.
Ako za neke kolone istog imena tip vrijednosti podataka iz izvorne tablice ne spada u niz dozvoljenih tipova kolona odredišne ​​tablice, dobićemo prazne vrijednosti u takvim poljima.
Razmotrimo treći slučaj. U slučaju kolona istog imena, stupac odredišne ​​tablice mora biti u potpunosti usklađen sa stupcem izvorne tablice.

Potpuno kopiranje podataka za stupce s podudarnim imenima

Iste kolone = Novi niz();

Za svaku kolonu iz ciklusa SourceTable.Columns
MatchingColumn = TableReceiver.Columns.Find(Column.Name);

Ako se podudara sa kolonom<>Nedefinirano Onda

// Dobivamo svojstva stupca.
Ime = Column.Name;
ValueType = Column.ValueType;
Zaglavlje = Column.Header;
Širina = Column.Width;

// Zamijenite stupce u odredišnoj tablici.
Indeks = TableReceiver.Columns.Index(MatchingColumn);

TableReceiver.Columns.Delete(Index);
ReceiverTable.Columns.Insert(Index, Name, ValueType, Header, Width);

// Dodajte sljedeće ime odgovarajućih kolona u niz.
Iste kolone.Dodaj (Ime kolone);

endIf;

EndCycle;

// Kruži kroz redove izvorne tabele.
Za svaki red izvorne tabele iz ciklusa izvorne tabele

// Add nova linija do prijemnog stola.
NewRow = TableReceiver.Add();

// Popunite vrijednosti u odgovarajućim ćelijama.
Za svaki naziv kolone Iz kolone istog imena Ciklus
NoviRow[Ime kolone] = IzvornaTabelaRow[Ime kolone];

EndCycle;

EndCycle;


Morat ćemo zamijeniti kolonu u odredišnoj tablici novom, čija će svojstva u potpunosti odgovarati koloni izvorne tablice.
Stoga, ako se kolona istog imena pronađe u tabeli primatelja, prikupljamo sva svojstva za novu kolonu u varijablama. Zatim izbrišite staru i kreirajte novu kolonu. Zatim prolazimo kroz redove izvorne tabele.
U petlji dodajemo novi red u prijemnu tabelu i otvaramo petlju preko naziva kolona u nizu odgovarajućih kolona.
Unutar ove ugniježđene petlje popunjavamo ćelije odredišne ​​tablice podacima ćelije izvorne tablice.

13. Kako dodati kolone u tablicu vrijednosti “ValueTable” sa ograničenjima tipa?

Kada dodajete kolonu, možete jednostavno odrediti njeno ime i ostaviti drugi parametar metode Add() netaknutim. U ovom slučaju, tip podataka stupca je proizvoljan.

Dodavanje stupca bez navođenja tipa podataka

// Dodaj kolonu bez ograničenja tipa.
ValueTable.Columns.Add("Objekat");


Možete popuniti vrijednost drugog parametra. Tamo treba da prosledite opis tipa dozvoljenog za kolonu. Sam opis se može dobiti pomoću konstruktora, prenoseći mu kao parametar ime niza tipa (ako postoji mnogo tipova, odvojenih zarezima) ili niz važećih tipova.

Dodavanje kolone koja označava tip podataka

// Ograničenja na tipove podataka stupaca:
// Samo elementi direktorija "Counterparties".
Tabela vrijednosti.Kolone.Dodaj("Račun", Novi opis tipova("DirectoryLink.Accounts"));


Ako je među tipovima dozvoljenim za popunjavanje podataka kolone niz, možete ograničiti njegovu bitnu dubinu (dužinu), navesti upotrebu promjenljive ili fiksne dužine. Sve se to postiže kreiranjem objekta pomoću konstruktora kvalifikatora niza. Zatim će se ovaj objekt koristiti kao jedan od parametara konstruktora TypeDescription.

Korištenje kvalifikatora za specificiranje tipa podataka stupca tablice vrijednosti

// Pripremiti i postaviti ograničenja za podatke tipa String.
Kvalifikatori niza = Novi kvalifikatori niza(20, dozvoljena dužina.Varijabla);
ValidTypes = NewTypeDescription("String", StringQualifiers);
ValueTable.Columns.Add("NoteStringShort", ValidTypes);


Slične radnje se mogu izvesti u odnosu na kvalifikatore broja i datuma.
Imajte na umu: opise tipova konstruktor može izraditi „od nule“ ili se kao osnova može koristiti postojeći opis tipa.

Korištenje postojećih deklaracija tipa za specificiranje tipa podataka stupca tablice vrijednosti

// Proširenje prethodno korištenog opisa tipa.
Brojevi kvalifikatora = Novi brojevi kvalifikatora(10, 2, ValidSign.Non-negative);
DateQualifiers = New DateQualifiers(DateParts.Date);
Extended ValidTypes = New TypeDescription(Važni tipovi, "Broj, Datum", Kvalifikatori broja, Kvalifikatori datuma);

ValueTable.Columns.Add("Note", ExtendedAcceptableTypes);

Pozdrav svim čitaocima infostarta. Ovaj članak će biti posvećen pitanju kreiranja prilagođene tablice vrijednosti ​​​na obliku upravljane aplikacije programski.

Karakteristike zadatka.

Svako ko je programirao u redovnoj aplikaciji često se suočio sa zadatkom da dobije proizvoljnu tabelu vrednosti na obrascu. Proizvoljna tablica vrijednosti je tabela čiji broj i vrsta kolona nisu unaprijed poznati. Odnosno, mogu biti 3 kolone, ili možda 6, ili možda 8. U normalnoj aplikaciji, sve je jednostavno: možete postaviti element "Tabela vrijednosti" na obrazac za obradu, a zatim prenijeti kreiranu tablicu vrijednosti ​na ovaj element programski. Zatim jednostavnom komandom:

Elementi obrasca.TableField.CreateColumns();

dobiti gotovu tablicu vrijednosti na obrascu. Čini se da bi moglo biti jednostavnije.

Sve je to bilo u redovnoj aplikaciji. U upravljanoj aplikaciji, sve se promijenilo. Nije tako lako napraviti proizvoljnu tabelu. Sada trebate ili strogo parametrizirati tablicu vrijednosti na obrascu, ili je kreirati programski (da opišete, pa, ovo je, zapravo, suština same upravljane aplikacije). Evo šta ćemo pokušati da uradimo: softver kreirajte prilagođenu tablicu vrijednosti na upravljanom obrascu.

Rješavanje problema.

Prvo što treba da uradimo je da odredimo kako će tabela izgledati na obrascu. Glavna stvar je da ne morate kreirati nijedan element forme u obradi. Kreiraćemo ga programski, kao i celu tabelu. Odnosno, tabela će biti opisana i kreirana u trenutku otvaranja obrasca ili pomoću dugmeta - zavisno od toga kome je potrebna.

Kreiranje tabele na obrascu se dešava kroz opis tabele vrednosti kao atributa:
SelectionTypeArray = Novi niz; Niz SelectionType.Add(Type("Tabela vrijednosti")); ChoiceTypeDescription = New TypeDescription(ChoiceTypeArray);
Niz detalja = Novi niz;
Niz atributa.Dodaj(Novi atributi obrasca("Tabela rasporeda", Opis vrste odabira, "", "TZN"));
Sada treba da kreiramo
programska tabela
vrijednosti koje sadrže podatke. Ako se tablica vrijednosti dobije iz upita, onda je sve manje-više u redu. Ako se tabela kreira ručno, onda se značenje kolona koje će sadržavati brojeve ili datume može kreirati kroz “Opis tipova”. Poenta je da kolone u tabeli vrednosti moraju imati neki tip. Ako se, na primjer, očekuje da će korisnik popuniti podatke u ovim stupcima interaktivno, onda ne možete dodati kolonu tablice vrijednosti jednostavno sa imenom; Imajte na umu - ovo je veoma važno jer... Ove vrste ćemo prenijeti u tabelu na obrascu.
Kreiramo tabelu koja sadrži nekoliko kolona:

CD = NewDateQualifiers(DateParts.Time);
EndCycle;
ChangeDetails(Detalji niza);
SelectionFieldsTable = Elements.Add("TZN", Type("FormTable"));
SelectionFieldsTable.DataPath = "ScheduleTable";
SelectionFieldTable.Display = TableDisplay.List;

Ovo je jednostavna kombinacija i naš sto je spreman.

Za svaku kolonu iz ciklusa kolona

NewElement = Elements.Add(Ime kolone, Tip("FormField"), SelectionFieldTable);
NewElement.View = FormFieldView.InputField;
NewElement.DataPath = "Tabela rasporeda." + Column.Name;
NewElement.Width = 10;
EndCycle;

Uslovni dizajn, ako nam treba, pišemo i ručno, komandni meni - ručno. Rukovaoci tablicama se takođe pišu rukom. Na primjer, da dodate rukovao događajima za tabelu “Izbor”:

Tablica SelectionFields.SetAction("Izbor","TZNSelection");

Za obradu ovog događaja propisana je posebna procedura u obliku procedure:

&OnClient
Procedura TKNSelection(TK, SelectedRow, Field, StandardProcessing)
//naredbe rukovatelja EndProcedure

Imajte na umu da se rukovaoci tablicama aktiviraju na klijentu i stoga moraju imati naredbu pokazivača kompajlera

&OnClient

Pa, posljednja stvar koju sam htio dodati je da nakon svih ovih koraka ne zaboravite proslijediti gotovu tablicu atributu forme:

ValueVFormAttributes(ToR, "ScheduleTable");

Ovo je ono što imamo kao rezultat:


A evo rukovanja događajem "Izbor":



Pogovor.

Nadam se da će članak pomoći onim 1C programerima koji počinju programski kreirati tabele na obrascu.

Možete preuzeti obradu koja programski kreira tablicu vrijednosti i prikazuje je kontrolisanom obliku sa komentarima koji će vam pomoći da kreirate sopstvene tabele.