LA CLOCHE

Il y a ceux qui ont lu cette nouvelle avant vous.
Abonnez-vous pour recevoir les derniers articles.
E-mail
Nom
Nom de famille
Comment voulez-vous lire La cloche
Pas de spam

Dans l'article précédent, nous avons ajouté un accessoire général à tous les répertoires de notre configuration, afin de savoir qui a créé cet objet répertoire. Maintenant, nous allons créer un abonnement à l'événement et indiquer avec quelles informations remplir ces accessoires.

Dans ce rang, à chaque fois avant l'enregistrement de l'objet, nous réécrirons l'auteur de l'objet, il est bien sûr souhaitable d'indiquer quand cela s'est produit, nous ajouterons également la date d'enregistrement à l'auteur.

Procédure Enregistrer automatiquement l'auteur avant l'enregistrement (Source, rejeter) Exporter // Insérez l'échantillon en place. Une source. AuthorObktu = UserName () + " ; "+ chaîne (date actuelle ()); EndProcedure

À la perfection. Maintenant, réfléchissons à d'autres endroits où vous pouvez utiliser les détails généraux ?

Tout d'abord, à l'aide d'attributs communs, vous pouvez ajouter l'attribut "Commentaire", l'attribut "auteur", ainsi que d'autres détails dont vous avez besoin à tous les documents de la configuration.

Les prérequis généraux ont un autre paramètre intéressant " Séparation des données". Ce mécanisme nous permet de définir les données que nous voulons montrer à l'utilisateur. Par exemple, pour qu'aucun des responsables ne connaisse tous les clients de l'entreprise, nous lui montrerons uniquement les clients qu'il a ajoutés à la base de données, avec laquelle il travaille. Essayons d'ajouter cette fonctionnalité à la base de données. Pour commencer, nous devrons indiquer que nous utiliserons la séparation des données, le système proposera automatiquement de créer des paramètres de session par défaut.

Après cela, nous n'avons plus qu'à définir les paramètres de session dans le module de session :

Donnons un exemple de ce à quoi ressemble le répertoire des contreparties sans utiliser "Data Sharing" et avec :

Pas de séparation

Avec division

Veuillez noter que l'attribut "Responsable" n'a pas été trouvé dans la première contrepartie, car l'auteur de cet attribut était quelqu'un d'autre.

Un exemple classique de séparation comptable est par organisation, montrant aux utilisateurs uniquement les documents qui se rapportent à l'organisation correspondante.

Nous avons utilisé le mécanisme des paramètres de session, comprenons brièvement de quoi il s'agit. En fait, les paramètres de session sont des variables globales qui sont définies au démarrage du système. En règle générale, cela se produit dans le "Module de session", veuillez noter que les paramètres de session sont créés exclusivement par programmation.

Après avoir défini les "Options de session", nous pouvons nous référer à ce paramètreà partir de n'importe quel module du système simple

En conséquence, pour modifier les paramètres de session, l'utilisateur doit quitter et entrer à nouveau dans le programme.

Une fois que nous avons discuté des mécanismes pour restreindre l'accès des utilisateurs dans 1C et en particulier.

Il permet à l'utilisateur de travailler non pas avec tous les documents, mais uniquement avec ceux dans lesquels une organisation ou un entrepôt spécifique est indiqué. Les sélections sont faites de manière dynamique, elles imposent donc une certaine charge au travail de la base de données.

La propriété de la variable de séparation commune - Séparation des utilisateurs 1C - vous permet de définir la disponibilité de la liste des utilisateurs en fonction de l'utilisation des séparateurs.

Si le séparateur est activé pour un utilisateur, alors il sera visible dans la liste des utilisateurs en mode 1C Entreprise - sinon il ne sera pas visible.

De cette façon, vous pouvez organiser différentes listes d'utilisateurs pour différentes parties de la base de données.

La propriété de la variable de séparation commune - Séparation de l'authentification 1C - vous permet de créer des utilisateurs avec les mêmes noms d'utilisateur pour différentes parties de la base de données.

Séparation conditionnelle 1C

La séparation conditionnelle 1C vous permet d'activer et de désactiver le séparateur basé sur les données de la base de données. Ainsi, vous pouvez créer des chaînes de séparateurs mutuellement dépendants agissant dynamiquement dans un cas ou un autre.

Pour activer la séparation conditionnelle 1C - vous devez spécifier dans la propriété de la variable de séparation commune - séparation conditionnelle 1C - qui sera chargée de déterminer si la séparation 1C est activée.

Il est possible d'utiliser une constante de type booléen ou un attribut de référence de type booléen.

Important - pour cette constante / cette référence, vous devez désactiver l'utilisation (sélectionnez Ne pas utiliser) dans le cadre des séparateurs, ce n'est qu'alors qu'il sera possible de la sélectionner.

1. Préambule.

Il fallait organiser la comptabilité de deux organisations dans un seul SI. La situation n'est pas unique, mais il se trouve que notre démarreur progressif très atypique de 250 gigaoctets a fonctionné plutôt lentement, alors au lieu de RLS, nous avons décidé d'essayer le partage de données. Ce que c'est est décrit, par exemple, ou. Bref, si RLS complète avec conditions Requêtes SQL, le séparateur de données est une colonne supplémentaire dans les tables au niveau du SGBD, grâce à quoi le mécanisme de séparation devrait fonctionner plus rapidement que RLS.

Ainsi, vers la base où la comptabilité de la LLC n ° 1 a été conservée, il est nécessaire de transférer les informations d'une base distincte de la LLC n ° 2 et d'organiser travail conjoint... Tout comme l'image :

Le commun des mortels ne travaille qu'avec sa LLC et le chef comptable examine parfois les données de deux entités juridiques. Dans le mode d'accès aux deux LLC, vous ne pouvez lire que les données. Par conséquent, le chef comptable doit pouvoir basculer de manière interactive entre les modes "tout lire" / "écrire une seule organisation" et sélectionner LLC (c'est-à-dire définir la valeur de une variable commune) pour effectuer, par exemple, le calcul des coûts.

2. Mise en œuvre

Plateforme 8.2.19.90, pas de mode de compatibilité. SGBD - MSSQL Server 2008 R2 Standard.

Nous avons créé un attribut commun OrganizationSplitter de type "nombre", d'accord avec la proposition de créer des paramètres de session, renseigné l'attribut (inclus plusieurs ouvrages de référence, tous les documents, registres d'accumulation, de comptabilité et de calcul). Partage de données - "Indépendant et partagé". La valeur du paramètre de session est définie à partir de paramètres standards user dans la procédure SetSessionParameters du module de session :

Organisation = UserManage.GetDefault Value (glCurrentUser, "MainOrganization");
Paramètres de session.OrganizationSeparatorValue = Organization.SeparatorValue;

Dans l'interface du chef comptable, un formulaire a été réalisé avec la possibilité de basculer entre les organisations et d'activer/désactiver le mode séparation :

Avec la séparation désactivée, lorsque SessionParameters.OrganizationSplitterUsage = False, la plate-forme refuse d'écrire des documents, se retrouvant avec des erreurs telles que "Erreur SDBL : expression attendue (pos = 12)", vous ne pouvez donc pas laisser l'utilisateur écrire des documents de cette manière. Par souci de fiabilité, nous avons créé des abonnements à l'événement "Avant l'enregistrement" pour les objets inclus dans l'attribut général :

Si SessionParameters.OrganizationSeparatorUsage = False Then
# Si client Alors
Avertissement ("Impossible d'écrire, car le partage de données est désactivé !");
# Fin si
Refus = Vrai ;
Fin si;

Notre plan d'action était le suivant : nous préparons la configuration-récepteur de l'IB #1, fixons les valeurs de la variable commune = 1, charge les données de l'IB #2, après chargement pour tous les objets avec un vide (égal à 0) valeur du séparateur, définissez OrganizationSplitter = 2.

La configuration a été préparée, la question s'est posée, comment fixer la valeur du nécessaire général pour les documents et leurs mouvements en période fermée, et rapidement et sans risque que les chiffres du bilan s'envolent ? Il est impossible d'écrire le séparateur séparément de l'objet via le modèle d'objet 1C, j'ai donc dû casser accord de licence sortir et écrire une requête pour MS SQL. Comme il y a beaucoup d'objets dans l'attribut general, et qu'il y a encore plus de tables dans les pommettes pour ces objets, nous avons écrit un traitement qui génère une requête pour SQL (pour chaque objet de métadonnées inclus dans le séparateur, ils ont écrit "update" + DB_Name + ".dbo._" + TableName + "set _" + FieldGeneralProps + "= 1" ;)

La valeur a été définie, certaines des données ont été transférées de l'IB n° 2 et les tests ont commencé.

Le résultat a été décevant. Premièrement, il y a des problèmes avec le registre comptable. Lorsque le fractionnement est activé, l'analyste n'est pas visible :

Cela est dû au fait que le registre comptable au niveau du SGBD est stocké sous forme de plusieurs tables et que toutes les tables ne contiennent pas la valeur d'une variable commune (un traitement a été utilisé pour visualiser la structure).


Eh bien, nous définissons la valeur du séparateur via MS SQL, nous voyons les analyses. Maintenant, les rapports ne fonctionnent pas. Il s'avère qu'il y a des problèmes avec les requêtes sur les tables virtuelles du registre comptable "Chiffres d'affaires" et "Chiffres d'affairesDtKt":

(Fld27033 n'est qu'une variable générale dans la table du registre comptable)

Le séparateur est défini dans toutes les tables, cela peut être vu au niveau du SGBD, ce qui pourrait être une erreur n'est pas clair. Nous développons un SCP vide typique, apportons les modifications décrites ci-dessus dans la configuration, saisissons quelques documents (dans cette version, la plate-forme elle-même inscrit la valeur du séparateur dans toutes les tables du registre comptable), mais les erreurs sont reproduites. Mauvais, mais nous excluons les registres comptables des accessoires généraux, nous continuons les tests.

De plus, il s'avère que le mécanisme de préemption des registres de calcul a cessé de fonctionner. Nous n'avons pas séparé les plans des types de calcul, nous essayons de chercher le problème dans les tables du registre de calcul et dans les recalculs. Nous vérifions, notons la valeur de l'attribut principal, faisons T&I - en vain.

En cours de route, nous diagnostiquons le problème lors de l'écriture des informations du formulaire de liste dans des registres indépendants. Dans ce cas, les données sont enregistrées, elles peuvent être vues après un redémarrage. Le problème est également reproduit sur la base de test :


Les registres d'informations ne pouvaient pas être "réparés" en manipulant SQL (la valeur du séparateur était définie dans toutes les tables), ils étaient donc simplement exclus de l'attribut général. Après plusieurs jours d'expérimentation, les tentatives de remise en état du déplacement échouent.

À ce stade, nous décidons de désactiver le partage de données et d'utiliser RLS. Lorsque vous définissez la partition sur "ne pas utiliser", nous rencontrons des erreurs "Fournisseur Microsoft OLE DB pour SQL Server: CREATE UNIQUE INDEX terminé car une clé en double a été trouvée pour l'index ...". C'est-à-dire qu'il n'est pas facile de revenir à l'état d'avant la séparation. Le problème avec les index des tables de recalcul, les paramètres de stockage des totaux, et autres. Le fait est que des lignes identiques sont stockées dans les tables, ne différant que par la valeur de l'attribut commun. Lorsque vous supprimez un attribut partagé, des entrées non uniques apparaissent. Vous devrez supprimer les enregistrements inutiles directement dans MS SQL, quelque chose comme ceci (pour la table de recalcul) :

Utiliser la base ;
MODIFIER LA TABLE _CRgRecalc1399
AJOUTER id INT IDENTITY (1,1) ;
ALLER
SUPPRIMER DE _CRgRecalc1399
O identifiant< (SELECT MAX(id)
DE _CRgRecalc1399 AS T1
O _CRgRecalc1399._RecorderTRef = T1._RecorderTRef et
_CRgRecalc1399. [_ RecorderRRef] = T1. [_ RecorderRRef] et
_CRgRecalc1399. [_ CalcKindRRef] = T1. [_ CalcKindRRef] et
_CRgRecalc1399. [_ Fld1400RRef] = T1. [_ Fld1400RRef] et
_CRgRecalc1399. [_ Fld1401RRef] = T1. [_ Fld1401RRef] et
_CRgRecalc1399. [_ Fld1402RRef] = T1. [_ Fld1402RRef]
);
ALLER
MODIFIER LA TABLE _CRgRecalc1399
DROP COLUMN id ;

Et ce n'est qu'après avoir nettoyé plusieurs dizaines de tables qu'il est possible de désactiver la séparation des données. Après avoir désactivé la séparation, il n'y a pas de problème.

3. Conclusion.

Il y avait une lueur d'espoir que sur 8.3 les problèmes étaient résolus. N'étaient pas paresseux, vérifiés sur 8.3.4.482 (avec le mode de compatibilité désactivé). Nous avons examiné un UPP-shke presque typique, avec des modifications de la configuration uniquement pour les besoins généraux. Sur cette base de test, la division a été activée avant la saisie des informations, c'est-à-dire la plate-forme devait écrire correctement la valeur du séparateur dans toutes les tables, elle n'écrivait rien directement dans MS SQL par elle-même.

Résultat:

    Le problème des requêtes sur les tables virtuelles « Turnovers » et « TurnoversDtKt » est reproductible.

    Le problème préemptif est reproductible.

    Le problème de l'écriture dans des registres d'informations indépendants est reproductible.

    Le problème avec la désactivation de la séparation - vous ne pouvez pas vous en débarrasser en appuyant simplement sur un bouton !

Ainsi, nous n'avons pas réussi à remplacer RLS par un nouveau mécanisme. Ce mécanisme a été conçu, apparemment pour services cloud, et dans le cas de l'utilisation de données partagées "de manière indépendante", peut-être que la séparation fonctionnera, mais nous avons besoin d'une donnée de référence commune. Il reste à attendre que 1C corrige les erreurs, ou mieux encore, mette en place un mécanisme typique de division par organisations dans des configurations typiques.

Accessoires généraux en 1C 8.3 est un objet de métadonnées de plate-forme qui vous permet d'utiliser un attribut pour de nombreux objets de configuration (répertoires, documents, plans de comptes, etc.). L'objet a été créé principalement pour faciliter le travail de développement et la séparation des données.

Les détails généraux ont été initialement mis en œuvre dans la version 1C 7.7, mais les développeurs ne l'ont pas immédiatement inclus dans la plate-forme de la version 8. Le mécanisme des détails généraux n'a été introduit par les développeurs 1C que dans la version 8.2.14.

Il est très pratique d'ajouter des prérequis généraux pour ne pas changer les objets standards dans la configuration, je les utilise souvent avec.

Après avoir ajouté un attribut général, il peut être utilisé dans les requêtes et affiché sous forme d'objets - extérieurement, ce n'est pas différent des accessoires ordinaires.

La seule limitation des détails généraux est qu'ils ne peuvent pas être utilisés dans.

Considérons les paramètres de base et les propriétés des attributs communs, qui sont différents des autres objets de configuration :

Composition- une liste d'objets auxquels l'attribut commun sera utilisé, le cadre s'apparente au cadre d'un plan d'échange.

Obtenez gratuitement 267 didacticiels vidéo 1C :

Utilisation automatique- le paramètre détermine si un attribut commun sera utilisé pour les objets qui ont le mode d'utilisation "Automatique" spécifié dans leur composition.

Partage de données- nous considérerons ce paramètre séparément.

Séparation des données en 1C à l'aide d'accessoires communs

Partage de données- un mécanisme similaire au mécanisme. Cependant, les performances de ce mécanisme sont plus efficaces et plus faciles à configurer.

Le mécanisme permet de personnaliser l'affichage des seuls éléments que l'utilisateur peut voir. Par exemple, vous pouvez délimiter tous les objets (documents, répertoires, etc.) où une certaine organisation est établie.

Configuration de la séparation des données à l'aide des détails généraux 1C

Pour définir dans l'attribut général, vous devez spécifier la séparation des données - Diviser... Immédiatement après avoir cliqué, le système proposera de créer des paramètres comptables par défaut :

Dans ce cas, il faudra préciser les paramètres de session au démarrage du système, comment faire cela, avec un exemple cela a été décrit dans l'article.

Ceci termine la configuration - l'utilisateur n'aura accès qu'aux informations spécifiées dans les paramètres de session sélectionnés.

Un exemple d'utilisation d'accessoires courants

Analysons le réglage des accessoires généraux dans 1C 8.3 en utilisant l'exemple d'une configuration de cadre et d'accessoires Organisation:

Il y a 3 documents dans le système où il est nécessaire d'indiquer la variable Organisation : il s'agit de la Facture de réception, Facture de dépenses, Accumulation de salaire.

La configuration est simple :

  1. Créez un nouvel attribut général, spécifiez le type - DirectoryLink.Organization.
  2. Dans la composition que nous plaçons pour nos documents - Utilisation.

Ça y est, la configuration est terminée !

Voyons le résultat :

Le système affiche l'attribut général « comme sien » : dans les requêtes, et dans les attributs de formulaire, et à d'autres endroits. C'est la magie ! ??

La condition générale 1C 8.3 n'est pas ajoutée

LA CLOCHE

Il y a ceux qui ont lu cette nouvelle avant vous.
Abonnez-vous pour recevoir les derniers articles.
E-mail
Nom
Nom de famille
Comment voulez-vous lire La cloche
Pas de spam