Hledejte v tabulce hodnot 1C

Jaké metody existují a jak hledat více hodnot současně.

Pro vyhledávání v tabulce hodnot existují dvě speciální metody:

1. Najděte

TVHorizon = Directories.Nomenclature.FindBy Name("Horizon TV");
FoundString = TZNomenclature.Find(TVHorizon);
//můžeme také určit, ve kterých sloupcích se má prohledávat, aby se hledání urychlilo
FoundString = TKNomenclature.Find(TVHorizon, "Nomenklatura");

Tato metoda vrátí první nalezený řetězec s hodnotou, kterou hledáte, nebo Undefined, pokud ji nenajde. Proto je vhodné jej používat pro hledání jedinečných hodnot, protože jinak ji při hledání hodnoty budete muset smazat z tabulky, abyste našli další.

Abyste takhle netrpěli, existuje následující metoda, která vám umožní najít pole vhodných řetězců:

2. FindStrings


Selection Structure.Insert("Nomenklatura", TVHorizon); // nejprve určíme sloupec, kde hledat, a pak co hledat.

Tato metoda vždy vrací pole, ale pokud není nic nalezeno, může být prázdné. A tato metoda, stejně jako ta předchozí, vrací řádky tabulky hodnot samotné, a nikoli samotné hodnoty v samostatném poli. Proto změnou hodnot v řádku pole nebo, jako v předchozí metodě, pro nalezený řádek, změníte hodnotu ve zpracované tabulce hodnot.

Co dalšího je na této metodě dobré, je to, že dokáže prohledávat několik sloupců tabulky hodnot najednou:


SelectionStructure = Nová struktura;
Selection Structure.Insert("Nomenklatura", TVHorizon);
Selection Structure.Insert("Množství", 10);
FoundStringArray = TKNomenclature.FindStrings(SelectionStructure);

Jediným negativem, jak vidíte, nemůžete použít jiné typy srovnání než "rovná se"

Zde je malý fakt na začátek - jednoduché příklady pracovat s tabulkou hodnot:

1. Vytvořte tabulku hodnot

ValueTable = Nová tabulka hodnot;


2. Vytvořte sloupce tabulky hodnot:

ValueTable.Columns.Add("Name");
ValueTable.Columns.Add("Příjmení");


3. Přidejte nové řádky pomocí názvů sloupců:


NewString.Name = "Vasily";
NewRow.LastName = "Pupkin";


4. Jak hledat hodnotu v tabulce hodnot:
Je nutné najít řádek tabulky obsahující požadovanou hodnotu.

FoundString = ValueTable.Find(LookupValue);


5. Najděte první výskyt v určitých sloupcích tabulky hodnot

FoundString = ValueTable.Find(LookupValue, "Dodavatel, Kupující");


6. Pokud potřebujete najít všechny výskyty v tabulce hodnot:
Používáme vyhledávací strukturu.

SearchStructure = Structure("Zaměstnanec", LookupValue);
ArrayFoundStrings = ValueTable.FindStrings(SearchStructure);


Vytvořme vyhledávací strukturu, jejíž každý prvek bude obsahovat název sloupce jako klíč a hledanou hodnotu v tomto sloupci jako hodnotu. Strukturu vyhledávání předáme jako parametr metodě FindStrings(). V důsledku toho dostaneme řádky tabulky.
Pokud do vyhledávací struktury přidáte vyhledávání požadovanou hodnotu, například také ve sloupci Responsible, pak v důsledku aplikace metody FindRows() dostaneme všechny řádky, kde se zaměstnanec i odpovědný rovnají požadované hodnotě.

7. Jak procházet tabulkou hodnot v náhodném pořadí

Pro každý CurrentRow From ValueTable Loop
Report(CurrentLine.Name);
EndCycle;

Udělejte totéž pomocí indexů:

SeniorIndex = ValueTable.Count() - 1;
Pro MF = 0 pomocí cyklu SeniorIndex
Report(ValueTable[Count].Name);
EndCycle;


8. Odstranění existujícího řádku tabulky hodnot

ValueTable.Delete(RemoveRow);

podle indexu

ValueTable.Delete(0);


9. Odstranění existujícího sloupce tabulky hodnot

ValueTable.Columns.Delete(RemoveColumn);


podle indexu

ValueTable.Columns.Delete(0);

Je třeba vzít v úvahu, že smazání řádku (nebo sloupce) „ze středu“ tabulky hodnot povede ke snížení o jeden z indexů řádků, které byly „po“ odstraněny.

10. Jak vyplnit tabulku hodnot, pokud jsou názvy sloupců obsaženy v proměnných?

NewRow = ValueTable.Add();
NewRow[ColumnName] = Hodnota;


11. Jak vyplnit celý sloupec tabulky hodnot požadovanou hodnotou?
Sloupec FiscalAccounting Flag v tabulce hodnot tabulky hodnot musí být vyplněn hodnotou False

ValueTable.FillValue(False, "Příznak fiskálního účetnictví");


Pro tabulku hodnot používáme metodu FillValues(). První parametr je hodnota k vyplnění. Druhým parametrem je název vyplněného sloupce.

12. Jak naplnit tabulku hodnot "TableRecipient" daty tabulky hodnot "SourceTable"?

Pokud tabulka přijímačů v době operace ještě neexistuje nebo její předchozí sloupce není třeba uložit, můžete ji vytvořit jako úplnou kopii originálu

TableReceiver = TableOriginal.Copy();


Možnost dvě: tabulka TableReceiver existuje a je škoda přijít o její sloupce a omezení na datové typy sloupců. Musíte ale vyplnit údaje pro sloupce, jejichž názvy se shodují s názvy zdrojové tabulky.

Částečný přenos dat pro sloupce s odpovídajícími názvy:

Pro každý řádek SourceTable ze smyčky SourceTable
FillPropertyValues(NewString, SourceTableString);
EndCycle


Pro každý řádek zdrojové tabulky se do cílové tabulky přidá nový řádek a hodnoty se vyplní do těch sloupců nové tabulky, jejichž názvy se shodují s názvy sloupců ve zdrojové tabulce.

Pokud tabulky nemají sloupce se stejným názvem, cílová tabulka bude mít tolik řádků s nulovými hodnotami, kolik bylo řádků ve zdrojové tabulce.
Pokud u některých sloupců stejného jména typ datové hodnoty ze zdrojové tabulky nespadá do pole povolených typů sloupce cílové tabulky, dostaneme v takových polích prázdné hodnoty.
Podívejme se na třetí případ. V případě sloupců se stejným názvem musí být sloupec cílové tabulky plně v souladu se sloupcem zdrojové tabulky.

Úplná kopie dat pro sloupce s odpovídajícími názvy

PodobnéColumns = Nové pole();

Pro každý sloupec z SourceTable.Columns smyčka
MatchingColumn = TableReceiver.Columns.Find(Column.Name);

Pokud MatchedColumn<>Nedefinováno Potom

// Získání vlastností sloupce.
Name = Column.Name;
ValueType = Column.ValueType;
Název = Column.Title;
Width = Column.Width;

// Nahrazení sloupců v cílové tabulce.
Index = TableReceiver.Columns.Index(CoincidentColumn);

TableReceiver.Columns.Delete(Index);
TableReceiver.Columns.Insert(Index, Name, ValueType, Title, Width);

// Přidejte do pole další název odpovídajících sloupců.
Stejný-názevColumns.Add(Název.sloupce);

EndIf;

EndCycle;

// Procházet řádky zdrojové tabulky.
Pro každý řádek SourceTable From SourceTable Loop

// Přidat nový řádek do cílové tabulky.
NewString = TableReceiver.Add();

// Vyplňte hodnoty do odpovídajících buněk.
Pro každý NameColumns Of Stejný NameColumns smyčka
NewString[ColumnName] = SourceTableString[ColumnName];

EndCycle;

EndCycle;


Sloupec v cílové tabulce budeme muset nahradit novým, jehož vlastnosti budou plně odpovídat sloupci zdrojové tabulky.
Pokud je tedy v tabulce příjemců nalezen sloupec se stejným názvem, shromažďujeme v proměnných všechny vlastnosti nového sloupce. Dále odstraňte starý a vytvořte nový sloupec. Poté procházíme řádky zdrojové tabulky.
Ve smyčce přidáme do tabulky příjemců nový řádek a otevřeme smyčku názvů sloupců v poli odpovídajících sloupců.
Uvnitř této vnořené smyčky plníme buňky tabulky příjemců daty buňky zdrojové tabulky.

13. Jak přidat sloupce do tabulky hodnot "Tabulka hodnot" s omezením typu?

Při přidávání sloupce můžete jednoduše zadat jeho název a nedotýkat se druhého parametru metody Add(). V tomto případě je datový typ sloupce libovolný.

Přidání sloupce bez zadání datového typu

// Přidání sloupce bez omezení typu.
ValueTable.Columns.Add("Object");


Můžete vyplnit hodnotu druhého parametru. Tam je nutné předat popis typu povoleného pro sloupec. Samotný popis lze získat pomocí konstruktoru, předáním řetězce názvu typu jako parametru (pokud existuje mnoho typů, pak oddělených čárkami) nebo pole platných typů.

Přidání sloupce určujícího typ dat

// Omezení pro datové typy sloupců:
// Pouze prvky adresáře "Contractors".
ValueTable.Columns.Add("Účet", New TypeDescription("ReferenceReference.Accounts"));


Pokud je mezi typy povolenými pro vyplnění dat sloupce řetězec, můžete omezit jeho bitovou hloubku (délku), zadat použití proměnné nebo pevné délky. To vše zajišťuje vytvoření objektu pomocí konstruktoru StringQualifiers. Dále bude tento objekt použit jako jeden z parametrů konstruktoru TypeDescription.

Použití kvalifikátorů k určení datového typu sloupce tabulky hodnot

// Příprava a nastavení limitů pro data typu String.
String Qualifiers = New String Qualifiers(20, ValidLength.Variable);
AllowedTypes = NewTypeDescription("String",StringQualifiers);
ValueTable.Columns.Add("NoteStringShort", ValidTypes);


Totéž můžete udělat pro kvalifikátory čísla a data.
Poznámka: popis typu může konstruktér sestavit jak „od začátku“, tak jako základ můžete použít existující popis typu

Použití existujících deklarací typu k určení datového typu sloupce tabulky hodnot

// Rozšíření dříve používaného popisu typů.
Kvalifikátory čísel = Kvalifikátory nových čísel(10, 2, ValidSign.Non-negative);
DateQualifiers = New DateQualifiers(DateParts.Date);
ExtendedValidTypes = NewTypeDescription(PlatnéTypy, "Číslo, Datum",Kvalifikace čísel,Kvalifikátory data);

ValueTable.Columns.Add("Poznámka", ExtendedAllowedTypes);

Aby bylo možné vzít v úvahu peníze a zboží, jsou v podnikání široce používány různé tabulky. Téměř každý dokument je tabulka.

V jedné tabulce je uvedeno zboží k odeslání ze skladu. V další tabulce - povinnost platit za toto zboží.

Proto v 1C zaujímá práce s tabulkami přední místo.

Tabulky v 1C se také nazývají "části stolu". Mají je referenční knihy, dokumenty a další.

Dotaz vrací jako výsledek svého provedení tabulku, ke které lze přistupovat dvěma různými způsoby.

První - rychlejší - výběr, získávání řádků z něj je možné pouze v pořadí. Druhým je vyložení výsledku dotazu do tabulky hodnot a poté k němu náhodný přístup.

//Možnost 1 - sekvenční přístup k výsledkům dotazu

// získat stůl
Selection = Query.Execute().Select();
// vynechá všechny řádky výsledku dotazu v pořadí
Zatímco Selection.Next() Loop
Zpráva(Výběr.Název);
EndCycle;

