Dodajte stupac u tablicu vrijednosti 1c 8.2. Koje metode postoje i kako tražiti nekoliko vrijednosti istovremeno

Tablica vrijednosti je specifična univerzalni objekt, dizajniran za pohranu podataka u tabličnom obliku. Ključna razlika između tablice i aplikacijskih objekata je nedostatak vezanja na fizičke tablice baze podataka. Tablica vrijednosti postoji samo u RAM memorija, koji, s jedne strane, pruža jedinstvene mogućnosti, as druge nameće određena ograničenja. Ipak, mogućnosti interakcije s tablicom usporedive su s interakcijom s objektima koji stvarno postoje u bazi podataka.

Povijesno gledano, tablica vrijednosti u 1C ima dvostruku svrhu, budući da je virtualni analog postojećih tablica, ali je istovremeno i kontrolni element. S prelaskom na upravljanu aplikaciju, velik dio ove funkcionalnosti je zastario, ali sada također može biti element korisničkog sučelja, ali uz neka značajna ograničenja.

Struktura tablice vrijednosti kao objekta

Svojstva tablice vrijednosti određena su kombinacijama dviju unaprijed definiranih kolekcija: njezinih stupaca i redaka.

Tablica vrijednosti Stupci

Stupac tablice vrijednosti je njegovo definirajuće svojstvo. Skup stupaca tablice određuje njezinu strukturu. Stupci odgovaraju poljima fizičkih tablica ili stupaca poznatih iz korisničkog sučelja tabelarnog odjeljka ili dnevnika dokumenata. Stupac može imati interni naziv, vrstu vrijednosti i naslov koji se prikazuje prilikom interaktivnog rada s tablicom.

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

Red tablice vrijednosti

Iz perspektive softverskog sučelja, nizovi su zasebna zbirka ugrađena u tablicu vrijednosti. Oni su analogni zapisima u fizičkim tablicama, to jest redovima koji su korisniku poznati u tabelarnom odjeljku ili dnevniku dokumenata. Svaki pojedinačni red je objekt sa skupom imenovanih svojstava, čija imena odgovaraju nazivima stupaca tablice.

Stoga je interakcija s nizom 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()" koristi se za brisanje svih redaka tablice.

Napravite tablicu vrijednosti

Postoji mnogo načina da se tablica vrijednosti pripremi za upotrebu. Pogledajmo neke od njih. Svaki primjer bit će dostavljen kao popis kodova s ​​komentarima.

Izrada tablice pomoću konstruktora

Glavna metoda koja vam omogućuje stvaranje točno one tablice koju programer treba je, nažalost, najintenzivnija jer zahtijeva ručno određivanje svih potrebnih svojstava tablice.

DemoTable = Nova tablica vrijednosti; // Prije svega, inicijaliziramo TK // Zatim određujemo potrebne parametre za nove stupce i dodajemo ih u kolekciju // Stvaranje stupca "Nomenklatura" Name = "Nomenklatura"; ValueType = New TypeDescription("DirectoryLink.Nomenclature"); Naslov = "Nomenklatura (proizvod)"; DemoTable.Columns.Add(Name, ValueType, Header); // Kreiranje stupca "Količina" Name = "Količina"; ValueType = New TypeDescription("Broj"); DemoTable.Columns.Add(Name, ValueType); // Kao rezultat ovih manipulacija, stvorili smo praznu tablicu s upisanim stupcima // Ako trebate koristiti preciznije upisivanje primitivnih tipova, tada biste trebali koristiti proširenu sintaksu konstruktora "Opis tipova"

Izrada tablice kopiranjem

Ako pri ruci imate referencu odgovarajuće strukture i/ili sastava, možete kopirati ili preuzeti referentnu tablicu vrijednosti. Ako je referentna tablica druga tablica, tada morate koristiti metodu "Kopiraj referentne tablice". Ako se radi o tabelarnom dijelu ili skupu registarskih zapisa, morate koristiti metodu "Isčitaj tablicu vrijednosti". Ako trebate samo strukturu, možete koristiti metodu "Kopiraj stupce".

