1c dodavanje kolona u tablicu vrijednosti programski. Važno je nikada ne brkati svojstvo objekta i metodu objekta

Objavljeno 21. septembra 2011

Tabela vrijednosti 1C – dio 3. Metapodaci. Petlja kroz kolone tablice vrijednosti

U ovom članku ću vam reći kako raditi s tablicom vrijednosti „nepoznate“ strukture, kako iterirati kroz stupce tablice vrijednosti, kako izvući podatke iz stupaca i redova bez korištenja naziva stupaca. (Ovaj članak pripada seriji članaka 1C od nule; programiranje 1C od nule; tabela 1C vrijednosti)

Da bismo objasnili materijal i bili u mogućnosti da pokrenemo naše primjere koda "uživo", trebaju nam neki test tablica vrijednosti 1C. Neki od naših primjera će izvući podatke iz tablice vrijednosti, pa ćemo napraviti tabelu sa tri kolone “Prezime”, “Ime”, “Srednje ime” i u nju unijeti malu količinu podataka - čak 3 redovi :)

Dakle, napravimo probnu tablicu 1C vrijednosti i popunimo je:

MyTZ = Nova tablica vrijednosti; // kreiramo novu tablicu vrijednosti pohranjenih u varijablu "MyTZ" MyTZ.Columns.Add("Prezime"); // kreiramo kolonu "Prezime" MyTZ.Columns.Add("Name"); // kreiramo kolonu "Name" MyTZ.Columns.Add("Patronymic"); // kreiramo kolonu "Middle name" // dodamo prvi red u našu tablicu vrijednosti NewLine = MyTZ.Add(); NewString.LastName = "Chapaev"; NewLine.Name = "Vasily"; NewString.Middle name = "Ivanovich"; // dodajemo drugi red NewLine = MyTZ.Add(); NewString.LastName = "Dzeržinski"; NewRow.Name = "Felix"; NewString.Middle name = "Edmundovich"; // dodaj treći red NewLine = MyTZ.Add(); NewString.LastName = "Kotovski"; NewLine.Name = "Gregory"; NewString.Middle name = "Ivanovich";

Naša testna tabela se sastoji od tri kolone: ​​Ime, Prezime, Patronim; i ima tri popunjena reda s imenima heroja građanskog rata.

Prvi uzorak koda nabraja kolone 1C tablice vrijednosti kao kolekciju.

// prikazuje imena svih kolona TK-a za svaku kolonu From MyTZ.Columns Cycle Report("Ime kolone: ​​" + Column.Name); EndCycle;

Naš ciklus će prikazati sve nazive kolona u prozoru 1C poruke:

Ime kolone: ​​Prezime Ime kolone: ​​Ime Ime kolone: ​​Srednje ime

Vidimo da se za iteraciju kroz kolone koristi poseban ciklus iteracije kolekcije, sličan ciklusu iteracije reda (u prethodnom članku). MyTK.Columns- ovo je zbirka stupaca 1C tablice vrijednosti "MyTZ". Kolekcija sadrži objekte tipa "Kolona tablice vrijednosti" Svaki objekt ovog tipa je stupac tablice vrijednosti i sadrži svojstva i metode. Pristupanjem ovim svojstvima i metodama dobijamo potrebne informacije o jednoj koloni ili vršimo neke druge radnje sa njom.

Na primjer, pristup svojstvu "ime" (Column.Name) dobijamo ime tekuće kolone.

Skrećem vam pažnju na naslov serije: „Za sve Kolona Iz MyTZ.Culumn Cycle" Varijabla s imenom "kolona" izmislili smo mi. Nije potrebno koristiti isto ime. Ovu varijablu možete nazvati kako god želite, na primjer "MyCurrent Column" Tada bi gornji primjer izgledao ovako:

// prikazuje imena svih kolona TK-a za svaki MyCurrentColumn From MyTK.Columns Cycle Report("Ime kolone: ​​" + MyCurrentColumn.Name); EndCycle;

Kada izvršni podsistem 1C naiđe na ciklus ovog tipa, svakim prolazom ciklusa dodeljuje promenljivoj sa navedenim imenom jedan element iz naše kolekcije, u ovom slučaju - jedan element kolekcije kolone tablice vrijednosti MyTK.Columns Zatim pristupamo varijabli koja sadrži trenutni stupac i koristimo svojstvo "ime".

Predlažem da se pored naziva kolone prikaže broj svake kolone u kolekciji kolona:

// prikazuje broj i nazive svih stupaca tablice vrijednosti Za svaku kolonu From MyTZ.Columns Cycle ColumnNumber = MyTZ.Columns.Index(Column); // dobijemo broj kolone ColumnName = Column.Name; // dobijemo naziv kolone Report("Broj kolone:" +Broj kolone + "Naziv kolone: ​​" +Naziv kolone); EndCycle;

Sljedeći tekst će se prikazati u prozoru 1C poruke:

Broj kolone:0 Naziv kolone: ​​Prezime Broj kolone:1 Naziv kolone: ​​Ime Broj kolone:2 Naziv kolone: ​​Srednje ime

Imajte na umu da su stupci u tablici vrijednosti 1C numerirani počevši od nule, baš kao i redovi tablice vrijednosti.

Broj stupaca u tablici 1C vrijednosti

Da bismo saznali broj kolona u tabeli vrijednosti, koristimo metodu "Count()" za kolekciju kolona.

Broj kolona = MyTZ.Columns.Quantity(); Izvještaj (broj kolona);

Na ekranu će biti prikazan broj "3". Zaista, naša tabela ima tri kolone: ​​“Prezime”, “Ime”, “Patronim”

Dobivanje objekta stupca prema njegovom broju (indeksu) i nabrajanje stupaca korištenjem indeksa stupca

Napravimo ciklus pretraživanja kroz sve kolone tablice vrijednosti koristeći indekse kolona (brojeve). Zapamtite da numerisanje kolona počinje od nule. Stoga moramo povećati brojač ciklusa “Sch” sa nule na broj jednak broju kolona minus jedan.

Za račun = 0 By MyTZ.Columns.Quantity() - 1 Cycle CurrentColumn = MyTZ.Columns[Act]; Izvještaj (Trenutna kolona.Naziv); EndCycle;

Na ekranu ćemo dobiti sljedeće

Puno ime

Mislim da je ovaj primjer bio jasan. Okrenuli smo se metodi Količina() kolekcije kolumni" MyTZ.Columns.Quantity()", dobio je broj kolona i započeo petlju sa brojačem od nula prije broj kolona minus jedan. Unutar petlje dobijamo svaku kolonu iz kolekcije kolona i dodeljujemo trenutni objekat kolone promenljivoj CurrentColumn Zatim, varijabla CurrentColumn pristupamo nekretnini Ime i prikažite vrijednost ovog svojstva na ekranu: Izvještaj (Trenutni naziv kolone);

Važno je nikada ne brkati svojstvo objekta i metodu objekta.

Svojstvo je određena statička vrijednost i pristup joj se piše bez zagrada, na primjer CurrentColumn.Name. Metoda je u suštini procedura ili funkcija objekta, a pozivi procedurama i funkcijama se uvijek pišu sa zagradama (čak i ako nema ulaznih parametara). Na primjer: MyTZ.Columns.Quantity()

Ako pristupimo metodi i zaboravimo napisati zagrade, 1C tumač će nam dati poruku o grešci i neće pokrenuti kod. Budući da će tumač smatrati da pristupamo svojstvu, a ne metodi - jer nema zagrada. Ali neće moći pronaći svojstva s tim imenom (jer postoji samo metoda s tim imenom) - što će biti navedeno u poruci o grešci.

Ovo će tumač napisati ako zaboravim da stavim zagrade u poziv metode na tako pogrešan način MyTK.Columns.Quantity(bez zagrada iza "Quantity()"):

Polje objekta nije pronađeno (Količina)

U ovom slučaju, „polje“ i „svojstvo“ treba shvatiti kao sinonime ili netačnost u terminologiji 1C programera. Oni koriste obje ove riječi da upućuju na isti koncept. Iako u drugim programskim jezicima ovi termini mogu značiti različite stvari.

Dobivanje podataka iz tablice 1C vrijednosti pomoću brojeva stupaca

Za početak, nudim vam jednostavan primjer dobivanja podataka iz prvog reda naše tabele. Imajte na umu da koristimo unaprijed popunjenu tabelu s početka članka. Sigurno znamo da tabela ima prvi red i barem jednu kolonu. Ako ovaj primjer primijenimo na praznu tablicu, pojavit će se greška. dakle:

Prva linija = MyTK; // dobijamo prvi red (numerisan od nule) FirstColumnValue = FirstRow; // dobijemo vrijednost prve kolone (numeracija kolona je također od nule) Report(Value of the FirstColumn); // prikazuje vrijednost prve kolone u prvom redu tablice

Na ekranu će se prikazati:

Chapaev

