Pronađite stupac u tablici vrijednosti 1s. Važno je nikada ne brkati svojstvo objekta s metodom objekta.

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

1. Napravite tablicu vrijednosti

ValueTable = Nova tablica vrijednosti;


2. Napravite stupce tablice vrijednosti:

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


3. Dodajte nove retke koristeći nazive stupaca:


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


4. Kako tražiti vrijednost u tablici vrijednosti:
Potrebno je pronaći red tablice 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 tablici vrijednosti:
Koristimo strukturu pretraživanja.

SearchStructure = Structure("Zaposlenik", LookupValue);
ArrayFoundStrings = ValueTable.FindStrings(SearchStructure);


Kreirajmo strukturu pretraživanja čiji će svaki element sadržavati naziv stupca kao ključ i traženu vrijednost u tom stupcu kao vrijednost. Prosljeđujemo strukturu pretraživanja kao parametar metodi FindStrings(). Kao rezultat toga, dobivamo retke tablice.
Ako u strukturu pretraživanja dodamo traženje željene vrijednosti, npr. također u stupcu Odgovorni, tada ćemo primjenom metode FindRows() dobiti sve retke u kojima su i Zaposlenik i Odgovorni jednaki željenom vrijednost.

7. Kako proći kroz tablicu vrijednosti nasumičnim redoslijedom

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

Učinite isto koristeći indekse:

SeniorIndex = ValueTable.Count() - 1;
Za MF = 0 ciklusom SeniorIndex
Izvješće(Tablica vrijednosti[Broj].Naziv);
EndCycle;


8. Brisanje postojećeg retka tablice vrijednosti

Tablica vrijednosti.Izbriši(UkloniRed);

po indeksu

Tablica vrijednosti.Izbriši(0);


9. Brisanje postojećeg stupca tablice vrijednosti

Tablica vrijednosti.Stupci.Izbriši(UkloniStupac);


po indeksu

Tablica vrijednosti.Stupci.Brisanje(0);

Mora se uzeti u obzir da će brisanje retka (ili stupca) "iz sredine" tablice vrijednosti dovesti do smanjenja za jedan od indeksa redaka koji su bili "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 popuniti cijeli stupac tablice vrijednosti sa željenom vrijednošću?
Stupac FiscalAccounting Flag u tablici vrijednosti u tablici vrijednosti mora biti ispunjen vrijednošću False

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


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

12. Kako popuniti tablicu vrijednosti "TableRecipient" podacima iz tablice vrijednosti "SourceTable"?

Ako tablica primatelja još ne postoji u vrijeme operacije ili njezini prethodni stupci ne moraju biti spremljeni, možete je izraditi kao potpunu kopiju izvornika

TableReceiver = TableOriginal.Copy();


Druga opcija: tablica TableReceiver postoji i šteta je 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 petlje izvorne tablice
FillPropertyValues(NewString, SourceTableString);
Kraj ciklusa


Za svaki redak izvorne tablice, novi redak se dodaje odredišnoj tablici i vrijednosti se popunjavaju u onim stupcima nove tablice čiji nazivi odgovaraju nazivima stupaca u izvornoj tablici

Ako tablice nemaju stupce s istim nazivom, odredišna će tablica završiti s 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 stupca odredišne ​​tablice, dobit ćemo prazne vrijednosti u takvim poljima.
Razmotrimo treći slučaj. U slučaju stupaca s istim imenom, stupac odredišne ​​tablice mora biti potpuno usklađen sa stupcem izvorne tablice.

Potpuna kopija podataka za stupce s podudarnim nazivima

Slični stupci = Novi niz();

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

Ako se podudara Stupac<>Nedefinirano Zatim

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

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

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

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

Završi ako;

EndCycle;

// Prolazi kroz retke izvorne tablice.
Za svaki redak petlje SourceTable From SourceTable

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

// Ispunite vrijednosti u odgovarajućim ćelijama.
Za svaki NameColumns Of Same NameColumns Loop
NewString[ColumnName] = SourceTableString[ColumnName];

EndCycle;

EndCycle;


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

13. Kako dodati stupce u tablicu vrijednosti "Tablica vrijednosti" s ograničenjima tipa?

Kada dodajete stupac, možete jednostavno navesti njegovo ime i ne dirati drugi parametar metode Add(). 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 je potrebno proslijediti opis dopuštenog tipa za stupac. Sam opis može se dobiti korištenjem konstruktora, prosljeđivanjem naziva niza tipa kao parametra (ako postoji mnogo tipova, onda odvojenih zarezima) ili niza valjanih tipova.

Dodavanje stupca koji specificira vrstu podataka

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


Ako među vrstama dopuštenim za popunjavanje podataka u stupcu postoji niz, možete ograničiti njegovu bitnu dubinu (duljinu), odrediti korištenje varijabilne ili fiksne duljine. Sve je to omogućeno stvaranjem objekta pomoću StringQualifiers konstruktora. Nadalje, ovaj objekt će se koristiti kao jedan od parametara TypeDescription konstruktora.

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, ValidLength.Variable);
AllowedTypes = NewTypeDescription("String",StringQualifiers);
ValueTable.Columns.Add("NoteStringShort", ValidTypes);


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

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

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

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

Pozdrav svim čitateljima infostarta. Ovaj će članak biti posvećen problemu programskog stvaranja proizvoljne tablice vrijednosti u obliku upravljane aplikacije.

Značajke zadatka.

Svatko tko je programirao u redovnoj aplikaciji često se suočavao sa zadatkom dobivanja proizvoljne tablice vrijednosti na obrascu. Proizvoljna tablica vrijednosti podrazumijeva tablicu čiji broj i vrsta stupaca nije unaprijed poznat. Odnosno, mogu biti 3 stupca, ili možda 6, ili možda 8. U normalnoj aplikaciji sve je jednostavno: možete postaviti element "Tablica vrijednosti" na obrazac za obradu, a zatim programski prenijeti kreiranu tablicu vrijednosti ​na ovaj element. Zatim jednostavnom naredbom:

FormElements.TableField.CreateColumns();

da biste dobili gotovu tablicu vrijednosti na obrascu. Čini se da bi moglo biti lakše.

Sve je to bilo u normalnoj aplikaciji. Stvari su se promijenile u upravljanoj aplikaciji. Dakle, ne može se kreirati samo proizvoljna tablica. Sada trebate ili rigidno parametrizirati tablicu vrijednosti na obrascu ili je kreirati programski (da opišem, dobro, ovo je zapravo bit same upravljane aplikacije). Ovo ćemo pokušati učiniti: programski stvoriti proizvoljnu tablicu vrijednosti na upravljanom obrascu.

Rješenje problema.

Prvo što trebamo učiniti je odrediti kako će se tablica pojaviti na obrascu. Glavna stvar je da ne morate stvarati nikakav element obrasca u obradi. Izradit ćemo ga programski, kao i cijelu tablicu. Odnosno, tablica će biti opisana i kreirana u trenutku otvaranja obrasca ili uz pomoć gumba - tako vam treba.

Stvaranje tablice na obrascu događa se kroz opis tablice vrijednosti kao atributa:
ArrayChoiceType = Novi niz; ArrayChoiceType.Add(Type("ValueTable")); Opis vrste izbora = Novi opis vrste izbora (Niz vrste izbora); ArrayAttributes = Novi niz; ArrayAttributes.Add(New FormAttribute("ScheduleTable", ChoiceTypeDescription, "", "TRN")); Sada moramo stvoriti programsku tablicu vrijednosti koja sadrži podatke. Ako se tablica vrijednosti dobije iz upita, onda je sve više-manje u redu. Ako se tablica izrađuje ručno, tada se kroz "Opis tipova" može kreirati vrijednost stupaca koji će sadržavati brojeve ili datume. Zaključak je da stupci u tablici vrijednosti moraju imati neki tip. Ako se, na primjer, pretpostavlja da će korisnik interaktivno ispunjavati podatke u tim stupcima, tada ne možete dodati stupac tablice vrijednosti s jednostavnim nazivom, on mora imati vrstu. Imajte na umu - ovo je vrlo važno. te ćemo vrste prenijeti u tablicu na obrascu.
Napravite tablicu koja sadrži nekoliko stupaca:
CD = New DateQualifiers(DateParts.Time); ArrayCD = Novi niz; ArrayKD.Add(Type("Date")); TipOpisVrijeme = NoviTipOpis(NizKD,KD); TK = Nova tablica vrijednosti;
TK.Columns.Add("From", TypeDescriptionTime);
TK.Columns.Add("Prije", TypeDescriptionTime);
TK.Columns.Add("Naziv");
TK.Columns.Add("Note");//Name and Note - strings Zatim ćemo našu programsku tablicu TK popuniti potrebnim podacima. Dobivamo TK tablicu koja sadrži potrebne vrijednosti i spremna je za prijenos u kreirani atribut forme. Za svaki stupac iz TK.Petlja stupca

ArrayAttributes.Add(New FormAttribute(Column.Name, Column.ValueType,"ScheduleTable"));
EndCycle;
PromjenaAtributa(Atributi Niza);
SelectionFieldTable = Elements.Add("TZN", Type("FormTable"));
SelectionFieldTable.DataPath = "Tablica rasporeda";
SelectionFieldTable.Display = DisplayTable.List;

Evo tako jednostavne kombinacije i naš stol je spreman.

Za svaki stupac iz TK.Petlja stupca

NewElement = Elements.Add(Column.Name, Type("FormField"), ChoiceFieldTable);
NewItem.View = FormFieldView.InputField;
NewItem.DataPath = "Tablica rasporeda." + Ime stupca;
NewElement.Width = 10;
EndCycle;

Uvjetni dizajn, ako treba pišemo i ručno, komandni izbornik - ručno. Stolni rukovatelji također su napisani rukom. Na primjer, za dodavanje rukovatelja događajima za tablicu "Izbor":

ChoiceFieldTable.SetAction("Izbor","TCChoice");

Za obradu ovog događaja u obliku procedure, napisana je zasebna procedura:

&Kod klijenta
Procedura TSNSelect(TK, SelectedRow, Field, StandardProcessing)
//naredbe rukovatelja EndProcedure

Imajte na umu da se rukovatelji tablica aktiviraju na klijentu i stoga moraju imati naredbu pokazivača prevoditelja

&Kod klijenta

Pa, posljednja stvar koju sam htio dodati je da nakon svih ovih radnji ne smijemo zaboraviti prenijeti gotovu tablicu u atribut obrasca:

ValueVFormAttribute(TK, "Tablica rasporeda");

Evo što imamo kao rezultat:


A ovo je rukovanje događajem "Odaberi":



Pogovor.

Nadam se da će članak pomoći onim 1C programerima koji počinju programski stvarati tablice na obrascu.

Možete preuzeti obradu koja programski stvara tablicu vrijednosti i izlazi u upravljani obrazac s komentarima koji će vam pomoći da stvorite svoje tablice.

Postoje dvije posebne metode za pretraživanje tablice vrijednosti:

1. Pronađite

TVHorizon = Imenici.Nomenklatura.Traži po nazivu("Horizon TV");
FoundString = TZNomenclature.Find(TVHorizon);
//također možemo odrediti u kojim se stupcima traži da ubrzamo pretragu
FoundString = TKNomenclature.Find(TVHorizon, "Nomenclature");

Ova metoda vraća prvi pronađeni niz s vrijednošću koju tražite ili Nedefinirano ako ga ne pronađe. Stoga je prikladno koristiti ga za traženje jedinstvenih vrijednosti, jer u suprotnom, kada pronađete vrijednost, morat ćete je izbrisati iz tablice kako biste pronašli sljedeću.

Kako ne biste patili ovako, postoji sljedeća metoda koja vam omogućuje da pronađete niz odgovarajućih nizova:

2. Pronađite nizove


Struktura odabira.Insert("Nomenklatura", TVHorizon); // prvo odredimo stupac gdje pretraživati, a zatim što pretraživati.

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

Ono što je još dobro kod ove metode je to što može pretraživati ​​nekoliko stupaca tablice vrijednosti odjednom:


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

Jedini negativan, kao što vidite, ne možete koristiti druge vrste usporedbe osim "jednako"

Kako bi se uzeli u obzir novac i roba, u poslovanju se široko koriste različite tablice. Gotovo svaki dokument je tablica.

U jednoj tablici navedena je roba za otpremu iz skladišta. U drugoj tablici - obveza plaćanja ove robe.

Stoga u 1C rad s tablicama zauzima istaknuto mjesto.

Tablice u 1C također se nazivaju "dijelovi tablice". Priručnici, dokumenti i drugi ih imaju.

Upit vraća tablicu kao rezultat svog izvršenja, 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 istovar rezultata upita u tablicu vrijednosti i zatim nasumični pristup njoj.

//Opcija 1 - sekvencijalni pristup rezultatima upita

// dobiti tablicu
Odabir = Upit.Izvrši().Odaberi();
// zaobići redom sve retke rezultata upita
Dok Selection.Next() Petlja
Izvješće(Odabir.Naziv);
EndCycle;

//Opcija 2 - učitavanje u tablicu vrijednosti
Upit = Novi upit("SELECT Name FROM Directory.Nomenclature");
// dobiti tablicu
Tablica = Query.Execute().Upload().
// tada također možemo zaobići sve linije
Za svaki redak iz petlje tablice
Izvješće(String.Name);
EndCycle;
//ili proizvoljno pristupiti nizovima
String = Table.Find("Lopata", "Ime");

Važna značajka je da će u tablici, koja se dobiva iz rezultata upita, svi stupci biti strogo tipizirani. To znači da ćete zahtjevom za polje Naziv iz pretraživanja Nomenklature 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 kontrolu Form/Insert iz izbornika.

Podaci se mogu pohraniti u konfiguraciju - tada je potrebno odabrati postojeći (prethodno dodan) tabularni dio konfiguracijskog objekta čiju formu uređujete.

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

Prilikom odabira tabelarnog dijela, 1C će sam dodati stupce u tablicu na obrascu. Stringovi koje korisnik unese u takvu tablicu automatski će se spremiti zajedno s imenikom/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, neće se automatski spremati, ali možete s njim raditi što god želite.

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

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

Za upravljanje tablicom potrebno je prikazati naredbenu ploču na obrascu. Odaberite stavku izbornika Form/Insert Control/Command Panel.

U svojstvima naredbene trake odaberite potvrdni okvir Automatsko dovršavanje tako da se gumbi na alatnoj traci pojavljuju automatski.

Tablica na obrascu (tanki/upravljani klijent)

Na upravljanom obrascu te radnje izgledaju malo drugačije. Ako trebate postaviti tablični odjeljak na obrazac, proširite granu Objekt i povucite jedan od tabličnih odjeljaka ulijevo. I to je to!

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

Za dodavanje stupaca upotrijebite izbornik desnom tipkom miša na ovom atributu obrasca, stavku 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.

Izvoz 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 prazan prostor u tablici i odaberite Prikaži popis.

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

Objavljeno 21. rujna 2011

Tablica vrijednosti 1C - dio 3. metapodaci. Ponavljanje po stupcima 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 redaka bez korištenja naziva stupaca. (Ovaj se članak odnosi na niz članaka 1C od nule; programiranje 1c od nule; tablica vrijednosti 1c)

Da bismo objasnili gradivo i da bismo mogli pokrenuti naše primjere programskog koda "uživo", potrebno nam je nešto testna tablica vrijednosti 1C. Dio naših primjera izvlačit će podatke iz tablice vrijednosti, pa ćemo napraviti tablicu s tri stupca "Prezime", "Ime", "Oteče" i u nju unijeti malu količinu podataka - čak 3 reda :)

Dakle, stvorimo testnu tablicu 1C vrijednosti i ispunimo je:

MyTR = Nova tablica vrijednosti; // kreirajte novu tablicu vrijednosti pohranjenu u varijabli "MyTR" MyTR.Columns.Add("Prezime"); // kreiraj stupac "Prezime" MyTR.Columns.Add("Ime"); // kreirajte stupac "Ime" MyTM.Columns.Add("Patronymic"); // kreirajte stupac "Srednje ime" // dodajte prvi red u našu tablicu vrijednosti NewRow = MyTZ.Add(); NewLine.Surname = "Chapaev"; NewString.Name = "Vasilij"; NewString.Patronymic = "Ivanovich"; // dodaj drugu liniju NewLine = MyTZ.Add(); NewLine.Lastname = "Dzerzhinsky"; NewString.Name = "Felix"; NewLine.Patronymic = "Edmundovich"; // dodaj treću liniju NewLine = MyTR.Add(); NewRow.LastName = "Kotovsky"; NewString.Name = "Gregory"; NewString.Patronymic = "Ivanovich";

Naša testna tablica sastoji se od tri stupca: ime, prezime, patronim; i ima tri dovršena retka s imenima heroja građanskog rata.

Prvi uzorak koda iterira kroz stupce tablice vrijednosti 1C kao kolekciju.

// prikaz naziva svih stupaca TK-a za svaki stupac iz My TK.Columns Notify loop("Ime stupca: " + Naziv stupca); EndCycle;

Naša petlja će prikazati sve nazive stupaca u okviru za poruke 1C:

Naziv stupca: Prezime Naziv stupca: Ime Naziv stupca: Srednje ime

Vidimo da se posebna petlja skupljanja koristi za iteraciju kroz stupce, slično petlji iteracije retka (u prošlom članku). MojTM.Stupci- ovo je zbirka stupaca tablice vrijednosti 1C "MoyaTZ". Zbirka sadrži objekte tipa "Tablica vrijednosti stupca" Svaki objekt ove vrste je stupac tablice vrijednosti i sadrži svojstva i metode. Pozivajući se na ova svojstva i metode, dobivamo potrebne informacije o jednom stupcu ili izvodimo neke druge radnje s njim.

Na primjer, pristup nekretnini "Ime" (Stupac.Naziv) dobivamo naziv tekućeg stupca.

Želim vam skrenuti pozornost na naslov ciklusa: „Za svakog Stupac Iz MyTR.Columns Loop" Naziv varijable "Stupac" izmislili mi. Nije potrebno koristiti isto ime. Ovu varijablu možete nazvati kako god želite, na primjer "Moj trenutni stupac" Tada bi gornji primjer izgledao ovako:

// ispis imena svih stupaca TK For Every MyCurrentColumn From MyTK.Columns Notify Loop("Ime stupca: " + MyCurrentColumn.Name); EndCycle;

Kada 1C izvršni podsustav naiđe na ciklus ove vrste, pri svakom prolazu ciklusa, on dodjeljuje jedan element iz naše kolekcije varijabli s navedenim imenom, u ovom slučaju - jedan element zbirke stupci tablice vrijednosti MojTM.Stupci Zatim se pozivamo na varijablu koja sadrži trenutni stupac i koristimo svojstvo "Ime".

Predlažem da prikažete broj svakog stupca u zbirci stupaca pored naziva stupca:

// prikaz broja i naziva svih stupaca tablice vrijednosti za svaki stupac iz MyTR.Columns LoopColumnNumber = MyTR.Columns.Index(Column); // dobivanje broja stupca ColumnName = Column.Name; // dobivanje naziva stupca Report("Broj stupca:" + Broj stupca + " Naziv stupca: " + Naziv stupca); EndCycle;

Tekst će biti prikazan u okviru poruke 1C:

Broj stupca:0 Naziv stupca: Prezime Broj stupca:1 Naziv stupca: Ime Broj stupca:2 Naziv stupca: Srednje ime

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

Broj stupaca u tablici vrijednosti 1C

Kako bismo saznali broj stupaca u tablici vrijednosti, koristimo metodu "Number()" na zbirci stupaca.

Broj stupaca = MyTM.Columns.Number(); Izvješće (broj stupaca);

Na ekranu će se prikazati broj "3". Doista, u našoj tablici postoje tri stupca: "Prezime", "Ime", "Patronim"

Dobivanje objekta stupca prema njegovom broju (indeksu) i ponavljanje preko stupaca pomoću indeksa stupca

Napravimo petlju kroz sve stupce tablice vrijednosti pomoću indeksa stupaca (brojeva). Zapamtite da numeriranje stupaca počinje od nule. Stoga moramo povećati brojač ciklusa "Sh" od nule do broja jednakog broju stupaca minus jedan.

Za SC = 0 By MyTM.Columns.Quantity() - 1 Loop CurrentColumn = MyTM.Columns[SC]; Obavijesti(TrenutniColumn.Name); EndCycle;

Na ekranu ćemo dobiti sljedeće

Puno ime

Mislim da je ovaj primjer bio jasan. Okrenuli smo se metodi Količina() zbirke kolumni" MyTM.Columns.Quantity()", dobili smo broj stupaca i pokrenuli petlju s brojačem iz nula prije broj stupaca minus jedan. Unutar petlje dobivamo svaki stupac iz kolekcije stupaca i varijabli dodjeljujemo trenutni objekt stupca CurrentColumn Zatim, varijabla CurrentColumn pristupamo posjedu Ime i prikazati vrijednost ovog svojstva na ekranu: Obavijesti(TrenutniColumn.Name);

Važno je nikada ne brkati svojstvo objekta s metodom objekta.

Svojstvo je vrsta statičke vrijednosti i pristup njemu piše se bez zagrada, na primjer CurrentColumn.Name. Metoda je u biti procedura ili funkcija objekta, a pozivi procedura i funkcija uvijek se pišu u zagradama (čak i ako nema ulaznih parametara). Na primjer: MyTM.Columns.Quantity()

Ako se pozivamo na metodu, zaboravljajući napisati zagrade, 1C tumač će nam dati poruku o pogrešci i neće pokrenuti kod za izvršenje. Budući da će tumač pretpostaviti da ne pristupamo metodi, već svojstvu - jer nema zagrada. I neće moći pronaći svojstva s tim imenom (jer postoji samo metoda s tim imenom) - što će biti rečeno u poruci o pogrešci.

To je ono što će tumač napisati ako zaboravim staviti zagrade u poziv metode na tako pogrešan način MyTM.Columns.Quantity(bez zagrada nakon "Quantity()"):

Polje objekta nije pronađeno (broj)

U ovom slučaju, "polje" i "imovina" treba shvatiti kao sinonime ili netočnost u terminologiji 1C programera. Oni koriste obje ove riječi za označavanje istog koncepta. Iako u drugim programskim jezicima ovi izrazi mogu značiti različite koncepte.

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

Nudim vam, za početak, jednostavan primjer dobivanja podataka iz prvog reda naše tablice. Imajte na umu da koristimo unaprijed ispunjenu tablicu s početka članka. Sa sigurnošću znamo da tablica ima prvi red i najmanje jedan stupac. Ako ovaj primjer primijenimo na praznu tablicu, doći će do pogreške. Tako:

FirstLine = MyTR; // dobivanje prvog reda (numeriranje od nule) ColumnFirstValue = RowFirst; // dobivanje vrijednosti prvog stupca (numeriranje stupaca je također od nule) Report(FirstColumnValue); // prikaz vrijednosti prvog stupca u prvom retku tablice

Zaslon će prikazati:

Čapajev

Prvo smo dobili objekt retka tablice vrijednosti pristupom tablici vrijednosti pomoću operatora [...]. (ako ste zaboravili kako to učiniti, možete pogledati prethodne članke) Unutar operatora proslijedili smo argument "0". Ovo je indeks prvog retka tablice vrijednosti. FirstLine = MyTR;

Nadalje, također imamo pravo pozivati ​​se na string objekt koristeći [...] operator. Unutar ove izjave proslijedili smo broj stupca tablice vrijednosti, u ovom slučaju također "0". I tako smo dobili vrijednost stupca s brojem "0" za trenutni redak tablice s brojem "0". Ovu smo vrijednost prikazali na ekranu i ona predstavlja niz "Chapaev".

Zakomplicirajmo malo naš primjer:

FirstLine = MyTR; // dobivanje prve linije (numerirane od nule) Report(FirstLine); // prikaz vrijednosti prvog stupca u prvom retku tablice Report(FirstRow); // prikaz vrijednosti drugog stupca u prvom retku tablice Report(FirstRow); // prikaz vrijednosti trećeg stupca u prvom retku tablice

Sada smo prikazali vrijednosti iz sva tri stupca prvog reda naše tablice vrijednosti:

Čapajev Vasilij Ivanovič

Sada dalje modificiram ovaj primjer tako da možemo bez varijable "Prvi red"

Obavijesti(MyTM); // prikaz vrijednosti prvog stupca u prvom retku tablice Report(MyTR); // prikaz vrijednosti drugog stupca u prvom retku tablice Report(MyTR); // prikaz vrijednosti trećeg stupca u prvom retku tablice

Ekran će biti isti.

Čapajev Vasilij Ivanovič

U gornjem smo primjeru vidjeli da za pristup vrijednosti koja se nalazi u određenom retku i određenom stupcu tablice vrijednosti, možemo upotrijebiti uzastopni poziv dvaju operatora [...] u ovom obliku: Tablica vrijednosti[Redovi indeksa][Stupci indeksa]

Dakle, spremni smo stvoriti petlju i dobiti podatke svih redaka i svih stupaca koristeći indekse redaka i stupaca:

For RowCount = 0 By MyTM.Quantity() - 1 Petlja // petlja kroz retke For ColumnCount = 0 By MyTM.Columns.Quantity() - 1 Petlja // ugniježđena petlja kroz stupce // dobivanje vrijednosti ćelije (iz trenutnog retka i trenutni stupci) CellValue = MyTR[RowCount][ColumnCount]; // prikaz broja retka, broja stupca i vrijednosti ćelije Report("Line #" + RowCount + "column #" + ColumnCount + " = " + CellValue); EndCycle; EndCycle;

Na ekranu će se prikazati sljedeće:

Redak #0 stupac #0 = Chapaev redak #0 stupac #1 = Vasily redak #0 stupac #2 = Ivanovich redak #1 stupac #0 = Dzerzhinsky redak #1 stupac #1 = Felixov redak #1 stupac #2 = Edmundovichev red # 2 stupac br. 0 = Kotovsky linija br. 2 stupac br. 1 = Grigorij linija br. 2 stupac br. 2 = Ivanovich

Uz pomoć dvije petlje, od kojih je jedna ugniježđena u drugu, prikazali smo vrijednosti svih stupaca iz svih redaka 1C tablice vrijednosti. U ovom slučaju nismo koristili nazive stupaca, već smo se referirali na stupce i retke njihovim indeksima. Za bolje razumijevanje obratite pozornost na komentare unutar primjera.

Zaključno, predlažem da malo promijenimo naš primjer tako da umjesto brojeva stupaca prikazuje njihova imena na ekranu. Osim toga, napravit ću izgledniji dizajn za prikaz sadržaja na ekranu.

For RowCount = 0 By MyTR.Quantity() - 1 Loop // petlja kroz retke Report(" ======= Red # " + RowCount + " ======="); Prijaviti(" "); // novi redak (umetnite prazan redak) For ColumnCount = 0 By MyTR.Columns.Quantity() - 1 Petlja // ugniježđena petlja iteracije stupca // dobivanje vrijednosti ćelije (iz trenutnog retka i trenutnog stupca) CellValue = MyTR[RowCount][ Broj stupaca]; // dobivanje naziva stupca ColumnName = MyTR.Columns[ColumnCount].Name; // prikaz naziva stupca i vrijednosti ćelije Report(ColumnName + ": " + CellValue); EndCycle; Prijaviti(" "); // novi red (umetnuti prazan red) EndCycle;

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

Red br. 0 ======= Prezime: Chapaev Ime: Vasily Srednje ime: Ivanovich ======= Red br. 1 ======= Prezime: Dzerzhinsky Ime: Felix Srednje ime: Edmundovich ===== == Red br. 2 ======= Prezime: Kotovsky Ime: Grigorij Patronim: Ivanovič

Da, skoro sam zaboravio. Kada koristite dva operatora [...][...] u nizu, možemo proslijediti naziv ovog stupca umjesto indeksa stupca: Tablica vrijednosti[indeks reda][naziv stupca]

