Contacts

Fonctionnalités de création de rapports (1Cv8). Création de rapport étape par étape

Afin d'éviter des commentaires du type « c'est aussi une découverte pour moi ! », je fais une réserve tout de suite : l'article est destiné aux développeurs ACS inexpérimentés, ceux qui le savent déjà n'ont pas à exprimer leur « wow ! », comprenez que ce qui est évident pour vous ne l’est pas toujours pour les autres.

Pour représenter visuellement la mise en œuvre de certaines astuces, j'ai réalisé de petits flans sous forme de circuits ACS externes. J'ai essayé de faire des descriptions d'astuces et des captures d'écran afin que l'essence et la technique de mise en œuvre de l'astuce soient claires sans qu'il soit nécessaire de télécharger des diagrammes. Pour certains, cela suffira amplement, mais si quelque chose n'est pas clair, vous pouvez toujours télécharger le schéma correspondant et voir directement la mise en œuvre.

Astuce n°1. Les nombreux visages du bon sens.

Alors, pour nous échauffer, commençons par quelque chose de plus simple. Dans des mécanismes ACS tels que "Sélection" ou "Formatage conditionnel", vous avez probablement rencontré les colonnes "Champ" (ou "Valeur gauche") et "Valeur" (ou "Valeur droite"). Les professionnels connaissent probablement cette astuce, mais il n'est pas toujours facile pour les débutants de deviner que le champ de composition des données peut être utilisé aussi bien à gauche qu'à droite (c'est-à-dire comparer non seulement des valeurs fixes données, mais également d'autres champs ACS au sein du même doubler). Pour cela, il suffit de passer en mode édition dans le champ de valeur de droite, de cliquer sur le bouton d'effacement de la valeur ("dick"), puis de cliquer sur le bouton de sélection de type qui apparaît (la lettre "T") et de sélectionner le "Champ de composition des données". taper.

Exemple.
A titre d'exemple, je n'ai pas réinventé la roue, mais j'ai pris le bilan le plus courant pour le compte 60 de la version démo de 1C : Comptabilité (j'utilise l'édition 2.0.). Pour ceux qui ne le savent pas, à partir de la version 2.0, ce rapport a été réalisé sur la base du système de contrôle d'accès.

