Kako bi se uzeli u obzir novac i roba, različite tabele se široko koriste u poslovanju. Skoro svaki dokument je tabela.

U jednoj tabeli je navedena roba koja se otprema iz skladišta. U drugoj tabeli - obaveza plaćanja ove robe.

Stoga u 1C rad sa tablicama zauzima istaknuto mjesto.

Tabele u 1C nazivaju se i "dijelovi stola". Priručnici, dokumenti i ostalo ih imaju.

Upit vraća tabelu kao rezultat njegovog izvršenja, kojoj se može pristupiti na dva različita načina.

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

//Opcija 1 - sekvencijalni pristup rezultatima upita

// dobiti tablicu
Selection = Query.Execute().Select();
// zaobići sve redove rezultata upita po redu
Dok Selection.Next() petlja
Izvještaj(Izbor.Naziv);
EndCycle;

//Opcija 2 - učitavanje u tablicu vrijednosti
Upit = Novi upit("IZABIR Naziv IZ Direktorija.Nomenklature");
// dobiti tablicu
Tabela = Query.Execute().Upload().
// tada također možemo zaobići sve linije
Za svaki red iz petlje tabele
Izvještaj(String.Name);
EndCycle;
//ili proizvoljno pristupiti nizovima
String = Table.Find("Lopata", "Ime");

Važna karakteristika je da će u tabeli koja se dobije iz rezultata upita, sve kolone biti snažno otkucane. To znači da ćete zahtjevom za polje Ime iz pretraživanja nomenklature dobiti stupac tipa String s dozvoljenom dužinom od najviše N znakova.

Tabela na obrascu (debeli klijent)

Korisnik radi sa tabelom kada je postavljena na obrazac.

O osnovnim principima rada sa formama razgovarali smo u lekciji i u lekciji dalje

Dakle, stavimo tabelu na obrazac. Da biste to uradili, možete prevući tabelu sa kontrolne table. Slično, možete odabrati kontrolu Obrazac/Umetanje iz menija.

Podaci se mogu pohraniti u konfiguraciji - tada trebate odabrati postojeći (prethodno dodan) tabelarni dio konfiguracijskog objekta čiji obrazac uređujete.

Kliknite na dugme "..." u svojstvu Podaci. Da biste vidjeli listu tabelarnih dijelova, potrebno je proširiti granu Objekt.

Prilikom odabira tabelarnog dijela, 1C će sam dodati kolone u tablicu na obrascu. Nizovi koje je korisnik uneo u takvu tabelu biće automatski sačuvani zajedno sa direktorijumom/dokumentom.

U istom svojstvu podataka možete unijeti proizvoljno ime i odabrati tip ValueTable.

To znači da je odabrana proizvoljna tablica vrijednosti. Neće automatski dodavati kolone, neće se automatski čuvati, ali s njim možete raditi šta god želite.

Desnim klikom na tabelu možete dodati kolonu. U svojstvima stupca možete odrediti njegovo ime (za referencu u 1C kodu), naslov stupca na obrascu, vezu s atributom tabelarnog dijela (potonji - ako nije proizvoljna tablica, već tabela dio je odabran).

U svojstvima tabele na obrascu možete odrediti da li korisnik može dodavati/brisati redove. Napredniji obrazac je potvrdni okvir ViewOnly. Ova svojstva su korisna za organiziranje tabela namijenjenih za prikaz informacija, ali ne i za uređivanje.

Da biste upravljali tabelom, morate prikazati komandnu tablu na obrascu. Izaberite stavku menija Form/Insert Control/Command Panel.

U svojstvima komandne trake potvrdite izbor u polju za potvrdu Autocomplete tako da se dugmad na traci sa alatkama pojavljuju automatski.

Tabela na obrascu (tanki/upravljani klijent)

Na upravljanom obrascu ove akcije izgledaju malo drugačije. Ako trebate postaviti tabelarni dio na obrazac, proširite granu Objekt i povucite jedan od tabelarnih odjeljaka ulijevo. I to je to!

Ako trebate postaviti tablicu vrijednosti, dodajte novi atribut obrasca i navedite tip u njegovim svojstvima - tablicu vrijednosti.

Da dodate kolone, koristite meni desnom tipkom miša na ovom atributu obrasca, stavci Dodaj kolonu atributa.

Zatim povucite tabelu ulijevo.

Da bi tabela imala komandnu traku, u svojstvima tabele izaberite vrednosti u odeljku Upotreba - Položaj komandne trake.

Izvoz tabele u Excel

Bilo koja 1C tabela koja se nalazi na obrascu može se odštampati ili učitati u Excel.

Da biste to uradili, kliknite desnim tasterom miša na prazan prostor u tabeli i izaberite Prikaži listu.

U upravljanom (tankom) klijentu, slične radnje se mogu izvesti pomoću stavke menija Sve akcije/Prikaži listu.

Pretražite u tabeli vrijednosti 1C

Koje metode postoje i kako tražiti više vrijednosti u isto vrijeme.

Postoje dvije posebne metode za pretraživanje tablice vrijednosti:

1. Pronađite

TVHorizon = Directories.Nomenclature.FindBy Name("Horizon TV");
FoundString = TZNomenclature.Find(TVHorizon);
//također možemo odrediti u kojim stupcima da tražimo da bismo ubrzali pretragu
FoundString = TKNomenclature.Find(TVHorizon, "Nomenklatura");

Ova metoda vraća prvi pronađeni niz sa vrijednošću koju tražite, ili Undefined ako je ne pronađe. Stoga je zgodno koristiti ga za traženje jedinstvenih vrijednosti, jer u suprotnom, kada pronađete vrijednost, morat ćete je izbrisati 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 odgovarajućih nizova:

2. FindStrings


Selection Structure.Insert("Nomenklatura", TVHorizon); // prvo odredimo kolonu gdje da tražimo, a zatim šta da tražimo.

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 liniji niza ili, kao u prethodnoj metodi, za pronađenu liniju, promijenit ćete vrijednost u obrađenoj tablici vrijednosti.

Ono što je još dobro u vezi ove metode je to što može pretraživati ​​nekoliko kolona tablice vrijednosti odjednom:


SelectionStructure = Nova struktura;
Selection Structure.Insert("Nomenklatura", TVHorizon);
Struktura odabira.Insert("Količina", 10);
FoundStringArray = TKNomenclature.FindStrings(SelectionStructure);

Jedina negativna, 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

ValueTable = Nova tablica vrijednosti;


2. Kreirajte stupce tablice vrijednosti:

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


3. Dodajte nove redove koristeći nazive kolona:


NewString.Name = "Vasily";
NewRow.LastName = "Pupkin";


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

FoundString = ValueTable.Find(LookupValue);


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

FoundString = ValueTable.Find(LookupValue, "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 naziv kolone kao ključ i traženu vrijednost u ovoj koloni kao vrijednost. Mi prosljeđujemo strukturu pretraživanja kao parametar metodi FindStrings(). Kao rezultat, dobijamo redove tabele.
Ako strukturi pretraživanja dodamo traženje željene vrijednosti, 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 željenom vrijednost.

7. Kako proći kroz tabelu vrijednosti slučajnim redoslijedom

Za svaku petlju CurrentRow iz ValueTable
Izvještaj(CurrentLine.Name);
EndCycle;

Uradite isto koristeći indekse:

SeniorIndex = ValueTable.Count() - 1;
Za MF = 0 prema ciklusu SeniorIndex
Izvještaj(Tablica vrijednosti[Broj].Naziv);
EndCycle;


8. Brisanje reda postojeće tablice vrijednosti

ValueTable.Delete(RemoveRow);

po indeksu

ValueTable.Delete(0);


9. Brisanje postojeće kolone tablice vrijednosti

ValueTable.Columns.Delete(RemoveColumn);


po indeksu

ValueTable.Columns.Delete(0);

Mora se uzeti u obzir da će brisanje reda (ili stupca) "iz sredine" tablice vrijednosti dovesti do smanjenja za jedan od indeksa redova koji su "nakon" brisanja

10. Kako popuniti tabelu vrijednosti ako su imena kolona sadržana u varijablama?

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


11. Kako popuniti cijelu kolonu tabele vrijednosti željenom vrijednošću?
Stupac FiscalAccounting Flag u tablici vrijednosti u tablici vrijednosti mora biti popunjen vrijednošću False

ValueTable.FillValue(False, "Zastavica fiskalnog računovodstva");


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

12. Kako popuniti tabelu vrijednosti "TableRecipient" podacima tabele vrijednosti "SourceTable"?

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

TableReceiver = TableOriginal.Copy();


Druga opcija: tablica TableReceiver postoji i šteta je izgubiti svoje stupce i ograničenja na tipove podataka stupaca. Ali morate popuniti podatke za kolone čija imena odgovaraju imenima izvorne tabele.

Djelomični prijenos podataka za stupce s podudarnim nazivima:

Za svaki red izvorne tabele iz petlje izvorne tabele
FillPropertyValues(NewString, SourceTableString);
EndCycle


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

Ako tabele nemaju kolone sa istim imenom, odredišna tabela će završiti sa 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 kolone odredišne ​​tablice, dobićemo prazne vrijednosti u takvim poljima.
Hajde da razmotrimo treći slučaj. U slučaju kolona s istim imenom, stupac odredišne ​​tablice mora biti u potpunosti usklađen sa stupcem izvorne tablice.

Potpuna kopija podataka za stupce s podudarnim imenima

SimilarColumns = Novi niz();

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

If MatchedColumn<>Nedefinirano Onda

// Dobivamo svojstva stupca.
Ime = Column.Name;
ValueType = Column.ValueType;
Naslov = Column.Title;
Širina = Column.Width;

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

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

// Dodajte sljedeće ime odgovarajućih stupaca u niz.
Same-nameColumns.Add(Column.Name);

EndIf;

EndCycle;

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

// Dodaj novi red u odredišnu tabelu.
NewString = TableReceiver.Add();

// Popuni vrijednosti u odgovarajućim ćelijama.
Za svaku petlju NameColumns Of Same NameColumns
NewString[ColumnName] = SourceTableString[ColumnName];

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 nađe u tabeli primatelja, prikupljamo u varijablama sva svojstva za novu kolonu. Zatim izbrišite staru i kreirajte novu kolonu. Zatim prolazimo kroz redove izvorne tabele.
U petlji dodajemo novi red u tablicu primatelja i otvaramo petlju kroz imena kolona u nizu odgovarajućih kolona.
Unutar ove ugniježđene petlje popunjavamo ćelije tablice primatelja podacima ćelije izvorne tablice.

13. Kako dodati kolone u tablicu vrijednosti "Tabela vrijednosti" sa ograničenjima tipa?

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

Dodavanje stupca bez specificiranja tipa podataka

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


Možete popuniti vrijednost drugog parametra. Tamo je neophodno proslediti opis tipa dozvoljenog za kolonu. Sam opis se može dobiti korišćenjem konstruktora, prosleđujući naziv tipa stringa kao parametar potonjem (ako postoji mnogo tipova, onda odvojeno zarezima) ili nizom važećih tipova.

Dodavanje kolone koja specificira tip podataka

// Ograničenja na tipove podataka stupaca:
// Samo elementi direktorija "Izvođači".
ValueTable.Columns.Add("Account", New TypeDescription("ReferenceReference.Accounts"));


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 je to omogućeno kreiranjem objekta pomoću StringQualifiers konstruktora. Nadalje, ovaj objekat će se koristiti kao jedan od parametara TypeDescription konstruktora.

Korištenje kvalifikatora za specificiranje tipa podataka stupca tablice vrijednosti

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


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

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

// Proširenje prethodno korištenog opisa tipova.
Kvalifikatori broja = Kvalifikatori novih brojeva(10, 2, ValidSign.Non-negative);
DateQualifiers = New DateQualifiers(DateParts.Date);
ExtendedValidTypes = NewTypeDescription(ValidTypes, "Broj, Datum",NumberQualifiers,DateQualifiers);

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