Ausdruckssprache des Datenkompositionssystems (1Cv8). Funktionen der Ausdruckssprache des Datenkompositionssystems Berechnetes Feld in SKD 1s 8.3

Im Hinblick auf die bevorstehende Veröffentlichung von 8.2.14 werde ich versuchen, einige neue Funktionen des Datenkompositionssystems zu beschreiben.

Öffnen Sie das Datenlayoutdiagramm, vorzugsweise in einem externen Bericht, um die Bearbeitung zu erleichtern.

Wir fügen einen Datensatz des Abfragetyps hinzu und schreiben entweder manuell oder mit dem Abfrage-Designer eine einfache Abfrage:

1. Richten Sie eine Anfrage im Zutrittskontrollsystem ein.

2. Richten Sie berechnete Felder im Zutrittskontrollsystem ein

3. Konfigurieren Sie das Datenlayout auf der Registerkarte „Einstellungen“.

4. Starten Sie 1C Enterprise 8.2.14. Öffnen Sie den Bericht. Wir formen, wir empfangen.

Beschreibung der neuen Funktionen selbst:

1. Das aktuelle Datum()

Gibt das Systemdatum zurück. Beim Erstellen eines Layout-Layouts wird in allen im Layout vorhandenen Ausdrücken die Funktion CurrentDate() durch den Wert des aktuellen Datums ersetzt.

2. COMPUTEEXPRESSION()

Syntax:

CalculateExpression(,)

Beschreibung:

Die Funktion dient dazu, einen Ausdruck im Kontext einer Gruppierung auszuwerten.

Die Funktion berücksichtigt die Auswahl von Gruppierungen, berücksichtigt jedoch keine hierarchischen Auswahlen.

Die Funktion kann nicht auf eine Gruppierung in der Gruppenauswahl dieser Gruppierung angewendet werden. Beispielsweise können Sie bei der Auswahl der Nomenklaturgruppierung den Ausdruck nicht verwenden CalculateExpression("Sum(SumTurnover)", "TotalTotal") > 1000. Ein solcher Ausdruck kann jedoch bei der hierarchischen Auswahl verwendet werden.

Wenn der Enddatensatz vor dem Startdatensatz liegt, wird davon ausgegangen, dass keine Datensätze zur Berechnung detaillierter Daten und zur Berechnung von Aggregatfunktionen vorhanden sind.

Bei der Berechnung von Intervallausdrücken für eine Gesamtsumme (der Gruppierungsparameter ist auf „GrandTotal“ festgelegt) wird davon ausgegangen, dass keine Datensätze zur Berechnung detaillierter Daten und zur Berechnung von Aggregatfunktionen vorhanden sind.

Layout-Linker beim Generieren eines Funktionsausdrucks Ausdruck berechnen, wenn der Sortierausdruck Felder enthält, die nicht in der Gruppierung verwendet werden können, ersetzt die Funktion Ausdruck berechnen An NULL.

Optionen

Typ: Linie. Der auszuwertende Ausdruck.

Typ: Linie. Enthält den Namen der Gruppierung, in deren Kontext der Ausdruck ausgewertet werden soll. Wenn als Gruppierungsname eine leere Zeichenfolge verwendet wird, wird die Berechnung im Kontext der aktuellen Gruppierung durchgeführt. Wenn der GeneralTotal-String als Gruppenname verwendet wird, wird die Berechnung im Kontext der Gesamtsumme durchgeführt. Andernfalls wird die Berechnung im Kontext der gleichnamigen übergeordneten Gruppe durchgeführt.

Zum Beispiel:

Sum(Sales.SumTurnover)/Calculate("Sum(Sales.SumTurnover)", "Total")

In diesem Beispiel ist das Ergebnis das Verhältnis der Summe pro Feld Sales.AmountTurnover Gruppieren von Datensätzen zur Summe desselben Felds im gesamten Layout;

Typ: Linie. Der Parameter kann folgende Werte annehmen:

· Gesamtsumme– Der Ausdruck wird für alle Gruppierungsdatensätze berechnet.

· Hierarchie– Der Ausdruck wird für den übergeordneten hierarchischen Datensatz ausgewertet, falls vorhanden, und für die gesamte Gruppierung, wenn kein übergeordneter hierarchischer Datensatz vorhanden ist.

· Gruppierung– Der Ausdruck wird für den aktuellen Gruppengruppierungsdatensatz ausgewertet.

· GroupingNonResource— Bei der Berechnung einer Funktion für einen Gruppendatensatz nach Ressourcen wird der Ausdruck für den ersten Gruppendatensatz der ursprünglichen Gruppierung berechnet.

Bei der Berechnung einer Funktion CalculateExpression() mit Bedeutung GroupingNonResource Für Gruppendatensätze, die nicht nach Ressourcen gruppiert sind, wird die Funktion auf die gleiche Weise berechnet, wie sie berechnet würde, wenn der Parameterwert gleich dem Wert wäre Gruppierung.

Der Datenzusammensetzungslayout-Generator platziert beim Generieren eines Datenzusammensetzungslayouts und bei der Ausgabe des Ressourcenfelds, nach dem die Gruppierung im Layout durchgeführt wird, einen Ausdruck im Layout, der mithilfe der Funktion berechnet wird CalculateExpression() , Angabe des Parameters GroupingNonResource. Für andere Ressourcen werden die üblichen Ressourcenausdrücke in der Ressourcengruppierung platziert.

Typ: Linie. Gibt an, ab welchem ​​Datensatz das Fragment beginnen soll, in welchen Aggregatausdrucksfunktionen berechnet werden soll und aus welchem ​​Datensatz Feldwerte außerhalb der Aggregatfunktionen abgerufen werden sollen. Der Wert kann einer der folgenden sein:

· Erste

· Letzter (letzter)

· Vorherige

· Weiter (Weiter)

· Aktuell

· Begrenzungswert(Grenzwert) Begrenzungswert

Typ: Linie. Gibt an, bis zu welchem ​​Datensatz das Fragment fortgesetzt werden soll, in dem die Aggregatfunktionen des Ausdrucks berechnet werden sollen. Der Wert kann einer der folgenden sein:

· Erste. Es ist erforderlich, den ersten Gruppierungsdatensatz abzurufen. Nach dem Wort in Klammern können Sie einen Ausdruck angeben, dessen Ergebnis als Offset vom Beginn der Gruppierung verwendet wird. Der resultierende Wert muss eine ganze Zahl größer als Null sein. Beispiel: First(3) – Empfang des dritten Datensatzes vom Anfang der Gruppierung.

Wenn der erste Datensatz außerhalb der Gruppierung liegt, wird davon ausgegangen, dass keine Datensätze vorhanden sind. Wenn beispielsweise drei Datensätze vorhanden sind und Sie First(4) erhalten möchten, wird davon ausgegangen, dass keine Datensätze vorhanden sind.

· Letzter (letzter). Sie müssen den letzten Gruppierungsdatensatz abrufen. Nach dem Wort in Klammern können Sie einen Ausdruck angeben, dessen Ergebnis als Offset vom Ende der Gruppierung verwendet wird. Der resultierende Wert muss eine ganze Zahl größer als Null sein. Beispiel: Last(3) – Empfang des dritten Datensatzes vom Ende der Gruppe.

Wenn der letzte Datensatz außerhalb der Gruppierung liegt, wird davon ausgegangen, dass keine Datensätze vorhanden sind. Wenn beispielsweise drei Datensätze vorhanden sind und Sie Last(4) abrufen möchten, wird davon ausgegangen, dass keine Datensätze vorhanden sind.

· Vorherige. Sie müssen den vorherigen Gruppierungsdatensatz abrufen. Nach dem Wort in Klammern können Sie einen Ausdruck angeben, dessen Ergebnis als Offset zurück zum aktuellen Gruppierungsdatensatz verwendet wird. Beispiel: Previous(2) – Vorheriges aus dem vorherigen Datensatz abrufen.

Wenn der vorherige Datensatz über die Gruppierung hinausgeht (z. B. müssen Sie für den zweiten Gruppierungsdatensatz Previous(3) abrufen), wird der erste Gruppierungsdatensatz abgerufen.

Beim Abrufen des vorherigen Datensatzes für eine Gruppierungssumme wird davon ausgegangen, dass der erste Datensatz abgerufen wird.

· Weiter (Weiter). Sie müssen den nächsten Gruppierungsdatensatz abrufen. Nach dem Wort in Klammern können Sie einen Ausdruck angeben, dessen Ergebnis als Offset vom aktuellen Gruppierungseintrag nach vorne verwendet wird. Beispiel: Next(2) – Nächstes vom nächsten Datensatz abrufen.

Wenn der nächste Datensatz über die Gruppierung hinausgeht, wird davon ausgegangen, dass keine Datensätze vorhanden sind. Wenn beispielsweise drei Einträge vorhanden sind und der dritte Eintrag Next() empfängt, wird davon ausgegangen, dass keine Einträge vorhanden sind.

Wenn der nächste Datensatz für die Gruppierungssumme empfangen wird, wird davon ausgegangen, dass kein Datensatz vorhanden ist.

· Aktuell. Sie müssen den aktuellen Datensatz abrufen.

Beim Abrufen einer Gruppierungssumme wird der erste Datensatz abgerufen.

· Begrenzungswert(Grenzwert). Die Notwendigkeit, einen Datensatz mit dem angegebenen Wert zu erhalten. Nach dem Wort Begrenzungswert In Klammern müssen Sie den Ausdruck angeben, mit dessen Wert Sie das Fragment beginnen möchten, das erste Bestellfeld.

Als Datensatz wird der erste Datensatz zurückgegeben, dessen Bestellfeldwert größer oder gleich dem angegebenen Wert ist. Wenn beispielsweise das Feld „Periode“ als Bestellfeld verwendet wird und es die Werte 01.01.2010, 01.02.2010, 01.03.2010 hat und Sie erhalten möchten LimitingValue(DateTime(2010, 1, 15)), dann wird ein Datensatz mit dem Datum 01.02.2010 empfangen.

Typ: Linie. Listet durch Kommas getrennte Ausdrücke auf, die die Sortierregeln beschreiben. Wenn nicht angegeben, erfolgt die Sortierung auf die gleiche Weise wie für die Gruppierung, für die der Ausdruck ausgewertet wird. Nach jedem Ausdruck können Sie ein Schlüsselwort angeben Alter(für die Bestellung in aufsteigender Reihenfolge), Absteigend(für die Bestellung in absteigender Reihenfolge) und Automatische Bestellung(um Referenzfelder nach den Feldern zu ordnen, nach denen Sie das referenzierte Objekt ordnen möchten). Wort Automatische Bestellung kann wie mit dem Wort verwendet werden Alter, also mit dem Wort Absteigend.

Typ: Linie. Identisch mit Parameter Sortierung. Wird zum Organisieren hierarchischer Datensätze verwendet. Wenn nicht angegeben, generiert der Layout-Builder die Reihenfolge entsprechend der im Parameter angegebenen Reihenfolge Sortierung.

Typ: Linie. Gibt die Regel zur Bestimmung des vorherigen oder nächsten Datensatzes an, falls mehrere Datensätze mit demselben Bestellwert vorhanden sind:

· Separat gibt an, dass eine Folge geordneter Datensätze verwendet wird, um die vorherigen und nächsten Datensätze zu bestimmen. Standardwert.

· Zusammen gibt an, dass der vorherige und der nächste Datensatz basierend auf den Werten der Sortierausdrücke bestimmt werden.

Wenn die resultierende Sequenz beispielsweise nach Datum sortiert ist:

Datum Vollständiger Name Bedeutung
1 1. Januar 2001

Ivanov M.

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

Separat, Das:

§ Der vorherige Eintrag zu Eintrag 3 wird Eintrag 2 sein.

Aktuell, aktuell(entsprechend Parameter Start Und Ende), dann besteht dieses Fragment für Datensatz 2 aus einem Datensatz 2. Der Ausdruck ist gleich 20.

Wenn der Parameterwert ist Zusammen, Das:

§ Der vorherige Eintrag zu Eintrag 3 wird Eintrag 1 sein.

§ wenn das Berechnungsfragment definiert ist als Aktuell, aktuell(entsprechend Parameter Start Und Ende), dann besteht dieses Fragment für Datensatz 2 aus den Datensätzen 2 und 3. Ausdruck CalculateExpression("Sum(Value)", Current, Current) wird gleich 50 sein.

Bei Angabe eines Parameterwerts gleich Zusammen, in Parametern Start Und Ende Sie können keinen Offset für Positionen angeben Zuerst, Letzter, Vorheriger, Nächster.

CalculateExpression("Sum(SumTurnover)", "First", "Current")

Wenn Sie den Gruppierungswert in der vorherigen Zeile erhalten möchten, können Sie den folgenden Ausdruck verwenden:

CalculateExpression("Rate", "Previous")

Aufführen neu Funktionen:

CalculateExpressionWithGroupArray(,) -

Die Funktion gibt ein Array zurück, dessen jedes Element das Ergebnis der Auswertung eines Ausdrucks zur Gruppierung nach dem angegebenen Feld enthält.

CalculateExpressionWithGroupValueTable(,) -

Die Funktion gibt eine Wertetabelle zurück, in der jede Zeile das Ergebnis der Auswertung von Ausdrücken zur Gruppierung nach dem angegebenen Feld enthält

ValueFilled() – Gibt „True“ zurück, wenn der Wert ein anderer als der Standardwert dieses Typs, ein anderer als NULL, ein anderer als ein leerer Verweis oder ein anderer als Undefiniert ist. Boolesche Werte werden auf NULL-Werte überprüft. Zeichenfolgen werden auf das Fehlen von Nicht-Leerzeichen überprüft

Format(, ) – Erhalten Sie eine formatierte Zeichenfolge des übergebenen Werts. Der Formatstring wird entsprechend dem Formatstring des 1C:Enterprise-Systems eingestellt.

Teilzeichenfolge(, , ) – Diese Funktion dient zum Extrahieren eines Teilstrings aus einem String.

Linienlänge() – Die Funktion soll die Länge einer Zeichenfolge bestimmen. Parameter ist ein Zeichenfolgenausdruck

Linie() – Wenn ein Array als Parameter übergeben wird, gibt die Funktion eine Zeichenfolge zurück, die Zeichenfolgendarstellungen aller Array-Elemente enthält, getrennt durch „;“-Zeichen. Wenn eine Wertetabelle als Parameter übergeben wird, gibt die Funktion eine Zeichenfolge zurück, die Zeichenfolgendarstellungen aller Zeilen der Wertetabelle enthält, wobei die Zelldarstellungen jeder Zeile durch „;“-Zeichen und die Zeilen durch einen Zeilenumbruch getrennt sind Charakter. Wenn die Zeichenfolgendarstellung eines Elements leer ist, wird anstelle seiner Darstellung eine Zeichenfolge angezeigt.

Im Hinblick auf die bevorstehende Veröffentlichung von 8.2.14 werde ich versuchen, einige neue Funktionen des Datenkompositionssystems zu beschreiben.

Öffnen Sie das Datenlayoutdiagramm, vorzugsweise in einem externen Bericht, um die Bearbeitung zu erleichtern.

Wir fügen einen Datensatz des Abfragetyps hinzu und schreiben entweder manuell oder mit dem Abfrage-Designer eine einfache Abfrage:

1. Richten Sie eine Anfrage im Zutrittskontrollsystem ein.

2. Richten Sie berechnete Felder im Zutrittskontrollsystem ein

3. Konfigurieren Sie das Datenlayout auf der Registerkarte „Einstellungen“.

4. Starten Sie 1C Enterprise 8.2.14. Öffnen Sie den Bericht. Wir formen, wir empfangen.

Beschreibung der neuen Funktionen selbst:

1. Das aktuelle Datum()

Gibt das Systemdatum zurück. Beim Erstellen eines Layout-Layouts wird in allen im Layout vorhandenen Ausdrücken die Funktion CurrentDate() durch den Wert des aktuellen Datums ersetzt.

2. COMPUTEEXPRESSION()

Syntax:

CalculateExpression(,)

Beschreibung:

Die Funktion dient dazu, einen Ausdruck im Kontext einer Gruppierung auszuwerten.

Die Funktion berücksichtigt die Auswahl von Gruppierungen, berücksichtigt jedoch keine hierarchischen Auswahlen.

Die Funktion kann nicht auf eine Gruppierung in der Gruppenauswahl dieser Gruppierung angewendet werden. Beispielsweise können Sie bei der Auswahl der Nomenklaturgruppierung den Ausdruck nicht verwenden CalculateExpression("Sum(SumTurnover)", "TotalTotal") > 1000. Ein solcher Ausdruck kann jedoch bei der hierarchischen Auswahl verwendet werden.

Wenn der Enddatensatz vor dem Startdatensatz liegt, wird davon ausgegangen, dass keine Datensätze zur Berechnung detaillierter Daten und zur Berechnung von Aggregatfunktionen vorhanden sind.

Bei der Berechnung von Intervallausdrücken für eine Gesamtsumme (der Gruppierungsparameter ist auf „GrandTotal“ festgelegt) wird davon ausgegangen, dass keine Datensätze zur Berechnung detaillierter Daten und zur Berechnung von Aggregatfunktionen vorhanden sind.

Layout-Linker beim Generieren eines Funktionsausdrucks Ausdruck berechnen, wenn der Sortierausdruck Felder enthält, die nicht in der Gruppierung verwendet werden können, ersetzt die Funktion Ausdruck berechnen An NULL.

Optionen

Typ: Linie. Der auszuwertende Ausdruck.

Typ: Linie. Enthält den Namen der Gruppierung, in deren Kontext der Ausdruck ausgewertet werden soll. Wenn als Gruppierungsname eine leere Zeichenfolge verwendet wird, wird die Berechnung im Kontext der aktuellen Gruppierung durchgeführt. Wenn der GeneralTotal-String als Gruppenname verwendet wird, wird die Berechnung im Kontext der Gesamtsumme durchgeführt. Andernfalls wird die Berechnung im Kontext der gleichnamigen übergeordneten Gruppe durchgeführt.

Zum Beispiel:

Sum(Sales.SumTurnover)/Calculate("Sum(Sales.SumTurnover)", "Total")

In diesem Beispiel ist das Ergebnis das Verhältnis der Summe pro Feld Sales.AmountTurnover Gruppieren von Datensätzen zur Summe desselben Felds im gesamten Layout;

Typ: Linie. Der Parameter kann folgende Werte annehmen:

· Gesamtsumme– Der Ausdruck wird für alle Gruppierungsdatensätze berechnet.

· Hierarchie– Der Ausdruck wird für den übergeordneten hierarchischen Datensatz ausgewertet, falls vorhanden, und für die gesamte Gruppierung, wenn kein übergeordneter hierarchischer Datensatz vorhanden ist.

· Gruppierung– Der Ausdruck wird für den aktuellen Gruppengruppierungsdatensatz ausgewertet.

· GroupingNonResource— Bei der Berechnung einer Funktion für einen Gruppendatensatz nach Ressourcen wird der Ausdruck für den ersten Gruppendatensatz der ursprünglichen Gruppierung berechnet.

Bei der Berechnung einer Funktion CalculateExpression() mit Bedeutung GroupingNonResource Für Gruppendatensätze, die nicht nach Ressourcen gruppiert sind, wird die Funktion auf die gleiche Weise berechnet, wie sie berechnet würde, wenn der Parameterwert gleich dem Wert wäre Gruppierung.

Der Datenzusammensetzungslayout-Generator platziert beim Generieren eines Datenzusammensetzungslayouts und bei der Ausgabe des Ressourcenfelds, nach dem die Gruppierung im Layout durchgeführt wird, einen Ausdruck im Layout, der mithilfe der Funktion berechnet wird CalculateExpression() , Angabe des Parameters GroupingNonResource. Für andere Ressourcen werden die üblichen Ressourcenausdrücke in der Ressourcengruppierung platziert.

Typ: Linie. Gibt an, ab welchem ​​Datensatz das Fragment beginnen soll, in welchen Aggregatausdrucksfunktionen berechnet werden soll und aus welchem ​​Datensatz Feldwerte außerhalb der Aggregatfunktionen abgerufen werden sollen. Der Wert kann einer der folgenden sein:

· Erste

· Letzter (letzter)

· Vorherige

· Weiter (Weiter)

· Aktuell

· Begrenzungswert(Grenzwert) Begrenzungswert

Typ: Linie. Gibt an, bis zu welchem ​​Datensatz das Fragment fortgesetzt werden soll, in dem die Aggregatfunktionen des Ausdrucks berechnet werden sollen. Der Wert kann einer der folgenden sein:

· Erste. Es ist erforderlich, den ersten Gruppierungsdatensatz abzurufen. Nach dem Wort in Klammern können Sie einen Ausdruck angeben, dessen Ergebnis als Offset vom Beginn der Gruppierung verwendet wird. Der resultierende Wert muss eine ganze Zahl größer als Null sein. Beispiel: First(3) – Empfang des dritten Datensatzes vom Anfang der Gruppierung.

Wenn der erste Datensatz außerhalb der Gruppierung liegt, wird davon ausgegangen, dass keine Datensätze vorhanden sind. Wenn beispielsweise drei Datensätze vorhanden sind und Sie First(4) erhalten möchten, wird davon ausgegangen, dass keine Datensätze vorhanden sind.

· Letzter (letzter). Sie müssen den letzten Gruppierungsdatensatz abrufen. Nach dem Wort in Klammern können Sie einen Ausdruck angeben, dessen Ergebnis als Offset vom Ende der Gruppierung verwendet wird. Der resultierende Wert muss eine ganze Zahl größer als Null sein. Beispiel: Last(3) – Empfang des dritten Datensatzes vom Ende der Gruppe.

Wenn der letzte Datensatz außerhalb der Gruppierung liegt, wird davon ausgegangen, dass keine Datensätze vorhanden sind. Wenn beispielsweise drei Datensätze vorhanden sind und Sie Last(4) abrufen möchten, wird davon ausgegangen, dass keine Datensätze vorhanden sind.

· Vorherige. Sie müssen den vorherigen Gruppierungsdatensatz abrufen. Nach dem Wort in Klammern können Sie einen Ausdruck angeben, dessen Ergebnis als Offset zurück zum aktuellen Gruppierungsdatensatz verwendet wird. Beispiel: Previous(2) – Vorheriges aus dem vorherigen Datensatz abrufen.

Wenn der vorherige Datensatz über die Gruppierung hinausgeht (z. B. müssen Sie für den zweiten Gruppierungsdatensatz Previous(3) abrufen), wird der erste Gruppierungsdatensatz abgerufen.

Beim Abrufen des vorherigen Datensatzes für eine Gruppierungssumme wird davon ausgegangen, dass der erste Datensatz abgerufen wird.

· Weiter (Weiter). Sie müssen den nächsten Gruppierungsdatensatz abrufen. Nach dem Wort in Klammern können Sie einen Ausdruck angeben, dessen Ergebnis als Offset vom aktuellen Gruppierungseintrag nach vorne verwendet wird. Beispiel: Next(2) – Nächstes vom nächsten Datensatz abrufen.

Wenn der nächste Datensatz über die Gruppierung hinausgeht, wird davon ausgegangen, dass keine Datensätze vorhanden sind. Wenn beispielsweise drei Einträge vorhanden sind und der dritte Eintrag Next() empfängt, wird davon ausgegangen, dass keine Einträge vorhanden sind.

Wenn der nächste Datensatz für die Gruppierungssumme empfangen wird, wird davon ausgegangen, dass kein Datensatz vorhanden ist.

· Aktuell. Sie müssen den aktuellen Datensatz abrufen.

Beim Abrufen einer Gruppierungssumme wird der erste Datensatz abgerufen.

· Begrenzungswert(Grenzwert). Die Notwendigkeit, einen Datensatz mit dem angegebenen Wert zu erhalten. Nach dem Wort Begrenzungswert In Klammern müssen Sie den Ausdruck angeben, mit dessen Wert Sie das Fragment beginnen möchten, das erste Bestellfeld.

Als Datensatz wird der erste Datensatz zurückgegeben, dessen Bestellfeldwert größer oder gleich dem angegebenen Wert ist. Wenn beispielsweise das Feld „Periode“ als Bestellfeld verwendet wird und es die Werte 01.01.2010, 01.02.2010, 01.03.2010 hat und Sie erhalten möchten LimitingValue(DateTime(2010, 1, 15)), dann wird ein Datensatz mit dem Datum 01.02.2010 empfangen.

Typ: Linie. Listet durch Kommas getrennte Ausdrücke auf, die die Sortierregeln beschreiben. Wenn nicht angegeben, erfolgt die Sortierung auf die gleiche Weise wie für die Gruppierung, für die der Ausdruck ausgewertet wird. Nach jedem Ausdruck können Sie ein Schlüsselwort angeben Alter(für die Bestellung in aufsteigender Reihenfolge), Absteigend(für die Bestellung in absteigender Reihenfolge) und Automatische Bestellung(um Referenzfelder nach den Feldern zu ordnen, nach denen Sie das referenzierte Objekt ordnen möchten). Wort Automatische Bestellung kann wie mit dem Wort verwendet werden Alter, also mit dem Wort Absteigend.

Typ: Linie. Identisch mit Parameter Sortierung. Wird zum Organisieren hierarchischer Datensätze verwendet. Wenn nicht angegeben, generiert der Layout-Builder die Reihenfolge entsprechend der im Parameter angegebenen Reihenfolge Sortierung.

Typ: Linie. Gibt die Regel zur Bestimmung des vorherigen oder nächsten Datensatzes an, falls mehrere Datensätze mit demselben Bestellwert vorhanden sind:

· Separat gibt an, dass eine Folge geordneter Datensätze verwendet wird, um die vorherigen und nächsten Datensätze zu bestimmen. Standardwert.

· Zusammen gibt an, dass der vorherige und der nächste Datensatz basierend auf den Werten der Sortierausdrücke bestimmt werden.

Wenn die resultierende Sequenz beispielsweise nach Datum sortiert ist:

Datum Vollständiger Name Bedeutung
1 1. Januar 2001

Ivanov M.

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

Separat, Das:

§ Der vorherige Eintrag zu Eintrag 3 wird Eintrag 2 sein.

Aktuell, aktuell(entsprechend Parameter Start Und Ende), dann besteht dieses Fragment für Datensatz 2 aus einem Datensatz 2. Der Ausdruck ist gleich 20.

Wenn der Parameterwert ist Zusammen, Das:

§ Der vorherige Eintrag zu Eintrag 3 wird Eintrag 1 sein.

§ wenn das Berechnungsfragment definiert ist als Aktuell, aktuell(entsprechend Parameter Start Und Ende), dann besteht dieses Fragment für Datensatz 2 aus den Datensätzen 2 und 3. Ausdruck CalculateExpression("Sum(Value)", Current, Current) wird gleich 50 sein.

Bei Angabe eines Parameterwerts gleich Zusammen, in Parametern Start Und Ende Sie können keinen Offset für Positionen angeben Zuerst, Letzter, Vorheriger, Nächster.

CalculateExpression("Sum(SumTurnover)", "First", "Current")

Wenn Sie den Gruppierungswert in der vorherigen Zeile erhalten möchten, können Sie den folgenden Ausdruck verwenden:

CalculateExpression("Rate", "Previous")

Aufführen neu Funktionen:

CalculateExpressionWithGroupArray(,) -

Die Funktion gibt ein Array zurück, dessen jedes Element das Ergebnis der Auswertung eines Ausdrucks zur Gruppierung nach dem angegebenen Feld enthält.

CalculateExpressionWithGroupValueTable(,) -

