Mise à jour de la liste dynamique 1c. Obtenir les données affichées par une liste dynamique

En plus des types de données primitifs que l'on peut trouver dans n'importe quel langage de programmation, il existe des types uniques dans 1C. Chacun d'eux a ses propres propriétés, méthodes, fonctions, objectifs et nuances d'utilisation dans le système. L'un de ces types est une liste dynamique, qui facilite grandement de nombreuses tâches appliquées. C'est pourquoi les développeurs doivent connaître et être capables de manipuler cet outil universel.

Caractéristiques des listes dynamiques dans 1C

Le but de ce type est d'afficher les informations de n'importe quelle table de base de données, quel que soit son type. Le mécanisme a été créé sur la base de SKD et possède des capacités similaires. Mais cela ne signifie pas que vous devrez nécessairement rédiger une demande en langage 1C, même si cette opportunité existe et doit être utilisée. Vous pouvez simplement spécifier la table dont les informations vous intéressent et 1C générera indépendamment une requête simple.

Pour voir comment se forme une liste dynamique et quelles données elle affiche, vous devez ouvrir les formulaires gérés là où elle se trouve dans le configurateur : dans la liste des détails, utilisez le menu contextuel pour ouvrir ses propriétés et faites attention au « Personnalisé Demande ». S'il n'y a pas de case à cocher, alors le paramètre « Table principale » reflète la table de la base de données à partir de laquelle les données sont extraites. Sinon, la liste dynamique reflète les données d'une requête personnalisée, visibles en ouvrant les paramètres de la liste.

Le schéma de requête personnalisé est beaucoup plus couramment utilisé, car il offre une excellente opportunité de combiner et d'afficher une grande variété de données. Le plus souvent, ce mécanisme est utilisé pour refléter les soldes des entrepôts, les prix des articles, les reçus, les dépenses ou les achats. Vous devez l'utiliser avec précaution, car les performances peuvent chuter pour les requêtes complexes.

Une autre propriété utile d'une liste dynamique s'ouvre lorsque vous cliquez sur l'inscription « Paramètres de la liste ». Ce menu vous permet de rendre les informations plus accessibles et compréhensibles pour les utilisateurs finaux, même en utilisant un ensemble standard de champs. Que la demande soit arbitraire ou non, vous verrez l'onglet « Paramètres », où vous pourrez spécifier :

  • Sélection de liste dynamique ;
  • Groupes;
  • Tri;
  • Décor.

L'utilisation de paramètres rend les listes dynamiques universelles et assez flexibles. Vous pouvez également les lier aux détails d'un formulaire géré, et les données changeront en fonction des paramètres sélectionnés par l'utilisateur. L'utilisation de ces mécanismes peut être comprise et appréciée en considérant des exemples de problèmes réels.

À titre d'exemple, considérons la tâche consistant à refléter les restes de la nomenclature sur une forme contrôlée. Dans la pratique réelle, de telles commandes se produisent assez souvent dans diverses configurations, et une liste dynamique est un outil idéal. Pour cette tâche, nous devrons utiliser une requête personnalisée, des paramètres de liste dynamique et ses paramètres.

Pour plus de clarté, créons un traitement externe distinct et plaçons-y une liste dynamique. Pour mettre en œuvre nos plans, le tableau avec la nomenclature ne suffira pas, nous devons donc autoriser une requête arbitraire. Nous y décrirons la connexion gauche du répertoire avec la liste des articles et le registre des soldes et définirons le répertoire comme table principale. Ce schéma permettra aux utilisateurs, travaillant avec une liste dynamique, d'ajouter ou de modifier des éléments.



SELECT NomenclatureList.Name AS Nom, GoodsInWarehousesRemainings.Warehouse AS Warehouse, GoodsInWarehousesRemainings.QuantityRemaining AS QuantityRemaining FROM Directory.Nomenclature AS NomenclatureList CONNEXION GAUCHE RegisterAccumulations.GoodsInWarehouses.Remainings(&CurrentDate,) AS GoodsOnUS TreasurysRemaining logiciel NomenclatureList.Link = ProductsInWarehouses Restes.Nomenclature OÙ

Puisque notre requête utilisait le paramètre « CurrentDate », nous devons définir sa valeur avant d'utiliser le traitement. Pour cela, dans le module formulaire de la procédure « When CreatedOnServer », à l'aide d'une commande standard, attribuez-lui la fonction « CurrentSessionDate ». Nous devons également afficher la liste dynamique sur le formulaire de contrôle et modifier l'ordre des champs pour plus de clarté. Faites glisser l'attribut « Nomenclature restante » dans les éléments du formulaire (partie supérieure gauche) et utilisez les flèches bleues pour modifier l'ordre des champs dans le tableau du formulaire.

&Sur la procédure du serveur Une fois créée sur le serveur (échec, traitement standard), la nomenclature demeure. Paramètres. Set ParameterValue("CurrentDate", CurrentSessionDate()) EndProcedure


Déjà à ce stade, nous pouvons ouvrir notre traitement externe dans 1C et voir que la liste dynamique fonctionne. Nous pouvons consulter les soldes, créer des articles et des groupes et effectuer des recherches. Souvent, les clients demandent d'ajouter la possibilité de choisir la date à laquelle ils verront les soldes. Dans le cas d'un formulaire avec une liste dynamique, ceci est réalisé grâce à un champ supplémentaire et au paramétrage qui l'utilise.

Ajoutez l'attribut « DateRemaining » de type « Date » et transférez-le aux éléments du formulaire. Dans le champ événements, nous créons l'événement « OnChange » et écrivons le code de paramétrage du paramètre « CurrentDate » utilisé dans la requête dynamique. Pour qu'à l'ouverture du formulaire l'utilisateur comprenne immédiatement à quelle date il voit les soldes, nous apporterons de petites modifications à la procédure « When CreatedOnServer ».



&OnServerProcedureWhenCreatingOnServer(Failure, StandardProcessing)RemainingDate = CurrentSessionDate(); Élément Remains.Parameters.SetParameterValue("CurrentDate", RemainingDate); Fin de procédure &Sur la procédure client Remaining DateWhenChanged(Element)Nomenclature Remaining.Parameters.SetParameterValue("CurrentDate",RemainingDate); Fin de la procédure

En conséquence, notre formulaire de liste dynamique peut refléter les soldes à n'importe quelle date.

Nous n'avons considéré qu'une petite partie des capacités de cette boîte à outils, mais cela suffit déjà pour comprendre la commodité de ce type de liste dynamique. Un mécanisme similaire est utilisé pour de nombreuses tâches, mais on le retrouve le plus souvent dans les configurations typiques des formulaires gérés :

  1. Sélection;
  2. Listes.

Pour recevoir une liste dynamique et sa demande dans des formulaires gérés standards, le développeur doit ouvrir le formulaire souhaité dans le configurateur. Dans la section détails, recherchez les détails avec le type de données « DynamicList » (le plus souvent il est mis en évidence en gras). Ses propriétés contiennent le texte de la demande, les sélections et d'autres paramètres.

Enfin, le rêve de tout enfant de sept ans est devenu réalité. À quelle fréquence les utilisateurs du programme 7.7 ont-ils demandé une sélection normale d'éléments ? Pour que vous puissiez voir les soldes, les prix et définir des filtres. Nous avons dû trouver diverses astuces, notamment l'écriture de 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 de 1C : « Enterprise Accounting 3.0 ». Nous ne ferons pas de sélection maintenant, nous allons juste ajouter un autre formulaire de sélection dans le répertoire « Nomenclature » et en faire temporairement le principal :

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

Entrons dans ses propriétés et voyons ce qu'il y a.

Tout d’abord, nous nous intéressons à la case à cocher « Demande personnalisée ». Cela nous révélera tous les avantages d’une liste dynamique. Nous aurons la possibilité de rédiger notre propre requête, avec des paramètres. Cochez la case et cliquez sur le lien « Ouvrir » :

Une fenêtre s'ouvrira avec le code terminé dans . Pour l’instant, tous les champs du répertoire « Nomenclature » y sont simplement répertoriés.

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

Comme vous pouvez le constater, il y a 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 demande dont nous avons besoin avec les soldes et les prix. Comme ça:

Onglet « Paramètres »

Et maintenant la meilleure partie ! 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 demande : « Période » et « Type de prix ». Il faut les passer dans 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 &OnServerProcedureWhenCreatingOnServer(Failure, StandardProcessing). Possibilités. SetParameterValue("Période" , Paramètres. Date) ; Liste. Possibilités. SetParameterValue("PriceType", Parameters.PriceType) ; Notes d'accueil de EndProcedures de De l'autre côté du miroir

21/04/2014 Réception 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 de données de liste dynamique afin de les imprimer sous une forme non standard et « spécifique ». Ou afin d'effectuer certaines actions avec eux. Par exemple, envoyez une lettre à tous les entrepreneurs que vous avez sélectionnés dans la liste en fonction de 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é des 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.

Une liste dynamique à elle seule ne peut pas vous fournir ces informations. Le but d'une liste dynamique est de fournir une visualisation 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 compter.

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

Avant, tu étais capable de faire ça. Mais cela n'a pas toujours été facile. Après tout, en plus du texte de la requête originale sur 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 affichant les données.

Ce problème peut désormais être résolu simplement. La table de liste dynamique dispose désormais de deux nouvelles méthodes :

  • GetExecutableDataCompositionSchema();
  • GetExecutableDataCompositionSettings().

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

En conséquence, vous recevrez 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 recevez 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 n'aurez besoin de quelques actions supplémentaires que si vous souhaitez 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 capacités d'une liste dynamique, créons un traitement externe et ajoutons le formulaire principal. Ajoutons un nouvel attribut au formulaire avec le type « Liste dynamique ». Entrons dans ses propriétés et voyons ce qu'il y a.
Nous sommes intéressés par la propriété « Demande personnalisée ». L'activer nous montrera toutes les capacités d'une liste dynamique. Nous pourrons rédiger une requête en utilisant presque toutes les capacité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 le solde total de 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 une liste dynamique, comme avec une liste de nomenclature - ajouter, modifier, marquer les éléments du répertoire pour suppression. De plus, l'installation de la table principale permet de lire dynamiquement les 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 une valeur pour le 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 vous souhaitez définir la valeur ;
. « Valeur » - Type : Arbitraire. La valeur à définir.
Peut être appelé dans le gestionnaire « OnCreateOnServer » du formulaire :

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


Nous offrirons à l'utilisateur la possibilité de modifier la période de réception des soldes. Pour cela, ajoutez l'attribut et l'élément de formulaire « Date » qui lui est associé :


Dans le gestionnaire « OnChange » de l'élément de formulaire « Date », nous appellerons la méthode « SetParameterValue », en passant la valeur de l'attribut associé comme valeur. De la même manière, modifions la procédure « Lors de la création sur le serveur » 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 réceptions planifiées. Considérons l'une des options de mise en œuvre. Ajoutons un attribut form de type booléen et un switch 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 « Sur modification » pour l'élément de formulaire « Afficher la quantité à la réception ». 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, une procédure serveur doit être appelée :


Résultat des modifications apportées :



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 obtenir 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é structure située dans le paramètre Sélection,
coïncidait avec le 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.Coefficient = 1 ALORS &Présentation
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 de 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.Livraison des produits COMMENT livrer

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.
Grâce à 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 est défini sur liste hiérarchique, seules les données du groupe actuel et les données de tous les éléments parents (sans enfants) seront lues.
● 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
en utilisant les outils standards du système 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 :

  • Selon les détails des 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.
● Le regroupement par champs qui sont des expressions de langage de requête contenant des fonctions d'agrégation n'est pas pris en charge.
● 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 de sources de données externes 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’existe aucune option permettant de personnaliser la liste de manière interactive.
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 :
● Lorsque vous modifiez par programme les propriétés d'une liste dynamique, les panneaux de commandes associés à la liste ne sont pas automatiquement renseignés.
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 de registre virtuel, à l'exception de celles répertoriées ci-dessus :

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

● La propriété Table principale n'est pas spécifiée, une requête arbitraire est utilisé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 installé 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é Order de la liste dynamique fournit un accès rapide à la propriété Settings.Order du générateur de paramètres de la liste dynamique, de sorte que les constructions suivantes sont é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 création des paramètres finaux pour une liste dynamique, diverses options de paramètres sont combinées 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.ComposerSettings.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. Contrôler 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 (normaux ou rapides). Cette fonctionnalité est disponible pour la sélection, le classement, le regroupement et la conditionnalisation. Si les paramètres sont spécifiés avec le mode d'édition Sélection rapide, alors dans la propriété Groupe de paramètres utilisateur du tableau du formulaire affichant la liste dynamique, vous devez spécifier un groupe vide du formulaire dans lequel les éléments associés aux paramètres utilisateur rapides de la liste dynamique sera localisée. 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'invoquer explicitement la création de paramètres personnalisés à l'aide du langage intégré à l'aide de la méthode CreateCustomSettingsFormItems() de l'extension de liste dynamique.
Il est également possible de choisir de placer ou non 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 Figure 3).

Si vous avez besoin de charger des paramètres spéciaux 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 UserSettings. Les données contenues dans ce paramètre seront placées dans les paramètres de la liste dynamique de l'utilisateur.
● Utilisation du paramètre du formulaire de liste dynamiqueUserSettingsKey. Si vous spécifiez ce paramètre lors de l'ouverture d'un 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

Une liste dynamique située sur le formulaire offre la possibilité de rechercher de manière interactive les données affichées. La recherche peut être effectuée à l'aide des outils suivants : barre de recherche, boîte de dialogue de recherche, recherche de la valeur actuelle, utilisation de l'historique de recherche et réglage de la période (pour les listes dynamiques affichant des documents). Le résultat de la recherche est un ensemble limité d'enregistrements
une liste dynamique (de celles disponibles pour un utilisateur donné) qui correspondent aux critères de recherche.
Pour contrôler les fonctionnalités de recherche d'une liste dynamique, il existe trois propriétés de table sur le formulaire géré qui affiche la liste dynamique :
● Position de la chaîne de recherche – détermine la position de la chaîne de recherche. Peut prendre les valeurs suivantes : Auto, Barre de commandes, Aucun, Haut, Bas.


Riz. 4. Rechercher une chaîne dans une liste dynamique

Si la valeur de cette propriété est définie sur Panneau de commandes, alors la chaîne de recherche sera affichée dans le panneau de commandes du formulaire (si la liste dynamique est l'attribut principal du formulaire) ou dans le panneau de commandes associé à la liste dynamique. La barre de recherche placée dans la barre de commande est toujours appuyée contre 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, la chaîne de recherche ne figurera pas sur le formulaire et lorsque vous commencerez à saisir la chaîne de recherche, une boîte de dialogue s'ouvrira.
Si la propriété est définie sur Top, 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, 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 antérieure à la version 8.3.4, la valeur est Panneau de commande.
Accédez à la ligne de recherche comme suit :
● En appuyant sur la combinaison de touches Ctrl+F ;
● Souris ;
● Lorsque vous commencez à saisir une liste dynamique (en tenant compte de la valeur de la propriété SearchOnTyping 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. Rechercher l'état 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. En conséquence, il sera possible de déterminer si la recherche est terminée ou non uniquement grâce à la disponibilité du bouton Annuler la recherche.
Si la propriété est définie sur Top, l'état d'affichage sera situé entre la barre de commande de la 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 affichant 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 antérieure, 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) – valeur Non ;
● Si la propriété Mode de compatibilité est définie sur Ne pas utiliser ou antérieure à la version 8.3.4 – valeur Top ;
● Position du contrôle de recherche – Détermine l'endroit où le bouton de contrôle de recherche apparaîtra. 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 journaux) et l'historique des requêtes de recherche (5 dernières requêtes). La propriété peut prendre les valeurs suivantes : Auto, Aucun, Panneau de commande.


Riz. 6. Gérer 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 affichant 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 antérieure, 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) – valeur 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 un formulaire, dont la source des commandes est une table du formulaire géré (affichant les données de la liste dynamique), alors la ligne 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)
● Ou dans l'un des autres panneaux de commande.

Examinons les fonctionnalités de l'utilisation de la recherche dans une liste dynamique :
● Pour rendre la recherche pratique à utiliser (y compris en termes de performances), vous devez activer la recherche en texte intégral pour tous les objets de configuration pouvant être utilisés comme table principale de la liste dynamique. De plus, la recherche en texte intégral doit inclure tous les détails des objets de configuration qui peuvent être affichés dans une liste dynamique et pour lesquels une recherche peut être requise.
Si un 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 disposer d'une tâche de routine 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 ViewFieldGettingProcessing() de l'objet correspondant.
● Pour les listes dynamiques avec une table principale spécifiée, la recherche en texte intégral est utilisée sur la table principale. 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 d'une recherche en texte intégral de la table principale est utilisé comme sélection basée sur des 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 le champ et l'objet de configuration utilisent la recherche en texte intégral). 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 appliquer la recherche en texte intégral.
Par exemple, cela peut se produire lors de la recherche d'une lettre et d'un grand nombre de lignes dans la base d'informations commençant par cette lettre.
● Si une sélection avec le type de comparaison Égal à est utilisée pour un champ de la table principale d'une liste dynamique, alors lors de l'exécution d'une recherche en texte intégral, une valeur de sélection sera ajoutée à la requête de recherche pour cette table.
● La chaîne de recherche est divisée en mots. Ce partitionnement s'effectue selon les règles suivantes :
● La ligne est interrompue en utilisant des espaces et des tabulations comme délimiteurs.
● Ensuite, chaque fragment résultant est traité :
● Si le fragment est une représentation de date (avec ou sans heure) basée sur les paramètres régionaux de la session en cours, alors le mot est le fragment.
● Sinon, le fragment est davantage divisé en utilisant les caractères « ,.-/\ » comme délimiteurs. 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 a la forme FieldName=Value, où Value est un mot converti en type Nombre. Si le casting ne peut pas être effectué, la recherche sur le terrain ne sera pas effectuée.
● Le mot est recherché comme sous-chaîne dans la représentation booléenne par défaut définie pour la session en cours. Si le mot recherché est trouvé dans une vue, il recherche alors la valeur correspondant à la vue dans laquelle le mot a été trouvé. Dans ce cas, la recherche n'utilise pas les vues spécifiées à l'aide de la propriété d'élément de formulaire Format.
● Pour un champ de type Date, la condition ressemble à FieldName>=StartofDay(Word) ANDFieldName<=КонецДня(Слово). Если Слово подобно дате, в которой год
indiquée par un ou deux chiffres, l'année sera réduite au siècle en cours et cette valeur sera ajoutée à la condition de recherche.
● Pour les champs de référence, une recherche est effectuée sur les champs utilisés pour constituer la vue de référence. 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 représentation de données personnalisée.
L'ensemble des conditions pour chaque mot est combiné « ET ».
● Pour les valeurs avec des zéros non significatifs, vous pouvez rechercher soit la chaîne avec des zéros non significatifs, soit la chaîne spécifiée sans zéros non significatifs.
● Si une liste dynamique affiche une liste de documents ou un historique de documents, l'intervalle d'affichage de la liste que vous spécifiez est également affiché dans la zone du formulaire réservée à l'affichage de l'état d'affichage de la liste dynamique souhaitée.
● La commande de recherche par valeur courante n'est pas disponible si la table principale de la liste dynamique est le critère de sélection.
● Les fragments de chaîne trouvés sont mis en surbrillance lorsqu'ils sont affichés dans le tableau.
● Une seule chaîne de recherche est prise en charge pour une colonne. Lors de l'ajout d'une nouvelle requête de recherche pour une colonne déjà recherchée, l'expression de recherche sera remplacée plutôt que les deux requêtes de recherche étant ajoutées.
● Si le formulaire ne comporte pas d'ajout d'élément de formulaire du formulaire Affichage de la chaîne de recherche associé au tableau (propriété Source d'ajout d'élément de formulaire) affichant une liste dynamique, l'appui 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 contient un ajout d'élément de formulaire de l'affichage de la chaîne de recherche du formulaire associé à un tableau (propriété Source d'ajout d'élément de formulaire) affichant une liste dynamique, alors pour ouvrir la boîte de dialogue de recherche, vous devez utiliser la commande Recherche avancée.
● 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 à l'aide d'un raccourci clavier fait apparaître la valeur de la cellule actuelle dans la ligne Que rechercher et la valeur du commutateur Comment rechercher est définie sur Par correspondance exacte.

● L'ouverture de la boîte de dialogue de recherche en commençant directement à saisir une chaîne de recherche dans la liste dynamique conduit au fait que la valeur du commutateur Comment rechercher est définie sur la valeur Par partie de la chaîne et que le texte saisi se retrouve dans la zone Quoi. pour rechercher le champ.

6. Obtenir les données affichées par une 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 sélections et des recherches appliquées. De telles actions incluent : le traitement des informations affichées, par exemple, le renvoi 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 par une liste dynamique, vous devez utiliser GetExecutableDataCompositionSchema() et
GetExecutableDataCompositionSettings().
Exemple de réception de données :

Schéma = Elements.List.GetExecutableDataCompositionSchema();
Paramètres = Items.List.GetExecutableDataCompositionSettings();
LayoutLinker = newDataCompositionLayoutLinker();
LayoutLayout = LayoutComposer.Execute (Schéma, Paramètres);
CompositionProcessor = newDataCompositionProcessor ;
LayoutProcessor.Initialize(LayoutLayout);
OutputProcessor = Nouveau OutputProcessorDataCompositionResultInTabularDocument ;
ReturnOutputProcessor.Output(CompositionProcessor);

L'insertion de données dans une collection de valeurs (table ou liste de valeurs) se fait de la même manière.
L'obtention de données de 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 :
● Couleurs de lignes alternées ;
● Image d'en-tête ;
● Photo du sous-sol;
● Couleur d'arrière-plan du pied de page ;
● 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 un formulaire géré n'est pas prise en charge ;
● Lors du classement d'un tableau hiérarchique par ordre croissant par champ de type Lien, les enregistrements contenant un lien vide sont toujours placés en premier.