1c kreiranje tablice vrijednosti. Koje metode postoje i kako tražiti nekoliko vrijednosti istovremeno

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 varijabli "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(); NewLine.LastName = "Kotovsky"; 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). MyTZ.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 petlju ovog tipa, sa svakim prolazom petlje on dodeljuje jedan element iz naše kolekcije promenljivoj sa navedenim imenom, u ovom slučaju - jedan element kolekcije kolone tablice vrijednosti MyTZ.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 po njegovom broju (indeksu) i nabrajanje kolona pomoću 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 (Trenutni naziv kolone); 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. Pošto će tumač smatrati da mi ne pristupamo metodi, već svojstvu - 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 netačan način MyTZ.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.

Dobijanje podataka iz tablice 1C vrijednosti pomoću brojeva kolona

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”.

Hajde da malo zakomplikujemo naš primjer:

Prva linija = MyTK; // dobijamo prvi red (numeriran 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

Tako ć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 reda i stupaca:

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 (umetnite prazan red) 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 = MyTZ.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 kolone + ": " + 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 što je više 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 -radijus: 0px; -webkit-border-radius: 0px; porodica fontova: Arial, "Helvetica Neue", sans-serif; background-repeat: bez ponavljanja; background-position: centar; background-size: auto;) .sp-form ulaz (prikaz: inline-block; 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; border-style: solid; border-width: 1px; font-size: 15px; padding-left: 8.75px; padding-right: 8.75px; granica -radijus: 4px; -moz-border-radius: 4px; -webkit-border-radius: 4px; visina: 35px; širina: 100%;).sp-form .sp-field label (boja: #444444; font- veličina: 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%; težina fonta: 700; 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;)

(Ovaj članak pripada seriji članaka 1C od nule; programiranje 1C od nule; tabela 1C vrijednosti)

Virtuelna struktura skladištenja podataka u obliku tabele - to je ono što je

Tablica vrijednosti nije stalni objekt 1C baze podataka i ne pohranjuje se između sesija pokretanja.

Tabela vrijednosti 1C(TK) se kreira "u hodu" pomoću programskog koda, a zatim se rad s njim izvodi na isti način kao i sa bilo kojim drugim programskim objektom programskog jezika 1C. Korištenje poziva metoda i pristupanje svojstvima objekta tablice.

Drugim riječima, programer kreira tablicu u memoriji, popunjava je podacima, radi s njom, sortira, grupiše, izračunava ukupne vrijednosti itd. Prima potrebne podatke za dalju upotrebu.

Napravimo tablicu vrijednosti i ispunimo je nečim. Mora se imati na umu da se tablica 1C vrijednosti može kreirati ne samo ručno, pozivanjem operatera

NewValueTable;

Tabela vrijednosti je često rezultat poziva metode na drugom objektu, na primjer rezultat upita može biti izbačen u tablicu vrijednosti, itd.

Dozvolite mi da vam odmah dam jednostavan primjer.

// MyTZ = Nova tablica vrijednosti; // kreiramo novu tablicu vrijednosti pohranjenih u varijabli "MyTZ" MyTZ. Kolone. Dodaj("Prezime" ) ; // kreiraj kolonu "Prezime" MyTZ. Kolone. Dodaj("Ime"); // kreiramo kolonu "Name". Izvještaj (MyTZ); // prikazuje vrijednost MyTZ varijable //

Napravio sam tablicu 1C vrijednosti, sa dvije kolone: ​​“Prezime”, “Ime”. Procedura Izvještaj (MyTK)će prikazati tip varijable u prozoru poruke MyTZ: Tabela vrijednosti

Naša tabela vrijednosti je za sada prazna. Dodajmo mu nekoliko redova, sa imenom i prezimenom.

// ispuniti tablicu vrijednosti // dodajemo prvi red u našu tablicu vrijednosti Nova linija = MyTZ. Dodati() ; Nova linija. Prezime = "Sidorov" ; Nova linija. Ime = "Vasya" ; // dodajemo drugi red našoj tablici vrijednosti Nova linija = MyTZ. Dodati() ; Nova linija. Prezime = "Ivanov" ; Nova linija. Ime = "Petar" ;

Dobili smo ovakvu tabelu:

Treba zapamtiti: Brojevi redova u tabeli vrednosti počinju od nule

Zašto su nam uopšte potrebni brojevi linija? I tako da možemo pristupiti posebnom redu tablice vrijednosti, na primjer, uzmite i prikažite ovaj red na ekranu.

// *** prikazuje vrijednosti nulte linije na ekranu *** (u svakodnevnom životu obično brojimo stvari počevši od jedan, ali ovdje - od nule) // dobijamo nulti red naše tabele koristeći indeks reda u uglastim zagradama OurNullString = MyTZ[ 0] ; // sada je cijeli niz nula sadržan u varijabli "OurFirstLine" Izvještaj(NašNullString.Prezime) ; // prikazuje vrijednost kolone "Prezime" pohranjenu u nultom redu Izvještaj (OurNullString.Name) ; // prikazuje vrijednost kolone "Name" iz istog reda

Kao rezultat, na ekranu će se prikazati:

Sidorov Vasya

Sada, za vrlo pametno i sažeto, pokazat ću primjer koji vam omogućava pristup vrijednosti stupca u tom i tom redu (Vrijednost stupca u tom i tom redu je ćelija tablice vrijednosti Nezvaničan termin, ali zgodan). Ali bez upotrebe posredne varijable kao što je "OurZeroString".

Za prikaz vrijednosti ćelija iz drugog reda (ne zaboravite da je red drugi, ali indeks ovog reda je jedan, tako da numeriranje počinje od nule)

Konačno, poslednja tačka u ovom članku. Pokazao sam vam primjer pristupanja jednom redu tablice vrijednosti po indeksu (broju reda). Univerzalni oblik za čitanje ili dodjelu sadržaja ćelije je: "MyValueTable[RowNumber].ColumnName"

Sada ću vam dati ciklus kompletnog izlaza sadržaja tablice vrijednosti. Bez detaljnih objasnjenja, pa da se i vi razbijate pameti :)

// // prođe kroz petlju i prikaže sve redove naše tablice vrijednosti// Za LineNumber = 0 Prema MyTZ-u. Količina() - Izvještaj o 1 ciklusu (MyTZ[LineNumber] . Prezime) ; // prikazuje vrijednost stupca "Prezime". Izvještaj (MyTK[LineNumber] . Ime) ; // prikazuje vrijednost stupca "Name". EndCycle ;

Kao rezultat pokretanja ove petlje, na ekranu će biti prikazano sljedeće:

Sidorov Vasja Ivanov Petja

Ovdje sam vam rekao same osnove rada sa 1C tablicom vrijednosti. Ove informacije se odnose na 1C 8.0, 8.1, 8.2. Zanimljivi detalji o objektu "1C value table" se tu ne završavaju. Ovaj objekat ima ogromne mogućnosti za praktičan rad sa podacima. O tome ću govoriti u sljedećim člancima.

Degtyarev Roman.

Kako naučiti programirati u 1C od nule?

Kako raditi kao 1C programer i zaraditi do 150.000 rubalja mjesečno?

PRIJAVITE SE BESPLATNO

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 -radijus: 0px; -webkit-border-radius: 0px; porodica fontova: Arial, "Helvetica Neue", sans-serif; background-repeat: bez ponavljanja; background-position: centar; background-size: auto;) .sp-form ulaz (prikaz: inline-block; 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; border-style: solid; border-width: 1px; font-size: 15px; padding-left: 8.75px; padding-right: 8.75px; granica -radijus: 4px; -moz-border-radius: 4px; -webkit-border-radius: 4px; visina: 35px; širina: 100%;).sp-form .sp-field label (boja: #444444; font- veličina: 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%; težina fonta: 700; 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;)

Pozdrav svim čitaocima infostarta. Ovaj će članak biti posvećen pitanju kreiranja proizvoljne tablice vrijednosti na obliku upravljane aplikacije programski.

Karakteristike zadatka.

Svako ko je programirao u redovnoj aplikaciji često je bio suočen sa zadatkom da dobije proizvoljnu tablicu vrijednosti 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 (opišite, pa, ovo je, zapravo, suština same upravljane aplikacije). To je ono što ćemo pokušati učiniti: programski kreirati proizvoljnu tablicu vrijednosti na kontroliranom obrascu.

Rješenje 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 - ovisno o tome 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 moramo kreirati programsku tablicu vrijednosti koja sadrži 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 vrijednosti moraju imati neki tip. Ako se, na primjer, očekuje da će korisnik interaktivno popunjavati podatke u ovim stupcima, onda ne možete dodati stupac tablice vrijednosti samo imenom; ona mora imati tip. 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); ArrayKD = Novi niz; ArrayCD.Add(Type("Datum")); DescriptionTypesTime = New DescriptionTypes(ArrayCD,CD); TZ = Nova tablica vrijednosti;
TK.Columns.Add("With", DescriptionTypesTime);
TK.Columns.Add("Prije", DescriptionTypesTime);
TK.Columns.Add("Naziv");
TK.Columns.Add("Note"); // Puno ime i Napomena - redovi Zatim ćemo našu TK programsku tablicu popuniti potrebnim podacima. Dobijamo TK tablicu koja sadrži potrebne vrijednosti i spremna je za prijenos u kreirani atribut obrasca. Za svaku kolonu iz TK Ciklus kolona