Alors, définissons directement une sélection pour les lignes avec la condition « BU Dt (chiffre d'affaires) » Égal à « BU Kt (chiffre d'affaires) », et appliquons également une mise en forme conditionnelle au rapport, en surlignant en jaune les cellules des lignes où « BU Kt (solde de clôture) " Plus "BU Kt (chiffre d'affaires)". Si quelqu'un ne sait pas comment activer le panneau Apparence, recherchez le bouton « Options du panneau d'options » à droite de la légende « Panneau de paramètres ».

Le résultat final devrait ressembler à ceci :

Astuce n°2. Sélection de groupe.

Tout le monde sait ce qu'est la sélection dans ACS, mais tout le monde ne sait pas qu'elle peut être utilisée non seulement pour le rapport dans son ensemble, mais également pour des groupements individuels de lignes et de colonnes. Il existe de nombreux problèmes appliqués à l’utilisation d’un tel outil. Par exemple, les détails conditionnels (restriction pour quels groupements de niveau supérieur afficher les détails et pour lesquels non), ou les détails variables (affichage de différents décodages pour différentes valeurs des groupements de niveau supérieur). Sur l'un des projets UPP, par exemple, il était nécessaire de créer un formulaire de calcul des coûts avec une structure fixe (un ouvrage de référence séparé) et pour différents éléments de coût d'afficher les transcriptions soit par éléments de coût, soit par coûts spécifiques, ou de ne pas afficher rien. Grâce à cette astuce, je n’ai pas eu à abandonner le système de contrôle d’accès lors de l’élaboration du rapport.

Exemple.
Le but de l'exemple : afficher SALT, dans lequel pour les comptes de règlement mutuel (60,62,76) affichent une répartition par contrepartie, et pour les comptes de coûts (20,23,25,26) - par poste de coût.

Le système de contrôle d'accès lui-même est mis en œuvre sous la forme d'un ensemble de données, où une requête est utilisée pour le tableau virtuel des soldes et du chiffre d'affaires du registre comptable « Comptabilité analytique ».
Nous plaçons les groupes imbriqués « Organisation » et « Compte ». Dans le groupe « Compte », nous plaçons en parallèle 2 groupes « Subconto1 » et « Subconto2 », pour lesquels nous définissons les sélections appropriées.
Je fournis une illustration des paramètres dans la capture d'écran :


Si dans les paramètres principaux du rapport sur l'onglet « Autres paramètres », vous n'avez pas désactivé la sortie des sélections, cela devra certainement être fait dans les « autres paramètres » de nos groupements « Subconto1 » et « Subconto2 ».

Astuce n°3. Chapeau invisible

Le tour suivant peut être considéré comme une continuation du précédent. Si vous avez remarqué, dans le rapport résultant, malgré le fait qu'en fait un seul sous-conto soit affiché, les deux (à la fois « Subconto1 » et « Subconto2 ») sont inclus dans l'en-tête. Malheureusement, les développeurs d'ACS n'ont pas prévu la possibilité d'ajuster la visibilité de l'en-tête ou d'utiliser une sorte de symbole de service qui, s'il est défini comme en-tête, ne créerait pas d'en-tête de champ. Mais, comme vous l'avez probablement déjà deviné, il existe une astuce qui permettra dans une certaine mesure de contourner cette limitation.

Lors du développement d'un schéma dans une présentation de conception prédéfinie, ajoutez une présentation de regroupement, définie par le nom de groupe « Invisible », comme indiqué dans la capture d'écran. Attention, le champ « Région » doit rester vide !

Et puis définissez le nom « Invisible » pour le groupe « Subconto2 » :

Et voilà... le chapeau du groupe "Subkonto2" disparaît, et le rapport devient ainsi :

Vous vous demandez peut-être pourquoi la mise en page de conception est spécifiée par le nom, et non par la spécification d'un champ de regroupement spécifique ? C'est simplement ainsi qu'une solution plus universelle est obtenue, et par la suite ce nom de groupe peut être défini dans les options du rapport pour n'importe quel groupe, mais la modification de la mise en page prédéfinie dans les options ne fonctionnera plus.

Oui, il y a encore une nuance à cette astuce : gardez à l'esprit que le « chapeau d'invisibilité » couvre non seulement ce groupe, mais aussi tous les groupes inférieurs ! Ceux. Si vous attribuez le nom « Invisible » au groupe « Subconto1 », alors ni « Subconto1 » ni « Subconto2 » ne seront visibles dans l'en-tête !

Astuce n°4. Appelle-moi comme tu veux

La plupart des développeurs ACS savent comment définir l'en-tête du champ de requête. Dans l'onglet "Ensembles de données" d'ACS, cochez simplement la case Annuler le titre automatique et saisissez le texte requis dans le champ "Titre". L'inconvénient est qu'en mode utilisateur cette méthode n'est pas disponible, et vous souhaitez renommer l'en-tête sans recourir à l'aide du configurateur. Ainsi, dans les paramètres des options du rapport, il existe non seulement un moyen de renommer les en-têtes de champs, mais également de les « couvrir » avec un « en-tête » de regroupement. Pour cela, dans l'onglet « Champs sélectionnés », sélectionnez les champs obligatoires et cliquez sur le bouton droit de la souris. Comme vous pouvez le voir sur la capture d'écran, les options « Définir le titre » et « Champs de groupe » sont disponibles pour les champs.
Veuillez noter que pour regrouper des champs, le paramétrage du titre doit également se faire via l'onglet « Champs sélectionnés », et non via le menu contextuel « Définir le nom » dans la partie supérieure (structurelle) des paramètres des variantes !



Après tous les paramètres, la version du rapport ressemble à ceci :



P.S.
Un petit indice pour ceux qui téléchargeront le schéma. Il n'existe qu'un seul schéma, mais toutes les astuces sont réalisées sous la forme d'options distinctes pour les paramètres de rapport de ce schéma :

À suivre...

Lors de la création de rapports à l'aide d'un système de composition de données (DCS), il est pratique d'afficher les paramètres du rapport (au moins les plus fréquemment utilisés) sur le formulaire, afin de ne pas obliger l'utilisateur à se plonger dans la fenêtre des paramètres DCS standard.

Voyons comment cela peut être fait à l'aide de formulaires 1C classiques. Faisons immédiatement une réserve que dans cet article nous considérerons exactement la sortie des paramètres dans le formulaire, c'est-à-dire les paramètres eux-mêmes dans le système de contrôle d'accès doivent déjà être créés.

Il existe deux manières d'afficher les paramètres ACS sous une forme régulière :

  • sortie de l'ensemble du tableau de paramétrage
  • sortie de paramètres individuels sous forme de champs de saisie.

Le tableau de paramétrage affiché sur le formulaire est similaire au tableau de paramétrage généré par les outils ACS. Pour l'afficher sur le formulaire vous devez créer un élément de contrôle Champ tabulaire, qui a la propriété Données indiquer Paramètres Composer.Settings.Data Options

Dans ce cas, l'utilisateur verra apparaître tous les paramètres du système de contrôle d'accès qui n'ont pas de restriction de disponibilité.

Cependant, dans certains cas, cette méthode peut sembler moins esthétique et peu conviviale. Voyons comment afficher séparément les paramètres ACS sur un formulaire sous la forme de champs de saisie normaux.

  1. Créons les détails du rapport correspondant aux paramètres. Dans notre exemple, ce seront les détails Date de début, date de fin, organisation. Définissons les types de données appropriés pour eux.
  2. Créons des champs de saisie sur le formulaire pour chacun des paramètres et connectons-les via la propriété Données avec les détails du rapport. Pour chaque champ de saisie, il serait bien de créer une étiquette à côté avec le nom du paramètre afin que l'utilisateur comprenne quel paramètre il édite.
  3. Pour chaque champ de saisie, vous devez créer une procédure pour le gestionnaire d'événements Quand ça change, qui définira la valeur sélectionnée par l'utilisateur sur les paramètres ACS. Dans l'exemple, j'ai créé une procédure et lui ai attribué la modification des événements des trois champs de saisie. Autrement dit, lorsqu'un paramètre change, les trois sont réinitialisés. Du point de vue des performances, ce n'est probablement pas efficace, mais... Il n'y a pas beaucoup de paramètres, la différence n'est pas perceptible. S'il existe un grand nombre de paramètres, il vaut la peine de définir chacun d'eux dans une procédure distincte. Donc, le code de procédure pour le gestionnaire Quand ça change ressemblera à ceci :

    Paramètres de procédureOnChange (élément)

    ParamètreStartDate = ParamètresLinker. Paramètres. Paramètres de données. Éléments. Rechercher("Début de la période"); //La recherche est effectuée par le nom du paramètre ACS
    ParamètreStartDate Utilisation = Vrai ; //Le paramètre sera utilisé lors de la sélection
    ParamètreStartDate Valeur = Date de début ; //Le paramètre reçoit la valeur de l'attribut du rapport

    ParameterDataCon = LinkerSettings. Paramètres. Paramètres de données. Éléments. Rechercher("FinPériode");
    ParamètreDateCon. Utilisation = Vrai ;
    ParamètreDateCon. Valeur = EndDay(EndDate) ;

    ParameterOrg = BuilderSettings. Paramètres. Paramètres de données. Éléments. Rechercher("Organisation");
    ParamètreOrg. Utilisation = Vrai ;
    ParamètreOrg. Valeur = Organisation ;

    Fin de la procédure

Presque tous les paramètres disponibles dans les boîtes de dialogue des paramètres d'impression (paramètres de l'imprimante, propriétés de la page) peuvent être spécifiés directement lors de la génération d'un tableur.

