1s 8.3 tabuľková časť v príkladoch

  • 14.12.2023

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ť programovú tabuľku hodnôt, 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
Správa(Výber.Názov);
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.

Existujú dva špeciálne spôsoby vyhľadávania v tabuľke hodnôt:

1. Nájdite

TVHorizon = Directories.Nomenclature.FindByName("TVHorizon");
FoundString = TZNomenclature.Find(TVHorizon);
//môžeme tiež určiť, v ktorých stĺpcoch sa má vyhľadávať, aby sa vyhľadávanie urýchlilo
FoundString = TZNomenclature.Find(TVHorizon, "Nomenklatúra");

Táto metóda vráti prvý nájdený riadok s požadovanou hodnotou alebo Nedefinovaný, ak ho nenájde. Preto je vhodné ho použiť na vyhľadávanie jedinečných hodnôt, pretože v opačnom prípade, keď sa nájde hodnota, budete ju musieť odstrániť z tabuľky, aby ste našli ďalšiu.

Aby ste sa vyhli týmto problémom, existuje nasledujúca metóda, ktorá vám umožní nájsť pole zodpovedajúcich reťazcov:

2. FindStrings


Selection Structure.Insert("Nomenklatúra", TVHorizon); // najprv uveďte stĺpec, kde hľadať, a potom čo hľadať.

Táto metóda vždy vráti pole, ale ak sa nič nenájde, môže byť prázdne. A táto metóda, rovnako ako predchádzajúca, vracia riadky tabuľky hodnôt samých, a nie samotné hodnoty v samostatnom poli. Preto zmenou hodnôt v reťazci poľa alebo, ako v predchádzajúcej metóde, pre nájdený reťazec, zmeníte hodnotu v spracovanej tabuľke hodnôt.

Ďalšou dobrou vecou tejto metódy je, že dokáže prehľadávať niekoľko stĺpcov tabuľky hodnôt naraz:


SelectionStructure = Nová štruktúra;
Selection Structure.Insert("Nomenklatúra", TVHorizon);
Selection Structure.Insert("Množstvo", 10);
FoundArray of Rows = TZNomenclature.FindLines(SelectionStructure);

Jediným negatívom, ako vidíte, je, že nemôžete použiť iné typy porovnávania ako „rovná sa“