Comment obtenir le Type (type) d'un Document dans une requête ? 1s 8 comment déterminer le type dans une requête

1C vous permet de simplifier considérablement la comptabilité ou simplement de gérer n'importe quelle organisation, qu'il s'agisse d'un petit magasin ou d'une grande entreprise. Le programme est un grand système de gestion de base de données. Afin de ne pas vous perdre dans tout cela, vous devez être capable d'effectuer diverses actions simples et d'en comprendre l'essence. Ensuite, vous comprendrez comment vérifier le type de valeur dans une requête en 1C, ainsi que ce qu'elles sont généralement, ainsi que comment les distinguer.

Types de valeur

1C : L'entreprise a inclus une fonction spéciale dans les nouvelles versions (plateforme 8.2). En l'utilisant, vous pouvez ajouter des paramètres spéciaux à n'importe quel nom ou élément du système de données. Cela a été fait pour rendre le système plus facile à modifier et à ajouter de nouveaux éléments. Cette fonction est appelée « Type de valeur ».

En fait, c’est l’un des concepts de base que contiennent la plupart des langages de programmation. En l'utilisant, vous pouvez classer diverses données. Par exemple : dates, nombres, chaînes, liens. Ce ne sont que des classifications de base. Il y en a peut-être beaucoup plus. Disons que si vous saisissez des informations sur les villes dans votre système, vous pouvez utiliser : continent, pays, région, etc.

Examen

Vous pouvez vérifier un champ particulier à l'aide d'un langage de requête. Ou plutôt ses fonctions : TYPE VALEUR. Autrement dit, si nous voulons savoir quel type d’informations contient la cellule d’intérêt, nous devons utiliser la commande.

VALEUR TYPE(Valeur) = TYPE(Chaîne)

Dans l'exemple ci-dessus, nous avons défini le type le plus simple à l'aide de la commande. Autre exemple de validation de requête :

Documentation

Il en existe de nombreux types, les utilisateurs peuvent se contenter des premiers ou saisir le leur pour améliorer la base d'informations. En voici quelques uns.

  • DocumentLink. Il est utilisé pour stocker facilement des références à divers objets dans d’autres parties du système.
  • DocumentObject - édition de documents.
  • DocumentSelection - tri des objets de la base de données.

De plus, il existe des termes spéciaux qui caractérisent toute donnée :

  • formulaire;
  • doubler;
  • booléen;
  • nombre;
  • date de;
  • tableau;
  • case à cocher ;
  • image.

Ce ne sont là que quelques-uns d’entre eux. Tout objet ne peut être que quelque chose de cette liste. Booléen est un paramètre spécial qui prend deux valeurs : vrai ou faux. Il existe également des balises spéciales qui permettent d'ajuster la demande : quand, où, comment, autrement, etc. Elles définissent l'algorithme de comportement du programme. 1C se distingue par le fait que ces mots ici, comme tout le reste, peuvent être saisis en russe.

Il est important de comprendre que tout cela sera perçu par les débutants et les non-professionnels comme de l’alphabétisation chinoise. Pour comprendre de quoi nous parlons et utiliser efficacement 1C, vous devez connaître les bases de la programmation. En général, vérifier le type d'une requête dans le programme 1C sera assez simple par rapport à d'autres actions.

