Data Composition System Expression Language (1Cv8). Funkce výrazového jazyka systému skládání dat 1s SKD vypočítaná pole funkcí

CalculateExpression je poměrně obtížně pochopitelná funkce ACS a příklady použití v referenčních informacích jsou poměrně vzácné. Tento článek popisuje příklady, které budou jistě užitečné pro každého vývojáře:

  1. kumulativní součet v seskupení;
  2. kumulativní součet v křížové kartě;
  3. získání předchozí hodnoty;
  4. Výstup PM v jednom řádku.

1. Získání ukazatele na akruální bázi

Dostaneme množství zboží jako kumulativní součet na úrovni seskupení. Chcete-li to provést, vytvořte počítané pole (viz obrázek 1).
Na záložce "Zdroje" nastavte funkci pro počítané pole:
CalculateExpression("Součet(množstvíObrat)", "První", "Aktuální")
který sečte počet produktů z prvního záznamu do aktuálního (viz obrázek 2).

Pokud je potřeba získat kumulativní celkové množství položky na úrovni podrobných záznamů, pak nastavíme funkci CalculateExpression pro kalkulované pole na záložce „Vypočítaná pole“ (viz obrázek 3).
V závislosti na úrovni získání kumulativního součtu vytvoříme seskupení (viz obrázek 4): na úrovni zdroje - seskupení podle zboží, na úrovni dálkového ovládání - seskupení podrobných záznamů.
Obrázek 4. Seskupení sestav s kumulativními součty

2. Získání hodnoty indikátoru z předchozího řádku

Pojďme získat směnný kurz pro datum a předchozí datum. Chcete-li to provést, vytvořte vypočítané pole a do pole výrazu napište následující výraz (viz obrázek 5):
CalculateExpression("Sazba", "Předchozí", "Předchozí")
který bude přebírat předchozí hodnotu směnného kurzu pro aktuální řádek, poslední parametr funkce omezuje příjem dat.
Protože pracujeme na úrovni podrobných záznamů, okamžitě přejdeme na kartu „Nastavení“ a vytvoříme seskupení - podrobné záznamy.

3. Získání ukazatele jako kumulativního součtu v křížové kartě

Pojďme získat množství zboží na akruální bázi podle období. Chcete-li to provést, vytvořte počítané pole (viz obrázek 1). Na záložce „Zdroje“ určíme pro počítané pole následující výraz (viz obrázek 6):
CalculateExpression("Součet (množstvíObrat)", "Období", "První", "Aktuální")
který na úrovni seskupení vypočítá množství zboží v intervalu od prvního řádku po aktuální v kontextu období pro každou položku.
Na záložce „Nastavení“ vytvořte tabulku se seskupením podle položky v řádku a seskupením podle období ve sloupci (viz obrázek 7).

4. Výstup tabulkových dat na jeden řádek

Metody zobrazení tabulkových dat v jednom řádku včetně metody pomocí funkce CalculateExpression pojednává článek

Schéma rozložení dat (1C SKD)- pohodlný návrhář pro vytváření komplexních sestav v softwarových produktech 1C:Enterprise, které přispívají k rozvoji a sledování automatizace výroby, což jim umožňuje být co nejflexibilnější a nejkrásnější v minimálním čase. Další výhodou Data Composition Scheme (1C SKD) je automatické generování řízeného formuláře reportu a s dalším rozvojem této oblasti je důležitým faktorem při volbě způsobu zpracování reportu. Ale vzhledem ke složitosti struktury Data Composition Scheme (1C SKD) a obrovskému množství nastavení to často vede k delšímu vývoji sestavy než přes „výstupní návrhář formuláře“. Programátor 1C proto potřebuje porozumět všem složitostem schématu skládání dat (1C DCS), aby dále urychlil dobu vývoje pro generování zpráv.

Podívejme se na první tři záložky Data Composition Scheme (1C SKD) - datová sada, připojení datové sady a kalkulovaná pole.

Data nastavena v 1C SKD

Sada dat obsahuje možnost vytvořit tři objekty – dotaz, objekt a sjednocení, pojďme se na každý z nich podívat blíže:

Toto je běžný dotaz, který je generován pomocí tlačítka Query Builder. Pokud je nastaven příznak Automatické vyplňování, budou všechny vybrané podrobnosti automaticky zahrnuty do polí datové sady. Dále je možné přizpůsobit vyplnění polí v požadavku na záložce Složení dat, kde jsou tři záložky:

Tabulky, zde se vybírají tabulky, které se budou podílet na generování sestavy, většinou se volí výchozí data, jelikož na záložce Tabulky a pole jsme již vybrali dokumenty, adresáře, registry, které potřebujeme...

Pole, zde vybíráme ty objekty, které mají být zahrnuty do sestavy, příznak děti udává, zda budou pro objekt přístupné podřízené prvky, je logické, že u řetězcových, číselných a podobných údajů nebude možné nastavit příznak na True.

Podmínky, zde vybíráme ty objekty, které lze používat za podmínek v systému řízení přístupu.

Část práce se provádí ve schématu složení dat a část se provádí programově; podívejme se na jednoduchý příklad:

Nejprve si vytvoříme layout diagram pro datové rozložení dokumentu a nazveme jej SKD (například: 1C SKD), v něm vytvoříme objekt datové sady, poté vyplníme pole, např. máme dokument s tabulkovou částí zboží s podrobnostmi - nomenklatura, množství a cena.

Přidejte tři pole a vyplňte každý sloupec názvem podrobností, zbývající sloupce se vyplní automaticky:

Vytvořme tlačítko na formuláři dokumentu a popišme mechanismus fungování v řízených formulářích:

&OnClient

Tisk procedur()

OurReport = PrintOnServer(); //volání funkce na serveru

OurReport.Show(); //zobrazí vygenerovanou sestavu

Konec procedury

&Na serveru

Funkce PrintOnServer()

DocumentObject = FormAttributeValue(“Object”);

//tabulkovou část Produkty umístíme do struktury s názvem ProductsSKD stejným způsobem, jak jsme uvedli v samotném SKD název objektu obsahujícího data

DataSet = nová struktura;

DataSet.Insert(“ProductsSKD”, DocumentObject.Products);

//získáme naše rozložení a nastavíme výchozí nastavení tak, aby všechna nastavení výstupu sestavy byla převzata z našeho rozložení

OurLayout = DocumentObject.GetLayout(“SKD”);

Nastavení = OurLayout.DefaultSettings;

//vytvořit rozložení dat s našimi nastaveními

LayoutLinker = newDataLayoutLayoutLinker;

LayoutLayout = LayoutComposer.Execute(OurLayout, Nastavení);

//provádět skládání dat s naší datovou sadou

DataCompositionProcessor = newDataCompositionProcessor;

DataCompositionProcessor.Initialize(LayoutLayout, DataSet);

//Vytvoříme tabulkový dokument a zobrazíme v něm naši sestavu

ReportDocument = Nový tabulkový dokument;

OutputProcessor = Nový OutputProcessorDataCompositionResultInTabularDocument;

OutputProcessor.SetDocument(ReportDocument);

OutputProcessor.Output(DataCompositionProcessor);

Zpráva o vrácení dokumentů;

EndFunction

Pokud si přejete, můžete získat oblasti libovolného jiného rozložení a také je zobrazit v tomto přehledu, například pro generování platebního příkazu máme standardní rozložení a záhlaví je v něm velmi dobře vytvořeno, aby se nestalo zbytečná práce, jen nejprve získáme rozložení, zobrazíme záhlaví, poté vygenerujeme a zobrazíme naši zprávu o systému řízení přístupu.

O unifikace

Můžeme do něj umisťovat naše dotazy a objekty, ale na rozdíl od spojení k sobě tabulky prostě sčítá, to znamená, že když spojíme dvě stejné tabulky, skončíme u jedné a při spojení se zdvojnásobí, podívejme na jednoduchém příkladu:

Máme tabulky:

Po komunikaci obdržíme:

A v kombinaci:

Podívejme se nyní na vyplňování sloupců v datových sadách (některé vynecháme, protože souvisí s jinými kartami; vrátíme se k nim v budoucích článcích):

- pole, uveďte obecný název atributu;

­­- cesta, uveďte název údajů, kterými jej budeme kontaktovat v systému kontroly přístupu, například v Vypočítaná pole;

- titul, uveďte název atributu, který se zobrazí v přehledu;

- omezení pole, uveďte dostupnost tohoto požadavku;

- omezení detailů, označujeme dostupnost podřízených prvků, je důležité, že pokud je uvedena dostupnost podrobností, pak bude k dispozici i samotné pole, možná se tato mechanika v budoucích verzích změní;

- výraz, pomocí kterého se vypočítá reprezentace pole, je vhodné jej použít, když potřebujeme trochu změnit výstup detailů, například potřebujeme za jménem nomenklatura byla zobrazena skladem, kde se nachází, pak vyplňte: Položka + „je na skladě“ + Sklad. Opakuji, že přístup k podrobnostem se provádí prostřednictvím jména uvedeného ve sloupci cesta;

- řazení výrazů, pohodlný mechanismus pro nastavení řazení sestav, kdy lze podmínku nastavit ručně, podobně jako v předchozím bodě, ale jak ukazuje praxe, tento mechanismus často nefunguje tak, jak bychom si přáli, a radím vám použít standardní řazení;

- typ hodnoty, označuje typ hodnoty atributu, toto je nutné vyplnit, pokud použijete následující pole;

- dostupné hodnoty, funguje pouze při naplnění typ hodnoty, otevřete formulář a ve sloupci Význam označujeme prvek, který je třeba změnit, podle typu to mohou být předdefinované objekty nebo číselné, například detaily mají jednoduché hodnoty, v prezentace Uvádíme, na co potřebujeme změnit, příklad booleovského typu:

- výzdoba– standardní nastavení formátu pole, podobné nastavení ve spravovaných formulářích, umožňuje přesněji a krásněji přizpůsobit výstup určitých detailů.

Připojení datové sady v 1C SKD

Zde je pouze nainstalován levé připojení, na principu podobném spojení v žádostech, v zdroj komunikace zadejte hlavní tabulku pro připojení, in přijímač další. V zdroj výrazu A přijímač výrazu Uvádíme podrobnosti, kterými bude komunikace probíhat. Na zbývající sloupce se podíváme podrobněji, když se podíváme na záložku. Možnosti. Pokud není žádné další spojení s parametry, pak se doporučuje provést spojení v požadavku, urychlí se tím report.

Správné použití schématu složení dat (DCS) vám umožňuje:

  • výrazně zkrátit čas potřebný k vypracování zprávy;
  • eliminovat potřebu vytvářet spravovanou obsluhu formuláře;
  • získáte krásný výsledek s možností dodatečného přizpůsobení uživatelem.

Ne všichni vývojáři však maximálně využívají možnosti schématu, protože ne všechna jeho nastavení jsou zřejmá a intuitivní. Zejména mnoho lidí ví, že v 1C SKD existují počítaná pole, ale plně nerozumí rozsahu jejich použití a metodám práce s nimi.

Co je to počítané pole

Ve většině případů je zdrojem dat v diagramu rozložení dotaz. V zásadě již v rámci samotného dotazu můžete používat různé vzorce, konstrukce a výrazy. Nabízí se přirozená otázka: proč potřebujeme duplicitní funkce?

Faktem je, že systém řízení přístupu je něco víc, než jen zobrazení výsledku dotazu, a to je dobře patrné z formuláře pro vytvoření diagramu (obr. 1).

Vypočítaná pole vám umožňují provádět určité akce s vygenerovanou datovou sadou:

  • Výstup pole dat přijatých požadavkem do konkrétní buňky, která kombinuje několik řádků do jednoho;
  • Přístup k funkcím exportu obecného modulu;
  • Spusťte různé výrazy dostupné pro jazyk rozložení a použijte speciální funkce EvaluateExpression.

Pojďme si projít tento seznam.

Pole hodnot v jedné buňce

Simulujme situaci, kdy je nutné přijmout všechna čísla dokladů o příjmu pro protistranu do samostatné buňky:


V našem schématu jsme tedy vytvořili další výpočetní pole;


Jak můžete vidět z výše uvedeného příkladu, při přidávání a zpracování vypočítaných polí nejsou žádné potíže. Použili jsme dvě funkce: Array() a ConnectRows().

Pár slov o tom druhém. Kromě prvního parametru označujícího identifikátor pole, hodnoty nebo hodnotu lze v něm nastavit další dva:

  1. Element Separator – označuje, který znak bude oddělovat jeden prvek pole nebo jeden řádek tabulky hodnot od druhého (v našem případě jsme tento parametr vynechali a ve výchozím nastavení byl přiřazen konec řádku);
  2. Oddělovač sloupců – znak používaný k oddělení sloupců tabulky hodnot (standardně se používá středník).

Přístup k funkcím exportu společného modulu

Funkce společného modulu mohou fungovat jako zdroj dat pro vyplnění počítaného pole.

Několik důležitých bodů:

  • Funkce musí být exportovatelná;
  • Pokud je funkce umístěna ve společném modulu s nastaveným atributem „Globální“, je volána přímo jménem, ​​jinak musí být funkce volána podle schématu „Název sdíleného modulu“. "Název funkce, která má být volána."

Jako příklad použití vezmeme stejný požadavek na příjmové doklady a zobrazíme jej v samostatném sloupci. Samotný požadavek nebudeme popisovat, přejděme přímo k počítaným polím:


Vidíme tedy, že ze systému řízení přístupu lze inicializovat téměř jakýkoli datový procesor, což výrazně rozšiřuje možnosti použití schématu.

Rozvržení jazykových výrazů

Poměrně často v práci vývojáře nastává situace, kdy je potřeba zobrazit výsledek dělení v poli ACS:

  1. Vypočítejte průměrné náklady na položku;
  2. Všechny druhy zájmu;
  3. Výpočty průměrného výdělku atd.

Aby se předešlo problémům, je v těchto případech vhodné zadat do kalkulovaného pole test na dělení 0.

To lze provést pomocí konstrukce „Volba kdy….pak… Jinak… Konec“.

Na závěr pár slov o docela nové funkci CalculateExpression(). S jeho pomocí můžete zejména vypočítat odchylky nákladů mezi aktuálním a předchozím řádkem, kumulativní zůstatek atd.

Řekněme, že můžete získat Součet dokumentů z předchozího řádku našeho požadavku zadáním hodnoty Vypočítat výraz ("Součet dokumentu", "Předchozí součet") v poli "Výraz".

1. Vypočítat (vyhodnotit)- je určen k vyhodnocení výrazu v kontextu nějakého seskupení. Funkce se používá pro kompatibilitu s předchozími verzemi platformy. Místo toho se doporučuje použít funkci CalculateExpression.

Syntax:
Vypočítat (výraz, seskupení, typ výpočtu)

Možnosti :

  • Výraz(Čára). Obsahuje vypočítaný výraz;
  • Seskupování(Čára). Obsahuje název seskupení, v jehož kontextu má být výraz vyhodnocen. Pokud je jako název seskupení použit prázdný řetězec, výpočet bude proveden v kontextu aktuálního seskupení. Pokud je jako název skupiny použit řetězec GrandTotal, výpočet bude proveden v kontextu celkového součtu. Jinak bude výpočet proveden v kontextu nadřazené skupiny se stejným názvem.
    Například:
    Součet(Prodej.SoučetObrat) / Spočítat("Součet(Prodej.SoučetObrat)", "Celkem").
    V tomto příkladu bude výsledkem poměr částky pro pole "Sales.AmountTurnover" záznamu seskupení k částce stejného pole v celém rozložení.
  • Typ výpočtu(Čára). Pokud je tento parametr nastaven na "TotalTotal", bude výraz vypočítán pro všechny záznamy seskupení. Pokud je hodnota parametru "Seskupení", budou hodnoty vypočteny pro aktuální záznam skupiny seskupení.
2. Vyhodnoťte výraz (EvalExpression) - je určen k vyhodnocení výrazu v kontextu nějakého seskupení. Funkce zohledňuje výběr seskupení, ale nebere v úvahu hierarchické výběry. Funkci nelze použít na seskupení ve výběru skupiny tohoto seskupení.

Syntax:
CalculateExpression(Výraz, Seskupení, Typ výpočtu, Začátek, Konec, Seřadit, Hierarchické řazení, ProcessingIdenticalOrderValues)

Možnosti :

  • Výraz(Čára). Obsahuje vypočítaný výraz;
  • Seskupování(Čára). Obsahuje název seskupení, v jehož kontextu má být výraz vyhodnocen. Pokud je jako název seskupení použit prázdný řetězec, výpočet bude proveden v kontextu aktuálního seskupení. Pokud je jako název skupiny použit řetězec GrandTotal, výpočet bude proveden v kontextu celkového součtu. Jinak bude výpočet proveden v kontextu nadřazeného seskupení s tímto názvem;
  • Typ výpočtu(Čára). Pokud je tento parametr nastaven na "TotalTotal", bude výraz vypočítán pro všechny záznamy seskupení. Pokud je hodnota parametru "Seskupení", budou hodnoty vypočteny pro aktuální záznam skupiny seskupení. Pokud je parametr nastaven na "Non-Resource Grouping", pak při výpočtu funkce pro záznam skupiny podle zdroje bude výraz vyhodnocen pro první záznam skupiny původního seskupení. Při vyhodnocení funkce CalculateExpression s hodnotou "GroupingNonResource" pro skupinové záznamy, které nejsou seskupení podle zdroje, je funkce vyhodnocena stejně, jako by byla vyhodnocena s hodnotou parametru "Grouping". Tvůrce rozložení kompozice dat při generování rozložení kompozice dat při výstupu pole - zdroje, pomocí kterého se seskupení provádí, do rozložení, vygeneruje do rozložení výraz vypočítaný pomocí funkce CalculateExpression se zadaným parametrem "GroupingNon-Resource". Pro ostatní prostředky seskupené podle prostředku jsou vráceny normální výrazy prostředků. Pokud je parametr nastaven na "Hierarchy", pak musí být výraz vyhodnocen pro nadřazený hierarchický záznam, pokud existuje, a pro celé seskupení, pokud žádný nadřazený hierarchický záznam neexistuje. Tvůrce rozložení při generování výrazu pro pole % ve skupině hierarchie vygeneruje výraz obsahující vztah výrazu zdroje k funkci CalculateExpression pro výraz zdroje, který se počítá pro aktuální seskupení s typem výpočtu Hierarchie.
  • Start. Označuje, ze kterého záznamu by měl fragment začínat, ve kterých agregačních výrazových funkcích by se měly vypočítat a ze kterého záznamu získat hodnoty polí mimo agregační funkce. Řetězec obsahující jeden z:
    • "První" Je nutné získat první záznam o seskupení. Za slovem v závorkách můžete zadat výraz, jehož výsledek bude použit jako posun od začátku seskupení. Výsledná hodnota musí být celé číslo větší než nula. Například First(3) – příjem třetího záznamu od začátku seskupení. Pokud je první záznam mimo seskupení, má se za to, že neexistují žádné záznamy. Pokud například existují 3 záznamy a chcete získat První(4), má se za to, že neexistují žádné záznamy.
    • "Poslední" Potřebujete získat poslední záznam seskupení. Za slovem v závorkách můžete zadat výraz, jehož výsledek bude použit jako posun od konce seskupení. Výsledná hodnota musí být celé číslo větší než nula. Například Last(3) – příjem třetího záznamu od konce skupiny. Pokud je poslední záznam mimo seskupení, má se za to, že neexistují žádné záznamy. Pokud například existují 3 záznamy a chcete získat Last(4), má se za to, že neexistují žádné záznamy.
    • "Předchozí" Musíte získat předchozí záznam seskupení. Za slovem v závorkách můžete zadat výraz, jehož výsledek bude použit jako zpětný posun od aktuálního záznamu seskupení. Například Předchozí(2) – získání předchozího z předchozího záznamu. Pokud je předchozí záznam mimo seskupení (například druhý záznam seskupení vyžaduje získání Předchozí(3)), získá se první záznam seskupení. Při příjmu předchozího záznamu pro celkový součet seskupení se získá první záznam.
    • "Další" Musíte získat další záznam seskupení. Za slovem v závorkách můžete zadat výraz, jehož výsledek bude použit jako posun vpřed od aktuální položky seskupení. Například Next(2) – získání dalšího z dalšího záznamu. Pokud další záznam přesahuje seskupení, má se za to, že neexistují žádné záznamy. Pokud jsou například 3 položky a třetí položka obdrží Další, má se za to, že neexistují žádné položky. Když je přijat další záznam pro celkový součet seskupení, má se za to, že neexistuje žádný záznam.
    • "Aktuální". Musíte získat aktuální záznam. Při načítání celkového seskupení se získá první záznam.
    • "Hodnota hranice". Potřeba získat záznam o zadané hodnotě. Za slovem LimitingValue v závorce musíte uvést výraz, jehož hodnotou chcete fragment začínat, první objednávkové pole. Jako záznam bude vrácen první záznam, jehož hodnota pole řazení je větší nebo rovna zadané hodnotě. Pokud je například pole Období použito jako pole pro objednávání a má hodnoty 01/01/2010, 02/01/2010, 03/01/2010 a chcete získat LimitingValue(DateTime(2010) , 1, 15)), pak bude získán záznam s datem 02/01. 2010.
  • Konec. Označuje, do kterého záznamu by měl fragment pokračovat, ve kterém by se měl vypočítat agregační výraz. Řetězec obsahující jeden z:
    • "První"
    • "Poslední"
    • "Předchozí"
    • "Další"
    • "Aktuální".
    • "Hodnota hranice".
  • Řazení. Řetězec, který uvádí výrazy oddělené čárkami, v jejichž směru má být sekvence uspořádána. Pokud není zadáno, pak se řazení provádí stejným způsobem jako u seskupení, pro které se výraz vyhodnocuje. Za každým výrazem můžete zadat klíčové slovo Vzestupně, pro řazení ve vzestupném pořadí, Sestupně, pro sestupné řazení, Automatické řazení, pro řazení referenčních polí podle polí, podle kterých chcete seřadit odkazovaný objekt. Slovo Auto Order lze použít jak se slovem Ascending, tak se slovem Descending.
  • Hierarchické řazení. Podobně jako u třídění. Používá se k uspořádání hierarchických záznamů. Pokud není zadáno, sestava rozvržení vygeneruje pořadí podle pořadí zadaného v parametru Sort.
  • Zpracování stejných hodnot objednávky. Řetězec obsahující jeden z:
    • "Společně" znamená, že k určení předchozích a následujících záznamů se používá sekvence uspořádaných záznamů;
    • "Odděleně" znamená, že předchozí a následující záznamy jsou určeny na základě hodnot objednávkových výrazů;
    Pokud je například výsledná sekvence seřazena podle data:
    1. ledna 2001 Ivanov M. 10
    2. ledna 2001 Petrov S. 20
    3. 2. ledna 2001 Sidorov R. 30
    4. ledna 03, 2001 Petrov S. 40
    Při použití zpracování identických hodnot objednávky "Odděleně" bude předchozí pro záznam 3 záznam 2 a při použití "Spolu" - záznam 1. A fragment pro aktuální záznam pro záznam 2 pro "Odděleně" bude záznam 2 a pro "Společně" - záznamy 2 a 3. Součet pro aktuální záznam pro "Odděleně" bude tedy 20 a pro "Společně" - 50. Když je v Start a Koncové parametry, nemůžete zadat posun pro pozice „První“, „Poslední“, „Předchozí“, „Další“. Výchozí hodnota je "Oddělit".
Příklad:
Získání poměru částky pro pole „Sales.AmountTurnover“ seskupovacího záznamu k částce ve stejném poli v celém rozvržení:
Sum(Sales.SumTurnover) / CalculateExpression("Sum(Sales.SumTurnover)", "Total").

Tento příklad vypočítá hodnotu aktuální hierarchie:
Výběr
Když Level() > 0
Potom EvaluateExpression("Reference", "Hierarchie")
Jinak Null
Konec

Poznámky:
Funkce zohledňuje výběr seskupení, ale nebere v úvahu hierarchické výběry. Funkci nelze použít na seskupení ve výběru skupiny tohoto seskupení. Například při výběru seskupení Nomenklatura nemůžete použít výraz CalculateExpression("Sum(SumTurnover)", "TotalTotal") > 1000 . Ale takový výraz lze použít v hierarchickém výběru. Pokud koncový záznam předchází počátečnímu záznamu, má se za to, že neexistují žádné záznamy pro výpočet podrobných dat a výpočet agregačních funkcí. Při výpočtu intervalových výrazů pro celkový součet (parametr Grouping je nastaven na "GrossTotal") se předpokládá, že neexistují žádné záznamy pro výpočet podrobných dat a výpočet agregačních funkcí. Při generování výrazu pro funkci CalculateExpression nahradí sazeč rozvržení, pokud výraz řazení obsahuje pole, která nelze použít při seskupování, funkci CalculateExpression hodnotou NULL.

3. Vyhodnoťte výraz s polem skupiny (EvalExpression s polem skupiny) - funkce vrací pole, jehož každý prvek obsahuje výsledek výpočtu výrazu pro seskupení podle zadaného pole.

Syntax:
CalculateExpressionWithGroupArray (výraz, GroupFieldExpressions, SelectRecords, SelectGroups)

Možnosti :

  • Výraz(String) - výraz, který má být vyhodnocen. Například "Částka(ČástkaObrat)";
  • FieldExpressionsGroups
  • Výběr záznamů
  • Výběr seskupení- výběr aplikovaný na záznamy skupiny. Například: "Částka(ČástkaObrat) > &Parametr1".
Příklad:
Maximum(CalculateExpressionWithGroupArray("Částka(ČástkaTurnover)", "Protistrana"));


Tvůrce rozvržení při generování výrazů pro zobrazení vlastního pole, jehož výraz obsahuje pouze funkci CalculateArrayWithGroup, generuje výstupní výraz takovým způsobem, že data zobrazení a data jsou seřazeny.
Například pro vlastní pole s výrazem:
CalculateExpressionWithGroupArray("Částka(ČástkaTurnover)", "Protistrana")
Tvůrce rozložení vygeneruje pro výstup následující výraz:
ConnectRows(Array(Order(CalculateExpressionWithGroupingValueTable("View(Sum(DataSet.AmountTurnover)), Amount (DataSet.AmountTurnover)", "DataSet.Account"), "2")))

4. Výpočet výrazu pomocí GroupValueTable (EvalExpressionWithGroupValueTable) - funkce vrací tabulku hodnot, jejíž každý prvek obsahuje výsledek výpočtu výrazu pro seskupení podle zadaného pole.

Syntax:
CalculateExpressionWithGroupValueTable (výraz, výrazy pole skupiny, výběr záznamů, výběr skupiny)

Možnosti :

  • Výraz(String) – výraz, který se má vyhodnotit. Řádek může obsahovat více výrazů oddělených čárkami. Za každým výrazem může být nepovinné klíčové slovo AS a název sloupce tabulky hodnot. Například: "Protistrana, částka (částka obratu) jako objem prodeje."
  • FieldExpressionsGroups- výrazy seskupení polí oddělené čárkami. Například "protistrana, strana";
  • Výběr záznamů- výraz aplikovaný na detailní záznamy. Například "Příznak odstranění = False." Pokud tento parametr používá agregační funkci, dojde při skládání dat k chybě;
  • Výběr seskupení- výběr aplikovaný na záznamy skupiny. Například: "Částka(ČástkaObrat) > &Parametr1".
Příklad:
Vypočítat výraz se seskupovací tabulkou hodnot ("účet jako protistrana, částka (obrat) jako objem prodeje", "účet")

Výsledkem této funkce bude tabulka hodnot se sloupci Protistrana a Objem prodeje, která bude obsahovat protistrany s jejich objemy prodeje.
Kompozitor rozvržení při generování rozvržení převádí parametry funkcí na pole rozvržení kompozice dat. Například pole Účet bude převedeno na DataSet.Account.
Například vlastní pole s výrazem:
CalculateExpressionWithGroupValueTable("účet, částka (částka obratu)", "účet")
Tvůrce rozložení vygeneruje pro výstup následující výraz:
ConnectRows(GetPart(Order(CalculateExpressionWithGroupingValueTable)("DataSet.Account, DataSet.AccountRepresentation, Sum(DataSet.AmountTurnover), View(DataSet.AmountTurnover), DataSet.OrderingField", "ccount"),5Set. ), "2, 4"))

5. Úroveň - funkce je navržena pro získání aktuální úrovně záznamu.

Syntax:
Úroveň()

Příklad:
Úroveň()

6. SequenceNumber - získat další sériové číslo.

Syntax:
NumberByOrder()

Příklad:
NumberByOrder()

7. SequenceNumberInGrouping - vrátí další pořadové číslo v aktuálním seskupení.

Příklad:
NumberByOrderInGroup()

8. Formát - získat formátovaný řetězec předané hodnoty.

Syntax:
Formát (hodnota, řetězec formátu)

Možnosti :

  • Význam- výraz, který je třeba formátovat;
  • FormatString- formátovací řetězec je nastaven v souladu s formátovacím řetězcem 1C:Enterprise.
Příklad:
Format(Invoices.Doc Amount, "NPV=2")

9. BeginOfPeriod

Syntax:
StartPeriod(Datum, PeriodType)

Možnosti :

  • datum(Datum). Specifikované datum;
  • Typ období
Příklad:
StartPeriod(DateTime(2002, 10, 12, 10, 15, 34), "Month")
Výsledek: 10/01/2002 0:00:00

10. EndOfPeriod - funkce je určena k výběru konkrétního data z daného data.

Syntax:
EndPeriod (datum, typ období)

Možnosti :

  • datum(Datum). Specifikované datum;
  • Typ období(Čára). Obsahuje jednu z následujících hodnot: Minuta; Hodina; Den; Týden; Měsíc; Čtvrťák; Rok; Desetiletí; Půl roku.
Příklad:
EndPeriod(DateTime(2002, 10, 12, 10, 15, 34), "Týden")
Výsledek: 13. 10. 2002 23:59:59

11. AddKDate (DateAdd) - funkce je navržena tak, aby k datu přidala určitou hodnotu.

Syntax:
AddToDate (výraz, typ přírůstku, velikost)

Možnosti :

  • Výraz(Datum). Původní datum;
  • Zvětšení typu(Čára). Obsahuje jednu z následujících hodnot: Minuta; Hodina; Den; Týden; Měsíc; Čtvrťák; Rok; Desetiletí; Půl roku.
  • Velikost(Číslo). O kolik je třeba datum zvýšit, zlomková část se ignoruje.
Příklad:
AddToDate(DateTime(2002, 10, 12, 10, 15, 34), "Month", 1)
Výsledek: 11. 12. 2002 10:15:34

12. DateDifference - funkce je navržena tak, aby získala rozdíl mezi dvěma daty.

Syntax:
Datum rozdílu (Výraz1, Výraz2, Typ rozdílu)

Možnosti :

  • Výraz1(Datum). Odečtené datum;
  • Výraz2(Datum). Původní datum;
  • Typový rozdíl(Čára). Obsahuje jednu z hodnot: Second; Minuta; Hodina; Den; Měsíc; Čtvrťák; Rok.
Příklad:
DATEDIFFERENCE(DATETIME(2002; 10; 12; 10; 15; 34);
DATETIME(2002, 10, 14, 9, 18, 06); "DEN")
Výsledek: 2

13. Podřetězec - tato funkce je navržena k extrahování podřetězce z řetězce.

Syntax:
Podřetězec (řetězec, pozice, délka)

Možnosti :

  • Čára(Čára). Řetězec, ze kterého je podřetězec extrahován;
  • Pozice(Číslo). Pozice znaku, od které začíná podřetězec, který má být z řetězce extrahován;
  • Délka(Číslo). Délka přiděleného podřetězce.
Příklad:
SUBSTRING(Accounts.Address, 1, 4)

14. Délka řetězce - funkce je určena k určení délky řetězce.

Syntax:
StringLength(String)

Parametr :

  • Čára(Čára). Řetězec, jehož délka je zadaná.
Příklad:
Řádek (Protistrany.Adresa)

15. Ročník- tato funkce je navržena k extrahování roku z hodnoty typu Datum.

Syntax:
rok (datum)

Parametr :

  • datum(Datum). Datum, do kterého je určen rok.
Příklad:
ROK(výdaj.datum)

16. Čtvrtletí - tato funkce je navržena k extrahování čísla čtvrtletí z hodnoty typu Datum. Číslo čtvrtletí se obvykle pohybuje od 1 do 4.

Syntax:
čtvrtletí (datum)

Parametr :

  • datum(Datum). Datum, do kterého je stanoveno čtvrtletí
Příklad:
ČTVRTLETÍ (Datum výdajů)

17. měsíc - tato funkce je navržena k extrahování čísla měsíce z hodnoty typu Datum. Číslo měsíce se obvykle pohybuje od 1 do 12.

Syntax:
měsíc (datum)

Parametr :

  • datum(Datum). Datum, do kterého je určen měsíc.
Příklad:
MĚSÍC (Datum výdajů)

18. Den v roce (DayOfYear) - tato funkce je navržena k získání dne v roce z hodnoty typu Date. Den v roce se obvykle pohybuje od 1 do 365 (366).

Syntax:
Den v roce (datum)

Parametr :

  • datum(Datum). Datum, do kterého je určen den v roce.
Příklad:
DAYYEAR(ExpenseAccount.Date)

19. den- tato funkce je navržena k získání dne v měsíci z hodnoty typu Date. Den v měsíci se obvykle pohybuje od 1 do 31.

Syntax:
den (datum)

Parametr :

  • datum(Datum). Datum, do kterého je určen den v měsíci.
Příklad:
DAY(Datum výdajů)

20. týden - tato funkce je navržena k získání čísla týdne v roce z hodnoty typu Datum. Týdny v roce se číslují od 1.

Syntax:
týden (datum)

Parametr :

  • datum(Datum). Datum, podle kterého se určují čísla týdnů.
Příklad:
WEEK(Datum výdajů)

21. Den v týdnu - tato funkce je navržena k získání dne v týdnu z hodnoty typu Date. Normální den v týdnu se pohybuje od 1 (pondělí) do 7 (neděle).

Syntax:
Den v týdnu (datum)

Parametr :

  • datum(Datum). Datum, podle kterého je určen den v týdnu.
Příklad:
DEN V TÝDNU (Datum výdajů)

22. hodina- tato funkce je navržena k získání hodiny dne z hodnoty typu Date. Denní hodina se pohybuje od 0 do 23.

Syntax:
hodina (datum)

Parametr :

  • datum(Datum). Datum, podle kterého je určena hodina dne.
Příklad:
HODINA (Datum výdajů)

23. Minuta - tato funkce je navržena k získání minuty v hodině z hodnoty typu Date. Minuta v hodině se pohybuje od 0 do 59.

Syntax:
minuta (datum)

Parametr :

  • datum(Datum). Datum, podle kterého je určena minuta v hodině.
Příklad:
MINUTA (datum výdajů)

24. Druhý - tato funkce je navržena k získání sekundy minuty z hodnoty typu Date. Sekunda minuty se pohybuje od 0 do 59.

Syntax:
Druhý (datum)

Parametr :

  • datum(Datum). Datum, podle kterého jsou určeny sekundy minuty.
Příklad:
DRUHÉ (Datum výdajů)

25. Obsazení - tato funkce je navržena k extrahování typu z výrazu, který může obsahovat složený typ. Pokud výraz obsahuje jiný než požadovaný typ, bude vrácena hodnota NULL.

Syntax:
Express(expression, TypeIndication)

Možnosti :

  • Výraz- výraz, který má být převeden;
  • Označení typu(Čára). Obsahuje typový řetězec. Například "Číslo", "Řetězec" atd. Kromě primitivních typů může tento řádek obsahovat název tabulky. V tomto případě bude učiněn pokus o vyjádření odkazu na zadanou tabulku.
Příklad:
Express(Data.Props1, "Number(10;3)")

26. IsNull (IsNull) - tato funkce vrací hodnotu druhého parametru, pokud je hodnota prvního parametru NULL. V opačném případě bude vrácena hodnota prvního parametru.

Syntax:
JeNull(Výraz1, Výraz2)

Možnosti :

  • Výraz1- hodnota ke kontrole;
  • Výraz2- návratová hodnota, pokud má Výraz1 hodnotu NULL.
Příklad:
AnoNULL(Částka(Prodej.ČástkaObrat); 0)

27.ACos- vypočítá arc cosinus v radiánech.

Syntax:
ACos (výraz)

Parametr :

  • Výraz(Číslo). Hodnota kosinusu (v rozsahu -1 ... 1), kterou je úhel určen.
28.ASin- vypočítá arkussinus v radiánech.

Syntax:
ASin (výraz)

Parametr :

  • Výraz(Číslo). Sinusová hodnota (v rozsahu -1 ... 1), kterou je úhel určen.
29.ATan- vypočítá arkustangens v radiánech.

Syntax:
ATan (výraz)

Parametr :

  • Výraz(Číslo). Hodnota tečny, kterou je úhel určen.
30.Cos- vypočítá kosinus.

Syntax:
cos (výraz)

Parametr :

  • Výraz
31. Exp- zvýšení čísla e na mocninu.

Syntax:
Exp (výraz)

Parametr :

  • Výraz(Číslo). Význam stupně.
32.Protokol- vypočítá přirozený logaritmus.

Syntax:
Protokol (výraz)

Parametr :

  • Výraz
33.Protokol10- vypočítá logaritmus X se základem 10.

Syntax:
Log10 (výraz)

Parametr :

  • Výraz(Číslo). Původní číslo je větší než 0.
34. Pow- umocňování.

Syntax:
Pow (základ, indikátor)

Možnosti :

  • Základna(Číslo). Základ operace umocňování.
  • Index(Číslo). Exponent.
35. Hřích- vypočítá sinus.

Syntax:
hřích (výraz)

Parametr :

  • Výraz(Číslo). Udává se v radiánech.
36. Sqrt- vypočítá druhou odmocninu.

Syntax:
Sqrt (výraz)

Parametr :

  • Výraz(Číslo). Nezáporné číslo.
37. Tan- vypočítá tečnu.

Syntax:
Tan (výraz)

Parametr :

  • Výraz(Číslo). Sinusová hodnota, kterou je úhel určen.
38. Kolo- zaokrouhlí původní číslo na požadovanou bitovou hloubku. Režim zaokrouhlení je standardní (1,5 jako 2).

Syntax:
Env (výraz, bitová hloubka)

Možnosti :

  • Výraz(Číslo). Původní číslo;
  • Bitová hloubka(Číslo). Počet desetinných míst, na který se má zaokrouhlit.
39. Int- odřízne zlomkovou část čísla.

Syntax:
Objekt (výraz)

Parametr :

  • Výraz(Číslo). Zlomkové číslo.
40. Funkce běžných modulů

Výraz modulu pro skládání dat může obsahovat volání funkcí globálních společných konfiguračních modulů. K volání takových funkcí není vyžadována žádná další syntaxe.

Příklad:
Zkrácený název(Documents.Link, Documents.Date, Documents.Number)

V tomto příkladu bude funkce "AbbreviatedName" volána z modulu obecné konfigurace.
Všimněte si, že použití společných funkcí modulu je povoleno pouze v případě, že je specifikován příslušný parametr procesoru pro složení dat.
Navíc funkce běžných modulů nelze použít ve výrazech vlastních polí.

41. Odpor - tato funkce vrací řetězcovou reprezentaci předané hodnoty neprimitivního typu. U hodnot primitivního typu vrací samotnou hodnotu.

<Пустое значение>".

Příklad:
Prezentace (protistrana)

42. Řetězec - tato funkce převede předávanou hodnotu na řetězec.

Pokud je jako parametr použito pole nebo tabulka hodnot, funkce vrátí řetězec obsahující řetězcovou reprezentaci všech prvků pole oddělené znaky "; ". Pokud má jakýkoli prvek prázdnou reprezentaci řetězce, pak řetězec "<Пустое значение>".

Příklad:
Řádek (datum prodeje)

43. ValueIsFilled

U hodnot NULL vrací Undefined vždy hodnotu False.
Pro booleovské hodnoty vždy vrací True.
U ostatních typů vrátí True, pokud se hodnota liší od výchozí hodnoty pro daný typ.

Příklad:
ValueFilled(DeliveryDate)

44. LevelInGroup - tato funkce získá aktuální úroveň nahrávání vzhledem k seskupení.

Lze jej použít k získání úrovně vnoření záznamu v hierarchickém seskupení.

Příklad:
LevelInGroup()

45. ValueType

Syntax:
ValueType (výraz)

Parametr :

  • Výraz(Čára). Typ hodnoty řetězce.
Vrátí hodnotu typu Type obsahující typ hodnoty parametru funkce.

Přihlaste se na stránky jako student

Pro přístup ke školním materiálům se přihlaste jako student

Systém skládání dat 1C 8.3 pro začátečníky: počítání výsledků (zdroje)

Účelem této lekce bude:

  • Napište zprávu, která zobrazí seznam produktů (adresář potravin), jejich obsah kalorií a chuť.
  • Seskupte produkty podle barvy.
  • Přečtěte si o sumarizaci (zdrojích) a počítaných polích.

Vytvořte nový přehled

Stejně jako v předchozích lekcích otevíráme databázi " Deli"v konfigurátoru a vytvořit nový report přes menu" Soubor"->"Nový...":

Typ dokumentu - externí zpráva:

Ve formuláři nastavení sestavy napište název " Lekce 3"a stiskněte tlačítko" Otevřený diagram složení dat":

