Maison / Maîtriser le PC / Champ calculé en SKD 1s 8.3. Exemples d'utilisation de la fonction scd - calculez une expression. Travailler avec une valeur NULL

Champ calculé en SKD 1s 8.3. Exemples d'utilisation de la fonction scd - calculez une expression. Travailler avec une valeur NULL

À la lumière de la prochaine version 8.2.14, je vais essayer de décrire quelques nouvelles fonctions du système de composition de données.

Ouvrez le diagramme de présentation des données, de préférence dans un rapport externe, pour faciliter la modification.

Nous ajoutons un ensemble de données de type requête et écrivons, soit manuellement, soit à l'aide du concepteur de requêtes, une requête simple :

1. Configurez une demande dans le système de contrôle d'accès.

2. Configurer les champs calculés dans le système de contrôle d'accès

3. Configurez la disposition des données dans l'onglet Paramètres

4. Lancez 1C Entreprise 8.2.14. Ouvrez le rapport. On forme, on reçoit.

Description des nouvelles fonctions elles-mêmes :

1. La date actuelle()

Renvoie la date du système. Lors de la composition d'une mise en page, dans toutes les expressions présentes dans la mise en page, la fonction CurrentDate() est remplacée par la valeur de la date actuelle.

2. COMPUTEEXPRESSION()

Syntaxe:

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

Description:

La fonction est conçue pour é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. Par exemple, dans la sélection du groupe 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 Grouping est défini sur GrandTotal), 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.

Possibilités

<Выражение>

Type : chaîne. L'expression à évaluer.

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

Type : chaîne. 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)/Calculate("Somme(Sales.SumTurnover)", "Total")

Dans cet exemple, le résultat sera le rapport entre le montant du champ Sales.SumTurnover de l'enregistrement de regroupement et le montant du même champ dans l'ensemble de la mise en page ;

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

Type : chaîne. Le paramètre peut prendre les valeurs suivantes :

  • GeneralTotal : l'expression sera calculée pour tous les enregistrements de regroupement.
  • Hiérarchie - L'expression sera é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.
  • Regroupement - l'expression sera évaluée pour l'enregistrement de regroupement actuel.
  • Regroupement hors ressource - lors du calcul d'une fonction pour un enregistrement de groupe par ressource, l'expression sera évaluée pour le premier enregistrement de groupe du regroupement d'origine.

Lors du calcul d'une fonction CalculerExpression() avec la valeur Regroupement sans ressources pour les enregistrements de groupe qui ne sont pas des regroupements de ressources, la fonction est calculée de la même manière qu'elle le serait si la valeur du paramètre était égale à la valeur de Regroupement.

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 de ressource par lequel le regroupement est effectué vers la mise en page, place une expression dans la mise en page qui est calculée à l'aide de la fonction CalculerExpression(), indiquant le paramètre Non-Regroupement de ressources. Pour les autres ressources, les expressions de ressources habituelles sont placées dans le groupe de ressources.

<Начало>

Type : chaîne. 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. La valeur peut être l'une des suivantes :

<Конец>

Type : chaîne. Indique vers quel enregistrement le fragment doit être continué, dans lequel les fonctions globales de l'expression doivent être calculées. La valeur peut être l'une des suivantes :

  • 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 préciser 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 le 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 dépasse le regroupement (par exemple, pour le deuxième enregistrement de regroupement, vous devez obtenir Précédent(3), alors le premier enregistrement de regroupement est obtenu.

Lors de la récupération de l'enregistrement précédent pour un total de regroupement, on considère que 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 enregistrements et que Next() est reçu pour le troisième enregistrement, alors on considère qu'il n'y a aucun enregistrement.

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 LimitingValues ​​​​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)), alors un enregistrement avec la date 02/01 sera obtenu.

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

