LA CLOCHE

Il y a ceux qui ont lu cette actualité avant vous.
Abonnez-vous pour recevoir les derniers articles.
Email
Nom
Nom de famille
Comment voulez-vous lire The Bell
Pas de spam

Le type "String" se trouve dans tous les langages de programmation. Il est primitif, et dans 1C, il existe de nombreuses fonctions pour l'utiliser. Dans cet article, nous examinerons de plus près différentes façons de travailler avec des types de chaîne dans 1C 8.3 et 8.2 à l'aide d'exemples.

Ligne

Afin de convertir une variable de n'importe quel type en chaîne, il existe une fonction du même nom "String ()". Le paramètre d'entrée sera la variable elle-même, dont la représentation sous forme de chaîne doit être obtenue.

String (False) // renvoie "Non"
Chaîne (12345) // renvoie "12 345"
Chaîne (CurrentDate ()) // 21/07/2017 11:55:36 ″

Il est possible de convertir non seulement les types primitifs en une chaîne, mais également d'autres, par exemple, des éléments de livres de référence, des documents.

SocrLP, SocrL, SocrP

Les paramètres d'entrée de ces fonctions sont une variable de type chaîne. Les fonctions suppriment les caractères insignifiants (espaces, retours chariot, etc.): des côtés gauche et droit, uniquement du côté gauche, et uniquement de la droite, respectivement.

AbbrLP ("Les espaces des deux côtés seront supprimés") // "Les espaces des deux côtés seront supprimés"
Abrégé ("Les espaces des deux côtés seront supprimés") // "Les espaces à gauche seront supprimés"
Abréviation ("Les espaces des deux côtés seront supprimés") // "Les espaces à droite seront supprimés"

Leo, droite, mercredi

Ces fonctions vous permettent de couper une partie d'une chaîne. La fonction "Lion ()" retournera la partie de la chaîne de son côté gauche de la longueur spécifiée. La fonction "Right ()" est la même, mais le recadrage est effectué à droite. La fonction "Med ()" vous permet de spécifier le numéro du caractère à partir duquel la chaîne sera sélectionnée et sa longueur.

Lion ("String variable", 4) // renvoie "Stro"
Right ("String variable", 7) // renvoie "variable"
Wed ("String variable", 2, 5) // renvoie "troco"

Longueur Str

La fonction détermine le nombre de caractères contenus dans la variable chaîne.

StrLength ("Word") // le résultat de l'exécution sera le numéro 5

Trouver

La fonction permet de rechercher une partie d'une chaîne dans n'importe quelle variable chaîne. La valeur de retour sera un nombre qui indique la position du début de la chaîne trouvée. Si aucune correspondance n'est trouvée, zéro est renvoyé.

Veuillez noter que les recherches sont sensibles à la casse. Si la chaîne d'origine contient plus d'une occurrence de la sous-chaîne de recherche, la fonction renverra le début de la première occurrence.

Find ("un, deux, un, deux, trois", "deux") // la fonction renverra le nombre 6

Ligne vide

L'utilisation de cette fonction vous permet de déterminer si une chaîne est vide. Les caractères non significatifs tels que l'espace, le retour chariot et autres sont ignorés.

EmptyString ("Pupkin Vasily Ivanovich") // la fonction retournera la valeur False
EmptyString ("") // la fonction retournera True

VReg, HPreg, Treg

Ces fonctions sont très utiles pour comparer et convertir des variables de chaîne. Breg () renverra la chaîne d'origine en majuscules, HPreg () en minuscules et TRreg () la formatera de sorte que le premier caractère de chaque mot individuel soit en majuscule et tous les suivants en minuscules.

Vreg ("GENERAL DIRECTOR") // valeur de retour - "GENERAL DIRECTOR"
НReg ("GENERAL DIRECTOR") // valeur de retour - "general director"
TREG ("GENERAL DIRECTOR") // valeur de retour - "General Director"

PageReplace

Cette fonction est analogue au remplacement dans les éditeurs de texte. Il vous permet de remplacer un caractère ou un jeu de caractères par un autre dans des variables de chaîne.

StrReplace ("rouge, blanc, jaune", ",", ";") // retournera "rouge; blanc; Jaune"

StrNumberStrings

La fonction vous permet de déterminer le nombre de lignes séparées par des retours chariot dans une variable de texte.

La boucle de l'exemple ci-dessous passera par trois cercles car la fonction RowNumber retournera 3:

Pour ind \u003d 1 par StrNumberStrings ("String1" + Symbols.PS + "String2" + Symbols.PS + "String3") Boucle
<тело цикла>
Fin de cycle;

StrGetString

Cette fonction fonctionne avec le texte multiligne de la même manière que la précédente. Il vous permet d'obtenir une chaîne spécifique à partir d'une variable de texte.

StrGetString ("String1" + Symbols.PS + "String2" + Symbols.PS + "String3", 2) // retournera "String2"

StrNombre d'occurrences

La fonction compte le nombre d'occurrences d'un caractère ou d'une sous-chaîne dans la chaîne de recherche.

StringNumber of Attachments ("a; b; c; d;", \u200b\u200b";") // la fonction renverra le nombre 4

Symbole et code de symbole

Ces fonctions vous permettent d'obtenir un caractère par son code Unicode, ainsi que de déterminer ce code par le caractère lui-même.

SymbolCode ("A") // la fonction renverra le numéro 1 040
SymbolCode (1040) // la fonction retournera "A"

Tâches fréquentes lorsque vous travaillez avec des chaînes

Concaténation de chaînes

Pour concaténer plusieurs chaînes (pour effectuer la concaténation), il suffit d'utiliser l'opérateur d'addition.

"Ligne 1" + "Ligne 2" // le résultat de l'ajout de deux chaînes sera "Ligne 1 Ligne 2"

Conversion de type

Pour convertir un type en chaîne, par exemple, une référence à un élément du dictionnaire, un nombre, etc., il suffit d'utiliser la fonction "String ()". Des fonctions comme "Abbreviation ()" convertiront également les variables en une chaîne, mais immédiatement avec la troncature des caractères insignifiants.

String (1000) // renverra "1000"

Veuillez noter que lors de la conversion d'un nombre en chaîne, le programme a automatiquement ajouté un espace séparant un millier. Pour éviter cela, vous pouvez utiliser les constructions suivantes:

StrReplace (String (1000), Characters.NPP, "") // renverra "1000"

String (Format (1000, "CHG \u003d")) // renverra "1000"

Citations dans une chaîne

Très souvent, vous devrez faire face à la nécessité de spécifier des guillemets dans une variable chaîne. Il peut s'agir soit d'un texte de requête écrit dans le configurateur, soit simplement d'une variable. Pour résoudre ce problème, il vous suffit de définir deux guillemets.

Title \u003d String ("Horns and Hooves LLC" - c'est nous! ") // renvoie" Horns and Hoofs LLC - c'est nous! "

Plusieurs lignes, saut de ligne

Pour créer un texte multiligne, il suffit d'y ajouter des sauts de ligne (Symbols.PS).

MultilineText \u003d "Première ligne" + Symbols.PS + "Deuxième ligne"

Comment supprimer des espaces

Pour supprimer les espaces à droite ou à gauche, vous pouvez utiliser la fonction "Abréviation ()" (ainsi que "Abréviation ()" et "Abréviation ()"):

StringNoSpaces \u003d AbbreviatedLP ("Many letters") // la fonction retournera la valeur "Many letters"

Si, après avoir converti un nombre en chaîne, vous devez supprimer des espaces insécables, utilisez la construction suivante:

StringNoSpaces \u003d StrReplace (String (99999), Characters.NPP, "") // renverra "99999"

En outre, les programmeurs utilisent souvent la construction suivante, qui vous permet de supprimer ou de remplacer tous les espaces d'une variable de texte par un autre caractère:

StringNoSpaces \u003d StrReplace ("welcome", "", "") // renvoie "hello"

Comparer des chaînes entre elles

Les termes peuvent être comparés au signe égal habituel. La comparaison est sensible à la casse.

"Hello" \u003d "bonjour" // renvoie False
"Hello" \u003d "Hello" // retournera True
"Hello" \u003d "Goodbye" // retournera False

Les chaînes de 1C 8.3 dans le langage intégré 1C sont des valeurs de type primitif Ligne... Les valeurs de ce type contiennent une chaîne Unicode de longueur arbitraire. Les variables de type chaîne sont un ensemble de caractères entre guillemets.

Exemple 1. Créons une variable chaîne avec du texte.

StringVariable \u003d "Bonjour tout le monde!";

Fonctions pour travailler avec des chaînes dans 1c 8.3

Cette section vous fournira les principales fonctions qui vous permettront de changer les lignes dans 1c, ou d'analyser les informations qu'elles contiennent.

Longueur Str

StrLength (<Строка>) ... Renvoie le nombre de caractères contenus dans la chaîne passée dans le paramètre.

Exemple 2. Comptons le nombre de caractères dans la chaîne "Hello world!"

String \u003d "Bonjour tout le monde!"; Nombre de caractères \u003d StrLength (chaîne); Rapport (nombre de caractères);

Le résultat de l'exécution de ce code sera d'afficher le nombre de caractères dans la chaîne: 11.

Abréviation

AbbrL (<Строка>) ... Tronque les caractères non significatifs à gauche du premier caractère significatif de la chaîne.
Caractères insignifiants:

  • espace;
  • espace non-cassant;
  • tabulation;
  • retour chariot;
  • traduction de ligne;
  • traduction du formulaire (page).

Exemple 3. Supprimez tous les espaces du côté gauche de la ligne "monde!" et attachez-y la ligne "Bonjour".

String \u003d abrégé ("paix!"); String \u003d "Bonjour" + String; Rapport (chaîne);

Le résultat de l'exécution de ce code sera la sortie de la ligne "Hello world!"

Abréviation

Abréviation (<Строка>) ... Tronque les caractères non significatifs à droite du premier caractère significatif de la chaîne.

Exemple 4. Formulaire "Hello" et "World!" l'expression "Bonjour tout le monde!"

String \u003d abrégé ("Bonjour") + "" + abrégé ("monde!"); Rapport (chaîne);

SokrLP

SocrLP (<Строка>) ... Tronque les caractères non significatifs à droite du premier caractère significatif de la chaîne et coupe également les caractères non significatifs à gauche du premier caractère significatif de la chaîne. Cette fonction est utilisée plus souvent que les deux précédentes, car elle est plus polyvalente.

Exemple 5. Supprimez les caractères non significatifs à gauche et à droite du nom de la contrepartie.

Contrepartie \u003d Annuaires.Contractors.NaytiPoRequisite ("INN", "0777121211"); CounterpartyObject \u003d Counterparty.GetObject (); CounterpartyObject.Name \u003d AbréviationLP (CounterpartyObject.Name); CounterpartyObject.Write ();

un lion

Un lion(<Строка>, <ЧислоСимволов>) ... Obtient les premiers caractères d'une chaîne, le nombre de caractères est spécifié dans le paramètre Nombre de caractères.

Exemple 6. Laisser la structure Employé contiennent le nom, le prénom et le patronyme de l'employé. Obtenez une chaîne avec le nom et les initiales.

InitialName \u003d Leo (Employee.Name, 1); Initiale patronymique \u003d Leo (employé, patronymique, 1); FullName \u003d Employee.Lastname + "" + InitialName + "." + Initiale patronymique + ".";

Droite

Droite (<Строка>, <ЧислоСимволов>) ... Obtient les derniers caractères d'une chaîne, le nombre de caractères est spécifié dans le paramètre Nombre de caractères. Si le nombre de caractères spécifié dépasse la longueur de la chaîne, la chaîne entière est renvoyée.

Exemple 7. Supposons que la fin d'une variable chaîne contienne une date au format "aaaammjj", récupérez une chaîne avec une date et convertissez-la en type Date.

String \u003d "Date actuelle: 20170910"; StringDate \u003d Droite (chaîne, 8); Date \u003d Date (StringDate);

Mercredi

Mercredi (<Строка>, <НачальныйНомер>, <ЧислоСимволов>) ... Obtient une sous-chaîne d'une chaîne passée en paramètre Ligne, à partir du caractère dont le numéro est spécifié dans le paramètre StartNumber et la longueur passée au paramètre Nombre de caractères.La numérotation des caractères dans la ligne commence à 1. Si le paramètre StartNumber une valeur est spécifiée inférieure ou égale à zéro, alors le paramètre prend la valeur 1. Si le paramètre Nombre de symboles n'est pas spécifié, les caractères jusqu'à la fin de la ligne sont sélectionnés.

Exemple 8. Laissez la variable de chaîne commençant à la neuvième position contenir le code de région, vous devriez l'obtenir et l'écrire sur une ligne séparée.

Line \u003d "Région: 99 Moscou"; Région \u003d Mer (ligne, 9, 2);

Chercher

Chercher (<Строка>, <ПодстрокаПоиска>, <НаправлениеПоиска>, <НачальнаяПозиция>, <НомерВхождения>) ... Recherche la sous-chaîne spécifiée dans la chaîne, retourne le numéro de position du premier caractère de la sous-chaîne trouvée. Considérez les paramètres de cette fonction:

  • Ligne... Chaîne source;
  • Recherche de sous-chaîne... Recherche de sous-chaîne;
  • Direction de la recherche... Spécifie la direction dans laquelle rechercher une sous-chaîne dans une chaîne. Peut prendre des valeurs:
    • Direction de la recherche.Depuis le début;
    • Direction de la recherche.;
  • Position initiale... Spécifie la position dans la chaîne à partir de laquelle la recherche commence;
  • Nombre d'entrées... Spécifie le nombre d'occurrences de la sous-chaîne souhaitée dans la chaîne d'origine.

Exemple 9. Dans la ligne "Hello world!" déterminer la position de la dernière occurrence du symbole "et".

PositionNumber \u003d StrNayti ("Bonjour tout le monde!", "Et", DirectionSearch.End); Rapport (numéro de poste);

Le résultat de cette exécution de code sera l'affichage du numéro de la dernière occurrence du symbole "et": 9.

Vreg

BReg (<Строка>) ... Convertit tous les caractères de la chaîne spécifiée en 1s 8 en majuscules.

Exemple 10. Convertissez la chaîne "hello world!" en majuscules.

StringBreg \u003d BReg ("bonjour le monde!"); Rapport (StringVreg);

Le résultat de cette exécution de code sera l'affichage de la ligne "HELLO WORLD!"

Nreg

HReg (<Строка>) ... Convertit tous les caractères de la chaîne spécifiée en 1s 8 en minuscules.

Exemple 11. Convertissez la chaîne "HELLO WORLD!" en minuscules.

StringNreg \u003d НReg ("HELLO WORLD!"); Rapport (StringVreg);

Le résultat de l'exécution de ce code sera la sortie de la ligne "hello world!"

Treg

Treg (<Строка>) ... Convertit une chaîne comme suit: le premier caractère de chaque mot est converti en majuscules, les caractères restants du mot sont convertis en minuscules.

Exemple 12. Mettez en majuscule les premières lettres des mots de la ligne "bonjour le monde!"

StringTreg \u003d Treg ("bonjour le monde!"); Rapport (StringTreg);

Le résultat de l'exécution de ce code sera l'affichage de la ligne "Hello World!"

symbole

Symbole(<КодСимвола>) ... Obtient un caractère par son code Unicod.

Exemple 13. Ajouter gauche et droite à la ligne "Hello World!" symbole ★

StringWithStars \u003d Symbole ("9733") + "Bonjour le monde!" + Symbole ("9733"); Rapport (StringWithStars);

Le résultat de l'exécution de ce code sera la sortie de la ligne "★ Hello World! ★"

SymbolCode

SymbolCode (<Строка>, <НомерСимвола>) ... Obtient le code de caractère Unicode à partir de la chaîne spécifiée dans le premier paramètre, situé à la position spécifiée dans le deuxième paramètre.

Exemple 14. Découvrez le code du dernier caractère dans le "Hello World!"

String \u003d "Bonjour le monde!"; CharacterCode \u003d CharacterCode (String, StrLength (String)); Rapport (SymbolCode);

Le résultat de l'exécution de ce code sera l'affichage du code symbole "!" - 33.

Ligne vide

Ligne vide (<Строка>) ... Vérifie si une chaîne ne contient que des caractères insignifiants, c'est-à-dire si elle est vide.

Exemple 15. Vérifiez si une chaîne composée de trois espaces est vide.

Empty \u003d EmptyString (""); Rapport (vide);

Le résultat de l'exécution de ce code sera l'affichage du mot "Oui" (expression chaîne de la valeur logique Vrai).

PageReplace

PReplace (<Строка>, <ПодстрокаПоиска>, <ПодстрокаЗамены>) ... Recherche toutes les occurrences de la sous-chaîne de recherche dans la chaîne d'origine et la remplace par la sous-chaîne de remplacement.

Exemple 16. Dans la ligne "Hello World!" remplacer le mot «paix» par le mot «amis».

String \u003d StrReplace ("Bonjour le monde!", "Monde", "Amis"); Rapport (chaîne);

Le résultat de l'exécution de ce code sera l'affichage de la ligne "Hello Friends!"

StrNumberStrings

RowNumber (<Строка>) ... Compte le nombre de lignes dans une chaîne multiligne. Pour passer à une nouvelle ligne en 1s 8, utilisez le caractère PS (caractère de saut de ligne).

Exemple 17. Déterminez le nombre de lignes dans le texte:
"Première ligne
Deuxième ligne
Troisième ligne "

Number \u003d StrNumberStrings ("Première ligne" + Symbols.PS + "Deuxième ligne" + Symbols.PS + "Troisième ligne"); Signaler le numéro);

Le résultat de l'exécution de ce code sera d'afficher le nombre de lignes dans le texte: 3

StrGetString

StrGetString (<Строка>, <НомерСтроки>) ... Obtient une chaîne dans une chaîne multiligne par son numéro. La numérotation des lignes commence à 1.

Exemple 18. Récupérez la dernière ligne du texte:
"Première ligne
Deuxième ligne
Troisième ligne "

Texte \u003d "Première ligne" + Symbols.PS + "Deuxième ligne" + Symbols.PS + "Troisième ligne"; LastString \u003d StrGetString (Texte, StrNumberLines (Texte)); Rapport (LastLine);

Le résultat de l'exécution de ce code sera l'affichage de la ligne "Troisième ligne".

StrNombre d'occurrences

StrNombre d'occurrences (<Строка>, <ПодстрокаПоиска>) ... Renvoie le nombre d'occurrences de la sous-chaîne spécifiée dans une chaîne. La fonction est sensible à la casse.

Exemple 19. Déterminez combien de fois la lettre "c" apparaît dans la chaîne "Lignes en 1s 8.3 et 8.2", quelle que soit sa casse.

Line \u003d "Lignes en 1s 8.3 et 8.2"; Number of Occurrences \u003d StrNumber of Occurrences (Vreg (String), "S"); Rapport (nombre d'occurrences);

Le résultat de l'exécution de ce code sera l'affichage du nombre d'occurrences: 2.

La page commence par

La page commence par (<Строка>, <СтрокаПоиска>) ... Vérifie si la chaîne passée dans le premier paramètre commence par la chaîne du deuxième paramètre.

Exemple 20. Déterminez si l'INN de la contrepartie sélectionnée commence par le nombre 1. Insérez la variable Contrepartie Entrepreneurs.

TIN \u003d Contrepartie.INN; Commence parUnits \u003d StrCommence par (INN, "1"); If BeginsUnits Then // Votre code EndIf;

PageFin avec

PageFin avec (<Строка>, <СтрокаПоиска>) ... Vérifie si la chaîne passée dans le premier paramètre se termine par la chaîne du deuxième paramètre.

Exemple 21. Déterminez si le TIN de la contrepartie sélectionnée se termine par le chiffre 2. Insérez la variable Contrepartieun lien vers un élément du répertoire est stocké Entrepreneurs.

TIN \u003d Contrepartie.INN; Se termine par deux \u003d Str Se termine par (INN, "2"); If Ends WithTwo Then // Votre code EndIf;

PageSplit

StrSplit (<Строка>, <Разделитель>, <ВключатьПустые>) ... Divise une chaîne en parties à l'aide des caractères de délimitation spécifiés et écrit les chaînes résultantes dans un tableau. Le premier paramètre stocke la chaîne d'origine, le second contient la chaîne contenant le séparateur, le troisième spécifie s'il faut écrire des chaînes vides dans le tableau (par défaut Vrai).

Exemple 22. Supposons que nous ayons une chaîne contenant des nombres séparés par ";", obtenons un tableau de nombres à partir de la chaîne.

Chaîne \u003d "1; 2; 3"; Array \u003d StrSplit (Chaîne, ";"); For Rd \u003d 0 By Array.Quantity () - 1 Cycle Tentative Array [Rd] \u003d Number (AbbrLP (Array [Rd])); Tableau d'exception [Сч] \u003d 0; Fin des tentatives Fin de la boucle;

À la suite de l'exécution, un tableau avec des nombres de 1 à 3 sera obtenu.

StrConnect

StrConnect (<Строки>, <Разделитель>) ... Convertit un tableau de chaînes du premier paramètre en une chaîne contenant tous les éléments du tableau, séparés par le délimiteur spécifié dans le deuxième paramètre.

Exemple 23. En utilisant le tableau de nombres de l'exemple précédent, récupérez la chaîne d'origine.

Pour Ref \u003d 0 Par Array.Number () - 1 Cycle Array [Ref] \u003d String (Array [Ref]); Fin de cycle; String \u003d StrConnect (Array, ";");

FAQ ou plateforme 8 pour les nuls.

A en juger par les forums dédiés au sujet 1C, les programmeurs qui ont rencontré pour la première fois la plate-forme 1C v 8 ou migrant depuis la version 7.7 se posent souvent les mêmes questions. Ici, j'ai décidé de collecter les plus courants, à mon avis ...

DANS: Comment supprimer un espace dans le nombre 12,600.00?
À PROPOS: Il est important de comprendre que ce n'est pas un caractère d'espace qui est utilisé ici, mais le soi-disant «espace insécable», donc, par exemple, une telle construction:

StrReplace (VariableNumber, "", "");

ne fonctionnera pas. Il existe deux options pour résoudre le problème, soit spécifier Symbols.NPP au lieu d'un espace pour le remplacement, soit utiliser la fonction Format ().

StrReplace (VariableNumber, Symbols.NPP, ""); // 1ère option
Format (VariableNumber, "CH \u003d"); // 2ème option

DANS: Comment définir une condition dans une requête pour que seuls certains types de documents soient inclus dans la sélection résultante?
À PROPOS: Cela peut être fait à l'aide de l'opérateur de langage de requête REFERENCE, qui vous permet de vérifier si la valeur de l'expression spécifiée à sa gauche est une référence à la table spécifiée à droite. Prenons un exemple, sélectionnez dans le registre d'accumulation ServiceServices uniquement les enregistrements pour lesquels le registraire est le document d'implémentation GoodsServices:

Demande \u003d Nouvelle demande ("
| CHOISISSEZ
| Mise en œuvre des services. Greffier,
| Mise en œuvre du service.
| DE
| Registre d'accumulation.Réalisation des services AS Mise en œuvre des services
| O
| Registrar LINK Document.RealizatsiyaTovarovSlug ");

DANS: Comment transférer certains documents / répertoires entre des configurations identiques?
À PROPOS: Cela peut être fait en utilisant le traitement générique de XMLUploadDataXML.epf fourni sur les disques ITS.

DANS: Comment transférer des données entre différentes configurations (ou de 7.7 à 8)?
À PROPOS: La meilleure option, à mon avis, est d'utiliser la configuration typique "Data Conversion", qui est fournie sur les disques ITS, il existe également plusieurs articles décrivant l'utilisation de cette configuration.

DANS: Comment ajouter une certaine chaîne à un champ de type non-chaîne dans une requête, par exemple SELECT Implementation of GoodsServices.Sum + "rub".
À PROPOS: En aucune façon. La conversion de type n'est pas possible dans une requête. Certaines personnes sont déroutées par la construction du langage de requête EXPRESS, mais elle ne convertit que la valeur d'un type composite en l'un des types constituant cette valeur et ne convertit en aucun cas le type, elle n'est donc pas applicable dans cette situation.

DANS: Comment définir une condition dans une requête pour un champ avec le type de chaîne de longueur illimitée, par exemple, sélectionner tous les documents avec un commentaire spécifique?
À PROPOS: Pour ce faire, vous devez limiter la longueur du champ à l'aide de l'opérateur de langage de requête EXPRESS. Par exemple:

Demande \u003d Nouvelle demande ("
| CHOISISSEZ
| Implémentation de GoodsServices.Link
| DE
| Document.Réalisation de GoodsServices COMME Implémentation de GoodsServices
| O
| EXPRESS (Implémentation de GoodsServices.Comment AS LINE (100)) \u003d & Comment ");

DANS: Existe-t-il un analogue de la fonction 7.7 CatalogIB () dans la version 8?
À PROPOS: Non, car une telle fonction n'aurait pas de sens pour un mode de fonctionnement client-serveur. Néanmoins, pour le mode de fonctionnement fichier, vous pouvez obtenir le répertoire infobase en utilisant la construction suivante:

CatalogIB \u003d НStr (InformationBaseConnection String (), "File");

DANS: Comment déconnecter un nœud d'une infobase distribuée?
À PROPOS: Avec la construction suivante:

Plans d'échange.SetMasterNode (non défini);

Ou exécutez le configurateur avec le paramètre de ligne de commande / ResetMasterNode (non utilisé pour les versions de base).

DANS: Comment obtenir le nom du document (analogue à la méthode 7.7 View ())?
À PROPOS: Utilisation des métadonnées. Par exemple:

DANS: Comment sélectionner des documents de tous types en une seule demande?
À PROPOS: Utilisation de métadonnées et possibilité de combiner des requêtes DANS:

Request \u003d Nouvelle demande;
Texte \u003d "";
Pour chaque document de la boucle Metadata.Docs
Texte \u003d Texte + "SÉLECTIONNER le lien à partir du document." + Document.Name + "COMBINER";
Fin de cycle;
Query.Text \u003d Leo (Texte, StrLength (Texte) -StrLength ("COMBINE"));
Selection \u003d Query.Run (). Select ();

DANS: Comment interrompre l'exécution d'un rapport / traitement?
À PROPOS: En utilisant OperatorUserInterruptsUser (), il est recommandé de l'utiliser à l'intérieur de boucles. Lorsque l'utilisateur appuie sur la combinaison de touches Ctrl + Pause, l'exécution est interrompue et un message correspondant s'affiche. Par exemple:

Pendant l'échantillonnage.Next () Loop
HandleUserInterrupt ();

Fin de cycle;

DANS: Le formulaire a un TabularField avec le type ValueTree et le jeu de propriétés Tree. Pourquoi l'arbre des valeurs n'est-il pas affiché?
À PROPOS: En outre, il est nécessaire de définir la propriété DisplayHierarchy pour l'une des colonnes.

DANS: Comment utiliser les tâches planifiées dans le mode fichier de l'opération infobase?
À PROPOS: Contrairement au mode client-serveur, en mode fichier, le développeur est responsable de la mise en œuvre du démarrage automatique des tâches planifiées. Pour implémenter le démarrage automatique des tâches, vous avez besoin d'un gestionnaire d'attente qui vérifie périodiquement les tâches «expirées» et les démarre. Il est fortement recommandé d'utiliser une session séparée pour cela. Exemple:

Procédure de vérification des travaux ()
RunProcessingJobs ();
Fin de la procédure
ConnectWaitingHandler ("Vérificateur de travaux", 3);

DANS: Comment obtenir un tableau à partir d'une chaîne délimitée?
À PROPOS: A titre d'exemple, je vais donner ma version d'une fonction qui fonctionne "dans les deux sens", c'est à dire lors du passage d'une chaîne avec des délimiteurs, il forme un tableau, et lors du passage d'un tableau, il forme une chaîne avec des délimiteurs.

Fonction StringArray (Value Value, Separator)
Si TypeVal (Value) \u003d Type ("String") Alors
MnStr \u003d StrReplace (valeur, séparateur, symboles.PS);
Array \u003d nouveau tableau;
Pour n \u003d 1 Par ligne Nombre de lignes (MnStr) Cycle
Array.Add (StrGetString (MnStr, n));
Fin de cycle;
Return Array;
ElseIfTypeZnch (Value) \u003d Type ("Array") Then
String \u003d "";
Pour chaque élément du cycle de valeur
String \u003d String +? (String "", Separator, "") + Element;
Fin de cycle;
Return String;
Autrement
Remboursement non défini;
Fin si;
FinFonction

DANS: Comment activer la possibilité d'apporter des modifications dans le configurateur dans une configuration typique?
À PROPOS: Étant donné que les configurations typiques sont prises en charge (ce qui permet les mises à jour automatiques), par défaut, la possibilité d'apporter des modifications à la configuration est désactivée. Pour activer cette fonction, sélectionnez l'élément de menu "Configuration\u003e Assistance\u003e Paramètres de support" dans le configurateur et cliquez sur le bouton "Activer l'option de changement" dans la fenêtre qui s'ouvre.

DANS: Comment définir un mot de passe pour le traitement / la configuration?
À PROPOS: Dans 1C v 8, les mots de passe ne peuvent être définis que sur les modules objet. Pour définir un mot de passe, ouvrez le module objet et sélectionnez l'élément de menu "Texte\u003e Définir le mot de passe". Il est également possible de livrer la configuration sans les textes source des modules objet (configurable dans "Configuration\u003e Configuration de la livraison\u003e Paramètres de livraison"). Je tiens à noter qu'à l'heure actuelle, aucune de ces méthodes n'est une protection fiable contre la visualisation du texte source du module.

DANS: Pourquoi la recherche de document à l'aide de FindByNumber (<Номер документа>)?
À PROPOS: Il convient de rappeler que si une numérotation périodique est spécifiée pour ce type de documents dans le configurateur, en plus du numéro de document, il est nécessaire d'indiquer la date de l'intervalle comme deuxième paramètre. Dans le cas contraire, la recherche d'un document avec une date vide sera effectuée, ce qui ne conduira évidemment pas au résultat souhaité.

DANS: Dans 1C 8.1, si nécessaire, se connecter à une application déjà en cours d'exécution pour le débogage (Configurateur\u003e Débogage\u003e Connexion) dans les éléments de débogage disponibles est vide. Quelle est la raison?
À PROPOS: Le fait est que pour l'application que nous allons déboguer, vous devez activer explicitement le débogage. Menu Outils\u003e Options\u003e onglet Système\u003e Indicateur "Débogage activé".

DANS: Comment parcourir les lignes d'une liste dynamique (par exemple, ReferenceList ou DocumentList)?
À PROPOS: Cela peut être fait à l'aide du Générateur de rapports, par exemple:

Builder \u003d Nouveau générateur de rapports;
Builder.DataSource \u003d NewDataSourceDescription (Liste de documents);
Selection \u003d Builder.Result.Select ();
Pendant l'échantillonnage.Next () Loop
Rapport (Sample.Link);
Fin de cycle;

Remarque: la sélection comprendra des lignes conformément à la sélection actuellement définie.

DANS: Comment puis-je vérifier les valeurs de propriété des objets de métadonnées? Par exemple, le type de hiérarchie de répertoires ou le mode d'enregistrement du registre, ou la fréquence du numéro de document?
À PROPOS: Toutes ces propriétés sont des propriétés énumérées d'objets de métadonnées. Vous pouvez également obtenir des valeurs de ce type via des métadonnées. Exemples:

// Exemple 1. Vue de la hiérarchie des répertoires
If Metadata.References [DirectoryName] .HierarchyType \u003d Metadata.ObjectProperties.Hierarchy View.GroupsHelement Hierarchy Then ...
// Exemple 2: mode d'enregistrement en écriture
Si Metadata.RegisterRecords [RegisterName] .RegisterRecordMode \u003d Metadata.ObjectProperties.RegisterWriterMode.Register Soumission Alors ...
// Exemple 3. Fréquence du numéro de document
If Metadata.Documents [DocumentName] .Number Frequency \u003d Metadata.Object Properties.DocumentNumber Frequency.Non-Period Then ...

DANS: Comment implémenter une case à cocher à trois états dans une arborescence de valeurs?
À PROPOS: Considérons l'énoncé du problème plus en détail. Le formulaire a un champ de table, dont la source de données est un arbre de valeurs. Une des colonnes contient le champ "Case à cocher". Il faut qu'il puisse accepter trois états "Enabled", "Disabled" et "Undefined". Dans ce cas, l'état "Indéfini" ou le soi-disant "drapeau gris", c'est-à-dire partiellement sélectionné, est défini si toutes les lignes subordonnées n'ont pas le même état de case à cocher. De plus, si une ligne a des lignes subordonnées, alors lorsque son indicateur est changé, les indicateurs de toutes les lignes subordonnées doivent également changer en conséquence.
Tout d'abord, ajoutons notre colonne de cases à cocher à l'arbre des valeurs:

Tree.Columns.Add ("Mark", Nouvelle description des types ("Number"));
ElementsForm.Tree.CreateColumns ();
Tree Columns \u003d Eléments de formulaire.Tree.Columns;
ColumnsTree.Plate.DataFlag \u003d "Remarque";
ColumnsTree.Label.SetUpdateElement (Type ("Case à cocher"));
ColumnsTree.Note.EditMode \u003d EditModeColumns.Means
enno;
Tree Columns.Check.ThreeStatesCheckbox \u003d Vrai;

Deuxièmement, lorsque vous modifiez une case à cocher, vous devez définir les valeurs appropriées dans les lignes subordonnées et contrôler la valeur de la case à cocher dans la "ligne parente":

Procédure TreeOnChangeCheck (élément, colonne)
CurrentLine \u003d Element.CurrentLine;
Si CurrentLine.Remark \u003d 2 alors
CurrentString.Label \u003d 0;
Fin si;
CheckboxSetting (CurrentLine, CurrentLine.Remark);
Tandis que CurrentLine.ParentUndefined Loop
CurrentString.Parent.Label \u003d? (SetForAll (CurrentLine), CurrentLine.Premark, 2);
CurrentLine \u003d CurrentLine.Parent;
Fin de cycle;
Fin de la procédure

Voici la procédure Checkboxes () définit de manière récursive des indicateurs sur les lignes subordonnées:

Procédure de case à cocher (CurrentLine, Value)
Pour chaque ligne à partir de la ligne actuelle. Lignes en boucle
Remarque de la page \u003d valeur;
Définition des cases à cocher (page, marque de page);
Fin de cycle;
Fin de la procédure

Et la fonction SetForAll () vérifie si la même valeur est définie pour toutes les lignes au niveau actuel:

Fonction SetFor All (chaîne)
Pour chaque ligne de la boucle String.Parent.Rows
Si Page Remarque Ligne Remarque Alors
Renvoie False;
Fin si;
Fin de cycle;
Return True;
FinFonction

DANS: Comment implémenter le tri sous forme de liste par ses propres attributs?
À PROPOS: Si l'attribut est de type primitif, il suffit alors de définir la valeur de "Index" ou "Index avec add." Pour la propriété d'attribut "Index". par ordre »(non disponible pour les attributs de type ValueStorage). Si l'attribut est de type référence, alors il est nécessaire de lui permettre explicitement d'être trié. Par exemple:

ElementUP \u003d ElementsForms.DirectoryList.Porder.Find ("Attribute1");
Si l'élément UP n'est pas défini, alors
ElementUP.Availability \u003d True;
Fin si;

Il arrive souvent que lors du chargement et du déchargement des données de 1C 8.2 et 8.3, il y ait des lacunes dans les nombres qui interfèrent avec le traitement normal des données. La solution à ce problème est très simple.

Considérons quels sont les types d'espaces.

Les espaces peuvent être de deux types:

  • espace non-cassant;
  • Espace "régulier".

Suppression des espaces insécables

StringPresentation \u003d String (nombre); // le système écrira "10 000" dans la variable

Il est très facile de supprimer de tels espaces dans 1C en utilisant la fonction de format de nombre:

Number \u003d Format (10000, "ChG \u003d");

StringPresentation \u003d String (nombre); // le système écrira "10000" dans la variable

Nous avons défini le regroupement dans la chaîne de format sur Vide (vous pouvez également écrire "0").

Si le type de données est déjà "chaîne", la méthode suivante peut être utilisée:

StringPresentation \u003d StrReplace (String (StringPresentation), Chars.NPP, ""); // la variable StringView était "10 000", maintenant "10000"

Autrement dit, nous venons de remplacer l'espace insécable (Characters.NPP) dans la chaîne par une valeur vide.

Espaces réguliers

Supprimer l'espace habituel d'une ligne est facile. Il suffit d'exécuter la fonction suivante:

StringRepresentation \u003d StrReplace (String (StringRepresentation), "", ""); // "10 000" devient "10000"

Un exemple est similaire à la méthode précédente. Cependant, au lieu de Symbols.NPP, nous utilisons une chaîne à espace unique.

Si vous commencez à apprendre la programmation 1C, nous vous recommandons notre cours gratuit (n'oubliez pas abonnez-vous à youtube - de nouvelles vidéos sont publiées régulièrement).

LA CLOCHE

Il y a ceux qui ont lu cette actualité avant vous.
Abonnez-vous pour recevoir les derniers articles.
Email
Nom
Nom de famille
Comment voulez-vous lire The Bell
Pas de spam