Contacts

Comment obtenir une ligne d'un tableau de valeurs. Quelles méthodes existent et comment rechercher plusieurs valeurs en même temps

Rechercher dans le tableau les valeurs 1C

Quelles méthodes existent et comment rechercher simultanément plusieurs valeurs.

Il existe deux méthodes spéciales pour rechercher des valeurs dans une table :

1. Trouver

Horizon TV = Ouvrages de référence.Nomenclature.FindByName ("Horizon TV");
FoundString = TKNomenclature.Find (TV Horizon);
// nous pouvons également spécifier dans quelles colonnes rechercher pour accélérer la recherche
FoundString = TKNomenclature.Find (TV Horizon, "Nomenclature");

Cette méthode renvoie la première chaîne trouvée avec la valeur souhaitée, ou Undefined sinon. Par conséquent, il est pratique de l'utiliser pour trouver des valeurs uniques, car sinon, lorsque vous trouvez une valeur, vous devez la supprimer du tableau pour trouver la suivante.

Afin de ne pas souffrir comme ça, il existe la méthode suivante, qui permet de trouver un tableau de chaînes correspondantes :

2. Trouver des chaînes


StructureSelection.Insérer ("Nomenclature", TV Horizon); // spécifiez d'abord la colonne où chercher, puis ce qu'il faut rechercher.

Cette méthode renvoie toujours un tableau, mais il peut être vide si rien n'a été trouvé. Et cette méthode, comme la précédente, renvoie les lignes du tableau des valeurs elles-mêmes, et non les valeurs elles-mêmes dans un tableau séparé. Par conséquent, en modifiant les valeurs dans la ligne du tableau ou, comme dans la méthode précédente, pour la ligne trouvée, vous modifierez la valeur dans le tableau des valeurs traité.

Une autre bonne chose à propos de cette méthode est qu'elle permet de rechercher plusieurs colonnes de la table de valeurs en même temps :


Cadre de sélection = nouvelle structure ;
StructureSelection.Insérer ("Nomenclature", Horizon TV);
Structure de la sélection Insérer ("Quantité", 10);
FoundArrayStrings = TKNomenclature.FindStrings (SelectionStructure);

Le seul inconvénient, comme vous pouvez le voir, vous ne pouvez pas utiliser d'autres types de comparaison que "égal"

Probablement plus d'un objet collections universelles les valeurs ne sont pas aussi populaires auprès des développeurs 1c que la table des valeurs (TK) utilise. Les listes de valeurs ne peuvent pas être étendues avec des attributs, un arbre de valeurs est visuellement facile à percevoir, mais la construction de la lecture par programmation de la valeur de ses chaînes est difficile à mettre en œuvre.

Et juste un tableau de valeurs :

  • Capable de remplir directement les sections tabulaires des documents, ouvrages de référence et traitement;
  • est le résultat de l'exécution d'une requête ;
  • Facile à lire et à visualiser ;
  • et bien d'autres encore.

Dans cet article, nous avons essayé de donner idée générale sur un objet aussi complexe et polyvalent qu'une table de valeurs.

En quoi consistent les tables de valeurs

Tous les développeurs novices savent clairement qu'une table de valeurs a :

  1. Colonnes décrivant la structure du tableau ;
  2. Lignes qui remplissent le tableau d'informations.

Cependant, nous oublions très souvent une propriété importante d'une table - ses index, à savoir leur utilisation nous permet d'accélérer le processus de recherche dans la table plusieurs fois, la formation de sélections dans celle-ci et améliore considérablement les performances.

Mais tout d'abord.

La figure 1 montre à quoi ressemble un tableau de valeurs, imprimé par une procédure simple, qui montre leur structure et leur contenu.

Comme vous pouvez le voir dans l'exemple, il y a 5 colonnes dans le tableau, sans compter les numéros de ligne dans l'ordre.