Regardons les propriétés et méthodes d'un tableur liées aux paramètres d'impression (dans les exemples donnés, « TabDoc » est un objet de type « Spreadsheet Document »).

Propriété "Nom de l'imprimante" Vous permet de spécifier une imprimante autre que celle par défaut pour l'impression. Le nom doit correspondre au nom de l'imprimante configuré sur le système :

TabDoc.PrinterName="Canon iR1133";

Lors de l'impression d'un lot de documents, vous pouvez gagner du temps en définissant l'option de classement :

TabDoc.ParsingByCopies=True ;

Le nombre de copies peut être précisé comme suit :

TabDoc.Nombre d'instances = 5 ;

Bien entendu, vous pouvez paramétrer les champs :

TabDoc.MarginLeft=20 ; //Marge gauche 20 mm, autres marges 10 mm (par défaut)

Quelques propriétés de page supplémentaires :

TabDoc.PageOrientation=PageOrientation.Landscape; TabDoc.InstancesOnPage=2 ; //la feuille contiendra 2 pages TabDoc.Autoscale=true; //similaire aux paramètres d'échelle « largeur de page »

Si nécessaire, vous pouvez spécifier une valeur de mise à l'échelle spécifique en pourcentage (propriété "Échelle d'impression" ).

Propriété "Taille de la page" vous permet de définir des formats de page standard – « A3 », « A4 », « A5 » (une liste complète des options est disponible dans l'aide 1C).

TabDoc.PageSize="A3"; // la lettre A doit être en anglais

Pour un format de papier non standard (Personnalisé), vous pouvez spécifier la hauteur et la largeur de la page (en mm) :

TabDoc.PageSize="Custom";//taille non standard TabDoc.PageHeight=350; TabDoc.PageWidth=350 ;

Également dans une feuille de calcul, vous pouvez contrôler la sortie des en-têtes et des pieds de page ainsi que leur contenu. Cela se fait en utilisant les propriétés "En-tête de page" Et "Bas de page". Par exemple:

TabDoc.Header.Output=true ; //l'en-tête TabDoc sera imprimé.HeaderSizeTop=7; //taille du pied de page 7 mm (10 mm par défaut) TabDoc.Header.VerticalPosition=VerticalPosition.Top; TabDoc.Header.StartPage=2;//l'en-tête est dérivé de la deuxième pageHeaderFont=New Font("Courier New", 8,True); TabDoc.Header.Font=En-têteFont; //police italique TabDoc.Header.TextInCenter="Header"; TabDoc.Header.TextRight="Page[&PageNumber] sur [&PagesTotal]"; //numérotation des pages TabDoc.Header.TextLeft="[&Date]";//date actuelle

Le document généré est envoyé pour impression selon la méthode "Taper()". Il existe deux options d'achat possibles.

1) Directement à l’imprimeur :

