Pole v 1C je sada některých hodnot. Hodnoty v jednom poli mohou být různých typů.

Pole lze získat provedením různých funkcí, například Vyložit sloupec ()tabulky hodnot; ve formě pole můžete získat vybrané řádky dynamického seznamu atd. Můžete také vytvořit pole „ručně“.

Vytvoření pole

1. Jak vytvořit pole požadované velikosti

nArray \u003d nové pole (4); // vytvořil pole 4 prvků

ПArray [0] \u003d "My";
nArray [1] \u003d "vytvořeno";
nArray [2] \u003d "nový";
nArray [3] \u003d "pole";

2. Jak vytvořit prázdné pole a přidat do něj prvky

nArray \u003d nové pole; // vytvořil prázdné pole

// Vložte hodnoty prvků pole

PArray. Přidat („My“);


3. Jak vytvořit vícerozměrné pole.

Uvažujme o této otázce na příkladu dvojrozměrného pole, protože pole ve velkém měřítku se používají mnohem méně často a mechanismus jejich provozu se neliší od dvourozměrného.

nArray \u003d nové pole (4, 2); // vytvořil pole 4x2

// Vložte hodnoty prvků pole a každé slovo očíslovejte

ПArray [0] [0] \u003d "1.";
nArray [0] [1] \u003d "My";
pArray [1] [0] \u003d "2.";
nArray [1] [1] \u003d "vytvořeno";
pArray [2] [0] \u003d "3.";
nArray [2] [1] \u003d "vícerozměrný";
pArray [3] [0] \u003d "4.";
nArray [3] [1] \u003d "pole";

4. Jak vytvořit pevné pole

Pevné pole se liší od běžného pole v tom, že jej nelze upravit. Hodnoty prvků takového pole nemůžete přidávat, odebírat ani měnit.

Pevné pole lze získat z běžného pole:

nArray \u003d nové pole;

PArray. Přidat („My“);
pArray. Přidat („vytvořeno“);
pArray. Přidat nový");
pArray. Přidat ("pole");

FArray \u003d nový FixedArray (nArray); // vytvořil pevné pole

Funkce pole

Budeme uvažovat o fungování funkcí na příkladu jednorozměrného pole pArrayvytvořené výše a skládající se ze 4 prvků:

  1. „Vytvořeno“
  2. "Nový"
  3. „Pole“.
Funkce BBorder ()

Získá nejvyšší index prvku v poli. Je to vždy o jeden méně než počet prvků v poli.

Index \u003d nArray. BBorder () // 3;

Funkce Insert ()

Vloží určitou hodnotu do prvku pole v zadaném indexu. Následné prvky pole jsou posunuty

pArray. Vložit (3, „nová hodnota“) // Nyní se pole skládá z 5 prvků

Funkce Add ()

Vytvoří nový prvek na konci pole a vloží tam danou hodnotu

pArray. Přidat („.“) // přidán bod jako pátý prvek pole;

Množství funkce ()

Vrátí počet prvků v poli.

pArray. Number (); // 4

Funkce Najít ()

Hledá pole pro zadaný prvek. Pokud je nalezen, vrátí jeho index. Pokud není nalezen, vrátí se Nedefinováno.

Index \u003d nArray. Najít ("pole"); // 3
Index \u003d nArray. Najít( "řetězec, který neexistoval"); // Nedefinováno

Funkce Clear ()

Odebere všechny hodnoty z pole.

pArray. Průhledná ();

Funkce Get ()

Získá hodnotu pole na jeho indexu. Stejný problém lze vyřešit prostřednictvím.

Hodnota \u003d nArray. Získejte (3) // "pole"
Hodnota \u003d nArray [3]; // „pole“

Funkce Delete ()

Odebere prvek pole indexem

pArray. Odstranit (3);

Funkce set ()

Nastaví hodnotu prvku pole podle indexu. Funguje stejně.

pArray. Sada (3, „pole!“);
nArray [3] \u003d "pole!" ;

Jak procházet pole

Můžete procházet všechny prvky pole bez zadání indexu:

Pro každý Array Element z n Array Loop
Zpráva (prvek pole);
Konec cyklu;

Index můžete použít při procházení:

Pro index \u003d 0 podle nArray. B Hraniční () cyklus
Zpráva (pArray [rejstřík]);
Konec cyklu;

Jak procházet vícerozměrné pole

Vícerozměrné pole se prochází pomocí stejných smyček (viz výše), ale jedna smyčka musí být vnořena do druhé.

Pro každý Element1 z mArray Loop
Pro každý prvek Element2 ze smyčky Element1
Zpráva (Položka 1);
Konec cyklu;
Konec cyklu;

Nebo pomocí indexů.

mArray \u003d nové pole (3, 4);

