Maison / Facebook / Fonctions du langage d'expression du système de composition de données. Fonctions du langage d'expression du système de composition de données Mise en œuvre de la tâche à l'aide des fonctions SKD Array et ConnectRows

Fonctions du langage d'expression du système de composition de données. Fonctions du langage d'expression du système de composition de données Mise en œuvre de la tâche à l'aide des fonctions SKD Array et ConnectRows

Cette méthode, me semble-t-il, a un inconvénient, mais elle fonctionne, mais le moins est gros. Regardons un exemple : dans la configuration il y a un document « Réception de marchandises » avec une partie tabulaire « Marchandises », il faut afficher dans le rapport les documents et les noms des marchandises reçues pour chaque document.

Créons un rapport, ajoutons un schéma de présentation des données de base, ajoutons un ensemble de données de type « requête » au système de contrôle d'accès et générons une requête simple (voir Figure 1).

Figure 1. Requête d'ensemble de données
Dans l'onglet « Champs calculés », ajoutez un champ calculé appelé TabularPart et spécifiez une chaîne vide dans la colonne Expression (voir Figure 2).
Notre champ calculé sera utilisé comme ressource, donc dans l'onglet "Ressources", nous définissons l'expression de regroupement : ConnectRows(Array(Products.Nomenclature),""). Nous indiquons également que cette ressource doit être calculée à l'aide du champ Lien (voir Figure 3).
Résultat du rapport :
L'inconvénient est l'utilisation du regroupement ; dans notre cas, le regroupement est effectué par l'attribut Link, sinon cela ne fonctionnera pas. La présence d'un regroupement impose certaines restrictions sur la configuration de la sortie des données (voir Figure 4).

2) Appel de votre propre fonction à partir d'un module commun.

Une manière simple et claire, la seule difficulté est de trouver un module commun adapté ou d'en créer un nouveau pour écrire votre propre fonction :). En utilisant le lien transmis vers le document « Entrée de marchandises », la fonction recevra des lignes de la partie tabulaire du document et générera une ligne avec des informations sur les marchandises reçues. Commençons la mise en œuvre.

Créons un rapport, ajoutons un schéma de présentation des données de base, ajoutons un ensemble de données de type « requête » au système de contrôle d'accès et générons une requête simple (voir Figure 6).


Figure 6. Requête d'ensemble de données
Créons un module commun _Demo Work WITH Reports et écrivons la fonction d'exportation Get List of Products for Report(). Voir le code de fonction ci-dessous.
Sur l'onglet « Champs calculés », ajoutez un champ calculé appelé TabularPart et dans la colonne Expression nous indiquons un appel de fonction depuis le module général (voir Figure 2) :
_DemoWorking AVEC Reports.Obtenir la liste des produits pour le rapport (lien)

Allons dans l'onglet "Paramètres" et créons un paramètre pour la sortie des données - ce sera un enregistrement détaillé (voir Figure 8).
Résultat du rapport :

Télécharger un exemple de rapport

Ce que vous devez savoir lorsque vous utilisez cette méthode :
1) L'expression du moteur de composition de données peut contenir des appels à des fonctions de modules de configuration communs globaux. Par exemple:
Nom abrégé (lien, date, numéro)
2) Lors de la génération d'un rapport par programmation, l'utilisation des fonctions des modules communs n'est autorisée que si le paramètre correspondant du processeur de composition de données est spécifié (4ème paramètre) :
CompositionProcessor = newDataCompositionProcessor ;
LayoutProcessor.Initialize(LayoutLayout, DecryptionData, True);
3) Les fonctions des modules communs ne peuvent pas être utilisées dans les expressions de champs personnalisés.
4) Si une exception est levée lors de la génération d'un rapport indiquant une fonction d'un module commun, vérifiez le contexte d'exécution du module (voir Figure 9).

Description des fonctions utilisées

ConnectRows (Valeur, ItemSeparator, ColumnSeparator)- conçu pour combiner des chaînes en une seule ligne.
  • Valeur - expressions qui doivent être combinées sur une seule ligne. S'il s'agit d'un tableau, alors les éléments du tableau seront combinés en une chaîne. S'il s'agit d'un ValueTable, alors toutes les colonnes et lignes du tableau seront combinées en une ligne ;
  • Séparateur d'éléments : chaîne contenant du texte à utiliser comme séparateur entre les éléments du tableau et les lignes du tableau de valeurs. Par défaut – caractère de saut de ligne ;
  • Séparateurs de colonnes : une chaîne contenant du texte à utiliser comme séparateur entre les colonnes de la table de valeurs. Défaut "; ".
Tableau([Divers] Expression)- vous pouvez utiliser une table de valeurs comme paramètre. Dans ce cas, le résultat de la fonction sera un tableau contenant les valeurs de la première colonne du tableau des valeurs, passées en paramètre. Si une expression contient une fonction Array, elle est alors considérée comme une expression agrégée. Si le mot-clé Divers est spécifié, le tableau résultant ne contiendra pas de valeurs en double.

Obtenir la liste des produits pour le rapport (DocumentLink)- la fonction génère une ligne avec une liste des marchandises entrantes.
//Options :
// DocumentLink - DocumentLink.Goods Receipt - Document "Goods Receipt".
// Valeur de retour :
// String - une chaîne avec une liste de produits.
Fonction Obtenir la liste des produits pour l'exportation du rapport (DocumentLink)

Liste des produits = "" ;

Pour chaque ligne PM du cycle DocumentLink.Products
Liste des Produits = Liste des Produits + Ligne TC.Nomenclature ;
Liste des produits = Liste des produits + Symboles.PS ;
Fin du cycle ;

Retourner la liste des produits ;

EndFunction // Obtenir la liste des produits pour le rapport ()

Dans cette courte note, je souhaite montrer comment résumer des valeurs à différents niveaux de regroupement dans un rapport à l'aide d'un système de composition de données.
Comme le montre l'image, uniquement au niveau de regroupement « Groupes d'articles », la ressource « Commande » est calculée, elle affiche la quantité qui doit être commandée pour le groupe d'articles actuel en fonction de certaines conditions :


Cette valeur ne peut être calculée qu'à ce niveau de regroupement, puisqu'il n'y a pas de valeurs supérieures ou inférieures à calculer. Par exemple, au niveau des enregistrements détaillés, il n'existe pas de données sur la quantité maximale dans un groupe, car ces données ne sont valables que pour le groupe dans son ensemble, et non pour ses composants individuels.

En conséquence, il est maintenant nécessaire de calculer les totaux pour les groupements ci-dessus (« Entrepôts », « Types d'entrepôts ») et le total global.
Pour ce faire, utilisez la fonction CalculerExpressionAvecGroupArray :
ÉVALUER L'EXPRESSIONAVECGROUPARRAY (EVALEXPRESSIONAVECGROUPARRAY)
Syntaxe:
ÉvaluerExpressionWithGroupArray(,)
Description:
La fonction renvoie un tableau dont chaque élément contient le résultat de l'évaluation d'une expression pour le regroupement par le champ spécifié.
Le compositeur de mise en page, lors de la génération d'une mise en page, convertit les paramètres de fonction en termes de champs de mise en page de composition de données. Par exemple, le champ Compte sera converti en DataSet.Account.
Le générateur de mise en page, lors de la génération d'expressions pour la sortie d'un champ personnalisé dont l'expression contient uniquement la fonction CalculateArrayWithGroupArray(), génère l'expression de sortie afin que les informations de sortie soient ordonnées. Par exemple, pour un champ personnalisé avec l'expression :

CalculateExpressionWithGroupArray("Montant(AmountTurnover)", "Contrepartie")
Le générateur de mise en page générera l'expression suivante pour la sortie :

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

Possibilités :

Type : chaîne. L'expression à évaluer. Chaîne, par exemple, Amount(AmountTurnover).

Type : chaîne. Expressions de champs de regroupement – ​​expressions de champs de regroupement, séparées par des virgules. Par exemple, Entrepreneur, Partie.

Type : chaîne. Expression décrivant la sélection appliquée aux enregistrements de détail. L'expression ne prend pas en charge l'utilisation de fonctions d'agrégation. Par exemple, DeletionFlag = False.

Type : chaîne. Expression décrivant la sélection appliquée aux enregistrements de groupe. Par exemple, Montant (AmountTurnover) > &Paramètre1.
Exemple:

Maximum(CalculateExpressionWithGroupArray("Amount(AmountTurnover)", "Counterparty"));

Une description détaillée de la syntaxe de la fonction peut être trouvée sur http://its.1c.ru/db/v837doc#bookmark:dev:TI000000582
Maintenant, pour le calcul, nous dupliquons le champ « Ordre », avec différentes valeurs « Calculer par... », en utilisant les expressions suivantes, notons que dans chaque niveau supérieur les valeurs des niveaux inférieurs aux regroupements sont utilisées .

On obtient alors la construction suivante :

Connectez-vous au site en tant qu'étudiant

Connectez-vous en tant qu'étudiant pour accéder au matériel scolaire

Système de composition de données 1C 8.3 pour débutants : compter les résultats (ressources)

Le but de cette leçon sera :

  • Rédigez un rapport qui affiche une liste de produits (Répertoire alimentaire), leur teneur en calories et leur goût.
  • Regroupez les produits par couleur.
  • Découvrez la synthèse (ressources) et les champs calculés.

Créer un nouveau rapport

Comme dans les leçons précédentes, nous ouvrons la base de données " épicerie fine"dans le configurateur et créez un nouveau rapport via le menu" Déposer"->"Nouveau...":

Type de document - rapport externe:

Dans le formulaire de configuration du rapport, écrivez le nom " Lecon 3" et appuyez sur le bouton " Diagramme de composition de données ouvertes":

Laissez le nom du schéma par défaut et cliquez sur le bouton " Prêt":

Ajout d'une requête via le constructeur

Sur l'onglet " Base de données" Cliquez sur vert signe plus et sélectionnez " Ajouter un ensemble de données – Requête":

Au lieu d'écrire le texte de la requête manuellement, nous le réexécutons constructeur de requête:

Sur "l'onglet" les tables"faites glisser la table" Nourriture" de la première colonne à la seconde :

Sélectionnez dans le tableau " Nourriture"les champs que nous demanderons. Pour cela, faites glisser et déposez les champs" Nom", "Goût", "Couleur" Et " Teneur en calories" de la deuxième colonne à la troisième :

Cela s'est passé comme ceci :

Appuie sur le bouton " D'ACCORD" - le texte de la demande a été généré automatiquement :

Création des paramètres de présentation du rapport

Allez dans l'onglet " Paramètres" et cliquez sur baguette magique, appeler concepteur de paramètres:

Sélectionnez le type de rapport " Liste..." et appuyez sur le bouton " Plus loin":

Faites glisser de la colonne de gauche vers la droite les champs qui seront affichés dans la liste et cliquez sur « Plus loin":

Faites glisser de la colonne de gauche vers le champ de droite " Couleur" - cela va arriver regroupement lignes du rapport. Cliquez sur " D'ACCORD":

Et voici le résultat du travail du designer. Hiérarchie de notre rapport :

  • le rapport dans son ensemble
  • regroupement "Couleur"
  • entrées détaillées - lignes avec les noms des aliments

Enregistrez le rapport (bouton disquette) Et sans fermer Nous ouvrirons immédiatement le configurateur en mode utilisateur. Cela s'est passé comme ceci :

Changer l'ordre des colonnes

Mais allons changeons l'ordre colonnes (flèches haut et bas) pour que cela ressemble à la figure ci-dessous :

Sauvons le rapport et ouvrons-le à nouveau en mode utilisateur :

Super, c'est bien mieux.

Résumons la teneur en calories

Ce serait bien de résumer la teneur en calories des aliments par groupe. Pour voir la somme de la teneur en calories de tous les produits, par exemple blancs ou jaunes. Ou découvrez la teneur totale en calories de tous les produits dans la base de données.

A cet effet, il existe un mécanisme de calcul des ressources.

Allez dans l'onglet " Ressources"et faites glisser le champ" Teneur en calories"(nous allons le résumer) de la colonne de gauche vers la droite.

Dans ce cas, dans le champ, sélectionnez l'expression dans la liste déroulante " Quantité (calories)", puisque le total sera la somme de tous les éléments inclus dans le total :

Nous enregistrons et générons un rapport :

Nous disposons désormais de résultats pour chacun des groupes et pour le rapport dans son ensemble.

Résumons (moyenne) en termes de calories

Faisons-le maintenant apparaître dans une autre colonne moyenne teneur en calories des produits par groupes et dans le rapport dans son ensemble.

Vous ne pouvez pas toucher la colonne « Calories » existante : le total y est déjà affiché, donc créons un autre champ, qui sera une copie exacte du champ « Calorie ».

Pour créer un tel champ « virtuel », nous utiliserons le mécanisme champs calculés.

Allez dans l'onglet " Champs calculés" et appuyez sur vert signe plus :

Dans une chronique " Chemin de données"on écrit le nom du nouveau champ ( en toute transparence, sans espaces). Qu'il s'appelle " Teneur moyenne en calories", et dans la colonne " Expression"on écrit le nom d'un champ existant sur la base duquel le nouveau champ sera calculé. On y écrit " Teneur en calories". Colonne " Titre" sera renseigné automatiquement.

Nous avons ajouté un nouveau champ (" Teneur moyenne en calories"), mais il n'apparaîtra pas tout seul dans le rapport - vous devez soit rappeler concepteur de paramètres("baguette magique") ou ajoutez ce champ manuellement.

Faisons-le deuxième chemin. Pour cela, rendez-vous dans l'onglet " Paramètres", sélectionner " Rapport"(après tout, nous voulons ajouter le champ dans son ensemble au rapport), sélectionnez l'onglet en bas" Champs sélectionnés"et faites glisser le champ" Teneur moyenne en calories"de la colonne de gauche vers la droite :

Cela s'est passé comme ceci :

Nous enregistrons et générons un rapport :

Le champ est apparu et on voit que ses valeurs sont les valeurs du champ "Calorie". Super!

Pour ce faire, nous utiliserons à nouveau le mécanisme qui nous est déjà familier ressources(résumant). Allez dans l'onglet " Ressources"et faites glisser le champ" Teneur moyenne en calories"de la colonne de gauche vers la droite :

D'ailleurs, dans la colonne " Expression"choisir" Moyenne (calories moyennes)":

Nous enregistrons et générons un rapport :

On voit que pour les groupes, c'est-à-dire pour chaque couleur, et pour le rapport dans son ensemble, la valeur moyenne a été calculée de manière tout à fait correcte. Mais ils sont présents entrées supplémentaires pour les produits individuels (et non les groupes) que je souhaite supprimer du rapport.

Savez-vous pourquoi ils sont apparus (valeurs non par groupe) ? Parce que quand on a ajouté le champ " Teneur moyenne en calories"dans les paramètres du rapport, dans la deuxième étape, nous avons sélectionné l'intégralité du rapport et ce nouveau champ s'est retrouvé dans l'élément " Détaillé enregistrements".

Corrigeons l'erreur. Pour cela, retournez dans l'onglet " Paramètres", sélectionner " Entrées détaillées" d'abord par le haut (étape 2) puis " Entrées détaillées"par le bas (étape 3), allez dans le favori" Choisi des champs" et nous verrons dans sa colonne de droite l'élément " Auto".

Élément " Auto" - ce n'est pas un champ. Il s'agit de plusieurs champs qui tombent ici automatiquement en fonction de paramètres de niveau supérieur.

Pour voir quels sont ces champs, cliquez sur l'élément " Auto" droite et sélectionnez " Développer":

Élément " Auto" développé dans les domaines suivants :

Et voici notre terrain" Teneur moyenne en calories"qui est venu ici du point" Rapport"quand nous l'avons traîné là-bas. Juste supprimons cochez la case à côté de ce champ pour supprimer sa sortie.

La bonne utilisation d'un schéma de composition de données (DCS) permet de :

  • réduire considérablement le temps requis pour élaborer un rapport ;
  • éliminer le besoin de créer un gestionnaire de formulaire géré ;
  • obtenez un beau résultat avec possibilité de personnalisation supplémentaire par l'utilisateur.

Mais tous les développeurs ne tirent pas le meilleur parti des capacités du système, car tous ses paramètres ne sont pas évidents et intuitifs. En particulier, beaucoup de gens savent qu'il existe des champs calculés dans 1C SKD, mais ils ne comprennent pas pleinement la portée de leur utilisation et les méthodes de travail avec eux.

Qu'est-ce qu'un champ calculé

Dans la plupart des cas, la source de données dans le diagramme de présentation est une requête. En principe, dans la requête elle-même, vous pouvez déjà utiliser diverses formules, constructions et expressions. Une question naturelle se pose : pourquoi avons-nous besoin de fonctionnalités dupliquées ?

Le fait est que le système de contrôle d'accès est bien plus que simplement afficher le résultat d'une requête, et cela est clairement visible sur le formulaire de création de diagramme (Fig. 1).

Les champs calculés vous permettent d'effectuer certaines actions avec l'ensemble de données généré :

  • Génère un tableau de données reçues par une requête dans une cellule spécifique, combinant plusieurs lignes en une seule ;
  • Accéder aux fonctions d'export du module général ;
  • Exécutez les différentes expressions disponibles pour le langage de mise en page et utilisez les fonctions spéciales EvaluateExpression.

Passons en revue cette liste.

Tableau de valeurs dans une cellule

Simulons une situation où il est nécessaire de recevoir tous les numéros de documents de réception pour une contrepartie dans une cellule séparée :


Ainsi, nous avons créé un champ de calcul supplémentaire dans notre schéma ;


Comme vous pouvez le voir dans l'exemple ci-dessus, il n'y a aucune difficulté à ajouter et à traiter des champs calculés. Nous avons utilisé deux fonctions : Array() et ConnectRows().

Quelques mots sur ce dernier. En plus du premier paramètre indiquant l'identifiant du tableau, des valeurs ou une valeur, deux autres peuvent y être définis :

  1. Séparateur d'éléments – indique quel caractère séparera un élément du tableau ou une ligne d'un tableau de valeurs d'un autre (dans notre cas, nous avons omis ce paramètre et un saut de ligne a été attribué par défaut) ;
  2. Séparateur de colonnes – un caractère utilisé pour séparer les colonnes d'un tableau de valeurs (le point-virgule est utilisé par défaut).

Accéder aux fonctions d'export d'un module commun

Les fonctions d'un module commun peuvent servir de source de données pour remplir un champ calculé.

Quelques points importants :

  • La fonction doit être exportable ;
  • Si une fonction se trouve dans un module commun avec l'attribut « Global » défini, elle est appelée directement par son nom, sinon la fonction doit être appelée selon le schéma « Nom du module partagé ». "Nom de la fonction à appeler."

A titre d'exemple d'utilisation, nous prendrons la même demande de justificatifs de réception et l'afficherons dans une colonne séparée. Nous ne décrirons pas la requête elle-même ; passons directement aux champs calculés :


Ainsi, nous voyons que presque n'importe quel processeur de données peut être initialisé à partir du système de contrôle d'accès, ce qui élargit considérablement les possibilités d'utilisation du système.

Expressions du langage de mise en page

Très souvent, dans le travail d'un développeur, une situation se présente lorsqu'il est nécessaire d'afficher le résultat de la division dans le champ ACS :

  1. Calculer le coût moyen de l'article ;
  2. Toutes sortes d'intérêts ;
  3. Calculs des gains moyens, etc.

Pour éviter des problèmes, il est conseillé dans ces cas de saisir un test de division par 0 dans le champ calculé.

Cela peut être fait en utilisant la construction « Choix Quand….Puis… Sinon… Fin ».

Pour finir, quelques mots sur la fonction relativement nouvelle CalculateExpression(). Avec son aide, vous pouvez notamment calculer les écarts de coût entre les lignes actuelles et précédentes, le solde cumulé, etc.

Disons que vous pouvez obtenir le montant du document à partir de la ligne précédente de notre demande en spécifiant la valeur Calculer l'expression ("Montant du document", "Montant précédent") dans le champ "Expression".

1. Calculer (Évaluer)- est destiné à évaluer une expression dans le contexte d'un certain regroupement. La fonction est utilisée pour la compatibilité avec les versions précédentes de la plateforme. Il est recommandé d'utiliser plutôt la fonction CalculateExpression.

Syntaxe:
Calculer (Expression, Regroupement, Type de calcul)

Possibilités :

  • Expression(Doubler). Contient une expression calculée ;
  • Regroupement(Doubler). Contient le nom du regroupement dans le contexte duquel l'expression doit être évaluée. Si une chaîne vide est utilisée comme nom de regroupement, le calcul sera effectué dans le contexte du regroupement actuel. Si la chaîne GrandTotal est utilisée comme nom de groupe, le calcul sera effectué dans le contexte du total général. Dans le cas contraire, le calcul sera effectué dans le contexte du groupe parent du même nom.
    Par exemple:
    Somme(Sales.SumTurnover) / Calculer("Somme(Sales.SumTurnover)", "Total").
    Dans cet exemple, le résultat sera le rapport entre le montant du champ « Sales.AmountTurnover » de l'enregistrement de regroupement et le montant du même champ dans l'ensemble de la mise en page.
  • Type de calcul(Doubler). Si ce paramètre est défini sur "TotalTotal", l'expression sera calculée pour tous les enregistrements de regroupement. Si la valeur du paramètre est "Regroupement", les valeurs seront calculées pour l'enregistrement du groupe de regroupement en cours.
2. Évaluer l'expression (EvalExpression) - est destiné à évaluer une expression dans le contexte d'un certain regroupement. La fonction prend en compte la sélection des regroupements, mais ne prend pas en compte les sélections hiérarchiques. La fonction ne peut pas être appliquée à un regroupement dans la sélection de groupe de ce regroupement.

Syntaxe:
CalculateExpression (Expression, Regroupement, CalculationType, Début, Fin, Tri, HierarchicalSort, ProcessingIdenticalOrderValues)

Possibilités :

  • Expression(Doubler). Contient une expression calculée ;
  • Regroupement(Doubler). Contient le nom du regroupement dans le contexte duquel l'expression doit être évaluée. Si une chaîne vide est utilisée comme nom de regroupement, le calcul sera effectué dans le contexte du regroupement actuel. Si la chaîne GrandTotal est utilisée comme nom de groupe, le calcul sera effectué dans le contexte du total général. Dans le cas contraire, le calcul sera effectué dans le contexte du regroupement parent portant ce nom ;
  • Type de calcul(Doubler). Si ce paramètre est défini sur "TotalTotal", l'expression sera calculée pour tous les enregistrements de regroupement. Si la valeur du paramètre est "Regroupement", les valeurs seront calculées pour l'enregistrement du groupe de regroupement en cours. Si le paramètre est défini sur « Regroupement hors ressource », alors lors du calcul de la fonction pour un enregistrement de groupe par ressource, l'expression sera évaluée pour le premier enregistrement de groupe du regroupement d'origine. Lors de l'évaluation de la fonction CalculateExpression avec la valeur « GroupingNonResource » pour les enregistrements de groupe qui ne sont pas des regroupements par ressource, la fonction est évaluée de la même manière qu'elle le serait avec la valeur du paramètre « Grouping ». Le générateur de mise en page de composition de données, lors de la génération d'une mise en page de composition de données lors de la sortie d'un champ - une ressource par laquelle le regroupement est effectué, vers la mise en page, génère dans la mise en page une expression calculée à l'aide de la fonction CalculateExpression avec le paramètre "GroupingNon-Resource" spécifié. Pour les autres ressources regroupées par ressource, les expressions de ressources normales sont renvoyées. Si le paramètre est défini sur "Hiérarchie", alors l'expression doit être évaluée pour l'enregistrement hiérarchique parent, s'il existe, et pour l'ensemble du regroupement, s'il n'y a pas d'enregistrement hiérarchique parent. Le générateur de présentation, lors de la génération d'une expression pour le champ % dans le groupe hiérarchique, génère une expression contenant la relation entre l'expression de ressource et la fonction CalculateExpression pour l'expression de ressource en cours de calcul pour le regroupement actuel avec le type de calcul Hiérarchie.
  • Commencer. Indique à partir de quel enregistrement le fragment doit commencer, dans lequel les fonctions d'expression d'agrégat doivent être calculées et à partir de quel enregistrement obtenir les valeurs de champ en dehors des fonctions d'agrégat. Une chaîne contenant l'un des éléments suivants :
    • "D'abord" Il est nécessaire d'obtenir le premier enregistrement de regroupement. Après le mot entre parenthèses, vous pouvez préciser une expression dont le résultat sera utilisé comme décalage depuis le début du regroupement. La valeur résultante doit être un entier supérieur à zéro. Par exemple, First(3) – reçoit le troisième enregistrement depuis le début du regroupement. Si le premier enregistrement est en dehors du regroupement, alors on considère qu’il n’y a aucun enregistrement. Par exemple, s'il y a 3 enregistrements et que vous souhaitez obtenir First(4), alors on considère qu'il n'y a aucun enregistrement.
    • "Dernier" Vous devez obtenir le dernier enregistrement de regroupement. Après le mot entre parenthèses, vous pouvez spécifier une expression dont le résultat sera utilisé comme décalage par rapport à la fin du regroupement. La valeur résultante doit être un entier supérieur à zéro. Par exemple, Last(3) – reçoit le troisième enregistrement de la fin du groupe. Si le dernier enregistrement est en dehors du regroupement, alors on considère qu'il n'y a aucun enregistrement. Par exemple, s'il y a 3 enregistrements et que vous souhaitez obtenir Last(4), alors on considère qu'il n'y a aucun enregistrement.
    • "Précédent" Vous devez obtenir l'enregistrement de regroupement précédent. Après le mot entre parenthèses, vous pouvez spécifier une expression dont le résultat sera utilisé comme décalage par rapport à l'enregistrement de regroupement actuel. Par exemple, Précédent(2) – obtient le précédent à partir de l'enregistrement précédent. Si l'enregistrement précédent est en dehors du regroupement (par exemple, le deuxième enregistrement de regroupement nécessite l'obtention de Précédent(3)), alors le premier enregistrement de regroupement est obtenu. Lors de la réception de l'enregistrement précédent pour le total de regroupement, le premier enregistrement est obtenu.
    • "Suivant" Vous devez obtenir le prochain enregistrement de regroupement. Après le mot entre parenthèses, vous pouvez spécifier une expression dont le résultat sera utilisé comme décalage vers l'avant par rapport à l'enregistrement de regroupement actuel. Par exemple, Next(2) – obtenir le suivant à partir de l'enregistrement suivant. Si l'enregistrement suivant dépasse le regroupement, alors on considère qu'il n'y a aucun enregistrement. Par exemple, s'il y a 3 entrées et que la troisième entrée reçoit Next, alors on considère qu'il n'y a aucune entrée. Lorsque l'enregistrement suivant est reçu pour le total de regroupement, on considère qu'il n'y a pas d'enregistrement.
    • "Actuel". Vous devez obtenir l'enregistrement actuel. Lors de la récupération d'un total de regroupement, le premier enregistrement est obtenu.
    • "Valeur limite". La nécessité d'obtenir un enregistrement par la valeur spécifiée. Après le mot LimitingValue entre parenthèses, vous devez indiquer l'expression avec la valeur dont vous souhaitez démarrer le fragment, le premier champ de tri. Le premier enregistrement dont la valeur du champ de classement est supérieure ou égale à la valeur spécifiée sera renvoyé en tant qu'enregistrement. Par exemple, si le champ Période est utilisé comme champ de tri et qu'il a les valeurs 01/01/2010, 01/02/2010, 01/03/2010 et que vous souhaitez obtenir la valeur LimitingValue(DateTime(2010 , 1, 15)), on obtient alors un enregistrement avec la date 02/01. 2010.
  • Fin. Indique vers quel enregistrement le fragment doit être continué, dans lequel l'expression globale doit être calculée. Une chaîne contenant l'un des éléments suivants :
    • "D'abord"
    • "Dernier"
    • "Précédent"
    • "Suivant"
    • "Actuel".
    • "Valeur limite".
  • Tri. Chaîne qui répertorie les expressions, séparées par des virgules, dans le sens dans lesquelles la séquence doit être ordonnée. S'il n'est pas spécifié, le classement est effectué de la même manière que pour le regroupement pour lequel l'expression est évaluée. Après chaque expression, vous pouvez spécifier le mot-clé Ascending, pour trier par ordre croissant, Descending, pour trier par ordre décroissant, Auto-Ordering, pour trier les champs de référence selon les champs par lesquels vous souhaitez trier l'objet référencé. Le mot Ordre automatique peut être utilisé à la fois avec le mot Ascendant et le mot Descendant.
  • Tri hiérarchique. Semblable au tri. Utilisé pour organiser les enregistrements hiérarchiques. S’il n’est pas spécifié, le compositeur de mise en page génère l’ordre selon l’ordre spécifié dans le paramètre Sort.
  • Traitement des mêmes valeurs de commande. Une chaîne contenant l'un des éléments suivants :
    • « Ensemble » signifie qu'une séquence d'enregistrements ordonnés est utilisée pour déterminer les enregistrements précédents et suivants ;
    • « Séparément » signifie que les enregistrements précédents et suivants sont déterminés en fonction des valeurs des expressions de classement ;
    Par exemple, si la séquence résultante est classée par date :
    1. 01 janvier 2001 Ivanov M. 10
    2. 2 janvier 2001 Petrov S. 20
    3. 2 janvier 2001 Sidorov R. 30
    4. 3 janvier 2001 Petrov S. 40
    Lors de l'utilisation du traitement de valeurs identiques de l'ordre "Séparément", le précédent pour l'enregistrement 3 sera l'enregistrement 2, et lors de l'utilisation de "Ensemble" - l'enregistrement 1. Et le fragment de l'enregistrement actuel pour l'enregistrement 2 pour "Séparément" sera l'enregistrement 2, et pour "Ensemble" - les enregistrements 2 et 3. Ainsi, le total pour l'enregistrement actuel pour "Séparément" sera de 20 et pour "Ensemble" - 50. Lorsque "Ensemble" est spécifié dans les champs Début et Paramètres de fin, vous ne pouvez pas spécifier de décalage pour les positions « Premier », « Dernier », « Précédent », « Suivant ». La valeur par défaut est "Séparé".
Exemple:
Obtention du rapport entre le montant du champ "Sales.AmountTurnover" d'un enregistrement de regroupement et le montant du même champ dans l'ensemble du layout :
Somme(Sales.SumTurnover) / CalculateExpression("Sum(Sales.SumTurnover)", "Total").

Cet exemple calcule la valeur de la hiérarchie actuelle :
Choix
Lorsque Niveau() > 0
Puis EvaluateExpression("Référence", "Hiérarchie")
Sinon nul
Fin

Remarques:
La fonction prend en compte la sélection des regroupements, mais ne prend pas en compte les sélections hiérarchiques. La fonction ne peut pas être appliquée à un regroupement dans la sélection de groupe de ce regroupement. Par exemple, lors de la sélection du regroupement Nomenclature, vous ne pouvez pas utiliser l'expression CalculateExpression("Sum(SumTurnover)", "TotalTotal") > 1000 . Mais une telle expression peut être utilisée en sélection hiérarchique. Si l'enregistrement de fin précède l'enregistrement de début, on considère qu'il n'y a aucun enregistrement pour calculer les données détaillées et calculer les fonctions d'agrégation. Lors du calcul d'expressions d'intervalle pour un total général (le paramètre de regroupement est défini sur « GrossTotal »), il est supposé qu'il n'existe aucun enregistrement pour calculer les données détaillées et calculer les fonctions d'agrégation. Lors de la génération d'une expression pour la fonction CalculateExpression, le compositeur de mise en page, si l'expression de tri contient des champs qui ne peuvent pas être utilisés dans le regroupement, remplace la fonction CalculateExpression par NULL.

3. Évaluer l'expression avec un tableau de groupe (EvalExpression avec un tableau de groupe) - la fonction renvoie un tableau dont chaque élément contient le résultat du calcul d'une expression de regroupement par le champ spécifié.

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

Possibilités :

  • Expression(Chaîne) - l'expression à évaluer. Par exemple, « Montant (AmountTurnover) » ;
  • Groupes d'expressions de champs
  • Sélection des enregistrements
  • Sélection de regroupements- sélection appliquée aux enregistrements de groupe. Par exemple : "Montant (AmountTurnover) > &Paramètre1".
Exemple:
Maximum(CalculateExpressionWithGroupArray("Amount(AmountTurnover)", "Counterparty"));


Le générateur de mise en page, lors de la génération d'expressions pour l'affichage d'un champ personnalisé dont l'expression contient uniquement la fonction CalculateArrayWithGroup, génère l'expression d'affichage de sorte que les données affichées par les vues et les données soient ordonnées.
Par exemple, pour un champ personnalisé avec l'expression :
CalculateExpressionWithGroupArray("Montant(AmountTurnover)", "Contrepartie")
Le générateur de mise en page générera l'expression suivante pour la sortie :
ConnectRows(Array(Order(CalculateExpressionWithGroupingValueTable("View(Sum(DataSet.AmountTurnover)), Amount(DataSet.AmountTurnover)", "DataSet.Account"), "2")))

4. Calculer l'expression avec GroupValueTable (EvalExpressionWithGroupValueTable) - la fonction renvoie un tableau de valeurs dont chaque élément contient le résultat du calcul d'une expression de regroupement par le champ spécifié.

Syntaxe:
CalculateExpressionWithGroupValueTable (Expression, Expressions GroupField, Sélection d'enregistrements, Sélection de groupe)

Possibilités :

  • Expression(Chaîne) - l'expression à évaluer. Une ligne peut contenir plusieurs expressions séparées par des virgules. Après chaque expression, il peut y avoir un mot-clé facultatif AS et le nom de la colonne de la table de valeurs. Par exemple : « Contrepartie, montant (AmountTurnover) en tant que volume des ventes ».
  • Groupes d'expressions de champs- des expressions de champs de regroupement, séparées par des virgules. Par exemple, « Contrepartie, Partie » ;
  • Sélection des enregistrements- une expression appliquée aux enregistrements de détail. Par exemple, « Indicateur de suppression = Faux ». Si ce paramètre utilise une fonction d'agrégation, une erreur se produira lors de la composition des données ;
  • Sélection de regroupements- sélection appliquée aux enregistrements de groupe. Par exemple : "Montant (AmountTurnover) > &Paramètre1".
Exemple:
Calculer l'expression avec le tableau de regroupement des valeurs ("Compte AS Contrepartie, Montant (Montant Chiffre d'affaires) AS Volume des ventes", "Compte")

Le résultat de cette fonction sera un tableau de valeurs avec des colonnes Contrepartie et Volume des ventes, qui contiendra les contreparties avec leurs volumes de ventes.
Le compositeur de mise en page, lors de la génération d'une mise en page, convertit les paramètres de fonction en termes de champs de mise en page de composition de données. Par exemple, le champ Compte sera converti en DataSet.Account.
Par exemple, un champ personnalisé avec l'expression :
CalculateExpressionWithGroupValueTable("Compte, Montant(AmountTurnover)", "Compte")
Le générateur de mise en page générera l'expression suivante pour la sortie :
ConnectRows(GetPart(Order(CalculateExpressionWithGroupingValueTable("DataSet.Account, DataSet.AccountRepresentation, Sum(DataSet.AmountTurnover), View(DataSet.AmountTurnover), DataSet.OrderingField", "DataSet.Account"), "5, 1, 3" ), "2, 4"))

5. Niveau - la fonction est conçue pour obtenir le niveau d'enregistrement actuel.

Syntaxe:
Niveau()

Exemple:
Niveau()

6. Numéro de séquence - obtenez le prochain numéro de série.

Syntaxe:
NuméroParCommande()

Exemple:
NuméroParCommande()

7. Numéro de séquence dans le groupe - renvoie le numéro de séquence suivant dans le regroupement actuel.

Exemple:
NuméroParCommandeInGroup()

8. Formater - récupère une chaîne formatée de la valeur transmise.

Syntaxe:
Format(Valeur, FormatChaîne)

Possibilités :

  • Signification- l'expression à formater ;
  • Chaîne de format- la chaîne de format est définie conformément à la chaîne de format 1C:Enterprise.
Exemple:
Format(Factures.Doc Montant, "NPV=2")

9. Début de la période

Syntaxe:
Période de début (Date, Type de période)

Possibilités :

  • date(Date de). Date spécifiée ;
  • Type de période
Exemple:
PériodeDébut(DateHeure(2002, 10, 12, 10, 15, 34), "Mois")
Résultat : 10/01/2002 0:00:00

10. Fin de période - la fonction est conçue pour sélectionner une date précise à partir d'une date donnée.

Syntaxe:
FinPériode(Date, TypePériode)

Possibilités :

  • date(Date de). Date spécifiée ;
  • Type de période(Doubler). Contient l’une des valeurs suivantes : Minute ; Heure; Jour; Une semaine; Mois; Quart; Année; Décennie; Semestre.
Exemple:
FinPériode(DateHeure(2002, 10, 12, 10, 15, 34), "Semaine")
Résultat : 13/10/2002 23:59:59

11. AddKDate (DateAjouter) - la fonction est conçue pour ajouter une certaine valeur à la date.

Syntaxe:
AddToDate (Expression, IncrementType, Magnitude)

Possibilités :

  • Expression(Date de). Date originale ;
  • TypeGrossissement(Doubler). Contient l’une des valeurs suivantes : Minute ; Heure; Jour; Une semaine; Mois; Quart; Année; Décennie; Semestre.
  • Ordre de grandeur(Nombre). De combien la date doit être augmentée, la partie fractionnaire est ignorée.
Exemple:
AddToDate(DateTime(2002, 10, 12, 10, 15, 34), "Mois", 1)
Résultat : 12/11/2002 10:15:34

12. Différence de date - la fonction est conçue pour obtenir la différence entre deux dates.

Syntaxe:
DateDifférence(Expression1, Expression2, TypeDifférence)

Possibilités :

  • Expression1(Date de). Date soustraite ;
  • Expression2(Date de). Date originale ;
  • TypeDifférence(Doubler). Contient l’une des valeurs : Second ; Minute; Heure; Jour; Mois; Quart; Année.
Exemple:
DATEDIFFÉRENCE(DATETIME(2002, 10, 12, 10, 15, 34),
DATETIME(2002, 10, 14, 9, 18, 06), "JOUR")
Résultat : 2

13. Sous-chaîne - cette fonction est conçue pour extraire une sous-chaîne d'une chaîne.

Syntaxe:
Sous-chaîne (Chaîne, Position, Longueur)

Possibilités :

  • Doubler(Doubler). La chaîne à partir de laquelle la sous-chaîne est extraite ;
  • Position(Nombre). La position du caractère à partir duquel commence la sous-chaîne à extraire de la chaîne ;
  • Longueur(Nombre). Longueur de la sous-chaîne allouée.
Exemple:
SUBSTRING(Comptes.Adresse, 1, 4)

14. Longueur de chaîne - la fonction est conçue pour déterminer la longueur d'une chaîne.

Syntaxe:
ChaîneLongueur(Chaîne)

Paramètre :

  • Doubler(Doubler). Une chaîne dont la longueur est spécifiée.
Exemple:
Ligne (Contreparties.Adresse)

15. Année- cette fonction est conçue pour extraire l'année d'une valeur de type Date.

Syntaxe:
Année (Date)

Paramètre :

  • date(Date de). La date à laquelle l'année est déterminée.
Exemple:
ANNÉE (Dépense.Date)

16. Trimestre - cette fonction est conçue pour extraire le numéro du trimestre d'une valeur de type Date. Le nombre de quarts varie normalement de 1 à 4.

Syntaxe:
Trimestre (Date)

Paramètre :

  • date(Date de). La date à laquelle le trimestre est déterminé
Exemple:
TRIMESTRE (Dépense.Date)

17. Mois - cette fonction est conçue pour extraire le numéro du mois d'une valeur de type Date. Le numéro du mois varie normalement de 1 à 12.

Syntaxe:
Mois (Date)

Paramètre :

  • date(Date de). La date à laquelle le mois est déterminé.
Exemple:
MOIS(Dépense.Date)

18. Jour de l'année (DayOfYear) - cette fonction est conçue pour obtenir le jour de l'année à partir d'une valeur de type Date. Le jour de l'année varie normalement de 1 à 365 (366).

Syntaxe:
Jour de l'année (Date)

Paramètre :

  • date(Date de). La date à laquelle le jour de l'année est déterminé.
Exemple:
ANNÉEJOUR(DépenseCompte.Date)

19. Jour- cette fonction est conçue pour obtenir le jour du mois à partir d'une valeur de type Date. Le jour du mois va normalement de 1 à 31.

Syntaxe:
Jour(Date)

Paramètre :

  • date(Date de). La date à laquelle le jour du mois est déterminé.
Exemple:
JOUR(Dépense.Date)

20. Semaine - cette fonction est conçue pour obtenir le numéro de semaine de l'année à partir d'une valeur de type Date. Les semaines de l'année sont numérotées à partir de 1.

Syntaxe:
Semaine (Date)

Paramètre :

  • date(Date de). Date à laquelle les numéros de semaine sont déterminés.
Exemple:
SEMAINE(Dépense.Date)

21. Jour de la semaine - cette fonction est conçue pour obtenir le jour de la semaine à partir d'une valeur de type Date. Le jour normal de la semaine va de 1 (lundi) à 7 (dimanche).

Syntaxe:
Jour de la semaine (Date)

Paramètre :

  • date(Date de). La date à laquelle le jour de la semaine est déterminé.
Exemple:
JOUR DE LA SEMAINE (Dépense.Date)

22. Heure- cette fonction est conçue pour obtenir l'heure du jour à partir d'une valeur de type Date. L'heure du jour varie de 0 à 23.

Syntaxe:
Heure (Date)

Paramètre :

  • date(Date de). La date à laquelle l'heure du jour est déterminée.
Exemple:
HEURE(Dépense.Date)

23. Minutes - cette fonction est conçue pour obtenir la minute de l'heure à partir d'une valeur de type Date. Les minutes de l'heure vont de 0 à 59.

Syntaxe:
Minutes (Date)

Paramètre :

  • date(Date de). La date à laquelle la minute de l'heure est déterminée.
Exemple:
MINUTE (Dépense.Date)

24. Deuxième - cette fonction est conçue pour obtenir la seconde d'une minute à partir d'une valeur de type Date. La seconde d'une minute va de 0 à 59.

Syntaxe:
Deuxième (Date)

Paramètre :

  • date(Date de). La date à laquelle les secondes de la minute sont déterminées.
Exemple:
DEUXIÈME(Dépense.Date)

25. Casting - cette fonction est conçue pour extraire un type d'une expression pouvant contenir un type composé. Si l'expression contient un type autre que le type requis, NULL sera renvoyé.

Syntaxe:
Express(Expression, TypeIndication)

Possibilités :

  • Expression- expression à convertir ;
  • Type Indication(Doubler). Contient une chaîne de type. Par exemple, "Nombre", "Chaîne", etc. En plus des types primitifs, cette ligne peut contenir le nom de la table. Dans ce cas, une tentative sera faite pour exprimer une référence au tableau spécifié.
Exemple:
Express(Data.Props1, "Nombre(10,3)")

26. EstNull (EstNull) - cette fonction renvoie la valeur du deuxième paramètre si la valeur du premier paramètre est NULL. Sinon, la valeur du premier paramètre sera renvoyée.

Syntaxe:
EstNull(Expression1, Expression2)

Possibilités :

  • Expression1- valeur à vérifier ;
  • Expression2- valeur de retour si Expression1 est NULL.
Exemple:
OuiNULL(Montant(Sales.AmountTurnover), 0)

27.ACos- calcule l'arc cosinus en radians.

Syntaxe:
ACos(Expression)

Paramètre :

  • Expression(Nombre). La valeur du cosinus (dans la plage -1 ... 1) par laquelle l'angle est déterminé.
28.ASin- calcule l'arc sinus en radians.

Syntaxe:
ASin(Expression)

Paramètre :

  • Expression(Nombre). La valeur sinusoïdale (dans la plage -1 ... 1) par laquelle l'angle est déterminé.
29.ATan- calcule l'arctangente en radians.

Syntaxe:
ATan(Expression)

Paramètre :

  • Expression(Nombre). La valeur de la tangente par laquelle l'angle est déterminé.
30.Cos- calcule le cosinus.

Syntaxe:
Cos(Expression)

Paramètre :

  • Expression
31. Expérience- élever le nombre e à une puissance.

Syntaxe:
Exp(Expression)

Paramètre :

  • Expression(Nombre). La signification du diplôme.
32.Journal- calcule le logarithme népérien.

Syntaxe:
Journal (expression)

Paramètre :

  • Expression
33.Journal10- calcule le logarithme de X en base 10.

Syntaxe:
Journal10 (expression)

Paramètre :

  • Expression(Nombre). Le nombre d'origine est supérieur à 0.
34. Pouvoir- exponentiation.

Syntaxe:
Puissance (base, indicateur)

Possibilités :

  • Base(Nombre). La base de l'opération d'exponentiation.
  • Indice(Nombre). Exposant.
35. Péché- calcule le sinus.

Syntaxe:
Péché (expression)

Paramètre :

  • Expression(Nombre). Spécifié en radians.
36. SQL- calcule la racine carrée.

Syntaxe:
SQL (expression)

Paramètre :

  • Expression(Nombre). Nombre non négatif.
37. bronzage- calcule la tangente.

Syntaxe:
Bronzage (expression)

Paramètre :

  • Expression(Nombre). La valeur sinusoïdale par laquelle l'angle est déterminé.
38. Rond- arrondit le nombre d'origine à la profondeur de bits requise. Le mode d'arrondi est standard (1,5 comme 2).

Syntaxe:
Env (Expression, Profondeur de bits)

Possibilités :

  • Expression(Nombre). Numéro d'origine ;
  • Peu profond(Nombre). Le nombre de décimales à arrondir.
39. Int- coupe la partie fractionnaire d'un nombre.

Syntaxe:
Objet (Expression)

Paramètre :

  • Expression(Nombre). Un nombre fractionnaire.
40. Fonctions des modules communs

Une expression de moteur de composition de données peut contenir des appels à des fonctions de modules de configuration communs globaux. Aucune syntaxe supplémentaire n'est requise pour appeler de telles fonctions.

Exemple:
Nom abrégé (Documents.Link, Documents.Date, Documents.Number)

Dans cet exemple, la fonction "AbbreviatedName" sera appelée depuis le module de configuration générale.
Notez que l'utilisation des fonctions communes du module n'est autorisée que si le paramètre approprié du processeur de composition de données est spécifié.
De plus, les fonctions des modules communs ne peuvent pas être utilisées dans les expressions de champs personnalisés.

41. Ressentiment - cette fonction renvoie une représentation sous forme de chaîne de la valeur transmise d'un type non primitif. Pour les valeurs de type primitif, renvoie la valeur elle-même.

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

Exemple:
Présentation (Contrepartie)

42. Chaîne - cette fonction convertit la valeur transmise en chaîne.

Si un tableau ou une table de valeurs est utilisé comme paramètre, la fonction renvoie une chaîne contenant une représentation sous forme de chaîne de tous les éléments du tableau, séparés par les caractères "; ". Si un élément a une représentation sous forme de chaîne vide, alors la chaîne "<Пустое значение>".

Exemple:
Ligne (Date de vente)

43. ValueImpled

Pour les valeurs NULL, Undefined renvoie toujours False.
Pour les valeurs booléennes, elle renvoie toujours True.
Pour les autres types, renvoie True si la valeur diffère de la valeur par défaut pour le type donné.

Exemple:
ValueFilled (Date de livraison)

44. NiveauDansGroupe - cette fonction obtient le niveau d'enregistrement actuel par rapport au regroupement.

Peut être utilisé pour obtenir le niveau d'imbrication d'un enregistrement dans un regroupement hiérarchique.

Exemple:
NiveauDansGroupe()

45. Type de valeur

Syntaxe:
Type de valeur (Expression)

Paramètre :

  • Expression(Doubler). Type de valeur de chaîne.
Renvoie une valeur de type Type contenant le type de valeur du paramètre de fonction.