Tablični dijelovi postoje za mnoge objekte u 1C:
- Imenici
- Dokumentacija
- Izvještaji i obrada
- Kontni planovi
- Planovi karakterističnih tipova
- Planovi kalkulacije
- Poslovni procesi i zadaci
Tablični dijelovi vam omogućavaju pohranjivanje neograničene količine strukturiranih informacija koje pripadaju jednom objektu.
Pogledajmo neke tehnike rada sa tabelarnim dijelovima.
Kako zaobići tabelarni dio
Za prelazak preko dijela tablice možete koristiti petlju Za svaki
Za svaki red iz tabelarnog dijela ciklusa
Izvještaj(String. TabularPart Attributes) ;
EndCycle ;
Na svakoj iteraciji u varijablu Linija prenosi se sljedeći red tabelarnog dijela. Vrijednosti detalja reda mogu se dobiti izrazom Line.AttributeName.
Kako doći i zaobići odabrane redove tabelarnog dijela
Za prikaz informacija iz tabelarnog dijela objekta koristite element obrasca Polje tabele. Da biste omogućili mogućnost odabira više redova u polju tabele, morate postaviti vrijednost Višestruko na njegovom imanju Način odabira.
Da biste dobili listu odabranih linija, koristite sljedeći kod:
Za ponavljanje kroz odabrane linije koristite petlju Za svaki:
SelectedRows = FormElements. TableFieldName. SelectedRows;
Za svaki red iz petlje odabranih redova
//sadržaj petlje
EndCycle ;
Kako programski odabrati redove tabelarnog dijela (polje tabele) i poništiti njihov odabir
Da programski poništite odabir redova polja tabele:
Elementi forme. TableFieldName. SelectedRows. Clear() ;
Da programski odaberete sve redove polja tabele:
Za svaki CurrentRow From TabularPart Loop
Elementi forme. TableFieldName. SelectedLines. Dodaj (TrenutniRed) ;
EndCycle ;
Kako očistiti dio tabele
TabularPart. Clear() ;
Kako dobiti trenutni red sekcije tabele
Trenutni red je period u kojem korisnik ima ovog trenutka kursor se nalazi. Da biste ga dobili, potrebno je pristupiti kontrolnom elementu na obrascu koji je pridružen tabelarnom dijelu.
Za obične forme kod će izgledati ovako:
Elementi forme. TableFieldName. CurrentData;
Za upravljane forme:
Elementi. TableFieldName. CurrentData;
Kako dodati novi red u sekciju tabele
Dodavanje novog reda na kraj dijela tabele:
NewRow = TablePart. Dodati() ;
Dodavanje novog reda bilo gdje u odjeljku tablice (naknadni redovi će biti pomjereni):
NewRow = TablePart. umetnuti (indeks)
//Indeks - broj dodane linije. Numerisanje redova počinje od nule.
Nova linija. Props1 = "Vrijednost" ;
Kako programski popuniti detalje reda tabele
Ako trebate programski popuniti detalje reda tabelarnog odjeljka koji korisnik dodaje, morate koristiti obrađivač događaja tabelarnog odjeljka Kada započnete uređivanje.
Procedura koju kreira rukovalac ima tri parametra:
- Element- sadrži kontrolni element TableField.
- Nova linija- boolean. Sadrži vrijednost Istinito, ako se doda nova linija tabelarni dio, i laž, ako je korisnik počeo uređivati već postojeću liniju.
- Kopiraj- boolean. Sadrži vrijednost Istinito, ako korisnik kopira liniju, i Lazi u drugim slučajevima.
Pogledajmo primjer. Recimo da trebamo popuniti detalje tabelarnog dijela AccountAccount, u slučaju da se doda novi red. Prilikom uređivanja postojeće linije, ne morate mijenjati računski račun.
Procedura TabularPartAtStartEditing(Element, NewRow, Copy)
//Ako korisnik uređuje postojeću liniju, onda ništa ne radimo
Ako NIJE NewRow Onda
Povratak;
EndIf ;
//Ako je linija nova, postavite računski račun
TechString = Stavka. CurrentData; //Nabavite trenutni red tabelarnog dijela
TechString. Računovodstvo = Kontni plan. Samonosivi. RequiredAccount;
EndProcedure
Prvo morate razumjeti da postoji objekt koji sadrži podatke, na primjer Form DataCollection, a postoji i objekt koji vizualno prikazuje podatke - tablicu.
Tabela ima samo trenutni red ne može se koristiti za pronalaženje svih postojećih vrijednosti FormCollectionData s kojima je povezana. Zauzvrat, FormDataCollection nema trenutni red. Za povezivanje ovih objekata u 1C koristi se identifikator, jer se redoslijed redova može promijeniti iu vizualnom dijelu i u podacima, ali veza ne bi trebala biti prekinuta.
Pogledajmo ovo na primjeru:
Obrazac ima specifikaciju tipa (Tabela vrijednosti) - u zagradama jer je stvarni tip FormDataCollection
Detalji se prikazuju na obrascu u obliku tabele.
Definiranje reda tablice vrijednosti prema trenutnom redu tablice
Da biste utvrdili koji red TK je trenutno aktuelan, prvo morate dobiti identifikator reda u tabeli, a zatim ga koristiti da pronađete red u TK-u
RowIdentifier = Elements.TZ.CurrentRow; // Dobivamo identifikator u tablici LineTZ = TZ.FindByIdentifier(StringIdentifier);
Postavljanje trenutnog reda u tabeli
Da biste postavili trenutni red tabele, potrebno je da uradite suprotno. Prvo nabavite TK identifikator, a zatim postavite trenutni red tabele na njega.
LineTZ = FormDataCollection; // na primjer, uzmimo red 1String Identifier = LineTZ.GetIdentifier(); Elements.TK.CurrentRow = RowIdentifier;
Za lakše razumijevanje, možete preuzeti
Kako instalirati liniju u 8.2 ( Upravljani obrasci) pročitajte .
Za početak, želio bih vas podsjetiti da su podaci u tabelarnom dijelu dokumenta (ili tablici vrijednosti) i tabelarnom polju različiti objekti. Da bismo izvršili neke vizuelne radnje, radimo sa poljem tabele. U ovom slučaju ćemo koristiti njegovo svojstvo “CurrentRow”, koje je odgovorno za koji red je aktivan.
Da bismo odabrali red koji nam je potreban u polju tabele, potrebna su nam dva koraka:
1. Pronađite red koji nam je potreban u objektu podataka koji polje tabele prikazuje
Želeo bih da naglasim da je ovde potreban objekat podataka. Na primjer, imamo dokument Prodaja robe i usluga koji ima tabelarni dio“Proizvodi” i odlučili smo da aktiviramo 2. red na obrascu dokumenta. Zatim ćemo u modul formulara dokumenta napisati:
// drugi red ima indeks jedan
RequiredString = Proizvodi;
Ili znamo da je u drugom redu u koloni Nomenklatura element koda “001” onda koristimo konstrukciju:
// prvo pronalazimo nomenklaturu elementa direktorija po kodu
// a zatim ga potražite u dijelu tabele “Proizvodi”.
RequiredLine = Products.Find(Directories.Nomenclature.FindByCode("001"));
2. Postavite vrijednost tekuće linije na pronađenu liniju
Sada trebamo dodijeliti vrijednost varijable RequiredRow svojstvu polja tablice CurrentRow:
// ako se naše polje tabele takođe zove Proizvodi
Elementi obrasca.Proizvodi.CurrentRow = Potreban red;
// ako se polje tabele zove TableField1
Kao rezultat, linije koda mogu izgledati ovako:
RequiredLine = Products.Find(Directories.Nomenclature.FindByCode("001"));
Elementi obrasca.TableField1.CurrentRow = RequiredRow;