Prvo smo dobili objekt reda tablice vrijednosti pristupanjem tablici vrijednosti pomoću [...] operatora. (ako ste zaboravili kako to učiniti, možete pogledati prethodne članke) Proslijedili smo argument “0” unutar operatora. Ovo je indeks prvog reda tablice vrijednosti. Prva linija = MyTK;

Nadalje, također imamo pravo pristupa string objektu koristeći [...] operator. Unutar ovog operatora proslijedili smo broj kolone tablice vrijednosti, u ovom slučaju također “0”. I tako smo dobili vrijednost kolone pod brojem "0" za trenutni red tabele pod brojem "0". Ovu vrijednost smo prikazali na ekranu i ona predstavlja string “Chapaev”.

Zakomplikujmo malo naš primjer:

Prva linija = MyTK; // dobijamo prvi red (numerisanje od nule) Report(FirstLine); // prikazuje vrijednost prve kolone u prvom redu tabele Report(FirstRow); // prikazuje vrijednost druge kolone u prvom redu tabele Report(FirstRow); // prikazuje vrijednost treće kolone u prvom redu tabele

Sada smo prikazali vrijednosti iz sve tri kolone prvog reda naše tablice vrijednosti:

Čapajev Vasilij Ivanovič

Sada ću također modificirati ovaj primjer tako da možemo bez varijable "Prva linija"

Izvještaj (MyTZ); // prikazuje vrijednost prve kolone u prvom redu tabele Report(MyTZ); // prikazuje vrijednost druge kolone u prvom redu tabele Report(MyTZ); // prikazuje vrijednost treće kolone u prvom redu tabele

Isto će biti i na ekranu

Čapajev Vasilij Ivanovič

U gornjem primjeru smo vidjeli da za pristup vrijednosti koja se nalazi u određenom redu i određenoj koloni tablice vrijednosti, možemo koristiti sekvencijalni poziv dva operatora [...] u ovom obliku: Tabela vrijednosti[Indeks reda][Indeks kolone]

Dakle, spremni smo da kreiramo petlju i dobijemo podatke o svim redovima i svim kolonama koristeći indekse redova i kolona:

Za RowCounter = 0 By MyTZ.Quantity() - 1 Loop // kruži kroz redove Za ColumnCounter = 0 By MyTZ.Columns.Quantity() - 1 Loop // ugniježđena petlja kroz kolone // dobije vrijednost ćelije (iz trenutnog reda i trenutne kolone) CellValue = MyTK[RowCounter][ColumnCounter]; // prikazuje broj reda, broj kolone i vrijednost ćelije. Report("Row No" + Row Count + "Column No" + Column Count + " = " + CellValue); EndCycle; EndCycle;

Na ekranu će biti prikazano sljedeće:

Linija br. 0 kolona br. 0 = Chapaev Linija br. 0 kolona br. 1 = Vasilij Linija br. 0 kolona 2 = Ivanovič Linija br. 1 kolona br. 0 = Dzeržinski Linija br. 1 kolona br. 1 = Feliks Linija br. 1 kolona br. 2 = Edmundović Linija br. 2 kolona br. 0 = Kotovski Linija br. 2 kolona br. 1 = Grigorij Linija br. 2 kolona br. 2 = Ivanovič

Koristeći dva ciklusa, od kojih je jedan ugniježđen u drugi, prikazali smo vrijednosti svih stupaca iz svih redova 1C tablice vrijednosti. U ovom slučaju nismo koristili nazive stupaca, već smo stupcima i redovima pristupali po njihovim indeksima. Za više razumijevanja, obratite pažnju na komentare unutar primjera.

U zaključku, predlažem da malo promijenimo naš primjer tako da umjesto brojeva kolona, ​​na ekranu prikazuje njihova imena. I pored toga, napravit ću prezentabilniji dizajn za prikazivanje sadržaja na ekranu.

Za LineCounter = 0 By MyTZ.Quantity() - 1 Loop // petlja kroz redove Report(" ======= Br. reda " + LineCounter + " ======="); Prijaviti(" "); // feed (umetanje praznog reda) Za ColumnCounter = 0 By MyTZ.Columns.Quantity() - 1 Loop // ugniježđena petlja kroz stupce // dobijemo vrijednost ćelije (iz trenutnog retka i tekuće kolone) CellValue = MyTZ [RowCounter][ ColumnCounter]; // dobijemo ime kolone Ime kolone = MyTK.Columns[ColumnCounter].Name; // prikazuje naziv stupca i vrijednost ćelije Report(ColumnName + ": " + CellValue); EndCycle; Prijaviti(" "); // prijelaz na red (umetanje praznog reda) EndCycle;

Sada su na našem ekranu informacije počele izgledati reprezentativnije:

Linija br. 0 ======= Prezime: Čapajev Ime: Vasilij Patronim: Ivanovič ======= Linija br. 1 ======= Prezime: Dzeržinski Ime: Feliks Patronim: Edmundovič ===== == Linija br. 2 ======= Prezime: Kotovski Ime: Grigorij Patronim: Ivanovič

Da, skoro sam zaboravio. Kada koristimo dva [...][...] operatora u redu, možemo proslijediti ime ove kolone umjesto indeksa stupca: Tabela vrijednosti[Indeks reda][Naziv kolone]

Za LineCounter = 0 By MyTZ.Quantity() - 1 Loop // petlja kroz redove Report(" ======= Br. reda " + LineCounter + " ======="); Prijaviti(" "); // feed (umetanje prazne linije) Za ColumnCounter = 0 By MyTZ.Columns.Quantity() - 1 Loop // ugniježđena petlja kroz kolone ColumnName = MyTZ.Columns[ColumnCounter].Name; // dobijemo kolonu nameCell Value = MyTZ[RowCounter][ColumnName]; //

Obratite pažnju na liniju označenu strelicom ". U ovom redu, umjesto indeksa tekuće kolone, argumentu u uglastim zagradama prosljeđujemo naziv tekuće kolone [...] Rezultat će biti isti.

A sada, zadnja stvar u ovom članku.

ISPRAVNO dobivanje svih podataka iz tablice 1C vrijednosti koristeći petlje kroz kolekciju redaka i kolekciju stupaca

Za svaki CurrentLine From MyTZ Loop // petlja kroz kolekciju stringova Report(" ======= Line No. " + MyTZ.Index(CurrentLine) + " ======="); Prijaviti(" "); Za svaki CurrentColumn From MyTZ.Columns Loop // ugniježđena petlja iteracija kroz kolekciju kolona ColumnName = CurrentColumn.Name; // dobijemo kolonu nameCellValue = CurrentRow[ColumnName]; // dobijemo vrijednost ćelije PO stupcu NAME Report(Ime stupca + ": " + CellValue); // prikazuje naziv kolone i vrijednost ćelije End of Cycle; Prijaviti(" "); EndCycle;

U primjeru su korištene dvije petlje. Petlja za petlju kroz kolekciju kolona je ugniježđena unutar petlje za petlju kroz redove. Ako ste radili kroz gornje primjere i pročitali prethodne članke, onda nećete imati poteškoća s razumijevanjem kako ovaj primjer funkcionira.

Konačno, smanjit ću broj redova koda u našem posljednjem primjeru koliko god je to moguće eliminacijom upotrebe srednjih varijabli. Dobićemo uzorak "industrijskog koda" koji se koristi u stvarnim problemima.

Ovo bi trebalo da se radi samo kada dobro razumete šta radite. Ako je kod vrlo složen, onda je prihvatljivo ostaviti međuvarijable kako biste kasnije lakše razumjeli vlastiti kod. Također, svaki kod mora biti barem minimalno komentiran, kako bi nakon nekog vremena bilo lakše razumjeti tekstove programa.

Za svaku trenutnu liniju iz MyTZ ciklusa // iteracija po redovima Report(" ======= Br. reda " + MyTZ.Index(CurrentLine) + " =======" + Symbols.PS); Za svaki CurrentColumn iz MyTZ.Columns petlje // iteracija po stupcima Report(CurrentColumn.Name + ": " + CurrentRow[CurrentColumn.Name]); EndCycle; Prijaviti(" "); EndCycle;

Izlaz na ekranu se nije promijenio, ostaje isti kao u prethodnom primjeru:

KURS OD 2 SEDMICE

"PROGRAMIRANJE U 1C ZA POČETNIKE"

Kurs će biti poslat e-poštom. Postanite programer ispunjavanjem zadataka korak po korak.

Za učešće su vam potrebni samo računar i internet

Besplatan pristup kursu:

Sp-force-hide ( display: none;).sp-form ( display: block; background: #eff2f4; padding: 5px; širina: 270px; max-width: 100%; border-radius: 0px; -moz-border -radius: 0px-webkit-border-radius: font-family: "Helvetica Neue", sans-serif: ne-repeat-size: auto;) .sp-form input; neprozirnost: 1; vidljivost: vidljiva;).sp-form .sp-form-fields-wrapper ( margina: 0 auto; širina: 260px;).sp-form .sp -form-control (pozadina: #ffffff; border-). color: #cccccc: font-size: 8,75px; 4px; -webkit-border-radius: 4px; širina: 100%;).sp-form .sp-field label (boja: #444444; font- size: 13px; font-style: normal; font-weight: bold; ).sp-form .sp-button ( border-radius: 4px; -moz-border-radius: 4px; -webkit-border-radius: 4px; boja pozadine: #f4394c; boja: #ffffff; širina: 100% ; font-style: normalan; porodica fontova: Arial, "Helvetica Neue", sans-serif; box-shadow: nema; -moz-box-shadow: nema; -webkit-box-shadow: nema; pozadina: linear-gradient(to top, #e30d22 , #f77380);).sp-form .sp-button-container ( text-align: center; width: auto;)

Tablica vrijednosti na platformi 1C 8.3 (8.2) je univerzalna zbirka vrijednosti koje programer može koristiti tokom razvoja softvera za implementaciju svojih algoritama. 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 u mojoj knjizi “Programiranje u 1C u 11 koraka”

  1. Knjiga je napisana jasnim i jednostavnim jezikom - za početnike.
  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čan i razumljiv jezik prezentacije
  2. Knjiga se šalje elektronskom poštom u PDF formatu. Može se otvoriti na bilo kom uređaju!
  3. Razumjeti ideologiju upravljane 1C aplikacije
  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.

Evo male činjenice za početak - jednostavni primjeri rada s 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 FindLines() 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(Vrijednosti tabele[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 indeksa redova koji se nalaze "nakon" obrisanog za jedan.

10. Kako popuniti tabelu vrednosti 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 mogu 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 stupaca. 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.
Hajde da 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

// Dodajte novi red u odredišnu tabelu.
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 ima 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 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 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);

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

U jednoj tabeli je navedena roba koja se otprema iz skladišta. Druga tabela prikazuje obaveze plaćanja ove robe.

Stoga u 1C rad sa tablicama zauzima istaknuto mjesto.

Tabele u 1C nazivaju se i „tabelarni dijelovi“. Imenici, dokumenti i ostalo 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 redova 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

//uzmite sto
Odaberite = Query.Run().Select();
// prolazimo redom kroz sve redove rezultata upita
Dok Select.Next() petlja
Izvještaj(Izbor.Naziv);
EndCycle;

//Opcija 2 – učitavanje u tablicu vrijednosti
Zahtjev = Novi Zahtjev("IZABERI Ime IZ Direktorija.Nomenklature");
//uzmite sto
Tabela = Query.Run().Unload().
// nadalje možemo iterirati kroz sve redove
Za svaki red iz ciklusa tabele
Izvještaj(String.Name);
EndCycle;
//ili proizvoljno pristupiti nizovima
Red = Table.Find("Lopata", "Ime");

Važna karakteristika je da će u tabeli koja se dobija iz rezultata upita sve kolone biti striktno otkucane. To znači da ćete zahtjevom za polje Ime iz imenika Nomenklature dobiti stupac obrasca String sa 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 panela Kontrole. Slično, možete odabrati Form/Insert Control iz menija.

Podaci se mogu pohraniti u konfiguraciju - tada je potrebno 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.

Kada odaberete tabelarni dio, 1C će sam dodati kolone u tablicu na obrascu. Redovi koje korisnik unese u takvu tabelu biće automatski sačuvani zajedno sa referentnom knjigom/dokumentom.

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

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

Desnim klikom na tabelu možete dodati kolonu. U svojstvima kolone možete odrediti njen naziv (za referencu u 1C kodu), naslov stupca na obrascu, vezu s atributom tabelarnog dijela (potonji - ako nije odabrana proizvoljna tabela, već tabelarni deo).

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

Da biste upravljali tabelom, morate prikazati komandni panel na obrascu. Odaberite stavku menija Form/Insert Control/Command Bar.

U svojstvima komandne trake potvrdite izbor u polju za potvrdu Automatsko popunjavanje tako da se dugmad na panelu automatski pojavljuju.

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 dijelova ulijevo. To je sve!

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

Da biste dodali kolone, koristite meni desnim klikom na ovaj atribut obrasca, odaberite 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.

Učitavanje tabele u Excel

Bilo koja 1C tabela koja se nalazi na obrascu može se ispisati ili prenijeti u Excel.

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

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

 

Možda bi bilo korisno pročitati: