Capacités interactives d'un tableur. Travailler avec une feuille de calcul Comment modifier une feuille de calcul dans 1c

La plupart des supports de formation sur la programmation dans le système 1C décrivent la formation de formulaires imprimés basés sur un objet "Document tabulaire" se limitent à afficher le formulaire terminé à l’écran. Pour les utilisateurs, ce qui est bien plus important est l’apparence du document une fois imprimé. Ici, outre une mise en page bien conçue, les paramètres d'impression jouent également un rôle.

Presque tous les paramètres disponibles dans les boîtes de dialogue des paramètres d'impression (paramètres de l'imprimante, propriétés de la page) peuvent être spécifiés directement lors de la génération d'un tableur.

Regardons les propriétés et méthodes d'un tableur liées aux paramètres d'impression (dans les exemples donnés, « TabDoc » est un objet de type « Spreadsheet Document »).

Propriété "Nom de l'imprimante" Vous permet de spécifier une imprimante autre que celle par défaut pour l'impression. Le nom doit correspondre au nom de l'imprimante configuré sur le système :

TabDoc. Nom de l'imprimante = "HP LaserJet série 3050 PCL 6";

Lors de l'impression d'un lot de documents, vous pouvez gagner du temps en définissant l'option de classement :

TabDoc. ParseByCopies = vrai ;

Le nombre de copies peut être précisé comme suit :

TabDoc. Nombre d'instances= 5 ;

Bien entendu, vous pouvez paramétrer les champs :

TabDoc. ChampGauche = 20 ; //La marge gauche est de 20 mm, les autres marges sont de 10 mm (par défaut)

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

TabDoc. Page d'orientation= Page d'orientation. Paysage;
TabDoc. Instances sur la page= 2 ; //il y aura 2 pages sur la feuille
TabDoc. Mise à l'échelle automatique = vrai ; //similaire aux paramètres d'échelle « largeur de page »

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

Propriété "Taille de la page" vous permet de définir des formats de page standard - " A3", "A4", "A 5" (une liste complète des options est disponible dans l'aide 1C).

TabDoc. Taille de la page = "A3" ; // la lettre A doit être anglaise

Pour un format de papier non standard (Personnalisé), vous pouvez spécifier la hauteur et la largeur de la page (en mm) :

TabDoc. PageSize = "Personnalisé" ; //taille non standard
TabDoc. Hauteur de la page = 350 ;
TabDoc. Largeur de page = 350 ;

Également dans une feuille de calcul, vous pouvez contrôler la sortie des en-têtes et des pieds de page ainsi que leur contenu. Cela se fait en utilisant les propriétés "En-tête de page" Et "Bas de page". Par exemple:

TabDoc. En-tête de page. Sortie = vrai ; //l'en-tête sera imprimé
TabDoc. Taille de l'en-têteHaut= 7 ; //taille du pied de page 7 mm (par défaut 10 mm)
TabDoc. En-tête de page. Position verticale= Position verticale. Haut ;
TabDoc. En-tête de page. Page d'accueil= 2 ; //le pied de page s'affiche à partir de la deuxième page
Pied de page de police=Nouvelle police("Courier New", 8,True);
TabDoc. En-tête de page. Police = Pied de page de police; //police oblique
TabDoc. En-tête de page. TexteDansCentre = "En-tête de page";
TabDoc. En-tête de page. TexteDroite = "Page[&PageNumber] sur [&PagesTotal]"; //pagination
TabDoc. En-tête de page. TexteGauche = "[&Date]" ; //La date actuelle

Le document généré est envoyé pour impression selon la méthode "Taper()". Il existe deux options d'achat possibles.

1) Directement à l’imprimeur :

TabDoc. Imprimer(.NotUse);
TabDoc. Imprimer(vrai);

2) Avant l'impression, une boîte de dialogue d'impression s'affichera :

TabDoc. Imprimer ( DialogUsageModePrint. Utiliser );
TabDoc. Imprimer(faux);

De plus, vous pouvez contrôler la façon dont le document est divisé en pages. Vous pouvez estimer le nombre de pages d'un document en fonction des paramètres actuels de l'imprimante :

TabDoc. Nombre de pages();

Utiliser des méthodes "Vérifier la sortie()" Et "VérifierAttach()" Vous pouvez déterminer si une feuille de calcul ou un ensemble de zones de feuille de calcul s'adaptera à la page en hauteur et en largeur avec les paramètres actuels de l'imprimante.

