Maison / Leçons Windows / 1c travailler avec la partie tabulaire du document. Comment remplir par programme les détails d'une ligne de tableau

1c travailler avec la partie tabulaire du document. Comment remplir par programme les détails d'une ligne de tableau

Dans cet article, nous allons écrire un traitement pour remplir la section tabulaire dans 1C 8.3 pour une configuration typique de 1C:ERP 2.1. Supposons que l'objectif de la tâche soit de définir une remise manuelle de 5 % pour tous les articles d'un document donné. Un exemple de l'article peut être téléchargé depuis ou un autre traitement similaire depuis.

Cette instruction est destinée aux formulaires gérés (8.2 et 8.3). Pour les formulaires ordinaires (8.1, 8.2), vous pouvez utiliser .

Créez et enregistrez un nouveau traitement sur votre ordinateur. Vous devez d’abord effectuer quelques étapes d’inscription.

Ouvrez le module objet et écrivez le code ci-dessous (il peut également être extrait du traitement donné ci-dessus). En général, la structure ne changera pas en fonction de la situation. Seuls certains paramètres de paramétrage sont édités, ainsi que, le cas échéant, les noms de variables.

Dans cet article, nous ne nous attarderons pas en détail sur l'enregistrement des traitements externes et des formulaires imprimés dans 1C. Toutes ces informations sont dans nos autres articles.

Remplir la partie tabulaire du document

Créons un nouveau formulaire de traitement.

Nous devons maintenant ajouter une nouvelle commande au formulaire créé. On suppose qu'il modifiera automatiquement les données dans la partie tabulaire d'un et de plusieurs documents (leurs formulaires de liste) simultanément, en les enregistrant ultérieurement.

Dans notre exemple, la partie tabulaire « Produits » déjà existante sera traitée. Une remise manuelle de 5% sera fixée pour chaque ligne. Nous calculerons également le montant de cette remise lui-même, égal à la quantité de marchandises dans la ligne multipliée par 0,05.

&Sur la procédure serveur, exécutez la commande (commande, objets d'affectation) Pour chaque commande client à partir des objets d'affectation, cycle Customer OrderObject = Commande client. GetObject() ; Pour chaque ligne TK du Customer OrderObject. Produits Cycle LineTZ. ManuelDiscountPercent = 5 ; LigneTZ. Montant de la remise manuelle = Ligne TK. Montant * 0 . 05 ; Fin du cycle ; ObjetCommandeClient. Écrire() ; Fin du cycle ; Fin de la procédure

Enregistrement du traitement externe

Démarrez 1C en mode « Entreprise » et ouvrez le répertoire « Rapports et traitements supplémentaires ». Trouvons-le via le menu "Toutes les fonctions".

Créez un nouvel élément dans le répertoire qui s'ouvre et cliquez sur le bouton du même nom pour charger votre traitement depuis le fichier. Plaçons-le simultanément à la fois sur le formulaire de liste et sur le formulaire de la fiche document elle-même.

Désormais, dans le formulaire de liste de documents « Commande client », le bouton « Remplir... » apparaîtra, ce qui vous permettra de modifier manuellement les remises sur les produits pour plusieurs documents à la fois.

Ce bouton sera également disponible dans la fiche document elle-même.

Afin de comptabiliser l'argent et les biens, divers tableaux sont largement utilisés dans les affaires. Presque tous les documents sont un tableau.

Un tableau répertorie les marchandises à expédier depuis l'entrepôt. Un autre tableau montre les obligations de payer pour ces biens.

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

Les tableaux en 1C sont également appelés « parties tabulaires ». Les répertoires, documents et autres en ont.

La requête, une fois exécutée, renvoie une table accessible de deux manières différentes.

La première sélection - plus rapide -, l'obtention de lignes à partir de celle-ci n'est possible que dans l'ordre. La seconde consiste à télé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électionner = Query.Run().Select();
// on parcourt toutes les lignes du résultat de la requête dans l'ordre
Boucle While Select.Next()
Rapport (Sélection.Nom);
Fin du cycle ;

//Option 2 – téléchargement vers une table de valeurs
Requête = Nouvelle requête("SELECT Nom FROM Directory.Nomenclature");
//récupère le tableau
Tableau = Requête.Run().Unload().
//de plus, nous pouvons également parcourir toutes les lignes
Pour chaque ligne du cycle de table
Rapport (String.Name);
Fin du cycle ;
//ou accéder arbitrairement aux chaînes
Row = Table.Find("Pelle", "Nom");

Une caractéristique importante est que dans le tableau obtenu à partir du résultat de la requête, toutes les colonnes seront strictement typées. Cela signifie qu'en demandant le champ Nom au répertoire Nomenclature, vous recevrez une colonne de type String avec une longueur autorisée ne dépassant pas N caractères.

Tableau sur le formulaire (client gros)

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 Contrôles. De même, vous pouvez sélectionner Contrôle Formulaire/Insertion dans le menu.

Les données peuvent être stockées dans la configuration - vous devez alors sélectionner la partie 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. Afin de voir la liste des parties tabulaires, vous devez développer la branche Objet.

Lorsque vous sélectionnez la partie tabulaire, 1C lui-même ajoutera des colonnes au tableau du formulaire. Les lignes saisies par l'utilisateur dans un tel tableau seront automatiquement enregistrées avec l'ouvrage/document de référence.

Dans la même propriété Data, vous pouvez saisir un nom arbitraire et sélectionner le type de table de valeurs.

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

En faisant un clic droit sur le tableau, vous pouvez ajouter une colonne. Dans les propriétés d'une colonne, vous pouvez préciser 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 de la partie tabulaire (cette dernière - si ce n'est pas un tableau arbitraire qui est sélectionné, mais un partie tabulaire).

Dans les propriétés du tableau du formulaire, vous pouvez spécifier si l'utilisateur peut ajouter/supprimer des lignes. Un formulaire plus avancé est la case à cocher Afficher uniquement. Ces propriétés sont pratiques à utiliser pour organiser des tableaux destinés à afficher des informations, mais pas à les éditer.

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

Dans les propriétés de la barre de commandes, cochez la case Remplissage automatique pour que les boutons du panneau apparaissent automatiquement.

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

Sur un formulaire géré, ces actions sont un peu différentes. Si vous devez placer une partie tabulaire sur le formulaire, développez la branche Objet et faites glisser l'une des parties tabulaires vers la gauche. C'est tout!

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

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

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

Pour qu'un 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.

Télécharger un tableau vers Excel

N'importe quel tableau 1C situé sur le formulaire peut être imprimé ou téléchargé sur Excel.

Pour ce faire, faites un clic droit sur un espace vide du tableau et sélectionnez Liste.

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

Des parties tabulaires existent pour de nombreux objets en 1C :

  • Annuaires
  • Documentation
  • Rapports et traitement
  • Plans de comptes
  • Plans de type caractéristique
  • Plans de type calcul
  • Processus et tâches métier

Les parties tabulaires vous permettent de stocker une quantité illimitée d'informations structurées appartenant à un seul objet.

Examinons quelques techniques pour travailler avec des pièces tabulaires.

Comment contourner la partie tabulaire

Pour parcourir la partie tableau, vous pouvez utiliser une boucle Pour chaque

Pour chaque ligne de la partie tabulaire du cycle

Rapport (attribut String. TabularPart) ;

Fin du cycle ;

A chaque itération dans la variable Doubler la ligne suivante de la section tabulaire est transmise. Les valeurs des détails de la ligne peuvent être obtenues par l'expression Ligne.AttributeName.

Comment obtenir et contourner les lignes sélectionnées de la partie tabulaire

Pour afficher les informations de la partie tabulaire de l'objet, utilisez un élément de formulaire Champ du tableau. Pour activer la possibilité de sélectionner plusieurs lignes dans un champ de table, vous devez définir la valeur Plusieurs dans sa propriété Mode de selection.

Pour obtenir une liste des lignes sélectionnées, utilisez le code suivant :

Une boucle est utilisée pour parcourir les lignes sélectionnées. Pour chaque:

SelectedRows = FormElements. Nom du champ de table. Lignes sélectionnées ;

Pour chaque ligne de la boucle des lignes sélectionnées

//contenu de la boucle

Fin du cycle ;

Comment sélectionner par programme les lignes d'une partie tabulaire (champ de table) et les désélectionner

Pour désélectionner par programme les lignes d'un champ de table :

Éléments de formulaire. Nom du champ de table. Lignes sélectionnées. Clair() ;

Pour sélectionner par programmation toutes les lignes d'un champ de table :

Pour chaque boucle CurrentRow From TabularPart
Éléments de formulaire. Nom du champ de table. Lignes sélectionnées. Ajouter(CurrentRow) ;
Fin du cycle ;

Comment vider la partie table

Partie tabulaire. Clair() ;

Comment obtenir la ligne actuelle d'une section de tableau

La ligne actuelle est la timeline dans laquelle l'utilisateur se trouve actuellement le curseur. Pour l'obtenir, vous devez accéder à l'élément de contrôle du formulaire associé à la partie tabulaire.

Pour les formulaires standards, le code ressemblera à ceci :

Éléments de formulaire. Nom du champ de table. Données actuelles;

Pour les formulaires gérés :

Éléments. Nom du champ de table. Données actuelles;

Comment ajouter une nouvelle ligne à une section de tableau

Ajout d'une nouvelle ligne à la fin de la partie tableau :

NouvelleRow = TablePart. Ajouter() ;

Ajout d'une nouvelle ligne n'importe où dans la section tableau (les lignes suivantes seront décalées) :

NouvelleRow = TablePart. Insérer (Index)
//Index - numéro de la ligne ajoutée. La numérotation des lignes commence à zéro.

Nouvelle ligne. Props1 = "Valeur" ;

Comment remplir par programme les détails d'une ligne de tableau

Si vous devez remplir par programme les détails d'une ligne de section de tableau ajoutée par l'utilisateur, vous devez utiliser le gestionnaire d'événements de section de tableau Au démarrage de l'édition.

La procédure créée par le gestionnaire a trois paramètres :

  • Élément- contient un élément de contrôle Champ tabulaire.
  • Nouvelle ligne- booléen. Contient de la valeur Vrai, si une nouvelle ligne de tableau est ajoutée, et Mensonge, si l'utilisateur a commencé à modifier une ligne déjà existante.
  • Copie- booléen. Contient de la valeur Vrai, si l'utilisateur copie la ligne, et Mensonge dans d'autres cas.

Regardons un exemple. Disons que nous devons remplir les détails de la section tabulaire CompteCompte, au cas où une nouvelle ligne serait ajoutée. Lors de l'édition d'une ligne existante, vous n'avez pas besoin de modifier le compte comptable.

Procédure TabularPartAtStartEditing(Element, NewRow, Copy)

//Si l'utilisateur modifie une ligne existante, alors nous ne faisons rien
Si PAS NewRow Alors
Retour;
Fin si ;

//Si la ligne est nouvelle, paramétrer le compte comptable
TechString = Article. Données actuelles; //Récupère la ligne actuelle de la partie tabulaire
TechString. Comptabilité = Plans comptables. Autonome. Compte requis ;
Fin de la procédure