Maison / Skype / 1s sélection uv d'une source pour ajouter une liste dynamique. Traitement et formatage des données de listes dynamiques. Obtenir les données affichées par une liste dynamique

1s sélection uv d'une source pour ajouter une liste dynamique. Traitement et formatage des données de listes dynamiques. Obtenir les données affichées par une liste dynamique

Imprimer (Ctrl+P)

Liste dynamique

1. Informations générales

Une liste dynamique est un type de données spécial qui vous permet d'afficher des informations arbitraires provenant de tables de base de données sur un formulaire. Pour ce faire, vous devez spécifier la table à partir de laquelle vous souhaitez afficher les données ou décrire la sélection obtenue dans un langage de requête.
Le mécanisme est basé sur un système de composition de données et offre des capacités de tri, de sélection, de recherche, de regroupement et de formatage conditionnel des données reçues. Dans ce cas, la source de données est une requête qui est soit générée automatiquement par le système (sur la base des données spécifiées), soit écrite manuellement par le développeur.

Riz. 1. Options pour créer une liste dynamique

Lors de la création d'attributs de formulaire du type Liste dynamique un développeur peut choisir deux manières de former une requête de données :
● En spécifiant la table principale - dans ce cas, il vous suffit de spécifier la table (propriété Table principale) à partir de laquelle vous souhaitez recevoir des données, et le système générera automatiquement une requête pour les données (voir la partie droite de la Fig. 1).
● Générer manuellement une requête - pour cela, vous devez définir la propriété de requête personnalisée (voir le côté gauche de la Fig. 1). Après cela, la génération manuelle d'une demande pour obtenir des données de l'infobase sera disponible.
Une requête peut récupérer des données de plusieurs tables, vous pouvez donc spécifier une table principale. Cela permet à la liste dynamique de déterminer quelles données sont principales et lesquelles sont secondaires, et de sélectionner et d'afficher correctement les informations, ainsi que de fournir des commandes standard. Cependant, s'il est impossible de déterminer la table principale dans la requête, elle ne peut pas être spécifiée, mais alors
la liste dynamique ne fournira pas de commandes liées à la table principale. De plus, dans ce cas (sans préciser la table principale), l'efficacité d'obtention des données par une liste dynamique sera considérablement réduite.
Pour améliorer les performances, il est recommandé que toutes les jointures utilisées dans une requête personnalisée uniquement pour récupérer des données supplémentaires soient rendues facultatives à l'aide d'une extension du langage de requête du système de composition de données.
Pour une liste dynamique, qui est l'attribut principal du formulaire, il est possible de définir des valeurs de sélection à l'aide d'un paramètre de formulaire Sélection. Pour ce faire, il faut que le nom de la propriété de la structure, qui est dans le paramètre Sélection,
correspondait au nom du champ de sélection de liste dynamique. Dans ce cas, la valeur de la propriété structure sera définie comme la bonne valeur de l'élément de sélection. Si un tableau, un tableau fixe ou une liste de valeurs est passé comme valeur d'un élément du paramètre Sélection d'un formulaire de liste dynamique, alors une condition avec l'option Dans la liste est ajoutée à la sélection, dans la bonne valeur dont une liste de valeurs est placée (en laquelle le tableau et le tableau fixe sont convertis).
Une requête arbitraire dans une liste dynamique peut être une requête dans laquelle un paramètre est utilisé pour générer la valeur d'un champ, par exemple :

CHOISIR
CHOIX
QUAND Livraison.Facteur = 1 ALORS &Soumission
AUTREMENT Livraison. Coefficient
FIN AS Rapport
DEPUIS

De plus, si le type de la valeur du paramètre diffère du type de l'attribut de l'objet (par exemple, Accessoires1 a du type Nombre, et la valeur du paramètre est le type Doubler), puis pour afficher correctement le champ, vous devez explicitement convertir la valeur du paramètre dans le type souhaité :

CHOISIR
CHOIX
WHEN Delivery.Coefficient = 1 THEN EXPRESS(&Representation AS String(100)) ELSE Livraison. Coefficient
FIN AS Rapport
DEPUIS
Document.DeliveryProducts AS Livraison

Si le champ par lequel la sélection est définie est désactivé à l'aide d'options fonctionnelles, alors la sélection par un tel champ n'est pas installée, même si la valeur de sélection est transmise en tant que paramètres de formulaire ou liens de paramètres de sélection.
A l'aide de la propriété Lecture dynamique des données, vous indiquez à une liste dynamique la nécessité de lire les données par petites portions
(pour plus de détails sur les moyens d'obtenir des données à l'aide d'une liste dynamique et de la mise en cache des données, voir ci-dessous). Quel que soit cet attribut, les conditions suivantes s'appliquent :

● Si le mode d'affichage de liste hiérarchique est défini, seules les données du groupe actuel et les données de tous éléments parents(sans éléments subordonnés).
● Si le mode d'affichage arborescent est défini, seules les données des nœuds d'arborescence ouverts seront lues.
● Le chargement unique des données de liste dynamique n'est pas pris en charge si la navigation hiérarchique est définie (la propriété d'affichage est définie sur Arborescence) et l'affichage initial de l'arborescence est défini sur Développer tous les niveaux. Pour obtenir des données, autant de requêtes au serveur seront faites qu'il y a de nœuds dans la liste affichée.
Au sein d'une même récupération de données, une liste dynamique réutilise les tables temporaires précédemment créées si les conditions suivantes sont remplies :
● La requête par lots de liste n'a aucune requête après la requête par lots principale.
● La composition des tables temporaires et des champs qu'elles contiennent est inchangée par rapport à l'exécution précédente de la requête batch.

Dans son travail, la liste dynamique utilise les valeurs des propriétés suivantes des détails des objets de métadonnées :
● le format,
● format d'édition,
● indice,
● signe pour mettre en évidence les valeurs négatives,
● masque,
● signe de mode multiligne,
● signe d'édition avancée,
● mode mot de passe.
Lors de l'affichage et de l'édition de la sélection et des paramètres du système de composition des données, le format d'édition du champ correspondant est utilisé.

2. Limites et fonctionnalités

Lorsque vous définissez la sélection dans une liste dynamique, n'oubliez pas que la sélection n'affecte pas les groupes si le mode d'affichage de la liste dynamique est Liste hiérarchique ou Arborescence. Par « groupes », nous entendons un élément d'un répertoire ou d'un plan de types de caractéristiques dont la propriété ThisGroup est définie sur True.
Les qualifications appliquées automatiquement par une liste dynamique aux détails standards Propriétaire, Parent, Date, Période et CeGroupe sont appliquées
moyens standards systèmes de composition de données. La sélection, appliquée automatiquement par une liste dynamique aux champs clés, peut être appliquée aussi bien par les moyens standards du système de composition des données qu'en ajoutant directement des conditions au texte de la demande. DANS aux champs de la table principale. Grâce à l'application des sélections à l'aide des outils de mise en page, elles peuvent être appliquées à la fois dans les requêtes imbriquées et dans les paramètres des tables virtuelles.