// Opcija s kopiranjem svih redaka iz standarda tehničke specifikacije, ali zadržavanjem samo dva navedena stupca standarda = "Nomenklatura, količina"; DemoTablica = TablicaEtalon.Kopiraj(, StupciEtalon); // Opcija s kopiranjem unaprijed odabranih redaka iz standarda tehničke specifikacije, uz očuvanje dva navedena stupca standarda = SelectIntoArrayReci koji su nam potrebni iz tablice standarda(); ColumnsStandard = "Nomenklatura, količina"; DemoTable = TableEtalon.Copy(RowsEtalon, ColumnsEtalon); // Mogućnost kopiranja redaka iz standarda tehničke specifikacije pomoću navedenog filtra, uz očuvanje jednog stupca “Nomenklatura” // Svi redovi u kojima je vrijednost u stupcu Količina 0 bit će odabrani, samo stupac Nomenklatura Odabir retka = Nova struktura(" Količina" pojavit će se u rezultirajućoj tablici , 0); ColumnsStandard = "Nomenklatura"; DemoTable = TableEtalon.Copy(RowsEtalon, ColumnsEtalon); // Opcija s potpunom kopijom tablice i naknadnim brisanjem jednog retka s vrijednošću polja količine jednakom nuli i brisanjem cijelog stupca “Odabir retka” = New Structure("Quantity", 0); ColumnsStandard = "Nomenklatura"; DemoTable = TableEtalon.Copy(RowsEtalon, ColumnsEtalon); TableRow = DemoTable.Find(0, "Količina"); DemoTable.Delete(TableRow); DemoTable.Columns.Delete("Količina"); // Slične opcije i njihove izmjene mogu se primijeniti na tablične dijelove i skupove registarskih zapisa

Izrada tablice s upitom

Ako predložak tablice koja vam je potrebna postoji u bazi podataka, tada možete upotrijebiti upit za brzo stvaranje tablice sa potrebnom strukturom.

// Primjer izrade prazne tablice na temelju strukture registra akumulacije // Lako je pogoditi da se na ovaj način može dobiti i popunjena tablica Query = New Query("SELECT FIRST 0 * From Accumulation Register. Products u skladištu"); RequestResult = Request.Execute(); DemoTablica = Rezultat upita.Istovar(); // Primjer kreiranja prazne tablice korištenjem eksplicitno navedenih tipova i naziva polja Query = New Query; Query.Text = "SELECT TOP 0 | Value(Directory.Nomenclature.EmptyLink) AS Nomenclature, | EXPRESS(0 AS NUMBER(15, 3)) AS Količina"; RequestResult = Request.Execute(); DemoTablica = Rezultat upita.Istovar(); // VAŽNO! Ne zaboravite da tipovi vrijednosti stupaca dobivenih iz zahtjeva uvijek sadrže tip Null // Dakle, TK stvoren zahtjevom uvijek ima kompozitne tipove stupaca

Zaključak

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

Za obračun novca i robe u poslovanju se široko koriste razne tablice. Gotovo svaki dokument je tablica.

U jednoj tablici navedena je roba za otpremu iz skladišta. Druga tablica prikazuje obveze plaćanja ove robe.

Stoga u 1C rad s tablicama zauzima istaknuto mjesto.

Tablice u 1C također se nazivaju "tabularnim dijelovima". Imenici, dokumenti i drugi ih imaju.

Upit, kada se izvrši, vraća tablicu kojoj se može pristupiti na dva različita načina.

Prvi - brži - odabir, dobivanje redaka iz njega moguće je samo redom. Drugi je učitavanje rezultata upita u tablicu vrijednosti i zatim nasumični pristup njoj.

//Opcija 1 – sekvencijalni pristup rezultatima upita

//uzmi tablicu
Odaberite = Query.Run().Select();
// prolazimo redom kroz sve retke rezultata upita
Dok Select.Next() Petlja
Izvješće(Odabir.Naziv);
EndCycle;

//Opcija 2 – učitavanje u tablicu vrijednosti
Zahtjev = Novi zahtjev("SELECT Name FROM Directory.Nomenclature");
//uzmi tablicu
Tablica = Query.Run().Unload().
//dalje također možemo prelaziti sve linije
Za svaki redak iz ciklusa tablice
Izvješće(String.Name);
EndCycle;
//ili proizvoljno pristupiti nizovima
Redak = Table.Find("Lopata", "Ime");

Važna značajka je da će u tablici koja se dobije iz rezultata upita svi stupci biti striktno tipizirani. To znači da ćete zahtjevom za polje Naziv iz imenika Nomenklatura dobiti stupac tipa String s dopuštenom duljinom od najviše N znakova.

Tablica na obrascu (debeli klijent)

Korisnik radi s tablicom kada je postavljena na obrazac.

O osnovnim principima rada s oblicima razgovarali smo u lekciji na i u lekciji na

Dakle, postavimo tablicu na obrazac. Da biste to učinili, možete povući tablicu s upravljačke ploče. Slično, možete odabrati Form/Insert Control iz izbornika.

Podatke je moguće pohraniti u konfiguraciju - tada je potrebno označiti postojeći (prethodno dodani) tablični dio konfiguracijskog objekta čiju formu uređujete.

Kliknite gumb "..." u svojstvu podataka. Da biste vidjeli popis tabelarnih dijelova, potrebno je proširiti granu Objekt.

Kada odaberete tabularni dio, 1C će sam dodati stupce u tablicu na obrascu. Reci koje korisnik unese u takvu tablicu automatski će se spremiti zajedno s referentnom knjigom/dokumentom.

U isto svojstvo podataka možete unijeti proizvoljan naziv i odabrati vrstu tablice vrijednosti.

To znači da je odabrana proizvoljna tablica vrijednosti. Neće automatski dodavati stupce, niti će se automatski spremati, ali s njim možete raditi što god želite.

Desnim klikom na tablicu možete dodati stupac. U svojstvima stupca možete navesti njegovo ime (za referencu u 1C kodu), naslov stupca na obrascu, vezu s atributom tabličnog dijela (potonji - ako nije odabrana proizvoljna tablica, već tablični dio).

U svojstvima tablice na obrascu možete odrediti može li korisnik dodavati/brisati retke. Napredniji oblik je potvrdni okvir Samo prikaz. Ova su svojstva prikladna za korištenje za organiziranje tablica namijenjenih prikazu informacija, ali ne i uređivanju.

Za upravljanje tablicom morate prikazati naredbenu ploču na obrascu. Odaberite stavku izbornika Form/Insert Control/Command Bar.

U svojstvima naredbene trake odaberite potvrdni okvir Automatsko popunjavanje tako da se gumbi na ploči pojavljuju automatski.

Tablica na obrascu (tanki/upravljani klijent)

Na u upravljivom obliku Ovi koraci izgledaju malo drugačije. Ako na obrazac trebate postaviti tabularni dio, proširite granu Objekt i povucite jedan od tabularnih dijelova ulijevo. To je sve!

Ako trebate postaviti tablicu vrijednosti, dodajte novi atribut obrasca iu njegovim svojstvima odredite tip – tablica vrijednosti.

Za dodavanje stupaca upotrijebite izbornik desnom tipkom miša na ovom atributu obrasca, odaberite Dodaj stupac atributa.

Zatim također povucite tablicu ulijevo.

Kako bi tablica imala naredbenu traku, u svojstvima tablice odaberite vrijednosti u odjeljku Upotreba – Položaj naredbene trake.

Prijenos tablice u Excel

Bilo koja 1C tablica koja se nalazi na obrascu može se ispisati ili učitati u Excel.

Da biste to učinili, desnom tipkom miša kliknite slobodan prostor u tablici i odaberite Popis.

U upravljanom (tankom) klijentu slične radnje mogu se izvršiti korištenjem stavke izbornika Sve akcije/Popis prikaza.

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

1. Napravite tablicu vrijednosti

ValueTable = Nova tablica vrijednosti;


2. Napravite stupce za tablicu vrijednosti:

ValueTable.Columns.Add("Ime");
Tablica vrijednosti.Columns.Add("Prezime");


3. Dodajte nove retke koristeći nazive stupaca:


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


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

PronađeniRed = Tablica Vrijednosti.Traži(VrijednostTraži);


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 tablici vrijednosti:
Koristimo strukturu pretraživanja.

SearchStructure = Structure("Zaposlenik", SearchValue);
Niz pronađenih redaka = Tablica vrijednosti.Pronalaženje redaka (Struktura pretraživanja);


Kreirajmo strukturu pretraživanja čiji će svaki element sadržavati naziv stupca kao ključ i željenu vrijednost u ovom stupcu kao vrijednost. Strukturu pretraživanja prosljeđujemo kao parametar metodi FindLines(). Kao rezultat toga, dobivamo retke tablice.
Ako u strukturu pretraživanja dodate traženje željene vrijednosti, na primjer, također u stupcu Odgovorni, tada ćemo kao rezultat primjene metode FindLines() dobiti sve retke u kojima su i Zaposlenik i Odgovorni jednaki tražena vrijednost.

