Une instruction simple - comment afficher des images dans des rapports sur l'ACS. commentaires sur "Utiliser l'ACS pour imprimer des documents"

Créons un rapport externe qui affichera des informations de rapport sur le solde du stock et son chiffre d'affaires. Les informations requises sont demandées par une requête utilisant un ensemble de données de type « Requête », qui contient le texte de la requête :
CHOISIR
_DemoNomenclature.Ref AS Nomenclature
PLACE ActualNomenclature
DE
Répertoire._DemoNomenclature AS _DemoNomenclature

PAS _DemoNomenclature.Remove Mark
ET NON _DemoNomenclature.Ceci est un groupe
;

////////////////////////////////////////////////////////////////////////////////
CHOISIR
Nomenclature actuelle.Nomenclature,
_DemoRemains of GoodsInStoragePlacesRemains and Turnovers.Storage,
_DemoGoodsBalancesInStoragePlacesBalancesAndTurnover.QuantityBalance de début,
_DemoGoodsBalancesInStoragePlacesBalancesAndTurnover.QuantityFinal Balance,
_DemoRemains of GoodsInStoragePlacesRemains and Turnovers.NumberIncoming,
_DemoGoodsBalancesInStoragePlacesSoldes and Turnovers.QuantityExpense,
_DemoRemains of GoodsInStoragePlacesRemains and Turnovers.NumberTurnover
DE
Nomenclature actuelle AS Nomenclature actuelle
CONNEXION GAUCHE Registre d'accumulation._DemoRemains of GoodsInStorage Locations.Remains AND Turnovers AS _DemoRemains of GoodsInStoragePlacesRemains AND Turnovers
Logiciel à jourNomenclature.Nomenclature = _DemoProductsBalancesIn StoragePlacesBalancesAndTurnovers.Nomenclature

Par conséquent, 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 définir 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 à la disposition de l'utilisateur pour l'édition (voir Figure 2).
Le rapport s'acquitte de sa tâche, mais la tête du rapport est plutôt sèche. Au cours de mon travail, j'ai trouvé plusieurs façons de concevoir l'en-tête du rapport :

  1. Paramétrage des en-têtes de champs sur l'onglet ACS "Ensembles de données" ;
  2. Configuration des en-têtes de champ 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. Raffinement du résultat ( feuille de calcul);
Considérons-les en détail.

1. Paramétrage des en-têtes dans l'onglet ACS « Ensembles de données »

