1c vytvorenie tabuľky hodnôt. Aké metódy existujú a ako hľadať niekoľko hodnôt súčasne

Zverejnené 21. septembra 2011

Tabuľka hodnôt 1C – časť 3. Metadáta. Slučovanie cez stĺpce tabuľky hodnôt

V tomto článku vám poviem, ako pracovať s tabuľkou hodnôt „neznámej“ štruktúry, ako iterovať cez stĺpce tabuľky hodnôt, ako extrahovať údaje zo stĺpcov a riadkov bez použitia názvov stĺpcov. (Tento článok patrí do série článkov 1C od nuly; programovanie 1C od nuly; tabuľka hodnôt 1C)

Na vysvetlenie materiálu a na to, aby sme mohli spustiť naše príklady kódu „naživo“, nejaké potrebujeme testovacia tabuľka hodnôt 1C. Niektoré z našich príkladov extrahujú údaje z tabuľky hodnôt, takže vytvoríme tabuľku s tromi stĺpcami „Priezvisko“, „Krstné meno“, „Meno“ a zadáme do nej malé množstvo údajov – až 3 riadky :)

Takže vytvorte testovaciu tabuľku hodnôt 1C a vyplňte ju:

MyTZ = New ValueTable; // vytvorte novú tabuľku hodnôt uloženú v premennej "MyTZ" MyTZ.Columns.Add("Priezvisko"); // vytvoríme stĺpec "Priezvisko" MyTK.Columns.Add("Name"); // vytvoríme stĺpec "Name" MyTZ.Columns.Add("Patronymic"); // vytvorte stĺpec "Stredný názov" // pridajte prvý riadok do našej tabuľky hodnôt ​​NewLine = MyTZ.Add(); NewString.LastName = "Chapaev"; NewLine.Name = "Vasily"; NewString.Middle name = "Ivanovich"; // pridanie druhého riadku NewLine = MyTZ.Add(); NewString.LastName = "Dzeržinský"; NewRow.Name = "Felix"; NewString.Middle name = "Edmundovich"; // pridanie tretieho riadku NewLine = MyTZ.Add(); NewLine.LastName = "Kotovsky"; NewLine.Name = "Gregory"; NewString.Middle name = "Ivanovich";

Naša testovacia tabuľka pozostáva z troch stĺpcov: Krstné meno, Priezvisko, Patronymické; a má tri vyplnené riadky s menami hrdinov občianskej vojny.

Prvá vzorka kódu enumeruje stĺpce tabuľky hodnôt 1C ako kolekciu.

// zobrazenie názvov všetkých stĺpcov TK For Each Column From MyTZ.Columns Cycle Report("Column name: " + Column.Name); EndCycle;

Náš cyklus zobrazí všetky názvy stĺpcov v okne správy 1C:

Názov stĺpca: Priezvisko Názov stĺpca: Meno Názov stĺpca: Stredné meno

Vidíme, že na iteráciu cez stĺpce sa používa špeciálny iteračný cyklus kolekcie, podobný cyklu iterácie riadkov (v predchádzajúcom článku). MyTK.Columns- toto je zbierka stĺpcov tabuľky hodnôt 1C "MyTZ". Zbierka obsahuje predmety typu "Stĺpec tabuľky hodnôt" Každý objekt tohto typu je stĺpcom tabuľky hodnôt a obsahuje vlastnosti a metódy. Prístupom k týmto vlastnostiam a metódam získame potrebné informácie o jednom stĺpci alebo s ním vykonáme nejaké ďalšie akcie.

Napríklad prístup k nehnuteľnosti "Názov" (Názov stĺpca) dostaneme názov aktuálneho stĺpca.

Chcel by som upriamiť vašu pozornosť na názov série: „Pre každého Stĺpec Z cyklu MyTZ.Column" Premenná s názvom "stĺpec" nami vynájdené. Nie je potrebné používať rovnaký názov. Túto premennú môžete nazvať akokoľvek chcete, napr "Môj aktuálny stĺpec" Potom by vyššie uvedený príklad vyzeral takto:

// zobrazenie názvov všetkých stĺpcov TK For Each MyCurrentColumn From MyTK.Columns Cycle Report("Názov stĺpca: " + MyCurrentColumn.Name); EndCycle;

Keď vykonávací subsystém 1C narazí na slučku tohto typu, pri každom prechode slučkou priradí jeden prvok z našej kolekcie premennej so zadaným názvom, v tomto prípade - jeden zberný prvok stĺpce tabuľky hodnôt MyTK.Columns A potom pristúpime k premennej, ktorá obsahuje aktuálny stĺpec a použijeme vlastnosť "Názov".

Navrhujem zobraziť vedľa názvu stĺpca číslo každého stĺpca v kolekcii stĺpcov:

// zobrazenie počtu a názvov všetkých stĺpcov tabuľky hodnôt ​​Pre každý stĺpec From MyTZ.Columns Cycle ColumnNumber = MyTZ.Columns.Index(Column); // získame číslo stĺpca Názov stĺpca = Názov stĺpca; // získame názov stĺpca Report("Číslo stĺpca:" + Číslo stĺpca + " Názov stĺpca: " + Názov stĺpca); EndCycle;

V okne správy 1C sa zobrazí nasledujúci text:

Číslo stĺpca:0 Názov stĺpca: Priezvisko Číslo stĺpca:1 Názov stĺpca: Meno Číslo stĺpca:2 Názov stĺpca: Stredné meno

Upozorňujeme, že stĺpce v tabuľke hodnôt 1C sú očíslované od nuly, rovnako ako riadky tabuľky hodnôt.

Počet stĺpcov v tabuľke hodnôt 1C

Na zistenie počtu stĺpcov v tabuľke hodnôt používame metódu "Count()" na zber stĺpcov.