7. Kako iterirati kroz tablicu vrijednosti nasumičnim redoslijedom

Za svaki trenutni redak iz petlje tablice vrijednosti
Izvješće(CurrentRow.Name);
EndCycle;

Ista stvar s indeksima:

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


8. Brisanje postojećeg retka tablice vrijednosti

ValueTable.Delete(Red za brisanje);

po indeksu

Tablica vrijednosti.Izbriši(0);


9. Brisanje postojećeg stupca tablice vrijednosti

ValueTable.Columns.Delete(ColumnDeleted);


po indeksu

Tablica vrijednosti.Stupci.Brisanje(0);

Potrebno je uzeti u obzir da će brisanje retka (ili stupca) "iz sredine" tablice vrijednosti dovesti do smanjenja za jedan u indeksima redaka koji se nalaze "nakon" izbrisanih

10. Kako popuniti tablicu vrijednosti ako su nazivi stupaca sadržani u varijablama?

NoviRed = Tablica Vrijednosti.Dodaj();
Novi red[naziv stupca] = vrijednost;


11. Kako cijeli stupac tablice vrijednosti ispuniti željenom vrijednošću?
Stupac zastavice fiskalnog računovodstva u tablici vrijednosti tablice vrijednosti mora biti popunjen vrijednošću False

Tablica vrijednosti. Ispunite vrijednosti (False, "Oznaka fiskalnog računovodstva");


Koristimo metodu FillValues() za tablicu vrijednosti. Prvi parametar je vrijednost koju treba ispuniti. Drugi parametar je naziv stupca koji treba ispuniti.

12. Kako mogu ispuniti tablicu vrijednosti “Tablica primatelja” podacima iz tablice vrijednosti “Izvorna tablica”?

Ako tablica primatelja još ne postoji u trenutku operacije ili njene prethodne stupce nije potrebno spremiti, možete je izraditi kao potpunu kopiju izvornika

Tablica primatelja = Izvorna tablica.Kopiraj();


Druga opcija: tablica ReceiverTable postoji i bila bi šteta izgubiti njezine stupce i ograničenja na tipove podataka stupaca. Ali trebate ispuniti podatke za stupce čija imena odgovaraju nazivima izvorne tablice.

Djelomični prijenos podataka za stupce s podudarnim nazivima:

Za svaki redak izvorne tablice iz ciklusa izvorne tablice
FillPropertyValues(NewRow, SourceTableRow);
Kraj ciklusa


Za svaki red u izvornoj tablici, novi red se dodaje u odredišnu tablicu i vrijednosti u tim stupcima se popunjavaju novi stol, čija imena odgovaraju imenima stupaca u izvornoj tablici

Ako tablice nemaju stupce s istim nazivima, odredišna će tablica na kraju sadržavati onoliko redaka s nultim vrijednostima koliko je bilo redaka u izvornoj tablici.
Ako za neke stupce istog imena tip vrijednosti podataka iz izvorne tablice ne spada u niz dopuštenih tipova stupaca u odredišnoj tablici, dobit ćemo prazne vrijednosti u takvim poljima.
Razmotrimo treći slučaj. U slučaju stupaca istog imena, stupac odredišne ​​tablice mora biti potpuno usklađen sa stupcem izvorne tablice.

Potpuno kopiranje podataka za stupce s podudarnim nazivima

Isti stupci = Novi niz();

Za svaki stupac iz izvorne tablice.Ciklus stupaca
MatchingColumn = TableReceiver.Columns.Find(Column.Name);

Ako MatchingColumn<>Nedefinirano Zatim

// Dobivanje svojstava stupca.
Naziv = Naziv stupca;
ValueType = Stupac.ValueType;
Zaglavlje = Stupac.Zaglavlje;
Width = Column.Width;

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

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

// Dodajte sljedeći naziv odgovarajućih stupaca u polje.
Same Columns.Add(Column.Name);

završi ako;

EndCycle;

// Kruži kroz retke izvorne tablice.
Za svaki redak izvorne tablice iz ciklusa izvorne tablice

// Dodavanje novog reda odredišnoj tablici.
NewRow = TableReceiver.Add();