Dans la plupart des cas, il n'est pas nécessaire de spécifier le type de données de la colonne et sa largeur, il suffit de définir le nom de la colonne, mais dans certains cas, cela ne peut tout simplement pas être fait (par exemple, lors du déchargement d'une table dans un fichier dbf).

Si à l'avenir il est prévu d'utiliser la table de valeurs comme source de données pour une requête, il est nécessaire de spécifier le type de données (Fig. 2).

La ligne est ajoutée à l'aide de la méthode Add(), avec attribution d'un nom nouvelle ligne.

Index de table de valeurs

La table de valeurs est recherchée à l'aide de deux méthodes :

  • Rechercher (renvoie le premier élément trouvé par certains paramètres, sinon la valeur est Undefined);
  • FindRows (renvoie un tableau de lignes de table qui correspondent à certaines conditions).

La recherche de grandes tables "gèle" fortement le système et peut prendre beaucoup de temps. C'est là que les index doivent être utilisés.

Dans le premier cas, la recherche s'effectue par une valeur et une colonne, et c'est celle-ci qu'il faut reporter sur les index (Fig. 3)

Des index, séparés par des virgules, indiquent que la table peut être recherchée à l'aide de la méthode FindStrings, dans laquelle une structure spécifique sera passée en paramètre.

Dans le cas de l'exemple, la deuxième ligne indique la recherche simultanée des lignes contenant sens défini Nomenclature et ses caractéristiques, et la troisième ligne indique que le document "Ordre de fabrication" peut être ajouté aux paramètres de recherche.

Lorsque vous travaillez avec divers objets de métadonnées de configuration, ainsi que des rapports et des traitements, une situation se présente souvent lorsqu'il est nécessaire d'effectuer certaines actions avec leurs sections tabulaires. Il n'est pas toujours pratique de travailler directement avec des éléments de formulaire ou des sections tabulaires de documents.

C'est là que la table des valeurs vient à nouveau à la rescousse. Dans les savoirs traditionnels, en utilisant la méthode sections tabulaires Vous pouvez décharger ():

  1. Répétez complètement la structure de la table du document, en préservant l'intégralité informations possibles;
  2. Déterminez uniquement les colonnes et les lignes nécessaires à la poursuite du travail et affichez-les.

L'action inverse (remplissage de la section tabulaire) se produit par la méthode Load(), dont le seul paramètre est le nom de la table de sortie.

Il convient de noter que la comparaison des colonnes de la section tabulaire et des savoirs traditionnels se fait par les noms.

Vous pouvez copier complètement une affectation technique à une autre, ainsi que déterminer quelles lignes et colonnes seront transférées à l'aide de la méthode Copier ().

4

Dans ce cas, les colonnes du tableau seront sauvegardées et les informations et lignes du doublon seront supprimées.

Table de valeurs et requête

Comme mentionné ci-dessus, le déchargement du résultat de l'exécution de la requête se produit dans le TOR, mais assez souvent les développeurs ont une question: comment traiter la table de valeurs avec une requête, est-ce possible et quel code aide à faire il.

La technologie de requête dans 1C n'implique pas l'utilisation de savoirs traditionnels comme sources de données, mais cette limitation peut être facilement contournée en utilisant. Le code de la figure 5 montre comment cela est fait.

5

En remplaçant "*" par le nom des colonnes (une ligne de la forme TK.Nomenclature), vous pouvez réduire la quantité d'informations téléchargées.

Une erreur lors de l'exécution d'une requête (Fig. 5) "Le type ne peut pas être traité dans la requête" indique que le développeur a oublié d'exécuter une partie du code de la Fig. 2 et n'a pas saisi les colonnes.

Tableau des valeurs et cycles

Lors de l'itération sur les lignes du tableau des valeurs par la méthode contenant le compteur (Fig. 6), il est important de se rappeler que la valeur initiale de l'indice de ligne est 0, et la valeur finale de l'itérateur doit être 1 inférieur au nombre de lignes du tableau. Sinon, il y a 100 % de chances d'une erreur « Valeur d'index hors plage ».