Tout est simple ici, cochez la propriété du champ "Titre" (c'est-à-dire annulez le titre automatique) et entrez le texte du titre requis (voir Figure 4).
Si vous souhaitez définir l'apparence de l'ensemble du champ, et pas seulement de son titre, il existe la propriété de champ "Apparence", avec laquelle vous pouvez définir une certaine apparence du champ, par exemple, modifier la police ou définir le couleur de fond (voir Figure 5).
C'est là que s'arrêtent mes connaissances sur l'onglet "Datasets".

2. Configuration des en-têtes de champs dans l'onglet "Paramètres" de l'ACS

Pour définir le titre d'un champ, vous devez sélectionner le champ requis, faire un clic droit pour ouvrir le menu contextuel et sélectionner l'élément "Définir le titre" (voir Figure 6)
Pour regrouper les champs (par exemple, par type d'information), 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é "Emplacement" du champ de regroupement, qui détermine le type de regroupement des champs.

Ces actions peuvent également être effectuées en 1C : Mode entreprise 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 facile de la personnalisation de l'en-tête du rapport. Parmi les avantages des actions ci-dessus : toute la configuration est effectuée moyens standards... Parmi les inconvénients : l'impossibilité de définir un en-tête de champ multiligne.

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

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

Pour ce faire, dans le module rapport, nous définissons la procédure Lors de la composition du résultat... Dans cette procédure, nous écrirons le code pour définir l'en-tête des champs.

// 1. Obtenez des paramètres personnalisés.
Paramètres du CD = ThisObject.SettingsComposer.GetSettings ();

// 2. Récupère 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.
PeriodParameter = NewDataCompositionParameter ("Période");
Période = CD Settings.DataParameters.FindParameterValue (ParameterPeriod) .Value;
Début de période = Période.Date de début ;
PeriodEnd = Period.EndDate;

// 3. Préparez les informations sur la redéfinition de l'en-tête du champ. Pour ce faire, créez
// un tableau qui contiendra des informations : FieldName - valeurs de la propriété "Path" dans
// ensemble de données (voir Figure 1), En-tête - texte d'en-tête.
FieldList = Nouveau tableau ;
pStartPeriod = Format (BeginPeriod, "DF = jj.MM.aaaa; DF =" Date vide "");
FieldStartLeft = Nouvelle structure ("FieldName, Title", "AmountStartingLeft", "Solde à" + Symbols.PS + pStartPeriod);
ListFields.Add (FieldStart Balance);
stEndPeriod = Format (EndPeriod, "DF = jj.MM.aaaa; DF =" Date vide "");
FieldEnd Remaining = New Structure ("FieldName, Title", "AmountFinal Remainder", "Sold by" + Symbols.PS + lineEndPeriod);
ListFields.Add (FieldEnd Restant);

// 4. Obtenez la liste des champs, qui sont dans le groupe "Remains" (voir Figure 7) et
// définit un nouveau titre en parcourant les éléments.
SelectedFields = CD Settings.Selected.Elements ; // Premier niveau de champs.
SelectedFieldsRemains = SelectedFields.Elements; // Regroupement des champs restes.
Pour chaque champ sélectionné à partir des champs sélectionnés reste le cycle
Pour chaque élément de tableau d'une boucle de liste de champs
CompositionField = NewDataCompositionField (ArrayElement.FieldName);
Si SelectedField.Field = Champ de disposition Alors
SelectedField.Header = ArrayItem.Header;
Fin si;
Fin de cycle ;
Fin de cycle ;

// 5. Rechargez les paramètres utilisateur modifiés.
ThisObject.SettingsComposer.DownloadSettings (paramètres du CD);

Résultat du rapport (voir Figure 10) :
La méthode est plus lourde que toutes les précédentes, mais je l'aime bien.

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

Pour une personnalisation plus flexible apparence rapport dans l'ACS prévoit la création de mises en page. Dans les paramètres du rapport, créez un autre regroupement « enregistrements détaillés » et définissez le nom « chaîne DZ » pour ce regroupement (voir Figure 11).
Dans l'onglet Dispositions, ajoutez une disposition pour l'en-tête de regroupement. Pour la mise en page dans la feuille de calcul, créez un en-tête de rapport (l'en-tête de rapport doit contenir autant d'en-têtes de champ que l'enregistrement détaillé en affiche) et indiquez la zone de la feuille de calcul pour la mise en page (voir Figure 12).
Par conséquent, le rapport a l'en-tête suivant (voir Figure 13) :

Figure 13. Disposition ACS en tant qu'en-tête de rapport
À mon avis, les mises en page ont un gros inconvénient, c'est l'impossibilité de se reconstruire selon 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 le regroupement pour le regroupement "RowDZ" et vous verrez que la mise en page est en panne.

Sur le site de support informatique, il y a un article Utilisation des mises en page prédéfinies, qui décrit en détail comment utiliser les mises en page dans l'ACS.

5. Finalisation du résultat (tableur)

Cette méthode utilise la merveilleuse méthode de document de feuille de calcul RechercherTexte () mais pour l'application cette méthode il est nécessaire de désactiver le traitement standard de la génération des résultats du rapport.

Commençons. Désactiver la génération standard, pour cela dans le module de rapport de l'événement Lors de la composition du résultat définissez la variable StandardProcessing sur False et écrivez notre propre mise en page du résultat :
StandardProcessing = False;
Compositeur de mise en page = Nouveau compositeur de mise en page DataComposition ;
LayoutComposition = LayoutComposer.Run (
ThisObject.DataCompositionSchema,
ThisObject.SettingsComposer.Settings,
Déchiffrement des données);
Processeur de composition = Nouveau processeur de composition de données ;
LayoutProcessor.Initialize (LayoutDetails, DecodeData, True);
OutputProcessor = New OutputProcessorDataCompositionResultInTableSheetDocument;
OutputProcessor.SetDocument (DocumentResult);
OutputProcessor.Output (LayoutProcessor);
Plus en détail, la mise en page programmatique du résultat du rapport est décrite dans l'article

Le résultat combiné est affiché dans une feuille de calcul - la variable DocumentResult. De plus, après avoir généré le résultat et l'avoir sorti dans une feuille de calcul, nous écrivons un code pour remplacer le texte d'une cellule par un autre. Par exemple, dans l'en-tête du rapport, remplacez le nom du regroupement « Reste » par « Reste de stock » (voir Figure 14) :
Cellule = DocumentResult.FindText ("Reste");
Si Cellule<>Non défini puis
Cell.Text = "L'élément reste";
Fin si;

Vous pouvez également définir la mise en forme de la cellule trouvée, voir les propriétés d'une cellule de document de feuille de calcul dans l'assistant de syntaxe.

J'ai découvert cette méthode par moi-même récemment, elle est simple et permet un travail 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 dans votre arsenal une autre façon de concevoir des en-têtes de champ ?

Fonctionnalités de création de rapports dans 1C v8 en mode client lourd

Comment choisir une option ?

  • Placez le bouton "Sélectionner une option" sur le panneau de rapport
  • Placer le champ "OnDate" sur le formulaire

Exemple de code : ProcedureFormSelectOptions (Button) layout = GetLayout ("MainDataCompositionSchema"); spVariants = Nouvelle liste de valeurs ; Pour chaque option de Layout.OptionsSettings Cycle spVariants.Add (option.Settings, option.Presentation); Fin de cycle ;

choix = spVariants.SelectItem (); Si Choix = Non défini Alors Retour ; Fin si;

Paramètres Composer.LoadSettings (selection.Value);

Forme (); Fin de la procédure

Procédure OnDateWhenChanging (Element) Generate (); Fin de la procédure

Procédure Generate () FormElements.Result.Clear (); SettingsComposer.Settings.DataParameters.SetParameterValue ("Période", OnDate); BuildResult (Form Elements.Result); Fin de la procédure

Procédure ouverte () OnDate = CurrentDate (); Forme (); Fin de la procédure

Fonctionnalités de création de rapports via ACS

Générer un rapport étape par étape

  1. Créer un rapport dans le nœud Rapports
  2. Créer une mise en page dans un rapport, dont le type est Schéma de composition de données
  3. Défini dans les propriétés du rapport : Schéma de composition des données principales = Mise en page créée
  4. Dans les propriétés du rapport, définissez le sous-système auquel il appartient (le rapport dans l'entreprise sera affiché dans le volet de navigation supérieur)
  5. Créer une demande dans la mise en page (élément : Ajouter un jeu de données - Demande)
  6. Dans l'onglet Paramètres de la mise en page, décochez toutes les lignes de la colonne Restriction d'accès - c'est-à-dire tous les paramètres seront disponibles pour modification par l'utilisateur
  7. Dans l'onglet Paramètres de la Mise en page, dans la fenêtre où est affiché le nœud Rapport, créez un nouveau regroupement sans spécifier le champ de regroupement - une ligne détaillée sera créée
  8. Dans l'onglet Paramètres de la Mise en page, dans la fenêtre où le ensemble supplémentaire signets, sélectionnez supplémentaire. Onglet Paramètres - cochez tous les paramètres et sur chaque paramètre, appuyez sur le bouton Propriétés de l'élément des paramètres utilisateur, la fenêtre de configuration des paramètres s'ouvrira, où vous devrez cocher la case - Inclure le paramètre dans les paramètres utilisateur
  9. Dans l'onglet Paramètres de la Mise en page, dans la fenêtre où un ensemble supplémentaire d'onglets est affiché, sélectionnez supplémentaire. Onglet SelectedFields - là, vous devez ajouter des colonnes qui seront affichées dans le rapport
  10. Exécutez l'entreprise, ouvrez le rapport, définissez les valeurs des paramètres, Générez (vérifiez que l'option Principal pour générer le rapport est sélectionnée)

Comment ajouter un paramètre non éditable par l'utilisateur ?

Par exemple, nous devons définir le paramètre de requête "Infobase"

  • Dans le formulaire de mise en page sur l'onglet Paramètres, décochez la case "Inclure dans les champs disponibles" et "Restrictions d'accessibilité" pour le paramètre requis
  • Sous la forme de la mise en page, sur l'onglet Paramètres du sous-onglet (ci-dessous) Paramètres, décochez le paramètre requis, ouvrez les propriétés (bouton avec une clé), sur ce formulaire :
    • Décochez "Inclure dans les paramètres utilisateur"
    • Mode d'édition défini sur "Indisponible"


  • Dans le module de formulaire de rapport, dans le gestionnaire d'événements "OnLoadVariantOnServer" (vous pouvez également OnOpening, mais PAS WhenCreateAtServer, car il est exécuté AVANT de charger les paramètres du rapport et les paramètres seront écrasés) définissez par programme le paramètre :

& Procédure AtServer lors du chargement d'OptionOnServer (Paramètres)

// Définition du paramètre Settings = Report.ConfigurationComposer.Settings; Settings.DataParameters.SetParameterValue ("InformationBase", Report.InformationBase); Fin de la procédure

Comment définir les options d'un rapport ?

  • Sous la forme d'un modèle de mise en page sur l'onglet Paramètres dans le champ de gauche, vous pouvez créer les variantes nécessaires du rapport

Comment définir des regroupements ?

  • Sous la forme de la mise en page sur l'onglet Paramètres dans le champ en haut à droite, vous pouvez créer les regroupements nécessaires

Comment afficher un rapport par programmation ?

Dans le module formulaire :

& Sur la procédure client Générer le rapport Exécuter ()

ThisForm.ComposeResult ();

Fin de la procédure

Comment tester un rapport ?

Tu as besoin de faire:

  • Pour former une situation dans un test client - le moyen le plus pratique consiste à utiliser la table de situation
  • obtenir la forme du rapport - form = GetForm ("Report.Processes.Form.Report Form");
  • Télécharger option souhaitée rapport - définissez le paramètre d'extension de formulaire de rapport "OptionKey" (le nom du paramètre dans le modèle de composition de données)
  • charger les paramètres de rapport requis -? remplir le paramètre de l'extension du formulaire de rapport "UserSettings" (tapez "UserDataCompositionSettings") ne fonctionnait pas ainsi, tout est compliqué, voir ci-dessous.
  • formulaire ouvert - formulaire. Ouvrir ()
  • exécuter la formation - form.ComposeResult ();
  • vérifier le contenu du tableur sous forme de document Résultat - ce serait bien d'avoir des fonctions de comparaison avec la référence mxl
  • fermer le formulaire - formulaire.Fermer (); - ou peut-être que vous n'avez pas besoin de l'ouvrir, vous devez vérifier

voir également

  • description : Menu Aide / Assistant de syntaxe / Onglet Sommaire / Objets de l'interface d'application gérée / Extensions formulaire géré/ Extension de formulaire gérée pour le rapport / Paramètres de formulaire

Comment charger les paramètres de rapport requis ?

La documentation décrit qu'il existe un tel paramètre pour développer le formulaire de rapport "UserSettings" de type "UserDataCompositionSettings", mais il existe une structure d'objet très complexe, il n'était pas possible de l'utiliser.

Un schéma vraiment fonctionnel :

1. Créer des paramètres dans le rapport

  • Période de type Période standard
  • Sélection du type ListValues ​​(il serait préférable d'avoir une Structure, mais ce n'est pas dans la liste des types de paramètres, ainsi qu'un type arbitraire)

2. Transmettez les paramètres requis à la procédure GetForm :

période = nouvelle période standard ; period.Variant = VariantStandardPeriod.ArbitraryPeriod; period.StartDate = currentDate; period.EndDate = demain'sDate;

sélection = Nouvelle liste de valeurs ; selection.Add (Testing.GetObject (stSituation, "BP1"), "BusinessProcess");

stParameters = New Structure ("Variant Key, Period, Selection", "Main", period, selection); // OpenFormModally ("Report.Process Movement.Form.ReportForm", stParameters); form = GetForm ("Report.Process Movement.Form.Report Form", stParameters);

3. Dans les gestionnaires d'événements du formulaire, définissez les paramètres

& AtServer Fonction cnGet (liste, vue) Exporter pour chaque élément De la liste Boucle de liste Si élément.Vue = vue Alors Retourner élément.Valeur; Fin si; Fin de cycle ; Remboursement non spécifié ; FinFonction

& OnServer Procedure SetValueUserSettings (Settings, Name, Value) Pour chaque élément de la boucle Settings.Elements IfTypeValue (element) = Type ("DataCompositionSettingsParameterValue") Then If String (element.Parameter) = Name Then element.Value = Value; item.Usage = True; Fin si; Fin si; Fin de cycle ; Fin de la procédure

& Procédure OnServer SetValueCustomSelection (Settings, Name, Value) Pour chaque élément de boucle Settings.Elements IfTypeVal (élément) = Type ("DataCompositionFlection") Then Pour chaque élément SelectFrom.Elements Loop If String (cull.LeftValue) = Name Ensuite, sélectionnez .RightValue = valeur ; selection.Use = True; Fin si; Fin de cycle ; Fin si; Fin de cycle ; Fin de la procédure

& Procédure AtServer lors du chargement d'OptionOnServer (Paramètres)

CurrentVariantName = PresentCurrentVariant;

Paramètres = Report.ConfigurationComposer.Settings ; Settings.DataParameters.SetParameterValue ("InformationBase", Report.InformationBase);

Fin de la procédure

& Procédure AtServer lors du chargement des paramètres utilisateurOnServer (Paramètres) Paramètres = Report.Configuration Composer.UserSettings;

<>"00010101" Puis Paramètres = Report.ConfigurationComposer.UserSettings ; SetUserSettingValue (Paramètres, "Période", Paramètres.Période); Fin si;

ssBusinessProcess = spGet (Parameters.Selection, "BusinessProcess"); Si ssBusinessProcess<>Undefined Then SetCustomSelectionValue (Paramètres, "BusinessProcess", ssBusinessProcess); Fin si;

Fin de la procédure

Remarques:

  • Il existe des paramètres de données, c'est-à-dire ce qui est défini dans les paramètres de demande ACS
  • Certains d'entre eux sont affectés dans le paramètre de variante dans les paramètres utilisateur (dans les propriétés du paramètre, il y a un indicateur "Inclure dans les paramètres utilisateur"
  • Même si, lors du chargement sur le serveur, les valeurs requises sont chargées dans les paramètres de données, un formulaire s'ouvre dans lequel les paramètres enregistrés la dernière fois sont automatiquement chargés. Ces paramètres, lors de la génération d'un rapport, "interrompent" les paramètres de données
  • Dans le gestionnaire WhenLoadingUserSettingsOn the Server, l'objet Settings transmis est une copie paramètres réels, donc pour modifier les paramètres qui apparaîtront sur le formulaire, vous devez remplir l'objet Rapport.

Comment créer plusieurs paramètres de requête (liste) dans l'ACS ?

Dans la requête, vous devez utiliser l'expression "Dans (& NomParamètre)"(voir Expressions booléennes dans le langage de requête 1Cv8)

Lors de la configuration du tracé du circuit ACS dans l'onglet "Paramètres", pour ce paramètre, vous devez mettre une coche dans la colonne "Liste des valeurs disponibles". Dans ce cas, lorsque vous sélectionnez un paramètre, l'ACS affiche un formulaire d'édition de liste, dans lequel vous pouvez ajouter n'importe quelle valeur de paramètre.

Comment faire des paramètres de demande désactivés dans ACS ?

Dans une requête ACS, vous devez utiliser des constructions entourées d'accolades "{}" .

S'il y a une coche dans le formulaire de rapport (panneau installation rapide) est supprimée du paramètre correspondant, alors cette construction est supprimée de la requête.

Pour plus de détails voir Extension du langage de requête pour le système de composition de données (1Cv8)

Comment faire un rapport avec une répartition par colonnes ?

Pour ce faire, lors de la configuration de la variante de rapport (édition de la mise en page de la composition des données, onglet "Paramètres", champ en haut à droite), vous devez ajouter "Tableau" comme premier regroupement.

Après cela, les branches "Lignes" et "Colonnes" apparaissent dans le nœud "Table", où les regroupements nécessaires sont ajoutés.

Comment personnaliser le format de sortie des champs ?

Dans l'éditeur de modèle de composition de données, dans l'onglet "Datasets", en haut à droite se trouve une liste de champs de rapport.

Il y a deux possibilités :

  1. Personnaliser la valeur de la colonne "Afficher l'expression"
    • ici, vous pouvez entrer une expression de langage qui produit la chaîne souhaitée
    • cela ne fonctionne pas avec les champs de ressources
  2. Personnaliser la valeur de la colonne "Apparence"
    • dans la conception, il existe une propriété "Format" - il s'agit d'une valeur similaire au paramètre de la fonction de langage "Format", vous pouvez définir la vue souhaitée
    • la conversion de type ne peut pas être effectuée ici

Des expressions de calcul peuvent être spécifiées pour les champs de ressources (onglet Ressources) - par exemple,

Somme (temps) /3600.0

pour convertir des secondes en heures.

La précision requise peut être définie via le champ "Conception" de l'onglet "Ensembles de données".

Spécificités de paramétrage du système de composition de données

Il existe et nécessite un traitement différent d'au moins TROIS types de paramètres :

Paramètres de données

Les paramètres de données sont définis dans la requête ACS (source de données).

Les paramètres de données sont transmis à la requête de source de données et déterminent les données à récupérer.

L'objet SettingsComposer a une propriété spéciale pour travailler avec les paramètres de données Paramètres Composer.Settings.Data Paramètres

Peut être défini en appelant le formulaire

Paramètres = Report.ConfigurationComposer.Settings ; Settings.DataParameters.SetParameterValue ("InformationBase", Report.InformationBase);

Sélection

Les sélections se superposent aux données reçues après récupération à partir d'une source de données.

L'objet SettingsComposer a une propriété spéciale pour travailler avec des sélections Préférences Sélection des préférences du compositeur.

Par exemple: Paramètres = Report.ConfigurationComposer.Settings ; Settings.DataParameters.SetParameterValue ("InformationBase", Report.InformationBase);

Pour chaque élément From Parameters.Selection CycleSelectionElement = Settings.Selection.Elements.Add (Type ("DataCompositionFeedbackElement")); SelectionElement.ComparisonType = DataCompositionComparisonType.Equal; SelectionItem.LeftValue = NewDataCompositionField (element.View); SelectionItem.RightValue = element.Value; Fin de cycle ;

Paramètres personnalisés

Les préférences de l'utilisateur définissent les données que l'utilisateur peut personnaliser sur le formulaire.

Les paramètres utilisateur peuvent être affichés sur le formulaire dans un tableau spécial et peuvent être appelés par le bouton "Paramètres" et depuis le menu "Toutes les actions".

Paramètres personnalisés lié avec des paramètres de données et des sélections d'une manière assez complexe, cette connexion peut être configurée visuellement, mais il est en quelque sorte très gênant de travailler avec eux par programmation.

Jusqu'à présent, rien de mieux n'a été trouvé pour définir les valeurs d'une collection existante par indice, qui à lui seul peut démarrer lors de la modification de la disposition ACS dans l'éditeur visuel.

De plus, si un paramètre de données est déclaré défini par l'utilisateur, alors Installation du logiciel le paramètre data (voir ci-dessus) n'est pas suffisant, la valeur restituée paramètre personnalisé interrompt le réglage du paramètre de données. Par conséquent, pour de tels paramètres, cela n'a aucun sens de définir paramètre de données, vous devez immédiatement installer paramètre personnalisé.

Un endroit pratique pour définir les valeurs requises est le gestionnaire d'événements "OnLoadingUserSettingsOnServer" de l'extension de formulaire de rapport.

& Procédure AtServer lors du chargement des paramètres utilisateur Sur le serveur (Paramètres)

Si Paramètres.Période.Date de fin<>"00010101" Puis Paramètres = Report.ConfigurationComposer.UserSettings ; Settings.Elements.Value = Parameters.Period; Fin si;

Fin de la procédure

Utiliser une source de données objet

Pour utiliser un ensemble de données de type objet, vous devez transmettre une source de données externe à la méthode Initialize de l'objet Processeur de composition de données.

DataDecryption = Non défini ;

Compositeur de mise en page = Nouveau compositeur de mise en page DataComposition ; LayoutComposer = LayoutComposer.Run (DataCompositionSchema, SettingsComposer.Settings, DecodingData);

Processeur de composition = Nouveau processeur de composition de données ; LayoutProcessor.Initialize (LayoutDetails, Nouvelle structure ("Data", GetExternalSourceData ()), DecryptionData);

Un exemple simple est joint (pour que l'exemple fonctionne, vous devez disposer des ouvrages de référence « Entrepreneurs » et « Contrats d'entrepreneurs »).

Aujourd'hui, nous allons examiner la solution à un problème intéressant - sortie d'images dans le rapport.

A quoi cela sert-il ?

Ici quelques exemples:

  • Liste de prix avec photos du produit et logo dans l'en-tête
  • Questionnaires employés avec photos
  • Rapprochement des règlements avec sceau et signature au sous-sol
  • Rapports / formulaires imprimables avec scan d'impression

Dans la vidéo, nous analysons également programmation rapport sur le SKD. Cette méthode de génération de rapports est utilisée dans configurations typiques - c'est une autre raison de le regarder attentivement :)

Dispositions prédéfinies dans ACS

Avec les mises en page prédéfinies, vous pouvez remplacer la mise en page par défaut de votre rapport.

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

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

Génération programmatique d'un rapport sur l'ACS

Pour résoudre le problème d'affichage des images dans un rapport sur l'ACS, il est nécessaire de le générer par programmation.

C'est avec la génération programmatique du rapport qu'il est possible de se référer à des données binaires.

Au cours de ce tutoriel, faisons :

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

Affichage d'une image dans le rapport ACS

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

Pour ce faire, l'image est ajoutée au document de feuille de calcul, après quoi elle est affichée dans le rapport.

L'universalité de l'algorithme de sortie d'image

L'algorithme développé pour afficher les images est universel - avec tout changement dans la structure du rapport, l'algorithme continue de fonctionner.

En fait, nous allons le prouver dans cette leçon.

De plus, nous considérerons la fonctionnalité de génération en arrière-plan d'un rapport sur l'ACS (construction d'un rapport à l'aide de tâches planifiées).

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

Souvent dans l'en-tête ou le pied de page du rapport, vous devez afficher une image statique.

Cela peut sembler une tâche simple, mais dans le cas d'ACS, vous devez savoir comment le résoudre :

  • Étape 1. Générer un rapport par programmation
  • É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 la section avec les données requises.

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

Bon visionnage ! :)

Depuis quelques jours, nous publions des documents sur ACS.

Mais que se passe-t-il si le programmeur/implémenteur 1C ne connaît pas l'ACS ? Ce n'est peut-être pas si important que ça ?

Ok, regardons ce qui attendra 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.

Rapports pratiquement dans toutes les configurations typiques basé sur SKD.

Pour un spécialiste ne connaissant pas l'ACS, la réalisation de 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...

ACS - norme de déclaration dans des configurations typiques, et 1C n'écrit pas de commentaires en comptant sur ceux qui n'ont pas encore étudié les normes :)

Beaucoup de temps en enfer...

Sans ACS, l'élaboration des rapports se fait en grande partie manuellement.

C'est, bien sûr, cool - sortez comme un Rambo avec un tournevis dans les dents et aimez faire tout le monde :)

Par conséquent - des coûts de main-d'œuvre importants pour le développement du rapport et son débogage... Et n'importe quel manager/client sera au moins alarmé par ceci : "étrange, mais il comprend vraiment ça ??"

Et lorsqu'il s'agit de la révision ultérieure du rapport, cela devient souvent un casse-tête (surtout s'il s'agit du rapport de quelqu'un d'autre)...

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

SKD vous permet de recevoir rapports de qualité pas de programmation. La colonne vertébrale est faite pour quelques minutes, puis - s'incline.

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

Atteignez cette polyvalence dans les rapports générés par logiciel impossible dans un délai raisonnable.

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

« Vous n'avez pas le même, mais avec des boutons en nacre ? - Malheureusement - non ... ”(c)

Et si vous avez besoin d'obtenir des données d'un autre système - d'une autre base de données 1C ou pas du tout de 1C ?

En utilisant l'ACS, vous pouvez créer un rapport qui fonctionne avec les données de l'IB actuel et reçoit des données d'une autre source - aucune programmation requise.

Sans SCA externe les données seront obtenues par programmation et non de la manière la plus triviale.

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

Support - 2 mois... Volume du cours - 34 heures académiques.

Ne retardez pas votre formation !

Lors de la création de rapports à l'aide du système de composition de données (ACS), 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 forcer l'utilisateur à fouiller dans la fenêtre de paramètres ACS standard.

Voyons comment cela peut être fait en utilisant les formulaires 1C conventionnels. Réservons tout de suite que cet article se concentrera sur la sortie des paramètres du formulaire, c'est-à-dire les paramètres eux-mêmes dans l'ACS doivent déjà être créés.

Il existe deux manières d'afficher les paramètres ACS sous la forme habituelle :

  • sortie du tableau de paramétrage dans son intégralité
  • 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 l'ACS. Pour l'afficher sur le formulaire, vous devez créer un champ Champ Tabulaire, dans lequel dans la propriété Données signaler Paramètres Composer.Settings.Data Paramètres

Dans ce cas, l'utilisateur verra tous les paramètres ACS qui n'ont pas de restriction de disponibilité.

Cependant, dans certains cas, cette méthode peut ne pas sembler si belle et pas très conviviale. Voyons comment afficher les paramètres ACS sur le formulaire séparément sous la forme de champs de saisie ordinaires.

  1. Créons les détails du rapport correspondant aux paramètres. Dans notre exemple, ce seront les prérequis Date de début, date de fin, organisation... Définissons les types de données correspondants pour eux.
  2. Créons un champ de saisie sur le formulaire pour chacun des paramètres et lions-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 inscription à côté du 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 un gestionnaire d'événements Quand ça change, qui fixera la valeur sélectionnée par l'utilisateur aux paramètres ACS. Dans l'exemple, j'ai créé une procédure et lui ai attribué des événements de modification pour les trois champs de saisie. C'est-à-dire que lorsqu'un paramètre est modifié, les trois sont réinitialisés. Du point de vue des performances, ce n'est probablement pas efficace, mais comme il n'y a pas beaucoup de paramètres, la différence n'est pas perceptible. À un grand nombre paramètres doivent être sortis le réglage de chacun dans une procédure distincte. Ainsi, le code de procédure pour le gestionnaire Quand ça change ressemblera à ceci :

    Paramètres de procédureOnChange (Item)

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

    ParameterDateCon = Lien de paramètres. Paramètres. Paramètres de données. Éléments. Rechercher ("EndPeriod");
    ParamètreDateCon. Utilisation = Vrai ;
    ParamètreDateCon. Valeur = EndDay (EndDate);

    ParameterOrg = Lien de paramètres. 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.

Considérons 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").

Biens "Nom de l'imprimante" vous permet de définir une imprimante autre que celle par défaut pour l'impression. Le nom doit correspondre au nom de l'imprimante définie 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'indicateur d'analyse :

TabDoc.ParseCopy = True;

Le nombre de copies peut être spécifié comme suit :

TabDoc.Nombre de copies = 5 ;

Bien sûr, vous pouvez définir les champs :

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

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

TabDoc.Page Orientation = Page Orientation.Landscape; TabDoc.InstancesOnPage = 2; // 2 pages TabDoc seront placées sur la feuille Autoscale = true; // similaire aux paramètres de zoom de largeur de page

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

Biens "Taille de la page" vous permet de définir des formats de page standard - "A3", "A4", "A5" ( liste complète sont disponibles dans l'aide 1C).

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

Pour format personnalisé papier (Personnalisé), vous pouvez spécifier des valeurs pour la hauteur et la largeur de la page (en mm):

TabDoc.PageSize = "Custom" ; // TabDoc.PageHeight non standard = 350 ; TabDoc.Page Largeur = 350 ;

Dans la feuille de calcul, le contrôle de la sortie des en-têtes et des pieds de page et de leur contenu est également disponible. Cela se fait en utilisant les propriétés "En-tête de page" et "Bas de page". Par exemple:

TabDoc.HeaderFooter.Offer = true; // affichera l'en-tête du TabDoc.FooterSizeTop = 7; // taille du pied de page 7 mm (par défaut 10 mm) TabDoc.HeaderFooter.VerticalPosition = VerticalPosition.Top; TabDoc.HeaderFooter.StartPage = 2; // l'en-tête est affiché à partir de la deuxième page FontFootboard = New Font ("Courier New", 8, True); TabDoc.HeaderFooter.Font = HeaderFont; // police italique TabDoc.HeaderFooter.TextVCenter = "Header"; TabDoc.HeaderFooter.TextRight = "Page [& PageNumber] de [& PagesTotal]"; // pagination TabDok.HeaderFooter.TextLeft = "[& Date]" ; // date actuelle

Le document généré est envoyé à l'impression selon la méthode "Taper()". Il y a deux options d'appel possibles.

1) Directement à l'imprimante :

TabDoc.Print (ModePrint Dialogue.Ne pas utiliser); TabDoc.Print (vrai);

2) Avant l'impression, la boîte de dialogue d'impression s'affiche :

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

De plus, vous pouvez contrôler la pagination du document. Vous pouvez estimer le nombre de pages d'un document en fonction des paramètres de l'imprimante actuelle comme suit :

TabDoc.Nombre de pages ();

Utiliser des méthodes "Vérifier la sortie ()" et "Vérifier la connexion ()" Vous pouvez déterminer si un document de feuille de calcul ou un ensemble de zones de document de feuille de calcul tient sur la page en hauteur et en largeur avec les paramètres actuels de l'imprimante.

Il convient de garder à l'esprit que le travail 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.

Pour forcer l'insertion de sauts de page, les méthodes permettent "Afficher le séparateur de pages vertical ()" et "Afficher le séparateur de pages horizontal ()" .

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

Sinon TabDoc.CheckOutput (tableau d'options de sortie) alors TabDoc.OfferHorizontalPageSplitter (); Fin si

Une caractéristique importante de la plate-forme 1C: Enterprise 8.2 est la séparation stricte des propriétés et des méthodes en fonction du contexte d'exécution. Si toutes les propriétés ci-dessus sont disponibles dans n'importe quel contexte, les méthodes répertoriées ne sont pas disponibles sur client léger... Une exception est la méthode "Print ()", dont la disponibilité, pour des raisons évidentes, est limitée au côté client. Cela signifie que la formation d'un tableur doit avoir lieu sur le serveur et qu'il doit être envoyé à l'impression dans la procédure client.