//Možnost 2 - nahrání do tabulky hodnot
Query = New Query("SELECT Name FROM Directory.Nomenclature");
// získat stůl
Tabulka = Query.Execute().Upload().
// pak můžeme také obejít všechny řádky
Pro každý řádek ze smyčky tabulky
Report(String.Name);
EndCycle;
//nebo libovolně přistupovat k řetězcům
String = Table.Find("Lopata", "Jméno");

Důležitou vlastností je, že v tabulce, která je získána z výsledku dotazu, budou všechny sloupce silně typovány. To znamená, že vyžádáním pole Název z vyhledávání Nomenklatury obdržíte sloupec typu String s povolenou délkou maximálně N znaků.

Tabulka na formuláři (tlustý klient)

Uživatel pracuje s tabulkou při jejím umístění na formulář.

Základní principy práce s formuláři jsme probrali v hodině na a v hodině na

Položme tedy tabulku na formulář. Chcete-li to provést, můžete tabulku přetáhnout z ovládacího panelu. Podobně můžete z nabídky vybrat ovládací prvek Formulář/Vložit.

Data lze ukládat do konfigurace – pak je potřeba vybrat existující (dříve přidanou) tabulkovou část konfiguračního objektu, jehož formulář upravujete.

Klikněte na tlačítko "..." ve vlastnosti Data. Chcete-li zobrazit seznam tabulkových částí, musíte rozbalit větev Objekt.

Při výběru tabulkové části 1C sám přidá sloupce do tabulky ve formuláři. Řetězce zadané uživatelem do takové tabulky se automaticky uloží spolu s adresářem/dokumentem.

Ve stejné vlastnosti Data můžete zadat libovolný název a vybrat typ ValueTable.

To znamená, že byla vybrána libovolná tabulka hodnot. Nebude automaticky přidávat sloupce, nebude se automaticky ukládat, ale můžete si s ním dělat, co chcete.

kliknutím klikněte pravým tlačítkem myši do tabulky můžete přidat sloupec. Ve vlastnostech sloupce můžete zadat jeho název (pro odkaz v kódu 1C), záhlaví sloupce ve formuláři, spojení s atributem tabulkové části (druhé - pokud není vybrána libovolná tabulka, ale tabulková část).

Ve vlastnostech tabulky ve formuláři můžete určit, zda uživatel může přidávat/odstraňovat řádky. Pokročilejší formou je zaškrtávací políčko ViewOnly. Tyto vlastnosti jsou užitečné pro organizování tabulek určených pro zobrazování informací, ale ne pro úpravy.

Chcete-li spravovat tabulku, musíte ve formuláři zobrazit panel příkazů. Vyberte položku nabídky Formulář/Vložit ovládací/Příkazový panel.

Ve vlastnostech panelu příkazů zaškrtněte políčko Automatické dokončování, aby se tlačítka na panelu nástrojů zobrazila automaticky.

Tabulka na formuláři (tenký/spravovaný klient)

Na řízená forma tyto akce vypadají trochu jinak. Pokud potřebujete do formuláře umístit tabulkovou sekci, rozbalte větev Objekt a přetáhněte jednu z tabulkových sekcí doleva. A to je vše!

Pokud potřebujete umístit tabulku hodnot, přidejte nový atribut formuláře a v jeho vlastnostech uveďte typ – tabulka hodnot.

Pro přidání sloupců použijte nabídku pravého tlačítka myši na tomto atributu formuláře, položka Přidat sloupec atributu.

Potom také přetáhněte tabulku doleva.

Aby tabulka měla panel příkazů, ve vlastnostech tabulky vyberte hodnoty v části Použití - Umístění panelu příkazů.

Export tabulky do Excelu

Jakoukoli tabulku 1C umístěnou ve formuláři lze vytisknout nebo nahrát do Excelu.

Chcete-li to provést, klepněte pravým tlačítkem myši na volný prostor v tabulce a vyberte Zobrazit seznam.

Ve spravovaném (tenkém) klientovi lze podobné akce provádět pomocí položky nabídky Všechny akce/Zobrazit seznam.