Lors du développement de listes dynamiques, il est recommandé de tester toutes les listes dynamiques avec des requêtes personnalisées. Pendant le processus de vérification, vous devez vous assurer que si une requête de liste contient des requêtes imbriquées ou des tables virtuelles, et qu'elles contiennent des champs avec des alias qui correspondent aux alias des détails standard Propriétaire, Parent, Date, Période, CeGroupe ou des champs clés sont disponibles pour sélection, alors ces champs sont valides et correspondent aux détails standards avec lesquels leur pseudo correspond. Si ce n'est pas le cas, vous devez modifier la demande pour qu'elle corresponde ou
le surnom était différent.
Si vous choisissez de générer manuellement une demande, certaines restrictions sont imposées à la demande :
● L'utilisation de l'instruction FIRST dans une requête de liste dynamique n'est pas prise en charge. Si vous devez utiliser une sélection limitée par le nombre d'enregistrements dans une liste dynamique, vous devez retravailler la requête de génération d'une liste dynamique de manière à ce que le contenu réel de la requête soit placé dans une sous-requête et limiter le nombre d'enregistrements. reçu dans cette sous-requête. Vous pouvez également utiliser une table temporaire au lieu d'une sous-requête.
● La sélection, le tri et le regroupement ne sont pas pris en charge :

  • Par détails parties tabulaires.
  • Afficher les champs.
  • Champ DataVersion.
  • Champ PrédéfiniDataName.
  • Champ de type table du plan comptable.
  • Champ Type de Mouvement de la table du registre d'accumulation.
  • Champ TypeValeurs de la table du plan de type caractéristique.
  • Champ de saisie Type ;
  • Champ de type String (longueur illimitée).
  • Champ de type BinaryData.

● Le tri et le regroupement par champs Subconto ne sont pas pris en charge.<НомерСубконто>et ViewSubconto<НомерСубконто>Tableaux MouvementsSous-conto du registre comptable.
● Regroupement par champs qui sont des expressions du langage de requête contenant fonctions d'agrégation.
● Lorsque la table principale est sélectionnée, la requête de liste dynamique présente les restrictions suivantes :

  • Les jointures ne sont pas prises en charge.
  • La section ORDER BY n'est pas prise en charge. Vous devez utiliser une requête sans table principale ou définir l'ordre nécessaire via les paramètres de liste dynamique.

● Si une liste dynamique est affichée sous forme de liste hiérarchique ou d'arborescence, une entrée ne sera pas affichée sous forme de liste dynamique à moins qu'au moins un parent de cette entrée soit affiché. Autrement dit, pour afficher un élément d'une liste hiérarchique, une liste dynamique doit également afficher tous les parents de cet élément jusqu'en haut de la liste. Dans ce cas, par haut de la liste, nous entendons soit
l'élément racine de l'objet hiérarchique affiché par une liste dynamique, ou l'élément défini comme propriété ParentTopLevel d'une extension de table de formulaire pour une liste dynamique.

L'utilisation des tables suivantes comme table principale d'une liste dynamique n'est pas prise en charge :

● Une table qui ne possède pas de clé identifiant de manière unique chaque enregistrement de table (une référence pour les tables d'objets et une clé d'enregistrement pour les tables de registre). Cependant, les tables suivantes peuvent être définies comme table principale d'une liste dynamique (même si elles n'ont pas de clé) :

● Tableau sous-conto du registre comptable ;
● toutes les tables virtuelles du registre comptable, à l'exception de la table MovementsSubconto ;
● tableaux de valeurs constantes (y compris le tableau Constantes) ;
● tableaux sources externes données sans champs clés ;
● tables cubiques de sources de données externes ;
● tableaux du registre d'accumulation :

  • table de révolution;
  • tableau de bilan ;
  • tableau du chiffre d'affaires et des soldes.

● tables de registre de calcul :

  • tableau de la durée de validité réelle ;
  • données de planification ;
  • donnee de base.

● Tableaux de parties tabulaires d'objets ;
● Tableaux d'enregistrement des modifications (utilisés dans les mécanismes d'échange de données) ;
● Tableaux de séquence ;
● Tables de conversion (utilisées dans les mécanismes de règlement périodiques).
● Une table utilisée dans une requête uniquement dans une jointure externe.

En d'autres termes, une liste dynamique avec la table principale spécifiée fonctionnera correctement si, à la suite de l'exécution de la requête,
spécifié comme source de données, le nombre de lignes obtenues à partir de la table principale n'augmente pas (compte tenu de la sélection imposée). Si, à la suite de l'exécution d'une requête, le nombre de lignes obtenues par la requête à partir de la table principale augmente, cela entraînera une violation de l'unicité de la clé des enregistrements de la table affichée par la liste. Dans ce cas, vous devez désactiver l'utilisation de la table de liste dynamique principale.
Lorsque vous travaillez avec une liste dynamique, vous devez prendre en compte les droits d'accès aux détails affichés par la liste :
● Les données des colonnes de liste dynamique marquées avec la propriété Toujours utiliser, mais pour lesquelles l'utilisateur actuel ne dispose pas du droit Afficher, ne sont pas transmises côté client. Accès aux données de ces colonnes (à l'aide de la propriété CurrentData et de la méthode RowData())
pas possible côté client.
● Si l'utilisateur actuel ne dispose pas du droit Afficher sur un champ clé d'une liste dynamique, la récupération des données de cette liste dynamique entraîne une erreur de violation d'accès.
Pour une liste dynamique qui affiche une liste d'énumération, il n'y a pas d'option paramètres interactifs liste.
La composition des colonnes et les paramètres de la liste dynamique sont associés aux champs de requête à l'aide d'alias des champs de sélection. Si un alias n'est pas explicitement spécifié dans une requête pour un champ de sélection et que le champ est un champ système, alors le nom du champ pour la version anglaise de la langue intégrée est utilisé comme alias.
La relation spécifiée signifie que lors d'une modification (ou d'une spécification explicite d'un alias pour un champ pour lequel un alias automatique a été utilisé)
alias du champ de requête qui génère les données de la liste dynamique, les paramètres des attributs de la liste dynamique seront perdus, les éléments du formulaire « perdront » les détails affichés, les paramètres de la liste dynamique deviendront incorrects, etc.
Si la source de données d'une liste dynamique est un tableau (régulier ou virtuel), qui permet de paramétrer une sélection par période, alors si l'utilisateur définit la période d'affichage dans une telle liste dynamique (commande Définir l'intervalle de date...),
les limites de période spécifiées seront définies comme valeurs de sélection ou paramètres de table virtuelle. Si au moyen d'une extension de langue
requêtes pour le système de composition de données, les noms des paramètres de la table virtuelle ont été explicitement spécifiés - les paramètres avec le spécifié
des noms. Tableaux pour lesquels il est possible de contrôler la période d'affichage ou de traitement des données :
● les tables de registre (principales ou virtuelles), pour lesquelles il est possible de sélectionner par période (pour le registre de calcul - par période d'inscription) ;
● tableaux principaux des documents, processus métiers et tâches ;
● tableaux principaux des journaux de documents ;
● Tableaux de séquences principaux, tableaux de limites de séquences.
Le paramètre de requête de liste dynamique peut être un tableau ou une liste de valeurs. Toutefois, si le paramètre est une liste de valeurs, seule la première valeur de la liste sera utilisée comme valeur de sélection. Si une liste dynamique utilise une requête avec des paramètres, le réglage initial des valeurs des paramètres doit être effectué dans le gestionnaire OnCreateOnServer.
Lorsque vous affichez des données de liste dynamique, gardez les points suivants à l'esprit :
● Quand changement de programme les propriétés de la liste dynamique ne remplissent pas automatiquement les barres de commandes associées
avec cette liste dynamique.
● Si plusieurs champs sont regroupés dans un groupe avec le mode de regroupement dans une cellule et que dans les champs regroupés il y a un champ qui est affiché sous forme de case à cocher, alors cette case à cocher sera toujours affichée en premier dans la cellule résultante (à gauche de la case à cocher). texte).
Dans une liste dynamique, lors de la détermination du type de données pour les champs dont les expressions incluent des paramètres, des champs ou des littéraux, le type résultant est déterminé par les types des champs et des littéraux. Si le type de valeur du paramètre n’est pas inclus dans le type de données résultant, sa valeur sera tronquée.
Par exemple, dans l'exemple suivant, le champ sera de type Number.

CHOIX
QUAND C'EST UN MENSONGE
PUIS 5
SINON
&Paramètre
FIN

Si vous définissez le paramètre Paramètre sur une valeur d'un autre type, la liste dynamique de ce champ recevra la valeur 0 (la valeur par défaut pour le type Nombre).
Si dans une telle situation, vous devez sélectionner un paramètre d'un type différent, il est recommandé d'utiliser la construction du langage de requête EXPRIMER. Par exemple,
si dans l'exemple ci-dessus vous devez transmettre une chaîne ne dépassant pas 100 caractères dans le paramètre, alors vous devez remplacer la simple indication du paramètre par une expression avec un transtypage de type explicite :

CHOIX
QUAND C'EST UN MENSONGE
PUIS 5
SINON
EXPRESS(&Paramètre AS String(100))
FIN

Si le texte arbitraire d'une requête de liste dynamique utilise des paramètres dans les expressions des champs de sélection, vous devez indiquer explicitement le type de paramètres à l'aide de la construction EXPRIMER. Par exemple, au lieu de &Nomenclature AS Nomenclature utiliser
EXPRESS(&Nomenclature AS Annuaire.Nomenclature) AS Nomenclature. Sinon, la recherche via la barre de recherche peut fonctionner
incorrect ou produire des erreurs.

3. Méthodes de récupération et de mise en cache des données avec une liste dynamique

Lors de l'obtention des données à afficher, une liste dynamique utilise l'une des trois méthodes suivantes :
1. La lecture de la base de données s'effectue par morceaux avec un nombre d'éléments de données légèrement supérieur au nombre de lignes affichées simultanément par la liste (mais pas inférieur à 20). Les données ne sont pas mises en cache sur le serveur.
2. La lecture de la base de données s'effectue par pages de 1 000 éléments de données. Les données sont mises en cache sur le serveur. Les données hiérarchiques sont mises en cache : pas plus de 2 pages d'éléments sont mises en cache pour chaque parent. Pas plus de 20 pages d’éléments sont mises en cache par liste dynamique. La mise en cache sera activée par une liste dynamique pour les tables suivantes :
● Critères de sélection ;
● Toutes les tables du registre comptable, à l'exception de la table principale et de la table MovementsSubconto ;
● Toutes les tables du registre d'accumulation, à l'exception de la table principale ;
● Tous les tableaux du registre d'information, à l'exception du tableau principal ;
● Toutes les tables du registre de calcul, à l'exception de la table principale ;
● Tableau virtuel des tâches par intervenant ;
● Tableaux de sources externes sans clés ;
● Cubes provenant de sources externes.

3. La lecture de la base de données s'effectue par pages de 1 000 éléments. La première partie est égale à 1 page. Chaque partie suivante augmente d'une page (lorsque la fin de l'échantillon précédent est atteinte). Plus le « point de vue » se rapproche de la fin des données affichées, plus l'échantillon lu dans la base de données est grand, devenant finalement égal à toutes les données affichées. Les données sont mises en cache sur le serveur. Le nombre maximum d'entrées dans le cache et la liste dynamique est de 1 000 000.
En fonction de ce qui est sélectionné par la table principale de la liste dynamique et de la valeur prise par la propriété Lecture dynamique, l'une ou l'autre méthode de lecture des données est utilisée :

● L'une des tables suivantes est spécifiée comme valeur de la propriété Table principale : plan d'échange, répertoire, liste de documents, journal de documents, plan de types de caractéristiques, plan de comptes, plan de types de calcul, processus métier, tâche, table de points du processus métier :



● L'une des tables suivantes est spécifiée comme valeur de la propriété Table principale : la table principale du registre d'information, le registre d'accumulation, le registre comptable, le registre de calcul, la table virtuelle du registre comptable MovementsSubconto :

● Propriété de lecture dynamique :
● Installé : la méthode 1 est utilisée (la description des méthodes est donnée ci-dessus).
● Réinitialisation : la méthode 2 est utilisée (la description des méthodes est donnée ci-dessus).

● La propriété Table principale contient la table des critères de sélection ou la table des tâches par exécuteur (Tasks By Performer) :
● Clé identifiant une ligne du tableau : Lien.

● La propriété Main table spécifie la table virtuelle du registre d'informations SliceFirst ou SliceLast :
● Clé identifiant une ligne du tableau : RecordKey.
● La propriété Lecture dynamique n'est pas applicable.
● La méthode 2 est utilisée (la description des méthodes est donnée ci-dessus).

● La propriété Table principale est définie sur l'une des tables virtuelles registres autres que ceux listés ci-dessus :

● La propriété Lecture dynamique n'est pas applicable.

● Propriété de la table principale non spécifiée, utilisée demande personnalisée:
● Clé identifiant une ligne du tableau : Numéro.
● La propriété Lecture dynamique n'est pas applicable.
● La méthode 3 est utilisée (la description des méthodes est donnée ci-dessus).

Pour l'affichage, les données sont transférées au client par portions dont la taille est similaire à la taille des portions de la 1ère méthode de lecture des données (décrite au début de cette section).
Lorsque vous créez un formulaire contenant une liste dynamique, 45 éléments de données pour chaque liste dynamique visible sont initialement transmis au client (si la liste contient plus de 45 éléments). Si la liste dynamique affiche plus de 45 lignes, un appel serveur supplémentaire sera effectué à l'ouverture du formulaire pour récupérer les données manquantes.

4. Paramètres de liste dynamique

Paramètres de la liste de propriétés - un clic sur le lien hypertexte Ouvrir ouvre un formulaire permettant de configurer l'affichage d'une liste dynamique. La configuration d'une liste s'effectue de la même manière que des opérations similaires dans un système de composition de données.


Riz. 2. Style conditionnel d'une liste dynamique

Lors de la mise en place d'une liste dynamique dans la configuration, le développeur de l'application a la possibilité d'effectuer les opérations suivantes :
● définissez les champs selon lesquels vous souhaitez trier ;
● décrire la sélection des données dans la liste ;
● spécifier les paramètres d'apparence conditionnelle ;
● définissez les champs selon lesquels vous souhaitez regrouper les données.
Il est logique de confier le tri au développeur si vous n'êtes pas satisfait du tri par défaut défini par le système.

CONSEIL. Il ne faut pas oublier qu'une mauvaise sélection des champs de tri (ainsi que la sélection et le regroupement des données) affecte négativement l'efficacité de l'échantillonnage dynamique.
Du point de vue d'un développeur d'applications, les paramètres de liste dynamique se composent de plusieurs parties interconnectées. La propriété principale grâce à laquelle vous pouvez gérer les paramètres d'une liste dynamique est Paramètres de l'éditeur de liens. Cet objet contient trois ensembles de paramètres qui, lorsque le système s'exécute, déterminent les paramètres finaux appliqués à la liste dynamique :
● Paramètres – paramètres créés en mode Configurateur. La propriété de liste dynamique Order fournit accès rapideà la propriété Settings.Order du générateur de paramètres de liste dynamique, les constructions suivantes sont donc équivalentes :
List.Order et List.SettingsLinker.Settings.Order ;
● UserSettings – il s'agit de paramètres modifiés par l'utilisateur en mode 1C:Enterprise ;
● Paramètres fixes – ces paramètres sont définis à partir de la langue intégrée. Cette propriété contient également des valeurs de sélection qui sont transférées au formulaire à l'aide de ses paramètres. Les propriétés de liste dynamique Sélection, Options, Apparence conditionnelle fournissent un accès rapide aux paramètres fixes du générateur de paramètres de liste dynamique. Autrement dit, ces appels sont équivalents :
List.Settings Composer.FixedSettings.Selection et List.Selection.
Lors de la formation du paramètre final de la liste dynamique, diverses options les paramètres sont combinés comme suit :
● Si un type de paramètre est entièrement marqué comme personnalisé, les paramètres résultants incluent les paramètres personnalisés.
(List.SettingsComposer.UserSettings). De plus, si des éléments de paramètres sont marqués comme indisponibles, ces paramètres seront alors placés dans les paramètres résultants de la propriété List.Settings Composer. Paramètres.
● Si un type de paramètre est marqué comme personnalisé, non pas entièrement, mais élément par élément, alors :
● Les éléments marqués comme personnalisés seront inclus dans les paramètres résultants de la propriété List.SettingsComposer.CustomSettings.
● Les éléments marqués comme indisponibles seront inclus dans les paramètres résultants de la propriété List.SettingsComposer.Settings.
● Les paramètres fixes (List.SettingsComposer.FixedSettings) sont ajoutés aux paramètres résultants « tels quels ». Dans le même temps, il est inacceptable que les paramètres fixes et utilisateur contiennent des paramètres du même nom, par exemple une sélection avec la même valeur gauche dans la condition.

Si les paramètres de la liste dynamique contiennent des paramètres désactivés à l'aide d'options fonctionnelles, ces paramètres seront supprimés de la liste des paramètres disponibles lorsque les données de la liste dynamique seront récupérées.
Le contrôle des paramètres qui seront disponibles pour l'utilisateur et de ceux qui ne le seront pas se fait dans la fenêtre des paramètres de liste dynamique.


Riz. 3. Gérer l'inclusion dans les paramètres utilisateur

La case à cocher en bas de la fenêtre (voir Fig. 3) est chargée de placer tout le type de paramètres dans les paramètres (régulier ou rapide). Cette fonctionnalité est disponible pour la sélection, l’ordre, le regroupement et le style conditionnel. Si les paramètres sont spécifiés avec le mode édition Sélection rapide, puis dans la propriété Groupe de paramètres utilisateur de la table de formulaire affichant une liste dynamique, vous devez spécifier un groupe de formulaires vide dans lequel se trouveront les éléments associés aux paramètres utilisateur rapides de la liste dynamique. Si le groupe n'est pas spécifié, les paramètres utilisateur rapides ne seront pas affichés sur le formulaire. Il est également possible d'appeler explicitement la création de paramètres utilisateur à l'aide du langage 1C:Enterprise à l'aide de la méthode CreateUserSettingsFormItems() de l'extension de liste dynamique.
Il est également possible de choisir la possibilité de placer des éléments de paramètres spécifiques dans les paramètres utilisateur. Cette fonctionnalité est disponible pour les éléments de sélection et de conception conditionnelle (voir Fig. 3).

S'il est nécessaire que des paramètres spéciaux soient chargés lors de l'ouverture d'une liste dynamique, cela peut être fait de deux manières :
● Utilisation du paramètre de formulaire de liste dynamique CustomSettings. Les données contenues dans ce paramètre seront placées dans les paramètres utilisateur de la liste dynamique.
● Utilisation du paramètre de formulaire de liste dynamique UserSettingsKey. Si vous spécifiez ce paramètre lors de l'ouverture du formulaire, alors les paramètres utilisateur situés dans le stockage des paramètres avec la clé spécifiée seront chargés dans la liste dynamique, qui est l'attribut principal du formulaire.

5. Rechercher dans une liste dynamique

La liste dynamique située sur le formulaire offre la possibilité d'effectuer recherche interactive dans les données affichées. La recherche peut être effectuée à l'aide des outils suivants : chaîne de recherche, boîte de dialogue de recherche, recherche de la valeur actuelle, utilisation de l'historique de recherche et définition de la période (pour les listes dynamiques affichant des documents). Le résultat de la recherche est un ensemble limité d'enregistrements
liste dynamique (parmi les disponibles utilisateur donné) qui correspondent aux critères de recherche.
Il existe trois propriétés de table pour contrôler les capacités de recherche dans une liste dynamique formulaire géré, qui affiche une liste dynamique :
● Position de la chaîne de recherche - définit la position de la chaîne de recherche. Peut prendre les valeurs suivantes : Auto, Command Panel, No, Top, Bottom.


Riz. 4. Barre de recherche dans la liste dynamique

Si la valeur de cette propriété est définie sur Barre de commandes, alors la barre de recherche sera affichée dans la barre de commandes du formulaire (si la liste dynamique est l'attribut principal du formulaire) ou dans la barre de commandes associée à la liste dynamique. La barre de recherche placée dans la barre de commande est toujours appuyée sur le bord droit de la barre de commande (avec les boutons situés à droite de la barre de recherche).
Si la propriété est définie sur Non, alors la chaîne de recherche sera absente sur le formulaire, et au début de la saisie chaîne de recherche une boîte de dialogue s'ouvrira.
Si la propriété est définie sur Top, alors la barre de recherche sera située entre la barre de commande de liste et le tableau affichant la liste dynamique. Si la propriété est définie sur Bottom, alors la chaîne de recherche sera placée immédiatement après le tableau affichant la liste dynamique.


● Si la propriété Mode de compatibilité est définie sur Ne pas utiliser ou est antérieure à la version 8.3.4, la valeur est Panneau de commande.
Le passage vers la barre de recherche s'effectue comme suit :
● En appuyant sur la combinaison de touches Ctrl+F ;
● Souris ;
● Lorsque vous commencez à saisir une liste dynamique (en fonction de la valeur de la propriété SearchOnType de la liste dynamique).
● Position de l'état d'affichage - décrit où l'état d'affichage sera affiché : quels champs ont été recherchés et quelles valeurs
recherché dans tous les domaines. Peut prendre les valeurs suivantes : Auto, Aucun, Top, Bottom


Riz. 5. Statut de recherche dans la liste dynamique

Si la propriété est définie sur Non, l'état d'affichage ne sera pas présent sur le formulaire. De ce fait, il sera possible de déterminer si la recherche a été effectuée ou non uniquement grâce à la disponibilité du bouton Annuler la recherche.
Si la propriété est définie sur Top, alors l'état d'affichage sera situé entre la barre de commandes de liste et le tableau affichant la liste dynamique. Si la propriété est définie sur Bottom, l'état d'affichage sera placé immédiatement après le tableau qui affiche la liste dynamique.
Si le formulaire a été créé dans 1C:Enterprise version 8.3.4 et antérieure, la propriété est définie sur Non. Si le formulaire a été créé dans 1C:Enterprise version 8.3.5 et versions ultérieures, la propriété est définie sur Auto. La valeur réelle du bien dans ce cas sera déterminée comme suit :
● Si la propriété Mode de compatibilité est définie sur Version 8.3.4 (et inférieure) – Non ;
● Si la propriété Mode de compatibilité est définie sur Ne pas utiliser ou est antérieure à la version 8.3.4, la valeur est Top ;
● Position du contrôle de recherche - détermine l'endroit où le bouton de contrôle de recherche sera affiché. Le bouton ouvre un menu contenant les informations suivantes : commandes Rechercher par valeur actuelle, Recherche avancée, Annuler la recherche, Définir la période (pour les listes de documents et de revues) et l'historique des requêtes de recherche (5 dernières requêtes). La propriété peut prendre les valeurs : Auto, Non, Panneau de commande.


Riz. 6. Gestion de la recherche dans une liste dynamique

Si la propriété est définie sur Non, le bouton de contrôle de recherche ne figurera pas sur le formulaire (mais les commandes seront disponibles à l'aide du menu Plus). La valeur de la propriété Command Bar place un bouton sur la barre de commandes associée à un tableau qui affiche une liste dynamique.
Si le formulaire a été créé dans 1C:Enterprise version 8.3.4 et antérieure, la propriété est définie sur Non. Si le formulaire a été créé dans 1C:Enterprise version 8.3.5 et versions ultérieures, la propriété est définie sur Auto. La valeur réelle du bien dans ce cas sera déterminée comme suit :
● Si la propriété Mode de compatibilité est définie sur Version 8.3.4 (et inférieure) – Non ;
● Si la propriété Mode de compatibilité est définie sur Ne pas utiliser ou est antérieure à la version 8.3.4, la valeur est Panneau de commande ;
S'il existe plusieurs panneaux de commande sur le formulaire, dont la source de commande est une table du formulaire géré (affichant les données de la liste dynamique), alors la chaîne de recherche et le bouton de contrôle de recherche seront situés dans un seul panneau de commande :
● Ou dans la barre de commandes de la liste dynamique elle-même (si la saisie semi-automatique est activée pour celle-ci)
● Ou dans l'un des autres panneaux de commande.

Considérez les fonctionnalités de l'utilisation de la recherche dans une liste dynamique :
● Pour que la recherche soit pratique à utiliser (y compris en termes de performances), vous devez activer recherche en texte intégral pour tous les objets de configuration pouvant être utilisés comme table de liste dynamique principale. De plus, la recherche en texte intégral doit inclure tous les détails des objets de configuration pouvant être affichés dans une liste dynamique et pour lesquels une recherche peut être requise.
Si l'objet est exclu de la recherche en texte intégral, alors le mécanisme de recherche en question fonctionnera, mais les performances d'une telle recherche seront extrêmement faibles. Il n'est pas recommandé d'utiliser la recherche sur des objets qui ne sont pas indexés par la recherche en texte intégral.
● La solution d'application doit avoir tâche courante, qui met régulièrement à jour l'index de recherche en texte intégral.

● La recherche n'est pas effectuée sur toutes les colonnes de la liste dynamique (et de l'objet de configuration), mais uniquement sur les colonnes affichées dans le tableau.
● La recherche dans une liste dynamique par champs de types référence avec représentation arbitraire est effectuée par champs utilisés pour
formation de la représentation (voir ici). Les champs inclus dans la vue sont obtenus en tenant compte du gestionnaire ViewFieldsGetProcess() de l'objet correspondant.
● Pour les listes dynamiques avec une table principale spécifiée, une recherche en texte intégral sur la table principale est utilisée. Tous les liens non indexés de la table principale seront ajoutés aux résultats de la recherche en texte intégral. Le résultat de la recherche en texte intégral de la table principale est utilisé comme filtre par champs clés. Une recherche en texte intégral est également effectuée sur les champs affichés dans la liste à partir d'autres tables (si la recherche en texte intégral est utilisée pour le champ et l'objet de configuration). Si la recherche en texte intégral n'est pas activée, les données peuvent être
trouvé, mais la recherche elle-même sera très lente.
Si une erreur se produit lors de la tentative d'exécution d'une recherche en texte intégral, la recherche sera effectuée sans utiliser la recherche en texte intégral.
Par exemple, cela peut se produire lors de la recherche d'une seule lettre et un grand nombre lignes dans base d'informationsà commencer par cette lettre.
● Si la sélection avec le type de comparaison Égal est utilisée pour le champ de la table principale de la liste dynamique, alors lors d'une recherche en texte intégral, le requête de recherche selon ce tableau, la valeur de sélection sera ajoutée.
● La chaîne de recherche est divisée en mots. Ce fractionnement se fait selon les règles suivantes :
● La ligne est divisée en utilisant des espaces et des tabulations comme délimiteurs.
● Ensuite, chaque fragment résultant est traité :
● Si le fragment est une représentation d'une date (avec ou sans heure) basée sur les paramètres régionaux actuels de la session, alors le fragment est le mot.
● Sinon, le fragment est divisé davantage, en utilisant les caractères « ,.-/\ » comme séparateurs. Dans ce cas, chaque fragment de chaîne résultant est considéré comme un mot.

● Pour chaque mot, son propre ensemble de conditions est formé, qui sont combinées « par OU ». Cet ensemble de conditions est généré si une recherche en texte intégral pour un mot donné dans la table à partir de laquelle ce champ a été obtenu a renvoyé au moins un objet, ou si une recherche en texte intégral n'a pas été utilisée pour ce champ. Les conditions sont formées comme suit :
● Pour un champ de type String, la condition est FieldName LIKE %Word%.
● Pour un champ de type Nombre, la condition est FieldName=Value, où Value est un mot qui a été converti en Nombre. Si le casting ne peut pas être effectué, la recherche sur le terrain ne sera pas effectuée.
● Le mot est recherché sous forme de sous-chaîne dans la représentation par défaut du type booléen défini pour la session en cours. Si le mot recherché est trouvé dans une vue, alors une recherche est effectuée sur la valeur correspondant à la vue dans laquelle le mot a été trouvé. Dans le même temps, les vues spécifiées à l’aide de la propriété d’élément de formulaire Format ne sont pas utilisées pour la recherche.
● Pour un champ de type Date, la condition est FieldName>=DayStart(Word) AND FieldName<=КонецДня(Слово). Если Слово подобно дате, в которой год
spécifiée par un ou deux chiffres, l'année sera convertie en siècle en cours et cette valeur sera substituée dans la condition de recherche.
● Pour les champs de référence, la recherche s'effectue sur les champs utilisés pour former la représentation du lien. Dans chacun de ces champs recherchez
effectué selon les règles décrites ci-dessus. La recherche n'utilise pas les champs utilisés pour former une présentation arbitraire des données.
L'ensemble des conditions pour chaque mot est combiné "par ET".
● Pour les valeurs avec des zéros non significatifs, vous pouvez effectuer une recherche soit sur une chaîne avec des zéros non significatifs, soit sur une chaîne spécifiée sans zéros non significatifs.
● Si la liste dynamique affiche une liste de documents ou un historique de document, l'intervalle d'affichage de liste spécifié est également affiché dans la zone de formulaire dédiée à l'affichage de l'état d'affichage de la liste dynamique requise.
● La commande de recherche par valeur courante n'est pas disponible si la table principale de la liste dynamique est un critère de sélection.
● Les fragments de lignes trouvés sont mis en surbrillance lorsqu'ils sont affichés dans le tableau.
● Une seule chaîne de recherche est prise en charge par colonne. L'ajout d'un nouveau terme de recherche pour une colonne déjà recherchée remplacera l'expression de recherche plutôt que d'ajouter les deux termes de recherche.
● Si le formulaire ne dispose pas d'un module complémentaire d'élément de formulaire. Affichez une chaîne de recherche associée à un tableau (la propriété Source du module complémentaire d'élément de formulaire) qui affiche une liste dynamique, puis appuyez sur la combinaison de touches Ctrl+F. ouvre la boîte de dialogue de recherche.


Riz. 7. Boîte de dialogue de recherche

Si le formulaire comporte un module complémentaire d'élément de formulaire du formulaire Affichage d'une chaîne de recherche associée à un tableau (la propriété Source du module complémentaire d'élément de formulaire) qui affiche une liste dynamique, alors la commande de recherche avancée doit être utilisée pour ouvrir la boîte de dialogue de recherche.
● Lorsque vous utilisez la boîte de dialogue de recherche, gardez les points suivants à l'esprit :
● L'ouverture de la boîte de dialogue de recherche par raccourci clavier fait apparaître la valeur de la cellule actuelle dans la ligne Que rechercher et la valeur du bouton radio Comment rechercher est définie sur Correspondance exacte.

● En ouvrant une boîte de dialogue de recherche en commençant directement à saisir une chaîne de recherche dans une liste dynamique, la valeur du bouton radio Comment rechercher est définie sur Partie d'une chaîne et le texte saisi entre dans le champ Quoi rechercher.

6. Obtenir les données affichées par la liste dynamique

Lors de l'utilisation de listes dynamiques, vous devrez peut-être effectuer diverses actions sur les données actuellement affichées par la liste dynamique, en tenant compte des filtres imposés et de la recherche appliquée. Ces actions incluent : le traitement des informations affichées, par exemple, la republication des documents sélectionnés ou la définition de certains détails pour les objets sélectionnés, la génération d'une liste d'objets disponibles (avec design, etc.), par exemple, pour l'impression ou l'enregistrement dans une feuille de calcul.
Pour obtenir les données affichées dans une liste dynamique, utilisez GetDataCompositionSchemeExecutable() et
GetDataCompositionSettingsExecutable().
Exemple de récupération de données :

Schéma = Items.List.GetExecutableDataCompositionSchema();
Paramètres = Items.List.GetDataCompositionSettingsExecutable();
Layout Layout Builder = Nouveau générateur de mise en page de données ();
LayoutLayout = LayoutComposer.Run (Schéma, Paramètres);
CompositionProcessor = NewDataCompositionProcessor ;
LayoutProcessor.Initialize(LayoutLayout);
OutputProcessor = Nouveau OutputProcessorofDataCompositionResultIntoSpreadsheetDocument ;
Renvoie OutputProcessor.Output(CompositionProcessor);

L'insertion de données dans une collection de valeurs (tableau ou liste de valeurs) se fait de la même manière.
Obtenir des données à partir d'une liste dynamique de cette manière présente un certain nombre de fonctionnalités qui doivent être prises en compte lors du développement de solutions d'application :
● La conception de tableau suivante n'est pas prise en charge :
● Alternance de couleurs de lignes ;
● Image d'en-tête ;
● photo du sous-sol ;
● Couleur de fond du sous-sol ;
● Couleur du texte du pied de page ;
● Police de pied de page ;
● Position horizontale au sous-sol;
● Mode mot de passe.
● L'apparence conditionnelle spécifiée pour le formulaire géré n'est pas prise en charge ;
● Lors du tri d'un tableau hiérarchique par ordre croissant, par un champ de type Lien, les enregistrements contenant un lien nul sont toujours placés en premier.

Enfin, le rêve de tout « sept joueurs » est devenu réalité. À quelle fréquence les utilisateurs du programme 7.7 ont demandé de faire une sélection normale d'éléments. Pour que vous puissiez voir les soldes, les prix et définir des filtres. J'ai dû trouver diverses astuces, jusqu'à écrire des composants externes. Dans 1C 8.2, des listes dynamiques sont apparues. Je propose de réfléchir à ce que c'est et à ce qu'ils peuvent nous donner dans 1C 8.3.

Prenons comme base une certaine configuration de test 1C : « Enterprise Accounting 3.0 ». Nous ne ferons pas de sélection maintenant, il suffit d'ajouter une autre forme de sélection dans le répertoire "Nomenclature" et d'en faire temporairement la principale :

Une fois créé, le système ajoutera par défaut un champ de table de type « Liste dynamique » au formulaire.

Allons dans ses propriétés et voyons ce qu'il y a là-bas.

Tout d'abord, nous nous intéressons à la case à cocher « Demande arbitraire ». C'est lui qui nous dévoilera tous les avantages d'une liste dynamique. Nous aurons la possibilité d'écrire notre propre requête, et avec des paramètres. Cochez la case et cliquez sur le lien "Ouvrir":

Une fenêtre s'ouvrira avec un code prêt à l'emploi pour . Jusqu'à présent, tous les champs du répertoire "Nomenclature" y sont simplement répertoriés.

Obtenez 267 leçons vidéo 1C gratuitement :

Comme vous pouvez le constater, il existe un bouton d'appel "" et une case à cocher qui permet de modifier dynamiquement le contenu de la liste. Autrement dit, lorsqu'un autre utilisateur modifie quelque chose dans le répertoire, cela changera également dans notre liste. De plus, il existe un onglet Paramètres, mais nous y reviendrons plus tard.

Requête personnalisée dans la liste dynamique

Tout d’abord, créons la requête dont nous avons besoin avec les soldes et les prix. Comme ça:

Onglet Paramètres

Et maintenant le plus délicieux ! Allez dans l'onglet "Paramètres". Et on voit immédiatement que sur le premier onglet on peut faire n'importe quelle sélection pour n'importe quel champ de la requête :

Définition par programme des paramètres de requête dans une liste dynamique 1C 8.3

N'oubliez pas que nous avons deux paramètres dans la requête : "Période" et "Type de prix". Il faut les transmettre à la requête, sinon il y aura une erreur.

Écrivons ces paramètres dans les paramètres du formulaire, et ajoutons les lignes suivantes dans le module formulaire :

Liste &OnServerProcedure OnCreateOnServer(Failure, StandardProcessing). Possibilités. SetParameterValue("Période", Paramètres. Date) ; Liste. Possibilités. SetParameterValue("PriceType" , Parameters.PriceType) ; Notes d'accueil de EndProcedures À travers le miroir

21/04/2014 Obtention des données de liste dynamique

Implémenté dans la version 8.3.6.1977.

Nous avons implémenté la possibilité d'obtenir facilement et commodément des données affichées à l'aide d'une liste dynamique.

Vous aurez peut-être besoin des données de la liste dynamique pour les imprimer sous une forme "spécifique" non standard. Ou afin d'effectuer certaines actions avec eux. Par exemple, envoyez un courrier à toutes les contreparties que vous avez sélectionnées dans la liste selon certains critères.

De plus, il existe un certain nombre de tâches dans lesquelles l'utilisateur, en plus de la liste des éléments, souhaite également voir les données récapitulatives associées à cette liste. Par exemple, après avoir sélectionné les produits d'un certain groupe de produits et d'un certain fournisseur, il souhaite immédiatement voir le nombre total de ces produits dans la base de données.

La liste dynamique elle-même ne peut pas vous fournir cette information. Le but d'une liste dynamique est de fournir une vue rapide de grandes quantités de données. Par conséquent, il lit les données en morceaux nécessaires pour les afficher sur un ou deux écrans. Et « ne sait rien », par exemple, de la quantité totale de données qu'il doit lire.

En général, afin d’obtenir les informations supplémentaires souhaitées par l’utilisateur, vous devez interroger la base de données. Exactement le même que celui utilisé dans la liste dynamique.

Vous pourriez le faire avant. Mais cela n'a pas toujours été facile. Après tout, en plus du texte de la requête d'origine, selon laquelle fonctionne la liste dynamique, vous deviez connaître toutes les sélections, tris et autres paramètres que l'utilisateur définit de manière interactive dans le tableau qui affiche les données.

Maintenant, ce problème est facilement résolu. La table de liste dynamique comporte deux nouvelles méthodes :

  • GetExecutableDataCompositionSchema();
  • GetExecutableDataCompositionSettings().

Ainsi, vous obtenez le schéma de composition des données lui-même et, surtout, tous ses paramètres, grâce auxquels l'utilisateur voit la liste exactement telle qu'elle est. Tout ce que vous avez à faire est de composer la mise en page par programme et de la générer dans une collection de valeurs (pour le traitement par programme) ou dans une feuille de calcul (pour l'affichage) :

En conséquence, vous obtiendrez une structure (ou un rapport) contenant des colonnes et des lignes affichées dans un tableau de liste dynamique.

Le point important est que la mise en page et les paramètres que vous obtenez du tableau de liste dynamique prennent en compte, entre autres, la visibilité des colonnes et la recherche appliquée. Les paramètres étant obtenus séparément, vous pouvez modifier la composition des champs à votre guise et obtenir, par exemple, toutes les colonnes de la liste, et pas seulement celles visibles par l'utilisateur.

Lors de la sortie vers une feuille de calcul, il y a un autre moment agréable. En général, l'apparence du rapport correspondra à l'apparence de la table de liste dynamique au moment de la réception du schéma et des paramètres. Y compris la conception conditionnelle de la table. Vous aurez besoin de quelques actions supplémentaires uniquement si vous souhaitez également transférer la conception conditionnelle du formulaire vers le rapport.

En train de finaliser les configurations, chaque programmeur 1C rencontre des listes dynamiques.
Une liste dynamique est un objet d'interface utilisé pour afficher diverses listes d'objets de base de données ou de données non-objets - entrées de registre.
Par exemple, une liste dynamique permet d'afficher une liste d'éléments :

Pour démontrer les possibilités d'une liste dynamique, créons un traitement externe, ajoutons le formulaire principal. Ajoutons un nouvel attribut de type "Liste dynamique" au formulaire. Allons dans ses propriétés et voyons ce qu'il y a là-bas.
Nous sommes intéressés par la propriété "Demande personnalisée". L'activer nous montrera toutes les possibilités d'une liste dynamique. Nous pourrons rédiger une requête en utilisant presque toutes les fonctionnalités du langage de requête du système 1C : Enterprise. Cochez la case et cliquez sur le lien "Ouvrir":

Par défaut, notre liste affichera une liste d'articles avec un solde total pour tous les entrepôts. Pour implémenter une telle liste, ajoutez la requête suivante :


Comme tableau principal, nous sélectionnerons "Répertoire. Nomenclature", cela nous permettra de travailler avec la liste dynamique, comme avec la liste de nomenclature - ajouter, modifier, marquer pour suppression des éléments du répertoire. De plus, la définition du tableau principal offre la possibilité d'une lecture dynamique des données - cela signifie que la sélection sera effectuée par portions, selon les besoins.
Ensuite, nous devons créer des éléments de formulaire pour notre liste :

Si nous essayons d'exécuter notre traitement sous cette forme, nous obtiendrons une erreur :


Pour l'éliminer, vous devez définir la valeur du paramètre "Période". Pour cela, vous pouvez utiliser la méthode "SetParameterValue" de la collection "Parameters" de la liste dynamique. La méthode prend deux paramètres :
. "Paramètre" - Type : Chaîne ; Paramètres de composition de données. Le nom du paramètre ou du paramètre de composition des données dont la valeur doit être définie ;
. "Valeur" - Type : Arbitraire. La valeur à définir.
Peut être appelé dans le gestionnaire "OnCreateOnServer" du formulaire :

Vous avez une question, vous avez besoin de l'aide d'un consultant ?


Donnons à l'utilisateur la possibilité de modifier la période de réception des soldes. Pour cela, ajoutons l'attribut et l'élément de formulaire "Date" qui lui est associé :


Dans le gestionnaire "OnChange" de l'élément de formulaire "Date", appelez la méthode "SetParameterValue" en passant la valeur de l'attribut associé comme valeur. De même, nous allons modifier la procédure "On CreationAtServer" du formulaire. La méthode étant disponible sur le client, il n'est pas nécessaire d'appeler le serveur :


Désormais, lorsque la date change, les soldes seront automatiquement mis à jour :




Supposons que les utilisateurs souhaitent voir soit les soldes actuels, soit les recettes projetées. Considérons l'une des options de mise en œuvre. Ajoutons un attribut de formulaire booléen et un bouton radio associé :


Lors de la modification de la valeur du commutateur, nous modifierons le texte de la demande. Pour ce faire, nous utiliserons le gestionnaire d'événements "OnChange" de l'élément de formulaire "DisplayQuantityToReceipt". Nous devons modifier la propriété "QueryText" de la liste dynamique en fonction de la valeur de l'attribut. Cette propriété n'étant pas disponible sur le client, un appel à la procédure serveur est nécessaire :


Le résultat des modifications apportées :



Implémenté dans la version 8.3.10.2168.

Comme vous le savez, une liste dynamique est pratique et utile pour afficher rapidement de grandes listes. Il est assez flexible, vous permettant de modifier la requête standard et même de créer votre propre requête complexe. Cela vous permet d'afficher diverses données supplémentaires dans la liste qui sont liées aux données principales de la liste.

Cependant, cette polyvalence a aussi un inconvénient. La volonté de « tout montrer d’un coup » peut conduire à compliquer considérablement la requête. En conséquence, vous obtiendrez des plans d'exécution inefficaces et, par conséquent, des performances lentes lors de l'affichage et du défilement de la liste.

De plus, il existe un certain nombre de tâches appliquées dans lesquelles l'algorithme de sélection et de formatage des données de liste est plutôt compliqué. Dans ces cas, les possibilités de requêtes arbitraires et de style conditionnel ne suffisent tout simplement pas. J’aimerais avoir un outil plus « gratuit » et plus « précis » qui vous permettra de faire « n’importe quoi » et « seulement là où vous en avez besoin ».

EventOnReceiveDataOnServer

Surtout à ces fins, nous avons implémenté un nouveau gestionnaire . Il est ajouté à l'extension de tableau qui affiche une liste dynamique.

Ce gestionnaire est appelé sur le serveur une fois que la liste dynamique a reçu et organisé l'affichage de la partie suivante des données.

Une fonctionnalité importante est que le contexte du formulaire n'est pas disponible dans ce gestionnaire. Vous ne pouvez opérer qu'avec une collection de lignes de liste reçues de la base de données, déjà sélectionnées et formatées conformément aux paramètres de la liste dynamique.

Vous pouvez modifier les données de ces lignes ou appliquer votre propre conception aux cellules. Des options de conception sont disponibles telles que Couleur de l'arrière plan, Couleur du texte, Police de caractère, Position horizontale, Visibilité, Disponibilité, afficher, Texte Et Format.

De plus, si nécessaire, vous pouvez visualiser et analyser une copie des paramètres complets de la liste dynamique. Mais vous ne pouvez pas modifier les paramètres.

Le cas d'utilisation le plus simple

Le moyen le plus simple de comprendre le but de ce gestionnaire est de prendre un exemple. Un exemple est d'afficher leurs soldes du registre d'accumulation dans la liste des marchandises. Quantité inférieure à une certaine valeur surlignée en rouge.

Jusqu'à présent, cette tâche était résolue par une jointure gauche dans une requête de liste dynamique et une décoration de liste conditionnelle définie dans le configurateur.

Maintenant, elle le fait de cette façon. La requête de liste standard n'est pas compliquée, seul un champ factice y est ajouté Reste.

Et dans le gestionnaire OnReceiveDataOnServer() ce n'est que pour les lignes résultantes que les restes sont calculés. Et puis les petits restes sont surlignés en rouge.

Ici, par la méthode ObtenirClés(), vous récupérez leurs clés (références) à partir de la collection de lignes de la liste dynamique et transmettez ces clés à la requête restante.

Ensuite, en contournant les résultats de la requête, vous obtenez les lignes souhaitées par clé, dans la colonne Reste entrez une valeur et définissez l'apparence de ce champ, si nécessaire.

En conséquence, l'utilisateur voit la liste suivante :

Quel est l'avantage de cette option ?

Premièrement, la requête de liste reste simple. Ou cela ne reste pas simple, mais le nombre de connexions diminue. Et cela signifie que pour lui, avec un degré de probabilité élevé, un bon plan sera construit.

Deuxièmement, l'obtention du reste dans le gestionnaire ne sera effectuée qu'une seule fois, tandis que la demande de liste peut être effectuée plusieurs fois (en fonction des paramètres de la liste et du script de pagination).

Et troisièmement, le nouveau gestionnaire est exécuté une fois que les données principales ont été reçues de la base de données et ont passé avec succès la vérification des droits. Cela signifie que dans certains scénarios, l'obtention des données associées dans le gestionnaire peut être effectuée en mode privilégié, sans vérification des droits. Cela accélère la liste.

Restrictions sur les champs modifiables et ajoutés

Le fait que vous puissiez modifier les valeurs des champs de liste dans le gestionnaire est une fonctionnalité qui doit toujours être prise en compte.

Si vous ne prenez pas de mesures supplémentaires, l'utilisateur peut être très surpris par les résultats du regroupement, du tri ou de la sélection (y compris la recherche) des champs que vous avez modifiés. Après tout, ces actions seront effectuées sur les données initiales reçues par la requête, et non sur les données vues par l'utilisateur.

Ainsi, chaque fois que vous modifiez les valeurs des champs, n'oubliez pas de les exclure du regroupement, du classement et du filtrage. Nous avons mis en œuvre trois nouvelles méthodes spécifiquement à cet effet.

De plus, dans certains scénarios, il peut être judicieux de mettre en évidence visuellement ces colonnes dans le tableau afin que les utilisateurs puissent voir que ces colonnes sont « spéciales », pas comme tout le monde.