Niz atributa.Dodaj(Novi atributi obrasca(Ime kolone,Tip vrijednosti stupca,"Tabela rasporeda"));
EndCycle;
ChangeDetails(Detalji niza);
SelectionFieldsTable = Elements.Add("TZN", Type("FormTable"));
SelectionFieldsTable.DataPath = "ScheduleTable";
SelectionFieldTable.Display = TableDisplay.List;

Ovo je jednostavna kombinacija i naš sto je spreman.

Za svaku kolonu iz TK Ciklus kolona

NewElement = Elements.Add(Ime kolone, Tip("FormField"), SelectionFieldTable);
NewElement.View = FormFieldView.InputField;
NewElement.DataPath = "Tabela rasporeda." + Column.Name;
NewElement.Width = 10;
EndCycle;

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 postupka:

&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 na obrascu kojim se može upravljati s komentarima koji će vam pomoći da kreirate vlastite tablice.

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, dobijanje 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 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 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 stupce 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 kolone 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 forme 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 tabela 1C 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.

Pitanje Kreiranje stupca tablice vrijednosti različitih tipova u 1C v8
Odgovori
Kada kreirate kolonu tablice vrijednosti, možete proći niz tipova, a možda i određeni tip. Niz tipova se koristi kada trebate navesti nekoliko različitih tipova za jednu kolonu.

Koristi se za označavanje tipova “opći objekt” - “Opis tipova”. Stoga ćemo prvo objasniti šta je “Opis tipova” (“Opis tipova vrijednosti”).

"Opis tipova vrijednosti". Da bi se opisali prihvatljivi tipovi vrijednosti svojstava različitih objekata u sistemu, koristi se poseban objekat "Opis tipova". Koristeći ovaj objekt, možete opisati važeće tipove vrijednosti koje se mogu dodijeliti svojstvima. Da bi se dalje ograničile moguće vrijednosti primitivnih tipova Broj, String i Datum su date kvalifikacije. Kvalifikatori opisuju parametre kao što su dužina niza ili broja, važeći dijelovi datuma, itd.

Sintaksa metode “Opis tipa”.

Nove vrste opisa(<Исходное описание типов>, <Добавляемые типы>, <Вычитаемые типы>, <Квалификаторы числа>, <Квалификаторы строки>, <Квалификаторы даты>)
Opcije:
<Исходное описание типов> (opciono)
Tip: DescriptionTypes. Početni opis tipova, na osnovu kojih će se graditi novi.
<Добавляемые типы> (opciono)
Tip: niz, niz. Niz vrijednosti tipa Tip koji se sastoji od tipova koji će se koristiti u objektu ili niz koji sadrži imena tipova odvojenih zarezima.
<Вычитаемые типы> (opciono)
Tip: niz, niz. Niz vrijednosti tipa (ili niz koji sadrži nazive tipova razdvojenih zarezima) koji se sastoji od tipova koji će biti isključeni iz početne deklaracije navedene u prvom parametru.
<Квалификаторы числа> (opciono)
Tip: QualifiersNumbers. Kvalifikatori brojeva koji opisuju važeće vrijednosti numeričkog tipa.
<Квалификаторы строки> (opciono)
Vrsta: QualifiersStrings. Kvalifikatori niza koji opisuju važeće vrijednosti tipa niza.
<Квалификаторы даты> (opciono)
Vrsta: QualifiersDates. Kvalifikatori datuma koji opisuju važeće vrijednosti tipa Datum.
Opis:
Kreira opis tipa na osnovu opisa drugog tipa, dodavanjem nekih tipova i isključivanjem drugih. Ako novi kvalifikator nije naveden, kvalifikatori originalne deklaracije tipa će biti zadržani.
Primjer korištenja objekta "Opis tipa":