Demande . Texte = "CHOISIR | StorageUnits.Link |DE | Directory.usStorageUnits COMMENT utiliserStorageUnits // Exemple 1 : comparaison avec une valeur booléenne vide : |OÙ | StorageUnits.AllowSelectionFromReserveZone = False // Exemple 2. mais si ce booléen est défini, alors c'est mieux comme ça : // condition pour un booléen négatif : |OÙ | PAS d'unités de stockage. Autoriser la sélection à partir de la zone de réserve // Exemple 3. sélection basée sur la condition d'un champ vide qui a le type « répertoire d'un type spécifique » |OÙ | StorageUnits.ActiveSelectionArea = VALEUR (Directory.usSelectionArea.EmptyRef) // Exemple 3a. sélection basée sur la condition d'un champ vide ayant le type « document d'un type spécifique » |OÙ | OurInformationRegister.Document = VALEUR(Document.OurDocument.EmptyLink) // Exemple 3b. sélection basée sur la condition d'un champ vide de type « documents de différents types » ( champ composite) |OÙ | (OurInformationRegister.Document = VALUE(Document.OurDocument1.EmptyLink) | OR OurInformationRegister.Document = VALUE(Document.OurDocument2.EmptyLink) | OR... (etc. - nous répertorions séquentiellement les conditions pour tous les types possibles de ce champ composite) ) // Exemple 4. ou vice versa, si vous devez sélectionner une valeur remplie de type "string", alors la condition vous aidera : |OÙ | Unité de stockage.Nom > """" // Exemple 5. si vous devez sélectionner des documents d'un type spécifique, avec un type de données composite, par exemple, dans le registre "RunningTasks", la ressource "Task" a un type composite, parmi les valeurs dont le le document "Sélection" est possible |OÙ | EXPRESS(Information RegisterExecutedTasks.Task AS Document.Selection) LINK Document.Selection // Exemple 5a. Un autre exemple similaire lorsque vous devez sélectionner des documents d'un type spécifique | CHOIX | QUAND EXPRESSER (ag Correspondance des documents. DocumentBU AS Document. Réception des biens et services) Document LIEN. Réception des biens et services | PUIS ""Réception des biens et services"" | QUAND EXPRESSER (ag Correspondance des documents. DocumentBU AS Document. Ventes de biens et services) LIEN Document. Ventes de biens et services | PUIS ""Ventes de biens et services"" | AUTRE """" | FIN COMME Vue du document // Exemple 6. sélection par condition d'une valeur non définie : |OÙ | SavedSettings.User = NON DÉFINI // Exemple 7. sélection par type de mouvement « Entrant » du registre d'accumulation, « Dépense » - de même) : |OÙ | RegProductsInRetail.MovementType = VALEUR (MovementTypeAccumulation.Incoming) // Exemple 8. Comment indiquer dans une requête qu'il n'est pas nécessaire d'exécuter la requête (par exemple, vous devez par programme, en fonction de certaines conditions, renvoyer un résultat de requête vide - Request.Text = StrReplace(Request.Text, "OÙ Doc.Link = &DocumentLink" , "OÙ EST LE MENSONGE");). Pour ce faire, ajoutez simplement la condition « Où est faux ». À propos, quel que soit le volume de données demandées dans l'échantillon, une telle demande sera exécutée instantanément. |OÙ EST LE MENSONGE // Exemple 9. Vérifier que le résultat de la requête contient des données : SinonDemande.Exécuter().Vide() Alors // Exemple 10. sélection basée sur une date vide : |OÙ | tbStrings.CancellationDate = DATETIME(1, 1, 1)

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

Dans cet article, nous analyserons les possibilités de conversion de type dans le langage de requête 1C, qui sont fournies par la fonction « Express ».
Examinons plusieurs options pour utiliser cette fonction.
Et la première option consiste à arrondir les nombres.

Pour ce faire, vous devez utiliser la fonction Express au format suivant :

Exprimer(<Число>comme numéro (<ДлинаЧисла>,<Точность>))

Où:
Nombre— le champ qui doit être arrondi
LongueurNuméros— longueur maximale du numéro
Précision— précision de l'arrondi des nombres

Les paramètres de longueur et de précision doivent être des entiers positifs.
Découvrez comment cette fonction fonctionne dans l'image ci-dessous.

Le deuxième cas d’utilisation est le casting de chaînes. Très souvent, les configurations utilisent des chaînes de longueur illimitée, ce qui impose certaines restrictions. Par exemple, nous ne pouvons pas comparer des chaînes de longueur illimitée.
Dans la requête ci-dessous, le champ FullName est de type chaîne de longueur illimitée, et cette requête ne fonctionnera pas.

Pour que cela fonctionne, il est nécessaire de convertir un champ de longueur illimitée en une chaîne d'une certaine longueur ; cela se fait à l'aide de la fonction Express au format suivant :

Exprimer(<Строка>en tant que chaîne(<ДлинаСтроки>)


Longueur de la ligne– la longueur maximale à laquelle la chaîne sera réduite.
Retravaillons la requête : dans la condition nous allons convertir une chaîne illimitée en une chaîne d'une certaine longueur. Il n’y aura alors aucune erreur.

Considérons la dernière option et, je dirais, la plus importante pour son application : lorsque l'on travaille avec des champs de type composite.
Vous trouverez ci-dessous deux requêtes qui utilisent des champs composites. Le premier est faux et le second est correct.

Ceux. Lorsque vous avez besoin d'obtenir un champ d'un type complexe, obtenez toujours la valeur de ce champ uniquement après avoir converti le type à l'aide de la fonction Express. Dans ce cas, les documents et ouvrages de référence auront le format suivant :

Exprimer(<Документ>comme document.<ИмяТаблицы>)
Exprimer(<Справочник>comme un Annuaire.< ИмяТаблицы >)
.


Nom de la table— nom de l'objet dans .

Utilisez toujours la fonction express lorsque vous travaillez avec des types composites, elle optimise considérablement la requête.

Si vous êtes encore en train de « nager » dans les constructions du langage de requête, et que même les requêtes les plus simples vous posent des difficultés, alors je vous recommande mon cours « Requêtes en 1C du débutant au pro ». Où ces questions et bien d’autres sont discutées plus en détail.

La particularité de ce cours :
Le cours est conçu pour ceux qui ne sont pas familiers avec le langage de requête en 1C ;
Le matériel pédagogique est bien présenté et facile à apprendre ;
Plusieurs dizaines de cours ;
Exemples pratiques utiles ;
Toutes les leçons sont présentées dans un langage clair et simple

Pour mes lecteurs, coupon de réduction de 25% : hrW0rl9Nnx

J'essaie de publier divers articles gratuits et didacticiels vidéo intéressants aussi souvent que possible. Par conséquent, je serai très heureux si vous soutenez mon projet en transférant n'importe quel montant :

Vous pouvez transférer n’importe quel montant directement :
Yandex.Argent - 410012882996301
Argent Web - R955262494655

Rejoignez mes groupes.

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 les programmeurs débutants : fonctions et opérateurs pour travailler avec des types (VALUE TYPE, TYPE, REFERENCE, ISNULL, EXPRESS)

Rappelons que chaque attribut (propriété, champ) d'un répertoire, d'un document ou de tout autre objet applicatif possède son propre type. Et on peut regarder ce type dans le configurateur :

Dans le langage de requête, il existe toute une classe de fonctions et d'opérateurs pour travailler avec des types de détails. Regardons-les.

Fonction TYPE DE VALEUR

Cette fonction prend un paramètre (valeur) et renvoie son type. Pour les accessoires décrits dans l'image (ci-dessus) Goût annuaire Nourriture les éléments suivants seront restitués :

Voyons maintenant les accessoires Caractéristique distinctiveà l'annuaire Villes:

Vous voyez que cet accessoire peut être de plusieurs types : Doubler, Annuaire.Goûts, Répertoire.Couleurs. Ce type de détails est appelé COMPOSITE.

Si nous essayons de renseigner la valeur d'un tel détail en mode 1C:Entreprise, le système nous demandera quel type de valeur sera saisi :

Et ce n'est qu'après notre sélection que cela nous permettra de saisir la valeur du type sélectionné.

Ainsi, les éléments de répertoire du même type ( Annuaire.Villes) pourra stocker dans le même attribut ( Caractéristique distinctive) valeurs de différents types (String, Colors ou Flavors).

Vous pouvez le constater par vous-même en cliquant sur les éléments du répertoire Villes en mode 1C : Entreprise. Vous lisez une version d'essai de la leçon, des leçons complètes sont disponibles.

Ici, la valeur de la caractéristique distinctive est un élément de répertoire Les saveurs:

Voici la ligne :

Et voici généralement un élément de l'ouvrage de référence Couleurs:

Ce sont les possibilités qu’un type de données composite nous ouvre !

Je me demande comment la fonction va se comporter VALEURS DE TYPE sur les accessoires Élément distinctif, ayant un type de données composite :

C'est déjà très intéressant. Examinons chaque ligne individuellement.

Le type de valeur du trait distinctif pour l'élément Russie est égal à NUL. C'est la première fois que nous rencontrons ce type. Les valeurs de ce type sont utilisées uniquement pour déterminer la valeur manquante lors de l'utilisation de la base de données.

C'est vrai, car l'élément Russia est un groupe et non un élément de répertoire ordinaire. Villes, donc il n'a pas de champ Caractéristique distinctive. Et le type d'une valeur manquante, comme on l'a lu ci-dessus, est toujours égal à NUL.

Le type de valeur du trait distinctif pour Perm est égal à Les saveurs. Cela est vrai, car la valeur du trait distinctif inscrite dans la base de données de la ville de Perm est un lien vers l'élément d'annuaire Les saveurs.

Pour Krasnoïarsk, le type d'attribut est égal à Couleurs, car la valeur sélectionnée dans la base de données est un lien vers un élément du répertoire Couleurs.

Pour Voronej, le type d'attribut est égal à Doubler, car la valeur saisie dans la base de données est une chaîne normale.

L’Inde est à nouveau un groupe, cela n’a donc aucune signification. Et le type de la valeur manquante, on s'en souvient, est égal à NUL.

Voici le truc. Si vous allez à l'élément répertoire Villes avec nom São Paulo, alors vous verrez que le champ Caractéristique distinctive pas du tout rempli. C'est vide. UN tous les champs vides d'un type composite ont une signification particulière INDÉFINI .

AVEC INDÉFINI nous rencontrons également pour la première fois. Signification INDÉFINI utilisé lorsqu'il est nécessaire d'utiliser une valeur vide qui n'appartient à aucun autre type. C'est exactement notre situation. Et le type de valeur INDÉFINI, comme vous l'avez probablement déjà deviné, est égal à NUL.

TYPE de fonction

Il ne prend qu'un seul paramètre - le nom du type primitif ( DOUBLER, NOMBRE, DATE, BOOLÉEN), ou le nom de la table dont vous souhaitez obtenir le type de lien.

Le résultat de cette construction sera une valeur de type Type pour le type spécifié.

Cela semble vague, n'est-ce pas ?

Regardons l'application de cette conception et tout se mettra immédiatement en place.

Supposons que nous devions sélectionner toutes les entrées du répertoire Villes, qui ont des accessoires composites Caractéristique distinctive a une valeur de type DOUBLER:

Sélectionnons maintenant tous les enregistrements qui ont des valeurs d'attribut Caractéristique distinctive sont des liens vers des éléments du répertoire Couleurs(tableau Répertoire.Couleurs):

Retraite

Comme vous vous en souvenez, certains éléments du répertoire Villes je n'ai pas d'accessoires Caractéristique distinctive. Fonction VALEURS DE TYPE pour de tels éléments, il produit NUL.

Comment sélectionner de tels éléments dans une requête ? Un opérateur logique spécial est fourni pour cela EST NULL(à ne pas confondre avec la fonction EST NUL, que nous verrons ci-dessous). Vous lisez une version d'essai de la leçon, des leçons complètes sont disponibles.

Voici un exemple de son utilisation :

Super. Mais avez-vous remarqué qu'il n'y a aucun élément de Sao Paulo, type valeur d'accessoires Caractéristique distinctive qu'il a également distribué NUL. Pourquoi est-ce arrivé ?

Mais le fait est que la situation pour les groupes (Russie, Inde, Brésil), pour lesquels remplir les détails Caractéristique distinctive impossible en principe, puisqu'ils ne l'ont pas du tout, diffère de la situation de l'élément de Sao Paulo, pour lequel le remplissage des accessoires est possible, mais il n'est tout simplement pas rempli et équivaut, on s'en souvient, à un valeur spéciale INDÉFINI.

Pour sélectionner tous les enregistrements qui possèdent les éléments requis Caractéristique distinctive présent, mais non rempli, une construction différente doit être utilisée :

Mais la comparaison avec UNDEFINED pour déterminer les attributs vides (non remplis) ne fonctionnera que pour les types composites.

À propos, l'opérateur logique IS NULL a une forme de négation qui ressemble à ceci :

Opérateur logique LIEN

Par exemple, sélectionnons dans le répertoire Villes uniquement les enregistrements qui ont la valeur d'un attribut composite Caractéristique distinctive sont un lien vers un élément de répertoire Les saveurs:

Comme vous vous en souvenez, nous pourrions résoudre le même problème en utilisant VALEURS DE TYPE Et TAPER:

Fonction EST NULL

La fonction est conçue pour remplacer une valeur NULà un sens différent.

Nous rappelons que le sens NUL renvoyé si l'attribut demandé (champ, propriété) n'existe pas.

Par exemple, les accessoires Caractéristique distinctive pour les groupes d'annuaire Villes:

Fonction EST NUL nous aidera à afficher une valeur différente si cette valeur est égale à NUL. Vous lisez une version d'essai de la leçon, des leçons complètes sont disponibles. Soit dans ce cas la ligne « Il n’existe pas un tel accessoire ! » :

Il s'avère que si le premier paramètre de la fonction EST NUL inégal NUL, puis il revient. S'il est NULL, alors le deuxième paramètre est renvoyé.

Fonction EXPRESSE

Cette fonction concerne uniquement les champs de type composite. Un excellent exemple d'un tel domaine est la propriété Caractéristique distinctive pour les éléments du répertoire Villes.

Comme nous nous en souvenons, les champs composites peuvent être de plusieurs types spécifiés dans le configurateur.

Pour le terrain Caractéristique distinctive ces types valides sont DOUBLER, Répertoire.Couleurs Et Annuaire.Goûts.

Parfois, il devient nécessaire de convertir les valeurs d'un champ composite en un type spécifique.

Listons toutes les valeurs de champ Caractéristique distinctive taper Référence.Couleurs:

En conséquence, toutes les valeurs d'éléments qui étaient de type Annuaire.Couleurs, sont restés remplis et ont été convertis au type spécifié. Toutes les valeurs d'autres types ( DOUBLER, Annuaire.Goûts) sont maintenant égaux NUL. C'est la particularité du transtypage utilisant la fonction EXPRIMER.

Vous pouvez convertir un type en type primitif ( BOOLÉEN, NOMBRE, DOUBLER, DATE) ou à un type de référence. Vous lisez une version d'essai de la leçon, des leçons complètes sont disponibles. Mais le type vers lequel la conversion est effectuée doit être inclus dans la liste des types pour ce champ composite, sinon le système générera une erreur.

Passer l'examen

Démarrer l'essai

1. Choisissez l'énoncé le plus correct

2. Les détails qui peuvent prendre des valeurs de l'un des nombreux types sont appelés

3. Pour déterminer le type de valeur d'attribut, utilisez la fonction

4. Les détails vides d'un type composite sont importants