TabDoc.Print(PrintDialogUseMode.NotUse); TabDoc.Print(true);

2) Avant l'impression, une boîte de dialogue d'impression s'affichera :

TabDoc.Print(PrintDialogUseMode.Use); TabDoc.Print(faux);

De plus, vous pouvez contrôler la façon dont le document est divisé en pages. Vous pouvez estimer le nombre de pages d'un document en fonction des paramètres actuels de l'imprimante :

TabDoc.Nombre de pages();

Utiliser des méthodes "Vérifier la sortie()" Et "VérifierAttach()" Vous pouvez déterminer si une feuille de calcul ou un ensemble de zones de feuille de calcul s'adaptera à la page en hauteur et en largeur avec les paramètres actuels de l'imprimante.

Il convient de garder à l'esprit que le fonctionnement des trois dernières méthodes dépend de l'imprimante installée. Si la méthode ne le trouve pas, une exception est levée.

Des méthodes permettent de forcer l'insertion de sauts de page "SortieVerticalPageSeparator()" Et "SortieHorizontalPageSeparator()" .

Ainsi, vous pouvez contrôler l'impression page par page et contrôler le remplissage des pages :

Si ce n'est pas le cas, TabDoc.CheckOutput(ArrayOutputAreas) Then TabDoc.OutputHorizontalPageSeparator(); Fin si

Une caractéristique importante de la plateforme 1C:Enterprise 8.2 est la stricte séparation des propriétés et des méthodes par contexte d'exécution. Bien que toutes les propriétés ci-dessus soient disponibles dans n'importe quel contexte, les méthodes répertoriées ne sont pas disponibles sur le client léger. L'exception est la méthode « Print() », dont la disponibilité est limitée à la partie client pour des raisons évidentes. Cela signifie que la création d'une feuille de calcul doit avoir lieu sur le serveur et qu'elle doit être envoyée pour impression dans une procédure client.

Aujourd'hui, nous allons chercher à résoudre un problème intéressant - afficher des images dans un rapport.

A quoi cela peut-il être utile ?

Ici quelques exemples:

  • Liste de prix avec photos des produits et logo en en-tête
  • Profils d'employés avec photos
  • Rapprochement des calculs avec cachet et signature au sous-sol
  • Rapports/formulaires imprimés avec impression numérisée

Dans la vidéo, nous discutons également formation du programme faire rapport à SKD. Cette méthode de génération de rapports est utilisée dans les configurations standards– c'est une autre raison de le regarder attentivement :)

Dispositions prédéfinies dans ACS

À l’aide de présentations prédéfinies, vous pouvez remplacer la présentation standard du rapport.

Dans cette leçon, en plus de poser le problème, nous considérerons :

  • Stockage de données binaires dans une configuration de modèle
  • Possibilité d'utiliser les mises en page ACS pour afficher les images

Génération programmatique d'un rapport sur le système de contrôle d'accès

Pour résoudre le problème de l'affichage des images dans un rapport sur le système de contrôle d'accès, il est nécessaire de le générer par programme.

C'est lors de la génération d'un rapport par programmation qu'il est possible d'accéder aux données binaires.

Au cours de cette leçon, nous ferons :

  • Sortie du résultat de la mise en page dans une feuille de calcul
  • Utilisation de l'objet Données de décryptage
  • Récupération de données binaires de la base de données
  • Création programmatique de dessins dans un tableur

Afficher une image dans le rapport ACS

Dans cette leçon, nous effectuons les dernières étapes : nous affichons les données binaires précédemment obtenues dans un rapport.

Pour ce faire, un dessin est ajouté à une feuille de calcul, après quoi il est affiché dans le rapport.

La polyvalence de l'algorithme de sortie d'image

L'algorithme de sortie d'image développé est universel : l'algorithme continue de fonctionner indépendamment de tout changement dans la structure du rapport.

En fait, c'est ce que nous allons prouver dans cette leçon.

De plus, nous considérerons la fonctionnalité de génération de rapport d'arrière-plan sur le système de contrôle d'accès (génération d'un rapport à l'aide de tâches de routine).

Afficher une image dans l'en-tête du rapport

Vous devez souvent afficher une image statique dans l’en-tête ou le pied de page d’un rapport.

Cela semble être une tâche simple, mais dans le cas de l'ACS, vous devez savoir comment la résoudre :

  • Étape 1. Générer un rapport par programme
  • Étape 2. Créez une mise en page distincte avec l'en-tête ou le pied de page souhaité
  • Étape 3. Avant de remplir le rapport ACS, affichez une section avec les données nécessaires.

Cette vidéo montre clairement la solution au problème.

Bon visionnage ! :)

Ces derniers jours, nous publions des documents sur ACS.

Que se passe-t-il si le programmeur/implémenteur 1C ne connaît pas le système de contrôle d'accès ? Peut-être que ce n'est vraiment pas si important ?

Ok, regardons ce qui attend un spécialiste qui rédige des rapports « à genoux » (par exemple, en utilisant la sortie manuelle vers un tableur).

Ne tirez pas sur le pianiste, il joue du mieux qu'il peut.

Les rapports sont pratiquement dans toutes les configurations standards basé sur SKD.

Pour un spécialiste sans connaissances en CDS, finaliser des rapports standards devient une loterie - pourquoi et comment tel ou tel chiffre est affiché dans le rapport, comment ajouter de nouvelles sources, où éditer les chiffres calculés dans le code...

SKD – norme de reporting dans les configurations standards, et 1C n'écrit pas de commentaires basés sur ceux qui n'ont pas encore étudié les normes :)

Putain de temps...

Sans système de contrôle d’accès, l’élaboration des rapports se fait en grande partie manuellement.

C'est bien sûr cool de sortir comme Rambaud avec un tournevis dans les dents et de faire un peu comme tout le monde :)

Par conséquent - coûts de main-d'œuvre importants pour le développement et le débogage des rapports. Et cela alarmera au moins n'importe quel manager/client : "étrange, mais comprend-il vraiment cela ??"

Et lorsqu’il s’agit de réviser ultérieurement le rapport, cela devient souvent un casse-tête (surtout s’il s’agit du rapport de quelqu’un d’autre)…

Voyages de développement chez les clients pour modifier le regroupement dans le rapport

SKD vous permet de recevoir rapports de qualité sans programmation. Le squelette est en cours de réalisation pour quelques minutes, puis – s'incline.

Et les utilisateurs peuvent personnaliser ces rapports sans impliquer un programmeur, générez plusieurs options de présentation - tableaux, graphiques, listes, tableaux.

Pour atteindre une telle polyvalence dans les rapports créés par programmation, impossible dans un délai raisonnable.

Par conséquent - appelez, tramez, allons-y... C'est une telle croissance professionnelle pour un surnom 1C...

« Tu n'as pas le même, mais avec des boutons en nacre ? « Malheureusement, non… » (c)

Que se passe-t-il si certaines données doivent être obtenues à partir d'un autre système - à partir d'une autre base de données 1C ou pas du tout à partir de 1C ?

À l'aide du système de contrôle d'accès, vous pouvez créer un rapport qui fonctionne avec les données actuelles sur la sécurité des informations et reçoit des données d'une autre source - aucune programmation requise.

Sans systèmes de contrôle d'accès, les données externes seront obtenues par programme et non de la manière la plus triviale.

Si tu veux maîtriser ACS professionnellement et quotidiennement appliquer dans votre travail, inscrivez-vous au cours :

Soutien - 2 mois. Portée du cours – 34 heures de cours.

Ne retardez pas vos études !

Créons un rapport externe qui affichera des informations de rapport sur les soldes des articles et leur chiffre d'affaires. Les informations requises sont demandées par la requête à l'aide d'un ensemble de données de type « Demande », qui contient le texte de la requête :
CHOISIR
_DemoNomenclature.Link COMMENT Nomenclature
LIEUNomenclature actuelle
DEPUIS
Directory._DemoNomenclature COMMENT FAIRE _DemoNomenclature

NOT _DemoNomenclature.Deletion Mark
ET NON _DemoNomenclature. Ceci est un groupe
;

////////////////////////////////////////////////////////////////////////////////
CHOISIR
Nomenclature actuelle.Nomenclature,
_DémoRestes de marchandises dans les lieux de stockageRestes et chiffres d'affaires.Lieu de stockage,
_DemoRemaining GoodsIn Storage LocationsRemainingsAndTurnover.QuantityInitialRemaining,
_DemoRemaining GoodsIn Storage LocationsRemainingsAndTurnover.QuantityFinalRemaining,
_DemoRemaining GoodsIn Storage LocationsRemainingsAndTurnover.QuantityIncoming,
_DémoMarchandises restantes dans les lieux de stockageRemainingsAndTurnover.QuantityConsumption,
_DemoRemaining GoodsIn Storage LocationsRemainingsAndTurnover.QuantityTurnover
DEPUIS
Nomenclature actuelle AS Nomenclature actuelle
CONNEXION GAUCHE RegisterAccumulations._DemoRemaining GoodsInStorageLocations.RemainingsAndTurnover AS _DemoRemainingGoodsInStorageLocationsRemainingAndTurnover
Logiciel CurrentNomenclature.Nomenclature = _DemoRemaining Marchandises dans les emplacements de stockageRemainingsAndTurnover.Nomenclature

En conséquence, le rapport contient les champs suivants (voir Figure 1) :

Les informations étant extraites de la table virtuelle « Soldes et chiffres d'affaires », l'ACS crée automatiquement deux paramètres de données, Début de période et Fin de période, qui sont nécessaires pour fixer les limites de la période d'échantillonnage des données. Je préfère ne pas travailler directement avec de tels paramètres, mais définir leurs valeurs via un autre paramètre qui sera disponible pour l'utilisateur pour l'édition (voir Figure 2).
Le rapport remplit sa tâche, mais l'en-tête du rapport est plutôt sec. Au cours de mon travail, j'ai trouvé plusieurs façons de concevoir un en-tête de rapport :

  1. Paramétrage des en-têtes de champs sur l'onglet "Data Sets" de l'ACS ;
  2. Paramétrage des en-têtes de champs sur l'onglet « Paramètres » de l'ACS ;
  3. Paramétrage programmatique des en-têtes de champ ;
  4. Définition de l'en-tête du rapport à l'aide d'une mise en page ;
  5. Finalisation du résultat (document tabulaire) ;
Examinons-les en détail.

1. Paramétrage des en-têtes sur l'onglet "Data Sets" de l'ACS

Tout est simple ici, cochez la case à côté de la propriété du champ « Titre » (c'est-à-dire annuler le titre automatique) et saisissez le texte du titre requis (voir Figure 4).
Si vous devez définir le design pour l'ensemble du champ, et pas seulement pour son titre, il existe alors une propriété de champ « Design », avec laquelle vous pouvez définir un design pour le champ, par exemple, changer la police ou définir l'arrière-plan. couleur (voir Figure 5).
C'est là que se termine ma connaissance de l'onglet « Ensembles de données ».

2. Paramétrage des en-têtes de champs sur l'onglet "Paramètres" de l'ACS

Pour définir un titre de champ, vous devez sélectionner le champ souhaité, faire un clic droit pour ouvrir le menu contextuel et sélectionner « Définir le titre » (voir Figure 6).
Pour regrouper des champs (par exemple, par type d'informations), vous devez ajouter un champ de regroupement et y placer les champs requis (voir Figure 7), l'imbrication est illimitée.
Vous pouvez également jouer avec la propriété de champ de regroupement « Localisation », qui détermine le type de regroupement de champs.

Ces actions peuvent également être effectuées en mode 1C:Enterprise en ouvrant les paramètres du rapport, MAIS, l'élément « Champs sélectionnés » doit être inclus dans les paramètres du rapport (voir Figure 8).
Ceci termine la partie simple de la configuration de l’en-tête du rapport. Un des avantages des actions ci-dessus : toute la configuration est réalisée à l'aide d'outils standards. Parmi les inconvénients : l'impossibilité de définir un titre de champ multiligne.

3. Définition par programme des en-têtes de champ

La plate-forme vous permet de définir par programme des en-têtes de champ, en plus de définir des en-têtes multilignes, ce qui permet à son tour de définir de manière flexible et dynamique les en-têtes de champ lors de la génération d'un rapport.

Pour ce faire, nous définirons une procédure dans le module rapport Lors de la présentation du résultat. Dans cette procédure, nous écrirons du code pour définir les en-têtes de champ.

// 1. Obtenez les paramètres utilisateur.
SettingsKD = ThisObject.SettingsLitter.GetSettings();

// 2. On obtient la valeur du paramètre "Période" à partir de laquelle on détermine la date de début et de fin de la période.
ParameterPeriod = NewDataCompositionParameter("Période");
Période = SettingsCD.DataParameters.FindParameterValue(PeriodParameter).Value;
StartPeriod = Période.StartDate ;
EndPeriod = Période.EndDate ;

// 3. Préparez les informations sur la redéfinition des en-têtes de champ. Pour ce faire, créons
// un tableau qui contiendra des informations : FieldName - valeurs de la propriété "Path" dans
// ensemble de données (voir Figure 1), Titre - texte du titre.
FieldList = Nouveau tableau ;
pagePeriodStart = Format(PeriodStart, "DF=jj.MM.aaaa; DP="Date vide"");
FieldInitialRemaining = Nouvelle Structure("FieldName, Heading", "QuantityInitialRemaining", "Remaining on " + Symbols.PS + pageBeginningPeriod);
Liste des champs.Add(FieldInitialRemaining);
strEndPeriod = Format(EndPeriod, "DF=jj.MM.aaaa; DP="Date vide"");
FieldFinalRemaining = Nouvelle Structure("FieldName, Heading", "QuantityFinalRemaining", "Remaining on " + Symbols.PS + strEndPeriod);
FieldList.Add(FieldFinalRemaining);

// 4. Obtenez une liste des champs qui se trouvent dans le groupe "Remaining" (voir Figure 7) et
// définit un nouveau titre en parcourant les éléments dans une boucle.
SelectedFields = ParamètresCD.Selection.Items ; // Premier niveau de champs.
SelectedFieldsRemains = SelectedFields.Items ; // Reste les champs de regroupement.
Pour chaque cycle SelectedField du SelectedFieldsRemainders
Pour chaque élément d'un tableau à partir d'un cycle de liste de champs
LayoutField = NewDataCompositionField(ArrayItem.FieldName);
Si SelectedField.Field = LayoutField Alors
SelectedField.Header = ArrayItem.Header ;
fin si;
Fin du cycle ;
Fin du cycle ;

// 5. Chargez à nouveau les paramètres utilisateur modifiés.
ThisObject.SettingsLinker.LoadSettings(CDSettings);

Résultat du rapport (voir Figure 10) :
La méthode est plus difficile que tout ce qui précède, mais je l'aime bien.

4. Définition de l'en-tête du rapport à l'aide d'une mise en page

Pour une personnalisation plus flexible de l'apparence du rapport, l'ACS prévoit la création de mises en page. Dans les paramètres du rapport, nous allons créer un autre groupe « enregistrements détaillés » et définir le nom « Ligne DZ » pour ce groupe (voir Figure 11).
Sous l’onglet Présentations, ajoutez une présentation d’en-tête de regroupement. Pour la mise en page dans un tableur, nous allons créer un en-tête de rapport (l'en-tête du rapport doit contenir autant d'en-têtes de champs que le nombre de champs affichés par l'enregistrement détaillé) et indiquer la zone du tableur pour la mise en page (voir Figure 12).
En conséquence, le rapport comporte l’en-tête suivant (voir Figure 13) :

Figure 13. Disposition ACS comme en-tête de rapport
À mon avis, les mises en page présentent un gros inconvénient : l'incapacité de s'adapter à un groupe d'utilisateurs donné, elles doivent donc être utilisées si le formulaire de déclaration est réglementé et ne peut pas être modifié. Essayez de définir un regroupement pour le regroupement « LineDZ » et vous verrez que la mise en page est confuse.

Le site Web de support informatique contient un article Utilisation de mises en page prédéfinies, qui décrit en détail comment utiliser les mises en page dans les systèmes de contrôle d'accès.

5. Finalisation du résultat (document tabulaire)

Cette méthode utilise la merveilleuse méthode du tableur RechercherTexte(), mais pour utiliser cette méthode, vous devez désactiver le traitement standard pour générer le résultat du rapport.

Commençons. Nous désactivons la génération standard, pour le faire dans le module de rapport de l'événement Lors de la présentation du résultat Définissons la variable StandardProcessing sur False et écrivons notre propre présentation du résultat :
StandardProcessing = Faux ;
LayoutLinker = newDataLayoutLayoutLinker ;
LayoutLayout = LayoutLocker.Execute(
ThisObject.DataCompositionSchema,
ThisObject.SettingsLinker.Settings,
DécryptageDonnées);
CompositionProcessor = newDataCompositionProcessor ;
LayoutProcessor.Initialize(LayoutLayout, DecryptionData, True);
OutputProcessor = Nouveau OutputProcessorDataCompositionResultInTabularDocument ;
OutputProcessor.SetDocument(DocumentResult);
OutputProcessor.Output(CompositionProcessor);
La présentation logicielle du résultat du rapport est décrite plus en détail dans l'article

Le résultat compilé est affiché dans une feuille de calcul - il s'agit de la variable DocumentResult. Ensuite, après avoir généré le résultat et l'avoir affiché dans une feuille de calcul, nous écrivons du code pour remplacer un texte de cellule par un autre. Par exemple, changeons le nom du groupe « Restes » en « Éléments restants » dans l'en-tête du rapport (voir Figure 14) :
Cell = DocumentResult.FindText("Remainings");
Si cellule<>Indéfini alors
Cell.Text = "Éléments restants" ;
fin si;

Vous pouvez également définir le formatage de la cellule trouvée ; consultez les propriétés de cellule du tableur dans l'assistant de syntaxe.

J'ai découvert cette méthode récemment, elle est simple et permet de travailler de manière très flexible avec l'en-tête du rapport, l'essentiel est que le texte de la cellule ait un texte unique.

P.S. Peut-être avez-vous une autre façon de concevoir des en-têtes de champ ?



Avez-vous aimé l'article? Partagez-le