Počet stĺpcov = MyTZ.Columns.Quantity(); Správa (Počet stĺpcov);

Na obrazovke sa zobrazí číslo "3". Naša tabuľka má skutočne tri stĺpce: „Priezvisko“, „Krstné meno“, „Patronymické“

Získanie objektu stĺpca podľa jeho čísla (indexu) a vymenovanie stĺpcov pomocou indexu stĺpca

Urobme cyklus prehľadávania všetkých stĺpcov tabuľky hodnôt pomocou stĺpcových indexov (čísel). Pamätajte, že číslovanie stĺpcov začína od nuly. Preto musíme zvýšiť počítadlo cyklov „Sch“ z nuly na číslo rovnajúce sa počtu stĺpcov mínus jeden.

Pre účet = 0 Podľa MyTZ.Columns.Quantity() - 1 cyklus CurrentColumn = MyTZ.Columns[Act]; Report(CurrentColumn.Name); EndCycle;

Na obrazovke dostaneme nasledovné

Celé meno

Myslím, že tento príklad bol jasný. Obrátili sme sa na metódu množstvo () stĺpcové kolekcie" MyTZ.Columns.Quantity()“, získal počet stĺpcov a začal slučku s počítadlom z nula predtým počet stĺpcov mínus jeden. Vo vnútri cyklu získame každý stĺpec z kolekcie stĺpcov a priradíme aktuálny stĺpcový objekt k premennej CurrentColumnĎalej premenná CurrentColumn pristupujeme k nehnuteľnosti názov a zobrazte hodnotu tejto vlastnosti na obrazovke: Report(CurrentColumn.Name);

Je dôležité, aby ste si nikdy nezamieňali vlastnosť objektu a metódu objektu.

Vlastnosť je určitá statická hodnota a prístup k nej sa píše napríklad bez zátvoriek CurrentColumn.Name. Metóda je v podstate procedúra alebo funkcia objektu a volania procedúr a funkcií sa vždy píšu so zátvorkami (aj keď neexistujú žiadne vstupné parametre). Napríklad: MyTZ.Columns.Quantity()

Ak pristúpime k metóde a zabudneme napísať zátvorky, interpret 1C nám zobrazí chybové hlásenie a nespustí kód. Keďže interpret bude brať do úvahy, že nepristupujeme k metóde, ale k vlastnosti – pretože neexistujú žiadne zátvorky. Ale nebude môcť nájsť vlastnosti s týmto názvom (pretože existuje iba metóda s týmto názvom) - čo bude uvedené v chybovom hlásení.

To je to, čo interpret napíše, ak zabudnem vložiť zátvorky do volania metódy takýmto nesprávnym spôsobom MyTZ.Stĺpce.Množstvo(bez zátvoriek za "Množstvo()"):

Pole objektu sa nenašlo (množstvo)

V tomto prípade by sa „pole“ a „majetok“ mali chápať ako synonymá alebo nepresnosť v terminológii vývojárov 1C. Obe tieto slová používajú na označenie toho istého konceptu. Aj keď v iných programovacích jazykoch môžu tieto výrazy znamenať rôzne veci.

Získanie údajov z tabuľky hodnôt 1C pomocou čísel stĺpcov

Na začiatok vám ponúkam jednoduchý príklad získavania údajov z prvého riadku našej tabuľky. Upozorňujeme, že používame predvyplnenú tabuľku zo začiatku článku. S istotou vieme, že tabuľka má prvý riadok a aspoň jeden stĺpec. Ak použijeme tento príklad na prázdnu tabuľku, dôjde k chybe. Takže:

Prvý riadok = MyTK; // získame prvý riadok (číslovaný od nuly) FirstColumnValue = FirstRow; // získame hodnotu prvého stĺpca (číslovanie stĺpcov je tiež od začiatku) Report(Value of the FirstColumn); // zobrazenie hodnoty prvého stĺpca v prvom riadku tabuľky

Na obrazovke sa zobrazí:

Čapajev

Najprv sme získali objekt riadku tabuľky hodnôt prístupom k tabuľke hodnôt pomocou operátora [...]. (ak ste zabudli, ako to urobiť, môžete si pozrieť predchádzajúce články) Argument „0“ sme prešli do operátora. Toto je index prvého riadku tabuľky hodnôt. Prvý riadok = MyTK;

Ďalej máme tiež právo pristupovať k objektu typu reťazec pomocou operátora [...]. Vo vnútri tohto operátora sme odovzdali číslo stĺpca tabuľky hodnôt, v tomto prípade tiež „0“. A tak sme dostali hodnotu stĺpca s číslom "0" pre aktuálny riadok tabuľky s číslom "0". Túto hodnotu sme zobrazili na obrazovke a predstavuje reťazec „Chapaev“.

Skúsme si náš príklad trochu skomplikovať:

Prvý riadok = MyTK; // získame prvý riadok (číslovaný od nuly) Report(FirstLine); // zobrazenie hodnoty prvého stĺpca v prvom riadku tabuľky Report(FirstRow); // zobrazenie hodnoty druhého stĺpca v prvom riadku tabuľky Report(FirstRow); // zobrazenie hodnoty tretieho stĺpca v prvom riadku tabuľky

Teraz sme zobrazili hodnoty zo všetkých troch stĺpcov prvého riadku našej tabuľky hodnôt:

Čapajev Vasilij Ivanovič

Teraz upravím aj tento príklad, aby sme sa zaobišli bez premennej "Prvá línia"

Správa(MyTZ); // zobrazenie hodnoty prvého stĺpca v prvom riadku tabuľky Report(MyTZ); // zobrazenie hodnoty druhého stĺpca v prvom riadku tabuľky Report(MyTZ); // zobrazenie hodnoty tretieho stĺpca v prvom riadku tabuľky

Rovnako to bude aj na obrazovke

Čapajev Vasilij Ivanovič

Vo vyššie uvedenom príklade sme videli, že na prístup k hodnote umiestnenej v konkrétnom riadku a konkrétnom stĺpci tabuľky hodnôt môžeme použiť sekvenčné volanie dvoch operátorov [...] v tomto tvare: Tabuľka hodnôt[Riadkový index][stĺpcový index]

Takže sme pripravení vytvoriť slučku a získať údaje všetkých riadkov a všetkých stĺpcov pomocou indexov riadkov a stĺpcov:

For RowCounter = 0 By MyTZ.Quantity() - 1 Loop // cyklus cez riadky For ColumnCounter = 0 By MyTZ.Columns.Quantity() - 1 Loop // vnorená slučka cez stĺpce // získanie hodnoty bunky (z aktuálneho riadku a aktuálne stĺpce) CellValue = MyTK[RowCounter][ColumnCounter]; // zobrazenie čísla riadku, stĺpca a hodnoty bunky Report("Row No" + Row Count + "Column No" + Column Count + " = " + CellValue); EndCycle; EndCycle;

Na obrazovke sa zobrazí nasledovné:

Riadok č. 0 stĺpec č. 0 = Čapajev Riadok č. 0 stĺpec č. 1 = Vasilij Riadok č. 0 stĺpec č. 2 = Ivanovič Riadok č. 1 stĺpec č. 0 = Dzeržinskij Riadok č. 1 stĺpec č. 1 = Felix Riadok č. 1 stĺpec č. 2 = Edmundovič Riadok č. 2 stĺpec č. 0 = Kotovský Riadok č. 2 stĺpec č. 1 = Grigorij Riadok č. 2 stĺpec č. 2 = Ivanovič

Pomocou dvoch cyklov, z ktorých jeden je vnorený do druhého, sme zobrazili hodnoty všetkých stĺpcov zo všetkých riadkov tabuľky hodnôt 1C. V tomto prípade sme nepoužili názvy stĺpcov, ale pristupovali sme k stĺpcom a riadkom podľa ich indexov. Pre lepšie pochopenie venujte pozornosť komentárom v príklade.

Na záver navrhujem mierne zmeniť náš príklad tak, aby namiesto čísel stĺpcov zobrazoval na obrazovke ich názvy. A navyše urobím prezentovateľnejší dizajn pre zobrazovanie obsahu na obrazovke.

Pre LineCounter = 0 Podľa MyTZ.Quantity() - 1 Slučka // slučka cez riadky Report(" ======= Číslo riadku " + LineCounter + " ======="); Ohlásiť(" "); // posun riadku (vloženie prázdneho riadka) For ColumnCounter = 0 Podľa MyTZ.Columns.Quantity() - 1 slučka // vnorená slučka cez stĺpce // získanie hodnoty bunky (z aktuálneho riadka a aktuálneho stĺpca) CellValue = MyTZ [RowCounter][ColumnCounter]; // získame názov stĺpca ColumnName = MyTZ.Columns[ColumnCounter].Name; // zobrazenie názvu stĺpca a hodnoty bunky Report(ColumnName + ": " + CellValue); EndCycle; Ohlásiť(" "); // posun riadku (vloženie prázdneho riadku) EndCycle;

Teraz na našej obrazovke začali informácie vyzerať reprezentatívnejšie:

Riadok č. 0 ======= Priezvisko: Čapajev Meno: Vasilij Patronymický: Ivanovič ======= Riadok č. 1 ======= Priezvisko: Dzeržinskij Meno: Felix Patronymický: Edmundovich ===== == Riadok č. 2 ======= Priezvisko: Kotovsky Meno: Grigory Patronymus: Ivanovič

Áno, skoro som zabudol. Pri použití dvoch operátorov [...][...] v riadku môžeme namiesto indexu stĺpca zadať názov tohto stĺpca: ValueTable[RowIndex][ColumnName]

Pre LineCounter = 0 Podľa MyTZ.Quantity() - 1 Slučka // slučka cez riadky Report(" ======= Číslo riadku " + LineCounter + " ======="); Ohlásiť(" "); // posun riadku (vloženie prázdneho riadku) For ColumnCounter = 0 By MyTZ.Columns.Quantity() - 1 slučka // vnorená slučka cez stĺpce ColumnName = MyTZ.Columns[ColumnCounter].Name; // získame názov stĺpcaHodnota bunky = MyTZ[RowCounter][Názov stĺpca]; //

Pozor na riadok označený šípkou ". V tomto riadku namiesto indexu aktuálneho stĺpca odovzdáme argumentu v hranatých zátvorkách názov aktuálneho stĺpca [...] Výsledok bude rovnaký.

A teraz posledná vec v tomto článku.

SPRÁVNE získanie všetkých údajov z tabuľky hodnôt 1C pomocou slučiek cez kolekciu riadkov a kolekciu stĺpcov

Pre každý aktuálny riadok zo slučky MyTZ // cyklus cez kolekciu reťazcov Report(" ======= Číslo riadku " + MyTZ.Index(CurrentLine) + " ======="); Ohlásiť(" "); For Each CurrentColumn From MyTZ.Columns Loop // vnorená slučka iterujúca cez kolekciu stĺpcov ColumnName = CurrentColumn.Name; // získame stĺpec nameCellValue = CurrentRow[ColumnName]; // získame hodnotu bunky PODĽA NÁZVU stĺpca Report(NázovColumn + ": " + CellValue); // zobrazenie názvu stĺpca a hodnoty bunky End of Cycle; Ohlásiť(" "); EndCycle;

V príklade boli použité dve slučky. Slučka na cyklovanie cez kolekciu stĺpcov je vnorená do slučky na cyklovanie cez riadky. Ak ste si prešli vyššie uvedené príklady a prečítali ste si predchádzajúce články, nebudete mať problém pochopiť, ako tento príklad funguje.

Nakoniec čo najviac znížim počet riadkov kódu v našom poslednom príklade odstránením použitia prechodných premenných. Získame vzorku „priemyselného kódu“, ktorý sa používa v reálnych problémoch.

Toto by ste mali robiť len vtedy, keď dobre rozumiete tomu, čo robíte. Ak je kód veľmi zložitý, potom je prijateľné ponechať prechodné premenné, aby ste neskôr ľahšie pochopili svoj vlastný kód. Tiež každý kód musí byť aspoň minimálne komentovaný, aby po určitom čase bolo ľahšie porozumieť textom programu.

Pre každý aktuálny riadok z cyklu MyTZ // iterácia cez riadky Report(" ======= Číslo riadku " + MyTZ.Index(CurrentLine) + " =======" + Symbols.PS); Pre každý CurrentColumn From MyTZ.Columns Slučka // iterácia cez stĺpce Report(CurrentColumn.Name + ": " + CurrentRow[CurrentColumn.Name]); EndCycle; Ohlásiť(" "); EndCycle;

Výstup na obrazovke sa nezmenil, zostáva rovnaký ako v predchádzajúcom príklade:

2 TÝŽDŇOVÝ KURZ

"PROGRAMOVANIE V 1C PRE ZAČIATOČNÍKOV"

Kurz bude zaslaný emailom. Staňte sa programátorom plnením úloh krok za krokom.

Na účasť potrebujete iba počítač a internet

Voľný vstup do kurzu:

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; nepriehľadnosť: 1; viditeľnosť: viditeľné;).sp-form .sp-form-fields-wrapper ( margin: 0 auto; width: 260px;).sp-form .sp -form-control ( background: #ffffff; border-color: #cccccc; border-style: solid; border-width: 1px; font-size: 15px; padding-left: 8,75px; padding-right: 8,75px; border -radius: 4px; -moz-border-radius: 4px; -webkit-border-radius: 4px; výška: 35px; šírka: 100%;).sp-form .sp-field label (color: #444444; font- veľkosť: 13px; font-style: normal; font-weight: bold;).sp-form .sp-button ( border-radius: 4px; -moz-border-radius: 4px; -webkit-border-radius: 4px; farba pozadia: #f4394c; farba: #ffffff; šírka: 100 %; hmotnosť písma: 700; štýl písma: normálny; rodina písiem: Arial, "Helvetica Neue", bezpätkové; box-shadow: žiadny; -moz-box-shadow: žiadne; -webkit-box-shadow: none; background: linear-gradient(to top, #e30d22 , #f77380);).sp-form .sp-button-container (text-align: center; width: auto;)

(Tento článok patrí do série článkov 1C od nuly; programovanie 1C od nuly; tabuľka hodnôt 1C)

Štruktúra virtuálneho úložiska dát v tabuľkovej forme - to je to, čo to je

Tabuľka hodnôt nie je trvalým objektom databázy 1C a medzi reláciami spustenia sa neukladá.

Tabuľka hodnôt 1C(TK) sa vytvára „za behu“ pomocou programového kódu a potom sa s ním pracuje rovnakým spôsobom ako s akýmkoľvek iným programovým objektom programovacieho jazyka 1C. Používanie volaní metód a prístup k vlastnostiam objektu tabuľky.

Inými slovami, programátor vytvorí tabuľku v pamäti, naplní ju údajmi, pracuje s ňou, triedi, zoskupuje, počíta súčty atď. Prijíma potrebné údaje pre ďalšie použitie.

Vytvorme tabuľku hodnôt a vyplňme ju niečím. Je potrebné mať na pamäti, že tabuľku hodnôt 1C je možné vytvoriť nielen manuálne, zavolaním operátora

NewValueTable;

Tabuľka hodnôt je často výsledkom volania metódy na inom objekte, napríklad výsledok dotazu môže byť uložený do tabuľky hodnôt atď.

Dovoľte mi hneď uviesť jednoduchý príklad.

// MyTZ = New ValueTable; // vytvorte novú tabuľku hodnôt uloženú v premennej "MyTZ" MyTK. Stĺpce. Add("Priezvisko" ); // vytvorte stĺpec "Priezvisko" MyTZ. Stĺpce. Pridať("Meno"); // vytvorte stĺpec "Name". Správa (MyTZ); // zobrazenie hodnoty premennej MyTZ //

Vytvoril som tabuľku hodnôt 1C s dvoma stĺpcami: „Priezvisko“, „Krstné meno“. Postup Správa (MyTK) zobrazí typ premennej v okne správy MyTZ: Tabuľka hodnôt

Naša tabuľka hodnôt je zatiaľ prázdna. Pridajme k tomu pár riadkov s menom a priezviskom.

// vyplňte tabuľku hodnôt // pridajte prvý riadok do našej tabuľky hodnôt NewLine = MyTZ. Add() ; Nový riadok. Priezvisko = "Sidorov" ; Nový riadok. Meno = "Vasya" ; // pridajte druhý riadok do našej tabuľky hodnôt NewLine = MyTZ. Add() ; Nový riadok. Priezvisko = "Ivanov" ; Nový riadok. Meno = "Peter" ;

Dostali sme takúto tabuľku:

Treba si zapamätať: Čísla riadkov v tabuľke hodnôt začínajú od nuly

Prečo vôbec potrebujeme čísla riadkov? A aby sme mali prístup k samostatnému riadku tabuľky hodnôt, napríklad zoberte a zobrazte tento riadok na obrazovke.

// *** zobrazenie hodnôt nulového riadku na obrazovke *** (v každodennom živote zvyčajne číslujeme veci od jednotky, ale tu - od nuly) // získame nultý riadok našej tabuľky pomocou indexu riadku v hranatých zátvorkách OurNullString = MyTZ[ 0] ; // teraz je celý nulový reťazec obsiahnutý v premennej "OurFirstLine" Správa(NášNullString.Priezvisko) ; // zobrazenie hodnoty stĺpca "Priezvisko" uloženého v riadku nula Správa (OurNullString.Name) ; // zobrazenie hodnoty stĺpca "Name" z toho istého riadku

V dôsledku toho sa na obrazovke zobrazí:

Sidorov Vasja

Teraz pre veľmi bystrých a výstižných ukážem príklad, ktorý umožňuje prístup k hodnote stĺpca v takom a takom riadku (Hodnota stĺpca v takom a takom riadku je bunka tabuľky hodnôt Neoficiálny termín, ale pohodlný). Ale bez použitia prechodnej premennej, ako je napríklad "OurZeroString".

Ak chcete zobraziť hodnoty buniek z druhého riadku (nezabudnite, že riadok je druhý, ale index tohto riadku je jedna, takže číslovanie začína od nuly)

Nakoniec posledný bod v tomto článku. Ukázal som vám príklad prístupu k jednému riadku tabuľky hodnôt podľa indexu (čísla riadku). Univerzálny formulár na čítanie alebo priraďovanie obsahu bunky je: "MyValueTable[RowNumber].ColumnName"

Teraz vám poskytnem cyklus úplného výstupu obsahu tabuľky hodnôt. Bez podrobného vysvetlenia, aby ste si polámali hlavu aj vy :)

