Kako podesiti pametne telefone i računare. Informativni portal
  • Dom
  • Windows 8
  • 1s ciklus preko tablice vrijednosti. Koje metode postoje i kako istovremeno tražiti nekoliko vrijednosti

1s ciklus preko tablice vrijednosti. Koje metode postoje i kako istovremeno tražiti nekoliko vrijednosti

Tabela vrijednosti je specifični generički objekt za pohranjivanje podataka u prikazu tablice. Ključna razlika između tablica i objekata aplikacije je u tome što oni nisu vezani za fizičke tablice baze podataka. Tablica vrijednosti postoji samo u RAM-u, što, s jedne strane, pruža jedinstvene mogućnosti, as druge strane nameće određena ograničenja. Međutim, mogućnost interakcije s tablicom je usporediva s interakcijom s 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. Prelaskom na upravljanu aplikaciju, većina ove funkcionalnosti je zastarjela, ali sada može biti i element korisničkog sučelja, ali uz niz značajnih ograničenja.

Struktura tablice vrijednosti kao objekta

Svojstva tabele vrednosti su definisana kombinacijama dve unapred definisane kolekcije: njenih kolona i redova.

Tabela vrijednosti Kolone

Kolona tablice vrijednosti je njeno definirajuće svojstvo. To je skup kolona u tabeli koji određuje njenu strukturu. Kolone odgovaraju poljima fizičkih tabela ili kolonama tabelarnog odeljka ili dnevnika dokumenata koji su poznati iz korisničkog interfejsa. Kolona može imati interno ime, tip vrijednosti i naslov koji se prikazuje kada stupite u interakciju s tablicom.

Budući da su stupci zbirka objekata, možete dodavati, uklanjati i uređivati ​​stupce.

Red tabele vrednosti

Sa stanovišta programskog interfejsa, stringovi su zasebna kolekcija ugrađena u tabelu vrednosti. Oni su analogni zapisima fizičkih tabela, odnosno redovima tabelarnog dijela ili dnevnika dokumenata koji su poznati korisniku. Svaki red uzet zasebno 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 ​​()". Budući da su redovi glavna zbirka tablice vrijednosti, 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 stola od strane dizajnera

Glavna metoda koja vam omogućava da kreirate upravo takvu tablicu koja je potrebna programeru, nažalost, oduzima najviše vremena, jer zahtijeva ručno navođenje svih potrebnih svojstava tablice.

DemoTable = NewValuesTable; // Prije svega, inicijaliziramo TOR // Zatim definiramo potrebne parametre za nove stupce i dodamo ih u kolekciju // Kreiramo kolonu "Nomenklatura" Naziv = "Nomenklatura"; ValueType = NewDescription of Types ("ReferenceLink.Nomenclature"); Naslov = "Nomenklatura (proizvod)"; DemoTable.Columns.Add (Ime, ValueType, Title); // Kreirajte kolonu "Količina" Naziv = "Količina"; ValueType = NewTypeDescription ("Broj"); DemoTable.Columns.Add (Ime, ValueType); // Kao rezultat ovih manipulacija, kreirali smo praznu tablicu sa upisanim stupcima // Ako trebate koristiti preciznije kucanje primitivnih tipova, trebali biste koristiti proširenu sintaksu konstruktora "Description of Types"

Kreiranje tabele kopiranjem

Ako imate pri ruci referencu sa odgovarajućom strukturom i/ili sastavom, možete kopirati ili preuzeti referentnu tablicu vrijednosti. Ako je referenca druga tabela, onda je potrebno primijeniti metodu "Kopiraj referentne tablice". Ako imate posla sa tabelarnim odeljkom ili skupom registarskih zapisa, morate koristiti metodu "Unload Table of Values". Ako vam je potrebna samo struktura, onda možete koristiti metodu "CopyColumns".