Pro Index1 \u003d 0 podle mArray. B Hraniční () cyklus
Pro Index2 podle mArray [Index1]. B Hraniční () cyklus
Zpráva (mArray [Index1] [Index2]);
Konec cyklu;
Konec cyklu;

Řazení pole

K seřazení pole potřebujeme pomocný objekt s typem Seznam hodnot.

ListValue \u003d nový ListValue; // vytvoření seznamu hodnot
ListValue LoadValues \u200b\u200b(pArray); // načte hodnoty z pole do seznamu
ListValue Seřadit podle hodnoty (směr řazení. Vzestupně); // seřadit vzestupně
ListValue Seřadit podle hodnoty (směr řazení. Sestupně); // nebo sestupně
nArray \u003d ListValue Vyložit (); // vypíše seřazené hodnoty zpět do pole

Porovnání dvou polí

Než přistoupíme k popisu srovnávací funkce, souhlasíme s tím, že pole jsou považována za identická, pokud mají stejný počet prvků a odpovídající prvky pole jsou stejné. Pak lze pro srovnání použít následující funkci (mimochodem, tato funkce je již v některých typických konfiguracích k dispozici):

Pole pro porovnání funkcí (pole 1, pole 2)

Pokud Array1. Číslo()<> Pole 2. Množství () Pak
Vrátit NEPRAVDA; // Pole nejsou stejná, nemá smysl porovnávat prvky.
EndIf;

Pro index \u003d 0 podle Array1. B Hraniční () cyklus
If Array1 [Rejstřík]<> Pole 2 [Rejstřík] Pak
Return False; // tyto prvky nejsou stejné, proto nejsou pole stejná
EndIf;
Konec cyklu;

Návrat True; // Pokud bychom se dostali sem, pak jsou pole stejná
EndFunction

Funkci je třeba předat 2 porovnávaným polím. Funkce vrací hodnotu Skutečnýpokud jsou pole stejná a Ležícípokud ne stejné.

O čem je tento článek

Tento článek navazuje na sérii článků „První kroky ve vývoji na 1C“. Diskutuje o tom, jak pracovat s obecnými kolekcemi. Po přečtení článku se dozvíte:

  • Co jsou to obecné sbírky, kdy a kdy by měly být použity?
  • Co mají všechny univerzální sbírky společné? Jaké techniky můžete použít pro práci se všemi?
  • Co je to pole a jak a kdy jej použít? Jaké metody má?
  • Proč použít konstrukci? Jak se liší od pole?
  • Kdy použít seznam hodnot? Jak to zobrazím na formuláři?
  • Shoda - co to je a kdy ji použít? Jaké jsou výhody oproti struktuře?
  • K čemu se používá tabulka hodnot? Jak popsat jeho strukturu? Jak mohu přidat / odebrat řádky? Jak to uvést do formy?
  • Hodnotový strom - k čemu se používá? Jak vyplnit a zobrazit na formuláři? Jak s ním pracovat?

Použitelnost

Článek pojednává o platformě 1C: Enterprise 8.3 aktuálního vydání.

Jak pracovat s univerzálními kolekcemi v 1C

Kolekce hodnot je druh kontejneru, který může obvykle obsahovat libovolný počet prvků. V tomto případě často neexistují žádná přísná omezení pro datový typ.

Do obecné kolekce můžete přidat hodnoty. Všechny hodnoty v kolekci lze procházet. Tyto kolekce se používají hlavně pro nějaký druh zpracování v algoritmech. Ty. to jsou některé dynamické struktury, které existují po dobu trvání algoritmu.

Je důležité si uvědomit, že kolekce nejsou uloženy v databázi (nemluvíme o datovém typu úložiště hodnot, který může ukládat téměř jakýkoli datový typ).

Existují různé druhy obecných kolekcí: Array, Structure, Matching, Fixed Array, Table of Values, Tabular, atd. Ale všechny sbírky mají podobné chování.

Kolekce může být vytvořena jako výsledek funkce (funkce vrací obecnou kolekci jako hodnotu).

Můžete získat novou kolekci ručně přístupem ke konstruktoru a instancí třídy.

Například: OurArray \u003d nové pole;

Konstruktory pro mnoho obecných kolekcí jsou parametrizovány.

Takže v konstruktoru pro můžete určit počet položek v odpovídajících rozměrech. Ty. můžete okamžitě prohlásit multidimenzionální .

Odpovídající popis konstruktoru je v pomocníkovi syntaxe.

Tedy pomocí parametrů konstruktoru můžete okamžitě nastavit požadované chování tohoto objektu.

Ale parametry jsou volitelné, vývojář je nemůže nastavit a dále definovat chování pole, jak uzná za vhodné.

Pomocí konstruktoru lze vytvořit téměř jakoukoli obecnou kolekci (s výjimkou tabulkových sekcí, které fungují jako konfigurační objekty).

U obecných kolekcí existují obecné pojmy, jako je index a číslo. Každá položka v kolekci má index. V tomto případě index začíná na nule.

Chcete-li odkazovat na položku Naše pole, můžete použít odkaz na index, pro který je index uveden v hranatých závorkách.

Například, Naše pole... Všimněte si, že v tomto případě systém vrátí prvek Array s indexem 3 a v pořadí je to čtvrtý prvek Array.

U některých sbírek existuje také koncept čísla řádku. Číslo řádku začíná jednou. Například tabulkový oddíl má vlastnost, jako je číslo řádku. Je důležité mít na paměti, že pokud známe číslo řádku a chceme odkazovat na index, měla by se jako index použít hodnota o jednu menší než číslo řádku.

Koncept čísla řádku neexistuje pro všechny kolekce, ale hlavně pro ty, které lze zobrazit v uživatelském rozhraní.

U všech sbírek se používá procházení sbírek. Obtok je možný dvěma způsoby: cyklus pro a cyklus Pro každou z.

Pro většinu generických kolekcí jsou použitelné následující metody: Count, Index, Add, Insert, Delete, and Find.

Count je funkce, která vrací počet položek v kolekci. Může být použit před smyčkou Projak je znázorněno na obrázku.

Metoda Index neexistuje pro všechny kolekce, ale pouze pro ty, na jejichž prvky lze odkazovat. Příkladem je Tabulka hodnot.

Tabulka hodnotJe konkrétní kolekce řetězců; řetězce mohou obsahovat různé sloupce s různými typy hodnot.

Každý řádek je nezávislou entitou. Můžete získat odkaz na něj, prostřednictvím tohoto řádku můžete odkazovat na hodnoty sloupců v tomto řádku.

Metoda Index umožňuje určit, který index odpovídá danému řádku (tj. Aktuální pozici řádku v tabulce). Hodnoty indexu začínají na nule.

Téměř každá obecná kolekce má metody pro přidávání nových hodnot do dané kolekce. Obrázek ukazuje, jak vyplnit pole hodnotami od 0 do 10 dvěma způsoby.

Aby bylo možné přidat prvek do pole, můžeme použít metodu Přidat do, uveďte přidanou hodnotu v závorkách. Hodnota bude přidána na konec seznamu, tj. Pole se bude díky poslední pozici neustále zvětšovat.

Další metodou, která umožňuje přidávat hodnoty do kolekce, je metoda Vložit... Liší se od metody Přidat dotakže můžete určit, kam vložit přidaný prvek.

Syntax: Vložit (,)

První parametr je index, do kterého bude vložena nová hodnota. Ty. můžeme například určit, že každá hodnota by měla být vložena na začátek seznamu (druhý způsob na obrázku výše).

Chcete-li odebrat položky z kolekce, použijte metodu Vymazat... V metodě Delete je indexem označen, který prvek odstraníme.

Syntax: Odstranit ()
Příklad použití: OurArray.Remove (5);

Je třeba poznamenat, že pro ty kolekce, kde řetězce představují nezávislou entitu (například pro Tabulky hodnot), můžeme také použít metodu získání indexu, abychom poté odstranili daný řádek.

Téměř všechny sbírky mají metodu vyhledávání hodnot - Najít... Hodnota, kterou chceme najít, je předána metodě. V některých kolekcích můžete uvést libovolná omezení.

Například v Tabulka hodnotmůžete určit ty řádky, ty sloupce, ve kterých chcete hledat.

Pokud je nalezena hodnota, vrátí tato metoda index nebo konkrétní řetězec. Pokud není nalezena žádná hodnota, je vrácena hodnota typu Nedefinováno... Aplikováno na pole, vrátí se Indexnebo hodnota Nedefinováno.

Příklad použití: OurVariable \u003d OurArray.Find (8);

Generické sbírky lze vyčistit velmi rychle, tj. odstranit naprosto všechny prvky. K tomu se používá metoda Průhledná ()který odstraní prvky pole, řádky Tabulky hodnotnebo data z jiných sbírek.

Další metody pro pole

Metoda InBoundary () vrací počet položek minus jedna. Ty. použijeme-li smyčku Pro, místo metody Quantity můžeme tuto metodu okamžitě použít Okraj().

Proměnnou NumberInArray lze zejména definovat odlišně:

CountInArray \u003d OurArray.Boundary ();
Při popisu samotného cyklu by se tedy od této proměnné nemělo odečítat.

Metoda Set umožňuje přiřadit hodnotu prvku Array indexem.

Syntax: Nastavit (,)

Příklad: OurArray.Set (2.8);

Alternativní možnost: OurArray \u003d 8;

Můžete použít metodu pro Array Dostat, aby bylo možné načíst hodnotu podle indexu, aniž by bylo nutné používat hranaté závorky.

Syntax: Dostat()

Příklad: OurVariable \u003d OurArray.Get (2);

Alternativní možnost: OurVariable \u003d OurArray;

Struktura univerzální kolekce

Struktura, stejně jako pole, může mít neomezený počet prvků, ale obsah prvku se liší od pole.

Struktura je kolekce, jejíž každá hodnota se skládá z dvojice. První prvek dvojice se nazývá Klíč... Druhý prvek páru je Hodnota.

KlíčJe přísně datový typ řetězce, který popisuje hodnotu. Například, Klíč„Kód“ může odpovídat hodnotě 113; Klíč„Jméno“ znamená „Vasya“. Na samotnou hodnotu neexistuje žádné omezení datového typu.

Struktura je velmi pohodlná, pokud chceme vytvořit určitý seznam parametrů. Pokud tohle Strukturavolala Naše struktura, pak budeme odkazovat na jeho dvě hodnoty takto: OurStructure.Code a OurStructure.Name.

Takové volání je mnohem pohodlnější, než kdybychom definovali všechny parametry v poli a přistupovali k nim pomocí indexu.

Díky struktuře je programový kód čitelný (srozumitelný). Struktura se používá poměrně často, mnohem častěji než Array.

Používá se k popisu některých parametrů, které ve všech algoritmech často existují ve velkém počtu.

Kromě toho se struktura používá, pokud procedura a funkce obsahují velké množství předaných parametrů.

Pak je mnohem pohodlnější zapsat všechny parametry do struktury a přesně je přenést. Ty. existuje „balení“ parametrů postupů a funkcí.

Samostatně je třeba poznamenat, že jako Klíčve struktuře se nemusí objevit absolutně žádný řádek. Jsou stanovena určitá omezení.

Klíčby měl fungovat jako identifikátor. To znamená, že v Klíčnesmí být mezery a nesmí začínat číslicí.

Start povolen Klíč s písmenem nebo podtržítkem. Takto, Klíčmusí splňovat požadavky na vytváření identifikátorů.

Všimněte si, jak jinak se struktura liší od pole. Struktura má metodu Vložit, existují dva způsoby vložení do pole: Vložit(do konkrétní polohy) a Přidat do(na konci seznamu). V poli jsou všechny prvky seřazeny.

Struktura je druh neuspořádané množiny. Proto pro Strukturu existuje pouze metoda vložení.

Hodnota se vkládá nikoli na konkrétní pozici, ale do určené sady. K indexu nelze získat přístup u struktur, jako u jiných obecných kolekcí.

K prvkům struktury se přistupuje pouze pomocí názvu klíče. Nicméně pro každou smyčku funguje i pro strukturu, ale neměli byste se spoléhat na pořadí prvků struktury.

Struktura je vytvořena stejně jako ostatní generické kolekce pomocí konstruktoru New se specifikací datového typu Structure.

Stejně jako Array může mít konstruktor Struct parametry. Ty. pomocí konstruktoru je možné popsat obsah samotné struktury.

Na rozdíl od pole, kde můžete jednoduše zadat počet prvků pro všechny dimenze, ve struktuře je možné určit samotný obsah.

Například: OurStructure \u003d New Structure („Code, Name“, 133, „Vasya“);

Nejprve jsou uvedeny názvy klíčů, oddělené čárkami a poté ve stejném pořadí hodnoty parametrů.

Chcete-li do struktury přidat novou hodnotu, existuje metoda Vložitkterý vloží nový pár (klíč a hodnota).

Například: OurStructure.Insert ("Členové rodiny", 3);

Pro Strukturu je charakteristická jiná metoda, která se používá poměrně často. Toto je metoda Vlastnictví.

Pomocí této metody můžete pochopit, zda v této struktuře existuje takový prvek, jehož klíč má takový a takový název.

Pokud takový prvek existuje, systém vrátí hodnotu True, jinak - False.

Například výraz OurStructure.Property ("Family Members") bude rovna True. Tato metoda se poměrně často používá při analýze struktury.

Stejně jako u jakékoli obecné kolekce můžete přistupovat k vlastnostem struktury podle indexu. Ale index pro strukturu je řetězcová hodnota.

Například: Zpráva (OurStructure [„Family Members“]);

Neměli byste však zapomínat, že struktura je neuspořádaná sada objektů, a proto není povolen odkaz indexem 0, 1, 2.

Obecná kolekce Seznam hodnot

Seznam hodnotje lineární seznam položek libovolného datového typu.

Každý prvek se skládá z několika hodnot. Seznam hodnot lze schematicky znázornit jako seznam se čtyřmi sloupci.

První sloupec - Označit... Má booleovský datový typ a umožňuje uživateli zaškrtnout nebo zrušit zaškrtnutí políček.

Dalším sloupcem je obrázek, který může tento prvek nějakým způsobem vizuálně reprezentovat, tj. porovnejte tento řádek s jakýmkoli obrázkem.

Třetí sloupec je samotná uložená hodnota, tj. je to jakýkoli datový typ a na různých řádcích se může lišit.

Čtvrtý sloupec je pohled, tj. toto je nějaký druh popisu řetězce této hodnoty. Pohled se uživateli zobrazí při prohlížení této položky. V tomto případě, pokud reprezentace není zadána, se systém pokusí získat reprezentace pro prvek obsažený v této pozici sám.

Seznam hodnot- toto je objekt, se kterým může uživatel vizuálně pracovat. Ty. Seznam hodnotlze zobrazit na formuláři.

Uživatel s ním může provádět určité akce. Kromě, Seznam hodnotlze odvodit nezávisle pomocí metod, tj. zobrazit na obrazovce v nějaké větvi algoritmu (s výjimkou kódu serveru), takže uživatel vybere nějaký řádek nebo zaškrtne.

Nalézt Seznam hodnotv asistentovi sitaxu. Konstruktor Seznam hodnotnení parametrizováno (nemůžete nastavit žádné výchozí hodnoty).

Existují metody jako:

  • Vložit (,);
  • Přidat (,);
  • Číslo();
  • Index().

Existují také speciální metody, například Vyložit hodnoty ()... Tím se vytvoří pole, do kterého se zkopíruje seznam hodnot. Například:

ArrayElements \u003d ListPriceTypes.LoadValues \u200b\u200b();

Existuje také obrácená metoda:
PriceTypeList.LoadValues \u200b\u200b(ArrayElements);

Existují metody vyhledávání:
FindByValue (); FindById ().

Existuje metoda kopírování:
ListCopy \u003d PriceTypeList.Copy ();
Tato metoda je určena k provedení nějaké úpravy kopií.

Existují metody:
SortByValue ();
Řadit podle prezentace ().

Metody SelectElement (,)a Zkontrolovat položky ()zavolat modální dialogové okno, které zastaví provádění algoritmu, dokud uživatel nezavře dané okno.

Chcete-li použít tyto metody ve vlastnostech konfigurace Režim použití modality by měla být nastavena na hodnotu Použití.

Ukázkový kód volaný z modulu Managed Application:

Zobrazit daný kód v uživatelském režimu (modální dialog).

Níže Seznam hodnotpoužívá se jako přístupný datový typ pro rekvizity formuláře. Vytvoříme nové rekvizity pro formulář zpracování, definujeme typ pro něj Seznam hodnota zobrazte jej na formuláři.

Vytvořte nový tým Dárkové předměty, přeneste do formuláře a definujte pro něj obslužnou rutinu akce.

Ve vlastním režimu se po kliknutí na tlačítko Vyplnit dárky ve formuláři pro zpracování zobrazí vyplněný seznam.

V případě potřeby lze seznam upravit: přidat některé prvky, některé odstranit.

Všestranný soulad s předpisy

Tato kolekce je velmi podobná Struktura... Stejně jako struktura je shoda kolekce hodnot, které se skládají z klíče a samotné hodnoty.

Hlavní rozdíl spočívá v tom, že jakýkoli datový typ lze zadat jako klíč, stejně jako pro hodnotu. S ohledem na tuto zvláštnost je nutné odkazovat na hodnotu shody indexem; klíčová hodnota je uvedena jako hodnota indexu.

Klíčem může být jiný datový typ než řetězec. Vlastnosti a metody práce s Korespondencí jsou prakticky stejné jako u struktury.

Konstruktor shody, na rozdíl od struktury, neobsahuje možnost specifikovat parametry.

Příklad použití:

Korespondence je užitečná, když potřebujete propojit libovolné dvě struktury. Například každý řádek tabulkové sekce musí být spojen s řádkem z tabulky hodnot.
V tomto případě se jako klíč shody použije řádek v tabulkové části a zobrazí se odpovídající hodnota.

Při vkládání položek do kolekce Match kromě metody Vložit (,) Existuje další způsob, jak vložit hodnotu - používá se obvyklý operátor přiřazení.

Například: Náš zápas \u003d nový zápas;
Shoda \u003d 999;

Ty. pokud položka nebyla v kolekci přítomna, bude pomocí operátoru přiřazení přidána a pokud byla přítomna, bude aktualizována.

To se liší od struktury.

Obecná kolekce Tabulka hodnot

Tabulka hodnotje tabulka s libovolným počtem řádků a libovolným počtem sloupců. Průnik může ukládat hodnoty jakéhokoli datového typu. V případě potřeby lze sloupce psát, to znamená, že můžete definovat, ve kterém sloupci je uložen jaký typ dat.