// // prechádzať a zobrazovať všetky riadky našej tabuľky hodnôt// Pre LineNumber = 0 Podľa MyTZ. Množstvo() - Správa o 1 cykle (MyTZ[LineNumber] . Priezvisko) ; // zobrazenie hodnoty stĺpca "Priezvisko". Správa (MyTK[LineNumber] . Name) ; // zobrazenie hodnoty stĺpca "Name". EndCycle ;

V dôsledku spustenia tejto slučky sa na obrazovke zobrazí nasledovné:

Sidorov Vasja Ivanov Peťa

Tu som vám povedal úplné základy práce s tabuľkou hodnôt 1C. Tieto informácie sa vzťahujú na 1C 8.0, 8.1, 8.2. Zaujímavé podrobnosti o objekte „tabuľka hodnôt 1C“ nekončia. Tento objekt má obrovské možnosti pre pohodlnú prácu s dátami. O tom budem hovoriť v nasledujúcich článkoch.

Degtyarev Roman.

Ako sa naučiť programovať v 1C od začiatku?

Ako pracovať ako programátor 1C a zarobiť až 150 000 rubľov mesačne?

PRIHLÁSTE SA ZDARMA

2 TÝŽDŇOVÝ KURZ

"PROGRAMOVANIE V 1C PRE ZAČIATOČNÍKOV"

Kurz bude zaslaný emailom. Staňte sa programátorom plnením úloh krok za krokom.

Na účasť potrebujete iba počítač a internet