// Mogućnost kopiranja svih redova iz tehničkog standarda, ali zadržavanje samo dvije navedene kolone Kolone standarda = "Nomenklatura, količina"; DemoTable = TableDefault.Copy (, ColumnDefault); // Opcija s kopiranjem unaprijed odabranih redova iz TZ šablona, ​​zadržavajući dvije navedene kolone. ColumnsStandard = "Nomenklatura, količina"; DemoTable = TableDefault.Copy (RowsDefault, ColumnDefault); // Opcija s kopiranjem redova iz TZ-standarda po navedenom filteru, zadržavajući jednu kolonu “Nomenklatura” // Svi redovi će biti odabrani gdje je vrijednost u stupcu Količina 0, samo će kolona Nomenklatura biti uključena u rezultirajuću tablicu ., 0); ColumnStandard = "Nomenklatura"; DemoTable = TableDefault.Copy (RowsDefault, ColumnDefault); // Opcija sa potpunim kopiranjem tabele i naknadnim brisanjem jednog reda sa vrednošću polja za količinu jednakom nuli i brisanjem cele kolone “Količina” Izbor redova = Nova struktura ("Količina", 0); ColumnStandard = "Nomenklatura"; DemoTable = TableDefault.Copy (RowsDefault, ColumnDefault); TableRow = DemoTable.Pronađi (0, "Količina"); DemoTable.Delete (TableRow); DemoTable.Columns.Remove ("Količina"); // Slične opcije i njihove modifikacije mogu se primijeniti na sekcije tablica i registarske skupove zapisa

Kreiranje tabele sa upitom

Ako baza podataka sadrži predložak za tabelu koja vam je potrebna, tada možete koristiti upit za brzo kreiranje tablice sa željenom strukturom.

// Primjer kreiranja prazne tabele na osnovu strukture registra akumulacije // Nije teško pogoditi da na ovaj način možete dobiti popunjenu tabelu Query = New Query ("IZABIR PRVI 0 * Iz registra akumulacije. Proizvodi u trgovini"); QueryResult = Query.Run (); DemoTable = QueryResult.Upload (); // Primjer kreiranja prazne tablice za eksplicitno specificirane tipove i imena polja Query = New Query; Query.Text = "IZABIR PRVO 0 | Vrijednost (Directory.Nomenclature.EmptyLink) KAO nomenklatura, | EXPRESS (0 KAO BROJ (15, 3)) KAO količina"; QueryResult = Query.Run (); DemoTable = QueryResult.Upload (); // BITAN! Ne zaboravite da tipovi vrijednosti stupaca dobivenih upitom uvijek sadrže tip Null // Dakle, tehnički zadatak kreiran upitom uvijek ima složene tipove stupaca

Zaključak

U ovom kratkom članku pokrili smo osnovna svojstva i najbolje prakse za kreiranje tablice vrijednosti, dovoljno da počnete i razumijete. Sam objekt tablice vrijednosti toliko je višestruk da detaljan opis njegovih mogućnosti zahtijeva pisanje posebnog članka o tehnikama i metodama rada.

Tablica vrijednosti u platformi 1C 8.3 (8.2) je univerzalna zbirka vrijednosti koje programer može koristiti u razvoju softvera za implementaciju svojih algoritama. U stvari, tabela 1C vrijednosti je dinamički skup vrijednosti koji ima stupce i stupce.

Članci o drugim univerzalnim zbirkama vrijednosti u 1C

Naučite programiranje u 1C na mjestu iz moje knjige "Programiranje u 1C u 11 koraka"

  1. Knjiga je napisana jasnim i jednostavnim jezikom - za početnike.
  2. Naučite razumjeti arhitekturu 1C;
  3. Počet ćete pisati kod na 1C jeziku;
  4. Ovladati osnovnim tehnikama programiranja;
  5. Učvrstiti stečeno znanje uz pomoć knjige zadataka;

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

  1. Veoma pristupačan i razumljiv jezik prezentacije
  2. Knjiga se šalje e-mailom u PDF formatu. Može se otvoriti na bilo kom uređaju!
  3. Razumjeti ideologiju aplikacije kojom se upravlja 1C
  4. Naučite kako razviti upravljanu aplikaciju;
  5. Naučite razvijati kontrolirane 1C obrasce;
  6. Bićete u mogućnosti da radite sa glavnim 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 se pokazalo korisnom, onda možete podržati moj projekt prijenosom bilo kojeg iznosa:

možete platiti ručno:

Yandex.Money - 410012882996301
Web Money - R955262494655

Pridružite se mojim grupama.

Potražite u tabeli 1C vrijednosti

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

Postoje dvije posebne metode za traženje vrijednosti u tabeli:

1. Pronađite

Horizon TV = Referentne knjige.Nomenklatura.FindByName ("Horizon TV");
FoundString = TKNomenklatura. Pronađi (TV Horizon);
// također možemo odrediti u kojim stupcima tražiti da bismo ubrzali pretragu
FoundString = TKNomenklatura. Pronađi (TV Horizont, "Nomenklatura");