Sloupce můžete nechat netypické, pak mohou být hodnoty různých typů uloženy v jednom sloupci v různých řádcích.

Rozdíly Tabulky hodnotz 2D pole:

  • jedná se o objekt, se kterým může uživatel pracovat (lze zobrazit tabulku hodnot, uživatel ji může vyplnit, později si přečíst zadaná data);
  • vytváření indexů pro rychlé vyhledávání;
  • klonování, vyplnění celého sloupce určitou hodnotou, vyložení všech sloupců do pole.

Tabulka hodnotpoužívá se jako druh vyrovnávací paměti pro ukládání informací. Tabulka hodnotvrácena a přijata jako parametr mnoha systémovými metodami. Je možné sestavit dotaz do tabulky hodnot.

Tak, Tabulka hodnotsestává ze sady řádků a sady sloupců. Řádky i sloupce jsou kolekce.

Ty. uvnitř sbírky Tabulka hodnotexistují další dvě sbírky. Pojďme se obrátit na pomocníka syntaxe a najít Tabulka hodnot.

Podporované datové typy: sám o sobě Tabulka hodnotkterý se skládá z řádků. Každý řádek je reprezentován datovým typem StringTableValues, který má své vlastní vlastnosti a metody. Tady je CollectionColumnsTablesValuesmá také určité vlastnosti.

Důležitý bod! Postup, který se tvoří Tabulka hodnot, by měl kompilovat & AtServer.

Před zahájením práce s Tabulka hodnot, je nutné určit, které sloupce v něm budou obsaženy (tj. vytvořit je). Syntax:

Přidat (,)
(volitelný)
Typ: Řetězec.
(volitelný)
Typ: PopisTypy
(volitelný)
Typ: Řetězec.
(volitelný)
Typ: Číslo.

Například:

K volání tohoto postupu použijeme příkaz.

V popisu Tabulky hodnotprvky kolekce jsou přesně RowsTablesValues.

Na rozdíl od sloupců, které se skládají pouze z vlastností (Název, Typ, Nadpis, Šířka), v RowTableValuesexistují jak vlastnosti (odkaz podle názvu sloupce), tak metody (můžete získat a nastavit hodnotu, pracovat s vlastníky).

Chcete-li do tabulky přidat nový řádek, musíte použít buď metodu Přidat ()nebo Vložit ()... V druhém případě byste měli určit, do které pozice má být umístěna požadovaná čára.

Chcete-li přiřadit hodnotu sloupci, odkazujeme na název sloupce nebo index (v hranatých závorkách) v období.

Pro plnění Tabulky hodnotlze použít následující metody:

Průhledná () - odebrat všechny řádky z Tabulky hodnot.

FillValues \u200b\u200b(,) - umožňuje vyplnit všechny sloupce nebo vybrané sloupce jednou hodnotou.
LoadColumn (,) - načte sloupec z pole.
Vyložit sloupec () - uvolní sloupec do pole.

Poslední dvě metody jsou užitečné, když potřebujete přenést sloupec z jedné tabulky hodnot do druhé.

Kopírovat (,) - umožňuje vytvořit novou na základě existující tabulky Tabulka hodnot, přičemž neoznačuje všechny řádky a všechny sloupce, ale pouze některé z nich. Návratová hodnota je - Tabulka hodnot.

Můžete kopírovat strukturu Tabulky hodnot... K tomu existuje odpovídající metoda. CopyColumns ()... Budeme prázdní Tabulka hodnot s požadovanou strukturou.

V Tabulka hodnotexistuje metoda Celkem ()... Můžete určit sloupec, ve kterém chcete sečíst číselné hodnoty. Ve vztahu k dříve zobrazenému kódu ve výsledkové tabulce můžete vypočítat hodnotu: TK.Total ("Částka").

V Tabulka hodnotpomocí metody je možné seskupit (sbalit) číselné hodnoty podle stejných hodnot určitých sloupců Sbalit (,).

Ve vztahu k dříve zobrazenému kódu ve výsledkové tabulce můžete vypočítat hodnotu: TK.Collapse ("Den v týdnu", "Částka").

Tabulka hodnotlze zobrazit na vlastní obrazovce, abyste s ní mohli provádět jakékoli akce. Ale na rozdíl od Seznam hodnotnemůžete jen vyvolat stůl na obrazovku z programového kódu.

Zobrazit Tabulka hodnotna obrazovce vytvořte atribut formuláře a přiřaďte mu datový typ Tabulka hodnot.

Poté by se měla výsledná tabulka zobrazit ve formuláři.

V modulu formuláře na konci dříve složeného algoritmu (v Postupu pro vytvoření tabulky hodnot) přidejte:
ValueVDataForm (TK, tabulka);

Obecná sbírka Strom hodnot

univerzální kolekce, která je velmi podobná Tabulka hodnot... Rozdíl oproti tabulce je v tom, že řádky stromů mohou být navzájem podřízené, tj. může být vytvořena nějaká hierarchie.

Lze zobrazit také na obrazovce. Hodnotový strom je výslovně složen z kolekce řetězců a kolekce sloupců. Ve stromu jsou dvě vlastnosti, řádky a sloupce.

Vzhledem k tomu, že řádky mohou být navzájem podřízené, lze pro každý řádek zadat nadřízeného a také podřízené řádky.

Vytvořme odpovídající příkazový strom a jeho postup zpracování.

Pojďme vytvořit ve kterém jeden nadřazený řádek a dva podřízení.

Vytvořte rekvizity formuláře DerZn(datový typ - ValueTree).

Pro tuto rekvizitu vytvořte sloupce Rok a Měsíc.

Přesuňte odpovídající prvek DerZnna formuláři.

Na konci Procedury TreeOnServer () přidat:

ValueVDataForm (TreeZn, DerZn);

Podívejme se, co se stalo v uživatelském režimu.

Pomocí tlačítka Přidat dolze přidat nové řádky. Mohou také tvořit hierarchii.

K procházení všech prvků hodnotového stromu musíme použít rekurzi, tj. volání procedury od sebe. Zpracování hodnotového stromu může například vypadat takto:

Tím končí naše první seznámení s univerzálními kolekcemi.

V příštím článku se podíváme na důležitý mechanismus, který může vývojář použít ke zjednodušení přístupu k referenčnímu prvku z programového kódu.

Trvalo (neptejte se proč) najít a analyzovat všechny možné kombinace prvků pole libovolné délky. Toto je učebnicový problém. Vzhledem k tomu, že počet možných prvků a délka kombinace nejsou stanoveny ve fázi nastavení problému, navrhuje se rekurzivní řešení. A co najdu k tématu? Nic pro 1C, ale mnoho různých implementací v Syakh, Delphi a dokonce i VBA.

Myslím, že musíme překládat. Přeloženo do 1C. Bylo ale nutné, aby bez opakování stejného prvku byly výsledné kombinace. Začal přidávat a upravovat. Výsledkem bylo, že z původního algoritmu nezůstalo nic a samotná implementace se stala kratší než to, co bylo navrženo v C, a to dokonce s další možností bez opakování prvků v možných kombinacích.

Samotná funkce:

// mElements - pole libovolných prvků, které tvoří kombinace. Libovolný. // Permutation Length je počet prvků v kombinaci. Celý. // NoRepeats - znamení potřeby přijímat v důsledku kombinace, ve které by se stejný prvek prvků nevyskytoval více než jednou. Booleovský. Výchozí hodnota je False. Funkce permutace (mElements, PermutationLength, NoRepeats \u003d False, Base \u003d Undefined, mResult \u003d Undefined, TekLevel \u003d 0) Export If Base \u003d Undefined Then Base \u003d New Array EndIf; If mResult \u003d Undefined Then mResult \u003d New Array EndIf; Pokud TekLevel< ДлинаПерестановки - 1 Тогда Для Каждого Элемент Из мЭлементов Цикл Если БезПовторов И НЕ Основание.Найти(Элемент) = Неопределено Тогда Иначе Основание.Добавить(Элемент); мРезультата = Перестановки(мЭлементов, ДлинаПерестановки, БезПовторов, Основание, мРезультата, ТекУровень + 1); Основание.Удалить(Основание.Количество() - 1); КонецЕсли; КонецЦикла; Иначе Для Каждого Элемент Из мЭлементов Цикл Если БезПовторов И НЕ Основание.Найти(Элемент) = Неопределено Тогда Иначе Основание.Добавить(Элемент); мРезультата.Добавить(Новый ФиксированныйМассив(Основание)); Основание.Удалить(Основание.Количество()-1); КонецЕсли; КонецЦикла; КонецЕсли; Возврат мРезультата; КонецФункции

Pokud jde o argumenty, doufám, že vše je jasné z popisu. Na základě výsledků: na výstupu získáme pole pevných polí. Pevné pole je možná kombinace a počet prvků ve výsledném poli je počet nalezených (možných) kombinací. Každé pevné pole se skládá z PermutationLength prvků pole - tj. Některé sady prvků původní sady hodnot. Nebo jedna z možných kombinací.

To je zřejmé, ale stejně vás varuji. Pokud je PermutationLength v argumentech větší než počet prvků v poli mElements a podmínka jedinečnosti je True, bude výsledkem úžasné, ale prázdné pole výsledků. Proč? Protože je nemožné shromáždit kombinaci délky Y z X možných prvků bez opakování, pokud X