Il convient de garder à l'esprit que le fonctionnement des trois dernières méthodes dépend de l'imprimante installée. Si la méthode ne le trouve pas, une exception est levée.

Des méthodes permettent de forcer l'insertion de sauts de page"SortieVerticalPageSeparator()" Et "SortieHorizontalPageSeparator()".

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

Sinon TabDoc. Vérifier la sortie ( Tableau de zones de sortie) Alors
TabDoc. Séparateur de page horizontale de sortie();
fin si;

Une caractéristique importante de la plateforme 1C:Enterprise 8.2 est la stricte séparation des propriétés et des méthodes par contexte d'exécution. Bien que toutes les propriétés ci-dessus soient disponibles dans n'importe quel contexte, les méthodes répertoriées ne sont pas disponibles sur le client léger. L'exception est la méthode « Print() », dont la disponibilité est limitée à la partie client pour des raisons évidentes. Cela signifie que la création d'une feuille de calcul doit avoir lieu sur le serveur et qu'elle doit être envoyée pour impression dans une procédure client.

La feuille de calcul 1C:Enterprise 8 n'est pas seulement utilisée pour imprimer des documents et des rapports. Il possède des fonctionnalités avancées qui en font une expérience utilisateur interactive. Ces options incluent :
- les transcriptions,
- les groupes,
- Remarques.
Il convient de noter que les capacités interactives d'un tableur peuvent également inclure des tableaux croisés dynamiques et des contrôles situés dans les cellules, mais nous ne nous y attarderons pas maintenant, mais examinerons de plus près les mécanismes ci-dessus.

Transcriptions

Le système 1C:Enterprise 8 prend en charge un mécanisme de décodage (drill-down, drill-through), lorsque l'utilisateur clique sur une ligne ou une cellule du rapport et reçoit un rapport plus détaillé, à moins, bien entendu, que celui-ci ne soit fourni par le programmeur. .

Les transcriptions sont divisées en standard et non standard. Les transcriptions standard sont traitées automatiquement par le système et ne nécessitent aucun effort supplémentaire de la part du programmeur, par exemple, un formulaire de document sera ouvert pour les documents et un formulaire d'élément sera ouvert pour les éléments de répertoire. Si le répertoire est édité dans une liste, le curseur sera placé sur l'élément courant dans la forme liste. L'événement Decryption Processing est destiné à effectuer un déchiffrement non standard.

L'événement Transcript Processing ne peut être traité que si un document de feuille de calcul est placé sur un formulaire en tant que contrôle plutôt que ouvert dans une fenêtre distincte, car cet événement n'existe que pour le contrôle SpreadsheetDocumentField. Vous trouverez ci-dessous la catégorie de propriété « Événements » de l'élément de contrôle « TabularDocumentField », où la procédure de gestionnaire de déchiffrement est affectée.