Die Funktion gibt eine Wertetabelle zurück, in der jede Zeile das Ergebnis der Auswertung von Ausdrücken zur Gruppierung nach dem angegebenen Feld enthält

ValueFilled() – Gibt „True“ zurück, wenn der Wert ein anderer als der Standardwert dieses Typs, ein anderer als NULL, ein anderer als ein leerer Verweis oder ein anderer als Undefiniert ist. Boolesche Werte werden auf NULL-Werte überprüft. Zeichenfolgen werden auf das Fehlen von Nicht-Leerzeichen überprüft

Format(, ) – Erhalten Sie eine formatierte Zeichenfolge des übergebenen Werts. Der Formatstring wird entsprechend dem Formatstring des 1C:Enterprise-Systems eingestellt.

Teilzeichenfolge(, , ) – Diese Funktion dient zum Extrahieren eines Teilstrings aus einem String.

Linienlänge() – Die Funktion soll die Länge einer Zeichenfolge bestimmen. Parameter ist ein Zeichenfolgenausdruck

Linie() – Wenn ein Array als Parameter übergeben wird, gibt die Funktion eine Zeichenfolge zurück, die Zeichenfolgendarstellungen aller Array-Elemente enthält, getrennt durch „;“-Zeichen. Wenn eine Wertetabelle als Parameter übergeben wird, gibt die Funktion eine Zeichenfolge zurück, die Zeichenfolgendarstellungen aller Zeilen der Wertetabelle enthält, wobei die Zelldarstellungen jeder Zeile durch „;“-Zeichen und die Zeilen durch einen Zeilenumbruch getrennt sind Charakter. Wenn die Zeichenfolgendarstellung eines Elements leer ist, wird anstelle seiner Darstellung eine Zeichenfolge angezeigt.

  • 1C-Bitrix
  • Einer der wichtigsten Bereiche von Unternehmenssoftware ist das Reporting. Das Schicksal eines Unternehmens kann (und nicht im übertragenen Sinne!) davon abhängen, wie einfach es ist, einen bestehenden Bericht an die sich ändernden Bedürfnisse des Unternehmens (und der Gesetzgebung) anzupassen oder einen neuen zu erstellen, sei es ein Bericht für das Finanzamt oder ein Diagramm der Abhängigkeit der Güternachfrage von der Jahreszeit und anderen Faktoren. Ein leistungsstarkes und flexibles Berichtssystem, das es einfach macht, die notwendigen Daten aus dem System zu extrahieren, sie in einer verständlichen Form darzustellen und es dem Endbenutzer zu ermöglichen, einen Standardbericht neu zu konfigurieren, um die Daten in einem neuen Licht zu sehen – das ist das Ideal, das jeder hat welches Geschäftssystem angestrebt werden sollte.

    In der 1C:Enterprise-Plattform ist ein Mechanismus namens „Data Composition System“ (abgekürzt DCS) für die Erstellung von Berichten verantwortlich. In diesem Artikel werden wir versuchen, die Idee und Architektur des ACS-Mechanismus und seine Fähigkeiten kurz zu beschreiben.


    ACS ist ein Mechanismus, der auf einer deklarativen Beschreibung von Berichten basiert. Das Zutrittskontrollsystem dient der Erstellung von Berichten und der Darstellung komplex strukturierter Informationen. Neben der Entwicklung von Berichten wird der ACS-Mechanismus übrigens auch in 1C:Enterprise in einer dynamischen Liste verwendet, einem Tool zur Anzeige von Listeninformationen mit umfangreichen Funktionen (Anzeige flacher und hierarchischer Listen, bedingtes Design von Zeilen, Gruppierungen usw.). ).

    Eine kleine Geschichte

    In der allerersten Version der 1C:Enterprise 8-Plattform, Version 8.0, wurden Berichte wie folgt erstellt:
    1. Eine oder mehrere Abfragen wurden in der 1C-Abfragesprache (SQL-ähnliche Sprache, mehr dazu weiter unten) geschrieben.
    2. Es wurde Code geschrieben, der die Ergebnisse ausgeführter Abfragen in ein Tabellendokument oder Diagramm übertrug. Der Code könnte auch Arbeiten ausführen, die in einer Abfrage nicht ausgeführt werden könnten – er berechnete beispielsweise Werte mithilfe der integrierten 1C-Sprache.
    Der Ansatz ist einfach, aber nicht der bequemste – es gibt nur minimale visuelle Einstellungen, alles muss „von Hand zu Hand“ programmiert werden. Und einer der damaligen Trumpfkarten der völlig neuen Plattform „1C:Enterprise 8“ war die Minimierung der manuell zu schreibenden Codemenge in der Anwendungslösung, insbesondere durch visuelles Design. Es wäre logisch, beim Meldemechanismus den gleichen Weg zu gehen. Dies geschah durch die Entwicklung eines neuen Mechanismus – des Data Composition System.

    Eine der Ideen, die dem Zugangskontrollsystem zugrunde lagen, war die Flexibilität und Anpassung von Berichten, die sowohl dem Entwickler als auch dem Endbenutzer zugänglich waren. Im Idealfall möchte ich dem Endbenutzer Zugriff auf die gleichen Berichtsentwurfstools gewähren wie dem Entwickler. Es wäre logisch, einen einzigen Satz von Werkzeugen zu schaffen, die allen zur Verfügung stehen. Da die Tools die Beteiligung des Endbenutzers erfordern, bedeutet dies, dass der Programmieraufwand in ihnen auf ein Minimum reduziert werden sollte (am besten vollständig eliminiert) und die visuellen Einstellungen maximal genutzt werden sollten.

    Formulierung des Problems

    Die Aufgabe des Entwicklungsteams bestand darin, ein Berichtssystem zu erstellen, das nicht auf einem algorithmischen Ansatz (d. h. durch das Schreiben von Code), sondern auf einem deklarativen Ansatz zur Erstellung von Berichten basiert. Und wir glauben, dass das Problem erfolgreich gelöst wurde. Unserer Erfahrung nach können etwa 80 % der erforderlichen Berichte mit ACS ohne eine einzige Codezeile (mit Ausnahme des Schreibens von Formeln für berechnete Felder) implementiert werden, meist durch visuelle Einstellungen.
    Die Entwicklung der ersten Version des Sicherheitsdatenblatts dauerte etwa 5 Personenjahre.

    Zwei Sprachen

    An der Erstellung von Berichten sind zwei Sprachen beteiligt. Eine davon ist eine Abfragesprache, die zum Abrufen von Daten verwendet wird. Die zweite ist die Datenkompositionsausdruckssprache, die zum Schreiben von Ausdrücken gedacht ist, die in verschiedenen Teilen des Systems verwendet werden, beispielsweise in Datenkompositionseinstellungen, um Ausdrücke von Benutzerfeldern zu beschreiben.

    Abfragesprache

    Die Abfragesprache basiert auf SQL und ist für SQL-Kenner leicht zu erlernen. Beispielanfrage:

    Es ist leicht, Analogien der für SQL-Abfragen standardmäßigen Abschnitte zu erkennen – SELECT, FROM, GROUP BY, ORDER BY.

    Gleichzeitig enthält die Abfragesprache eine erhebliche Anzahl von Erweiterungen, die darauf abzielen, die Besonderheiten finanzieller und wirtschaftlicher Probleme abzubilden und den Aufwand für die Entwicklung von Anwendungslösungen maximal zu reduzieren:

    • Mit einem Punkt auf Felder zugreifen. Если поля какой-либо таблицы имеют ссылочный тип (хранят ссылки на объекты другой таблицы), разработчик может в тексте запроса ссылаться на них через ".", при этом количество уровней вложенности таких ссылок система не ограничивает (например, ЗаказКлиента.Соглашение.Организация. Telefon).
    • Mehrdimensionale und mehrstufige Ergebnisbildung. Summen und Zwischensummen werden unter Berücksichtigung von Gruppierung und Hierarchie gebildet, Ebenen können in beliebiger Reihenfolge mit Summierung durchlaufen werden und die korrekte Bildung von Summen nach Zeitdimensionen ist gewährleistet.
    • Unterstützung für virtuelle Tabellen. Durch die vom System bereitgestellten virtuellen Tabellen können Sie für die meisten Anwendungsaufgaben nahezu vorgefertigte Daten erhalten, ohne komplexe Abfragen erstellen zu müssen. Somit kann eine virtuelle Tabelle Daten zu Produktsalden nach Perioden zu einem bestimmten Zeitpunkt liefern. Gleichzeitig nutzen virtuelle Tabellen die gespeicherten Informationen, beispielsweise zuvor berechnete Summen usw., maximal aus.
    • Temporäre Tabellen. Die Abfragesprache ermöglicht die Verwendung temporärer Tabellen in Abfragen. Mit ihrer Hilfe können Sie die Abfrageleistung verbessern, in manchen Fällen die Anzahl der Blockierungen reduzieren und den Abfragetext besser lesbar machen.
    • Batch-Anfragen. Um die Arbeit mit temporären Tabellen komfortabler zu gestalten, unterstützt die Abfragesprache die Arbeit mit Batch-Abfragen – so werden die Erstellung einer temporären Tabelle und ihre Verwendung in einer Abfrage zusammengefasst. Eine Batch-Anfrage ist eine Folge von Anfragen, die durch Semikolons („;“) getrennt sind. Die Anforderungen im Stapel werden nacheinander ausgeführt. Das Ergebnis der Ausführung einer Batch-Anfrage ist je nach verwendeter Methode entweder das von der letzten Anfrage im Batch zurückgegebene Ergebnis oder ein Array von Ergebnissen aller Abfragen im Batch in der Reihenfolge, in der die Abfragen im Batch folgen .
    • Abrufen von Darstellungen von Referenzfeldern. Jede Objekttabelle (in der ein Nachschlagewerk oder Dokument gespeichert ist) verfügt über ein virtuelles Feld – „Ansicht“. Dieses Feld enthält eine Textdarstellung des Objekts und erleichtert dem Berichtersteller die Arbeit. Für ein Dokument enthält dieses Feld also alle wichtigen Informationen – den Namen des Dokumenttyps, seine Nummer und sein Datum (z. B. „Verkauf 000000003 vom 07.06.2017 17:49:14“), und erspart dem Entwickler dies Schreiben eines berechneten Feldes.
    • usw.
    Der Anforderungsmechanismus ändert die Anforderung automatisch unter Berücksichtigung der Rollen, denen der Benutzer angehört, in dessen Namen die Anforderung ausgeführt wird (d. h. der Benutzer sieht nur die Daten, für die er das Recht hat, sie anzuzeigen) und der Funktionsoptionen (d. h. in Übereinstimmung mit mit den in der Anwendungslösung konfigurierten Funktionalitäten).

    Es gibt auch spezielle Abfragesprachenerweiterungen für Zutrittskontrollsysteme. Die Erweiterung erfolgt mithilfe spezieller syntaktischer Anweisungen in geschweiften Klammern, die direkt im Anforderungstext platziert werden. Mithilfe von Erweiterungen bestimmt der Entwickler, welche Vorgänge der Endbenutzer beim Anpassen des Berichts ausführen kann.

    Zum Beispiel:

    • WÄHLEN. Dieser Satz beschreibt die Felder, die der Benutzer für die Ausgabe auswählen kann. Nach diesem Schlüsselwort werden Aliase von Feldern aus der Auswahlliste der Hauptabfrage, die für die Konfiguration verfügbar sind, durch Kommas getrennt aufgelistet. Beispiel: (SELECT Item, Warehouse)
    • WO. Die Felder, auf die der Benutzer eine Auswahl anwenden kann, werden beschrieben. Dieser Vorschlag verwendet Tabellenfelder. Die Verwendung von Aliasnamen für Auswahllistenfelder ist nicht zulässig. Jeder Teil der Union kann sein eigenes WHERE-Element enthalten. Beispiele: (WHERE Item.*, Warehouse), (WHERE Document.Date >= &StartDate, Document.Date<= &ДатаКонца}
    • usw.
    Beispiel für die Verwendung von Erweiterungen:

    Ausdruckssprache für die Datenkomposition

    Die Data Composition Expression Language dient zum Schreiben von Ausdrücken, die insbesondere zur Beschreibung benutzerdefinierter Feldausdrücke verwendet werden. Mit SKD können Sie benutzerdefinierte Felder in einem Bericht definieren, indem Sie entweder Ihre eigenen Ausdrücke oder Optionssätze mit Bedingungen für deren Auswahl verwenden (analog zu CASE in SQL). Benutzerdefinierte Felder ähneln berechneten Feldern. Sie können sowohl im Konfigurator als auch im 1C:Enterprise-Modus eingestellt werden, die Funktionen allgemeiner Module können jedoch nicht in benutzerdefinierten Feldausdrücken verwendet werden. Daher sind benutzerdefinierte Felder eher für den Benutzer als für den Entwickler gedacht.

    Beispiel:

    Der Prozess der Erstellung eines Berichts über das Zutrittskontrollsystem

    Beim Erstellen eines Berichts müssen wir ein Layout erstellen, das definiert, wie die Daten im Bericht angezeigt werden. Sie können ein Layout basierend auf einem Datenlayoutdiagramm erstellen. Ein Datenlayoutdiagramm beschreibt die Essenz der Daten, die dem Bericht zur Verfügung gestellt werden (woher die Daten stammen und wie Sie ihr Layout steuern können). Das Datenzusammensetzungsschema ist die Grundlage, auf der alle Arten von Berichten erstellt werden können. Das Datenzusammensetzungsschema kann Folgendes enthalten:
    • Anforderungstext mit Anweisungen für das Datenkompositionssystem;
    • Beschreibung mehrerer Datensätze;
    • detaillierte Beschreibung der verfügbaren Felder;
    • Beschreiben von Beziehungen zwischen mehreren Datensätzen;
    • Beschreibung der Datenerfassungsparameter;
    • Beschreibung von Feldlayouts und Gruppierungen;
    • usw.

    Sie können beispielsweise eine Abfrage als Datensatz zum Datenzusammensetzungsschema hinzufügen und den Abfragekonstruktor aufrufen, mit dem Sie grafisch eine Abfrage beliebiger Komplexität erstellen können:

    Das Ergebnis des Starts des Abfragedesigners ist der Abfragetext (in der 1C:Enterprise-Abfragesprache). Dieser Text kann bei Bedarf manuell angepasst werden:

    In einem Datenlayout-Schema können mehrere Datensätze vorhanden sein, Datensätze können im Layout beliebig verknüpft werden, berechnete Felder können hinzugefügt werden, Berichtsparameter können angegeben werden usw. Erwähnenswert ist eine interessante Funktion des Abfragemechanismus in 1C:Enterprise. Abfragen werden letztendlich in einen SQL-Dialekt übersetzt, der für das DBMS spezifisch ist, mit dem die Anwendung direkt arbeitet. Im Allgemeinen versuchen wir, die Fähigkeiten der DBMS-Server maximal zu nutzen (die Einschränkung besteht darin, dass wir nur die Fähigkeiten nutzen, die gleichzeitig in allen von der 1C:Enterprise-Plattform unterstützten DBMS verfügbar sind – MS SQL, Oracle, IBM DB2). , PostgreSQL). Daher können wir auf Abfrageebene in berechneten Feldern nur die Funktionen verwenden, die in SQL übersetzt sind.

    Aber auf der Ebene des Datenkompositionsschemas können wir bereits benutzerdefinierte Felder hinzufügen und darin Funktionen in der integrierten 1C-Entwicklungssprache (einschließlich der von uns geschriebenen) verwenden, was die Möglichkeiten von Berichten erheblich erweitert. Technisch sieht es so aus: Alles, was in SQL übersetzt werden kann, wird in SQL übersetzt, die Abfrage wird auf DBMS-Ebene ausgeführt, die Abfrageergebnisse werden im Speicher des 1C-Anwendungsservers abgelegt und der SKD berechnet für jeden Datensatz die Werte ​​von berechneten Feldern, deren Formeln in der 1C-Sprache geschrieben sind.


    Benutzerdefinierte Felder hinzufügen

    Sie können dem Bericht beliebig viele Tabellen und Diagramme hinzufügen:


    Berichtsdesigner


    Laufzeitbericht

    Mithilfe von SKD kann der Benutzer dem Bericht komplexe Auswahlen hinzufügen (die der Anfrage an den richtigen Stellen hinzugefügt werden), bedingtes Design (ermöglicht die unterschiedliche Formatierung der angezeigten Felder – mit Schriftart, Farbe usw., abhängig von ihren Werten). ) und vieles mehr. .

    Der Prozess der Erstellung und Generierung eines Berichts lässt sich kurz wie folgt beschreiben:

    • Der Entwickler bestimmt zur Entwurfszeit mit Hilfe eines Designers (oder zur Laufzeit mithilfe von Code) das Datenlayoutschema:
      • Text der Anfrage/Anfragen
      • Beschreibung der berechneten Felder
      • Beziehungen zwischen Anfragen (wenn es mehrere davon gibt)
      • Berichtsoptionen
      • Standardeinstellungen
      • Usw.
    • Die oben genannten Einstellungen werden im Layout gespeichert
    • Der Benutzer öffnet den Bericht
      • Nimmt ggf. weitere Einstellungen vor (z. B. ändert Parameterwerte)
      • Klicken Sie auf die Schaltfläche „Generieren“.
    • Benutzereinstellungen werden auf das vom Entwickler definierte Datenzusammensetzungsschema angewendet.
    • Es wird ein Zwischenlayout für die Datenzusammensetzung erstellt, das Anweisungen dazu enthält, woher die Daten empfangen werden sollen. Insbesondere werden die im Layout vorgegebenen Abfragen angepasst. Daher werden Felder, die im Bericht nicht verwendet werden, aus der Anfrage entfernt (dies geschieht, um die Menge der empfangenen Daten zu minimieren). Alle Felder, die an berechneten Feldformeln beteiligt sind, werden der Abfrage hinzugefügt.
    • Der Datenkompositionsprozessor kommt ins Spiel. Der Layoutprozessor führt Abfragen aus, verknüpft Datensätze, berechnet Werte für berechnete Felder und Ressourcen und führt Gruppierungen durch. Kurz gesagt, es führt alle Berechnungen durch, die nicht auf DBMS-Ebene durchgeführt wurden.
    • Der Datenausgabeprozessor startet eine Anforderung zur Ausführung und zeigt die empfangenen Daten in einem Tabellenkalkulationsdokument, Diagramm usw. an.


    Der Prozess der Erstellung eines Berichts mithilfe des ACS-Mechanismus

    Wir versuchen, die Menge der vom Server an die Clientanwendung übertragenen Berichtsdaten zu minimieren. Bei der Anzeige von Daten in einem Tabellenkalkulationsdokument übertragen wir beim Öffnen eines Tabellenkalkulationsdokuments nur die Zeilen vom Server, die der Benutzer am Anfang des Dokuments sieht. Während sich der Benutzer durch das Dokument bewegt, werden die fehlenden Daten vom Server auf den Client heruntergeladen.

    Benutzerdefinierte Einstellungen

    Alle ACS-Tools stehen sowohl dem Entwickler als auch dem Endbenutzer zur Verfügung. Die Praxis hat jedoch gezeigt, dass der Endbenutzer häufig von der Fülle an Werkzeugfunktionen eingeschüchtert ist. Darüber hinaus benötigt der Endbenutzer in den meisten Fällen nicht alle Einstellmöglichkeiten – es reicht aus, wenn er schnell auf die Einrichtung eines oder zweier Berichtsparameter (z. B. Zeitraum und Gegenpartei) zugreifen kann. Ab einer bestimmten Version der Plattform hat der Berichtsentwickler die Möglichkeit zu markieren, welche Berichtseinstellungen dem Benutzer zur Verfügung stehen. Dies geschieht über die Checkbox „In Benutzereinstellungen einbeziehen“. Außerdem verfügen die Berichtseinstellungen jetzt über ein Flag „Anzeigemodus“, das einen von drei Werten annehmen kann:
    • Schneller Zugriff. Die Einstellung wird direkt oben im Berichtsfenster angezeigt.
    • Normal. Die Einstellung ist über die Schaltfläche „Einstellungen“ verfügbar.
    • Nicht verfügbar. Die Einstellung steht dem Endbenutzer nicht zur Verfügung.


    Anzeigemodus in der Entwurfszeit festlegen


    Zeigen Sie die Einstellung zur Laufzeit im Schnellzugriffsmodus an (unter der Schaltfläche „Generieren“).

    Entwicklungspläne

    Einer unserer Schwerpunkte bei der Entwicklung von Zutrittskontrollsystemen ist die Vereinfachung der Benutzereinstellungen. Unsere Erfahrung zeigt, dass die Arbeit mit Benutzereinstellungen für einige Endbenutzer immer noch ein großer Aufwand ist. Wir berücksichtigen dies und arbeiten in diese Richtung. Dementsprechend wird es auch für Entwickler einfacher, mit Zutrittskontrollsystemen zu arbeiten, denn Wir möchten nach wie vor ein einziges Tool zum Einrichten von Berichten sowohl für den Entwickler als auch für den Endbenutzer bereitstellen.

    Datenlayoutdiagramm (1C SKD)- ein praktischer Designer zum Erstellen komplexer Berichte in 1C:Enterprise-Softwareprodukten, die zur Entwicklung und Verfolgung der Produktionsautomatisierung beitragen und es ermöglichen, diese in kürzester Zeit so flexibel und schön wie möglich zu gestalten. Ein zusätzlicher Vorteil des Data Composition Scheme (1C SKD) ist die automatische Generierung eines kontrollierten Berichtsformulars, und mit der Weiterentwicklung dieses Bereichs ist dies ein wichtiger Faktor bei der Auswahl einer Berichtsentwicklungsmethode. Aufgrund der Komplexität der Struktur des Data Composition Scheme (1C SKD) und der Vielzahl an Einstellungen führt dies jedoch häufig zu einer längeren Entwicklung des Berichts als durch den „Ausgabeformular-Designer“. Daher muss ein 1C-Programmierer alle Feinheiten des Data Composition Scheme (1C DCS) verstehen, um die Entwicklungszeit für die Erstellung von Berichten weiter zu verkürzen.

    Schauen wir uns die ersten drei Registerkarten des Data Composition Scheme (1C SKD) an – Datensatz, Datensatzverbindungen und berechnete Felder.

    Datensatz in 1C SKD

    Der Datensatz beinhaltet die Möglichkeit, drei Objekte zu erstellen – eine Abfrage, ein Objekt und eine Union. Schauen wir uns jedes davon genauer an:

    Dies ist eine reguläre Abfrage, die über die Schaltfläche „Query Builder“ generiert wird. Wenn das Autofill-Flag gesetzt ist, werden alle ausgewählten Details automatisch in die Felder des Datensatzes übernommen. Es ist auch möglich, das Ausfüllen von Feldern in der Anfrage auf der Registerkarte „Datenzusammensetzung“ anzupassen, wo es drei Registerkarten gibt:

    Tabellen: Hier werden die Tabellen ausgewählt, die an der Erstellung des Berichts beteiligt sind. Normalerweise werden die Standarddaten ausgewählt, da wir auf der Registerkarte „Tabellen und Felder“ bereits die Dokumente, Verzeichnisse und Register ausgewählt haben, die wir benötigen ...

    Felder, hier wählen wir die Objekte aus, die in den Bericht aufgenommen werden sollen. Das Kinder-Flag zeigt an, ob für das Objekt zugängliche untergeordnete Elemente vorhanden sind oder nicht. Es ist logisch, dass dies für Zeichenfolgen, numerische und ähnliche Daten nicht festgelegt werden kann die Flagge auf True.

    Bedingungen, hier wählen wir diejenigen Objekte aus, die unter Bedingungen im Zutrittskontrollsystem verwendet werden können.

    Ein Teil der Arbeit wird im Datenzusammensetzungsschema erledigt, ein Teil davon wird programmgesteuert erledigt; schauen wir uns ein einfaches Beispiel an:

    Zuerst erstellen wir ein Layoutdiagramm für das Datenlayout des Dokuments und nennen es SKD (zum Beispiel: 1C SKD), darin erstellen wir ein Datensatzobjekt, dann füllen wir die Felder aus, zum Beispiel haben wir ein Dokument mit einem tabellarischen Warenteil mit Einzelheiten - Nomenklatur, Menge und Preis.

    Fügen wir drei Felder hinzu und füllen Sie jede Spalte mit dem Namen der Details aus. Die restlichen Spalten werden automatisch ausgefüllt:

    Lassen Sie uns eine Schaltfläche im Dokumentformular erstellen und den Funktionsmechanismus in kontrollierten Formularen beschreiben:

    &OnClient

    Prozedur Print()

    OurReport = PrintOnServer(); //Funktion auf dem Server aufrufen

    OurReport.Show(); //den generierten Bericht anzeigen

    Ende des Verfahrens

    &Auf dem Server

    Funktion PrintOnServer()

    DocumentObject = FormAttributeValue(“Object”);

    //Wir platzieren den tabellarischen Teil Produkte in einer Struktur mit dem Namen ProductsSKD auf die gleiche Weise, wie wir im SKD selbst den Namen des Objekts angegeben haben, das die Daten enthält

    DataSet = neue Struktur;

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

    //Wir erhalten unser Layout und legen die Standardeinstellungen fest, sodass alle Berichtsausgabeeinstellungen aus unserem Layout übernommen werden

    OurLayout = DocumentObject.GetLayout(“SKD”);

    Einstellungen = OurLayout.DefaultSettings;

    //Erstellen Sie mit unseren Einstellungen ein Datenlayout-Layout

    LayoutLinker = newDataLayoutLayoutLinker;

    LayoutLayout = LayoutComposer.Execute(OurLayout, Settings);

    //Führen Sie eine Datenkomposition mit unserem Datensatz durch

    DataCompositionProcessor = newDataCompositionProcessor;

    DataCompositionProcessor.Initialize(LayoutLayout, DataSet);

    //Wir erstellen ein Tabellenkalkulationsdokument und zeigen unseren Bericht darin an

    ReportDocument = Neues TabularDocument;

    OutputProcessor = New OutputProcessorDataCompositionResultInTabularDocument;

    OutputProcessor.SetDocument(ReportDocument);

    OutputProcessor.Output(DataCompositionProcessor);

    Return DocumentReport;

    EndFunction

    Wenn Sie möchten, können Sie Bereiche mit einem beliebigen anderen Layout erhalten und diese auch in diesem Bericht anzeigen. Wir haben beispielsweise ein Standardlayout für die Erstellung eines Zahlungsauftrags und die Kopfzeile ist darin sehr gut erstellt, um dies nicht zu tun unnötige Arbeit, wir erstellen einfach zuerst das Layout, zeigen die Kopfzeile an, dann erstellen wir unseren Bericht und zeigen ihn im Zutrittskontrollsystem an.

    UM Vereinigung

    Wir können unsere Abfragen und Objekte darin platzieren, aber im Gegensatz zu einer Verbindung fügt es einfach Tabellen zueinander hinzu, das heißt, wenn wir zwei identische Tabellen verbinden, erhalten wir am Ende eine, und wenn wir sie kombinieren, verdoppelt sie sich, schauen wir mal an einem einfachen Beispiel:

    Wir haben Tische:

    Nach der Mitteilung erhalten wir:

    Und wenn kombiniert:

    Betrachten wir nun das Ausfüllen von Spalten in Datensätzen (wir werden einige überspringen, da sie sich auf andere Registerkarten beziehen; wir werden in zukünftigen Artikeln darauf zurückkommen):

    - Feld, geben Sie den allgemeinen Namen des Attributs an;

    ­­- Weg Geben Sie den Namen der Details an, mit denen wir ihn im Zugangskontrollsystem kontaktieren, zum Beispiel in Berechnete Felder;

    - Titel, geben Sie den Namen des Attributs an, das im Bericht angezeigt wird;

    - Feldbegrenzung, geben Sie die Verfügbarkeit dieser Anforderung an;

    - Einschränkung der Details Wir geben die Verfügbarkeit von untergeordneten Elementen an. Es ist wichtig, dass das Feld selbst verfügbar ist, wenn die Verfügbarkeit von Details angegeben wird. Möglicherweise wird diese Mechanik in zukünftigen Versionen geändert.

    - Ausdruck, mit dem die Felddarstellung berechnet wird, es ist praktisch zu verwenden, wenn wir die Ausgabe von Details ein wenig ändern müssen, zum Beispiel, wenn wir nach dem Namen benötigen Nomenklatur angezeigt wurde Aktie, wo es sich befindet, dann füllen Sie Folgendes aus: Artikel + „ist im Lager“ + Lager. Ich wiederhole, dass der Zugriff auf die Daten über den in der Spalte angegebenen Namen erfolgt Weg;

    - Ausdrucksordnung, ein praktischer Mechanismus zum Einrichten der Berichtsreihenfolge, bei dem die Bedingung manuell festgelegt werden kann, ähnlich wie im vorherigen Punkt, aber wie die Praxis zeigt, funktioniert dieser Mechanismus oft nicht so, wie wir es gerne hätten, und ich empfehle Ihnen, die Standardsortierung zu verwenden;

    - Werttyp, gibt den Werttyp des Attributs an; dieser muss ausgefüllt werden, wenn Sie das folgende Feld verwenden;

    - verfügbaren Werte, funktioniert nur, wenn es voll ist Werttyp, öffnen Sie das Formular und in der Spalte Bedeutung Wir geben das Element an, das geändert werden muss, je nach Typ können es vordefinierte Objekte oder numerisch sein, zum Beispiel haben Details einfache Werte, in Präsentation Wir geben an, was wir ändern müssen, ein Beispiel für einen booleschen Typ:

    - Dekor– Standard-Feldformateinstellungen, ähnlich den Einstellungen in verwalteten Formularen, ermöglichen es Ihnen, die Ausgabe bestimmter Details genauer und schöner anzupassen.

    Datensatzverbindungen in 1C SKD

    Hier wird es nur installiert links beitreten, nach einem ähnlichen Prinzip wie Verbindungen in Anfragen, in Quelle der Kommunikation Geben Sie die Haupttabelle für die Verbindung an, in Empfänger zusätzlich. IN Ausdrucksquelle Und Ausdrucksempfänger Wir geben die Einzelheiten an, über die die Kommunikation erfolgen soll. Wir werden uns die restlichen Spalten genauer ansehen, wenn wir uns die Registerkarte ansehen. Optionen. Wenn keine zusätzliche Verbindung mit Parametern vorhanden ist, wird empfohlen, die Verbindung in der Anfrage vorzunehmen, um den Bericht zu beschleunigen.

    Im Hinblick auf die bevorstehende Veröffentlichung von 8.2.14 werde ich versuchen, einige neue Funktionen des Datenkompositionssystems zu beschreiben.

    Öffnen Sie das Datenlayoutdiagramm, vorzugsweise in einem externen Bericht, um die Bearbeitung zu erleichtern.

    Wir fügen einen Datensatz des Abfragetyps hinzu und schreiben entweder manuell oder mit dem Abfrage-Designer eine einfache Abfrage:

    1. Richten Sie eine Anfrage im Zutrittskontrollsystem ein.

    2. Richten Sie berechnete Felder im Zutrittskontrollsystem ein

    3. Konfigurieren Sie das Datenlayout auf der Registerkarte „Einstellungen“.

    4. Starten Sie 1C Enterprise 8.2.14. Öffnen Sie den Bericht. Wir formen, wir empfangen.

    Beschreibung der neuen Funktionen selbst:

    1. Das aktuelle Datum()

    Gibt das Systemdatum zurück. Beim Erstellen eines Layout-Layouts wird in allen im Layout vorhandenen Ausdrücken die Funktion CurrentDate() durch den Wert des aktuellen Datums ersetzt.

    2. COMPUTEEXPRESSION()

    Syntax:

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

    Beschreibung:

    Die Funktion dient dazu, einen Ausdruck im Kontext einer Gruppierung auszuwerten.

    Die Funktion berücksichtigt die Auswahl von Gruppierungen, berücksichtigt jedoch keine hierarchischen Auswahlen.

    Die Funktion kann nicht auf eine Gruppierung in der Gruppenauswahl dieser Gruppierung angewendet werden. Beispielsweise können Sie bei der Auswahl der Nomenklaturgruppe nicht den Ausdruck CalculateExpression("Sum(SumTurnover)", "TotalTotal") > 1000 verwenden. Ein solcher Ausdruck kann jedoch bei der hierarchischen Auswahl verwendet werden.

    Wenn der Enddatensatz vor dem Startdatensatz liegt, wird davon ausgegangen, dass keine Datensätze zur Berechnung detaillierter Daten und zur Berechnung von Aggregatfunktionen vorhanden sind.

    Bei der Berechnung von Intervallausdrücken für eine Gesamtsumme (der Gruppierungsparameter ist auf „GrandTotal“ festgelegt) wird davon ausgegangen, dass keine Datensätze zur Berechnung detaillierter Daten und zur Berechnung von Aggregatfunktionen vorhanden sind.

    Beim Generieren eines Ausdrucks für die CalculateExpression-Funktion ersetzt der Layout-Compositor die CalculateExpression-Funktion durch NULL, wenn der Sortierausdruck Felder enthält, die nicht in der Gruppierung verwendet werden können.

    Optionen

    <Выражение>

    Typ: Zeichenfolge. Der auszuwertende Ausdruck.

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

    Typ: Zeichenfolge. Enthält den Namen der Gruppierung, in deren Kontext der Ausdruck ausgewertet werden soll. Wenn als Gruppierungsname eine leere Zeichenfolge verwendet wird, wird die Berechnung im Kontext der aktuellen Gruppierung durchgeführt. Wenn der GrandTotal-String als Gruppenname verwendet wird, wird die Berechnung im Kontext der Gesamtsumme durchgeführt. Andernfalls wird die Berechnung im Kontext der gleichnamigen übergeordneten Gruppe durchgeführt.

    Zum Beispiel:

    Sum(Sales.SumTurnover)/Calculate(„Sum(Sales.SumTurnover)“, „Total“)

    In diesem Beispiel ist das Ergebnis das Verhältnis des Betrags für das Feld Sales.SumTurnover des Gruppierungsdatensatzes zum Betrag desselben Felds im gesamten Layout;

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

    Typ: Zeichenfolge. Der Parameter kann folgende Werte annehmen:

    • GeneralTotal – der Ausdruck wird für alle Gruppierungsdatensätze berechnet.
    • Hierarchie – Der Ausdruck wird für den übergeordneten hierarchischen Datensatz ausgewertet, falls einer vorhanden ist, und für die gesamte Gruppierung, wenn kein übergeordneter hierarchischer Datensatz vorhanden ist.
    • Gruppierung – der Ausdruck wird für den aktuellen Gruppierungsdatensatz ausgewertet.
    • Nicht-Ressourcen-Gruppierung – Bei der Berechnung einer Funktion für einen Gruppendatensatz nach Ressource wird der Ausdruck für den ersten Gruppendatensatz der ursprünglichen Gruppierung ausgewertet.

    Bei der Berechnung einer Funktion CalculateExpression() Mit dem Wert „Nicht-Ressourcengruppierung“ für Gruppendatensätze, die keine Ressourcengruppierungen sind, wird die Funktion auf die gleiche Weise berechnet, wie sie berechnet würde, wenn der Parameterwert gleich dem Gruppierungswert wäre.

    Der Datenzusammensetzungslayout-Generator platziert beim Generieren eines Datenzusammensetzungslayouts und bei der Ausgabe des Ressourcenfelds, nach dem die Gruppierung im Layout durchgeführt wird, einen Ausdruck im Layout, der mithilfe der Funktion berechnet wird CalculateExpression(), was den Parameter „Nicht-Ressourcen-Gruppierung“ angibt. Für andere Ressourcen werden die üblichen Ressourcenausdrücke in der Ressourcengruppierung platziert.

    <Начало>

    Typ: Zeichenfolge. Gibt an, ab welchem ​​Datensatz das Fragment beginnen soll, in welchen Aggregatausdrucksfunktionen berechnet werden soll und aus welchem ​​Datensatz Feldwerte außerhalb der Aggregatfunktionen abgerufen werden sollen. Der Wert kann einer der folgenden sein:

    <Конец>

    Typ: Zeichenfolge. Gibt an, bis zu welchem ​​Datensatz das Fragment fortgesetzt werden soll, in dem die Aggregatfunktionen des Ausdrucks berechnet werden sollen. Der Wert kann einer der folgenden sein:

    • Erste. Es ist erforderlich, den ersten Gruppierungsdatensatz abzurufen. Nach dem Wort in Klammern können Sie einen Ausdruck angeben, dessen Ergebnis als Offset vom Beginn der Gruppierung verwendet wird. Der resultierende Wert muss eine ganze Zahl größer als Null sein. Beispiel: First(3) – Empfang des dritten Datensatzes vom Beginn der Gruppierung.

    Wenn der erste Datensatz außerhalb der Gruppierung liegt, wird davon ausgegangen, dass keine Datensätze vorhanden sind. Wenn beispielsweise drei Datensätze vorhanden sind und Sie First(4) erhalten möchten, wird davon ausgegangen, dass keine Datensätze vorhanden sind.

    • Zuletzt. Sie müssen den letzten Gruppierungsdatensatz abrufen. Nach dem Wort in Klammern können Sie einen Ausdruck angeben, dessen Ergebnis als Offset vom Ende der Gruppierung verwendet wird. Der resultierende Wert muss eine ganze Zahl größer als Null sein. Beispiel: Last(3) – Empfang des dritten Datensatzes vom Ende der Gruppe.

    Wenn der letzte Datensatz außerhalb der Gruppierung liegt, wird davon ausgegangen, dass keine Datensätze vorhanden sind. Wenn beispielsweise drei Datensätze vorhanden sind und Sie den letzten (4) abrufen möchten, wird davon ausgegangen, dass keine Datensätze vorhanden sind.

    • Vorherige. Sie müssen den vorherigen Gruppierungsdatensatz abrufen. Nach dem Wort in Klammern können Sie einen Ausdruck angeben, dessen Ergebnis als Offset zurück zum aktuellen Gruppierungsdatensatz verwendet wird. Beispiel: Previous(2) – Vorheriges aus dem vorherigen Datensatz abrufen.

    Wenn der vorherige Datensatz über die Gruppierung hinausgeht (z. B. müssen Sie für den zweiten Gruppierungsdatensatz Previous(3) abrufen, wird der erste Gruppierungsdatensatz abgerufen.

    Beim Abrufen des vorherigen Datensatzes für eine Gruppierungssumme wird davon ausgegangen, dass der erste Datensatz abgerufen wird.

    • Nächste. Sie müssen den nächsten Gruppierungsdatensatz abrufen. Nach dem Wort in Klammern können Sie einen Ausdruck angeben, dessen Ergebnis als Offset vom aktuellen Gruppierungseintrag nach vorne verwendet wird. Zum Beispiel Next(2) – das Nächste aus dem nächsten Datensatz abrufen.

    Wenn der nächste Datensatz über die Gruppierung hinausgeht, wird davon ausgegangen, dass keine Datensätze vorhanden sind. Wenn beispielsweise drei Datensätze vorhanden sind und Next() für den dritten Datensatz empfangen wird, wird davon ausgegangen, dass keine Datensätze vorhanden sind.

    Wenn der nächste Datensatz für die Gruppierungssumme empfangen wird, wird davon ausgegangen, dass kein Datensatz vorhanden ist.

    • Aktuell. Sie müssen den aktuellen Datensatz abrufen.

    Beim Abrufen einer Gruppierungssumme wird der erste Datensatz abgerufen.

    • Grenzwert. Die Notwendigkeit, einen Datensatz mit dem angegebenen Wert zu erhalten. Nach dem Wort LimitingValues ​​​​in Klammern müssen Sie den Ausdruck angeben, mit dessen Wert Sie das Fragment beginnen möchten, das erste Bestellfeld.

    Als Datensatz wird der erste Datensatz zurückgegeben, dessen Bestellfeldwert größer oder gleich dem angegebenen Wert ist. Wenn beispielsweise das Feld „Periode“ als Bestellfeld verwendet wird und es die Werte 01.01.2010, 01.02.2010, 01.03.2010 hat und Sie den LimitingValue(DateTime(2010) erhalten möchten , 1, 15)), dann wird ein Datensatz mit dem Datum 01.02.2010 erhalten.

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

    Typ: Zeichenfolge. Listet durch Kommas getrennte Ausdrücke auf, die die Sortierregeln beschreiben. Wenn nicht angegeben, erfolgt die Sortierung auf die gleiche Weise wie für die Gruppierung, für die der Ausdruck ausgewertet wird. Nach jedem Ausdruck können Sie die Schlüsselwörter Ascending (für die Sortierung in aufsteigender Reihenfolge), Descending (für die Sortierung in absteigender Reihenfolge) und AutoOrder (für die Sortierung der Referenzfelder nach den Feldern, nach denen Sie das referenzierte Objekt ordnen möchten) angeben. Das Wort „Automatische Reihenfolge“ kann sowohl mit dem Wort „Aufsteigend“ als auch mit dem Wort „Absteigend“ verwendet werden.

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

    Typ: Zeichenfolge. Identisch mit der Sortieroption. Wird zum Organisieren hierarchischer Datensätze verwendet. Wenn nicht angegeben, generiert der Layout-Compositor die Reihenfolge gemäß der im Parameter „Sort“ angegebenen Reihenfolge.

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

    Typ: Zeichenfolge. Gibt die Regel zur Bestimmung des vorherigen oder nächsten Datensatzes an, falls mehrere Datensätze mit demselben Bestellwert vorhanden sind:

    • Separat bedeutet, dass eine Folge geordneter Datensätze verwendet wird, um die vorherigen und nächsten Datensätze zu bestimmen. Standardwert.
    • Zusammen bedeutet, dass der vorherige und der nächste Datensatz basierend auf den Werten der Sortierausdrücke bestimmt werden.

    Wenn die resultierende Sequenz beispielsweise nach Datum sortiert ist:

    Datum Vollständiger Name Bedeutung
    1 1. Januar 2001 Ivanov M. 10
    2 02. Januar 2001 Petrov S. 20
    3 3. Januar 2001 Sidorov R. 30
    4 4. Januar 2001 Petrov S. 40

    Wenn der Parameterwert „Separat“ lautet, gilt Folgendes:

    § Der vorherige Eintrag zu Eintrag 3 wird Eintrag 2 sein.

    § Wenn das Berechnungsfragment als Current, Current definiert ist (bzw. die Parameter Start und End), dann besteht dieses Fragment für Datensatz 2 aus einem Datensatz 2. Der Ausdruck CalculateExpression(“Sum (Value)”, Current, Current) wird gleich 20 sein.

    Wenn der Parameterwert Together ist, dann:

    § Der vorherige Eintrag zu Eintrag 3 wird Eintrag 1 sein.

    § Wenn das Berechnungsfragment als „Aktuell“, „Aktuell“ (bzw. die Parameter „Start“ und „Ende“) definiert ist, besteht dieses Fragment für Datensatz 2 aus den Datensätzen 2 und 3. Der Ausdruck CalculateExpression(“Sum (Value)”, Current, Current) wird gleich 50 sein.

    Wenn Sie einen Parameterwert gleich „Together“ angeben, können Sie in den Parametern „Start“ und „Ende“ keinen Offset für die Positionen „Erste“, „Letzte“, „Vorherige“ und „Nächste“ angeben.

    CalculateExpression(„Sum(SumTurnover)“, „First“, „Current“)

    Wenn Sie den Gruppierungswert in der vorherigen Zeile erhalten möchten, können Sie den folgenden Ausdruck verwenden:

    CalculateExpression(„Rate“, „Previous“)

    Aufführen neu Funktionen:

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

    Die Funktion gibt ein Array zurück, dessen jedes Element das Ergebnis der Auswertung eines Ausdrucks zur Gruppierung nach dem angegebenen Feld enthält.

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

    Die Funktion gibt eine Wertetabelle zurück, in der jede Zeile das Ergebnis der Auswertung von Ausdrücken zur Gruppierung nach dem angegebenen Feld enthält

    ValueFilled(<Выражение>) – Gibt „True“ zurück, wenn der Wert ein anderer als der Standardwert dieses Typs, ein anderer als NULL, ein anderer als eine leere Referenz oder ein anderer als Undefiniert ist. Boolesche Werte werden auf NULL überprüft. Zeichenfolgen werden auf das Fehlen von Nicht-Leerzeichen überprüft

    Format(<Выражение>, <Форматная строка>) – Erhalten Sie eine formatierte Zeichenfolge des übergebenen Werts. Der Formatstring wird entsprechend dem Formatstring des 1C:Enterprise-Systems eingestellt.

    Teilzeichenfolge(<Выражение>, <Начальные символ>, <ДлинаПодстроки>) – Diese Funktion dient zum Extrahieren eines Teilstrings aus einem String.

    Linienlänge(<Выражение>) – Die Funktion soll die Länge einer Zeichenfolge bestimmen. Parameter – Zeichenfolgenausdruck

    Linie(<Выражение>) – Wenn ein Array als Parameter übergeben wird, gibt die Funktion eine Zeichenfolge zurück, die Zeichenfolgendarstellungen aller Array-Elemente enthält, getrennt durch die Zeichen „; „. Wenn eine Wertetabelle als Parameter übergeben wird, gibt die Funktion eine Zeichenfolge zurück, die die Zeichenfolgendarstellungen aller Zeilen der Wertetabelle enthält, wobei die Zelldarstellungen jeder Zeile durch die Zeichen „;“ getrennt sind. “, und die Zeilen sind ein Zeilenvorschubsymbol. Wenn ein Element eine leere Zeichenfolgendarstellung hat, wird die Zeichenfolge anstelle ihrer Darstellung angezeigt<Пустое значение>.

    gastroguru 2017