Koncept "pole" se již dlouho používá v programování a nejčastěji je chápán jako nějaká struktura v paměti, skládající se ze sekvence prvků. Pole v 1C je nejjednodušší univerzální kolekce hodnot. Kromě pole obsahují obecné kolekce:

  1. Seznam hodnot (na rozdíl od pole mají hodnoty ze seznamu zobrazení, je implementována možnost řazení a rozhraní kolekce);
  2. Tabulka hodnot je kolekce, která má sloupce pro rozšířený popis hodnoty; podobnou strukturu lze získat spuštěním dotazu;
  3. Strom je velmi podobný tabulce doplněné o strukturu podřízenosti;
  4. Struktura - dynamická sada jmen a hodnot proměnných;
  5. Srovnávání je podobné struktuře, kromě toho, že proměnné nejsou porovnávány s řetězcovými reprezentacemi, ale navzájem.

Pole metody

Programové vytvoření instance pole se provádí pomocí operátoru New () (obr. 1).

Jak vidíte z výše uvedeného příkladu, pole lze vytvořit s pevným počtem prvků nebo bez tohoto omezení.

Než začneme diskutovat o metodách práce s polem, definujme dva koncepty:

  • Index prvků - může být reprezentován jako pořadové číslo jedné hodnoty;
  • Počet prvků - počet prvků v kolekci, její definice je dostupná pomocí metody Count ()

Je důležité vědět: v 1C počítání počtu hodnot libovolné kolekce začíná od 1 a distribuce indexů od 0, to znamená, že první prvek v poli má index 0. Tudíž procházení kolekce pomocí smyčky s iterátorem by mělo začínat od 0 a končit počtem prvků minus 1, jinak systém využívající okno (obr. 2) upozorní na výskyt výjimečné situace.

Obr

Jakýkoli konfigurační objekt má své vlastní metody pro práci, pole není výjimkou, uvedeme je s nějakým dekódováním:

  • ВBoundary () - pomocí metody můžete získat maximální index prvku; u prázdného pole bude vrácena hodnota (-1);
  • Insert () - tato metoda má dva parametry: index a hodnotu, index označuje, kam vložit nový prvek do pole, přidaná hodnota může být prázdná;
  • Add () - tuto metodu vložení hodnoty lze použít, když umístění prvku není zásadní, s jeho pomocí budou nová data zapsána na konec existujícího pole;
  • Find () - je-li úspěšný, vrátí index hodnoty uvedené v závorkách, jinak vrátí „Undefined“;
  • Clear () - vymaže kolekci;
  • Get () - čte data umístěná v poli v zadaném indexu, lze je nahradit hranatými závorkami;
  • Delete () - odstraní prvek se zadaným indexem;
  • Set () - nahradí data v zadané buňce pole.

Jednorozměrná a vícerozměrná pole

V nejjednodušším případě může jednorozměrné pole obsahovat hodnoty různých typů (obr. 3)

Obr.

Výsledek provedení výše uvedeného kódu je uveden na obr

Obr

Získali jsme tedy jednorozměrné pole skládající se z hodnoty řetězce, odkazu na referenční prvek a data. Zároveň jsme při přidávání prvků použili dvě různé metody Add () a Insert (), pokud by při přidávání data byla použita metoda Add (), náš výsledek by měl mírně odlišný vzhled.

Na střední škole je představen koncept dvojrozměrné matice. Toto je sada dat, z nichž každý prvek má dva indexy (v nejjednodušším případě sériové číslo svisle a vodorovně), je to ona, která nejlépe ilustruje koncept dvourozměrného pole.

Vytvořením takové matice můžete určit počet řádků a sloupců, které se mají použít.

Řekněme, že stojíme před úkolem vytvořit pole z příjmení, křestního jména a příjmení dvou zaměstnanců. Pomocí kódu (obr. 5) vytvoříme odpovídající pole s pevným počtem sloupců a řádků.

Obr

K jeho procházení potřebujeme dvě smyčky, v první smyčce procházíme pole po řádku, ve druhé analyzujeme řádek na prvky. Toho lze dosáhnout buď pomocí cyklu „Pro každého…. Od “(obr.6)

Obr

Nebo pomocí smyčky s iterátorem „For ... by“ (obr.7)

Obr

V zásadě může být počet dimenzí konkrétního pole libovolný, další věcí je, že v případě velkého počtu úrovní podrobností je poměrně obtížné vytvořit tvůrce pro čtení dat.

Použití pole

Pole v 1C se nejčastěji používají pro:

  1. Vytváření různých filtrů používaných při práci s dotazy a jinými kolekcemi hodnot;
  2. Předávání seznamů jako parametrů mezi postupy a funkcemi;
  3. Výměna dat s externími komponenty připojenými pomocí technologie COM.

Samozřejmě to není zdaleka úplný seznam účelů, pro které lze objekt „Array“ použít.