Type : chaîne. Répertorie les expressions, séparées par des virgules, qui décrivent les règles de classement. 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 les mots-clés Ascending (pour trier par ordre croissant), Descending (pour trier par ordre décroissant) et AutoOrder (pour trier les champs de référence en fonction des champs selon 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.

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

Type : chaîne. Identique à l’option Trier. 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.

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

Type : chaîne. Spécifie la règle permettant de déterminer l'enregistrement précédent ou suivant au cas où il existe plusieurs enregistrements avec la même valeur de classement :

  • Séparément signifie qu'une séquence d'enregistrements ordonnés est utilisée pour déterminer les enregistrements précédents et suivants. Valeur par défaut.
  • Ensemble 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 :

date Nom et prénom Signification
1 01 janvier 2001 Ivanov M. 10
2 02 janvier 2001 Petrov S. 20
3 03 janvier 2001 Sidorov R. 30
4 04 janvier 2001 Petrov S. 40

Si la valeur du paramètre est Séparément, alors :

§ l'entrée précédente à l'entrée 3 sera l'entrée 2.

§ si le fragment de calcul est défini comme Current, Current (respectivement les paramètres Start et End), alors pour l'enregistrement 2 ce fragment sera constitué d'un enregistrement 2. L'expression CalculateExpression(“Sum (Value)”, Current, Current) sera être égal à 20.

Si la valeur du paramètre est Ensemble, alors :

§ l'entrée précédente à l'entrée 3 sera l'entrée 1.

§ si le fragment de calcul est défini comme Current, Current (respectivement les paramètres Start et End), alors pour l'enregistrement 2 ce fragment sera constitué des enregistrements 2 et 3. L'expression CalculateExpression(« Somme (Valeur) », Current, Current) sera égal à 50.

Lorsque vous spécifiez une valeur de paramètre égale à Together, dans les paramètres Début et Fin, vous ne pouvez pas spécifier de décalage pour les positions Premier, Dernier, Précédent et Suivant.

CalculateExpression("Sum(SumTurnover)", "Premier", "Actuel")

Si vous souhaitez obtenir la valeur de regroupement de la ligne précédente, vous pouvez utiliser l'expression suivante :

CalculerExpression(« Taux », « Précédent »)

Liste nouveau les fonctions:

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

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é.

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

La fonction renvoie un tableau de valeurs dont chaque ligne contient le résultat de l'évaluation des expressions pour le regroupement par le champ spécifié.

ValeurRemplie(<Выражение>) – Renvoie True si la valeur est autre que la valeur par défaut de ce type, autre que NULL, autre qu'une référence vide, autre qu'Indéfini. Les valeurs booléennes sont testées pour NULL. Les chaînes sont vérifiées pour l'absence de caractères autres que des espaces

Format(<Выражение>, <Форматная строка>) – Recevez une chaîne formatée de la valeur transmise. La chaîne de format est définie conformément à la chaîne de format du système 1C:Enterprise.

Sous-chaîne(<Выражение>, <Начальные символ>, <ДлинаПодстроки>) – Cette fonction est conçue pour extraire une sous-chaîne d’une chaîne.

Longueur de la ligne(<Выражение>) – La fonction est conçue pour déterminer la longueur d’une chaîne. Paramètre - expression de chaîne

Doubler(<Выражение>) – Si un tableau est passé en paramètre, la fonction renvoie une chaîne contenant des représentations sous forme de chaîne de tous les éléments du tableau, séparés par les caractères « ; « . Si une table de valeurs est passée en paramètre, la fonction renvoie une chaîne contenant les représentations sous forme de chaîne de toutes les lignes de la table de valeurs, avec les représentations de cellules de chaque ligne séparées par les caractères « ; ", et les lignes sont un symbole de saut de ligne. Si un élément a une représentation sous forme de chaîne vide, alors la chaîne est affichée à la place de sa représentation<Пустое значение>.

Nous avons examiné en détail les paramètres des rapports mis en œuvre sur la base du système de contrôle d'accès. Examinons maintenant les paramètres plus subtils et détaillés des options de rapport. La fenêtre des paramètres « avancés » de l'option de rapport est appelée par la commande « Plus » - « Autre » - « Modifier l'option de rapport ».

La fenêtre de modification de la version du rapport est divisée en deux parties :

1. Structure du rapport.

2. Paramètres du rapport.


La section Structure des options de rapport est similaire à l'onglet « Structure » ​​des paramètres de rapport standard. L'objectif et la configuration des groupements sont abordés en détail dans la première partie de l'article.

Le tableau de structure des variantes d'état, en plus de la colonne réelle avec les regroupements, contient plusieurs colonnes supplémentaires :

La section des paramètres des options de rapport offre à l'utilisateur de nombreuses possibilités de configurer le rapport en fonction de ses besoins. Cela coïncide presque complètement avec les paramètres de rapport standard abordés dans la première partie. Examinons tous les onglets de la section et notons les différences.

La section des paramètres comprend les onglets suivants :

1. Paramètres. Contient les paramètres ACS disponibles pour l'utilisateur.

Le paramètre SKD est une valeur utilisée pour obtenir des données de rapport. Il peut s'agir d'une valeur de condition pour sélectionner ou vérifier des données, ainsi que d'une valeur auxiliaire.


Le tableau des paramètres est présenté au format « Paramètre » - « Valeur ». Si nécessaire, vous pouvez modifier les valeurs des paramètres. Cliquer sur le bouton « Propriétés de l'élément de paramètres personnalisés » ouvre les paramètres personnalisés de l'élément.


Dans cette fenêtre, vous pouvez choisir si l'élément sera inclus dans les paramètres utilisateur (c'est-à-dire visible par l'utilisateur lors de la création d'un rapport), définir le mode de présentation et d'édition de l'élément (accès rapide dans l'en-tête du rapport, normal dans l'en-tête du rapport). paramètres de rapport et inaccessible).

Les propriétés des éléments de paramètres personnalisés comportent également des champs, des marges, des sélections et des éléments d'apparence conditionnelle pouvant être regroupés.

2. Champs personnalisés. Contient des champs générés par l'utilisateur lui-même en fonction des données sélectionnées par le rapport.


L'utilisateur peut ajouter deux types de champs :

  • Nouveau champ de sélection...
  • Nouveau champ d'expression...

Les champs de sélection vous permettent de calculer une valeur en fonction d'une condition donnée. La fenêtre d'édition du champ de sélection contient un titre de champ et un tableau dans lequel sont précisées la sélection, la valeur et la présentation du champ. La sélection est une condition en fonction de laquelle la valeur souhaitée sera substituée.


Par exemple, calculons une estimation du nombre de ventes. Nous supposerons que si moins de 10 unités d'un produit sont vendues, nous avons vendu un peu, et si plus de 10 unités, nous avons vendu beaucoup. Pour ce faire, nous fixerons 2 valeurs pour le champ calculé : la première sera avec la sélection « Nombre de marchandises Inférieur ou égal à « 10 » », la seconde avec la sélection « Nombre de marchandises Supérieur à « 10 » "".

Les champs d'expression vous permettent de calculer une valeur à l'aide d'algorithmes arbitraires. Ils peuvent utiliser les fonctions du langage de requête et du langage de programmation 1C intégré. La fenêtre d'édition du champ d'expression contient deux champs pour les expressions d'enregistrements détaillés et récapitulatifs. Les enregistrements de totaux sont des regroupements configurés dans la zone « Structure du rapport » ; ils doivent utiliser des fonctions d'agrégation (« Somme », « Minimum », « Maximum », « Quantité »).

Par exemple, calculons le pourcentage de remise moyen. Le pourcentage de remise moyen est calculé à l'aide de la formule : [Montant des ventes sans remise] - [Montant des ventes avec remise] / [Montant des ventes sans remise]. Il est important de se rappeler que le montant des ventes sans remise peut être nul, nous utilisons donc l'opérateur SELECT pour vérifier. On obtient les expressions suivantes :

· Pour les entrées détaillées :

Choix

Lorsque [Montant des ventes sans remise] = 0

Puis 0

Sinon [Montant des ventes sans remise] - [Montant des ventes avec remise] / [Montant des ventes sans remise]

Fin

· Pour les comptes rendus sommaires :

Choix

Lorsque Montant([Montant des ventes sans remise]) = 0

Puis 0

Sinon Somme([Montant des ventes sans remise]) - Somme([Montant des ventes avec remise]) / Somme([Montant des ventes sans remise])

Fin

Comme mentionné précédemment, pour exprimer le total des enregistrements, nous utilisons la fonction d'agrégation « Somme ».

3. Champs regroupables. Contient des champs selon lesquels les résultats de la variante de rapport seront regroupés. Les champs groupés sont configurés séparément pour chaque regroupement, mais vous pouvez définir des champs groupés généraux pour une option de rapport si vous sélectionnez la racine « Rapport » dans l'arborescence de la structure. Vous pouvez ajouter un champ à partir du résultat du rapport, un champ personnalisé ou sélectionner un champ automatique, puis le système sélectionnera automatiquement les champs. Cet onglet vous permet également de modifier l'ordre des champs regroupés.


4. Champs. Contient les champs qui seront édités suite à la variante d'état. Les champs sont configurés séparément pour chaque groupe, mais vous pouvez définir des champs communs pour une option de rapport si vous sélectionnez la racine « Rapport » dans l'arborescence de la structure. Vous pouvez ajouter un champ à partir du résultat du rapport, un champ personnalisé ou sélectionner un champ automatique, puis le système sélectionnera automatiquement les champs. Cet onglet vous permet également de modifier l'ordre des champs.

Les champs peuvent être regroupés pour mettre en évidence logiquement n'importe quelle partie du rapport ou pour spécifier une disposition particulière des colonnes. Lors de l'ajout d'un groupe, la colonne « Localisation » devient active et permet de sélectionner l'une des options de localisation :

  • Auto : le système place les champs automatiquement ;
  • Horizontal - les champs sont positionnés horizontalement ;
  • Vertical - les champs sont disposés verticalement ;
  • Dans une colonne séparée - les champs sont situés dans des colonnes différentes ;
  • Ensemble - les champs sont situés dans une seule colonne.


5. Sélection. Contient les sélections utilisées dans la variante du rapport. La configuration des sélections a été abordée en détail dans la première partie de cet article. Les filtres sont configurés séparément pour chaque groupe, mais vous pouvez définir des filtres généraux pour une option de rapport si vous sélectionnez la racine « Rapport » dans l'arborescence de la structure.


6. Tri. Contient les champs de tri utilisés dans la variante du rapport. La configuration des champs de tri a été abordée en détail dans la première partie de cet article. Le tri est configuré séparément pour chaque regroupement, mais vous pouvez définir des champs de tri généraux pour une option de rapport si vous sélectionnez la racine « Rapport » dans l'arborescence de la structure.


7. Inscription conditionnelle. Contient des éléments de conception conditionnels utilisés dans la variante du rapport. La configuration de l’apparence conditionnelle a été abordée en détail dans la première partie de cet article. L'apparence conditionnelle est configurée séparément pour chaque groupe, mais vous pouvez définir des éléments généraux d'apparence conditionnelle pour une option de rapport si vous sélectionnez la racine « Rapport » dans l'arborescence de la structure.


8. Paramètres supplémentaires. Contient des paramètres de conception de rapport supplémentaires. Permet de sélectionner l'apparence générale du rapport, l'emplacement des champs, les regroupements, les détails, les ressources, les totaux, de définir les paramètres du graphique, de contrôler l'affichage du titre, des paramètres et de la sélection, de déterminer la position des ressources et de fixer l'en-tête et le regroupement. colonnes de la version du rapport.


En conclusion, je voudrais noter que les paramètres du rapport peuvent non seulement être enregistrés en tant qu'option de rapport, mais également téléchargés dans un fichier (menu « Plus » - « Enregistrer les paramètres »). Pour télécharger, vous devez sélectionner « Charger les paramètres » et sélectionner le fichier enregistré. Ainsi, nous pouvons transférer les paramètres des variantes de rapport entre différentes bases de données ayant la même configuration.


Sur cette base, nous pouvons résumer que l'utilisateur peut non seulement personnaliser indépendamment le rapport en fonction de ses besoins, mais également enregistrer ses paramètres et les utiliser à l'avenir si nécessaire.

Schéma de disposition des données (1C SKD)- un concepteur pratique pour créer des rapports complexes dans les produits logiciels 1C:Enterprise qui contribuent au développement et au suivi de l'automatisation de la production, permettant de les rendre aussi flexibles et beaux que possible en un minimum de temps. Un avantage supplémentaire du schéma de composition des données (1C SKD) est la génération automatique d'un formulaire de rapport contrôlé, et avec le développement ultérieur de ce domaine, il s'agit d'un facteur important lors du choix d'une méthode d'élaboration d'un rapport. Mais en raison de la complexité de la structure du schéma de composition des données (1C SKD) et du grand nombre de paramètres, cela conduit souvent à un développement du rapport plus long que via le « concepteur de formulaire de sortie ». Par conséquent, un programmeur 1C doit comprendre toutes les subtilités du schéma de composition des données (1C DCS) afin d'accélérer encore le temps de développement pour la génération de rapports.

Examinons les trois premiers onglets du schéma de composition des données (1C SKD) - ensemble de données, connexions d'ensembles de données et champs calculés.

Ensemble de données dans 1C SKD

L'ensemble de données inclut la possibilité de créer trois objets - une requête, un objet et une union, examinons chacun d'eux de plus près :

Il s'agit d'une requête standard générée à l'aide du bouton Query Builder. Si l'indicateur de remplissage automatique est activé, tous les détails sélectionnés seront automatiquement inclus dans les champs de l'ensemble de données. Il est également possible de personnaliser le remplissage des champs de la requête dans l'onglet Composition des données, où se trouvent trois onglets :

Tableaux, ici sont sélectionnées les tables qui participeront à la génération du rapport, généralement les données par défaut sont sélectionnées, puisque sur l'onglet Tables et Champs nous avons déjà sélectionné les documents, répertoires, registres dont nous avons besoin...

Champs, ici nous sélectionnons les objets qui doivent être inclus dans le rapport, le drapeau enfants indique s'il y aura ou non des éléments enfants accessibles pour l'objet, il est logique que pour les données de chaîne, numériques et similaires, il ne sera pas possible de définir le drapeau à True.

Conditions, nous sélectionnons ici les objets qui peuvent être utilisés sous conditions dans le système de contrôle d'accès.

Une partie du travail est effectuée dans le schéma de composition des données, et une autre partie est effectuée par programme ; regardons un exemple simple :

Tout d'abord, nous allons créer un schéma de mise en page pour la mise en page des données du document et l'appeler SKD (par exemple : 1C SKD), nous y créons un objet d'ensemble de données, puis nous remplissons les champs, par exemple, nous avons un document avec une partie tabulaire des marchandises avec des détails - nomenclature, quantité et prix.

Ajoutons trois champs et remplissons chaque colonne avec le nom des détails, les colonnes restantes seront remplies automatiquement :

Créons un bouton sur le formulaire de document et décrivons le mécanisme de fonctionnement dans les formulaires contrôlés :

&SurClient

Procédure Imprimer()

NotreRapport = PrintOnServer(); // appelle la fonction sur le serveur

NotreReport.Show(); //afficher le rapport généré

Fin de la procédure

&Sur le serveur

Fonction PrintOnServer()

DocumentObject = FormAttributeValue("Objet");

//nous plaçons la partie tabulaire Produits dans une structure avec le nom ProductsSKD de la même manière que nous avons indiqué dans le SKD lui-même le nom de l'objet contenant les données

DataSet = nouvelle structure ;

DataSet.Insert("ProductsSKD", DocumentObject.Products);

//nous obtenons notre mise en page et définissons les paramètres par défaut afin que tous les paramètres de sortie du rapport soient extraits de notre mise en page

OurLayout = DocumentObject.GetLayout("SKD");

Paramètres = OurLayout.DefaultSettings ;

//créer une mise en page des données avec nos paramètres

LayoutLinker = newDataLayoutLayoutLinker ;

LayoutLayout = LayoutComposer.Execute(OurLayout, Paramètres);

//effectuer une composition de données avec notre ensemble de données

DataCompositionProcessor = newDataCompositionProcessor ;

DataCompositionProcessor.Initialize(LayoutLayout, DataSet);

//Nous créons une feuille de calcul et y affichons notre rapport

ReportDocument = Nouveau TabularDocument ;

OutputProcessor = Nouveau OutputProcessorDataCompositionResultInTabularDocument ;

OutputProcessor.SetDocument(ReportDocument);

OutputProcessor.Output(DataCompositionProcessor);

Retourner le rapport de document ;

FinFonction

Si vous le souhaitez, vous pouvez obtenir des zones de n'importe quelle autre mise en page et également les afficher dans ce rapport, par exemple, nous avons une mise en page standard pour générer un ordre de paiement et l'en-tête y est très bien créé, alors, pour ne pas faire travail inutile, nous allons d'abord obtenir la mise en page, afficher l'en-tête, puis nous générerons et afficherons notre rapport sur le système de contrôle d'accès.

À PROPOS unification

Nous pouvons y placer nos requêtes et nos objets, mais contrairement à une connexion, cela ajoute simplement des tables les unes aux autres, c'est-à-dire que si nous connectons deux tables identiques, nous nous retrouverons avec une seule, et une fois combinée, elle doublera, regardons sur un exemple simple :

Nous avons des tableaux :

Dès communication, nous recevrons :

Et une fois combinés :

Voyons maintenant comment remplir les colonnes des ensembles de données (nous en sauterons certaines, car elles sont connectées à d'autres onglets ; nous y reviendrons dans de prochains articles) :

- champ, indiquez le nom général de l'attribut ;

­­- chemin, indiquez le nom des détails par lesquels nous y ferons référence dans le système de contrôle d'accès, par exemple, dans Champs calculés;

- titre, indiquez le nom de l'attribut qui sera affiché dans le rapport ;

- limitation du champ, indiquer la disponibilité de cette condition requise;

- restriction des détails, nous indiquons la disponibilité des éléments enfants, il est important que si la disponibilité des détails est indiquée, alors le champ lui-même sera disponible, peut-être que cette mécanique sera modifiée dans les versions futures ;

- expression par laquelle la représentation du champ est calculée, il est pratique à utiliser lorsque nous devons modifier légèrement la sortie des détails, par exemple, nous avons besoin après le nom nomenclature a été affiché action, où il se trouve, puis remplissez ce qui suit : Article + « est dans l'entrepôt » + Entrepôt. Je répète que l'accès aux coordonnées s'effectue via le nom indiqué dans la colonne chemin;

- ordre des expressions, un mécanisme pratique pour configurer l'ordre des rapports, où la condition peut être définie manuellement, similaire au point précédent, mais comme le montre la pratique, ce mécanisme ne fonctionne souvent pas comme nous le souhaiterions, et je vous conseille d'utiliser le tri standard ;

- type de valeur, indique le type de valeur de l'attribut ; celui-ci doit être renseigné si vous utilisez le champ suivant ;

- valeurs disponibles, ne fonctionne que lorsqu'il est plein type de valeur, ouvrez le formulaire de remplissage et dans la colonne Signification nous indiquons l'élément qui doit être modifié, selon le type, il peut s'agir d'objets prédéfinis ou numériques, par exemple, les détails ont des valeurs simples, en présentation Nous indiquons ce vers quoi nous devons changer, un exemple de type booléen :

- décor– les paramètres de format de champ standard, similaires aux paramètres des formulaires gérés, vous permettent de configurer plus précisément et plus joliment la sortie de certains détails.

Connexions d'ensembles de données dans 1C SKD

Installé uniquement ici joint gauche, sur un principe similaire à Connexions dans les demandes, dans source de communication spécifiez la table principale pour la connexion, dans destinataire supplémentaire. DANS source d'expression Et récepteur d'expression Nous indiquons les détails par lesquels la communication aura lieu. Nous examinerons les colonnes restantes plus en détail lorsque nous examinerons l'onglet. Possibilités. S'il n'y a pas de connexion supplémentaire avec les paramètres, il est alors recommandé d'effectuer la connexion dans la demande, cela accélérera le rapport.

À la lumière de la prochaine version 8.2.14, je vais essayer de décrire quelques nouvelles fonctions du système de composition de données.

Ouvrez le diagramme de présentation des données, de préférence dans un rapport externe, pour faciliter la modification.

Nous ajoutons un ensemble de données de type requête et écrivons, soit manuellement, soit à l'aide du concepteur de requêtes, une requête simple :

1. Configurez une demande dans le système de contrôle d'accès.

2. Configurer les champs calculés dans le système de contrôle d'accès

3. Configurez la disposition des données dans l'onglet Paramètres

4. Lancez 1C Entreprise 8.2.14. Ouvrez le rapport. On forme, on reçoit.

Description des nouvelles fonctions elles-mêmes :

1. La date actuelle()

Renvoie la date du système. Lors de la composition d'une mise en page, dans toutes les expressions présentes dans la mise en page, la fonction CurrentDate() est remplacée par la valeur de la date actuelle.

2. COMPUTEEXPRESSION()

Syntaxe:

CalculerExpression(,)

Description:

La fonction est conçue pour é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. Par exemple, en sélectionnant le groupe Nomenclature, vous ne pouvez pas utiliser l'expression CalculerExpression("Somme(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 Grouping est défini sur GrandTotal), il est supposé qu'il n'existe aucun enregistrement pour calculer les données détaillées et calculer les fonctions d'agrégation.

Editeur de liens de mise en page lors de la génération d'une expression de fonction CalculerExpression, si l'expression de tri contient des champs qui ne peuvent pas être utilisés dans le regroupement, remplace la fonction CalculerExpression sur NUL.

Possibilités

Taper: Doubler. L'expression à évaluer.

Taper: 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 GeneralTotal 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)/Calculate("Somme(Sales.SumTurnover)", "Total")

Dans cet exemple, le résultat sera le rapport de la somme par champ Sales.AmountTurnover regrouper les enregistrements à la somme du même champ dans l'ensemble de la mise en page ;

Taper: Doubler. Le paramètre peut prendre les valeurs suivantes :

· total— l'expression sera calculée pour tous les enregistrements de regroupement.

· Hiérarchie— l'expression sera é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.

· Regroupement— l'expression sera évaluée pour l'enregistrement de regroupement de groupe actuel.

· GroupingNonResource— lors du calcul d'une fonction pour un enregistrement de groupe par ressources, l'expression sera calculée pour le premier enregistrement de groupe du regroupement d'origine.

Lors du calcul d'une fonction CalculerExpression() avec du sens GroupingNonResource pour les enregistrements de groupe qui ne sont pas regroupés par ressources, la fonction est calculée de la même manière qu'elle le serait si la valeur du paramètre était égale à la valeur Regroupement.

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 de ressource par lequel le regroupement est effectué vers la mise en page, place une expression dans la mise en page qui est calculée à l'aide de la fonction CalculerExpression() , indiquant le paramètre GroupingNonResource. Pour les autres ressources, les expressions de ressources habituelles sont placées dans le groupe de ressources.

Taper: Doubler. 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. La valeur peut être l'une des suivantes :

· D'abord

· Dernier (Dernier)

· Précédent

· Suivant Suivant)

· Actuel

· Valeur Limitante(Valeur limite) Valeur Limitante

Taper: Doubler. Indique vers quel enregistrement le fragment doit être continué, dans lequel les fonctions globales de l'expression doivent être calculées. La valeur peut être l'une des suivantes :

· 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 (Dernier). Vous devez obtenir le dernier 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 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 dépasse le regroupement (par exemple, pour le deuxième enregistrement de regroupement, vous devez obtenir Précédent(3)), alors le premier enregistrement de regroupement est obtenu.

Lors de la récupération de l'enregistrement précédent pour un total de regroupement, on considère que le premier enregistrement est obtenu.

· Suivant 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 Limitante(Valeur limite). La nécessité d'obtenir un enregistrement par la valeur spécifiée. Après le mot Valeur Limitante entre parenthèses, vous devez indiquer l'expression avec la valeur de laquelle vous souhaitez commencer 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 Valeur Limite (DateHeure (2010, 1, 15)), alors un enregistrement avec la date du 01/02/2010 sera reçu.

Taper: Doubler. Répertorie les expressions, séparées par des virgules, qui décrivent les règles de classement. 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 un mot-clé Âge(pour commander par ordre croissant), Descendant(pour commander par ordre décroissant) et Commande automatique(pour classer les champs de référence selon les champs selon lesquels vous souhaitez classer l'objet référencé). Mot Commande automatique peut être utilisé comme avec le mot Âge, donc avec le mot Descendant.

Taper: Doubler. Identique au paramètre Tri. Utilisé pour organiser les enregistrements hiérarchiques. S'il n'est pas spécifié, le générateur de mise en page génère l'ordre selon l'ordre spécifié dans le paramètre Tri.

Taper: Doubler. Spécifie la règle permettant de déterminer l'enregistrement précédent ou suivant au cas où il existe plusieurs enregistrements avec la même valeur de classement :

· Séparément indique qu'une séquence d'enregistrements ordonnés est utilisée pour déterminer les enregistrements précédents et suivants. Valeur par défaut.

· Ensemble indique 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 :

date Nom et prénom Signification
1 01 janvier 2001

Ivanov M.

10
2 02 janvier 2001 Petrov S. 20
3 03 janvier 2001 Sidorov R. 30
4 04 janvier 2001 Petrov S. 40

Séparément, Que:

§ l'entrée précédente à l'entrée 3 sera l'entrée 2.

Actuel, Actuel(en conséquence, les paramètres Commencer Et Fin), alors pour l'enregistrement 2 ce fragment sera constitué d'un enregistrement 2. L'expression sera égale à 20.

Si la valeur du paramètre est Ensemble, Que:

§ l'entrée précédente à l'entrée 3 sera l'entrée 1.

§ si le fragment de calcul est défini comme Actuel, Actuel(en conséquence, les paramètres Commencer Et Fin), alors pour l'enregistrement 2, ce fragment sera constitué des enregistrements 2 et 3. Expression CalculerExpression("Somme(Valeur)", Actuel, Actuel) sera égal à 50.

Lors de la spécification d'une valeur de paramètre égale à Ensemble, en paramètres Commencer Et Fin vous ne pouvez pas spécifier de décalage pour les positions Premier, Dernier, Précédent, Suivant.

CalculateExpression("Somme(SumTurnover)", "Premier", "Actuel")

Si vous souhaitez obtenir la valeur de regroupement de la ligne précédente, vous pouvez utiliser l'expression suivante :

CalculerExpression("Taux", "Précédent")

Liste nouveau les fonctions:

CalculerExpressionAvecGroupArray(,) -

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é.

CalculateExpressionWithGroupValueTable(,) -

La fonction renvoie un tableau de valeurs dont chaque ligne contient le résultat de l'évaluation des expressions pour le regroupement par le champ spécifié.

ValeurRemplie() - Renvoie True si la valeur est autre que la valeur par défaut de ce type, autre que NULL, autre qu'une référence vide, autre qu'Indéfini. Les valeurs booléennes sont vérifiées pour les valeurs NULL. Les chaînes sont vérifiées pour l'absence de caractères autres que des espaces

Format(, ) - Recevoir une chaîne formatée de la valeur transmise. La chaîne de format est définie conformément à la chaîne de format du système 1C:Enterprise.

Sous-chaîne(, , ) - Cette fonction est conçue pour extraire une sous-chaîne d'une chaîne.

Longueur de la ligne() - La fonction est conçue pour déterminer la longueur d'une chaîne. Le paramètre est une expression de chaîne

Doubler() - Si un tableau est passé en paramètre, la fonction renvoie une chaîne contenant des représentations sous forme de chaîne de tous les éléments du tableau, séparés par des caractères ";". Si une table de valeurs est passée en paramètre, la fonction renvoie une chaîne contenant des représentations sous forme de chaîne de toutes les lignes de la table de valeurs, avec les représentations de cellules de chaque ligne séparées par des caractères ";" et les lignes par une nouvelle ligne. personnage. Si la représentation sous forme de chaîne d'un élément est vide, alors une chaîne est affichée à la place de sa représentation.

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 est entré 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.