Figure 6

En général, il est préférable d'itérer sur les chaînes TK via la construction "Pour chaque ... de", en spécifiant le nom de l'itérateur.

Salutations à tous les lecteurs d'infostart. Cet article sera consacré à la problématique de la création d'une table de valeurs arbitraire sur la forme d'une application managée. par programmation.

Caractéristiques de la tâche.

Quiconque a programmé dans une application régulière est souvent confronté à la tâche d'obtenir une table de valeurs arbitraire sur un formulaire. Un tableau arbitraire de valeurs est compris comme un tableau dont le nombre et le type de colonnes ne sont pas connus à l'avance. C'est-à-dire qu'il peut y avoir 3 colonnes, peut-être 6 ou peut-être 8. Dans une application normale, tout est simple : vous pouvez placer l'élément "Values ​​Table" sur le formulaire de traitement, puis transférer la table de valeurs créée vers ce élément par programmation. Puis une simple commande :

ElementsForm.TableField.CreateColumns ();

recevoir tableau prêt valeurs sur le formulaire. Il semblerait que cela pourrait être plus facile.

Tout était dans une application régulière. Tout a changé dans l'application gérée. Il n'est pas si facile de créer une table arbitraire. Vous devez maintenant soit paramétrer de manière rigide la table de valeurs sur le formulaire, soit la créer par programmation (décrivez, eh bien, c'est en fait l'essence de l'application gérée elle-même). C'est ce que nous allons essayer de faire : par logiciel créer une table arbitraire de valeurs sur formulaire géré.

La solution du problème.

La première chose que nous devons faire est de définir comment le tableau apparaîtra sur le formulaire. L'essentiel est que vous n'ayez pas besoin de créer d'élément de formulaire lors du traitement. Nous allons le créer par programmation, comme la table entière. C'est-à-dire que le tableau sera décrit et créé au moment de l'ouverture du formulaire ou de l'utilisation d'un bouton - c'est ainsi que tout le monde en a besoin.

La table est créée sur le formulaire via la description de la table des valeurs en tant qu'attribut :
Tableau ChoiceType = Nouveau tableau ; Tableau deChoiceType.Add (Type ("ValuesTable")); ChoiceTypeDescription = NewTypeDescription (ArrayChoiceType); ArrayAttributes = Nouveau tableau ; Tableau d'attributs.Ajouter (nouvel attribut de formulaire ("Tableau de planification", DescriptionTypeChoice, "", "TZN")); Nous devons maintenant créer une table de valeurs programmatique contenant les données. Si le tableau des valeurs est obtenu à partir d'une requête, alors tout est plus ou moins en ordre. Si le tableau est créé manuellement, la valeur des colonnes qui contiendront des nombres ou des dates peut être créée via la "Description des types". L'essentiel est que les colonnes de la table de valeurs doivent être d'un certain type. Si, par exemple, on suppose que l'utilisateur remplira les données de ces colonnes de manière interactive, alors vous ne pouvez pas ajouter une colonne du tableau des valeurs simplement avec un nom, elle doit avoir un type. Gardez à l'esprit que cela est très important. nous transférerons ces types dans le tableau du formulaire.
Nous créons un tableau qui contient plusieurs colonnes :
CD = Nouveaux qualificatifs de date (Date Parts.Time); ArrayKD = nouveau tableau ; ArrayCD.Add (Type ("Date")); TypeDescriptionTime = Nouveau TypeDescription (ArrayKD, KD); TK = Nouveau tableau de valeurs ;
TK.Kolonki.Add ("S", DescriptionTypesTime);
TZ.Kolonki.Add ("Avant", DescriptionTypesTime);
TK.Kolonki.Add ("nom complet");
TK.Kolonki.Add ("Note"); // Nom complet et Notes - lignes Ensuite, nous remplirons notre table de programme TK avec les données nécessaires. Nous obtenons la table TK, qui contient les valeurs nécessaires et est prête à être transférée vers l'attribut de formulaire créé. Pour chaque colonne de TK. Boucle de colonne

ArrayAttributes.Add (nouvel attribut de formulaire (Column.Name, Column.ValueType, "ScheduleTable"));
Fin de cycle ;
ModifyAttributes (ArrayAttributes);
ChoiceFieldsTable = Elements.Add ("TZN", Type ("FormTable"));
ChoiceFieldsTable.PutKData = "ScheduleTable";
ChoiceFieldsTable.Display = DisplayTable.List;

Voici une combinaison si simple et notre table est prête.

Pour chaque colonne de TK. Boucle de colonne

NewElement = Elements.Add (Column.Name, Type ("FormField") ,ChoiceFieldsTable);
NewElement.View = FormFieldType.InputField;
NewItem.PathData = "ScheduleTable." + Colonne.Nom ;
NouvelÉlément.Largeur = 10 ;
Fin de cycle ;

La conception conditionnelle, si nous en avons besoin, nous écrivons également manuellement, le menu de commande - manuellement. Les gestionnaires de table sont également écrits à la main. Par exemple, pour ajouter un gestionnaire d'événements pour la table Select :

ChoiceFieldsTable.SetAction ("Choix", "TZNSelection");

Pour gérer cet événement, une procédure distincte est écrite sous la forme d'une procédure :

& sur le client
Procédure TZNSelection (TK, SelectedString, Field, StandardProcessing)
// commandes du gestionnaire EndProcedure

Notez que les gestionnaires de table se déclenchent sur le client et doivent donc avoir un pointeur de compilateur de commande

& sur le client

Bon, et la dernière chose que je voulais ajouter c'est qu'après toutes ces actions, on n'oublie pas de transférer la table finie vers l'attribut form :

ValueVRequisitForm (TK, "Tableau de planification");

Voici ce que nous avons comme résultat :


Et voici le traitement de l'événement "Select":



Épilogue.

J'espère que cet article aidera les programmeurs 1C qui commencent à créer des tables sur un formulaire par programmation.

Vous pouvez télécharger un traitement qui crée par programmation une table de valeurs et de sorties sous une forme gérable avec des commentaires pour vous aider à créer vos tables.

Afin de comptabiliser l'argent et les biens, différentes tables sont largement utilisées dans les affaires. Presque chaque document est un tableau.

Un tableau répertorie les articles à expédier depuis l'entrepôt. Dans un autre tableau, il y a des obligations de payer pour ces biens.

Ainsi, en 1C, le travail avec des tableaux occupe une place prépondérante.

Les tableaux en 1C sont également appelés « sections tabulaires ». Les ouvrages de référence, les documents et autres en ont.

La requête, du fait de son exécution, renvoie une table dont l'accès peut être obtenu de deux manières différentes.

La première sélection - la plus rapide -, la récupération des lignes n'est possible que dans l'ordre. La seconde consiste à décharger le résultat de la requête dans une table de valeurs, puis à y accéder de manière aléatoire.

// Option 1 - accès séquentiel aux résultats de la requête

// récupère le tableau
Sélection = Requête.Exécuter ().Sélectionner ();
// dans l'ordre, nous parcourons toutes les lignes du résultat de la requête
Pendant que Sampling.Next () Boucle
Rapport (Sample.Name);
Fin de cycle ;

// Option 2 - déchargement dans une table de valeurs
Demande = Nouvelle demande ("SELECT Name FROM Directory.Nomenclature");
// récupère le tableau
Table = Requête.Exécuter ().Décharger ().
// alors on peut aussi parcourir toutes les lignes
Pour chaque ligne de la boucle de table
Rapport (String.Name);
Fin de cycle ;
// ou accéder arbitrairement aux chaînes
Ligne = Table.Rechercher ("Pelle", "Nom");

Une caractéristique importante est que dans la table obtenue à partir du résultat de la requête, toutes les colonnes seront fortement typées. Cela signifie qu'en demandant le champ Nom du livre de référence Nomenclature, vous recevrez une colonne de type Chaîne avec une longueur autorisée ne dépassant pas N caractères.

Tableau sur formulaire (client lourd)

L'utilisateur travaille avec le tableau lorsqu'il est placé sur le formulaire.

Nous avons discuté des principes de base du travail avec des formulaires dans la leçon sur et dans la leçon sur

Alors, plaçons le tableau sur le formulaire. Pour ce faire, vous pouvez faire glisser le tableau depuis le panneau de configuration. De même, vous pouvez sélectionner dans le menu Formulaire / Insérer un contrôle.

Les données peuvent être stockées dans la configuration - vous devez ensuite sélectionner la section tabulaire existante (précédemment ajoutée) de l'objet de configuration dont vous modifiez le formulaire.

Cliquez sur le bouton "..." dans la propriété Données. Pour voir la liste des sections tabulaires, vous devez développer la branche Objet.

Lors du choix d'une section tabulaire, 1C lui-même ajoutera des colonnes au tableau sur le formulaire. Les lignes saisies par l'utilisateur dans un tel tableau seront enregistrées automatiquement avec la référence / le document.

Dans la même propriété Data, vous pouvez entrer un nom arbitraire et sélectionner le type ValuesTable.

Cela signifie qu'une table de valeurs arbitraire a été sélectionnée. Il n'ajoutera pas automatiquement de colonnes, il ne sera pas automatiquement enregistré, mais vous pouvez en faire ce que vous voulez.

En cliquant avec le bouton droit sur le tableau, vous pouvez ajouter une colonne. Dans les propriétés de la colonne, vous pouvez spécifier son nom (pour référence dans le code 1C), l'en-tête de la colonne sur le formulaire, le lien avec l'attribut section tabulaire (ce dernier - s'il ne s'agit pas d'un tableau arbitraire, mais la section tabulaire est choisi).

Dans les propriétés du tableau sur le formulaire, vous pouvez spécifier si l'utilisateur peut ajouter/supprimer des lignes. Formulaire plus avancé - case à cocher Afficher uniquement. Ces propriétés sont utiles pour organiser les tableaux pour afficher des informations, mais pas pour les modifier.

Pour gérer le tableau, vous devez afficher la barre de commandes sur le formulaire. Sélectionnez l'élément de menu Formulaire / Insérer un contrôle / Panneau de commandes.

Dans les propriétés de la barre de commandes, cochez la case Autocomplete pour que les boutons de la barre apparaissent automatiquement.

Tableau sur formulaire (client léger / géré)

Sur un formulaire géré, ces actions sont légèrement différentes. Si vous devez placer une section tabulaire sur le formulaire, ouvrez la branche Objet et faites glisser l'une des sections tabulaires vers la gauche. Et c'est tout!

Si vous devez placer une table de valeurs, ajoutez un nouvel attribut du formulaire et spécifiez le type - table de valeurs dans ses propriétés.

Pour ajouter des colonnes, utilisez le menu contextuel sur cet attribut de formulaire, l'élément Ajouter une colonne d'attribut.

Ensuite, faites également glisser le tableau vers la gauche.

Pour que le tableau ait une barre de commandes, dans les propriétés du tableau, sélectionnez les valeurs dans la section Utilisation - Position de la barre de commandes.

Exporter un tableau vers Excel

Tout tableau 1C situé sur le formulaire peut être imprimé ou téléchargé dans Excel.

Pour ce faire, cliquez avec le bouton droit sur un espace vide du tableau et sélectionnez Liste.

Dans un client (léger) géré actions similaires peut être effectué à l'aide de l'élément de menu Toutes les actions / Afficher la liste.



Vous avez aimé l'article ? Partagez-le