1s SKD aggregatfunktionsmatris. Funktioner för uttrycksspråket för datasammansättningssystemet. Ändra ordningen på kolumner

I denna korta notering vill jag visa hur du kan sammanfatta värden på olika grupperingsnivåer i en rapport med hjälp av ett datasammansättningssystem.
Som visas i bilden, endast på grupperingsnivån "Artikelgrupper", beräknas resursen "Beställning", den visar hur mycket som behöver beställas för den aktuella varugruppen baserat på vissa villkor:


Detta värde kan endast beräknas för denna nivå grupperingar eftersom, över eller under, det inte finns några värden att beräkna. Till exempel, på nivån för detaljerade poster, finns det inga uppgifter om den maximala kvantiteten i en grupp, eftersom dessa uppgifter endast är giltiga för gruppen som helhet och inte för dess enskilda komponenter.

Följaktligen är det nu nödvändigt att beräkna summorna för ovanstående grupperingar ("Lager", "Lagertyper") och den totala summan.
För att göra detta, använd funktionen CalculateExpressionWithGroupArray:
EVALUATE EXPRESSIONWITHGROUPARRAY (EVALEXPRESSIONWITHGROUPARRAY)
Syntax:
EvaluateExpressionWithGroupArray(,)
Beskrivning:
Funktionen returnerar en array, vars varje element innehåller resultatet av att utvärdera ett uttryck för gruppering efter det angivna fältet.
Layoutsammansättaren, när den genererar en layout, konverterar funktionsparametrar till termer av datasammansättningslayoutfält. Till exempel kommer fältet Konto att konverteras till DataSet.Account.
När layoutbyggaren genererar uttryck för utdata från ett anpassat fält vars uttryck endast innehåller funktionen CalculateArrayWithGroupArray() genererar utdatauttrycket så att utdatainformationen ordnas. Till exempel, för ett anpassat fält med uttrycket:

CalculateExpressionWithGroupArray("Amount(AmountTurnover)", "Motpart")
Layoutbyggaren kommer att generera följande uttryck för utdata:

ConnectRows(Array(Order(CalculateExpressionWithGroupingValueTable("View(Sum(DataSet.AmountTurnover)),Sum(DataSet.AmountTurnover)",,"DataSet.Account"),"2")))

Alternativ:

Typ: Sträng. Uttrycket som ska utvärderas. Sträng, till exempel Amount(AmountTurnover).

Typ: Sträng. Grupperingsfältuttryck – uttryck för grupperingsfält, separerade med kommatecken. Till exempel Entreprenör, Part.

Typ: Sträng. Ett uttryck som beskriver valet som tillämpas på detaljposter. Uttrycket stöder inte användningen av aggregerade funktioner. Till exempel, DeletionFlag = False.

Typ: Sträng. Ett uttryck som beskriver valet som tillämpas på gruppposter. Till exempel, Amount(AmountTurnover) > &Parameter1.
Exempel:

Maximum(CalculateExpressionWithGroupArray("Amount(AmountOmsättning)", "Motpart"));

En detaljerad beskrivning av funktionssyntaxen finns på http://its.1c.ru/db/v837doc#bookmark:dev:TI000000582
Nu, för beräkningen, duplicerar vi fältet "Order", med olika värden "Beräkna med...", med hjälp av följande uttryck, notera att på varje högre nivå används värdena för nivåerna under grupperingarna .

Som ett resultat får vi följande konstruktion:

U den här metoden Det verkar för mig att det finns ett minus, men det fungerar, men minuset är stort. Låt oss titta på ett exempel: i konfigurationen finns ett dokument "Mottagning av varor" med tabelldel"Produkter", det är nödvändigt att visa dokumenten och namnen på de mottagna varorna i rapporten för varje dokument.

Låt oss skapa en rapport, lägga till ett grundläggande datalayoutschema, lägga till en uppsättning data av typen "query" till åtkomstkontrollsystemet och generera en enkel begäran (se figur 1).

Figur 1. Datauppsättningsfråga
På fliken "Beräknade fält", lägg till ett beräknat fält som heter TabularPart och ange en tom sträng i kolumnen Uttryck (se figur 2).
Vårt beräknade fält kommer att användas som en resurs, så på fliken "Resurser" ställer vi in ​​grupperingsuttrycket: ConnectRows(Array(Products.Nomenclature),""). Vi anger också att denna resurs måste beräknas med hjälp av länkfältet (se figur 3).
Resultatet av rapporten:
Nackdelen är användningen av gruppering; i vårt fall utförs gruppering av attributet Link, annars fungerar det inte. Närvaron av en gruppering medför vissa begränsningar för att ställa in datautmatning (se figur 4).

2) Anropa din egen funktion från en gemensam modul.

Ett enkelt och tydligt sätt, den enda svårigheten är att hitta en lämplig gemensam modul eller skapa en ny för att skriva din egen funktion :). Med hjälp av den skickade länken till dokumentet "Varumottagning" kommer funktionen att ta emot rader från den tabellformade delen av dokumentet och generera en rad med information om de mottagna varorna. Låt oss börja implementera.

Låt oss skapa en rapport, lägga till ett grundläggande datalayoutschema, lägga till en uppsättning data av typen "query" till åtkomstkontrollsystemet och generera en enkel begäran (se figur 6).


Figur 6. Datauppsättningsfråga
Låt oss skapa en gemensam modul _Demo Arbeta MED Rapporter och skriva exportfunktionen Get List of Products for Report(). Programkod funktioner se nedan.
På fliken "Beräknade fält", lägg till ett beräknat fält som heter TabularPart och i kolumnen Uttryck anger vi ett funktionsanrop från den allmänna modulen (se figur 2):
_DemoWorking WITH Reports.Hämta lista över produkter för rapporten (länk)

Låt oss gå till fliken "Inställningar" och skapa en inställning för datautmatning - detta kommer att vara en detaljerad post (se figur 8).
Resultatet av rapporten:

Ladda ner exempelrapport

Vad du behöver veta när du använder den här metoden:
1) Datasammansättningsmotorns uttryck kan innehålla anrop till funktioner för globala gemensamma konfigurationsmoduler. Till exempel:
Förkortat namn (länk, datum, nummer)
2) När en rapport genereras programmatiskt tillåts användningen av funktionerna i vanliga moduler endast om motsvarande parameter för datasammansättningsprocessorn är specificerad (4:e parametern):
CompositionProcessor = newDataCompositionProcessor;
LayoutProcessor.Initialize(LayoutLayout, DecryptionData, True);
3) Funktioner för vanliga moduler kan inte användas i anpassade fältuttryck.
4) Om ett undantag skapas när en rapport genereras som indikerar en funktion hos en gemensam modul, kontrollera modulexekveringskontexten (se figur 9).

Beskrivning av de funktioner som används

ConnectRows(Value, ItemSeparator, ColumnSeparator)- designad för att kombinera strängar till en linje.
  • Värde - uttryck som måste kombineras till en rad. Om det är en array kommer elementen i arrayen att kombineras till en sträng. Om det är en värdetabell kommer alla kolumner och rader i tabellen att kombineras till en rad;
  • Elementseparator - En sträng som innehåller text som ska användas som avgränsare mellan arrayelement och värdetabellsrader. Standard – radmatningstecken;
  • Kolumnavskiljare - en sträng som innehåller text som ska användas som avgränsare mellan kolumner i värdetabellen. Standard "; ".
Array([Various] Expression)- du kan använda en värdetabell som parameter. I det här fallet kommer resultatet av funktionen att vara en array som innehåller värdena i den första kolumnen i värdetabellen, skickad som en parameter. Om ett uttryck innehåller en Array-funktion, anses uttrycket vara ett aggregerat uttryck. Om specificerat nyckelord En annan, då kommer den resulterande arrayen inte att innehålla dubbletter av värden.

Hämta lista över produkter för rapport (DocumentLink)- funktionen genererar en rad med en lista över inkommande varor.
// Alternativ:
// DocumentLink - DocumentLink.Goods Receipt - Dokument "Varekvitto".
// Returvärde:
// String - en sträng med en lista över produkter.
Funktion Hämta lista över produkter för rapportexport (DocumentLink).

Lista över produkter = "";

För varje rad PM från DocumentLink.Products Cycle
Lista över produkter = Lista över produkter + Rad TC.Nomenclature;
Lista över produkter = Lista över produkter + Symboler.PS;
EndCycle;

Returlista över produkter;

EndFunction // Hämta lista över produkter för rapport()

1. Beräkna (Eval)- är avsedd att utvärdera ett uttryck inom ramen för någon gruppering. Denna funktion används för kompatibilitet med tidigare versioner plattformar. Det rekommenderas att använda funktionen CalculateExpression istället.

Syntax:
Beräkna (uttryck, gruppering, beräkningstyp)

Alternativ :

  • Uttryck(Linje). Innehåller ett beräknat uttryck;
  • Gruppering(Linje). Innehåller namnet på den gruppering i vilken uttrycket ska utvärderas. Om gruppnamnet används tom rad, kommer beräkningen att utföras inom ramen för den aktuella grupperingen. Om GrandTotal-strängen används som gruppnamn, kommer beräkningen att utföras i samband med totalsumman. Annars kommer beräkningen att utföras inom ramen för den överordnade gruppen med samma namn.
    Till exempel:
    Sum(Sales.SumTurnover) / Calculate("Sum(Försäljning.SumOmsättning)", "Totalt").
    I i detta exempel resultatet blir förhållandet mellan beloppet för fältet "Sales.SumTurnover" i grupperingsposten och beloppet för samma fält i hela layouten.
  • Typ av beräkning(Linje). Om denna parameter är inställd på "TotalTotal" kommer uttrycket att beräknas för alla grupperingsposter. Om värdet på parametern är "Gruppering", kommer värdena att beräknas för den aktuella grupperingsgruppposten.
2. Utvärdera uttryck (EvalExpression) - är avsedd att utvärdera ett uttryck inom ramen för någon gruppering. Funktionen tar hänsyn till urvalet av grupperingar, men tar inte hänsyn till hierarkiska urval. Funktionen kan inte tillämpas på en gruppering i gruppvalet för den grupperingen.

Syntax:
BeräknaUttryck(Uttryck, Gruppering, Beräkningstyp, Start, Slut, Sortera, HierarchicalSort, ProcessingIdentical OrderValues)

Alternativ :

  • Uttryck(Linje). Innehåller ett beräknat uttryck;
  • Gruppering(Linje). Innehåller namnet på den gruppering i vilken uttrycket ska utvärderas. Om en tom sträng används som grupperingsnamn kommer beräkningen att utföras i samband med den aktuella grupperingen. Om GrandTotal-strängen används som gruppnamn, kommer beräkningen att utföras i samband med totalsumman. Annars kommer beräkningen att utföras inom ramen för den överordnade grupperingen med det namnet;
  • Typ av beräkning(Linje). Om denna parameter är inställd på "TotalTotal" kommer uttrycket att beräknas för alla grupperingsposter. Om värdet på parametern är "Gruppering", kommer värdena att beräknas för den aktuella grupperingsgruppposten. Om parametern är inställd på "Icke-resursgruppering" kommer uttrycket att utvärderas för den första gruppposten i den ursprungliga grupperingen vid beräkning av funktionen för en grupppost för resurs. Vid utvärdering av funktionen CalculateExpression med värdet "GroupingNonResource" för gruppposter som inte är grupperade efter resurs, utvärderas funktionen på samma sätt som den skulle utvärderas med värdet för parametern "Gruppering". Layoutbyggaren för datasammansättning, när den genererar en datasammansättningslayout vid utmatning av ett fält - en resurs med vilken gruppering utförs, till layouten, matar ut till layouten ett uttryck som beräknats med hjälp av funktionen CalculateExpression med den angivna parametern "GroupingNon-Resource". För andra resurser grupperade efter resurs returneras normala resursuttryck. Om parametern är inställd på "Hierarki" måste uttrycket utvärderas för den överordnade hierarkiska posten, om det finns en, och för hela grupperingen, om det inte finns någon överordnad hierarkisk post. Layoutbyggaren, när den genererar ett uttryck för % i Hierarchy Group-fältet, genererar ett uttryck som innehåller relationen mellan resursuttrycket och funktionen CalculateExpression för resursuttrycket som beräknas för den aktuella grupperingen med beräkningstypen Hierarki.
  • Start. Indikerar från vilken post fragmentet ska börja, i vilka aggregerade uttrycksfunktioner som ska beräknas och från vilken post som ska erhållas fältvärden utanför aggregerade funktioner. En sträng som innehåller en av:
    • "Först" Det är nödvändigt att erhålla den första grupperingsposten. Efter ordet inom parentes kan du ange ett uttryck, vars resultat kommer att användas som en offset från början av grupperingen. Det resulterande värdet måste vara ett heltal större än noll. Till exempel First(3) – ta emot den tredje posten från början av grupperingen. Om den första posten ligger utanför grupperingen anses det inte finnas några poster. Till exempel, om det finns 3 poster, och du vill få First(4), så anses det att det inte finns några poster.
    • "Sista" Du måste få den sista grupperingsposten. Efter ordet inom parentes kan du ange ett uttryck, vars resultat kommer att användas som en offset från slutet av grupperingen. Det resulterande värdet måste vara ett heltal större än noll. Till exempel Last(3) – tar emot den tredje posten från slutet av gruppen. Om sista rekordet går utöver grupperingen anses det saknas register. Till exempel, om det finns 3 poster, och du vill få Last(4), så anses det att det inte finns några poster.
    • "Tidigare" Du måste hämta den tidigare grupperingsposten. Efter ordet inom parentes kan du ange ett uttryck, vars resultat kommer att användas som en förskjutning från den aktuella grupperingsposten. Till exempel Previous(2) – hämtar föregående från föregående post. Om den föregående posten ligger utanför grupperingen (till exempel kräver den andra grupperingsposten att man hämtar Previous(3)), så erhålls den första grupperingsposten. När den tidigare posten för grupperingssumman tas emot erhålls den första posten.
    • "Nästa" Du måste få nästa grupperingspost. Efter ordet inom parentes kan du ange ett uttryck, vars resultat kommer att användas som en förskjutning framåt från den aktuella grupperingsposten. Till exempel Next(2) – hämta nästa från nästa post. Om nästa post går utöver grupperingen, anses det inte finnas några poster. Till exempel, om det finns 3 poster och den tredje posten tar emot Next, då anses det inte finnas några poster. När nästa post tas emot för grupperingssumman anses det inte finnas någon post.
    • "Nuvarande". Du måste få den aktuella posten. Vid hämtning för en grupperingssumma erhålls den första posten.
    • "BoundaryValue". Behovet av att få en post med det angivna värdet. Efter ordet LimitingValue inom parentes måste du ange uttrycket med värdet som du vill starta fragmentet av, det första ordningsfältet. Den första posten vars beställningsfältvärde är större än eller lika med det angivna värdet kommer att returneras som posten. Till exempel, om fältet Period används som beställningsfält och det har värdena 01/01/2010, 02/01/2010, 03/01/2010 och du vill få LimitingValue(DateTime(2010) , 1, 15)), då erhålls en post med datum 02/01. 2010.
  • Slutet. Indikerar till vilken post fragmentet ska fortsätta, i vilken det aggregerade uttrycket ska beräknas. En sträng som innehåller en av:
    • "Först"
    • "Sista"
    • "Tidigare"
    • "Nästa"
    • "Nuvarande".
    • "BoundaryValue".
  • Sortering. En sträng som listar uttrycken, separerade med kommatecken, i vilken riktning sekvensen ska ordnas. Om det inte anges, utförs beställningen på samma sätt som för den gruppering för vilken uttrycket utvärderas. Efter varje uttryck kan du ange nyckelordet Stigande, för ordning i stigande ordning, Fallande, för ordning i fallande ordning, Autoordning, för ordning av referensfälten efter de fält som du vill sortera objektet som refereras till. Ordet automatisk ordning kan användas med både ordet stigande och fallande.
  • Hierarkisk sortering. Liknar sortering. Används för att organisera hierarkiska poster. Om det inte anges genererar layoutkompositören beställningen enligt den ordning som anges i parametern Sortera.
  • Bearbetar samma beställningsvärden. En sträng som innehåller en av:
    • "Tillsammans" betyder att en sekvens av ordnade poster används för att fastställa föregående och nästa poster;
    • "Separat" betyder att de föregående och nästa posterna bestäms baserat på värdena för ordningsuttrycken;
    Till exempel, om den resulterande sekvensen är ordnad efter datum:
    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
    När du använder bearbetning av identiska värden av ordningen "Separat", kommer den föregående för post 3 att vara post 2, och när du använder "Together" - post 1. Och fragmentet för den aktuella posten för post 2 för "Separat" kommer att vara post 2, och för "Together" - post 2 och 3. Totalt för den aktuella posten för "Separately" blir alltså 20 och för "Together" - 50. När "Together" anges i Start och Slutparametrar, du kan inte ange en offset för positionerna "Första", "Sista", "Föregående", "Nästa". Standardvärdet är "Separat".
Exempel:
Att erhålla förhållandet mellan beloppet för fältet "Sales.AmountTurnover" i en grupperingspost och beloppet för samma fält i hela layouten:
Sum(Sales.SumTurnover) / CalculateExpression("Sum(Sales.SumTurnover)", "Totalt").

Det här exemplet beräknar värdet på den aktuella hierarkin:
Val
När Level() > 0
Sedan EvaluateExpression("Referens", "Hierarki")
Annars Null
Slutet

Anmärkningar:
Funktionen tar hänsyn till urvalet av grupperingar, men tar inte hänsyn till hierarkiska urval. Funktionen kan inte tillämpas på en gruppering i gruppvalet för den grupperingen. När du till exempel väljer nomenklaturgrupperingen kan du inte använda uttrycket CalculateExpression("Sum(SumOmsättning)", "TotalTotal") > 1000 . Men ett sådant uttryck kan användas i hierarkiskt urval. Om slutposten föregår startposten anses det inte finnas några poster för beräkning av detaljerade data och beräkning av aggregatfunktioner. Vid beräkning av intervalluttryck för en totalsumma (parametern Gruppering är satt till "Bruttototal"), antas det att det inte finns några poster för beräkning av detaljerade data och beräkning av aggregerade funktioner. När ett uttryck för CalculateExpression-funktionen genereras, ersätter layoutkompositören, om ordningsuttrycket innehåller fält som inte kan användas i gruppering, funktionen CalculateExpression med NULL.

3. Utvärdera uttryck med gruppmatris (EvalExpression med gruppmatris) - funktionen returnerar en array, vars varje element innehåller resultatet av beräkningen av ett uttryck för gruppering efter det angivna fältet.

Syntax:
CalculateExpressionWithGroupArray (Expression, GroupFieldExpressions, SelectRecords, SelectGroups)

Alternativ :

  • Uttryck(String) - uttrycket som ska utvärderas. Till exempel, "Amount(AmountTurnover)";
  • FieldExpressionsGroups
  • Urval av poster
  • Urval av grupperingar- urval tillämpas på gruppposter. Till exempel: "Amount(AmountTurnover) > &Parameter1".
Exempel:
Maximum(CalculateExpressionWithGroupArray("Amount(AmountOmsättning)", "Motpart"));


När layoutbyggaren genererar uttryck för att visa ett anpassat fält vars uttryck endast innehåller funktionen CalculateArrayWithGroup, genererar utmatningsuttrycket på ett sådant sätt att visningsdata och data ordnas.
Till exempel, för ett anpassat fält med uttrycket:
CalculateExpressionWithGroupArray("Amount(AmountTurnover)", "Motpart")
Layoutbyggaren kommer att generera följande uttryck för utdata:
ConnectRows(Array(Order(CalculateExpressionWithGroupingValueTable("View(Sum(DataSet.AmountTurnover)), Amount(DataSet.AmountTurnover)", "DataSet.Account"), "2")))

4. Beräkna uttryck med GroupValueTable (EvalExpressionWithGroupValueTable) - funktionen returnerar en tabell med värden, vars varje element innehåller resultatet av beräkningen av ett uttryck för gruppering efter det angivna fältet.

Syntax:
CalculateExpressionWithGroupValueTable (Uttryck, GroupField Expressions, Records Selection, Group Selection)

Alternativ :

  • Uttryck(String) - uttrycket som ska utvärderas. En rad kan innehålla flera uttryck separerade med kommatecken. Efter varje uttryck kan det finnas ett valfritt nyckelord AS och namnet på värdetabellkolumnen. Till exempel: "Motpart, Belopp (Belopp Omsättning) Som Försäljningsvolym."
  • FieldExpressionsGroups- uttryck för gruppering av fält, separerade med kommatecken. Till exempel "Motpart, Part";
  • Urval av poster- ett uttryck som tillämpas på detaljposter. Till exempel "Delete Flag = False." Om i denna parameter en aggregerad funktion används, ett fel kommer att uppstå när data komponeras;
  • Urval av grupperingar- urval tillämpas på gruppposter. Till exempel: "Amount(AmountTurnover) > &Parameter1".
Exempel:
Beräkna uttryck med gruppering av värdetabell ("Konto AS Motpart, Belopp (Belopp Omsättning) AS Försäljningsvolym", "Konto")

Resultatet av denna funktion blir en värdetabell med kolumnerna Motpart och Försäljningsvolym, som kommer att innehålla motparter med sina försäljningsvolymer.
Layoutsammansättaren, när den genererar en layout, konverterar funktionsparametrar till termer av datasammansättningslayoutfält. Till exempel kommer fältet Konto att konverteras till DataSet.Account.
Till exempel ett anpassat fält med uttrycket:
CalculateExpressionWithGroupValueTable("Konto, Belopp(AmountOmsättning)", "Konto")
Layoutbyggaren kommer att generera följande uttryck för utdata:
ConnectRows(GetPart(Order(CalculateExpressionWithGroupingValueTable("DataSet.Account, DataSet.AccountRepresentation, Sum(DataSet.AmountTurnover), View(DataSet.AmountTurnover), DataSet.OrderingField", "DataSet".Account"), "3" ), "2, 4"))

5. Nivå - funktionen är utformad för att erhålla den aktuella inspelningsnivån.

Syntax:
Nivå()

Exempel:
Nivå()

6. Sekvensnummer - få nästa serienummer.

Syntax:
NumberByOrder()

Exempel:
NumberByOrder()

7. SequenceNumberInGrouping - returnerar nästa sekvensnummer i den aktuella grupperingen.

Exempel:
NumberByOrderInGroup()

8. Formatera - få en formaterad sträng av det godkända värdet.

Syntax:
Format(Värde, FormatString)

Alternativ :

  • Menande- uttrycket som behöver formateras;
  • FormatString- formatsträngen ställs in i enlighet med formatsträng 1C:Företag.
Exempel:
Format(Invoices.Doc Amount, "NPV=2")

9. BeginOfPeriod

Syntax:
StartPeriod(Datum, PeriodType)

Alternativ :

  • datum(Datum för). Angivet datum;
  • Typ av period
Exempel:
StartPeriod(DatumTime(2002, 10, 12, 10, 15, 34), "Månad")
Resultat: 2002-10-01 0:00:00

10. EndOfPeriod - Funktionen är utformad för att välja ett specifikt datum från ett givet datum.

Syntax:
EndPeriod(Datum, PeriodType)

Alternativ :

  • datum(Datum för). Angivet datum;
  • Typ av period(Linje). Innehåller ett av följande värden: Minute; Timme; Dag; En vecka; Månad; Fjärdedel; År; Årtionde; Halvår.
Exempel:
EndPeriod(DatumTime(2002, 10, 12, 10, 15, 34), "Vecka")
Resultat: 2002-10-13 23:59:59

11. AddKDate (DateAdd) - Funktionen är utformad för att lägga till ett visst värde till datumet.

Syntax:
AddToDate(Uttryck, IncrementType, Magnitude)

Alternativ :

  • Uttryck(Datum för). Originaldatum;
  • TypFörstoring(Linje). Innehåller ett av följande värden: Minute; Timme; Dag; En vecka; Månad; Fjärdedel; År; Årtionde; Halvår.
  • Magnitud(Siffra). Med hur mycket datumet behöver ökas ignoreras bråkdelen.
Exempel:
AddToDate(DatumTime(2002, 10, 12, 10, 15, 34), "Månad", 1)
Resultat: 2002-11-12 10:15:34

12. DateDifference - Funktionen är designad för att få skillnaden mellan två datum.

Syntax:
DifferenceDate(Expression1, Expression2, DifferenceType)

Alternativ :

  • Uttryck 1(Datum för). Subtraherat datum;
  • Uttryck 2(Datum för). Originaldatum;
  • TypDifference(Linje). Innehåller ett av värdena: Second; Minut; Timme; Dag; Månad; Fjärdedel; År.
Exempel:
DATEDIFFERENCE(DATETIME(2002; 10; 12; 10; 15; 34),
DATETIME(2002, 10, 14, 9, 18, 06), "DAG")
Resultat: 2

13. Delsträng - denna funktionär avsett att extrahera en delsträng från en sträng.

Syntax:
Delsträng (sträng, position, längd)

Alternativ :

  • Linje(Linje). Strängen från vilken delsträngen extraheras;
  • Placera(Siffra). Positionen för tecknet från vilken delsträngen som ska extraheras från strängen börjar;
  • Längd(Siffra). Längden på den tilldelade delsträngen.
Exempel:
SUBSTRING(Konton.Adress, 1, 4)

14. StringLength - Funktionen är utformad för att bestämma längden på en sträng.

Syntax:
StringLength(String)

Parameter:

  • Linje(Linje). En sträng vars längd bestäms.
Exempel:
Rad(motparter.adress)

15. År- den här funktionen är utformad för att extrahera året från ett datumtypvärde.

Syntax:
År (datum)

Parameter:

  • datum(Datum för). Det datum då året bestäms.
Exempel:
ÅR(Utgift.Datum)

16. Kvartal - den här funktionen är utformad för att extrahera kvartalsnumret från ett datumtypvärde. Kvartalsnumret varierar normalt från 1 till 4.

Syntax:
Kvartal (datum)

Parameter:

  • datum(Datum för). Det datum då kvartalet bestäms
Exempel:
KVARTAL(Utgift.Datum)

17. Månad - den här funktionen är utformad för att extrahera månadsnumret från ett datumtypvärde. Månadsnumret varierar normalt från 1 till 12.

Syntax:
Månad (datum)

Parameter:

  • datum(Datum för). Det datum då månaden bestäms.
Exempel:
MONTH(Utgift.Datum)

18. Årets dag (DayOfYear) - den här funktionen är utformad för att hämta dagen på året från ett datumtypvärde. Årets dag varierar normalt från 1 till 365 (366).

Syntax:
Årets dag (datum)

Parameter:

  • datum(Datum för). Det datum då dagen på året bestäms.
Exempel:
DAGÅR(ExpenseAccount.Date)

19. Dag- denna funktion är utformad för att erhålla dagen i månaden från ett datumtypvärde. Dagen i månaden varierar normalt från 1 till 31.

Syntax:
Dag datum)

Parameter:

  • datum(Datum för). Det datum då dagen i månaden bestäms.
Exempel:
DAG(Utgift.Datum)

20. Vecka - den här funktionen är utformad för att erhålla årets veckonummer från ett datumtypvärde. Årets veckor räknas från 1.

Syntax:
Vecka (datum)

Parameter:

  • datum(Datum för). Det datum då veckonummer fastställs.
Exempel:
VECKA(Utgift.Datum)

21. Veckodag - den här funktionen är utformad för att hämta veckodagen från ett datumtypvärde. Den normala veckodagen sträcker sig från 1 (måndag) till 7 (söndag).

Syntax:
Veckodag (datum)

Parameter:

  • datum(Datum för). Det datum då veckodagen bestäms.
Exempel:
VECKODAG (Utgift.Datum)

22. Timme- den här funktionen är utformad för att erhålla timmen på dygnet från ett datumtypvärde. Klockan på dygnet varierar från 0 till 23.

Syntax:
timme (datum)

Parameter:

  • datum(Datum för). Det datum då dygnets timme bestäms.
Exempel:
HOUR(Utgift.Datum)

23. Minut - denna funktion är utformad för att erhålla timmens minut från ett datumtypvärde. Timmens minut varierar från 0 till 59.

Syntax:
Minute (datum)

Parameter:

  • datum(Datum för). Det datum då timmens minut bestäms.
Exempel:
MINUTE(Utgift.Datum)

24. För det andra - den här funktionen är utformad för att erhålla sekunden i en minut från ett datumtypvärde. Den andra i en minut sträcker sig från 0 till 59.

Syntax:
Andra (datum)

Parameter:

  • datum(Datum för). Det datum då sekunderna i minuten bestäms.
Exempel:
SEKUND(Utgift.Datum)

25. Cast - den här funktionen är utformad för att extrahera en typ från ett uttryck som kan innehålla en sammansatt typ. Om uttrycket innehåller en annan typ än den önskade typen, kommer NULL att returneras.

Syntax:
Express(Expression, TypeIndication)

Alternativ :

  • Uttryck- uttryck som ska konverteras;
  • Typindikation(Linje). Innehåller en typsträng. Till exempel "Nummer", "Sträng" osv. Förutom primitiva typer given rad kan innehålla tabellnamnet. I detta fall kommer ett försök att göras att uttrycka en hänvisning till den angivna tabellen.
Exempel:
Express(Data.Props1, "Number(10,3)")

26. IsNull (IsNull) - denna funktion returnerar värdet för den andra parametern om värdet för den första parametern är NULL. Annars kommer värdet på den första parametern att returneras.

Syntax:
IsNull(Uttryck1, Uttryck2)

Alternativ :

  • Uttryck 1- värde som ska kontrolleras;
  • Uttryck 2- returnera värde om Expression1 är NULL.
Exempel:
JaNULL(Belopp(Försäljning.Belopp Omsättning), 0)

27.ACos- beräknar bågcosinus i radianer.

Syntax:
ACos (uttryck)

Parameter:

  • Uttryck(Siffra). Cosinusvärdet (i intervallet -1 ... 1) med vilket vinkeln bestäms.
28.ASin- beräknar bågen i radianer.

Syntax:
ASin (uttryck)

Parameter:

  • Uttryck(Siffra). Sinusvärdet (i området -1 ... 1) som vinkeln bestäms av.
29. ATan- beräknar arctangensen i radianer.

Syntax:
ATan(Uttryck)

Parameter:

  • Uttryck(Siffra). Tangentvärdet med vilket vinkeln bestäms.
30.Cos- beräknar cosinus.

Syntax:
Cos (uttryck)

Parameter:

  • Uttryck
31. Exp- höja siffran e till en potens.

Syntax:
Exp(Expression)

Parameter:

  • Uttryck(Siffra). Gradens betydelse.
32. Logga- beräknar den naturliga logaritmen.

Syntax:
Logg (uttryck)

Parameter:

  • Uttryck
33. Logg10- beräknar logaritmen för X till bas 10.

Syntax:
Log10(Uttryck)

Parameter:

  • Uttryck(Siffra). Det ursprungliga talet är större än 0.
34. Pow- exponentiering.

Syntax:
Pow (bas, indikator)

Alternativ :

  • Bas(Siffra). Grunden för exponentieringens funktion.
  • Index(Siffra). Exponent.
35. Synd- beräknar sinus.

Syntax:
Sin (uttryck)

Parameter:

  • Uttryck(Siffra). Anges i radianer.
36. Sqrt- beräknar kvadratroten.

Syntax:
Sqrt(Uttryck)

Parameter:

  • Uttryck(Siffra). Icke-negativt tal.
37. Tan- beräknar tangenten.

Syntax:
Tan (uttryck)

Parameter:

  • Uttryck(Siffra). Sinusvärdet med vilket vinkeln bestäms.
38. Rund- avrundar det ursprungliga numret till önskat bitdjup. Avrundningsläget är standard (1,5 som 2).

Syntax:
Env(Uttryck, Bitdjup)

Alternativ :

  • Uttryck(Siffra). Originalnummer;
  • Lite djup(Siffra). Antalet decimaler att avrunda till.
39. Int- skär av bråkdelen av ett tal.

Syntax:
Objekt (uttryck)

Parameter:

  • Uttryck(Siffra). Ett bråktal.
40. Funktioner för gemensamma moduler

Ett datasammansättningsmotoruttryck kan innehålla anrop till funktioner för globala gemensamma konfigurationsmoduler. Ingen ytterligare syntax krävs för att anropa sådana funktioner.

Exempel:
AbbreviatedName(Documents.Link, Documents.Date, Documents.Number)

I det här exemplet kommer funktionen "AbbreviatedName" att anropas från den allmänna konfigurationsmodulen.
Observera att användningen av gemensamma modulfunktioner endast är tillåten om lämplig datasammansättningsprocessorparameter är specificerad.
Dessutom kan funktioner för vanliga moduler inte användas i anpassade fältuttryck.

41. Harm - denna funktion returnerar en strängrepresentation av det godkända värdet av en icke-primitiv typ. För värden av en primitiv typ, returnerar själva värdet.

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

Exempel:
Presentation (motpart)

42. Sträng - den här funktionen omvandlar det skickade värdet till en sträng.

Om en array eller en värdetabell används som en parameter, returnerar funktionen en sträng som innehåller en strängrepresentation av alla element i arrayen, åtskilda av tecknen "; ". Om något element har en tom strängrepresentation, då strängen "<Пустое значение>".

Exempel:
Rad (försäljningsdatum)

43. ValueIsFilled

För NULL-värden returnerar Undefined alltid False.
För booleska värden returnerar den alltid True.
För andra typer, returnerar True om värdet skiljer sig från standardvärdet för den givna typen.

Exempel:
ValueFilled(Leveransdatum)

44. LevelInGroup - den här funktionen hämtar den aktuella inspelningsnivån i förhållande till grupperingen.

Kan användas för att erhålla kapslingsnivån för en post i en hierarkisk gruppering.

Exempel:
LevelInGroup()

45. ValueType

Syntax:
ValueType(Expression)

Parameter:

  • Uttryck(Linje). Strängvärdestyp.
Returnerar ett värde av typen Type som innehåller värdetypen för funktionsparametern.

Korrekt användning av ett datakompositionsschema (DCS) låter dig:

Men inte alla utvecklare får ut det mesta av schemats möjligheter, eftersom inte alla dess inställningar är uppenbara och intuitiva. I synnerhet vet många att det i 1C SKD finns beräknade fält, men de förstår inte helt omfattningen av deras användning och metoder för att arbeta med dem.

Vad är ett beräknat fält

I de flesta fall är datakällan i layoutdiagrammet en fråga. I princip kan du redan inom själva frågan använda olika formler, konstruktioner och uttryck. En naturlig fråga uppstår: varför behöver vi dubbla funktioner?

Faktum är att åtkomstkontrollsystemet är något mer än att bara visa resultatet av en fråga, och detta framgår tydligt av formuläret för att skapa diagram (fig. 1).

Beräknade fält låter dig utföra vissa åtgärder med den genererade datamängden:

  • Mata ut en uppsättning data som tas emot av en begäran till en specifik cell, kombinera flera rader till en;
  • Få tillgång till exportfunktionerna för den allmänna modulen;
  • Kör de olika uttryck som finns tillgängliga för layoutspråket och använd de speciella EvaluateExpression-funktionerna.

Låt oss gå igenom den här listan.

Matris av värden i en cell

Låt oss simulera en situation där det är nödvändigt att ta emot alla kvittodokumentnummer för en motpart i en separat cell:


Därför har vi skapat ytterligare ett beräkningsfält i vårt schema;


Som du kan se från exemplet ovan finns det inga svårigheter att lägga till och bearbeta beräknade fält. Vi använde två funktioner: Array() och ConnectRows().

Några ord om det senare. Förutom den första parametern som indikerar arrayens identifierare, värden eller värde, kan ytterligare två ställas in i den:

  1. Element Separator - indikerar vilket tecken som kommer att separera ett arrayelement eller en rad i en värdetabell från en annan (i vårt fall utelämnade vi denna parameter och en radbrytning tilldelades som standard);
  2. Kolumnseparator – ett tecken som används för att separera kolumner i en värdetabell (semikolon används som standard).

Åtkomst till exportfunktionerna för en gemensam modul

Funktioner i en gemensam modul kan fungera som en datakälla för att fylla i ett beräknat fält.

Några viktiga punkter:

  • Funktionen måste kunna exporteras;
  • Om en funktion finns i en gemensam modul med attributet "Global" anropas den direkt med namn, annars måste funktionen anropas enligt schemat "Delat modulnamn". "Namn på funktionen som ska anropas."

Som exempel på användning kommer vi att ta samma begäran om kvittodokument och visa den i en separat kolumn. Vi kommer inte att beskriva själva begäran; låt oss gå direkt till de beräknade fälten:


Således ser vi att nästan vilken dataprocessor som helst kan initieras från åtkomstkontrollsystemet, vilket avsevärt utökar möjligheterna att använda schemat.

Layout språkuttryck

Ganska ofta i en utvecklares arbete uppstår en situation när det är nödvändigt att visa resultatet av divisionen i ACS-fältet:

  1. Beräkna den genomsnittliga kostnaden för objektet;
  2. Alla typer av intresse;
  3. Beräkningar av medelinkomster m.m.

För att undvika problem är det i dessa fall lämpligt att ange ett test för division med 0 i det beräknade fältet.

Detta kan göras med hjälp av konstruktionen "Välj när .... Sedan ... Annars ... Slut".

Till sist några ord om nog ny funktion CalculateExpression(). Med dess hjälp, i synnerhet, kan du beräkna avvikelser i kostnad mellan nuvarande och tidigare rader, kumulativ balans, etc.

Låt oss säga att du kan få dokumentbeloppet från föregående rad i vår begäran genom att ange värdet Beräkna uttryck ("Dokumentbelopp", "Tidigare belopp") i fältet "Uttryck".

God dag kära läsare av vår blogg! Idag vill jag berätta för dig, med hjälp av ett verkligt exempel, hur
använd ACS-funktionerna Array och JoinStrings. I en artikel om

det stod lite om hur man arbetar med
på bokmärket
, har också redan förklarats som
med hjälp av fliken "Resurser". Idag ska vi återigen uppmärksamma dessa
bokmärken i ljuset av vårt ämne.

Utseende på en exempel 1C-rapport med två ACS-funktioner Array Och ConnectRows Nästa:

Redogörelse för problemet med att använda ACS-funktionerna Array och JoinStrings

Uppgift: Du måste infoga alla försäljningsnummer för en produkt i en cell.

Något som: nomenklatur | kvantitet | 001, 002 osv. |

Vi kommer att använda en begäran till ackumuleringsregistret "Realization of TMZ".

VÄLJA
Implementering av TMZ. Registrator. Siffra,
Implementering av TMZ. Nomenklatur,
Implementering av TMZ. Registrator,
Implementering av TMZ. Kvantitet Omsättning
FRÅN
Ackumuleringsregister. Implementering av TMZ. Revolutioner
(, , Registrar, ) HUR MAN implementerar TMZ

Ackumuleringsregistret "Realization of TMZ" finns både i Accounting-konfigurationen och i Trade Enterprise Management (UTP)-konfigurationen. Ta reda på hur du konfigurerar USP i katalogelementet "Nomenklatur". Därför kan du efter nedladdning köra den här rapporten i båda konfigurationerna för att kontrollera dess funktionalitet.

Implementering av uppgiften med funktionerna SKD Array och ConnectRows


Samma steg, men med några tillägg, användes för att skapa
.

Beskrivning av funktionen JoinStrings

JoinStrings

Används för att sammanfoga strängar till en sträng.

Syntax:

ConnectRows(Value, ItemSeparator, ColumnSeparator)

Alternativ:

  1. Menande— uttryck som behöver kombineras till en rad.
    Om det är en array kommer elementen i arrayen att kombineras till en sträng.
    Om det är en värdetabell kommer alla kolumner och rader i tabellen att kombineras till en rad;
  2. Elementseparator- en sträng som innehåller texten som ska användas som
    separator mellan matriselement och värdetabellsrader. Standard – radmatningstecken;
  3. Kolumnavskiljare-en sträng som innehåller texten som ska användas som avgränsare
    mellan kolumnerna i värdetabellen. Standard ";".