For RowCount = 0 By MyTR.Quantity() - 1 Loop // petlja kroz retke Report(" ======= Red # " + RowCount + " ======="); Prijaviti(" "); // line feed (umetanje praznog retka) For ColumnCount = 0 By MyTR.Columns.Quantity() - 1 Petlja // ugniježđena petlja kroz stupce ColumnName = MyTR.Columns[ColumnCount].Name; // dobivanje imena stupcaCellValue = MyTR[RowCount][ColumnName]; //

Obratite pozornost na redak označen strelicom ". U ovom retku, umjesto indeksa trenutnog stupca, prosljeđujemo naziv trenutnog stupca argumentu u uglatim zagradama [...] Rezultat će biti isti.

A sada, posljednji u ovom članku.

ISPRAVAN prijem svih podataka 1C tablice vrijednosti, korištenjem petlji za ponavljanje zbirke redaka i zbirke stupaca

Za svaki CurrentRow iz MyTR petlje // kružite kroz kolekciju nizova Report(" ======= Line # " + MyTR.Index(CurrentRow) + " ======="); Prijaviti(" "); Za svaki CurrentColumn From MyTR.Columns Loop // ugniježđena petlja kroz kolekciju stupaca ColumnName = CurrentColumn.Name; // dobivanje imena stupcaCellValue = CurrentRow[ColumnName]; // dobivanje vrijednosti ćelije PO IMENU stupca Report(ColumnName + ": " + CellValue); // prikaz naziva stupca i vrijednosti ćelije EndCycle; Prijaviti(" "); EndCycle;

U primjeru su korištene dvije petlje. Petlja skupljanja stupaca ugniježđena je unutar petlje retka. Ako ste se bavili gornjim primjerima i čitali prethodne članke, tada nećete imati poteškoća u razumijevanju kako ovaj primjer funkcionira.

Konačno, broj redaka koda u našem posljednjem primjeru zadržat ću što je moguće kraćim eliminiranjem upotrebe posrednih varijabli. Dobit ćemo uzorak "industrijskog koda" koji se koristi u stvarnim aplikacijama.

Ovo treba učiniti samo ako dobro razumijete što radite. Ako je kod vrlo složen, tada je prihvatljivo ostaviti međuvarijable kako biste kasnije lakše razumjeli vlastiti kod. Također, svaki kod mora biti barem minimalno komentiran, tako da nakon nekog vremena bude lakše razumjeti tekstove programa.

Za svaki CurrentRow iz MyTR Loop // petlja kroz retke Report(" ======= Line # " + MyTR.Index(CurrentRow) + " =======" + Symbols.PS); Za svaki CurrentColumn iz MyTr.Columns petlje // iteracija preko stupaca Report(CurrentColumn.Name + ": " + CurrentRow[CurrentColumn.Name]); EndCycle; Prijaviti(" "); EndCycle;

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

2-TJEDNI TEČAJ

"PROGRAMIRANJE u 1C ZA POČETNIKE"

Tečaj će vam biti poslan e-poštom. Postanite programer izvršavajući zadatke korak po korak.

Za sudjelovanje je potrebno samo računalo i internet.

Besplatan pristup tečaju:

sp-force-hide ( display: none;).sp-form ( display: block; background: #eff2f4; padding: 5px; width: 270px; max-width: 100%; border-radius: 0px; -moz-border -radius: 0px; -webkit-border-radius: 0px; font-family: Arial, "Helvetica Neue", sans-serif; background-repeat: no-repeat; background-position: center; background-size: auto;) .sp-form input ( display: inline-block; neprozirnost: 1; vidljivost: visible;).sp-form .sp-form-fields-wrapper ( margina: 0 auto; width: 260px;).sp-form .sp -kontrola-forme (pozadina: #ffffff; boja obruba: #cccccc; stil obruba: čvrsta; širina obruba: 1px; veličina fonta: 15px; padding-lijevo: 8,75px; padding-desno: 8,75px; obrub -radius: 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; stil fonta: normalan obitelj fontova: Arial, "Helvetica Neue", sans-serif; box-shadow: nijedan -moz-box-shadow: nema; -webkit-box-shadow: ništa; pozadina: linearni gradijent (na vrh, #e30d22, #f77380);).sp-form .sp-button-container (tekst-align: center; width: auto;)