Maison / Services en ligne / L'opérateur "dans la hiérarchie" dans une requête. Exemples de requêtes pour travailler avec des répertoires hiérarchiques Dans la hiérarchie de communication des requêtes 1c

L'opérateur "dans la hiérarchie" dans une requête. Exemples de requêtes pour travailler avec des répertoires hiérarchiques Dans la hiérarchie de communication des requêtes 1c

Cette section montre des exemples de résolution de problèmes typiques lors de l'utilisation de répertoires hiérarchiques.

Obtention des éléments d'un répertoire hiérarchique subordonnés à un groupe donné

Pour obtenir des éléments subordonnés d'un répertoire hiérarchique, le langage de requête fournit la construction IN HIERARCHY. Exemple d'utilisation EN HIÉRARCHIE :


CHOISIR
Nomenclature.Code,
Nomenclature.PurchasePrice
DEPUIS

Dans cet exemple, tous les enregistrements du répertoire Nomenclature situés dans le groupe &Groupe seront obtenus, y compris lui-même, ses groupes subordonnés et les éléments appartenant aux groupes subordonnés.

Si nous ne nous intéressons qu'aux éléments et groupes situés directement dans un groupe donné, alors nous pouvons obtenir de tels éléments en définissant une condition sur le champ Parent. Exemple:


CHOISIR
Nomenclature.Code,
Nomenclature Nom AS Nom,
Nomenclature.PurchasePrice
DEPUIS
Annuaire.Nomenclature AS Nomenclature


Nomenclature.Parent = &Groupe

Cette requête sélectionnera les groupes et les éléments subordonnés au groupe avec le lien &Groupe.

Vérifier la présence d'éléments subordonnés d'un élément de répertoire

Pour vérifier la présence d'enregistrements subordonnés d'un élément d'annuaire, vous pouvez utiliser une requête similaire à celle présentée :

Dans cet exemple, la référence à l'élément pour lequel vous souhaitez rechercher des enfants est écrite dans le paramètre de requête Parent. Après avoir exécuté une telle requête, vous devez vérifier que le résultat est vide. Si le résultat n’est pas vide, alors il existe des enregistrements subordonnés. Sinon - non. Exemple:


Si Request.Execute().Empty() Alors
Rapport("Aucune entrée");
Sinon
Rapport("Enregistrements disponibles");
fin si;

Obtenir tous les parents d'un élément

Le langage de requête ne fournit aucun moyen spécial pour récupérer tous les parents d'un élément. Vous pouvez utiliser des totaux hiérarchiques pour effectuer la tâche, mais l'obtention de totaux hiérarchiques est optimisée pour générer des totaux pour un grand nombre d'enregistrements et n'est pas entièrement efficace pour obtenir les parents d'un seul élément. Pour récupérer plus efficacement tous les enregistrements parents d'un élément, il est recommandé de parcourir ses parents par petites portions. Exemple:


ObjetActuel = ObjetArticle ;

Requête = Nouvelle requête("SELECT
| Nomenclature.Parent,
| Nomenclature.Parent.Parent,
| Nomenclature.Parent.Parent.Parent,
| Nomenclature.Parent.Parent.Parent.Parent,
| Nomenclature.Parent.Parent.Parent.Parent.Parent
|DE
| Annuaire.Nomenclature AS Nomenclature
|OÙ
| Nomenclature.Link = &CurrentNomenclatureElement";

Pendant que le cycle de la vérité
Request.SetParameter("CurrentItemItem", CurrentItemItem);
Résultat = Query.Run();
Si Résultat.Empty() Alors
Avorter;
fin si;
Sélection = Résultat.Select();
Sélection.Next();
Pour ColumnNumber = 0 Par Result.Columns.Quantity() - 1 Boucle
CurrentItemItem = Sélection[ColumnNumber] ;
Avorter;
Sinon
Rapport (CurrentItemItem);
fin si;
Fin du cycle ;

Si CurrentItemItem = Directories.Nomenclature.EmptyLink() Alors
Avorter;
fin si;
Fin du cycle ;

Dans cet exemple, tous les parents du lien enregistré dans la variable ElementNomenclature sont affichés dans la fenêtre de message de service. Dans le cycle, 5 parents lien sont sélectionnés.

Si le nombre de niveaux dans le répertoire est limité et petit, alors il est possible d'obtenir tous les parents avec une seule requête sans boucle.

Afficher un répertoire hiérarchique dans un rapport

Pour afficher un répertoire hiérarchique dans un rapport tout en préservant la hiérarchie, vous devez utiliser une requête semblable à la suivante :


CHOISIR
Nomenclature.Code,
Nomenclature Nom AS Nom,
Nomenclature.PurchasePrice
DEPUIS
Annuaire.Nomenclature AS Nomenclature
TRIER PAR
Prénom HIÉRARCHIE

Cette requête sélectionne tous les enregistrements du répertoire et les organise par hiérarchie. Le résultat sera classé par nom, en tenant compte de la hiérarchie.

Pour que les groupes de répertoires soient placés au-dessus des éléments, il est nécessaire de remplacer la clause ORDER BY dans cette requête par ce qui suit :


TRIER PAR
Nomenclature. Il s'agit de la HIÉRARCHIE du groupe,
Nom

Le résultat sera toujours ordonné hiérarchiquement, mais les groupes apparaîtront au-dessus des éléments.

Il est également possible de remplacer l’offre ORDER BY par l’option AUTO ORDER. Dans ce cas, le résultat sera ordonné en fonction des paramètres du répertoire, c'est-à-dire si le répertoire indique que les groupes doivent être situés au-dessus des éléments, alors ils seront situés au-dessus.

Il est également possible d'obtenir la structure hiérarchique du répertoire à partir des résultats.


CHOISIR
Nomenclature.Code,
Nomenclature Nom AS Nom,
Nomenclature.PurchasePrice

FROM Annuaire.Nomenclature AS Nomenclature


(Nomenclature.ThisGroup = FAUX)

COMMANDER PAR Nom

Obtenir des totaux par hiérarchie

Pour obtenir des totaux par hiérarchie dans une requête, vous devez préciser le mot-clé HIERARCHY dans la clause SOFTWARE TOTAL après avoir précisé le champ par lequel les totaux seront calculés. Un exemple de rapport « Chiffre d'affaires des articles » avec obtention de totaux par hiérarchie :


CHOISIR

DEPUIS

HIÉRARCHIE de la nomenclature

Suite à cette demande, des totaux seront calculés non seulement pour chaque élément, mais également pour les groupes auxquels appartient tel ou tel élément.

Dans le cas où nous n'avons pas besoin de totaux pour les éléments, mais uniquement de totaux pour les groupes, nous devons utiliser la construction HIERARCHY UNIQUEMENT dans les totaux. Exemple:


CHOISIR
Comptabilisation de la NomenclatureTurnover.Nomenclature AS Nomenclature,
Comptabilisation de la NomenclatureChiffre d'affaires.Nomenclature.Présentation,
Comptabilisation de la NomenclatureTurnover.QuantityTurnover AS QuantityTurnover
DEPUIS
Registre d'accumulation.Nomenclature Comptabilité.Chiffre d'affaires COMMENT Nomenclature ComptabilitéChiffre d'affaires
MONTANT DES RÉSULTATS (QuantityTurnover) PO
Hiérarchie de nomenclature uniquement

Le résultat de cette requête sera un total d'enregistrements uniquement pour les groupes d'articles.

Qu'est-ce qu'un annuaire 1C et pourquoi est-il nécessaire ? Le répertoire stocke des informations conditionnellement permanentes, c'est-à-dire des informations qui restent quasiment inchangées sur une longue période. Par exemple, le répertoire « Nomenclature » contient une liste de biens vendus ou produits. De plus, un répertoire peut contenir de nombreuses propriétés décrivant un élément de répertoire.

Si nous prenons le sexe d'une personne à des fins de comparaison, alors la liste est limitée et ne change pas, donc une énumération lui convient mieux.

Après avoir créé un nouveau répertoire, nous verrons l'image suivante.

Regardons tous ses favoris.

Basique

Ici sont indiqués le nom (identifiant dans la base de données) et le synonyme (nom d'utilisateur de l'annuaire). Un commentaire facultatif est celui qui peut expliquer le but du répertoire ou décrire ses fonctionnalités.

Hiérarchie

Sur cet onglet, vous pouvez configurer la profondeur d'imbrication des éléments du répertoire. Grâce à ce paramètre, il est pratique de différencier et de détailler les éléments selon certains critères. Par exemple, les produits « Armoires » se trouvent dans un groupe et les produits « Tables » dans un autre. Par défaut, lors de sa création, le répertoire présente liste d'éléments. Si vous cochez la case Répertoire hiérarchique, alors chaque élément peut être subordonné à un autre élément (groupe). Vous trouverez ci-dessous les options permettant de personnaliser ce signet et de modifier l'affichage en mode personnalisé.

Type de hiérarchie :

Hiérarchie des groupes et des éléments

Avec ce paramètre, les éléments ne peuvent être imbriqués que dans des groupes (dossiers).

Ici, comme vous pouvez le voir, tous les éléments et groupes ont les mêmes icônes et n'importe quel élément peut être imbriqué.

Placer les groupes en haut

Lorsque cette case est cochée, les groupes seront toujours en haut, sinon ils seront classés par ordre de tri, par exemple comme ceci :

Limiter le nombre de niveaux hiérarchiques

Si la case n'est pas cochée ici, alors l'imbrication est illimitée.

Si la case est cochée, vous pouvez spécifier le nombre de niveaux ci-dessous.

Les propriétaires

Sur le marque-page les propriétaires d'autres répertoires peuvent être indiqués par rapport auxquels celui-ci est subordonné. Le diagramme de relations des répertoires subordonnés est similaire au diagramme de relations d'un répertoire hiérarchique, sauf qu'ici un autre répertoire agit en tant que parent et est appelé propriétaire. Dans des configurations typiques, un bon exemple est la subordination du répertoire « Accords » au répertoire « Contreparties », car Il ne peut y avoir d’accord qui n’appartient à aucune contrepartie.

Le champ "Liste des propriétaires du répertoire" précise la liste des répertoires propriétaires des éléments de ce répertoire.

Ci-dessous dans le champ « Utilisation de la subordination » il est indiqué à quoi les éléments de ce répertoire seront subordonnés.

Comment savoir par programme si un répertoire est hiérarchique ou non

Pour ce faire, vous devez vous référer aux métadonnées

Il s'agit de HierarchicalDirectory = Metadata.Directories.Counterparties.Hierarchical ;

À suivre...

Attention! Il s'agit d'une version d'introduction de la leçon, dont le matériel peut être incomplet.

Connectez-vous au site en tant qu'étudiant

Connectez-vous en tant qu'étudiant pour accéder au matériel scolaire

Langage de requête 1C 8.3 pour programmeurs débutants : opérateurs ENTRE et IN

Opérateur logique ENTRE

Opérateur ENTRE vous permet de vérifier la valeur est-elle incluse ? expression spécifiée à sa gauche dans la plage spécifiée à droite ( avec les limites de l'aire de répartition, c'est-à-dire inclusif).

Alors au lieu de

Si, au contraire, il est nécessaire de sélectionner tous les aliments dont la teneur en calories n'est pas incluse dans la plage, alors la forme de négation suivante convient (une particule est apparue PAS):

Opérateur ENTRE Peut être appliqué à plus que de simples plages numériques. Cela fonctionne également bien avec les dates :

Opérateur logique B

Recherche d'une correspondance avec l'un des éléments répertoriés

Opérateur DANS vous permet de vérifier la valeur correspond-elle l'expression indiquée à sa gauche, avec l'une des valeurs décrit à droite.

Alors au lieu de

Pouvez-vous écrire quelque chose de plus concis ?

Et le résultat sera le même :

Si, au contraire, il est nécessaire de sélectionner tous les aliments dont la couleur ne coïncide avec aucune valeur de la liste, alors la forme de négation suivante convient (une particule est apparue PAS):

Vérifier si une valeur correspond à l'un des résultats de la requête

Supposons que nous devions sélectionner dans la base de données uniquement les couleurs présentes dans la description de l'aliment. Ainsi, la liste sélectionnée ne doit pas contenir, par exemple, la couleur noire, puisqu'il n'y a aucun aliment noir dans notre base de données. Vous lisez une version d'essai de la leçon, des leçons complètes sont disponibles.

Une façon de procéder consiste à utiliser l'opérateur logique DANS, à droite de laquelle se trouvera une sous-requête sélectionnant les noms de couleurs dans toutes les entrées du répertoire Nourriture:

SELECT Nom FROM Répertoire. Couleurs OÙ Nom IN ( SELECT Couleur. Nom FROM Répertoire. Aliments )

En passant, je précise qu’à partir d’une requête interne il est possible d’accéder aux champs d’une requête externe.

Encore une fois, pour cette forme d'opérateur DANS, l'utilisation des particules est également disponible PAS devant lui.

Vérification de l'appartenance à la hiérarchie pour les répertoires

Pour les annuaires, la vérification de l'appartenance à la hiérarchie peut également être effectuée.

Tout d’abord, regardons un exemple de répertoire hiérarchique. Ouvrez le répertoire "Villes" dans notre base de données :

Veuillez noter que ses éléments sont différents des autres répertoires ( Nourriture, Couleurs, Les saveurs) présence de dossiers jaunes. Ce groupes d'annuaire.

Les groupes diffèrent des éléments ordinaires dans le sens où ils peuvent inclure d'autres groupes et éléments. Tout comme les dossiers contiennent d’autres dossiers et fichiers.

Pour visualiser le contenu d'un groupe, double-cliquez dessus :

Pour monter d'un niveau, double-cliquez à nouveau sur le groupe :

Ainsi, un annuaire hiérarchique peut contenir à la fois des éléments ordinaires (par exemple, Rio de Janeiro, Salvador) et des groupes (par exemple, le Brésil, l'Inde). Vous lisez une version d'essai de la leçon, des leçons complètes sont disponibles.

Chaque élément (qu'il s'agisse d'un groupe ou d'un élément ordinaire) peut avoir un parent. Par exemple, le parent de l'élément Rio de Janeiro est le groupe Brésil :

Et cela est vrai car Rio de Janeiro fait partie du groupe Brésil dans la hiérarchie des annuaires :

Écrivons maintenant une requête qui demandera le groupe de pays sélectionné et tous les éléments de ville qu'il contient.

Veuillez noter que dans le texte de la demande, il y a une esperluette (&) avant le nom GroupCountry. Les noms avec une esperluette sont automatiquement reconnus par le système comme des paramètres dont la valeur doit être définie avant l'exécution de la requête.

Après avoir collé cette requête dans la console et cliqué sur le bouton Exécuter pour mettre à jour, nous pourrons définir ce paramètre :

Sélectionnez le groupe "Russie" comme valeur (bouton Sélectionner) :

Si nous cliquons maintenant sur le bouton "Exécuter", le résultat de la requête sera le suivant :

Le résultat de la demande a été le groupe lui-même (Russie) et tous les éléments qui en font partie (Perm, Krasnoïarsk et Voronej).

Si vous sélectionnez « Brésil » au lieu de Russie, le résultat sera le suivant :

Ainsi le résultat de l'opérateur DANS LA HIÉRARCHIE sera VRAI si la valeur de l'expression de gauche est une référence à un élément de répertoire et est incluse dans l'ensemble de valeurs de droite (Brésil) ou appartient hiérarchiquement à un groupe contenu dans cet ensemble (Sao Paulo, Rio de Janeiro, Salvador).

Le résultat d'une requête peut également être un ensemble de valeurs par rapport auxquelles une correspondance est vérifiée. Dans ce cas, à droite de l'opérateur DANS vous devez préciser une description de la demande :

Pour l'opérateur DANS LA HIÉRARCHIE l'utilisation des particules est également disponible PAS devant lui.

Passer l'examen

Démarrer l'essai

1. L'opérateur logique ENTRE vérifie la valeur

2. Expression logique 1 ENTRE 1 ET 1

3. Expression logique 1 PAS ENTRE 2 ET 2

4. Vérifications de l'opérateur logique B

5. L'opérateur logique B permet de vérifier

Les répertoires 1C sont un objet d'arborescence de métadonnées spécialisé qui sert à stocker des informations de référence statiques. Par exemple, dans les configurations typiques, vous pouvez voir les vues suivantes : , Nomenclature, Employés, Immobilisations, etc. En règle générale, les informations contenues dans les annuaires ne changent pas souvent. Les répertoires sont ensuite utilisés dans presque tous les objets comptables comme section comptable ou information de référence.

Nous verrons ci-dessous la configuration et la conception d'un répertoire à partir du configurateur en prenant comme exemple le répertoire « Nomenclature ».

Onglet de base

L'onglet « Basique » spécifie le nom, le synonyme, la représentation de l'objet et la description de l'objectif.

Onglet « Hiérarchie des répertoires »

Ici, la hiérarchie du répertoire est établie.

La hiérarchie dans 1C 8.3 est de deux types - " groupes et éléments" Et " éléments". Cela diffère en ce que dans le premier cas, seul un dossier (groupe) peut être un parent (dossier), et dans le second cas, un élément peut également être un parent.

"Placer les groupes en haut" - le drapeau est responsable de l'affichage des groupes sous forme de liste.

Également dans les paramètres, vous pouvez limiter le nombre de groupes dans la hiérarchie des répertoires en utilisant le paramètre approprié.

Onglet Propriétaires

Un répertoire peut être subordonné à un autre répertoire. Du point de vue de la configuration de 1C 8.3, cela signifie que l'attribut « Propriétaire » devient obligatoire pour l'élément subordonné. Un exemple d'une telle connexion entre annuaires dans les configurations standards « Nomenclature - Unités de mesure », « Contreparties - Contrats d'entrepreneurs ».

Le propriétaire du répertoire peut également être les objets de métadonnées suivants : , .

Onglet Données

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

L'onglet le plus important du point de vue d'un programmeur. Il contient les détails du répertoire.

Le répertoire contient un ensemble de détails standards qui ne sont pas édités par le programmeur 1C 8.2 ; une liste d'entre eux peut être consultée en cliquant sur le bouton « Détails standard » :

Je vais m'attarder sur chacun plus en détail :

  • Ce groupe— un attribut de type booléen, indiquant s'il s'agit d'un groupe ou d'un élément. Disponible uniquement dans le répertoire hiérarchique. Note, la valeur de cet attribut ne peut pas être modifiée en 1C : mode Entreprise.
  • Code— accessoires, tapez un nombre ou une chaîne (généralement une chaîne). Un numéro attribué automatiquement par le système. Généralement calculé comme (code précédent + 1). Je recommande d'utiliser le type chaîne, car le tri des valeurs numériques ne fonctionne pas comme prévu. Peut être utilisé comme présentation d'annuaire dans une liste et dans des champs de saisie. Généralement utilisé pour rechercher un élément lors de la saisie d'une chaîne. Si vous devez supprimer le champ Code, entrez zéro dans la longueur de la ligne.
  • Nom— détails obligatoires, type de chaîne. La longueur maximale d'une ligne est de 150 caractères. Peut être utilisé comme présentation d'annuaire dans une liste et dans des champs de saisie. Généralement utilisé pour rechercher un élément lors de la saisie d'une chaîne. Si vous devez supprimer le champ Nom, entrez zéro dans la longueur de la ligne.
  • Parent— un attribut de type DirectoryLink.<ИмяТекущегоСправочника>. Disponible uniquement dans le répertoire hiérarchique. Pointe vers le parent supérieur dans la hiérarchie. Si l'Element ou le Groupe est à la racine du répertoire, la valeur Directory est spécifiée.<ИмяТекущегоСправочника>.EmptyLink.
  • Propriétaire— lien vers l'élément propriétaire de l'élément de répertoire actuel (groupe). Disponible uniquement dans le répertoire subordonné 1C.
  • Suppression du drapeau— accessoires de type booléen. Responsable de l’affichage de la « marque de suppression » dans le système. Un élément marqué pour suppression est considéré comme inutilisable, mais d'anciens mouvements de documents peuvent y rester.
  • Lien— champ de type chaîne. Cet attribut stocke un identifiant d'objet unique - GUID. Ce que nous voyons dans le système dans un affichage visuel appelé « lien » n’est qu’une représentation d’un objet. Ne peut pas être modifié.
  • Prédéfini- type booléen, affiche si l'élément est prédéfini, nous en reparlerons plus tard. Ne peut pas être modifié.

L'onglet « Données » indique également la représentation de l'annuaire dans le système ; avant la version 8.2.16, la représentation ne pouvait être que Code ou Nom. Dans les versions récentes de la plateforme (à partir de la 8.3), la vue peut être décrite indépendamment dans le module gestionnaire à l'aide du gestionnaire « ViewReceiveProcessing ».

Onglet Numérotation

Ici, vous pouvez spécifier les paramètres du répertoire concernant la numérotation. Il est recommandé d'utiliser la numérotation automatique. Le contrôle d'unicité est un indicateur qui permet, si nécessaire, de rendre le code unique. Si, avec l'indicateur activé, vous essayez d'écrire un élément de répertoire avec un code non unique, dans 1C, vous recevrez le message "Le code du répertoire est devenu non unique".

Série de codes - détermine comment numéroter le répertoire ; vous pouvez saisir la numérotation du répertoire par propriétaire. Par exemple, la contrepartie « Horns and Hooves » aura sa propre numérotation de contrats - « 1, 2, 3 », etc.

Onglet Formulaires

Les formulaires du répertoire sont décrits ici. Si la configuration est lancée à la fois en mode normal et en mode géré, alors il y aura deux onglets avec des formulaires par défaut : « principal » et « avancé » - différents pour les applications normales et gérées.

Cette page présente une fonctionnalité importante du répertoire - "". Il s'agit d'une fonction très pratique de 1C 8, qui permet, lors du remplissage des données dans le champ de saisie, de ne pas accéder au répertoire, mais de saisir son nom, son code, etc. et sélectionnez l'élément souhaité dans la liste déroulante. Cela ressemble à ceci :

Autre onglet

Sur l'onglet, vous pouvez accéder rapidement aux principaux modules du répertoire - le module objet et le module gestionnaire.

Vous pouvez également définir une liste d'éléments de répertoire prédéfinis sur la page. Ce sont des éléments qui ne peuvent pas être supprimés en mode Entreprise. Les éléments prédéfinis sont accessibles directement dans le configurateur par nom, par exemple : Directories.Nomenclature.Service.

Cet onglet détermine également le mode de blocage - automatique ou contrôlé. Utilisation de la recherche en texte intégral, ainsi que des informations de référence sur l'annuaire, disponibles en 1C : Mode Entreprise.

Dans cet article, nous voulons discuter de tout avec vous Fonctions du langage de requête 1C, et constructions de langage de requête. Quelle est la différence entre fonction et design ? La fonction est appelée avec des parenthèses et les paramètres possibles, et la construction est écrite sans parenthèses. Indubitablement toutes les structures et fonctions du langage de requête 1C rendre le processus d'acquisition de données flexible et multifonctionnel. Ces fonctions et constructions s'appliquent aux champs de requête, et certaines s'appliquent également aux conditions.

Fonctions du langage de requête 1C

Parce qu'une description claire Fonctions du langage de requête 1C est beaucoup moins courant que les descriptions de structures, nous avons décidé de commencer à nous intéresser aux fonctions. Examinons maintenant chacun séparément, en décrivant son objectif, sa syntaxe et son exemple d'utilisation, donc :

1. Fonction DATE HEURE- cette fonction crée un champ constant de type "Date".

Syntaxe: DATE HEURE (<Год>,<Месяц>,<День>,<Час>,<Минута>,<Секунда>)

Exemple d'utilisation :

2. Fonction DIFFÉRENCE DE DATE- renvoie la différence entre deux dates dans l'une des dimensions (année, mois, jour, heure, minute, seconde). La mesure est passée en paramètre.

Syntaxe: DATE DE DIFFÉRENCE (<Дата1>, <Дата2>, <Тип>)

Exemple d'utilisation :

Query.Text = "SELECT | DIFFERENCEDATE(DATETIME(2015, 4, 17), DATETIME(2015, 2, 1), DAY) | AS Qty.Days";

3. Fonction VALEUR- définit un champ constant avec un enregistrement prédéfini de la base de données ; vous pouvez également obtenir un lien vide de n'importe quel type.

Syntaxe : VALEUR(<Имя>)

Exemple d'utilisation :

Request.Text = "SELECT //élément prédéfini | VALUE(Directory.Currencies.Dollar) AS Dollar, //lien vide | VALUE(Document.Receipt of Goods and Services.EmptyLink) AS Receipt, //valeur du transfert | VALUE(Transfert . Personne morale. Particulier) AS Particulier, //compte prédéfini | VALUE(Plan comptable. Autonome. Matériels) AS Compte_10" ;

4. Fonction SÉLECTIONNER- nous avons devant nous un analogue de la construction IF, qui est utilisée dans le code, seule celle-ci est utilisée dans les requêtes 1C.

Syntaxe: CHOIX QUAND<Выражение>ALORS<Выражение>SINON<Выражение>FIN

Exemple d'utilisation :

Request.Text = //si le montant est supérieur à 7 500, alors il devrait y avoir une remise de 300 roubles, //donc si la condition est déclenchée alors la fonction //renvoie Somme - 300 //sinon la demande renverra simplement Somme "SELECT | SELECT | WHEN TCReceipts.Amount > 7500 | THEN TCReceipts.Amount - 300 | ELSE TCReceipts.Amount | END AS AmountWithDiscount |FROM | Document.Receipt of GoodsServices.Goods AS TCReceipts" ;

5. Fonction EXPRESSE- permet d'exprimer un champ constant avec un type spécifique.

Syntaxe: EXPRESS (Nom de champ AS Nom de type)

Exemple d'utilisation :

Query.Text = "SELECT DIVERS | Sales.Registrar.Number, | SELECT | WHEN Sales.Registrar LINK Document.Consumable | ALORS EXPRESS (Sales.Registrar AS Document.Consumable) | ELSE SELECT | WHEN Sales.Registrar LINK Document.Implementation | ALORS EXPRESS(Sales.Registrar AS Document.Implementation) | END | ... | END AS Number | FROM | RegisterAccumulations.Purchases AS Purchases";

Existe-t-il une autre option pour utiliser la fonction EXPRESS dans des champs de types mixtes, où se produisent-ils ? L'exemple le plus simple est le « registraire » pour n'importe quel registre. Alors pourquoi pourrions-nous avoir besoin de qualifier le type dans le registraire ? Considérons la situation lorsque nous sélectionnons le champ « Numéro » du registraire, dans quelle table le numéro sera-t-il sélectionné ? La bonne réponse de tous ! Par conséquent, pour que notre requête fonctionne rapidement, nous devons spécifier un type explicite à l'aide de la fonction EXPRESS

Exemple d'utilisation :

Query.Text = "SELECT | EXPRESS(Nomenclature.Comment AS Line(300)) AS Comment, | EXPRESS(Nomenclature.Sum AS Number(15,2)) AS Sum |FROM | Directory.Nomenclature AS Nomenclature";

6. Fonction ISNULL(orthographe alternative ISNULL) - si le champ est de type NULL, alors il est remplacé par le deuxième paramètre de la fonction.

Syntaxe: EST NULL(<Поле>, <ПодставляемоеЗначение>)

Exemple d'utilisation :

Notez également qu'il est conseillé de TOUJOURS remplacer le type NULL par une valeur, car la comparaison avec le type NULL renvoie toujours FALSE même si vous comparez NULL avec NULL. Le plus souvent, les valeurs NULL sont formées à la suite de jointures de tables (tous types de jointures sauf internes).

Query.Text = //Sélectionnez l'article entier et ses soldes //s'il n'y a pas de solde dans un article, alors il y aura un champ //NULL qui sera remplacé par la valeur 0 "SELECT | No. Link, | ISNULL (ProductsInStockRemains.InStockRemaining, 0) AS Reste | DE | Répertoire.Nomenclature AS No. | CONNEXION GAUCHE Registre Accumulations. GoodsInWarehouses. Restes AS GoodsInWarehousesRemains | ON (GoodsInWarehousesRemains. Nomenclature = No. Link)";

7. Fonction REPRÉSENTATION- permet d'obtenir une représentation du champ de la requête.

Syntaxe: PERFORMANCE(<НаименованиеПоля>)

Exemple d'utilisation :

Query.Text = "SELECT | REPRÉSENTATION(FreeRemainingRemains.Nomenclature) AS Nomenclature, | REPRÉSENTATION(FreeRemainingRemaining.Warehouse) AS Entrepôt, | FreeRemainingRemaining.InStockRemaining |FROM |Accumulation Register.FreeRemaining.Remaining AS FreeRemainingRemaining";

Constructions dans le langage de requête 1C

Nous en avons discuté avec vous ci-dessus Fonctions du langage de requête 1C, il est maintenant temps de réfléchir constructions dans le langage de requête 1C, ils n’en sont pas moins importants et utiles, commençons.

1. LIEN Construction- est un opérateur logique pour vérifier un type de référence. Le plus souvent rencontré lors de la vérification d'un champ d'un type complexe par rapport à un type spécifique. Syntaxe: LIEN<Имя таблицы>

Exemple d'utilisation :

Request.Text = //si le type de valeur de l'enregistreur est le document Reçu, // alors la requête renverra "Réception de marchandises", sinon "Ventes de marchandises" "SELECT | SELECT | WHEN Remainings.Registrar LINK Document.Receipt of Goods et Services | ALORS ""Réception"" | ELSE ""Consommation"" | FIN COMME Type de mouvement | DE | Registre d'accumulation. Produits restants dans les entrepôts AS Restes" ;

2. Conception ENTRE- cet opérateur vérifie si la valeur est dans la plage spécifiée.

Syntaxe: ENTRE<Выражение>ET<Выражение>

Exemple d'utilisation :

Request.Text = //récupère la nomenclature complète dont le code est compris entre 1 et 100 "SELECT | Nomenclature.Link |FROM | Directory.Nomenclature AS Nomenclature |WHERE | Nomenclature.Code BETWEEN 1 AND 100" ;

3. Construction B et B HIÉRARCHIE- vérifier si la valeur est dans la liste transférée (les tableaux, tableaux de valeurs, etc. peuvent être transférés sous forme de liste). L'opérateur DANS LA HIÉRARCHIE permet de visualiser la hiérarchie (un exemple d'utilisation du Plan Comptable).

Syntaxe: DANS(<СписокЗначений>), DANS LA HIÉRARCHIE (<СписокЗначений>)

Exemple d'utilisation :

Request.Text = //sélectionnez tous les sous-comptes du compte "SELECT | Autonome. Lien AS Compte | DE | Plan comptable. Autonome AS Autonome | OÙ | Autonome. Lien DANS LA VALEUR DE LA HIÉRARCHIE (Graphique de Comptes. Autofinancement. Biens)" ;

4. Conception SIMILAIRE- Cette fonction nous permet de comparer une chaîne avec un motif de chaîne.

Syntaxe: COMME "<ТекстШаблона>"

Options de modèle de ligne :

% - une séquence contenant un nombre quelconque de caractères arbitraires.

Un caractère arbitraire.

[...] - tout caractère unique ou séquence de caractères répertoriés entre crochets. L'énumération peut spécifier des plages, par exemple a-z, signifiant un caractère arbitraire inclus dans la plage, y compris les extrémités de la plage.

[^...] - tout caractère ou séquence de caractères répertoriés entre crochets, à l'exception de ceux répertoriés après le signe de négation.

Exemple d'utilisation :

Query.Text = //trouver la nomenclature entière qui contient la racine TABUR et commence //soit par une lettre minuscule ou majuscule t "SELECT | Nomenclature. Lien | FROM | Répertoire. Nomenclature AS Nomenclature | WHERE | Produits. Nom LIKE "" [Tt ]abur%""" ;

5. Conception AUTORISÉE- cet opérateur vous permet de sélectionner uniquement les enregistrements de la base de données pour lesquels l'appelant dispose d'une autorisation de lecture. Ces droits sont configurés au niveau de l'enregistrement (RLS).

Syntaxe: ALLOWED est écrit après le mot-clé SELECT

Exemple d'utilisation :

Request.Text = "SELECT ALLOWED | Contreparties. Lien | FROM | Annuaire. Contreparties COMME Contreparties";

6. Conception DIVERS- vous permet de sélectionner des enregistrements dans lesquels il n'y a pas d'enregistrements en double.

Syntaxe: DIVERS s'écrit après le mot-clé SELECT

Exemple d'utilisation :

Request.Text = //sélectionne les enregistrements sur lesquels le lecteur a des droits "SELECT DIVERS | Counterparties.Name |FROM | Directory. Counterparties AS Counterparties" ;

De plus, la construction DIVERS peut être utilisée avec l'opérateur AUTORISÉ et d'autres opérateurs.

Exemple d'utilisation :

Request.Text = //sélectionne divers enregistrements sur lesquels le lecteur a des droits "SELECT ALLOWED DIVERS | Counterparties.Name |FROM | Directory. Counterparties AS Counterparties";

7. Concevoir EN PREMIER- sélectionne le nombre d'enregistrements spécifiés dans le paramètre à partir du résultat de la requête.

Syntaxe : PREMIER<число>

Exemple d'utilisation :

Request.Text = //sélectionnez les 4 premiers numéros CCD du répertoire "SELECT FIRST 4 | Numéros CCD. Lien | FROM | Répertoire. Numéros CCD COMME numéros CCD";

8. Concevoir POUR LE CHANGEMENT- vous permet de verrouiller une table, fonctionne uniquement dans les transactions (pertinent uniquement pour les verrouillages automatiques).

Syntaxe: POUR CHANGER<НаименованиеТаблицы>

Exemple d'utilisation :

Query.Text = "SELECT | Restes libres Restes. Nomenclature, | Restes libres Restes. Entrepôt, | Restes libres Restes. En stock Restant | DE | Registre des accumulations. Restes libres. Restes AS Restes libres Restes | POUR CHANGEMENT | Registre des accumulations . Restes libres. Restes" ;

9. COMMANDER PAR- organise les données par un champ spécifique. Si le champ est un lien, alors lors de la définition du drapeau COMMANDE AUTOMATIQUE Le tri s'effectuera par représentation des liens ; si l'indicateur est désactivé, alors les liens sont triés selon l'ancienneté de l'adresse du lien en mémoire.

Syntaxe: TRIER PAR<НаименованиеПоля>COMMANDE AUTOMATIQUE

Exemple d'utilisation :

Query.Text = "SELECT | Restes libres Restes. Nomenclature AS Nomenclature, | Restes libres Restes. Entrepôt AS Entrepôt, | Restes libres Restes. En stock Restant | DE | Enregistrer les accumulations. Restes libres. Restant AS Restes restants libres | | ORDER BY | Nomenclature | VANIE DE COMMANDE AUTOMATIQUE" ;

10. Conception GROUPE PAR- utilisé pour regrouper les chaînes de requête par champs spécifiques. Les champs numériques doivent être utilisés avec toute fonction d'agrégation.

Syntaxe: PAR GROUPE<НаименованиеПоля1>, .... , <НаименованиеПоляN>

Exemple d'utilisation :

" ;

11. Conception AVOIR- vous permet d'appliquer une fonction d'agrégation à une condition de sélection de données, similaire à la construction WHERE.

Syntaxe: AYANT<агрегатная функция с условием>

Exemple d'utilisation :

Query.Text = //sélectionne les enregistrements groupés où le champ InStock est supérieur à 3 "SELECT | ItemsInStocks.Nomenclature AS Nomenclature, | ItemsInWarehouses.Warehouse, | SUM(ItemsInStocks.InStock) AS INSTOCK |FROM | RegisterAccumulations.ItemsInStocks AS ItemsInStocks | | GROUP BY | ProductsInWarehouses.Nomenclature, | ProductsInWarehouses.Warehouse | |DISPONIBLE | MONTANT(ProductsInWarehouses.InStock) > 3" ;

12. INDICE DE CONSTRUCTION PAR- utilisé pour indexer le champ de requête. Une requête avec indexation prend plus de temps, mais accélère la recherche dans les champs indexés. Ne peut être utilisé que dans les tables virtuelles.

Syntaxe: INDEX PAR<Поле1, ... , ПолеN>

Exemple d'utilisation :

Query.Text = "SELECT | Ts.NameOS, | Ts.FolderNumber, | Ts.CodeOS, | Ts.Term, | Ts.Type | PLACE DataTs | FROM | &Ts AS Ts | | INDEX BY | Ts.NameOS, | Ts .CodeOS" ;

13. Conception OÙ- vous permet d'imposer une condition sur n'importe quel champ de sélection. Le résultat inclura uniquement les enregistrements qui satisfont à la condition.

Syntaxe: OÙ<Условие1 ОператорЛогСоединения УсловиеN>

Exemple d'utilisation :

Query.Text = //tous les enregistrements avec CompensationRemaining sont sélectionnés<>0 et //AmountForCalcCompRemaining > 100 "SELECT | CompensationRPORemains.Counterparty, |CompensationRPORemains.Child, | CompensationRPORemains.CompensationRemaining, | CompensationRPORemains.AmountForCalcCompRemains |Place DataTz |FROM | Accumulation Register.CompensationRP.Remains AS CompensationRPRemains | WHERE |CompensationRPORe maining.CompensationRemaining<>0 | Et CompensationRPORemains.AmountForCalcCompRemaining> 100" ;

14. RÉSULTATS DE CONCEPTION... GÉNÉRAL- utilisé pour calculer les totaux ; la conception spécifie les champs par lesquels les totaux seront calculés et les fonctions d'agrégation appliquées aux champs de totaux. Lorsque vous utilisez des totaux pour chaque champ après la construction TOTAL, les données sont regroupées. Il existe une construction GÉNÉRALE facultative ; son utilisation fournit également un regroupement supplémentaire. Vous verrez un exemple du résultat de la demande ci-dessous.

Syntaxe: RÉSULTATS<АгрегатнаяФункция1, ... , АгрегатнаяФункцияN>PAR<ОБЩИЕ> <Поле1, ... , ПолеN>

Exemple d'utilisation :

Request.Text = "SELECT | Calculs. Accord de contrepartie. Type d'accord AS Type de contrat, | Calculs. Accord de contrepartie AS Contrat, | Calculs. Contrepartie, | Calculs. Montant du règlement mutuel Solde AS Solde | FROM | Registre des accumulations. Mutuelle Règlement AVEC Contreparties. Soldes AS Calculs | TOTAL | MONTANT (Solde) |Logiciel | GÉNÉRAL, | Type d'accord" ;

La figure présente les regroupements qui ont été formés lors de l'exécution de la demande, celui du haut fait référence à la section GÉNÉRAL et le second au champ Type d'accord d'accord de contrepartie.