// proširiti opis važećih tipova novim tipovima Niz = Novi niz; Niz. Dodaj (Tip( "Referentna veza. Metode")); Niz. Dodaj(Tip("Broj")); Znak = ValidSign. Non-negative; QuNumbers = Novi kvalifikatorski brojevi(10, 2, znak); ValidTypes = NewTypeDescription(ValidTypes, Array, KvNumbers);
Sada, zapravo, primjeri ispravnog kreiranja vrijednosti stupaca različitih tipova u tabeli.

Općenito, dovoljno je definirati tipove stupaca na sljedeći način:

TK. Kolone. Dodati( "Indeks sortiranja", New DescriptionTypes ("Broj") ) ; TK. Kolone. Add("SectionName", New TypeDescription("String") ) ; TK. Kolone. Add("DataCorr" , New TypeDescription("Date" ) ) ; TK. Kolone. Dodati( "Bezuslovno brisanje", New TypeDescription("Boolean")); TK. Kolone. Dodaj("Nomenklatura" , Novi opis tipa() ) ; TK. Kolone. Add("SectionData" , New TypeDescription("Structure" )) ; // primjer kreiranja stupaca "broj" i "string" s pojašnjenjem parametara: TK. Kolone. Dodati( "Percent Complete", Novi tipovi opisa ( "Broj" , Novi brojevi kvalifikacija ( 18 , 2 ) ) ); TK. Kolone. Add("SectionName" , NewTypeDescription("String" , , NewStringQualifiers(200, AllowedLength. Variable) ) ) ; TK. Kolone. Add("DecommissionedDate" , NewTypeDescription("Date" , , , NewDateQualifiers(DateParts.DateTime) ) ) ;

Međutim, općenito, niz se prosljeđuje kao tip stupca. Niz se koristi kada jednom stupcu treba dodijeliti nekoliko tipova. Tada će definicija strukture biti otprilike ovako (primjeri su dati za različite tipove stupaca, kada je tip niz, ali radi jednostavnosti, sastav niza je dat istog tipa, da se ne bi zbunili )

////// formiranje strukture tehničkih specifikacija (izrada kolona) //// definirati kvalifikatore za zamjenu u poljima kvalifikatora tehničke specifikacije CN = Novi kvalifikacioni brojevi(18, 9); KS = NewStringQualifiers(200); CD = NewDateQualifiers(DataParts.DateTime) ; //// definirati opise tipova za buduće TK stupce // Niz je početni opis tipova, na osnovu kojih će se izgraditi novi // Imajte na umu da je za TK stupce početni opis tipa u ovom primjeru niz Niz = Novi niz; Niz. Dodaj(Tip("String") ) ; TypeDescriptionString = Novi TypeDescription(Niz, , KS) ; Niz. Clear() ; Niz. Dodaj(Tip("Broj") ) ; TypeDescriptionNumber = Novi TypeDescription(Niz, , , CN) ; Niz. Clear() ; Niz. Dodaj(Tip("Datum") ) ; DescriptionTypesDate = New DescriptionTypes(Niz, , , , CD) ; Niz. Clear() ; Niz. Dodaj (Tip( "DirectoryLink.Nomenklatura") ) ; Tip DescriptionNomenclature = Novi opis tipa (niz) ; Niz. Clear() ; Niz. Dodaj (Tip( "DirectoryLink.SeriesNomenclature") ) ; TypeDescriptionSeries = Novi TypeDescription(Niz) ; Niz. Clear() ; Niz. Dodaj (Tip( "DirectoryLink.Quality") ) ; TypeDescriptionQuality = Novi TypeDescription(Niz) ; Niz. Clear() ; Niz. Dodaj(Tip("Boolean") ) ; TypeDescriptionBoolean = Novi TypeDescription(Niz) ; // zapravo dodavanje stupaca u TK (kreiranje strukture budućeg TK-a) TK. Kolone. Add("Nomenklatura", OpisTipoviNomenklatura) ; TK. Kolone. Add("Code" , TypeDescriptionString) ; TK. Kolone. Dodati( "Nomenklatura serije", DescriptionTypesSeries); TK. Kolone. Add("AccountCode" , Tip DescriptionString) ; TK. Kolone. Add("ActionDate" , TypeDescriptionDate) ; TK. Kolone. Add("Quality" , TypeDescriptionQuality) ; TK. Kolone. Dodaj("BrojUS", OpisTipoviBroj) ; TK. Kolone. Add("Write off" , TypeDescriptionBoolean) ; . . . //////// formiranje strukture tehničkih specifikacija (izrada kolona) ////////////////////////////////////////////////////////

Da biste dodali red u tablicu vrijednosti, pogledajte