Contacts

1c correspondance des tables sql et des objets. Structure de stockage de la base de données (formulaires gérés). Différences avec les implémentations existantes

La structure dans le langage de programmation 1C 8.3 et 8.2 est un ensemble de paires "Clé" et "Valeur". Le champ "Clé" a un type de chaîne, tandis que la "Valeur" peut prendre n'importe quel type de données. Habituellement utilisé pour stocker et transférer entre les procédures un ensemble de paramètres.

Une structure dans le langage de programmation 1C peut être créée de deux manières à l'aide de la construction "Nouveau".

Première manière :

Structure = Nouvelle structure ;
Structure.Insert("ParameterKey1", "Parameter Values ​​​​#1");
Structure.Insert("ParameterKey2", "Parameter Values ​​​​#2");

Deuxième manière :

Structure = Nouvelle structure("ParameterKey1, ParameterKey2", "Parameter Values ​​​​#1", "Parameter Values ​​​​#2");

Les deux méthodes créeront une structure visible dans la capture d'écran du débogage :

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

Le changement

Vous pouvez ajouter ou modifier une structure à l'aide de la méthode "Insert()".

Structure.Insert("NomClé", ValeurClé);

Si vous souhaitez modifier la valeur de l'ancienne clé, entrez son nom. Si ajouter nouvelle clé, ajoutez un nom unique relatif à toutes les clés de structure.

Pour supprimer un élément de la collection, il faut utiliser la méthode "Delete", où passer le nom de la clé :

Structure.Delete("NomClé");

Il est également possible d'effacer tous les objets de la collection :

Structure.Clear();

Traversée de structure

Pour itérer sur une collection de structures, vous devez utiliser la construction "For Each Key&Value From Structure Loop".

Par exemple:

Pour chaque clé et valeur de la boucle de structure
…… //traitement, par exemple, modification des valeurs
FinCycle ;

Dans chaque cycle, on verra que les champs suivants sont à notre disposition :

Les données qui déterminent la logique de fonctionnement du système basé sur 1C:Enterprise se réfèrent à l'infobase. Stockage base d'informations est exécuté dans une base de données sous la forme d'un ensemble de tables, pour lequel 1C:Enterprise 8.1 peut utiliser l'un des quatre systèmes de gestion de base de données (SGBD) :
* Intégré dans 1C:Enterprise 8.1 (version fichier de l'infobase). Dans ce cas, toutes les données de l'infobase sont stockées dans un fichier nommé 1Cv8.1CD. Ce fichier a un format binaire et est essentiellement une base de données pour le SGBD 1C:Enterprise 8.1 intégré.
* Microsoft serveur SQL (version client-serveur de l'infobase). Toutes les données de l'infobase sont stockées dans la base de données Données Microsoft Serveur SQL.
* PostgreSQL(version client-serveur de l'infobase). Toutes les données de l'infobase sont stockées dans la base de données Données PostgreSQL.
*IBM DB2(version client-serveur de l'infobase). Toutes les données de l'infobase sont stockées dans une base de données IBM DB2.

Au niveau des objets de base de données (tables, champs, index, etc.), les versions fichier et client-serveur d'une infobase ont un format similaire (qui diffère sur des détails mineurs). Quelques informations sur ce format sont fournies ci-dessous.

L'ensemble de l'infobase est représenté dans la base de données sous la forme d'un ensemble de tables. Parmi eux, plusieurs tables sont nécessairement présentes dans la représentation de toute infobase :

*Configuration- configuration de base de l'infobase. Cette configuration correspond à la structure de données réelle et est utilisée par 1C:Enterprise 8.0 en mode Entreprise.
*ConfigSave- configuration éditée par le Configurateur. La configuration de ConfigSave est écrasée dans Config lorsque la "Mise à jour de la configuration de la base de données" est effectuée dans le Configurateur, et vice versa - lorsque l'opération "Configuration - Configuration de la base de données - Retour à la configuration de la base de données" est effectuée dans le Configurateur.
* Des dossiers contient des informations de service, par exemple, sur l'utilisation du magasin de configuration.
*Paramètres contient les paramètres de l'infobase. Parmi eux:
=> Liste des utilisateurs de l'infobase.
=> Paramètres de l'infobase nationale.
=> Table de correspondance des objets de métadonnées et des objets de base de données (tables, champs, index).
=> Quelques autres informations.
*_YearOffset- décalage de dates dans la base de données. Cette table n'est créée que lorsque en utilisant Microsoft Serveur SQL.
*Schéma DBS contient des informations sur la structure de la base de données 1C:Enterprise et définit d'autres objets de base de données utilisés par cette infobase.

Au démarrage de 1C:Enterprise, il vérifie la présence des tables répertoriées dans l'infobase, et si l'une d'entre elles manque, le message "l'infobase est détruite" s'affiche. L'absence de toutes les tables répertoriées signifie que l'infobase est vide. Dans ce dernier cas, ces tables seront créées.

La liste et la structure des autres tables de base de données sont déterminées par une configuration spécifique, à savoir les objets de métadonnées qui y sont définis. Chaque nom de table se compose d'un préfixe alphabétique suivi d'un chiffre. Le préfixe définit l'objectif du tableau et le nombre vous permet de distinguer les tableaux ayant le même objectif qui appartiennent à différents objets de métadonnées. Si IBM DB2 est utilisé comme SGBD, la structure décrite n'est pas les noms de table, mais leurs alias.

Si au moins un plan d'échange est défini dans la configuration avec le drapeau "Infobase distribuée" activé, alors les tables suivantes seront créées :

*_ConfigChangeRec- table d'enregistrement des modifications des objets de configuration.
* _ConfigChangeRec_ExtProps- tableau des noms de fichiers des propriétés externes modifiées des objets de configuration.

Voici les différents objets de métadonnées auxquels chaque table peut correspondre.

* Constantes
=> _Consts contient les valeurs actuelles de toutes les constantes définies dans la configuration.
=> _ConstsChangeRec - table pour enregistrer les changements dans les constantes. Créé si au moins une constante participe à au moins un plan d'échange.
* Plans d'échange
=> _Nœud - tableau des plans d'échange.
=> _Nœud _VERMONT - partie tabulaire du plan d'échange, créée pour chaque partie tabulaire.
* Manuels
=> _Référence - tableau de référence.
=> _Référence _VERMONT - partie tabulaire du répertoire - pour chaque partie tabulaire.
=> _ReferenceChangeRec - table d'enregistrement des changements d'annuaire. Créé si l'annuaire participe à au moins un plan d'échange.
* Documentation
=> _Document - une table de documents pour chaque objet de métadonnées "document".
=> _Document _VERMONT - partie tabulaire du document - pour chaque partie tabulaire de chaque document.
=> _DocumentChangeRec - une table d'enregistrement des modifications d'un objet de métadonnées de type "document". Créé pour chaque objet de métadonnées de type "document" s'il participe à au moins un plan d'échange.
* Séquences de documents
=> _Séquence - table d'enregistrement des documents - pour chaque séquence.
=> _SequenceBoundary - tableau des limites de séquence - pour chaque séquence.
=> _SequenceChangeRec - table d'enregistrement des changements de séquence. Créé pour chaque séquence qui participe à au moins un plan d'échange.
* Journaux de documents.
=> _DocumentJournal - table de journal de document, créée pour chaque journal de document.
* Énumérations
=> _Enum - table d'énumération - une pour chaque énumération.
* Plans de types de caractéristiques
=> _Chrc - le tableau principal du plan des types de caractéristiques.
=> _Chrc _VERMONT - partie tabulaire du plan des types de caractéristiques - pour chaque partie tabulaire.
=> _ChrcChangeRec - tableau d'enregistrement des changements dans le plan des types de caractéristiques. Il est créé si le plan type de caractéristique participe à au moins un plan d'échange.
* Plans de comptes
=> _Acc - le tableau principal du plan comptable.
=> _Acc _DimExt - table des types de sous-contos du plan de comptes, créée pour le plan de comptes si le nombre maximum de sous-contos est supérieur à zéro.
=> _Acc _VERMONT - partie tabulaire du plan comptable, créée pour chaque partie tabulaire du plan comptable.
=> _AccChangeRec - tableau d'enregistrement des changements dans le plan comptable. Créé si le plan comptable participe à au moins un plan d'échange.
* Plans de types de calcul
=> _CalcKind - le tableau principal du plan des types de calcul.
=> _CalcKind _BaseCK - table des types de calcul de base, créée pour le plan des types de calcul si sa propriété "Dépendance de base" a une valeur autre que "Ne dépend pas".
=> _CalcKind _DisplacedCK - table des types de calcul déplacés, créée pour le plan des types de calcul si le drapeau "Utilise la période de validité" est activé.
=> _CalcKind _LeadingCK - tableau des principaux types de calcul - pour chaque plan de types de calcul.
=> _CalcKindDN - une table auxiliaire pour l'ordre d'exclusion, est créée si le drapeau "Utilise la période de validité" est positionné pour le plan des types de calcul.
=> _CalcKind _VERMONT - partie tabulaire du plan de types de calcul, créé pour chaque partie tabulaire.
=> _CalcKindChangeRec - tableau d'enregistrement des changements dans le plan des types de calcul. Il est créé si le plan de type de calcul participe à au moins un plan d'échange.
* Registres d'informations
=> _InfoReg - tableau des mouvements du registre d'information.
=> _InfoRegChangeRec - tableau d'inscription des changements dans le registre des informations. Créé si le registre d'informations participe à au moins un plan d'échange.
* Registres d'accumulation
=> _AccumReg - tableau des mouvements du registre d'accumulation.
=> _AccumRegTotals - table des totaux du registre d'accumulation, si le registre tient des soldes.
=> _AccumRegChiffres d'affaires - table des chiffres d'affaires du registre de cumul, si le registre supporte les chiffres d'affaires.
=> _AccumRegChangeRec - table d'enregistrement des changements dans le registre d'accumulation. Il est créé si le registre d'accumulation participe à au moins un plan d'échange.
=> _AccumRegOptions - tableau des paramètres pour stocker les totaux des registres d'accumulation, un pour tous les registres d'accumulation.
* Registres comptables
=> _AcntReg - tableau des mouvements du registre comptable.
=> _AcntRegED - un tableau de valeurs de sous-contos du registre comptable, créé s'il fait référence à un plan comptable, dans lequel le nombre maximum de sous-contos est supérieur à zéro.
=> _AccTtl0 - un tableau des totaux du compte.
=> _AccTtl - où i va de 1 à nombre maximal sous-conto. Tableau des totaux pour le compte avec le nombre de types de sous-conto égal à i.
=> _AccTtlC - un tableau des cumuls de chiffre d'affaires entre comptes, uniquement pour le registre comptable supportant la correspondance.
=> _AccntRegChangeRec - table d'enregistrement des changements dans le registre comptable. Il est créé si le registre comptable participe à au moins un plan d'échange.
=> _AccntRegOptions - tableau des paramètres de stockage des totaux, un pour tous les registres comptables.
* Registres de calcul
=> _CalcReg - tableau des mouvements du registre de calcul.
=> _CalcRegActPer - une table des durées de validité réelles du registre de calcul, créée si le drapeau "Période de validité" est positionné pour le registre de calcul.
=> _CalcRegChangeRec - table d'enregistrement des changements dans le registre de calcul. Créé pour chaque registre de calcul participant à au moins un plan d'échange.
=> _CalcRegRecalc - table de recalcul du registre de calcul, créée pour chaque recalcul.
=> _CalcRegRecalcChangeRec - table d'enregistrement des changements de recalcul. Créé si l'allocation est impliquée dans au moins un plan d'échange.
* Processus d'affaires
=> _BPRoutePoint - un tableau des points de routage des processus métier pour chaque processus métier.
=> _Processus d'affaires - la table principale du processus métier.
=> _Processus d'affaires _VERMONT - partie tabulaire du processus métier pour chaque partie tabulaire.
=> _BusinessProcessChangeRec - table d'enregistrement des changements de processus métier. Créé pour chaque processus métier qui participe à au moins un plan d'échange.
* Tâches
=> _Tâche - la table des tâches principales.
=> _Tâche _VERMONT - partie tabulaire de la tâche pour chaque partie tabulaire.
=> _TaskChangeRec - tableau d'enregistrement des changements de tâches. Créé pour chaque objet de métadonnées de type "tâche" qui participe à au moins un plan d'échange.

Lors de l'utilisation d'IBM DB2, les préfixes d'alias de table ne commencent pas par un trait de soulignement, mais immédiatement par une partie lettre.

Le nombre de ces tables dépend de la fonctionnalité de la configuration et peut être assez important. En mode normal, 1C:Enterprise ne vérifie pas leur présence, ainsi que l'intégrité et la cohérence des données qu'ils contiennent. Par conséquent, il est important que la base de données hébergeant l'infobase 1C:Enterprise 8.1 soit protégée contre tout accès non autorisé et qu'elle soit modifiée uniquement à l'aide des outils 1C:Enterprise. Pour vérifier, vous devez utiliser la fonction "Administration - Test et Correction" intégrée au configurateur.

Il est également important que la base de données qui stocke l'infobase soit sauvegardée et restaurée uniquement dans son intégralité. A cet effet, il est recommandé d'utiliser Réserver une copie bases de données intégrées au SGBD utilisé. La sauvegarde de la version du fichier de l'infobase peut être effectuée en copiant le fichier 1Cv8.1CD.

Le configurateur a fonction spéciale: Administration - Décharger l'infobase. Il peut être utilisé pour télécharger sur fichier spécifié(fichier de téléchargement) toutes les données relatives à l'infobase, et pas plus. La fonction inverse "Charger l'infobase" vous permet de charger toutes les données du fichier de téléchargement dans l'infobase actuelle au lieu de celles existantes. Ces fonctions peuvent également être utilisées pour sauvegarder les données de l'infobase dans les versions fichier et client-serveur.

La plate-forme 1C est un outil de haut niveau pour travailler avec des bases de données. Dans le cas général, le développeur n'a pas besoin de réfléchir à quoi et comment se passe du côté du SGBD, puisque la plate-forme elle-même décide du nombre de tables qu'elle va créer et des champs qui s'y trouveront.

Cependant, dans les grands projets, il est nécessaire de travailler directement avec les données, par exemple pour analyser des informations avec des outils tiers ou, comme dans mon cas, intégrer une base de données avec applications externes. Dans une telle situation, il est nécessaire d'avoir une idée dans quels champs des tables physiques rechercher les informations dont nous avons besoin.

La fonction intégrée est conçue uniquement pour un tel cas. GetDatabaseStorageStructure() A qui renvoie toutes les données requises sous la forme d'un tableau de valeurs. De plus, certains détails (Champs et Index) de cette table sont eux-mêmes des tables de valeurs.

D'une part, il est pratique d'avoir toutes les données dans une structure, mais, d'autre part, il y a des difficultés supplémentaires avec le transfert de cette table au client (la méthode Load(), malheureusement, ne charge pas les tables imbriquées) . Compte tenu de cela, il est nécessaire de parcourir toutes les lignes du tableau dans un cycle, ce qui, avec des volumes importants, entraîne un ralentissement du travail.

Pour cette raison, la meilleure option serait de transmettre les noms des objets de métadonnées à la fonction pour réduire la quantité de données renvoyées. Cependant, toutes les tables de SGBD ne sont pas associées à des métadonnées de configuration, de sorte que la possibilité d'afficher liste complète Je suis parti.

Fonctionnalité de traitement

Lorsqu'un élément de l'arborescence des métadonnées est activé, la liste des tables, des champs et des index sera remplie. Un double-clic sur la racine de l'arborescence affiche toutes les tables, y compris les tables de service (non recommandé, car la quantité de données recherchées augmente).

V parties tabulaires les commandes standard de recherche et de liste fonctionnent.

Différences avec les implémentations existantes

Il existe plusieurs publications similaires, par exemple, et. Cependant, leur inconvénient est l'absence d'arbre de métadonnées, ce qui rend la navigation difficile. La recherche s'effectue également en nommant les tables et les champs de la base de données, et non l'inverse.

La fonctionnalité la plus proche de la publication de l'auteur (). Contrairement à elle, ce traitement contient l'arborescence la plus complète métadonnées (plans d'échange, constantes, journaux de documents, etc.). de plus la structure des données est présentée plus clairement : la liste des tables de l'objet de métadonnées, la liste des champs et la liste des index sont affichées dans des parties tabulaires distinctes.

UPD-2018-01-06 (v1.3). Correction d'un bogue qui se produisait en mode de compatibilité 8.3.7 et supérieur (le comportement de la plateforme a changé).

UPD-2012-08-17 (v1.2). Un correctif a été apporté pour le traitement correct des tâches planifiées, le point d'affichage des plans de types de calcul a été corrigé, le comportement a été corrigé lors du changement de type de structure dans la racine de configuration.

PS Certains employeurs demandent le nombre de tables physiques et virtuelles pour les registres lorsqu'ils postulent pour un emploi. Ce serait bien de connaître les réponses à ces questions, d'autant plus qu'il s'agit du niveau 1C : Professionnel. Si vous voulez non seulement apprendre cette réponse, mais aussi "sentir" ces tables, alors ce traitement est fait pour vous !



Vous avez aimé l'article ? Partagez-le