Ova metoda vraća prvi pronađeni niz sa željenom vrijednošću, ili Undefined ako nije. Stoga je zgodno koristiti ga za pronalaženje jedinstvenih vrijednosti, jer u suprotnom, kada pronađete vrijednost, uklonite je iz tabele da biste pronašli sljedeću.

Da ne biste patili ovako, postoji sljedeća metoda koja vam omogućava da pronađete niz podudarnih nizova:

2. FindStrings


StructureSelection.Insert ("Nomenklatura", TV Horizon); // prvo odredimo 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 redu niza ili, kao u prethodnoj metodi, za pronađeni red, promijenit ćete vrijednost u obrađenoj tablici vrijednosti.

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


Okvir za odabir = Nova struktura;
StructureSelection.Insert ("Nomenklatura", TV Horizon);
Struktura selekcije Insert ("Količina", 10);
FoundArrayStrings = TZNomenclature.FindStrings (SelectionStructure);

Jedini nedostatak, kao što vidite, ne možete koristiti druge vrste poređenja osim "jednako"

Evo male činjenice za početak - jednostavni primjeri rada s tablicom vrijednosti:

1. Kreirajte tablicu vrijednosti

ValuesTable = Nova Tabela vrijednosti;


2. Kreirajte stupce tablice vrijednosti:

ValuesTable.Columns.Add ("Naziv");
ValuesTable.Columns.Add ("Prezime");


3. Dodajte nove redove koristeći nazive kolona:


NewStroka.Name = "Vasily";
NewStroka.Surname = "Pupkin";


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

FoundString = ValueTable. Find (LookupValue);


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

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


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

SearchStructure = Struktura ("Zaposleni", LookupValue);
ArrayFoundStrings = ValueTable.FindStrings (SearchStructure);


Kreirajmo strukturu pretraživanja čiji će svaki element sadržavati ime kolone kao ključ i željenu vrijednost u ovoj koloni kao vrijednost. Prodajemo SearchStructure kao parametar metodi FindStrings (). Kao rezultat, dobijamo redove tabele.
Ako strukturi pretraživanja dodamo pretragu tražene vrijednosti, na primjer, u stupac Odgovorni, tada kao rezultat korištenja metode FindStrings () dobivamo sve retke u kojima su i zaposlenik i odgovorni jednaki željenom vrijednost.

7. Kako iterirati tabelu vrijednosti slučajnim redoslijedom

Za svaki trenutni red iz petlje tablice vrijednosti
Izvještaj (CurrentString.Name);
Kraj ciklusa;

Ista stvar koristeći indekse:

MajorIndex = ValueTable.Quantity () - 1;
Za MF = 0 do ciklusa glavnog indeksa
Izvještaj (TableValues ​​[Count] .Name);
Kraj ciklusa;


8. Brisanje postojećeg reda tablice vrijednosti

ValuesTable.Delete (DeletedString);

po indeksu

ValuesTable.Remove (0);


9. Brisanje postojeće kolone tablice vrijednosti

ValuesTable.Columns.Remove (DeletedColumn);


po indeksu

ValuesTable.Columns.Remove (0);

Treba imati na umu da će brisanje reda (ili stupca) "iz sredine" tablice vrijednosti dovesti do smanjenja indeksa redova koji su bili "nakon" brisanja za jedan.

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

NewRow = ValuesTable.Add ();
NewString [ColumnName] = Vrijednost;


11. Kako popuniti celu kolonu tabele vrednosti potrebnom vrednošću?
Kolona FiscalAccount Flag u tabeli vrednostiValuesTable mora biti popunjena sa vrednošću False

ValuesTable.FillValues ​​(False, "FiscalAccounting Flag");


Primijenite metodu FillValues ​​() na tablicu vrijednosti. Prvi parametar je vrijednost koju treba popuniti. Drugi parametar je naziv kolone koju treba popuniti.

12. Kako popuniti tabelu vrijednosti "RecipientTable" podacima tabele 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

ReceiverTable = SourceTable.Copy ();


Druga opcija: tablica TableRecipient postoji i šteta je izgubiti svoje kolone i ograničenja na tipove podataka kolona. Ali morate popuniti podatke za stupce čiji se nazivi podudaraju s imenima izvorne tablice.

Djelomični prijenos podataka za stupce s podudarnim nazivima:

Za svaki red izvorne tabele iz petlje 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 se nazivi poklapaju sa imenima kolona u originalnoj tabeli.

Ako tabele nemaju kolone sa istim imenima, sekundarna tabela će sadržati onoliko redova sa praznim vrednostima koliko i redova u izvornoj tabeli.
Ako za neke kolone istog imena tip vrijednosti podataka iz izvorne tablice ne spada u niz dozvoljenih tipova kolona prijemne tablice, dobićemo prazne vrijednosti u takvim poljima.
Razmotrimo treći slučaj. U slučaju kolona istog imena, kolona prijemne tabele mora biti u potpunosti usklađena sa kolonom izvorne tabele.

Potpuna kopija podataka za stupce s podudarnim imenima

Istoimeni stupci = Novi niz ();

Za svaku kolonu iz izvorne tabele. Petlja kolona
MatchingColumn = TableRecipient.Columns.Find (Ime kolone);

Ako MatchingColumn<>Nedefinirano Onda

// Dobivamo svojstva kolone.
Ime = Column.Name;
ValueType = Column.ValueType;
Naslov = Column.Heading;
Širina = Column.Width;

// Zamijenite stupce u prijemnoj tablici.
Indeks = TableReceiver.Columns.Index (MatchingColumn);

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

// Dodajte sljedeće ime odgovarajućih stupaca u niz.
Kolone istog imena.Dodaj (Ime kolone);

EndIf;

Kraj ciklusa;

// Petlja kroz redove izvorne tabele.
Za svaki red izvorne tabele iz petlje izvorne tabele

// Dodaj novi red u tablicu primatelja.
NewRow = TableRecipient.Add ();

// Popuni vrijednosti u odgovarajućim ćelijama.
Za svaki naziv kolone iz petlje sličnih kolona
NewRow [ColumnName] = SourceTableRow [ColumnName];

Kraj ciklusa;

Kraj ciklusa;


Morat ćemo zamijeniti kolonu u prijemnoj 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 dodajte novi red u prijemnu tabelu i otvorite petlju za ponavljanje imena kolona u nizu odgovarajućih kolona.
Unutar ove ugniježđene petlje popunjavamo ćelije prijemne tablice podacima ćelije izvorne tablice.

13. Kako dodati kolone u tablicu vrijednosti "ValuesTable" sa ograničenjima po tipu?

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

Dodavanje stupca bez specificiranja tipa podataka

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


Možete popuniti vrijednost drugog parametra. Opis tipa dozvoljenog za kolonu mora biti proslijeđen tamo. Sam opis se može dobiti pomoću konstruktora, prosljeđujući potonjem kao parametar ime tipa stringa (ako postoji mnogo tipova, onda ih odvojite zarezima) ili niz prihvatljivih tipova.

Dodavanje kolone koja označava tip podataka

// Ograničenja na tipove podataka stupaca:
// Samo elementi traženja "Izvođači".
TableValues.Columns.Add ("Counterparty", Novi opis tipova ("DirectoryLink.Contractors"));


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

Korištenje kvalifikatora za kvalificiranje tipa podataka kolone vrijednosti tablice

// Pripremiti i postaviti ograničenja za podatke tipa String.
Kvalifikatori niza = Kvalifikatori novog niza (20, ValidLength.Variable);
AllowedTypes = NewTypeDescription ("String", StringQifiers);
ValuesTable.Columns.Add ("NoteStringShort", AllowedTypes);


Isto možete učiniti za kvalifikatore datuma i datuma.
Imajte na umu: opis tipa konstruktor može izgraditi i "od nule", a kao osnovu možete koristiti postojeći opis tipa.

Korištenje postojećih opisa tipova za određivanje tipa podataka kolone tablice vrijednosti

// Proširenje prethodno korištenog opisa tipa.
Broj kvalifikatora = Novi broj kvalifikatora (10, 2, ValidSign.Non-negative);
Kvalifikatori datuma = Novi kvalifikatori datuma (DateParts.Date);
ExtendedAllowedTypes = NewTypeDescription (AllowedTypes, "Broj, Datum", Kvalifikatori broja, Kvalifikatori datuma);

ValuesTable.Columns.Add ("Napomena", ExtendedAllowedTypes);

Top srodni članci