Une fonctionnalité permettant d'obtenir un instantané des dernières entrées dans le registre d'informations. Fonctionnalité d'obtention d'un instantané des dernières entrées dans le registre d'informations Dimensions, ressources et détails

/
Mise en œuvre du traitement des données

Résolution des totaux pour les registres d'informations périodiques

Champ d'application : application gérée, application mobile, application régulière.

1.1. Pour les registres d’informations périodiques, il est recommandé d’autoriser les totaux si toutes les conditions suivantes sont remplies :

  • un grand volume de données est attendu dans le registre (par exemple, cela est justifié pour un registre avec les prix des articles ; mais cela n'a pas de sens pour un registre avec les taux de change) ;
  • la configuration fournit des requêtes de fréquence aux tranches de ces dernières à l'heure actuelle et/ou aux tranches des premières pour obtenir les données actuelles (c'est-à-dire lorsque la période n'est pas précisée dans les paramètres des tables virtuelles Tranche du premier Et Tranche du dernier);
  • tandis que les conditions restantes pour les tables virtuelles Tranche du premier Et Tranche du dernier sont réglés uniquement sur les valeurs de mesure (et les séparateurs en mode Indépendamment et conjointement);
  • enregistrer les restrictions d'accès aux données utiliser uniquement les dimensions (et les délimiteurs qui sont en mode Indépendamment et conjointement).

Pour une liste complète de toutes les conditions lorsque les requêtes utilisent les totaux du registre d'informations, voirdocumentation pour la plateforme 1C:Enterprise.

Par exemple, si la configuration inclut des requêtes fréquemment exécutées vers le registre PrixNomenclatures pour obtenir les prix actuels des articles :

Sélectionner un article. Article AS Article, PrixNomenclature. Prix ​​AS Prix, . . . DU Répertoire. Nomenclature AS Nomenclature CONNEXION GAUCHE Registre d'Information. PrixNomenclatures. SliceLast (, PriceView = &Type de prix) COMMENT PrixNomenclatures Nomenclatures de prix des logiciels. Nomenclature = Nomenclature. Lien . . .

puis, sous réserve de toutes les autres conditions énumérées ci-dessus, définir la propriété Autoriser les totaux : tranche des totaux récents accélérera considérablement l'exécution de telles requêtes, du fait que la sélection sera effectuée directement à partir de tables supplémentaires, qui stockent uniquement les dernières valeurs (pour couper les dernières) et les premières valeurs (pour couper les les premiers).

1.2. En outre, des options alternatives devraient être envisagées pour réviser les requêtes du registre afin que ces conditions soient remplies.

Par exemple, si dans certains cas les données du registre PrixNomenclatures sont enregistrés à une date ultérieure, et lors de la sélection des marchandises dans ce registre, une requête est toujours exécutée pour la date actuelle (la date est explicitement spécifiée dans le paramètre de la table virtuelle Tranche du dernier), alors les résultats n'accéléreront pas l'exécution de ces requêtes. Puisque les totaux sont construits uniquement pour le premier et le dernier enregistrement du registre.

Cependant, si, à l'ouverture du formulaire de sélection de produits, vous analysez s'il existe des bureaux d'enregistrement avec une date future, et s'il n'y en a pas, vous lancez une autre requête pour une tranche de cette dernière sans fixer la date, alors une telle requête fonctionnera plus rapidement. .

2. Dans tous les autres cas, les totaux ne doivent pas être autorisés pour les registres d'informations périodiques. Tout d'abord, si

  • le plus souvent (toujours) les requêtes sont adressées aux tables virtuelles du premier/dernier registre périodique d'informations pour une période déterminée (par exemple, pour la date du document).
  • dans des conditions de tables virtuelles Tranche du premier Et Tranche du dernier Le plus souvent (toujours) des sous-requêtes et des jointures sont utilisées (appels « via un point » aux champs des tables associées). Par exemple, dans ce cas :

3. Il n'est pas nécessaire de prévoir un mécanisme distinct pour recalculer les totaux dans la configuration, puisque la mise à jour des tableaux de totaux est effectuée automatiquement chaque fois qu'un ensemble d'enregistrements est écrit dans le registre.

Registres d'informations 1C il s'agit d'un ensemble structuré de données avec des dimensions et des ressources. Conçu pour stocker des informations périodiques.

Périodicité

Les informations sont stockées par dimension et par période. Vous pouvez définir la fréquence du registre d'informations :

  • Non périodique
  • par le registraire
  • deuxième
  • une semaine
  • mois
  • quart

Une fréquence est nécessaire pour sélectionner des informations dans le registre pendant une certaine période de temps. Si vous précisez une périodicité, les inscriptions au registre seront effectuées avec la période à laquelle l'inscription a été effectuée. Disons que si vous regardez le registre « Prix des articles », vous pouvez voir l'historique des changements de prix, avec quelles mesures et dans quelle période l'entrée a été effectuée.

La périodicité des registres d'informations est nécessaire pour les informations qui changent dans le temps, par exemple : les taux de change, les prix des produits, les remises et majorations sur les produits, etc.

Registraires

Si vous effectuez une inscription au registre d'information à l'aide d'un document, vous devez paramétrer le mode de saisie : « Soumission au bureau d'enregistrement » et sélectionner le document avec lequel l'inscription sera effectuée dans le registre. Ensuite, le champ « Registraire » apparaîtra dans le registre, où seront stockées les informations sur le document avec lequel l'inscription a été effectuée. L'enregistreur peut également être utilisé comme point, pour cela indiquer dans le champ « Fréquence » - « Par enregistreur ». La subordination au registraire se produit lorsqu'il est nécessaire de lier strictement un registre à un document et que la modification manuelle des entrées dans le registre devient indisponible.

Il peut y avoir plusieurs documents qui feront office de registraires. Pour ajouter un registraire, vous devez vous rendre dans les propriétés du registre d'informations souhaité, vous rendre dans l'onglet « Registraires » et cocher les cases à côté des documents qui feront office de registraire.

Vous pouvez voir les mouvements effectués par l'enregistreur à partir du document. Pour ce faire, vous devez vous rendre sur le document qui vous intéresse, cliquer sur : Aller – Documenter les mouvements du greffier.

N'oubliez pas d'ajouter des droits dans les propriétés du registre, ils peuvent être attribués dans l'onglet « Droits ». Ensuite, dans la liste des rôles, vous devez sélectionner le rôle auquel vous souhaitez ajouter des droits au registre et dans la liste des droits, définir les droits pour le rôle sélectionné.

Unicité des enregistrements

Le caractère unique d'un enregistrement dépend de la période et des mesures. Par exemple, si vous souhaitez écrire un enregistrement avec les mêmes mesures dans le registre « Prix des articles » le même jour, vous ne pourrez pas le faire et le programme provoquera une erreur, car la périodicité du registre est dans la journée.

Si la fréquence est fixée par le bureau d'enregistrement, elle participe également à l'unicité du dossier.

Pour les registres non périodiques et indépendants, l'unicité dépend de la combinaison des dimensions.

Formes

Pour afficher les enregistrements, utilisez le formulaire de liste, vous pouvez y définir la sélection en fonction des champs qui vous intéressent, afficher l'historique des enregistrements et les modifier via le formulaire d'enregistrement. Vous pouvez visualiser les entrées de registre comme suit : dans le menu supérieur, cliquez sur le bouton « Opérations » - « Registres d'informations ». Dans la fenêtre qui s'ouvre, sélectionnez le registre dont vous avez besoin. Après cela, un formulaire de liste s'ouvrira sous la forme d'un tableau, où chaque entrée est une entrée unique.

Pour modifier/créer, utilisez le formulaire d'enregistrement ; si l'enregistrement est subordonné au registraire, alors le champ ne sera pas disponible et le formulaire ne pourra pas être créé.

Il faut ajouter des formulaires dans le configurateur en vous rendant dans le registre d'informations, dans l'onglet « Formulaires » et en cliquant sur la « loupe » à côté du type de formulaire souhaité. Ensuite, une fenêtre s'ouvrira dans laquelle vous pourrez configurer les champs du futur formulaire (emplacement, noms et spécifier les fonctionnalités).


Dimensions, ressources et détails

Les dimensions sont destinées à former le caractère unique d'un enregistrement ; à l'avenir, vous pourrez les sélectionner et effectuer une découpe en fonction d'une dimension spécifique. La combinaison des mesures constitue la clé d'enregistrement. Il est préférable de ne pas créer un grand nombre de dimensions afin que le tableau ne s'agrandisse pas et ne ralentisse pas lorsque vous travaillez avec.

Les dimensions ont une case à cocher « Leading » ; si elle est cochée, l'enregistrement sera stocké dans la base de données tant que cette dimension existe. Plusieurs mesures principales peuvent être effectuées. Par exemple, dans le registre d'informations « Prix des articles », la dimension principale est l'article ; si vous supprimez un article inclus dans l'enregistrement, l'entrée dans le registre d'informations pour cet article sera automatiquement supprimée.

Les ressources sont conçues pour stocker des informations récapitulatives : quantité, prix, etc. A l'avenir, nous recevrons des ressources pendant une certaine période de temps (si le registre est périodique), en fonction des mesures.

Les détails, dans la plupart des cas, sont destinés à stocker des informations supplémentaires ; ils ne participent pas au caractère unique de l'enregistrement. Par exemple, vous pouvez saisir des informations telles que l'auteur, le commentaire, etc. dans les détails.

Vous pouvez effectuer les actions suivantes avec le registre d'informations :

  • Supprimer une entrée dans le registre d'informations 1C

Particularités

— Unicité des enregistrements basée sur un ensemble de dimensions : chaque enregistrement du registre d'information est une nouvelle valeur de ressource.

— Les inscriptions au registre d'information peuvent être périodiques ou non.

— Le registre d'information peut être dépendant et indépendant du bureau d'enregistrement.

— Il est possible de faire une coupe transversale du premier et du dernier enregistrement pour la date souhaitée. Ceci est mis en œuvre par des tables virtuelles : « Tranche du Premier » et « Tranche du Dernier ». Pour utiliser ces tables, vous pouvez utiliser à la fois la sélection et la requête (dans le concepteur de requêtes, vous sélectionnerez ces tables virtuelles et vous pourrez effectuer une requête sur elles). Ces tableaux seront disponibles si le registre d'information est périodique.

Le registre « Prix des articles » est un registre périodique d'informations, les inscriptions se font en fonction du registraire.

L'image montre que la fréquence est réglée dans la journée. Cela signifie que le prix peut être modifié une fois par jour en fonction de mesures uniques au cours de la journée.

Le registre est subordonné au document « Fixation des prix des articles ». Cela signifie que l'inscription au registre provient de ce document. Les mouvements sur un document spécifique peuvent être visualisés à partir du formulaire de document « Fixation des prix des articles ».

Le registre est conçu pour stocker des informations sur le prix d'un article, avec les dimensions « Type de prix », « Article » et « Caractéristiques de l'article ». La dimension principale est constituée des trois champs de dimension ; il sera possible de faire des sélections en fonction de celle-ci lors de l'échantillonnage.

Conclusion: Après avoir lu l'article, vous pourrez créer un registre d'informations 1C, ajouter des dimensions et des ressources, configurer l'édition et lister les formulaires. Créez un enregistrement et sélectionnez les enregistrements existants. Si vous avez des questions, utilisez les commentaires dans l'article, j'essaierai de répondre rapidement à votre question.

Parfois, vous devez utiliser une requête pour obtenir des données sur plusieurs dates à la fois à partir d'un registre d'informations périodiques. Un exemple typique est le travail avec les taux de change. Considérons un algorithme pour résoudre ce problème à l'aide d'un exemple.

Formulation du problème

Un document « Ventes de biens et services » a été créé dans la base de données, dans l'en-tête duquel se trouve l'attribut « Devise ». La demande nécessite pour chaque document d'obtenir le taux de change en vigueur à partir de l'en-tête à la date du document. Les taux de change sont stockés dans le registre d'informations périodiques « Taux de change ».
Une solution directe à ce problème pourrait être une requête en boucle : obtenir tous les documents avec leurs dates et devises et, dans l'exemple, accéder à la table virtuelle avec une tranche du dernier registre « Taux de change ». Mais parce que une requête dans une boucle est "mauvaise", essayons d'implémenter la tâche avec une seule requête.

Solution

Pour résoudre le problème, nous utiliserons le fait que les tables de la requête peut être connecté non seulement pour l'égalité des champs.

SÉLECTIONNER Ventes de biens et services. Lien, Ventes de biens et services. Devise, MAXIMUM (Taux de change. Période) COMME Période PLACE DANS TPériodes Paramètres Tarifs FROM Document. Ventes de biens et services COMMENT Ventes de biens et services CONNEXION GAUCHE Registre d'informations . Taux de change AS Taux de change ON Ventes de biens serviteurs.Currency = Taux de change.Devise et ventes de biensServices.Date >= Taux de change.Période GROUPE Logiciel Ventes de biens et services. Lien, Ventes de biens et services. Devise ; ///////////////////////////////////////////// // /////////////////////////// SELECT VTPeriodsSetting Rates.Link, VTPeriodsSetting Rates.Currency, RatesCurrency.Rate FROM VTPeriodsSetting Rates AS VTPeriodsSetting Rates CONNEXION GAUCHE RegisterInformation . Taux de change AS Taux de change ON VTPeriodsRate Settings.Period = Taux de change.Period AND VTPeriodsRate Settings.Currency = Taux de change.Currency

Procédure de demande :

  1. Obtention du délai de fixation du taux de change pour chaque document. Les documents sont connectés à la table PHYSIQUE « Taux de change ». Ici, vous devez faire attention aux conditions de connexion. Les devises doivent être égales et la date du document >= la période du registre d'information.
    Grâce à une telle connexion, pour chaque document, on obtiendra un ensemble de lignes qui satisfont à la condition : tous les enregistrements des taux de change pour la devise du document, établis au plus tard à la date du document.
    La dernière étape consistera à regrouper les lignes pour obtenir la période tarifaire maximale. En conséquence, pour chaque document, le délai requis pour la fixation du taux de change de la devise souhaitée sera obtenu (la date maximale de fixation du taux de change, mais pas plus que la date du document). Le résultat est placé dans la table temporaire VTPeriodsSettingRates.
  2. Obtenir un cours. La table temporaire VTPeriodsSetting Rates est connectée à la table PHYSIQUE « Currency Rates ». La connexion s'effectue en fonction de la Devise du Document et de la période de fixation des tarifs définis dans la deuxième table temporaire.

: Tranche du premier Et Tranche du dernier Envisageons de travailler avec ces tables virtuelles en utilisant 1C. Beaucoup plus souvent utilisé Tranche du dernier, alors commençons par ça.

Une tranche du dernier permet d'obtenir le dernier enregistrement du registre d'information pour une date précisée dans le cadre de mesures. Pour la dernière (première) table de tranches, il est possible de préciser deux paramètres entre parenthèses, séparés par des virgules. Le premier paramètre contient la date à laquelle la tranche est réalisée (si le paramètre n'est pas précisé, la tranche est réalisée à la date du jour). Le deuxième paramètre est une condition dans le langage de requête 1C et vous permet de définir diverses sélections. En règle générale, des mesures sont utilisées dans ces sélections. Tout cela semble assez vague, il est donc impossible de se passer d'un exemple.
Ayons donc un registre périodique d'informations Prix qui stocke les prix par produit et fournisseur. La fréquence du registre est de jour.

Le registre contient les entrées suivantes

Pour commencer, nous obtiendrons une tranche de ce dernier sans utiliser de paramètres en exécutant la requête suivante :

SELECT PriceSliceLast.Period AS Période, PriceSliceLast.Product AS Produit, PriceSliceLast.Supplier AS Fournisseur, PriceSliceLast.Amount AS Montant FROM Register Information.Price.SliceLast AS PriceSliceLast

Les paramètres n'étant pas précisés, la tranche est réalisée à la date du jour - 01/02/2017. En conséquence, nous obtenons le tableau suivant

Nous voyons ici que la combinaison des dimensions Produit + Fournisseur est unique, c'est-à-dire Pour chaque combinaison de mesures de registre, l'enregistrement avec la date maximale a été effectué et la date d'enregistrement est inférieure ou égale à la date actuelle.

Disons que nous devons faire la même chose, mais que nous voulons obtenir des enregistrements avec une date inférieure ou égale au 15/01/2017. Pour ce faire, vous devez modifier la ligne avec la dernière table de tranches dans la requête comme suit

DE RegisterInformation.Price.SliceLast(&CutDate,) AS PriceSliceLast

Avant d'exécuter la requête, vous devez bien entendu lui passer un paramètre &Date de coupe. Le résultat de la requête ressemblera maintenant à ceci

Et enfin, imaginez que nous ayons besoin d'avoir un aperçu des dernières nouveautés pour la même date à condition que nous ayons la marchandise. Crayon, et le fournisseur Papeterie. Pour cela, précisez le deuxième paramètre dans la requête

FROM RegisterInformation.Price.Last Cut(&CutDate, Product = &Product AND Supplier = &Supplier) AS PriceLast Cut

En conséquence, nous obtenons un seul enregistrement

Pour éviter de se perdre dans toutes ces parenthèses et virgules, mieux vaut utiliser un générateur de requêtes. Je vais vous montrer en utilisant la dernière requête comme exemple.

Après avoir sélectionné une table avec une tranche des dernières dans le concepteur de requêtes, vous devez cliquer sur le bouton Options de table virtuelle et dans la fenêtre qui s'ouvre, écrivez

Il n'est pas difficile de deviner que pour la première tranche le principe de fonctionnement est le même, sauf que le premier enregistrement après la date de coupe est sélectionné.

Dans la configuration de test, nous disposons d'un registre d'information périodique « Nomenclature Prix » avec les données initiales suivantes :

La figure montre également la structure des métadonnées du registre. Comme on peut le voir, le registre contient la dimension « Produit » avec le type de référence « Produits », ainsi que la ressource numérique « Prix » et l'attribut « OldPrice ».

Disons que dans un rapport, nous devons obtenir une tranche des derniers enregistrements de produits et de leurs prix, à condition que l'ancien prix soit inférieur ou égal à 50.

Deux options de demande

Je dirai tout de suite que nous examinerons les options correctes et incorrectes. Commençons par cette dernière. C’est une erreur que commettent souvent les programmeurs débutants. Ainsi, la requête suivante a été écrite pour le rapport :

Demande = Nouvelle demande ; Demande. Texte = " SÉLECTIONNER | | | | | DEPUIS | Registre des informations. PrixNomenclatures. Tranche du dernier COMMENT PrixNomenclatureTranche du dernier|OÙ | PrixNomenclatureTrancheDerniers. Ancien prix< = 50 " ;

Faites attention à la condition dans la section « OÙ ». C'est la principale erreur ! Cette requête ne renverra pas un seul enregistrement, et voici pourquoi : lors de l'utilisation de tables virtuelles, dans notre cas "Last Slice", les données sont d'abord récupérées de la base de données selon les conditions décrites dans la table virtuelle, puis les actions décrites dans le le texte de la requête est effectué (regroupements, conditions dans la section "WHERE", tri, etc.).

Par conséquent, dans notre exemple, la requête ne renvoie aucun résultat. Tout d'abord, il reçoit une part de ce dernier, et pose ensuite la condition sur l'attribut « Ancien prix ». Voilà à quoi cela ressemble sur le schéma :

Pour résoudre correctement le problème, la condition de l'attribut « Ancien prix » doit être transférée aux conditions de la table virtuelle. Voici à quoi ressemblera le texte correct de la demande :

Demande = Nouvelle demande ; Demande. Texte = " SÉLECTIONNER PrixNomenclatureTrancheDerniers. Période, PrixNomenclatureTrancheDerniers. Produit, PrixNomenclatureTrancheDerniers. Prix, PrixNomenclatureTrancheDerniers. Ancien prix DEPUIS Registre des informations. PrixNomenclatures. SliceLast (, OldPrice< = 50 ) COMMENT LES PRIXNomenclatureSliceDernières"

Désormais, la requête recevra les données correctes, puisqu'une tranche des derniers prix sera reçue en tenant compte de la condition de l'attribut « OldPrice ».

résultats

Il faut comprendre que ce qui précède s'applique à tous les cas d'utilisation de tables virtuelles dans les requêtes (pour les registres d'accumulation, les registres comptables, les tâches, etc.).

Cela implique également la règle principale d'utilisation des tables virtuelles : « lorsque vous utilisez une table virtuelle, veillez à définir les paramètres de sélection directement dans la table virtuelle, sinon la requête recevra des données inutiles, qui seront ensuite utilisées pour la sélection ».