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.
Svojstva tabele vrednosti određuju se kombinacijama dve unapred definisane kolekcije: njenih kolona i njenih redova.
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.
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.
Postoji mnogo načina da pripremite tablicu vrijednosti za upotrebu. Pogledajmo neke od njih. Svaki primjer će biti dat kao popis kodova s komentarima.
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;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);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 nuliU 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.
Naučite programirati u 1C na mjestu iz moje knjige “Programiranje u 1C u 11 koraka”
Odličan vodič za razvoj u upravljanoj 1C aplikaciji, kako za početnike tako i za iskusne programere.
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.
Postoje dvije posebne metode za pretraživanje tablice vrijednosti:
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:
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:
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;
ValueTable.Columns.Add("Name");
Vrijednost Table.Columns.Add("Prezime");
NewLine.Name = "Vasily";
NewLine.LastName = "Pupkin";
FoundRow = ValueTable. Find(SearchValue);
FoundRow = ValueTable.Find(SearchValue, "Dobavljač, Kupac");
SearchStructure = Struktura("Zaposleni", SearchValue);
Niz pronađenih redova = ValueTable.FindRows(Struktura pretraživanja);
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;
ValueTable.Delete(Red za brisanje);
po indeksu
ValueTable.Delete(0);
ValueTable.Columns.Delete(ColumnDeleted);
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;
Tabela vrijednosti Popunite vrijednosti (Netačno, "Zastava fiskalnog računovodstva");
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();
Djelomični prijenos podataka za stupce s podudarnim nazivima:
Za svaki red izvorne tabele iz ciklusa izvorne tabele
FillPropertyValues(NewRow, SourceTableRow);
Kraj ciklusa
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;
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");
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"));
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);
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;
Ovo je jednostavna kombinacija i naš sto je spreman.
Za svaku kolonu iz ciklusa kolona
NewElement = Elements.Add(Ime kolone, Tip("FormField"), SelectionFieldTable);EndCycle;
NewElement.View = FormFieldView.InputField;
NewElement.DataPath = "Tabela rasporeda." + Column.Name;
NewElement.Width = 10;
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.