1s kako dobiti trenutni red tabelarnog dijela. Kako dobiti trenutni red sekcije tabele

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;

Dijeli