Expressietaal voor gegevenscompositiesysteem (1Cv8). Voorbeelden van het gebruik van de SKD-functie - bereken uitdrukking 1s SKD berekende velden-expressie

In het licht van de komende release van 8.2.14 zal ik proberen enkele nieuwe functies van het datacompositiesysteem te beschrijven.

Open het gegevensindelingsdiagram, bij voorkeur in een extern rapport, om het bewerken eenvoudiger te maken.

We voegen een dataset van het querytype toe en schrijven, handmatig of met behulp van de queryontwerper, een eenvoudige query:

1. Stel een verzoek in in het toegangscontrolesysteem.

2. Berekende velden instellen in het toegangscontrolesysteem

3. Configureer de gegevensindeling op het tabblad Instellingen

4. Start 1C Enterprise 8.2.14. Open het rapport. Wij vormen, wij ontvangen.

Beschrijving van de nieuwe functies zelf:

1. De huidige datum()

Retourneert de systeemdatum. Bij het samenstellen van een lay-outlay-out wordt in alle expressies die aanwezig zijn in de lay-out de functie CurrentDate() vervangen door de waarde van de huidige datum.

2. COMPUTEEXPRESSIE()

Syntaxis:

BerekenExpressie(,)

Beschrijving:

De functie is ontworpen om een ​​uitdrukking te evalueren in de context van een bepaalde groepering.

De functie houdt rekening met de selectie van groeperingen, maar houdt geen rekening met hiërarchische selecties.

De functie kan niet worden toegepast op een groepering in de groepsselectie van die groepering. Als u bijvoorbeeld de nomenclatuurgroepering selecteert, kunt u de uitdrukking niet gebruiken CalculateExpression("Som(SomOmzet)", "TotaalTotaal") > 1000. Maar een dergelijke uitdrukking kan worden gebruikt bij hiërarchische selectie.

Als het eindrecord voorafgaat aan het startrecord, wordt aangenomen dat er geen records zijn voor het berekenen van gedetailleerde gegevens en het berekenen van aggregatiefuncties.

Bij het berekenen van intervalexpressies voor een eindtotaal (de parameter Grouping is ingesteld op GrandTotal), wordt ervan uitgegaan dat er geen records zijn voor het berekenen van gedetailleerde gegevens en het berekenen van aggregatiefuncties.

Layout-linker bij het genereren van een functie-expressie BerekenExpressie Als de ordeningsuitdrukking velden bevat die niet bij het groeperen kunnen worden gebruikt, wordt de functie vervangen BerekenExpressie op NUL.

Opties

Type: Lijn. De expressie die moet worden geëvalueerd.

Type: Lijn. Bevat de naam van de groepering in de context waarvan de expressie moet worden geëvalueerd. Als een lege tekenreeks als groepsnaam wordt gebruikt, wordt de berekening uitgevoerd in de context van de huidige groepering. Als de GeneralTotal-reeks als groepsnaam wordt gebruikt, wordt de berekening uitgevoerd in de context van het eindtotaal. Anders wordt de berekening uitgevoerd in de context van de bovenliggende groepering met dezelfde naam.

Bijvoorbeeld:

Sum(Sales.SumOmzet)/Calculate("Sum(Sales.SumOmzet)", "Totaal")

In dit voorbeeld is het resultaat de verhouding van de som per veld Verkoop.BedragOmzet records groeperen tot de som van hetzelfde veld in de gehele lay-out;

Type: Lijn. De parameter kan de volgende waarden aannemen:

· eindtotaal— de uitdrukking wordt berekend voor alle groeperingsrecords.

· Hiërarchie— de expressie wordt geëvalueerd voor het bovenliggende hiërarchische record, als dat er is, en voor de gehele groepering, als er geen bovenliggende hiërarchische record is.

· Groepering— de expressie wordt geëvalueerd voor het huidige groepsgroeperingsrecord.

· GroupingNonResource— bij het berekenen van een functie voor een groepsrecord op basis van hulpbronnen, wordt de uitdrukking berekend voor het eerste groepsrecord van de oorspronkelijke groepering.

Bij het berekenen van een functie BerekenExpressie() met betekenis GroupingNonResource voor groepsrecords die niet op resources zijn gegroepeerd, wordt de functie op dezelfde manier berekend als wanneer de parameterwaarde gelijk zou zijn aan de waarde Groepering.

Wanneer de lay-outbouwer voor de gegevenscompositie een lay-out voor de gegevenscompositie genereert bij het uitvoeren van het bronveld waarmee de groepering naar de lay-out wordt uitgevoerd, plaatst hij een expressie in de lay-out die wordt berekend met behulp van de functie BerekenExpressie() , waarmee de parameter wordt aangegeven GroupingNonResource. Voor andere bronnen worden de gebruikelijke resource-expressies in de resourcegroepering geplaatst.

Type: Lijn. Geeft aan vanuit welk record het fragment moet beginnen, in welke geaggregeerde expressiefuncties moeten worden berekend en uit welk record veldwaarden buiten de geaggregeerde functies moeten worden verkregen. De waarde kan een van de volgende zijn:

· Eerst

· Laatste (Laatste)

· Vorig

· Volgende (Volgende)

· Huidig

· Beperkende waarde(grenswaarde) Beperkende waarde

Type: Lijn. Geeft aan naar welk record het fragment moet worden voortgezet, waarin de aggregatiefuncties van de uitdrukking moeten worden berekend. De waarde kan een van de volgende zijn:

· Eerst. Het is noodzakelijk om het eerste groeperingsrecord te verkrijgen. Na het woord tussen haakjes kunt u een uitdrukking opgeven, waarvan het resultaat wordt gebruikt als verschuiving vanaf het begin van de groepering. De resulterende waarde moet een geheel getal groter dan nul zijn. Bijvoorbeeld First(3) - ontvangst van de derde record vanaf het begin van de groepering.

Als het eerste record zich buiten de groepering bevindt, wordt ervan uitgegaan dat er geen records zijn. Als er bijvoorbeeld drie records zijn en u wilt First(4) verkrijgen, wordt ervan uitgegaan dat er geen records zijn.

· Laatste (Laatste). U moet het laatste groeperingsrecord ophalen. Na het woord tussen haakjes kunt u een uitdrukking opgeven, waarvan het resultaat wordt gebruikt als verschuiving vanaf het einde van de groepering. De resulterende waarde moet een geheel getal groter dan nul zijn. Bijvoorbeeld Last(3) - ontvangst van de derde record vanaf het einde van de groep.

Als het laatste record buiten de groepering valt, wordt ervan uitgegaan dat er geen records zijn. Als er bijvoorbeeld drie records zijn en u wilt Last(4) verkrijgen, wordt ervan uitgegaan dat er geen records zijn.

· Vorig. U moet het vorige groeperingsrecord ophalen. Na het woord tussen haakjes kunt u een uitdrukking opgeven, waarvan het resultaat zal worden gebruikt als een verschuiving ten opzichte van het huidige groeperingsrecord. Bijvoorbeeld Vorige(2) - haal de vorige uit het vorige record.

Als het vorige record verder gaat dan de groepering (voor het tweede groeperingsrecord moet u bijvoorbeeld Vorige(3) verkrijgen), dan wordt het eerste groeperingsrecord verkregen.

Bij het ophalen van het vorige record voor een groepstotaal wordt ervan uitgegaan dat het eerste record is verkregen.

· Volgende (Volgende). U moet het volgende groeperingsrecord ophalen. Na het woord tussen haakjes kunt u een uitdrukking opgeven, waarvan het resultaat zal worden gebruikt als een verschuiving voorwaarts ten opzichte van de huidige groeperingsinvoer. Bijvoorbeeld Next(2) - haal de volgende uit de volgende record.

Als het volgende record de groepering overschrijdt, wordt ervan uitgegaan dat er geen records zijn. Als er bijvoorbeeld drie vermeldingen zijn en de derde vermelding Next() ontvangt, wordt ervan uitgegaan dat er geen vermeldingen zijn.

Wanneer het volgende record voor het groepstotaal wordt ontvangen, wordt ervan uitgegaan dat er geen record is.

· Huidig. U moet het huidige record ophalen.

Bij het ophalen van een groepstotaal wordt het eerste record verkregen.

· Beperkende waarde(grenswaarde). De noodzaak om een ​​record te verkrijgen met de opgegeven waarde. Na het woord Beperkende waarde tussen haakjes moet u de uitdrukking aangeven met de waarde waarvan u het fragment wilt starten, het eerste bestelveld.

De eerste record waarvan de bestelveldwaarde groter is dan of gelijk is aan de opgegeven waarde, wordt als record geretourneerd. Als het veld Periode bijvoorbeeld als bestelveld wordt gebruikt en het de waarden 01/01/2010, 02/01/2010, 03/01/2010 bevat, en u wilt de LimitingValue(DateTime(2010, 1, 15)), dan wordt een record met de datum 01-02-2010 ontvangen.

Type: Lijn. Geeft uitdrukkingen weer, gescheiden door komma's, die de volgorderegels beschrijven. Indien niet gespecificeerd, wordt de volgorde op dezelfde manier uitgevoerd als voor de groepering waarvoor de expressie wordt geëvalueerd. Na elke uitdrukking kunt u een trefwoord opgeven Leeftijd(voor bestellen in oplopende volgorde), Aflopend(voor bestellen in aflopende volgorde) en Automatische bestelling(om referentievelden te ordenen op basis van de velden waarop u het object waarnaar wordt verwezen wilt ordenen). Woord Automatische bestelling kan worden gebruikt zoals bij het woord Leeftijd, dus met het woord Aflopend.

Type: Lijn. Hetzelfde als parameter Sorteren. Wordt gebruikt om hiërarchische records te ordenen. Indien niet gespecificeerd, genereert de lay-outbouwer de volgorde volgens de volgorde die in de parameter is opgegeven Sorteren.

Type: Lijn. Specificeert de regel voor het bepalen van het vorige of volgende record als er meerdere records zijn met dezelfde bestelwaarde:

· Afzonderlijk geeft aan dat een reeks geordende records wordt gebruikt om de vorige en volgende records te bepalen. Standaardwaarde.

· Samen geeft aan dat de vorige en volgende records worden bepaald op basis van de waarden van de ordeningsuitdrukkingen.

Als de resulterende reeks bijvoorbeeld op datum is gerangschikt:

datum Voor-en achternaam Betekenis
1 1 januari 2001

Ivanov M.

10
2 02 januari 2001 Petrov S. 20
3 3 januari 2001 Sidorov R. 30
4 4 januari 2001 Petrov S. 40

Afzonderlijk, Dat:

§ de vorige invoer bij invoer 3 is invoer 2.

Actueel, actueel(dienovereenkomstig, parameters Begin En Einde), dan zal dit fragment voor record 2 bestaan ​​uit één record 2. De uitdrukking zal gelijk zijn aan 20.

Als de parameterwaarde is Samen, Dat:

§ de vorige invoer bij invoer 3 is invoer 1.

§ als het berekeningsfragment is gedefinieerd als Actueel, actueel(dienovereenkomstig, parameters Begin En Einde), dan zal dit fragment voor record 2 bestaan ​​uit records 2 en 3. Expressie CalculateExpression("Som(waarde)", Huidig, Huidig) zal gelijk zijn aan 50.

Wanneer u een parameterwaarde opgeeft die gelijk is aan Samen, in parameters Begin En Einde u kunt geen offset voor posities opgeven Eerste, Laatste, Vorige, Volgende.

CalculateExpression("Som(SomOmzet)", "Eerste", "Huidig")

Als u de groeperingswaarde in de vorige regel wilt ophalen, kunt u de volgende expressie gebruiken:

CalculateExpression("Tarief", "Vorige")

Lijst nieuw functies:

BerekenExpressieMetGroupArray(,) -

De functie retourneert een array, waarvan elk element het resultaat bevat van de evaluatie van een expressie voor groepering op het opgegeven veld.

CalculateExpressionWithGroupValueTable(,) -

De functie retourneert een tabel met waarden, waarvan elke rij het resultaat bevat van het evalueren van expressies voor groepering op het opgegeven veld

WaardeGevuld() - Retourneert True als de waarde anders is dan de standaardwaarde van dit type, anders dan NULL, anders dan een lege verwijzing, anders dan Ongedefinieerd. Booleaanse waarden worden gecontroleerd op NULL-waarden. Tekenreeksen worden gecontroleerd op de afwezigheid van niet-witruimtetekens

Formaat(, ) - Ontvang een opgemaakte tekenreeks van de doorgegeven waarde. De formaatreeks wordt ingesteld in overeenstemming met de formaatreeks van het 1C:Enterprise-systeem.

Subtekenreeks(, , ) - Deze functie is ontworpen om een ​​subtekenreeks uit een tekenreeks te extraheren.

Lijnlengte() - De functie is ontworpen om de lengte van een string te bepalen. Parameter is een tekenreeksexpressie

Lijn() - Als een array als parameter wordt doorgegeven, retourneert de functie een string met stringrepresentaties van alle array-elementen, gescheiden door "; "-tekens. Als een waardentabel als parameter wordt doorgegeven, retourneert de functie een tekenreeks met tekenreeksrepresentaties van alle rijen van de waardentabel, waarbij de celrepresentaties van elke rij worden gescheiden door ";"-tekens, en de rijen door een nieuwe regel karakter. Als de stringrepresentatie van een element leeg is, wordt een string weergegeven in plaats van de representatie ervan.

  • 1C-Bitrix
  • Een van de belangrijkste gebieden van bedrijfssoftware is rapportage. Het lot van een bedrijf kan afhangen (en niet in figuurlijke zin!) van hoe gemakkelijk het is om een ​​bestaand rapport aan te passen aan de veranderende behoeften van het bedrijfsleven (en de wetgeving) of een nieuw rapport te creëren, of het nu een rapport voor de belastingdienst is. of een diagram van de afhankelijkheid van de vraag naar goederen van het seizoen en andere factoren. Een krachtig en flexibel rapportagesysteem dat het eenvoudig maakt om de benodigde gegevens uit het systeem te halen en deze in een begrijpelijke vorm te presenteren, waardoor de eindgebruiker een standaardrapport opnieuw kan configureren om de gegevens in een nieuw licht te zien - dit is het ideaal dat elke bedrijfssysteem zou moeten nastreven.

    In het 1C:Enterprise-platform is een mechanisme genaamd het “Data Composition System” (afgekort als DCS) verantwoordelijk voor het genereren van rapporten. In dit artikel zullen we proberen een korte beschrijving te geven van het idee en de architectuur van het ACS-mechanisme en zijn mogelijkheden.


    ACS is een mechanisme gebaseerd op een declaratieve beschrijving van meldingen. Het toegangscontrolesysteem is ontworpen voor het genereren van rapporten en het weergeven van informatie met een complexe structuur. Trouwens, naast het ontwikkelen van rapporten, wordt het ACS-mechanisme ook gebruikt in 1C:Enterprise in een dynamische lijst, een hulpmiddel voor het weergeven van lijstinformatie met rijke functionaliteit (weergave van platte en hiërarchische lijsten, voorwaardelijk ontwerp van rijen, groeperingen, enz. ).

    Een beetje geschiedenis

    In de allereerste versie van het 1C:Enterprise 8-platform, versie 8.0, werden rapporten als volgt gemaakt:
    1. Een of meer queries zijn geschreven in de 1C-querytaal (SQL-achtige taal, daarover hieronder meer).
    2. Er is code geschreven die de resultaten van uitgevoerde zoekopdrachten overzet naar een spreadsheetdocument of diagram. De code zou ook werk kunnen doen dat niet in een query kon worden gedaan - het berekende bijvoorbeeld waarden met behulp van de ingebouwde 1C-taal.
    De aanpak is eenvoudig, maar niet de handigste: er zijn minimale visuele instellingen, alles moet "hand-tot-hand" worden geprogrammeerd. En een van de toenmalige troeven van het compleet nieuwe platform “1C:Enterprise 8” was het minimaliseren in de applicatieoplossing van de hoeveelheid code die handmatig geschreven moest worden, vooral door middel van visueel ontwerp. Het zou logisch zijn om hetzelfde pad te volgen in het rapportagemechanisme. Dit werd gedaan door een nieuw mechanisme te ontwikkelen: het Data Composition System.

    Eén van de ideeën die ten grondslag lag aan het toegangscontrolesysteem was de flexibiliteit en het maatwerk van rapportages, die zowel voor de ontwikkelaar als voor de eindgebruiker toegankelijk waren. Idealiter zou ik de eindgebruiker toegang willen geven tot dezelfde set rapportontwerptools als de ontwikkelaar. Het zou logisch zijn om één enkele set tools te creëren die voor iedereen beschikbaar is. Omdat de tools de deelname van de eindgebruiker vereisen, betekent dit dat het gebruik van programmeren daarin tot een minimum moet worden beperkt (het is het beste om het volledig te elimineren) en dat visuele instellingen maximaal moeten worden gebruikt.

    Formulering van het probleem

    De taak voor het ontwikkelingsteam was om een ​​rapportagesysteem te creëren dat niet gebaseerd was op een algoritmische aanpak (d.w.z. door code te schrijven), maar op een declaratieve benadering voor het maken van rapporten. En wij zijn van mening dat het probleem met succes is opgelost. Onze ervaring is dat ongeveer 80% van de vereiste rapportage kan worden geïmplementeerd met behulp van ACS zonder een enkele regel code (behalve het schrijven van formules voor berekende velden), meestal via visuele instellingen.
    De ontwikkeling van de eerste versie van het SDS duurde ongeveer 5 persoonsjaren.

    Twee talen

    Er zijn twee talen betrokken bij het maken van rapporten. Eén daarvan is een querytaal die wordt gebruikt om gegevens op te halen. De tweede is de expressietaal voor gegevenscompositie, bedoeld voor het schrijven van expressies die in verschillende delen van het systeem worden gebruikt, bijvoorbeeld in instellingen voor gegevenscompositie, om expressies van gebruikersvelden te beschrijven.

    Zoektaal

    De querytaal is gebaseerd op SQL en is gemakkelijk te leren voor mensen met kennis van SQL. Voorbeeld verzoek:

    Het is gemakkelijk om analogen te zien van secties die standaard zijn voor SQL-query's: SELECT, FROM, GROUP BY, ORDER BY.

    Tegelijkertijd bevat de zoektaal een aanzienlijk aantal uitbreidingen die gericht zijn op het weerspiegelen van de specifieke kenmerken van financiële en economische problemen en op het maximaliseren van de vermindering van de inspanningen om toepassingsoplossingen te ontwikkelen:

    • Velden openen met een punt. Als de velden van een tabel van een referentietype zijn (ze slaan links op naar objecten van een andere tabel), kan de ontwikkelaar ernaar verwijzen in de tekst van het verzoek via “.”, en het systeem beperkt het aantal nestniveaus niet. van dergelijke links (bijvoorbeeld Klantbestelling. Overeenkomst. Organisatie. Telefoon).
    • Multidimensionale en multilevel vorming van resultaten. Totalen en subtotalen worden gevormd rekening houdend met groepering en hiërarchie, niveaus kunnen in elke volgorde worden doorlopen met optelling, en de juiste constructie van totalen volgens tijdsdimensies is verzekerd.
    • Ondersteuning voor virtuele tafels. Met virtuele tabellen die door het systeem worden geleverd, kunt u vrijwel kant-en-klare gegevens verkrijgen voor de meeste toepassingstaken zonder dat u complexe query's hoeft te maken. Een virtuele tabel kan dus gegevens verschaffen over productsaldi per periode op een bepaald tijdstip. Tegelijkertijd maken virtuele tabellen maximaal gebruik van de opgeslagen informatie, bijvoorbeeld eerder berekende totalen, enz.
    • Tijdelijke tafels. Met de querytaal kunt u tijdelijke tabellen in query's gebruiken. Met hun hulp kunt u de queryprestaties verbeteren, in sommige gevallen het aantal blokkeringen verminderen en de querytekst gemakkelijker leesbaar maken.
    • Batch-aanvragen. Om het werken met tijdelijke tabellen gemakkelijker te maken, ondersteunt de querytaal het werken met batchquery's - dus het maken van een tijdelijke tabel en het gebruik ervan worden in één query geplaatst. Een batchverzoek is een reeks verzoeken, gescheiden door puntkomma's (";"). De verzoeken in de batch worden één voor één uitgevoerd. Het resultaat van het uitvoeren van een batchverzoek is, afhankelijk van de gebruikte methode, het resultaat dat wordt geretourneerd door het laatste verzoek in de batch, of een reeks resultaten van alle zoekopdrachten in de batch in de volgorde waarin de zoekopdrachten in de batch volgen. .
    • Weergaven van referentievelden ophalen. Elke objecttabel (waarin een naslagwerk of document is opgeslagen) heeft een virtueel veld - "Beeld". Dit veld bevat een tekstuele weergave van het object en maakt het werk van de rapportmaker eenvoudiger. Voor een document bevat dit veld dus alle belangrijke informatie: de naam van het documenttype, het nummer en de datum (bijvoorbeeld "Verkoop 000000003 van 07/06/2017 17:49:14"), waardoor de ontwikkelaar geen een berekend veld schrijven.
    • en etc.
    Het verzoekmechanisme wijzigt het verzoek automatisch, rekening houdend met de rollen waartoe de gebruiker namens wie het verzoek wordt uitgevoerd behoort (dat wil zeggen dat de gebruiker alleen de gegevens ziet waartoe hij recht heeft) en functionele opties (dat wil zeggen, in overeenstemming met degene die zijn geconfigureerd in de functionaliteit van de applicatieoplossing).

    Er zijn ook speciale taaluitbreidingen voor toegangscontrolesystemen. Uitbreiding wordt uitgevoerd met behulp van speciale syntactische instructies tussen accolades en rechtstreeks in de hoofdtekst van het verzoek geplaatst. Met behulp van extensies bepaalt de ontwikkelaar welke bewerkingen de eindgebruiker kan uitvoeren bij het aanpassen van het rapport.

    Bijvoorbeeld:

    • KIEZEN. Deze zin beschrijft de velden die de gebruiker kan selecteren voor uitvoer. Na dit trefwoord worden aliassen van velden uit de selectielijst voor hoofdquery's weergegeven die beschikbaar zijn voor configuratie, gescheiden door komma's. Voorbeeld: (SELECTEER artikel, magazijn)
    • WAAR. De velden waarop de gebruiker selectie kan toepassen worden beschreven. Dit voorstel maakt gebruik van tabelvelden. Het gebruik van selectielijstveldaliassen is niet toegestaan. Elk deel van de unie kan zijn eigen WHERE-element bevatten. Voorbeelden: (WHERE Item.*, Magazijn), (WHERE Document.Date >= &StartDate, Document.Date<= &ДатаКонца}
    • en etc.
    Voorbeeld van het gebruik van extensies:

    Expressietaal voor gegevenssamenstelling

    De Data Composition Expression Language is ontworpen om expressies te schrijven die met name worden gebruikt om aangepaste veldexpressies te beschrijven. Met SKD kunt u aangepaste velden in een rapport definiëren met behulp van uw eigen expressies of sets opties met voorwaarden voor hun selectie (analoog aan CASE in SQL). Aangepaste velden zijn vergelijkbaar met berekende velden. Ze kunnen zowel in de configurator als in de 1C:Enterprise-modus worden ingesteld, maar de functies van gemeenschappelijke modules kunnen niet worden gebruikt in aangepaste velduitdrukkingen. Daarom zijn aangepaste velden bedoeld voor de gebruiker en niet voor de ontwikkelaar.

    Voorbeeld:

    Het proces van het maken van een rapport over het toegangscontrolesysteem

    Wanneer we een rapport maken, moeten we een lay-out maken die definieert hoe de gegevens in het rapport worden weergegeven. U kunt een lay-out maken op basis van een gegevenslay-outdiagram. Een gegevensindelingsdiagram beschrijft de essentie van de gegevens die aan het rapport worden geleverd (waar u de gegevens vandaan kunt halen en hoe u de indeling ervan kunt bepalen). Het datasamenstellingsschema is de basis waarop allerlei rapportages kunnen worden gegenereerd. Het gegevenscompositieschema kan het volgende bevatten:
    • tekst opvragen met instructies voor het datacompositiesysteem;
    • beschrijving van meerdere datasets;
    • gedetailleerde beschrijving van beschikbare velden;
    • het beschrijven van relaties tussen meerdere datasets;
    • beschrijving van data-acquisitieparameters;
    • beschrijving van veldindelingen en -groeperingen;
    • en etc.

    U kunt bijvoorbeeld een query als een gegevensset aan het gegevenscompositieschema toevoegen en de queryconstructor aanroepen, waarmee u grafisch een query van willekeurige complexiteit kunt maken:

    Het resultaat van het starten van de queryontwerper is de querytekst (in de querytaal 1C:Enterprise). Deze tekst kan indien nodig handmatig worden aangepast:

    Er kunnen meerdere datasets in een datalay-outschema voorkomen, datasets kunnen op welke manier dan ook in de lay-out worden gekoppeld, berekende velden kunnen worden toegevoegd, rapportparameters kunnen worden opgegeven, etc. Het is de moeite waard om een ​​interessant kenmerk van het zoekmechanisme in 1C:Enterprise te vermelden. Query's worden uiteindelijk vertaald in een SQL-dialect dat specifiek is voor het DBMS waarmee de applicatie rechtstreeks werkt. Over het algemeen proberen we de mogelijkheden van DBMS-servers maximaal te benutten (we worden beperkt door het feit dat we alleen die mogelijkheden gebruiken die tegelijkertijd beschikbaar zijn in alle DBMS'en die worden ondersteund door het 1C:Enterprise-platform - MS SQL, Oracle, IBM DB2 , PostgreSQL). Op queryniveau kunnen we in berekende velden dus alleen die functies gebruiken die in SQL zijn vertaald.

    Maar op het niveau van het gegevenscompositieschema kunnen we al aangepaste velden toevoegen en functies daarin gebruiken in de ingebouwde 1C-ontwikkeltaal (inclusief de door ons geschreven), waardoor de mogelijkheden van rapporten enorm worden uitgebreid. Technisch gezien ziet het er zo uit: alles wat in SQL kan worden vertaald, wordt in SQL vertaald, de query wordt uitgevoerd op DBMS-niveau, de queryresultaten worden in het geheugen van de 1C-applicatieserver geplaatst en de SKD berekent voor elk record de waarden ​​van berekende velden waarvan de formules zijn geschreven in de 1C-taal.


    Aangepaste velden toevoegen

    U kunt een willekeurig aantal tabellen en grafieken aan het rapport toevoegen:


    Rapportontwerper


    Runtime-rapport

    Met behulp van SKD kan de gebruiker complexe selecties aan het rapport toevoegen (die op de juiste plaatsen aan het verzoek worden toegevoegd), conditioneel ontwerp (waardoor de weergegeven velden anders kunnen worden opgemaakt - met lettertype, kleur, enz., afhankelijk van hun waarden ) en nog veel meer. .

    Het proces van het samenstellen en genereren van een rapport kan als volgt kort worden beschreven:

    • De ontwikkelaar in ontwerptijd met de hulp van een ontwerper (of in runtime met behulp van code) bepaalt het data-indelingsschema:
      • Tekst van de aanvraag(en).
      • Beschrijving van berekende velden
      • Relaties tussen verzoeken (als er meerdere zijn)
      • Rapportopties
      • Standaard instellingen
      • Enz.
    • De bovenstaande instellingen worden opgeslagen in de lay-out
    • Gebruiker opent rapport
      • Mogelijkheid tot extra instellingen (bijvoorbeeld wijziging van parameterwaarden)
      • Klik op de knop ‘Genereren’
    • Gebruikersinstellingen worden toegepast op het gegevenscompositieschema dat door de ontwikkelaar is gedefinieerd.
    • Er wordt een tussentijdse lay-out voor de gegevenssamenstelling gevormd, die instructies bevat over waar gegevens vandaan moeten worden gehaald. Met name de in de layout gespecificeerde queries worden aangepast. Velden die niet in het rapport worden gebruikt, worden dus uit de aanvraag verwijderd (dit wordt gedaan om de hoeveelheid ontvangen gegevens te minimaliseren). Alle velden die deelnemen aan formules voor berekende velden worden aan de query toegevoegd.
    • De datacompositieprocessor komt in het spel. De lay-outprocessor voert query's uit, koppelt datasets, berekent waarden voor berekende velden en bronnen en voert groeperingen uit. Kortom, het maakt alle berekeningen die niet op DBMS-niveau zijn uitgevoerd.
    • De gegevensuitvoerprocessor lanceert een verzoek tot uitvoering en geeft de ontvangen gegevens weer in een spreadsheetdocument, diagram, enz.


    Het proces van het genereren van een rapport met behulp van het ACS-mechanisme

    We proberen de hoeveelheid rapportgegevens die van de server naar de clientapplicatie worden overgedragen tot een minimum te beperken. Bij het weergeven van gegevens in een spreadsheetdocument dragen we bij het openen van een spreadsheetdocument alleen die regels over van de server die de gebruiker aan het begin van het document ziet. Terwijl de gebruiker langs de lijnen van het document beweegt, worden de ontbrekende gegevens van de server naar de client gedownload.

    Aangepaste instellingen

    Alle ACS-tools zijn beschikbaar voor zowel de ontwikkelaar als de eindgebruiker. Maar de praktijk leert dat de eindgebruiker zich vaak laat intimideren door de overvloed aan toolmogelijkheden. Bovendien heeft de eindgebruiker in de meeste gevallen niet alle instellingen nodig; het is voldoende dat hij snel toegang heeft tot het instellen van een of twee rapportparameters (bijvoorbeeld periode en tegenpartij). Vanaf een bepaalde versie van het platform heeft de rapportontwikkelaar de mogelijkheid om aan te geven welke rapportinstellingen beschikbaar zijn voor de gebruiker. Dit doet u via het selectievakje 'Opnemen in gebruikersinstellingen'. Bovendien hebben de rapportinstellingen nu een vlag 'Weergavemodus', die een van de volgende drie waarden kan aannemen:
    • Snelle toegang. De instelling wordt direct bovenaan het rapportvenster weergegeven.
    • Normaal. De instelling is beschikbaar via de knop "Instellingen".
    • Niet beschikbaar. De instelling is niet beschikbaar voor de eindgebruiker.


    Weergavemodus instellen tijdens ontwerptijd


    Geef de instelling tijdens runtime weer in de Quick Access-modus (onder de knop Genereren)

    Ontwikkelingsplannen

    Een van onze prioriteitsgebieden bij de ontwikkeling van toegangscontrolesystemen is het vereenvoudigen van gebruikersinstellingen. Uit onze ervaring blijkt dat het werken met gebruikersinstellingen voor sommige eindgebruikers nog steeds een hele onderneming is. Wij houden hier rekening mee en werken in deze richting. Dienovereenkomstig zal het voor ontwikkelaars ook gemakkelijker worden om met toegangscontrolesystemen te werken, omdat We willen, net als voorheen, één tool bieden voor het opzetten van rapporten voor zowel de ontwikkelaar als de eindgebruiker.

    In het licht van de komende release van 8.2.14 zal ik proberen enkele nieuwe functies van het datacompositiesysteem te beschrijven.

    Open het gegevensindelingsdiagram, bij voorkeur in een extern rapport, om het bewerken eenvoudiger te maken.

    We voegen een dataset van het querytype toe en schrijven, handmatig of met behulp van de queryontwerper, een eenvoudige query:

    1. Stel een verzoek in in het toegangscontrolesysteem.

    2. Berekende velden instellen in het toegangscontrolesysteem

    3. Configureer de gegevensindeling op het tabblad Instellingen

    4. Start 1C Enterprise 8.2.14. Open het rapport. Wij vormen, wij ontvangen.

    Beschrijving van de nieuwe functies zelf:

    1. De huidige datum()

    Retourneert de systeemdatum. Bij het samenstellen van een lay-outlay-out wordt in alle expressies die aanwezig zijn in de lay-out de functie CurrentDate() vervangen door de waarde van de huidige datum.

    2. COMPUTEEXPRESSIE()

    Syntaxis:

    BerekenExpressie(,)

    Beschrijving:

    De functie is ontworpen om een ​​uitdrukking te evalueren in de context van een bepaalde groepering.

    De functie houdt rekening met de selectie van groeperingen, maar houdt geen rekening met hiërarchische selecties.

    De functie kan niet worden toegepast op een groepering in de groepsselectie van die groepering. Als u bijvoorbeeld de nomenclatuurgroepering selecteert, kunt u de uitdrukking niet gebruiken CalculateExpression("Som(SomOmzet)", "TotaalTotaal") > 1000. Maar een dergelijke uitdrukking kan worden gebruikt bij hiërarchische selectie.

    Als het eindrecord voorafgaat aan het startrecord, wordt aangenomen dat er geen records zijn voor het berekenen van gedetailleerde gegevens en het berekenen van aggregatiefuncties.

    Bij het berekenen van intervalexpressies voor een eindtotaal (de parameter Grouping is ingesteld op GrandTotal), wordt ervan uitgegaan dat er geen records zijn voor het berekenen van gedetailleerde gegevens en het berekenen van aggregatiefuncties.

    Layout-linker bij het genereren van een functie-expressie BerekenExpressie Als de ordeningsuitdrukking velden bevat die niet bij het groeperen kunnen worden gebruikt, wordt de functie vervangen BerekenExpressie op NUL.

    Opties

    Type: Lijn. De expressie die moet worden geëvalueerd.

    Type: Lijn. Bevat de naam van de groepering in de context waarvan de expressie moet worden geëvalueerd. Als een lege tekenreeks als groepsnaam wordt gebruikt, wordt de berekening uitgevoerd in de context van de huidige groepering. Als de GeneralTotal-reeks als groepsnaam wordt gebruikt, wordt de berekening uitgevoerd in de context van het eindtotaal. Anders wordt de berekening uitgevoerd in de context van de bovenliggende groepering met dezelfde naam.

    Bijvoorbeeld:

    Sum(Sales.SumOmzet)/Calculate("Sum(Sales.SumOmzet)", "Totaal")

    In dit voorbeeld is het resultaat de verhouding van de som per veld Verkoop.BedragOmzet records groeperen tot de som van hetzelfde veld in de gehele lay-out;

    Type: Lijn. De parameter kan de volgende waarden aannemen:

    · eindtotaal— de uitdrukking wordt berekend voor alle groeperingsrecords.

    · Hiërarchie— de expressie wordt geëvalueerd voor het bovenliggende hiërarchische record, als dat er is, en voor de gehele groepering, als er geen bovenliggende hiërarchische record is.

    · Groepering— de expressie wordt geëvalueerd voor het huidige groepsgroeperingsrecord.

    · GroupingNonResource— bij het berekenen van een functie voor een groepsrecord op basis van hulpbronnen, wordt de uitdrukking berekend voor het eerste groepsrecord van de oorspronkelijke groepering.

    Bij het berekenen van een functie BerekenExpressie() met betekenis GroupingNonResource voor groepsrecords die niet op resources zijn gegroepeerd, wordt de functie op dezelfde manier berekend als wanneer de parameterwaarde gelijk zou zijn aan de waarde Groepering.

    Wanneer de lay-outbouwer voor de gegevenscompositie een lay-out voor de gegevenscompositie genereert bij het uitvoeren van het bronveld waarmee de groepering naar de lay-out wordt uitgevoerd, plaatst hij een expressie in de lay-out die wordt berekend met behulp van de functie BerekenExpressie() , waarmee de parameter wordt aangegeven GroupingNonResource. Voor andere bronnen worden de gebruikelijke resource-expressies in de resourcegroepering geplaatst.

    Type: Lijn. Geeft aan vanuit welk record het fragment moet beginnen, in welke geaggregeerde expressiefuncties moeten worden berekend en uit welk record veldwaarden buiten de geaggregeerde functies moeten worden verkregen. De waarde kan een van de volgende zijn:

    · Eerst

    · Laatste (Laatste)

    · Vorig

    · Volgende (Volgende)

    · Huidig

    · Beperkende waarde(grenswaarde) Beperkende waarde

    Type: Lijn. Geeft aan naar welk record het fragment moet worden voortgezet, waarin de aggregatiefuncties van de uitdrukking moeten worden berekend. De waarde kan een van de volgende zijn:

    · Eerst. Het is noodzakelijk om het eerste groeperingsrecord te verkrijgen. Na het woord tussen haakjes kunt u een uitdrukking opgeven, waarvan het resultaat wordt gebruikt als verschuiving vanaf het begin van de groepering. De resulterende waarde moet een geheel getal groter dan nul zijn. Bijvoorbeeld First(3) - ontvangst van de derde record vanaf het begin van de groepering.

    Als het eerste record zich buiten de groepering bevindt, wordt ervan uitgegaan dat er geen records zijn. Als er bijvoorbeeld drie records zijn en u wilt First(4) verkrijgen, wordt ervan uitgegaan dat er geen records zijn.

    · Laatste (Laatste). U moet het laatste groeperingsrecord ophalen. Na het woord tussen haakjes kunt u een uitdrukking opgeven, waarvan het resultaat wordt gebruikt als verschuiving vanaf het einde van de groepering. De resulterende waarde moet een geheel getal groter dan nul zijn. Bijvoorbeeld Last(3) - ontvangst van de derde record vanaf het einde van de groep.

    Als het laatste record buiten de groepering valt, wordt ervan uitgegaan dat er geen records zijn. Als er bijvoorbeeld drie records zijn en u wilt Last(4) verkrijgen, wordt ervan uitgegaan dat er geen records zijn.

    · Vorig. U moet het vorige groeperingsrecord ophalen. Na het woord tussen haakjes kunt u een uitdrukking opgeven, waarvan het resultaat zal worden gebruikt als een verschuiving ten opzichte van het huidige groeperingsrecord. Bijvoorbeeld Vorige(2) - haal de vorige uit het vorige record.

    Als het vorige record verder gaat dan de groepering (voor het tweede groeperingsrecord moet u bijvoorbeeld Vorige(3) verkrijgen), dan wordt het eerste groeperingsrecord verkregen.

    Bij het ophalen van het vorige record voor een groepstotaal wordt ervan uitgegaan dat het eerste record is verkregen.

    · Volgende (Volgende). U moet het volgende groeperingsrecord ophalen. Na het woord tussen haakjes kunt u een uitdrukking opgeven, waarvan het resultaat zal worden gebruikt als een verschuiving voorwaarts ten opzichte van de huidige groeperingsinvoer. Bijvoorbeeld Next(2) - haal de volgende uit de volgende record.

    Als het volgende record de groepering overschrijdt, wordt ervan uitgegaan dat er geen records zijn. Als er bijvoorbeeld drie vermeldingen zijn en de derde vermelding Next() ontvangt, wordt ervan uitgegaan dat er geen vermeldingen zijn.

    Wanneer het volgende record voor het groepstotaal wordt ontvangen, wordt ervan uitgegaan dat er geen record is.

    · Huidig. U moet het huidige record ophalen.

    Bij het ophalen van een groepstotaal wordt het eerste record verkregen.

    · Beperkende waarde(grenswaarde). De noodzaak om een ​​record te verkrijgen met de opgegeven waarde. Na het woord Beperkende waarde tussen haakjes moet u de uitdrukking aangeven met de waarde waarvan u het fragment wilt starten, het eerste bestelveld.

    De eerste record waarvan de bestelveldwaarde groter is dan of gelijk is aan de opgegeven waarde, wordt als record geretourneerd. Als het veld Periode bijvoorbeeld als bestelveld wordt gebruikt en het de waarden 01/01/2010, 02/01/2010, 03/01/2010 bevat, en u wilt de LimitingValue(DateTime(2010, 1, 15)), dan wordt een record met de datum 01-02-2010 ontvangen.

    Type: Lijn. Geeft uitdrukkingen weer, gescheiden door komma's, die de volgorderegels beschrijven. Indien niet gespecificeerd, wordt de volgorde op dezelfde manier uitgevoerd als voor de groepering waarvoor de expressie wordt geëvalueerd. Na elke uitdrukking kunt u een trefwoord opgeven Leeftijd(voor bestellen in oplopende volgorde), Aflopend(voor bestellen in aflopende volgorde) en Automatische bestelling(om referentievelden te ordenen op basis van de velden waarop u het object waarnaar wordt verwezen wilt ordenen). Woord Automatische bestelling kan worden gebruikt zoals bij het woord Leeftijd, dus met het woord Aflopend.

    Type: Lijn. Hetzelfde als parameter Sorteren. Wordt gebruikt om hiërarchische records te ordenen. Indien niet gespecificeerd, genereert de lay-outbouwer de volgorde volgens de volgorde die in de parameter is opgegeven Sorteren.

    Type: Lijn. Specificeert de regel voor het bepalen van het vorige of volgende record als er meerdere records zijn met dezelfde bestelwaarde:

    · Afzonderlijk geeft aan dat een reeks geordende records wordt gebruikt om de vorige en volgende records te bepalen. Standaardwaarde.

    · Samen geeft aan dat de vorige en volgende records worden bepaald op basis van de waarden van de ordeningsuitdrukkingen.

    Als de resulterende reeks bijvoorbeeld op datum is gerangschikt:

    datum Voor-en achternaam Betekenis
    1 1 januari 2001

    Ivanov M.

    10
    2 02 januari 2001 Petrov S. 20
    3 3 januari 2001 Sidorov R. 30
    4 4 januari 2001 Petrov S. 40

    Afzonderlijk, Dat:

    § de vorige invoer bij invoer 3 is invoer 2.

    Actueel, actueel(dienovereenkomstig, parameters Begin En Einde), dan zal dit fragment voor record 2 bestaan ​​uit één record 2. De uitdrukking zal gelijk zijn aan 20.

    Als de parameterwaarde is Samen, Dat:

    § de vorige invoer bij invoer 3 is invoer 1.

    § als het berekeningsfragment is gedefinieerd als Actueel, actueel(dienovereenkomstig, parameters Begin En Einde), dan zal dit fragment voor record 2 bestaan ​​uit records 2 en 3. Expressie CalculateExpression("Som(waarde)", Huidig, Huidig) zal gelijk zijn aan 50.

    Wanneer u een parameterwaarde opgeeft die gelijk is aan Samen, in parameters Begin En Einde u kunt geen offset voor posities opgeven Eerste, Laatste, Vorige, Volgende.

    CalculateExpression("Som(SomOmzet)", "Eerste", "Huidig")

    Als u de groeperingswaarde in de vorige regel wilt ophalen, kunt u de volgende expressie gebruiken:

    CalculateExpression("Tarief", "Vorige")

    Lijst nieuw functies:

    BerekenExpressieMetGroupArray(,) -

    De functie retourneert een array, waarvan elk element het resultaat bevat van de evaluatie van een expressie voor groepering op het opgegeven veld.

    CalculateExpressionWithGroupValueTable(,) -

    De functie retourneert een tabel met waarden, waarvan elke rij het resultaat bevat van het evalueren van expressies voor groepering op het opgegeven veld

    WaardeGevuld() - Retourneert True als de waarde anders is dan de standaardwaarde van dit type, anders dan NULL, anders dan een lege verwijzing, anders dan Ongedefinieerd. Booleaanse waarden worden gecontroleerd op NULL-waarden. Tekenreeksen worden gecontroleerd op de afwezigheid van niet-witruimtetekens

    Formaat(, ) - Ontvang een opgemaakte tekenreeks van de doorgegeven waarde. De formaatreeks wordt ingesteld in overeenstemming met de formaatreeks van het 1C:Enterprise-systeem.

    Subtekenreeks(, , ) - Deze functie is ontworpen om een ​​subtekenreeks uit een tekenreeks te extraheren.

    Lijnlengte() - De functie is ontworpen om de lengte van een string te bepalen. Parameter is een tekenreeksexpressie

    Lijn() - Als een array als parameter wordt doorgegeven, retourneert de functie een string met stringrepresentaties van alle array-elementen, gescheiden door "; "-tekens. Als een waardentabel als parameter wordt doorgegeven, retourneert de functie een tekenreeks met tekenreeksrepresentaties van alle rijen van de waardentabel, waarbij de celrepresentaties van elke rij worden gescheiden door ";"-tekens, en de rijen door een nieuwe regel karakter. Als de stringrepresentatie van een element leeg is, wordt een string weergegeven in plaats van de representatie ervan.

    1. Bereken (Evaluatie)- is bedoeld om een ​​uitdrukking te evalueren in de context van een bepaalde groepering. De functie wordt gebruikt voor compatibiliteit met eerdere versies van het platform. Het wordt aanbevolen om in plaats daarvan de functie CalculateExpression te gebruiken.

    Syntaxis:
    Calculate(Expressie, Groepering, Berekeningstype)

    Opties:

    • Uitdrukking(Lijn). Bevat een berekende uitdrukking;
    • Groepering(Lijn). Bevat de naam van de groepering in de context waarvan de expressie moet worden geëvalueerd. Als een lege tekenreeks als groepsnaam wordt gebruikt, wordt de berekening uitgevoerd in de context van de huidige groepering. Als de GrandTotal-reeks als groepsnaam wordt gebruikt, wordt de berekening uitgevoerd in de context van het eindtotaal. Anders wordt de berekening uitgevoerd in de context van de bovenliggende groepering met dezelfde naam.
      Bijvoorbeeld:
      Sum(Sales.SumOmzet) / Calculate("Som(Sales.SumOmzet)", "Totaal").
      In dit voorbeeld is het resultaat de verhouding tussen het bedrag voor het veld "Sales.AmountTurnover" van het groeperingsrecord en het bedrag van hetzelfde veld in de gehele lay-out.
    • Berekeningstype(Lijn). Als deze parameter is ingesteld op "TotalTotal", wordt de expressie berekend voor alle groeperingsrecords. Als de waarde van de parameter "Groeperen" is, worden de waarden berekend voor het huidige groeperingsgroeprecord.
    2. Expressie evalueren (EvalExpression) - is bedoeld om een ​​uitdrukking te evalueren in de context van een bepaalde groepering. De functie houdt rekening met de selectie van groeperingen, maar houdt geen rekening met hiërarchische selecties. De functie kan niet worden toegepast op een groepering in de groepsselectie van die groepering.

    Syntaxis:
    CalculateExpression(Expressie, Groepering, Berekeningstype, Begin, Einde, Sortering, Hiërarchische sortering, ProcessingIdenticalOrderValues)

    Opties:

    • Uitdrukking(Lijn). Bevat een berekende uitdrukking;
    • Groepering(Lijn). Bevat de naam van de groepering in de context waarvan de expressie moet worden geëvalueerd. Als een lege tekenreeks als groepsnaam wordt gebruikt, wordt de berekening uitgevoerd in de context van de huidige groepering. Als de GrandTotal-reeks als groepsnaam wordt gebruikt, wordt de berekening uitgevoerd in de context van het eindtotaal. Anders wordt de berekening uitgevoerd in de context van de bovenliggende groepering met die naam;
    • Berekeningstype(Lijn). Als deze parameter is ingesteld op "TotalTotal", wordt de expressie berekend voor alle groeperingsrecords. Als de waarde van de parameter "Groeperen" is, worden de waarden berekend voor het huidige groeperingsgroeprecord. Als de parameter is ingesteld op "Non-Resource Grouping", wordt bij het berekenen van de functie voor een groepsrecord per resource de uitdrukking geëvalueerd voor het eerste groepsrecord van de oorspronkelijke groepering. Bij het evalueren van de functie CalculateExpression met de waarde "GroupingNonResource" voor groepsrecords die geen groeperingen op resource zijn, wordt de functie op dezelfde manier geëvalueerd als wanneer deze zou worden geëvalueerd met de waarde van de parameter "Grouping". Wanneer de lay-outbouwer voor de gegevenscompositie een lay-out voor de gegevenscompositie genereert bij het uitvoeren van een veld (een bron waarmee groepering wordt uitgevoerd) naar de lay-out, voert hij naar de lay-out een expressie uit die is berekend met behulp van de functie CalculateExpression met de opgegeven parameter "GroupingNon-Resource". Voor andere bronnen die op bron zijn gegroepeerd, worden normale bronexpressies geretourneerd. Als de parameter is ingesteld op "Hiërarchie", moet de expressie worden geëvalueerd voor het bovenliggende hiërarchische record, als dat er is, en voor de gehele groepering, als er geen bovenliggende hiërarchische record is. Wanneer de lay-outbouwer een expressie genereert voor het veld % in hiërarchiegroep, genereert deze een expressie die de relatie bevat van de resource-expressie met de functie CalculateExpression voor de resource-expressie die wordt berekend voor de huidige groepering met het berekeningstype Hiërarchie.
    • Begin. Geeft aan vanuit welk record het fragment moet beginnen, in welke geaggregeerde expressiefuncties moeten worden berekend en uit welk record veldwaarden buiten de geaggregeerde functies moeten worden verkregen. Een tekenreeks die een van de volgende bevat:
      • "Eerst" Het is noodzakelijk om het eerste groeperingsrecord te verkrijgen. Na het woord tussen haakjes kunt u een uitdrukking opgeven, waarvan het resultaat wordt gebruikt als verschuiving vanaf het begin van de groepering. De resulterende waarde moet een geheel getal groter dan nul zijn. Bijvoorbeeld First(3) – ontvangst van de derde record vanaf het begin van de groepering. Als het eerste record zich buiten de groepering bevindt, wordt ervan uitgegaan dat er geen records zijn. Als er bijvoorbeeld drie records zijn en u wilt First(4) verkrijgen, wordt ervan uitgegaan dat er geen records zijn.
      • "Laatst" U moet het laatste groeperingsrecord ophalen. Na het woord tussen haakjes kunt u een uitdrukking opgeven, waarvan het resultaat wordt gebruikt als verschuiving vanaf het einde van de groepering. De resulterende waarde moet een geheel getal groter dan nul zijn. Bijvoorbeeld Last(3) – ontvangst van de derde record vanaf het einde van de groep. Als het laatste record buiten de groepering valt, wordt ervan uitgegaan dat er geen records zijn. Als er bijvoorbeeld drie records zijn en u wilt Last(4) verkrijgen, wordt ervan uitgegaan dat er geen records zijn.
      • "Vorig" U moet het vorige groeperingsrecord ophalen. Na het woord tussen haakjes kunt u een uitdrukking opgeven, waarvan het resultaat zal worden gebruikt als een verschuiving ten opzichte van het huidige groeperingsrecord. Bijvoorbeeld Vorige(2) – haal de vorige uit het vorige record. Als het vorige record buiten de groepering valt (voor het tweede groeperingsrecord is bijvoorbeeld het ophalen van Vorige(3) vereist), dan wordt het eerste groeperingsrecord verkregen. Wanneer u het vorige record voor het groepstotaal ontvangt, wordt het eerste record verkregen.
      • "Volgende" U moet het volgende groeperingsrecord ophalen. Na het woord tussen haakjes kunt u een uitdrukking opgeven, waarvan het resultaat zal worden gebruikt als een verschuiving voorwaarts ten opzichte van de huidige groeperingsinvoer. Bijvoorbeeld Next(2) – de volgende uit de volgende record halen. Als het volgende record de groepering overschrijdt, wordt ervan uitgegaan dat er geen records zijn. Als er bijvoorbeeld drie vermeldingen zijn en de derde vermelding Volgende ontvangt, wordt ervan uitgegaan dat er geen vermeldingen zijn. Wanneer het volgende record voor het groepstotaal wordt ontvangen, wordt ervan uitgegaan dat er geen record is.
      • "Huidig". U moet het huidige record ophalen. Bij het ophalen van een groepstotaal wordt het eerste record verkregen.
      • "Grenswaarde". De noodzaak om een ​​record te verkrijgen met de opgegeven waarde. Na het woord LimitingValue tussen haakjes moet u de expressie aangeven met de waarde waarvan u het fragment wilt starten, het eerste bestelveld. De eerste record waarvan de bestelveldwaarde groter is dan of gelijk is aan de opgegeven waarde, wordt als record geretourneerd. Als het veld Periode bijvoorbeeld als bestelveld wordt gebruikt en het de waarden 01/01/2010, 02/01/2010, 03/01/2010 heeft, en u de LimitingValue(DateTime(2010 , 1, 15)), dan wordt een record met de datum 02/01 verkregen. 2010.
    • Einde. Geeft aan naar welk record het fragment moet worden voortgezet, waarin de aggregatie-expressie moet worden berekend. Een tekenreeks die een van de volgende bevat:
      • "Eerst"
      • "Laatst"
      • "Vorig"
      • "Volgende"
      • "Huidig".
      • "Grenswaarde".
    • Sorteren. Een tekenreeks met de expressies, gescheiden door komma's, in de richting waarin de reeks moet worden geordend. Indien niet gespecificeerd, wordt de volgorde op dezelfde manier uitgevoerd als voor de groepering waarvoor de expressie wordt geëvalueerd. Na elke expressie kunt u het trefwoord Oplopend opgeven, om in oplopende volgorde te ordenen, Aflopend, om in aflopende volgorde te ordenen, Auto-Ordering, om de referentievelden te ordenen op basis van de velden waarmee u het object waarnaar wordt verwezen wilt ordenen. Het woord Automatische volgorde kan zowel met het woord Oplopend als met het woord Aflopend worden gebruikt.
    • Hiërarchisch sorteren. Vergelijkbaar met sorteren. Wordt gebruikt om hiërarchische records te ordenen. Als dit niet is opgegeven, genereert de lay-outcompositor de volgorde volgens de volgorde die is opgegeven in de parameter Sort.
    • Verwerking van dezelfde waarden van bestelling. Een tekenreeks die een van de volgende bevat:
      • "Samen" betekent dat een reeks geordende records wordt gebruikt om de vorige en volgende records te bepalen;
      • "Afzonderlijk" betekent dat de vorige en volgende records worden bepaald op basis van de waarden van de besteluitdrukkingen;
      Als de resulterende reeks bijvoorbeeld op datum is gerangschikt:
      1. 1 januari 2001 Ivanov M. 10
      2. 2 januari 2001 Petrov S. 20
      3. 2 januari 2001 Sidorov R. 30
      4. 3 januari 2001 Petrov S. 40
      Bij gebruik van verwerking van identieke waarden van de volgorde "Afzonderlijk", is de vorige voor record 3 record 2, en bij gebruik van "Samen" - record 1. En het fragment voor het huidige record voor record 2 voor "Afzonderlijk" zal record 2 zijn, en voor "Samen" - records 2 en 3. Het totaal voor de huidige record voor "Afzonderlijk" zal dus 20 zijn, en voor "Samen" - 50. Wanneer "Samen" is opgegeven in de Start- en Eindparameters, voor de posities “Eerste”, “Laatste”, “Vorige”, “Volgende” kunt u geen offset opgeven. De standaardwaarde is "Afzonderlijk".
    Voorbeeld:
    De verhouding verkrijgen tussen het bedrag voor het veld "Sales.AmountTurnover" van een groeperingsrecord en het bedrag van hetzelfde veld in de gehele lay-out:
    Sum(Sales.SumOmzet) / CalculateExpression("Sum(Sales.SumOmzet)", "Totaal").

    In dit voorbeeld wordt de waarde van de huidige hiërarchie berekend:
    Keuze
    Wanneer Niveau() > 0
    Dan EvaluateExpression("Referentie", "Hiërarchie")
    Anders nul
    Einde

    Opmerkingen:
    De functie houdt rekening met de selectie van groeperingen, maar houdt geen rekening met hiërarchische selecties. De functie kan niet worden toegepast op een groepering in de groepsselectie van die groepering. Als u bijvoorbeeld de nomenclatuurgroepering selecteert, kunt u de uitdrukking CalculateExpression("Sum(SumTurnover)", "TotalTotal") > 1000 niet gebruiken. Maar een dergelijke uitdrukking kan worden gebruikt bij hiërarchische selectie. Als het eindrecord voorafgaat aan het startrecord, wordt aangenomen dat er geen records zijn voor het berekenen van gedetailleerde gegevens en het berekenen van aggregatiefuncties. Bij het berekenen van intervalexpressies voor een eindtotaal (de parameter Grouping is ingesteld op "GrossTotal") wordt ervan uitgegaan dat er geen records zijn voor het berekenen van gedetailleerde gegevens en het berekenen van aggregatiefuncties. Bij het genereren van een expressie voor de functie CalculateExpression vervangt de lay-outcompositor, als de ordeningsexpressie velden bevat die niet bij het groeperen kunnen worden gebruikt, de functie CalculateExpression door NULL.

    3. Expressie evalueren met groepsarray (EvalExpression met groepsarray) - de functie retourneert een array, waarvan elk element het resultaat bevat van de berekening van een expressie voor groepering op het opgegeven veld.

    Syntaxis:
    CalculateExpressionWithGroupArray (Expressie, GroupFieldExpressions, SelectRecords, SelectGroups)

    Opties:

    • Uitdrukking(String) - de expressie die moet worden geëvalueerd. Bijvoorbeeld: "Bedrag(AmountOmzet)";
    • VeldExpressiesGroepen
    • Selectie van records
    • Selectie van groeperingen- selectie toegepast op groepsrecords. Bijvoorbeeld: 'Bedrag(BedragOmzet) > &Parameter1'.
    Voorbeeld:
    Maximum(CalculateExpressionWithGroupArray("Bedrag(BedragOmzet)", "Tegenpartij"));


    De lay-outbouwer genereert bij het genereren van expressies voor de weergave van een aangepast veld waarvan de expressie alleen de functie CalculateArrayWithGroup bevat, de weergave-expressie zodat de gegevens die door de views worden weergegeven en de gegevens worden geordend.
    Voor een aangepast veld met de expressie:
    CalculateExpressionWithGroupArray("Bedrag(BedragOmzet)", "Tegenpartij")
    De lay-outbouwer genereert de volgende expressie voor uitvoer:
    ConnectRows(Array(Order(CalculateExpressionWithGroupingValueTable("View(Sum(DataSet.AmountTurnover)), Amount(DataSet.AmountTurnover)", "DataSet.Account"), "2")))

    4. Bereken expressie met GroupValueTable (EvalExpressionWithGroupValueTable) - de functie retourneert een tabel met waarden, waarvan elk element het resultaat bevat van de berekening van een uitdrukking voor groepering op het opgegeven veld.

    Syntaxis:
    CalculateExpressionWithGroupValueTable (Expressie, GroupField-expressies, Recordsselectie, Groepsselectie)

    Opties:

    • Uitdrukking(String) - de expressie die moet worden geëvalueerd. Een regel kan meerdere uitdrukkingen bevatten, gescheiden door komma's. Na elke expressie kan er een optioneel trefwoord AS staan ​​en de naam van de waardetabelkolom. Bijvoorbeeld: 'Tegenpartij, bedrag (bedragomzet) als verkoopvolume.'
    • VeldExpressiesGroepen- uitdrukkingen van groeperingsvelden, gescheiden door komma's. Bijvoorbeeld 'Tegenpartij, Partij';
    • Selectie van records- een uitdrukking die wordt toegepast op detailrecords. Bijvoorbeeld: 'Verwijderingsvlag = Onwaar'. Als deze parameter een aggregatiefunctie gebruikt, treedt er een fout op bij het samenstellen van de gegevens;
    • Selectie van groeperingen- selectie toegepast op groepsrecords. Bijvoorbeeld: 'Bedrag(BedragOmzet) > &Parameter1'.
    Voorbeeld:
    Bereken expressie met groeperingstabel met waarden ("Account AS Tegenpartij, Bedrag (Bedrag Omzet) AS Verkoopvolume", "Account")

    Het resultaat van deze functie is een waardentabel met de kolommen Tegenpartij en Verkoopvolume, die tegenpartijen met hun verkoopvolumes zal bevatten.
    De lay-outcompositor converteert bij het genereren van een lay-out functieparameters naar termen van lay-outvelden voor de gegevenssamenstelling. Het veld Account wordt bijvoorbeeld geconverteerd naar DataSet.Account.
    Bijvoorbeeld een aangepast veld met de expressie:
    CalculateExpressionWithGroupValueTable("Account, Bedrag(AmountOmzet)", "Account")
    De lay-outbouwer genereert de volgende expressie voor uitvoer:
    ConnectRows(GetPart(Order(CalculateExpressionWithGroupValueTable("DataSet.Account, DataSet.AccountRepresentation, Sum(DataSet.AmountTurnover), View(DataSet.AmountTurnover), DataSet.OrderingField", "DataSet.Account"), "5, 1, 3" ), "2, 4"))

    5. Niveau - de functie is ontworpen om het huidige opnameniveau te verkrijgen.

    Syntaxis:
    Niveau()

    Voorbeeld:
    Niveau()

    6. Volgnummer - haal het volgende serienummer op.

    Syntaxis:
    AantalOpBestelling()

    Voorbeeld:
    AantalOpBestelling()

    7. SequenceNumberInGrouping - retourneert het volgende volgnummer in de huidige groepering.

    Voorbeeld:
    GetalDoorBestellingInGroep()

    8. Formaat - haal een opgemaakte string op van de doorgegeven waarde.

    Syntaxis:
    Format(Waarde, FormatString)

    Opties:

    • Betekenis- de expressie die moet worden opgemaakt;
    • FormatString- de formaatstring wordt ingesteld in overeenstemming met de 1C:Enterprise formaatstring.
    Voorbeeld:
    Formaat(Facturen. Documentbedrag, "NPV=2")

    9. BeginVanPeriode

    Syntaxis:
    StartPeriode(Datum, PeriodeType)

    Opties:

    • datum(Datum van). Opgegeven datum;
    • Periodetype
    Voorbeeld:
    StartPeriod(DatumTijd(2002, 10, 12, 10, 15, 34), "Maand")
    Resultaat: 10/01/2002 0:00:00

    10. EindePeriode - de functie is ontworpen om een ​​specifieke datum vanaf een bepaalde datum te selecteren.

    Syntaxis:
    EindPeriode(Datum, PeriodeType)

    Opties:

    • datum(Datum van). Opgegeven datum;
    • Periodetype(Lijn). Bevat een van de volgende waarden: Minuut; Uur; Dag; Een week; Maand; Kwartaal; Jaar; Decennium; Half jaar.
    Voorbeeld:
    EndPeriod(DateTime(2002, 10, 12, 10, 15, 34), "Week")
    Resultaat: 13-10-2002 23:59:59

    11. AddKDate (DateAdd) - de functie is ontworpen om een ​​bepaalde waarde aan de datum toe te voegen.

    Syntaxis:
    AddToDate(Expressie, IncrementType, Omvang)

    Opties:

    • Uitdrukking(Datum van). Originele datum;
    • TypeVergroting(Lijn). Bevat een van de volgende waarden: Minuut; Uur; Dag; Een week; Maand; Kwartaal; Jaar; Decennium; Half jaar.
    • Grootte(Nummer). Met hoeveel de datum moet worden verhoogd, wordt het fractionele deel genegeerd.
    Voorbeeld:
    AddToDate(DateTime(2002, 10, 12, 10, 15, 34), "Maand", 1)
    Resultaat: 11/12/2002 10:15:34

    12. Datumverschil - de functie is ontworpen om het verschil tussen twee datums te berekenen.

    Syntaxis:
    Verschildatum(Expressie1, Expressie2, Verschiltype)

    Opties:

    • Expressie1(Datum van). Afgetrokken datum;
    • Expressie2(Datum van). Originele datum;
    • Typeverschil(Lijn). Bevat een van de waarden: Second; Minuut; Uur; Dag; Maand; Kwartaal; Jaar.
    Voorbeeld:
    DATEVERSCHIL(DATUMTIJD(2002, 10, 12, 10, 15, 34),
    DATUMTIJD(2002, 10, 14, 9, 18, 06), "DAG")
    Resultaat: 2

    13. Subtekenreeks - deze functie is ontworpen om een ​​substring uit een string te extraheren.

    Syntaxis:
    Subtekenreeks (tekenreeks, positie, lengte)

    Opties:

    • Lijn(Lijn). De tekenreeks waaruit de subtekenreeks wordt geëxtraheerd;
    • Positie(Nummer). De positie van het teken waaruit de subtekenreeks die uit de tekenreeks moet worden gehaald, begint;
    • Lengte(Nummer). Lengte van de toegewezen subtekenreeks.
    Voorbeeld:
    SUBSTRING(Accounts.Adres, 1, 4)

    14. Snaarlengte - de functie is ontworpen om de lengte van een string te bepalen.

    Syntaxis:
    Tekenreekslengte(tekenreeks)

    Parameter :

    • Lijn(Lijn). Een tekenreeks waarvan de lengte is opgegeven.
    Voorbeeld:
    Regel(Tegenpartijen.Adres)

    15. Jaar- deze functie is ontworpen om het jaar te extraheren uit een datumtypewaarde.

    Syntaxis:
    Jaar(datum)

    Parameter :

    • datum(Datum van). De datum waarop het jaar wordt bepaald.
    Voorbeeld:
    JAAR(Uitgave.Datum)

    16. Kwartaal - deze functie is ontworpen om het kwartaalnummer uit een waarde van het datumtype te extraheren. Het kwartaalnummer varieert normaal gesproken van 1 tot 4.

    Syntaxis:
    Kwartaal (datum)

    Parameter :

    • datum(Datum van). De datum waarop het kwartaal wordt bepaald
    Voorbeeld:
    KWARTAAL(Onkosten.Datum)

    17. Maand - deze functie is ontworpen om het maandnummer uit een waarde van het datumtype te extraheren. Het maandnummer varieert normaal gesproken van 1 tot 12.

    Syntaxis:
    Maand datum)

    Parameter :

    • datum(Datum van). De datum waarop de maand wordt bepaald.
    Voorbeeld:
    MAAND(Uitgave. Datum)

    18. Dag van het jaar (DayOfYear) - deze functie is ontworpen om de dag van het jaar te verkrijgen uit een datumtypewaarde. De dag van het jaar varieert normaal gesproken van 1 tot 365 (366).

    Syntaxis:
    Dag van het jaar (datum)

    Parameter :

    • datum(Datum van). De datum waarop de dag van het jaar wordt bepaald.
    Voorbeeld:
    DAGJAAR(Onkostenrekening.Datum)

    19. Dag- deze functie is ontworpen om de dag van de maand te verkrijgen uit een datumtypewaarde. De dag van de maand varieert normaal gesproken van 1 tot 31.

    Syntaxis:
    Dag datum)

    Parameter :

    • datum(Datum van). De datum waarop de dag van de maand wordt bepaald.
    Voorbeeld:
    DAG(Onkosten.Datum)

    20. Week - deze functie is ontworpen om het weeknummer van het jaar te verkrijgen uit een datumtypewaarde. De weken van het jaar zijn genummerd vanaf 1.

    Syntaxis:
    Week(datum)

    Parameter :

    • datum(Datum van). De datum waarop weeknummers worden bepaald.
    Voorbeeld:
    WEEK(Onkosten.Datum)

    21. Weekdag - deze functie is ontworpen om de dag van de week te verkrijgen uit een datumtypewaarde. De normale dag van de week varieert van 1 (maandag) tot 7 (zondag).

    Syntaxis:
    Dag van de week (datum)

    Parameter :

    • datum(Datum van). De datum waarop de dag van de week wordt bepaald.
    Voorbeeld:
    DAG VAN DE WEEK (Onkostenfactuurdatum)

    22. Uur- deze functie is ontworpen om het uur van de dag te verkrijgen uit een datumtypewaarde. Het uur van de dag varieert van 0 tot 23.

    Syntaxis:
    Uur(datum)

    Parameter :

    • datum(Datum van). De datum waarop het uur van de dag wordt bepaald.
    Voorbeeld:
    UUR(Onkosten.Datum)

    23. Minuut - deze functie is ontworpen om de minuut van het uur te verkrijgen uit een datumtypewaarde. De minuut van het uur varieert van 0 tot 59.

    Syntaxis:
    Minuut (datum)

    Parameter :

    • datum(Datum van). De datum waarop de minuut van het uur wordt bepaald.
    Voorbeeld:
    MINUUT(Onkosten.Datum)

    24. Ten tweede - deze functie is ontworpen om de seconde van een minuut te verkrijgen uit een datumtypewaarde. De seconde van een minuut varieert van 0 tot 59.

    Syntaxis:
    Tweede (datum)

    Parameter :

    • datum(Datum van). De datum waarop de seconden van de minuut worden bepaald.
    Voorbeeld:
    TWEEDE(Onkostendatum)

    25. Gegoten - deze functie is ontworpen om een ​​type te extraheren uit een expressie die een samengesteld type kan bevatten. Als de expressie een ander type bevat dan het vereiste type, wordt NULL geretourneerd.

    Syntaxis:
    Express(Expressie, TypeIndicatie)

    Opties:

    • Uitdrukking- expressie die moet worden geconverteerd;
    • Type-indicatie(Lijn). Bevat een typetekenreeks. Bijvoorbeeld 'Nummer', 'String', enz. Naast primitieve typen kan deze regel de naam van de tabel bevatten. In dit geval wordt geprobeerd een verwijzing naar de opgegeven tabel tot uitdrukking te brengen.
    Voorbeeld:
    Express(Data.Props1, "Getal(10,3)")

    26. IsNull (IsNull) - deze functie retourneert de waarde van de tweede parameter als de waarde van de eerste parameter NULL is. Anders wordt de waarde van de eerste parameter geretourneerd.

    Syntaxis:
    IsNull(Expressie1, Expressie2)

    Opties:

    • Expressie1- waarde die moet worden gecontroleerd;
    • Expressie2- retourneer waarde als Expressie1 NULL is.
    Voorbeeld:
    JaNULL(Bedrag(Verkoop.BedragOmzet), 0)

    27. ACos- berekent de boogcosinus in radialen.

    Syntaxis:
    ACos(Expressie)

    Parameter :

    • Uitdrukking(Nummer). De cosinuswaarde (in het bereik -1 ... 1) waarmee de hoek wordt bepaald.
    28.ASin- berekent de boogsinus in radialen.

    Syntaxis:
    ASin(Expressie)

    Parameter :

    • Uitdrukking(Nummer). De sinuswaarde (in het bereik -1 ... 1) waarmee de hoek wordt bepaald.
    29. ATan- berekent de boogtangens in radialen.

    Syntaxis:
    ATan(Expressie)

    Parameter :

    • Uitdrukking(Nummer). De tangenswaarde waarmee de hoek wordt bepaald.
    30.Cos- berekent cosinus.

    Syntaxis:
    Cos(expressie)

    Parameter :

    • Uitdrukking
    31. Uitv- het getal e tot een macht verheffen.

    Syntaxis:
    Exp(Expressie)

    Parameter :

    • Uitdrukking(Nummer). De betekenis van het diploma.
    32.Logboek- berekent de natuurlijke logaritme.

    Syntaxis:
    Logboek (expressie)

    Parameter :

    • Uitdrukking
    33.Log10- berekent de logaritme van X met grondtal 10.

    Syntaxis:
    Log10(Expressie)

    Parameter :

    • Uitdrukking(Nummer). Het oorspronkelijke getal is groter dan 0.
    34. Pow- machtsverheffen.

    Syntaxis:
    Pow(basis, indicator)

    Opties:

    • Baseren(Nummer). De basis van de werking van machtsverheffing.
    • Inhoudsopgave(Nummer). Exponent.
    35. Zonde- berekent de sinus.

    Syntaxis:
    Zonde(uitdrukking)

    Parameter :

    • Uitdrukking(Nummer). Gespecificeerd in radialen.
    36. Sqrt- berekent de vierkantswortel.

    Syntaxis:
    Sqrt(Expressie)

    Parameter :

    • Uitdrukking(Nummer). Niet-negatief getal.
    37. Bruin- berekent de raaklijn.

    Syntaxis:
    Bruin(Expressie)

    Parameter :

    • Uitdrukking(Nummer). De sinuswaarde waarmee de hoek wordt bepaald.
    38. Rond- rondt het originele getal af op de gewenste bitdiepte. De afrondingsmodus is standaard (1,5 als 2).

    Syntaxis:
    Env(Expressie, Bitdiepte)

    Opties:

    • Uitdrukking(Nummer). Origineel nummer;
    • Beetje diepte(Nummer). Het aantal decimalen waarop moet worden afgerond.
    39. Int- snijdt het fractionele deel van een getal af.

    Syntaxis:
    Object(expressie)

    Parameter :

    • Uitdrukking(Nummer). Een fractioneel getal.
    40. Functies van gemeenschappelijke modules

    Een expressie van een datacompositie-engine kan aanroepen naar functies van globale gemeenschappelijke configuratiemodules bevatten. Er is geen extra syntaxis vereist om dergelijke functies aan te roepen.

    Voorbeeld:
    AfgekorteNaam(Documenten.Link, Documenten.Datum, Documenten.Nummer)

    In dit voorbeeld wordt de functie "AbbreviatedName" aangeroepen vanuit de algemene configuratiemodule.
    Houd er rekening mee dat het gebruik van gemeenschappelijke modulefuncties alleen is toegestaan ​​als de juiste processorparameter voor gegevenscompositie is opgegeven.
    Bovendien kunnen functies van algemene modules niet worden gebruikt in aangepaste veldexpressies.

    41. Wrok - deze functie retourneert een tekenreeksrepresentatie van de doorgegeven waarde van een niet-primitief type. Retourneert voor waarden van een primitief type de waarde zelf.

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

    Voorbeeld:
    Presentatie(Tegenpartij)

    42. Snaar - deze functie converteert de doorgegeven waarde naar een string.

    Als een array of een waardentabel als parameter wordt gebruikt, retourneert de functie een string met daarin een stringrepresentatie van alle elementen van de array, gescheiden door de tekens "; ". Als een element een lege tekenreeksrepresentatie heeft, dan wordt de tekenreeks "<Пустое значение>".

    Voorbeeld:
    Rij(Verkoopdatum)

    43. WaardeIsGevuld

    Voor NULL-waarden retourneert Undefined altijd False.
    Voor Booleaanse waarden wordt altijd True geretourneerd.
    Voor andere typen wordt True geretourneerd als de waarde afwijkt van de standaardwaarde voor het opgegeven type.

    Voorbeeld:
    WaardeGevuld(Leveringsdatum)

    44. NiveauInGroep - deze functie haalt het huidige opnameniveau op ten opzichte van de groepering.

    Kan worden gebruikt om het nestniveau van een record in een hiërarchische groepering te verkrijgen.

    Voorbeeld:
    NiveauInGroep()

    45. Waardetype

    Syntaxis:
    WaardeType(Expressie)

    Parameter :

    • Uitdrukking(Lijn). Type tekenreekswaarde.
    Retourneert een waarde van het type Type dat het waardetype van de functieparameter bevat.

    In het licht van de komende release van 8.2.14 zal ik proberen enkele nieuwe functies van het datacompositiesysteem te beschrijven.

    Open het gegevensindelingsdiagram, bij voorkeur in een extern rapport, om het bewerken eenvoudiger te maken.

    We voegen een dataset van het querytype toe en schrijven, handmatig of met behulp van de queryontwerper, een eenvoudige query:

    1. Stel een verzoek in in het toegangscontrolesysteem.

    2. Berekende velden instellen in het toegangscontrolesysteem

    3. Configureer de gegevensindeling op het tabblad Instellingen

    4. Start 1C Enterprise 8.2.14. Open het rapport. Wij vormen, wij ontvangen.

    Beschrijving van de nieuwe functies zelf:

    1. De huidige datum()

    Retourneert de systeemdatum. Bij het samenstellen van een lay-outlay-out wordt in alle expressies die aanwezig zijn in de lay-out de functie CurrentDate() vervangen door de waarde van de huidige datum.

    2. COMPUTEEXPRESSIE()

    Syntaxis:

    BerekenExpressie(<Выражение>, <Группировка>, <ОбластьВычисления>, <Начало>, <Конец>, <Сортировка>, <ИерархическаяСортировка>, <ОбработкаОдинаковыхЗначенийПорядка>)

    Beschrijving:

    De functie is ontworpen om een ​​uitdrukking te evalueren in de context van een bepaalde groepering.

    De functie houdt rekening met de selectie van groeperingen, maar houdt geen rekening met hiërarchische selecties.

    De functie kan niet worden toegepast op een groepering in de groepsselectie van die groepering. Bij de selectie van de groep Nomenclatuur kunt u bijvoorbeeld niet de uitdrukking CalculateExpression("Sum(SumTurnover)", "TotalTotal") > 1000 gebruiken. Maar een dergelijke uitdrukking kan wel worden gebruikt bij hiërarchische selectie.

    Als het eindrecord voorafgaat aan het startrecord, wordt aangenomen dat er geen records zijn voor het berekenen van gedetailleerde gegevens en het berekenen van aggregatiefuncties.

    Bij het berekenen van intervalexpressies voor een eindtotaal (de parameter Grouping is ingesteld op GrandTotal), wordt ervan uitgegaan dat er geen records zijn voor het berekenen van gedetailleerde gegevens en het berekenen van aggregatiefuncties.

    Bij het genereren van een expressie voor de functie CalculateExpression vervangt de lay-outcompositor, als de ordeningsexpressie velden bevat die niet bij het groeperen kunnen worden gebruikt, de functie CalculateExpression door NULL.

    Opties

    <Выражение>

    Type: Tekenreeks. De expressie die moet worden geëvalueerd.

    <Группировка>

    Type: Tekenreeks. Bevat de naam van de groepering in de context waarvan de expressie moet worden geëvalueerd. Als een lege tekenreeks als groepsnaam wordt gebruikt, wordt de berekening uitgevoerd in de context van de huidige groepering. Als de GrandTotal-reeks als groepsnaam wordt gebruikt, wordt de berekening uitgevoerd in de context van het eindtotaal. Anders wordt de berekening uitgevoerd in de context van de bovenliggende groepering met dezelfde naam.

    Bijvoorbeeld:

    Sum(Sales.SumOmzet)/Calculate(“Sum(Sales.SumOmzet)”, “Totaal”)

    In dit voorbeeld is het resultaat de verhouding tussen het bedrag voor het veld Sales.SumTurnover van het groeperingsrecord en het bedrag van hetzelfde veld in de gehele lay-out;

    <ОбластьВычисления>

    Type: Tekenreeks. De parameter kan de volgende waarden aannemen:

    • GeneralTotal - de expressie wordt berekend voor alle groeperingsrecords.
    • Hiërarchie - De expressie wordt geëvalueerd voor de bovenliggende hiërarchische record als die er is, en voor de gehele groepering als er geen bovenliggende hiërarchische record is.
    • Groeperen - de expressie wordt geëvalueerd voor de huidige groeperingsrecord.
    • Niet-resourcegroepering - bij het berekenen van een functie voor een groepsrecord per resource, wordt de uitdrukking geëvalueerd voor het eerste groepsrecord van de oorspronkelijke groepering.

    Bij het berekenen van een functie BerekenExpressie() met de waarde Non-Resource Grouping voor groepsrecords die geen resourcegroeperingen zijn, wordt de functie op dezelfde manier berekend als wanneer de parameterwaarde gelijk zou zijn aan de Grouping-waarde.

    Wanneer de lay-outbouwer voor de gegevenscompositie een lay-out voor de gegevenscompositie genereert bij het uitvoeren van het bronveld waarmee de groepering naar de lay-out wordt uitgevoerd, plaatst hij een expressie in de lay-out die wordt berekend met behulp van de functie BerekenExpressie(), waarmee de parameter Non-Resource Grouping wordt aangegeven. Voor andere bronnen worden de gebruikelijke resource-expressies in de resourcegroepering geplaatst.

    <Начало>

    Type: Tekenreeks. Geeft aan vanuit welk record het fragment moet beginnen, in welke geaggregeerde expressiefuncties moeten worden berekend en uit welk record veldwaarden buiten de geaggregeerde functies moeten worden verkregen. De waarde kan een van de volgende zijn:

    <Конец>

    Type: Tekenreeks. Geeft aan naar welk record het fragment moet worden voortgezet, waarin de aggregatiefuncties van de uitdrukking moeten worden berekend. De waarde kan een van de volgende zijn:

    • Eerst. Het is noodzakelijk om het eerste groeperingsrecord te verkrijgen. Na het woord tussen haakjes kunt u een uitdrukking opgeven, waarvan het resultaat wordt gebruikt als verschuiving vanaf het begin van de groepering. De resulterende waarde moet een geheel getal groter dan nul zijn. Bijvoorbeeld First(3) – ontvangst van de derde record vanaf het begin van de groepering.

    Als het eerste record zich buiten de groepering bevindt, wordt ervan uitgegaan dat er geen records zijn. Als er bijvoorbeeld drie records zijn en u wilt First(4) verkrijgen, wordt ervan uitgegaan dat er geen records zijn.

    • Laatst. U moet het laatste groeperingsrecord ophalen. Na het woord tussen haakjes kunt u een uitdrukking opgeven, waarvan het resultaat wordt gebruikt als verschuiving vanaf het einde van de groepering. De resulterende waarde moet een geheel getal groter dan nul zijn. Bijvoorbeeld Last(3) – ontvangst van de derde record vanaf het einde van de groep.

    Als het laatste record buiten de groepering valt, wordt ervan uitgegaan dat er geen records zijn. Als er bijvoorbeeld drie records zijn en u wilt Last(4) verkrijgen, wordt ervan uitgegaan dat er geen records zijn.

    • Vorig. U moet het vorige groeperingsrecord ophalen. Na het woord tussen haakjes kunt u een uitdrukking opgeven, waarvan het resultaat zal worden gebruikt als een verschuiving ten opzichte van het huidige groeperingsrecord. Bijvoorbeeld Vorige(2) – haal de vorige uit het vorige record.

    Als het vorige record verder gaat dan de groepering (voor het tweede groeperingsrecord moet u bijvoorbeeld Vorige(3) verkrijgen), dan wordt het eerste groeperingsrecord verkregen.

    Bij het ophalen van het vorige record voor een groepstotaal wordt ervan uitgegaan dat het eerste record is verkregen.

    • Volgende. U moet het volgende groeperingsrecord ophalen. Na het woord tussen haakjes kunt u een uitdrukking opgeven, waarvan het resultaat zal worden gebruikt als een verschuiving voorwaarts ten opzichte van de huidige groeperingsinvoer. Bijvoorbeeld Next(2) – de volgende uit de volgende record halen.

    Als het volgende record de groepering overschrijdt, wordt ervan uitgegaan dat er geen records zijn. Als er bijvoorbeeld drie records zijn en Next() wordt ontvangen voor het derde record, wordt ervan uitgegaan dat er geen records zijn.

    Wanneer het volgende record voor het groepstotaal wordt ontvangen, wordt ervan uitgegaan dat er geen record is.

    • Huidig. U moet het huidige record ophalen.

    Bij het ophalen van een groepstotaal wordt het eerste record verkregen.

    • Grenswaarde. De noodzaak om een ​​record te verkrijgen met de opgegeven waarde. Na het woord LimitingValues ​​tussen haakjes moet u de expressie aangeven met de waarde waarvan u het fragment wilt starten, het eerste bestelveld.

    De eerste record waarvan de bestelveldwaarde groter is dan of gelijk is aan de opgegeven waarde, wordt als record geretourneerd. Als het veld Periode bijvoorbeeld als bestelveld wordt gebruikt en het de waarden 01/01/2010, 02/01/2010, 03/01/2010 heeft, en u de LimitingValue(DateTime(2010 , 1, 15)), dan wordt een record met de datum 02/01 verkregen. 2010.

    <Сортировка>

    Type: Tekenreeks. Geeft uitdrukkingen weer, gescheiden door komma's, die de volgorderegels beschrijven. Indien niet gespecificeerd, wordt de volgorde op dezelfde manier uitgevoerd als voor de groepering waarvoor de expressie wordt geëvalueerd. Na elke expressie kunt u de trefwoorden Oplopend (voor het ordenen in oplopende volgorde), Aflopend (voor het ordenen in aflopende volgorde) en AutoOrder (voor het ordenen van referentievelden op basis van de velden waarmee u het object waarnaar wordt verwezen) opgeven. Het woord Automatische volgorde kan zowel met het woord Oplopend als met het woord Aflopend worden gebruikt.

    <ИерархическаяСортировка>

    Type: Tekenreeks. Hetzelfde als de optie Sorteren. Wordt gebruikt om hiërarchische records te ordenen. Als dit niet is opgegeven, genereert de lay-outcompositor de volgorde volgens de volgorde die is opgegeven in de parameter Sort.

    <ОбработкаОдинаковыхЗначенийПорядка>

    Type: Tekenreeks. Specificeert de regel voor het bepalen van het vorige of volgende record als er meerdere records zijn met dezelfde bestelwaarde:

    • Afzonderlijk betekent dat een reeks geordende records wordt gebruikt om de vorige en volgende records te bepalen. Standaardwaarde.
    • Samen betekent dat de vorige en volgende records worden bepaald op basis van de waarden van de ordeningsuitdrukkingen.

    Als de resulterende reeks bijvoorbeeld op datum is gerangschikt:

    datum Voor-en achternaam Betekenis
    1 1 januari 2001 Ivanov M. 10
    2 02 januari 2001 Petrov S. 20
    3 3 januari 2001 Sidorov R. 30
    4 4 januari 2001 Petrov S. 40

    Als de parameterwaarde Afzonderlijk is, dan:

    § de vorige invoer bij invoer 3 is invoer 2.

    § als het rekenfragment is gedefinieerd als Current, Current (respectievelijk de parameters Start en End), dan zal dit fragment voor record 2 bestaan ​​uit één record 2. De uitdrukking CalculateExpression(“Sum (Value)”, Current, Current) zal gelijk zijn aan 20.

    Als de parameterwaarde Samen is, dan:

    § de vorige invoer bij invoer 3 is invoer 1.

    § als het rekenfragment is gedefinieerd als Current, Current (respectievelijk de parameters Start en End), dan zal dit fragment voor record 2 bestaan ​​uit records 2 en 3. De uitdrukking CalculateExpression(“Sum (Value)”, Current, Current) zal gelijk zijn aan 50.

    Wanneer u een parameterwaarde opgeeft die gelijk is aan Samen, kunt u in de parameters Start en End geen offset opgeven voor de posities Eerste, Laatste, Vorige, Volgende.

    CalculateExpression(“Sum(SumOmzet)”, “Eerste”, “Huidig”)

    Als u de groeperingswaarde in de vorige regel wilt ophalen, kunt u de volgende expressie gebruiken:

    CalculateExpression(“Tarief”, “Vorige”)

    Lijst nieuw functies:

    BerekenExpressieMetGroupArray(<Выражение>, <ВыражениеПолейГруппировки>, <ОтборЗаписей>, <ОтборГруппировок>) –

    De functie retourneert een array, waarvan elk element het resultaat bevat van de evaluatie van een expressie voor groepering op het opgegeven veld.

    CalculateExpressionWithGroupValueTable(<Выражения>, <ВыражениеПолейГруппировки>, <ОтборЗаписей>, <ОтборГруппировок>) –

    De functie retourneert een tabel met waarden, waarvan elke rij het resultaat bevat van het evalueren van expressies voor groepering op het opgegeven veld

    WaardeGevuld(<Выражение>) – Retourneert True als de waarde anders is dan de standaardwaarde van dit type, anders dan NULL, anders dan een lege verwijzing, anders dan Ongedefinieerd. Booleaanse waarden worden gecontroleerd op NULL. Tekenreeksen worden gecontroleerd op de afwezigheid van niet-witruimtetekens

    Formaat(<Выражение>, <Форматная строка>) – Ontvang een opgemaakte reeks van de doorgegeven waarde. De formaatreeks wordt ingesteld in overeenstemming met de formaatreeks van het 1C:Enterprise-systeem.

    Subtekenreeks(<Выражение>, <Начальные символ>, <ДлинаПодстроки>) – Deze functie is ontworpen om een ​​subtekenreeks uit een tekenreeks te extraheren.

    Lijnlengte(<Выражение>) – De functie is ontworpen om de lengte van een string te bepalen. Parameter - tekenreeksexpressie

    Lijn(<Выражение>) – Als een array als parameter wordt doorgegeven, retourneert de functie een string met stringrepresentaties van alle array-elementen, gescheiden door de tekens “; “. Als een waardentabel als parameter wordt doorgegeven, retourneert de functie een string die de stringrepresentaties van alle rijen van de waardentabel bevat, waarbij de celrepresentaties van elke rij worden gescheiden door de tekens “; “, en de lijnen zijn een regeldoorvoersymbool. Als een element een lege tekenreeksrepresentatie heeft, wordt de tekenreeks weergegeven in plaats van zijn representatie<Пустое значение>.