Ponechte výchozí název schématu a klikněte na „ Připraven":

Přidání požadavku prostřednictvím konstruktoru

Na kartě " Sada dat"klikněte zelená znaménko plus a vyberte " Přidat datovou sadu – dotaz":

Místo ručního psaní textu požadavku jej spustíme znovu konstruktor dotazu:

Na záložce Tabulky"přetáhnout stůl" Jídlo" z prvního sloupce do druhého:

Vyberte z tabulky" Jídlo"pole, která si vyžádáme. Chcete-li to provést, přetáhněte pole" název", "Chuť", "Barva" A " Obsah kalorií"z druhého sloupce do třetího:

Dopadlo to takto:

Zmáčknout tlačítko " OK" - text požadavku byl vygenerován automaticky:

Vytváření nastavení prezentace sestav

Přejděte na kartu " Nastavení“ a klikněte na Kouzelná hůlka, zavolat návrhář nastavení:

Vyberte typ přehledu " Seznam..." a stiskněte tlačítko " Dále":

Přetáhněte z levého sloupce doprava pole, která se zobrazí v seznamu, a klikněte na „ Dále":

Přetáhněte z levého sloupce do pravého pole " Barva" - stane se to seskupenířádky v přehledu. klikněte na " OK":

A zde je výsledek práce designéra. Hierarchie naší zprávy:

  • zprávu jako celek
  • seskupení "Barva"
  • podrobné záznamy - řádky s názvy potravin

Uložit zprávu (tlačítko disketa) A bez zavírání Ihned otevřeme konfigurátor v uživatelském režimu. Dopadlo to takto:

Změna pořadí sloupců

Ale pojďme změňme pořadí sloupce (šipky nahoru a dolů), aby to vypadalo jako na obrázku níže:

Uložíme sestavu a znovu ji otevřeme v uživatelském režimu:

Skvělé, je to mnohem lepší.

Shrňme si obsah kalorií

Bylo by hezké shrnout kalorický obsah potravin podle skupin. Chcete-li vidět součet obsahu kalorií všech produktů, řekněme bílé nebo žluté. Nebo zjistěte celkový obsah kalorií všech produktů v databázi.

Za tímto účelem existuje mechanismus pro výpočet zdrojů.

Přejděte na kartu " Zdroje"a přetáhněte pole" Obsah kalorií"(shrneme to) z levého sloupce doprava.

V tomto případě v poli vyberte výraz z rozevíracího seznamu " Množství (kalorie)", protože součet bude součtem všech prvků zahrnutých v součtu:

Uložíme a vygenerujeme report:

Nyní máme výsledky pro každou ze skupin a pro zprávu jako celek.

Shrňme si to (průměrně) v přepočtu na kalorie

Nyní jej uvedeme v jiném sloupci průměrný kalorický obsah produktů podle skupin a ve zprávě jako celku.

Nemůžete se dotknout stávajícího sloupce „Kalorie“ - celkový součet je v něm již zobrazen, takže vytvoříme další pole, což bude přesnou kopií pole "Kalorie".

K vytvoření takového „virtuálního“ pole použijeme mechanismus vypočítaná pole.

Přejděte na kartu " Vypočítaná pole“ a stiskněte zelená znaménko plus:

Ve sloupci" Datová cesta"napíšeme název nového pole ( bezproblémově, bez mezer). Ať se to jmenuje" Průměrný obsah kalorií“ a ve sloupci „ Výraz"napíšeme název existujícího pole, na jehož základě bude nové pole vypočítáno. Zapíšeme tam" Obsah kalorií". Sloupec" Nadpis“ se vyplní automaticky.

Přidali jsme nové pole (" Průměrný obsah kalorií"), ale v přehledu se neobjeví sám - musíte buď zavolat znovu návrhář nastavení("kouzelná hůlka") nebo přidejte toto pole ručně.

Pojďme na to druhý cesta. Chcete-li to provést, přejděte na kartu " Nastavení", vyberte " Zpráva"(přeci jen chceme do přehledu přidat pole jako celek), vyberte záložku dole" Vybraná pole"a přetáhněte pole" Průměrný obsah kalorií"z levého sloupce doprava:

Dopadlo to takto:

Uložíme a vygenerujeme report:

Pole se objevilo a vidíme, že jeho hodnoty jsou hodnoty pole "Kalorie". Skvělý!

K tomu opět použijeme nám již známý mechanismus zdroje(shrnutí). Přejděte na kartu " Zdroje"a přetáhněte pole" Průměrný obsah kalorií"z levého sloupce doprava:

Navíc ve sloupci " Výraz"Vybrat" Průměr (průměrná kalorie)":

Uložíme a vygenerujeme report:

Vidíme, že pro skupiny, tedy pro každou barvu, i pro sestavu jako celek byla průměrná hodnota vypočtena naprosto správně. Ale jsou přítomni extra záznamy pro jednotlivé produkty (nikoli skupiny), které bych chtěl z přehledu odstranit.

Víte, proč se objevily (hodnoty ne podle skupiny)? Protože když jsme přidali pole " Průměrný obsah kalorií"v nastavení sestavy jsme ve druhém kroku vybrali celou zprávu a toto nové pole skončilo v prvku " Detailní evidence".

Pojďme opravit chybu. Chcete-li to provést, přejděte zpět na kartu " Nastavení", vyberte " Podrobné záznamy"nejprve shora (krok 2) a potom " Podrobné záznamy"zespodu (krok 3), přejděte na záložku" Vybraný pole"a v jeho pravém sloupci uvidíme prvek" Auto".

prvek " Auto" - toto není jedno pole. Jedná se o několik polí, která sem spadají automaticky na základě nastavení vyšší úrovně.

Chcete-li zjistit, co jsou tato pole, klikněte na prvek " Auto" že jo tlačítko a vyberte " Rozšířit":

prvek " Auto" rozbaleno do následujících polí:

A tady je naše pole" Průměrný obsah kalorií"který sem přišel z místa" Zpráva"když jsme ho tam táhli. Prostě." pojďme odstranit zaškrtnutím políčka vedle tohoto pole odeberete jeho výstup.

Publikace na dané téma