// Ispunite vrijednosti u odgovarajućim ćelijama.
Za svaki naziv Stupci iz istoimenih stupaca Ciklus
NoviRed[ImeKolone] = Redak IzvorneTablice[ImeKolone];

EndCycle;

EndCycle;


Morat ćemo zamijeniti stupac u odredišnoj tablici s novim, čija će svojstva u potpunosti odgovarati stupcu izvorne tablice.
Stoga, ako se stupac istog imena pronađe u tablici primatelja, prikupljamo sva svojstva za novi stupac u varijablama. Zatim izbrišite stari i stvorite novi stupac. Zatim prolazimo kroz retke izvorne tablice.
U petlji dodajemo novi red tablici primatelja i otvaramo petlju nad nazivima stupaca u nizu podudarnih stupaca.
Unutar ove ugniježđene petlje ispunjavamo ćelije odredišne ​​tablice podacima iz ćelije izvorne tablice.

13. Kako dodati stupce u tablicu vrijednosti “ValueTable” s ograničenjima tipa?

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

Dodavanje stupca bez navođenja vrste podataka

// Dodavanje stupca bez ograničenja tipa.
ValueTable.Columns.Add("Object");


Možete ispuniti vrijednost drugog parametra. Tamo trebate proslijediti opis vrste dopuštene za stupac. Sam opis može se dobiti korištenjem konstruktora, prosljeđivanjem mu kao parametra imena niza tipa (ako postoji mnogo tipova, odvojenih zarezima) ili niza valjanih tipova.

Dodavanje stupca koji označava vrstu podataka

// Ograničenja tipova podataka stupaca:
// Samo elementi imenika "Druge strane".
Tablica vrijednosti.Stupci.Dodaj("Račun", Novi opis vrsta("Veza imenika.Računi"));


Ako je među vrstama dopuštenim za popunjavanje podataka stupca niz, možete ograničiti njegovu bitnu dubinu (dužinu), odrediti upotrebu varijabilne ili fiksne duljine. Sve se to postiže stvaranjem objekta pomoću konstruktora String Qualifiers. Zatim će se ovaj objekt koristiti kao jedan od parametara konstruktora TypeDescription.

Korištenje kvalifikatora za određivanje tipa podataka stupca tablice vrijednosti

// Priprema i postavljanje ograničenja za podatke tipa String.
Kvalifikatori niza = Novi kvalifikatori niza(20, AllowedLength.Variable);
ValidTypes = NewTypeDescription("String", StringQualifiers);
ValueTable.Columns.Add("NoteStringShort", ValidTypes);


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

Korištenje postojećih deklaracija tipa za navođenje tipa podataka stupca tablice vrijednosti

// Proširenje prethodno korištenog opisa tipa.
Kvalifikatorski brojevi = Novi kvalifikatorski brojevi(10, 2, ValidSign.Non-negative);
DateQualifiers = Novi DateQualifiers(DateParts.Date);
Extended ValidTypes = New TypeDescription(ValidTypes, "Broj, datum", kvalifikatori broja, kvalifikatori datuma);

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

Potražite u tablici 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 = Direktoriji.Nomenklatura.FindByName("TVHorizon");
FoundString = TZNomenclature.Find(TVHorizon);
//također možemo odrediti u kojim se stupcima traži da ubrzamo pretragu
FoundString = TZNomenclature.Find(TVHorizon, "Nomenclature");

Ova metoda vraća prvi pronađeni red sa željenom vrijednošću ili Nedefinirano ako ga ne pronađe. Stoga je prikladno koristiti ga za pretraživanje jedinstvene vrijednosti, jer u protivnom, kada je vrijednost pronađena, morat ćete je ukloniti iz tablice kako biste pronašli sljedeću.

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

2. Pronađite nizove


Struktura odabira.Insert("Nomenklatura", TVHorizon); // prvo navedite stupac gdje tražiti, a zatim što tražiti.

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

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


SelectionStructure = Nova struktura;
Struktura odabira.Insert("Nomenklatura", TVHorizon);
Struktura odabira.Insert("Količina", 10);
Pronađeni niz redaka = TZNomenclature.FindLines(SelectionStructure);

Jedina negativna stvar, kao što vidite, jest da ne možete koristiti druge vrste usporedbe osim "jednako"



Publikacije na temu