Voľný vstup do kurzu:

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; nepriehľadnosť: 1; viditeľnosť: viditeľné;).sp-form .sp-form-fields-wrapper ( margin: 0 auto; width: 260px;).sp-form .sp -form-control ( background: #ffffff; border-color: #cccccc; border-style: solid; border-width: 1px; font-size: 15px; padding-left: 8,75px; padding-right: 8,75px; border -radius: 4px; -moz-border-radius: 4px; -webkit-border-radius: 4px; výška: 35px; šírka: 100%;).sp-form .sp-field label (color: #444444; font- veľkosť: 13px; font-style: normal; font-weight: bold;).sp-form .sp-button ( border-radius: 4px; -moz-border-radius: 4px; -webkit-border-radius: 4px; farba pozadia: #f4394c; farba: #ffffff; šírka: 100 %; hmotnosť písma: 700; štýl písma: normálny; rodina písiem: Arial, "Helvetica Neue", bezpätkové; box-shadow: žiadny; -moz-box-shadow: žiadne; -webkit-box-shadow: none; background: linear-gradient(to top, #e30d22 , #f77380);).sp-form .sp-button-container (text-align: center; width: auto;)

Zdravím všetkých čitateľov infostartu. Tento článok bude venovaný problematike vytvárania ľubovoľnej tabuľky hodnôt vo forme spravovanej aplikácie programovo.

Vlastnosti úlohy.

Každý, kto programoval v bežnej aplikácii, často čelil úlohe získať ľubovoľnú tabuľku hodnôt vo formulári. Ľubovoľná tabuľka hodnôt je tabuľka, ktorej počet a typ stĺpcov nie sú vopred známe. To znamená, že tam môžu byť 3 stĺpce alebo možno 6 alebo možno 8. V bežnej aplikácii je všetko jednoduché: do formulára na spracovanie môžete umiestniť prvok „Tabuľka hodnôt“ a potom preniesť vytvorenú tabuľku hodnôt ​k tomuto prvku programovo. Potom pomocou jednoduchého príkazu:

Form Elements.TableField.CreateColumns();

získajte hotovú tabuľku hodnôt vo formulári. Zdalo by sa, že by to mohlo byť jednoduchšie.

To všetko bolo v bežnej aplikácii. V spravovanej aplikácii sa všetko zmenilo. Nie je také ľahké vytvoriť ľubovoľnú tabuľku. Teraz musíte buď pevne parametrizovať tabuľku hodnôt vo formulári, alebo ju vytvoriť programovo (popíšte, no, toto je v skutočnosti podstatou samotnej spravovanej aplikácie). Toto sa pokúsime urobiť: programovo vytvoriť ľubovoľnú tabuľku hodnôt v riadenom formulári.

Riešenie problému.

Prvá vec, ktorú musíme urobiť, je určiť, ako sa tabuľka zobrazí vo formulári. Hlavná vec je, že pri spracovaní nemusíte vytvárať žiadne prvky formulára. Vytvoríme ho programovo, ako celú tabuľku. To znamená, že tabuľka bude popísaná a vytvorená v momente otvorenia formulára alebo pomocou tlačidla - podľa toho, kto to potrebuje.

K vytvoreniu tabuľky vo formulári dochádza prostredníctvom popisu tabuľky hodnôt ako atribútu:
SelectionTypeArray = Nové pole; Pole SelectionType.Add(Type("Tabuľka hodnôt")); ChoiceTypeDescription = New TypeDescription(ChoiceTypeArray); Pole detailov = Nové pole; Array of Attributes.Add(New Form Attributes("Schedule Table", Description of SelectionType, "", "TZN")); Teraz musíme vytvoriť tabuľku hodnôt programu, ktorá obsahuje údaje. Ak sa tabuľka hodnôt získa z dotazu, potom je všetko viac-menej v poriadku. Ak je tabuľka vytvorená ručne, význam stĺpcov, ktoré budú obsahovať čísla alebo dátumy, možno vytvoriť pomocou „Popis typov“. Ide o to, že stĺpce v tabuľke hodnôt musia mať nejaký typ. Ak sa napríklad očakáva, že používateľ bude údaje v týchto stĺpcoch vypĺňať interaktívne, potom nemôžete pridať stĺpec tabuľky hodnôt len ​​s názvom, musí mať typ. Majte na pamäti - je to veľmi dôležité, pretože... Tieto druhy prenesieme do tabuľky na formulári.
Vytvoríme tabuľku, ktorá obsahuje niekoľko stĺpcov:
CD = NewDateQualifiers(DateParts.Time); ArrayKD = Nové pole; ArrayCD.Add(Type("Dátum")); DescriptionTypesTime = New DescriptionTypes(ArrayCD,CD); TZ = New ValueTable;
TK.Columns.Add("S", DescriptionTypesTime);
TK.Columns.Add("Pred", DescriptionTypesTime);
TK.Columns.Add("Name");
TK.Columns.Add("Note"); // Celé meno a Poznámka - riadky Ďalej naplníme našu tabuľku programu TK potrebnými údajmi. Dostávame tabuľku TK, ktorá obsahuje potrebné hodnoty a je pripravená na prenos do vytvoreného atribútu formulára. Pre každý stĺpec z TK. Cyklus stĺpcov

Array of Attributes.Add(New Form Attributes(Column.Name, Column.ValueType,"ScheduleTable"));
EndCycle;
ChangeDetails(ArrayDetails);
SelectionFieldsTable = Elements.Add("TZN", Type("FormTable"));
SelectionFieldsTable.DataPath = "ScheduleTable";
SelectionFieldTable.Display = TableDisplay.List;

Toto je jednoduchá kombinácia a náš stôl je pripravený.

Pre každý stĺpec z TK. Cyklus stĺpcov

NewElement = Elements.Add(Stĺpec.Názov, Typ("Pole formulára"), Tabuľka výberu poľa);
NewElement.View = FormFieldView.InputField;
NewElement.DataPath = "ScheduleTable." + Názov stĺpca;
NewElement.Width = 10;
EndCycle;

Podmienený dizajn, ak ho potrebujeme, napíšeme ho aj ručne, príkazové menu - ručne. Stolové manipulátory sú tiež písané ručne. Ak chcete napríklad pridať obsluhu udalosti pre tabuľku „Výber“:

Table of SelectionFields.SetAction("Selection","TZNSelection");

Na spracovanie tejto udalosti je predpísaný samostatný postup vo forme postupu:

&OnClient
Procedúra TKNSelection(TK, SelectedRow, Field, StandardProcessing)
//príkazy obsluhy EndProcedure

Všimnite si, že obslužné nástroje tabuliek sa spúšťajú na klientovi, a preto musia mať príkaz ukazovateľa kompilátora

&OnClient

Posledná vec, ktorú som chcel dodať, je, že po všetkých týchto krokoch nezabudnite odovzdať hotovú tabuľku do atribútu formulára:

ValueВFormAttributes(ToR, "ScheduleTable");

Výsledkom je toto:


A tu je spracovanie udalosti „Výber“:



Doslov.

Dúfam, že článok pomôže tým 1C programátorom, ktorí začínajú programovo vytvárať tabuľky na formulári.

Môžete si stiahnuť spracovanie, ktoré programovo vytvorí tabuľku hodnôt a zobrazí ju na spravovateľnom formulári s komentármi, ktoré vám pomôžu vytvoriť si vlastné tabuľky.

Na účtovanie peňazí a tovaru sa v podnikaní široko používajú rôzne tabuľky. Takmer každý dokument je tabuľka.

V jednej tabuľke je uvedený tovar na odoslanie zo skladu. V ďalšej tabuľke sú uvedené povinnosti platiť za tento tovar.

Preto v 1C práca s tabuľkami zaujíma popredné miesto.

Tabuľky v 1C sa tiež nazývajú „tabuľkové časti“. Adresáre, dokumenty a iné ich majú.

Dotaz po vykonaní vráti tabuľku, ku ktorej je možné pristupovať dvoma rôznymi spôsobmi.

Prvý - rýchlejší - výber, získavanie riadkov z neho je možné len v poradí. Druhým je nahranie výsledku dotazu do tabuľky hodnôt a následný náhodný prístup k nemu.

//Možnosť 1 – sekvenčný prístup k výsledkom dotazu

//získajte stôl
Select = Query.Run().Select();
// prejdeme postupne všetky riadky výsledku dotazu
Zatiaľ čo Select.Next() Loop
Report(Selection.Name);
EndCycle;

//Možnosť 2 – nahrávanie do tabuľky hodnôt
Request = New Request("SELECT Name FROM Directory.Nomenclature");
//získajte stôl
Tabuľka = Query.Run().Unload().
//ďalej môžeme tiež iterovať cez všetky riadky
Pre každý riadok z cyklu tabuľky
Report(String.Name);
EndCycle;
//alebo ľubovoľný prístup k reťazcom
Riadok = Table.Find("Lopata", "Nazov");

Dôležitou vlastnosťou je, že v tabuľke získanej z výsledku dotazu budú všetky stĺpce presne napísané. To znamená, že vyžiadaním poľa Názov z adresára Nomenklatúra získate stĺpec typu String s povolenou dĺžkou najviac N znakov.

Tabuľka vo formulári (hrubý klient)

Používateľ pracuje s tabuľkou, keď je umiestnená na formulári.

Základné princípy práce s formulármi sme rozoberali na hodine a na hodine

Položme teda tabuľku na formulár. Ak to chcete urobiť, potiahnite tabuľku z panela Ovládacie prvky. Podobne môžete z ponuky vybrať položku Form/Insert Control.

Dáta je možné uložiť do konfigurácie – vtedy je potrebné vybrať existujúcu (predtým pridanú) tabuľkovú časť konfiguračného objektu, ktorého formulár upravujete.

Kliknite na tlačidlo "..." vo vlastnosti Data. Aby ste videli zoznam tabuľkových častí, musíte rozbaliť vetvu Object.

Keď vyberiete tabuľkovú časť, 1C sám pridá stĺpce do tabuľky vo formulári. Riadky zadané používateľom do takejto tabuľky sa automaticky uložia spolu s referenčnou knihou/dokumentom.

V rovnakej vlastnosti Data môžete zadať ľubovoľný názov a vybrať typ Tabuľka hodnôt.

To znamená, že bola vybratá ľubovoľná tabuľka hodnôt. Nebude automaticky pridávať stĺpce, ani sa nebude automaticky ukladať, ale môžete si s ním robiť, čo chcete.

Kliknutím pravým tlačidlom myši na tabuľku môžete pridať stĺpec. Vo vlastnostiach stĺpca môžete zadať jeho názov (pre referenciu v kóde 1C), záhlavie stĺpca vo formulári, spojenie s atribútom tabuľkovej časti (druhá - ak nie je vybratá ľubovoľná tabuľka, ale tabuľková časť).

Vo vlastnostiach tabuľky vo formulári môžete určiť, či môže používateľ pridávať/odstraňovať riadky. Pokročilejším formulárom je začiarkavacie políčko View Only. Tieto vlastnosti je vhodné použiť na organizovanie tabuliek určených na zobrazovanie informácií, ale nie na úpravu.

Ak chcete spravovať tabuľku, musíte vo formulári zobraziť panel príkazov. Vyberte položku ponuky Formulár/Vložiť ovládací/Príkazový riadok.

Vo vlastnostiach panela príkazov začiarknite políčko Automatické dopĺňanie, aby sa tlačidlá na paneli zobrazovali automaticky.

Tabuľka vo formulári (tenký/spravovaný klient)

Na spravovanom formulári tieto akcie vyzerajú trochu inak. Ak potrebujete umiestniť tabuľkovú časť do formulára, rozbaľte vetvu Objekt a potiahnite jednu z tabuľkových častí doľava. To je všetko!

Ak potrebujete umiestniť tabuľku hodnôt, pridajte nový atribút formulára a v jeho vlastnostiach uveďte typ – tabuľka hodnôt.

Ak chcete pridať stĺpce, kliknite pravým tlačidlom myši na tento atribút formulára a vyberte Pridať stĺpec atribútu.

Potom tiež potiahnite tabuľku doľava.

Ak chcete, aby tabuľka mala panel príkazov, vo vlastnostiach tabuľky vyberte hodnoty v časti Použitie – Umiestnenie panela príkazov.

Nahrávanie tabuľky do Excelu

Akúkoľvek tabuľku 1C umiestnenú vo formulári je možné vytlačiť alebo nahrať do Excelu.

Ak to chcete urobiť, kliknite pravým tlačidlom myši na prázdne miesto v tabuľke a vyberte položku Zoznam.

V spravovanom (tenkom) klientovi je možné podobné akcie vykonávať pomocou položky ponuky Všetky akcie/Zobraziť zoznam.

Otázka Vytvorenie stĺpca tabuľky hodnôt rôznych typov v 1C v8
Odpoveď
Pri vytváraní stĺpca tabuľky hodnôt môžete prejsť rad typov a možno aj konkrétny typ. Pole typov sa používa, keď potrebujete zadať niekoľko rôznych typov pre jeden stĺpec.

Používa sa na označenie typov „všeobecný objekt“ - „Popis typov“. Preto si najprv vysvetlíme, čo je „Popis typov“ („Popis typov hodnôt“).

"Popis typov hodnôt". Na opísanie prijateľných typov hodnôt vlastností rôznych objektov v systéme sa používa špeciálny objekt "Popis typov". Pomocou tohto objektu môžete opísať platné typy hodnôt, ktoré možno priradiť vlastnostiam. Na ďalšie obmedzenie možných hodnôt primitívnych typov Number, String a Date sú poskytnuté kvalifikácie. Kvalifikátory popisujú parametre, ako je dĺžka reťazca alebo čísla, platné časti dátumu atď.

Syntax metódy „Popis typu“.

Nové typy popisu(<Исходное описание типов>, <Добавляемые типы>, <Вычитаемые типы>, <Квалификаторы числа>, <Квалификаторы строки>, <Квалификаторы даты>)
Možnosti:
<Исходное описание типов> (voliteľné)
Typ: PopisTypy. Prvotný popis typov, na základe ktorých sa postaví nový.
<Добавляемые типы> (voliteľné)
Typ: Array, String. Pole hodnôt typu Typ pozostávajúci z typov, ktoré sa použijú v objekte, alebo reťazec obsahujúci názvy typov oddelené čiarkami.
<Вычитаемые типы> (voliteľné)
Typ: Array, String. Pole hodnôt typu (alebo reťazec obsahujúci názvy typov oddelené čiarkami) pozostávajúce z typov, ktoré budú vylúčené z úvodnej deklarácie špecifikovanej v prvom parametri.
<Квалификаторы числа> (voliteľné)
Typ: QualifiersNumbers. Kvalifikátory čísel, ktoré popisujú platné hodnoty číselného typu.
<Квалификаторы строки> (voliteľné)
Typ: QualifiersStrings. Reťazcové kvalifikátory, ktoré popisujú platné hodnoty typu reťazca.
<Квалификаторы даты> (voliteľné)
Typ: QualifiersDates. Kvalifikátory dátumu, ktoré popisujú platné hodnoty typu Dátum.
Popis:
Vytvorí popis typu na základe iného popisu typu pridaním niektorých typov a vylúčením iných. Ak nie je špecifikovaný nový kvalifikátor, zachovajú sa kvalifikátory pôvodnej deklarácie typu.
Príklad použitia objektu „Popis typu“:

// rozšírte popis platných typov o nové typy Pole = Nové pole; Pole. Pridať(Typ( "Referenčný odkaz. Metódy")); Pole. Pridať(Typ("Číslo" )); Sign = ValidSign. Nenegatívne; QuNumbers = New QualifiersNumbers(10, 2, Sign); ValidTypes = NewTypeDescription(ValidTypes, Array, KvNumbers);
Teraz v skutočnosti príklady správneho vytvárania hodnôt stĺpcov rôznych typov v tabuľke.

Vo všeobecnosti stačí definovať typy stĺpcov takto:

TK. Stĺpce. Pridať( "Index triedenia", Nové typy popisov ( "Číslo" ) ); TK. Stĺpce. Add("SectionName", New TypeDescription("String" ) ); TK. Stĺpce. Add("DataCorr" , New TypeDescription("Date" ) ); TK. Stĺpce. Pridať( "Bezpodmienečné vymazanie", New TypeDescription("Boolean")); TK. Stĺpce. Add("Nomenklatúra" , New TypeDescription() ) ; TK. Stĺpce. Add("SectionData" , New TypeDescription("Structure" ) ​​​​); // príklad vytvorenia stĺpcov "číslo" a "reťazec" s objasnením parametrov: TK. Stĺpce. Pridať( "Dokončené v percentách", Nové typy popisov ( "Číslo" , Nové kvalifikačné čísla ( 18, 2)) ); TK. Stĺpce. Add("SectionName" , NewTypeDescription("String" , , NewStringQualifiers(200, AllowedLength. Variable) ) ); TK. Stĺpce. Add("DecommissionedDate" , NewTypeDescription("Date" , , , NewDateQualifiers(DateParts.DateTime) ) );

Vo všeobecnosti sa však pole odovzdáva ako typ stĺpca. Pole sa používa, keď je potrebné k jednému stĺpcu priradiť niekoľko typov. Potom bude definícia štruktúry asi takáto (príklady sú uvedené pre rôzne typy stĺpcov, keď typ je pole, ale pre zjednodušenie je zloženie poľa uvedené rovnakého typu, aby nedošlo k zámene )

////// tvorba štruktúry technických špecifikácií (tvorba stĺpcov) //// definovať kvalifikátory na nahradenie v poliach kvalifikátorov v technickej špecifikácii CN = New QualifiersNumbers(18, 9); KS = NewStringQualifiers(200); CD = NewDateQualifiers(DataParts.DateTime) ; //// definovať popisy typov pre budúce stĺpce TK // Pole je počiatočný popis typov, na základe ktorých sa vytvorí nové // Upozorňujeme, že pre stĺpce TK je počiatočným popisom typu v tomto príklade pole Pole = Nové pole; Pole. Add(Type("String") ); TypeDescriptionString = New TypeDescription(Array, , KS) ; Pole. Jasný() ; Pole. Pridať(Typ("Číslo") ); TypeDescriptionNumber = New TypeDescription(Array, , , CN) ; Pole. Jasný() ; Pole. Add(Type("Dátum") ); DescriptionTypesDate = New DescriptionTypes(Array, , , , CD) ; Pole. Jasný() ; Pole. Pridať(Typ( "DirectoryLink.Nomenclature")); Popis typuNomenklatúra = Nový popis typu (pole) ; Pole. Jasný() ; Pole. Pridať(Typ( "DirectoryLink.SeriesNomenclature")); TypeDescriptionSeries = New TypeDescription(Array) ; Pole. Jasný() ; Pole. Pridať(Typ( "DirectoryLink.Quality")); TypeDescriptionQuality = New TypeDescription(Array) ; Pole. Jasný() ; Pole. Add(Type("Boolean") ); TypeDescriptionBoolean = New TypeDescription(Array) ; // skutočné pridanie stĺpcov do TK (vytvorenie štruktúry budúcej TK) TK. Stĺpce. Add("Nomenklatúra", PopisTypyNomenklatúra) ; TK. Stĺpce. Add("Code" , TypeDescriptionString) ; TK. Stĺpce. Pridať( "Nomenklatúra série", PopisTypySeries); TK. Stĺpce. Add("Kód účtu" , Typ PopisString) ; TK. Stĺpce. Add("Dátum akcie" , TypPopisDátum) ; TK. Stĺpce. Add("Kvalita" , TypPopisKvalita) ; TK. Stĺpce. Add("NumberUS", DescriptionTypesNumber) ; TK. Stĺpce. Add("Odpísať" , TypeDescriptionBoolean) ; . . . //////// vytvorenie štruktúry technických špecifikácií (vytvorenie stĺpcov) ////////////////////////////////////////////////////////

Ak chcete pridať riadok do tabuľky hodnôt, pozrite si časť