La procédure « DecryptString » elle-même peut ressembler à ceci (à titre d'exemple) :

Procédure DecryptString(Element, Decryption, StandardProcessing)
Si TypeValue(Déchiffrement) = Type("DocumentLink.Sales Agreement") Alors

StandardProcessing = Faux ;
Rapport = Reports.ContractAnalysis.Create();
Rapport.Contract = Explication ; //remplir les détails du rapport
Report.Generate(FormElements.TabularDocumentField1);
fin si;
Fin de la procédure

Note 1. Dans le module applicatif (analogue au module global de la version 7.7) il n'y a plus d'événement TableCellProcessing. Tout traitement des relevés de notes doit être effectué dans le module de formulaire où se trouve l'élément de contrôle « TabularDocumentField ».

Note 2. L'événement Transcript Processing se produit lorsque vous cliquez sur une cellule ou une image contenant une transcription. Ne le confondez pas avec l'événement "Sélectionner" qui se produit pour toutes les cellules et images lorsque vous double-cliquez ou appuyez sur la touche Entrée, et l'événement "Sélectionner" se produit en premier, puis l'événement "Traitement de décryptage".

Groupes

Dans 1C:Enterprise 8, il est devenu possible de regrouper des données dans un rapport. Les regroupements peuvent être horizontaux ou verticaux, puis des marqueurs spéciaux apparaissent à gauche et en haut, permettant à l'utilisateur de développer et de réduire les groupes.

Le moyen le plus simple d'ajouter des regroupements à un rapport est de confier cette tâche au système, un effort minimal sera alors requis de la part du programmeur. Il vous suffit d'appliquer les méthodes StartAutoGroupingRows/StartAutoGroupingColumns et EndAutoGroupingRows/EndAutoGroupingColumns, qui activent respectivement le mode de regroupement automatique des lignes ou des colonnes. Dans ce mode, lors de l'appel des méthodes Output (pour les lignes) et Attach (pour les colonnes), des paramètres supplémentaires pour le regroupement sont spécifiés :

Sortir(<Таблица>, <Уровень>, <Имя группы>, <Открыта>)
Rejoindre(<Таблица>, <Уровень>, <Имя группы>, <Открыта>)

Lors de l'utilisation de regroupements, il est très utile de définir la propriété AutoIndent de la cellule sur une valeur non nulle, telle que 5. Le système ajoutera alors automatiquement le nombre d'espaces spécifié à gauche du texte de la cellule, en fonction du niveau de regroupement actuel. . En conséquence, le rapport acquerra une apparence pratique pour afficher la hiérarchie des données.

L'exemple suivant affiche une liste de produits avec des regroupements :


TabDoc = Nouveau TabularDocument ;

Zone = Layout.GetArea("String");

Sélection = Répertoires.Nomenclature.SelectHierarchically();
TabDoc.StartAutoGroupingRows();
Boucle While Select.Next()
Area.Parameters.Nomenclature = Selection.Link;
TabDoc.Output(Area, Selection.Link.Level(), Selection.Name, True);
Fin du cycle ;

TabDoc.FinishAutoGroupingRows();
TabDoc.Show();

Remarques

Les cellules d'un document de feuille de calcul peuvent contenir des notes, auquel cas un petit triangle rouge apparaît dans le coin supérieur droit de la cellule. Lorsque vous passez votre souris sur une cellule, le commentaire apparaît dans une fenêtre pop-up.

L'installation logicielle des notes est mise en œuvre comme suit :

TabDoc = FormElements.TabularDocumentField1;
TabDoc.Clear();

Layout = Directories.Nomenclature.GetLayout("Catalogue");
Sélection = Répertoires.Nomenclature.Select();
Boucle While Select.Next()

LayoutCellsArea = Layout.Area("CellName");
LayoutCellsArea.Note.Text = Selection.Link.Comment;

TabDocArea = Layout.GetArea("String");
AreaTabDoc.Parameters.Nomenclature = Selection.Link;
TabDoc.Output(AreaTabDoc);

Fin du cycle ;

Notez que la propriété Note de l’objet LayoutCellArea est un objet Drawing, et non une simple chaîne. Grâce à cet objet, vous pouvez modifier l'apparence de la note, la police et la couleur du texte, l'arrière-plan, les lignes, etc.

Résumé
- Une feuille de calcul sert non seulement à imprimer des documents et des rapports, mais possède également de puissantes capacités interactives. Ces fonctionnalités incluent principalement des transcriptions, des regroupements et des notes (traités dans cette section), ainsi que des tableaux croisés dynamiques et des contrôles (traités dans d'autres sections).
- Relevés de notes non standards, c'est-à-dire traité par le programmeur, peut être implémenté si seul le document tableur est affiché sous forme d'écran (l'élément de contrôle "TabularDocumentField").
- Le moyen le plus simple d'utiliser les regroupements est d'activer le mode de regroupement automatique des lignes et, lors de l'affichage de chaque zone dans un tableur, d'indiquer le niveau auquel elle appartient. Il est également recommandé de définir la propriété « Auto-Indent » pour les cellules requises dans la mise en page.
- Les notes "apparaissent" lorsque vous passez la souris sur une cellule. Il est possible de modifier l'apparence des notes à l'aide du langage intégré.

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 semblent 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.

Bon moment à tous !

L'essence de la tâche que nous analyserons est de savoir comment lire les données des cellules fusionnées d'un tableur à l'aide de l'objet "TabularDocument". Nous aborderons également la façon de parcourir les données sélectionnées. Alors, commençons.

LECTURE D'UN DOCUMENT DE TABLE

Pour lire un tableur en 1C, vous pouvez utiliser, curieusement, l'objet « TabularDocument ». Depuis la version 8.3.7 (si ma mémoire est bonne), cet objet est capable de lire non seulement les fichiers MXL, mais aussi XLS/XLSX/ODT et quelques autres options de table (et aussi, d'ailleurs, d'écrire).

Mais comme toujours, il y a un petit problème : l'objet est créé uniquement sur le serveur. Mais 1C a essayé de résoudre ce problème en créant des flux en mémoire et en donnant au programmeur la possibilité de les utiliser à la place du chemin d'accès au fichier dans le constructeur d'objet, mais il est nécessaire de spécifier le type de fichier en cours de lecture. Certes, sur la plateforme Windows 7 pro x64 avec 1C 8.3.10.2466, je n'ai pas pu lire Excel de cette manière, mais MXL le lit parfaitement, je dois donc encore créer un fichier temporaire pour les fichiers Excel.

Ainsi, le code de lecture du fichier :

&OnServer Procédure LoadFileOnServer(DD, Extension) Si Extension = "xml" Alors BH = New DataRead(DD); Tab.Read(BH, TabularDocumentValueReadingMethod.Value, TabularDocumentFileType.MXL); Sinon FileName = GetTemporaryFileName(Extension); DD.Write(FileName); Tab.Read(FileName); Supprimer les fichiers (nom du fichier); fin si; Fin de procédure &Sur la procédure client LoadFile(Command) Dlg = New FileSelectionDialog(FileSelectionDialogMode.Open); Long.Filter = "Fichiers MXL (*.mxl)|*.mxl|Fichiers XLS (*.xls)|*.xls|Fichiers XLSX (*.xlsx)|*.xlsx|Fichiers ODS (*. cotes)|*.cotes"; Duration.Show(New AlertDescription("WhenSelectingFile", ThisForm)); EndProcedure &OnClient Procedure WhenSelectingFile(Res, Add) Export If Res = Undefined Then Return EndIf; fl = Nouveau fichier (Rés); LoadFileOnServer (New BinaryData (Res), HPreg (fl.Extension)); Fin de la procédure

Créons un formulaire avec une feuille de calcul et un bouton "Télécharger le fichier" et obtenons un formulaire photo capable de lire les fichiers MXL, XLS, XLSX et ODS dans une feuille de calcul.

CELLULES SÉLECTIONNÉES

Voyons où se trouvent les cellules sélectionnées par l'utilisateur. Et voici une bizarrerie intéressante de la plateforme : ces cellules sélectionnées ne sont disponibles sur le client que dans l'élément de formulaire correspondant. Parcourons les cellules sélectionnées et imprimons le résultat sur la ligne de message :

&Sur la procédure client ReportSelected(Command) For Each Area FROM Elements.Tab.GetSelectedAreas() Boucle For X = Area.Left By Area.Right Boucle For Y = Area.Top By Area.Bottom Cycle Report(Tab.Area(Y, X) .Texte); Fin du cycle ; Fin du cycle ; Fin du cycle ; Fin de la procédure

Si nous sélectionnons maintenant la première ligne sans les cellules fusionnées, nous obtenons le résultat suivant :

Ceux. ici, nous avons imprimés A, B et C. Si nous sélectionnons la deuxième ligne, nous obtenons une image différente :

Comme vous pouvez le constater, la présence d'une union ne nous empêche en aucun cas d'obtenir les données de la ligne que nous avons fusionnée avec la ligne. De plus, ces deux lignes contiendront la valeur « A ». Si nous sélectionnons la troisième ligne, nous obtiendrons le résultat "A A A" (enfin, vous comprenez déjà pourquoi, n'est-ce pas ?)

CELLULES COMBINÉES

Afin de résoudre le problème des cellules fusionnées, il vous suffit de connaître un détail : chaque cellule a les détails « Gauche », « Droite », « Haut » et « Bas ». Et pour les cellules fusionnées, elles ne seront pas égales. Pour une jointure simple selon l'axe X, la lecture prenant en compte la jointure sera assez simple :

Pour chaque zone FROM Elements.Tab.GetSelectedAreas() Boucle For X = Area.Left By Area.Right Boucle For Y = Area.Top By Area.Bottom Loop Report(Tab.Area(Y,X).Text); X = X + Tab.Area(Y,X).Right - Tab.Area(Y,X).Left; Fin du cycle ; Fin du cycle ; Fin du cycle ;

Nous ajoutons simplement « droite » à « X » et soustrayons « gauche ».

Et pour l’axe « Y », je vous propose de le découvrir vous-même (en devoir).

Avez-vous aimé l'article? Partager avec des amis: