1c supprime les espaces supplémentaires dans la ligne. Comment supprimer des espaces

FAQ ou plateforme 8 pour les nuls.

À en juger par les forums dédiés aux sujets 1C, les programmeurs qui ont rencontré pour la première fois la plateforme 1C v 8 ou qui passent de la version 7.7 se posent souvent les mêmes questions. Ici, j'ai décidé de rassembler les plus courants, à mon avis...

DANS: Comment supprimer l'espace dans le nombre 12 600,00 ?
À PROPOS DE: Il est important de comprendre que ce n'est pas le caractère espace qui est utilisé ici, mais ce qu'on appelle « l'espace insécable », comme par exemple cette construction :

StrReplace(NuméroVariable," ","");

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

StrReplace(VariableNumber,Characters.NPP,""); // 1ère option
Format(NuméroVariable,"HG="); // 2ème option

DANS: Comment définir une condition dans une requête pour que seuls les documents d'un certain type soient inclus dans la sélection résultante ?
À PROPOS DE: Cela peut être fait à l'aide de l'opérateur de langage de requête REF, qui vous permet de vérifier si la valeur de l'expression spécifiée à gauche est une référence à la table spécifiée à droite. Regardons un exemple, sélectionnez dans le registre d'accumulation Ventes de services uniquement les enregistrements pour lesquels le registraire est le document Ventes de biens et services :

Requête=Nouvelle requête("
|SÉLECTIONNER
| Mise en œuvre des services.
| Ventes de services.
|DE
| Registre des accumulations. Mise en œuvre des services COMMENT Mise en œuvre des services.
|OÙ
| Document LIEN du registraire. Ventes de biens et services");

DANS: Comment transférer certains documents/ouvrages de référence entre configurations identiques ?
À PROPOS DE: Cela peut être fait à l'aide du traitement standard UploadLoadDataXML.epf, fourni sur les disques ITS.

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

DANS: Comment ajouter une chaîne spécifique à un champ de type non-chaîne dans une requête, par exemple, SELECT Sales of Goods and Services Amount + " rub. " ?
À PROPOS DE: Certainement pas. La conversion de type n'est pas possible dans une requête. Certaines personnes sont confuses par la construction du langage de requête EXPRESS, mais il ne renvoie que la valeur type compositeà l'un des types qui composent cette valeur et ne convertit en aucun cas le type, il n'est donc pas applicable dans cette situation.

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

Requête=Nouvelle requête("
|SÉLECTIONNER
| Lien vers les ventes de biens et de services.
|DE
| Document. Ventes de biens et services COMMENT vendre des biens et services
|OÙ
| EXPRESS(SalesProductsServices.Comment AS ROW(100)) = &Comment");

DANS: Existe-t-il un analogue de la fonction 7.7 CatalogIB() dans la version 8 ?
À PROPOS DE: Non, car une telle fonction n’aurait aucun sens pour un mode de fonctionnement client-serveur. Cependant, pour le mode de fonctionnement fichier, il est possible d'obtenir un répertoire base d'informations en utilisant la construction suivante :

CatalogIB=NStr(InformationBaseConnectionString(),"Fichier");

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

ExchangePlans.SetMainNode(non défini);

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

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

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

Demande=Nouvelle demande ;
Texte="";
Pour chaque document du cycle Metadata.Documents
Text=Texte+"SELECT Link FROM Document."+Document.Name+"MERGE";
Fin du cycle ;
Query.Text=Left(Text,StrLength(Text)-StrLength(" COMBINE "));
Select=Query.Run().Select();

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

Boucle While Select.Next()
UserInterruptHandling();

Fin du cycle ;

DANS: Le formulaire a un TableField avec le type ValueTree et la propriété Tree définie. Pourquoi l'arbre des valeurs ne s'affiche-t-il pas ?
À PROPOS DE: De plus, vous devez définir la propriété Afficher la hiérarchie pour l'une des colonnes.

DANS: Comment utiliser les tâches de routine dans mode fichier travail de la base d'information ?
À PROPOS DE: Contrairement au client-serveur, en mode fichier, la responsabilité de la mise en œuvre démarrage automatique tâches courantes incombe au développeur. 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 « en retard » et les démarre. Il est fortement recommandé d'utiliser une session distincte pour cela. Exemple:

Procédure CheckTasks()
ExécuterTaskProcessing();
Fin de la procédure
ConnectWaitingHandler("Vérification des tâches",3);

DANS: Comment obtenir un tableau à partir d’une chaîne délimitée ?
À PROPOS DE: 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 délimitée, il forme un tableau, et lors du passage d'un tableau, il en forme une chaîne délimitée.

Fonction StringArray (Valeur Valeur, Séparateur)
Si TypeValue(Value)=Type("String") Alors
MnStr = StrReplace (Valeur, Séparateur, Caractères.PS);
Tableau=Nouveau tableau ;
Pour n = 1 par cycle StrNumber Of Rows (MnStr)
Array.Add(StrGetString(MnStr,n));
Fin du cycle ;
Tableau de retour ;
ElseIfTypeValue(Value)=Type("Array") Alors
Ligne="";
Pour chaque élément du cycle de valeur
String=Chaîne+?(Chaîne"",Séparateur,"")+Élément;
Fin du cycle ;
renvoie une chaîne ;
Sinon
Retourner non défini ;
fin si;
FinFonction

DANS: Comment activer la possibilité d'effectuer des modifications dans le configurateur dans une configuration standard ?
À PROPOS DE: Puisque les configurations standards sont prises en charge (ce qui permet mode automatique mise à jour), alors par défaut, la possibilité d'apporter des modifications à la configuration est désactivée. Pour activer cette fonctionnalité, vous devez sélectionner l'élément de menu « Configuration > Support > Paramètres de support » dans le configurateur et dans la fenêtre qui s'ouvre, cliquer sur le bouton « Activer la possibilité de modifier ».

DANS: Comment définir un mot de passe de traitement/configuration ?
À PROPOS DE: Dans 1C v 8, les mots de passe ne peuvent être définis que pour les modules objets. Pour définir un mot de passe, vous devez ouvrir le module objet et sélectionner l'élément de menu « Texte > Définir le mot de passe ». Il est également possible de fournir une configuration sans le code source des modules objets (configuré dans « Configuration > Livraison de configuration > Paramètres de livraison »). Je voudrais souligner que sur ce moment, aucune de ces méthodes n'est protection fiable de visualiser le code source du module.

DANS: Pourquoi la recherche d'un document à l'aide de la méthode FindByNumber (<Номер документа>)?
À PROPOS DE: Rappelons que si une numérotation périodique est paramétrée pour ce type de document dans le configurateur, en plus du numéro du document, vous devez préciser la date d'intervalle comme deuxième paramètre. Dans le cas contraire, une recherche sera effectuée sur un document avec une date vide, ce qui ne conduira évidemment pas au résultat souhaité.

DANS: Dans 1C 8.1, si nécessaire, connectez-vous à un déjà application en cours d'exécution pour le débogage (Configurateur > Débogage > Connexion), les éléments de débogage disponibles sont vides. Quelle est la raison?
À PROPOS DE: Le fait est que pour l’application que nous allons déboguer, nous devons autoriser explicitement le débogage. Menu Outils > Options > onglet Système > indicateur « Débogage activé ».

DANS: Comment organiser une itération sur des chaînes liste dynamique(par exemple, DirectoryList ou DocumentList) ?
À PROPOS DE: Cela peut être fait à l'aide de Report Builder, par exemple :

Constructeur=NouveauReportBuilder ;
Builder.DataSource=NewDataSourceDescription(DocumentList);
Selection=Builder.Result.Select();
Boucle While Select.Next()
Rapport (Sélection.Link);
Fin du cycle ;

Remarque : la sélection comprendra des lignes conformément à la sélection actuellement sélectionnée.

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

// Exemple 1. Type de Hiérarchie de l'annuaire
Si Metadata.Directories [Nom du répertoire]. Vue hiérarchique = Metadata.Object Properties.Hierarchy View. Hiérarchie des groupes et des éléments Alors...
// Exemple 2. Mode RegisterRecord
Si Metadata.InformationRegisters[RegisterName].RegisterRecordMode = Metadata.ObjectProperties.RegisterRecordMode.Submission toRegistrar Alors...
// Exemple 3. Périodicité du numéro de document
Si Metadata.Documents[DocumentName].PeriodicityNumbers = Metadata.ObjectProperties.PeriodicityDocumentNumbers.Non-periodic Alors...

DANS: Comment implémenter une case à cocher à trois états dans un arbre de valeurs ?
À PROPOS DE: Examinons plus en détail la formulation du problème. Le formulaire comporte un champ de table dont la source de données est une arborescence de valeurs. Dans l'une des colonnes se trouve un élément de contrôle « Checkbox ». Il faut qu'il puisse accepter trois états : « On », « Off » et « Undefined ». Dans ce cas, l'état est « Indéfini » ou ce qu'on appelle le « 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 comporte des lignes subordonnées, lorsque son indicateur est modifié, les indicateurs de toutes les lignes subordonnées doivent changer en conséquence.
Tout d’abord, ajoutons notre colonne de cases à cocher à l’arborescence des valeurs :

Tree.Columns.Add("Marque", Nouveau TypeDescription("Nombre"));
FormElements.Tree.CreateColumns();
TreeColumns=FormElements.Tree.Columns;
TreeColumns.Mark.FlagData="Marque";
TreeColumns.Mark.SetControlElement(Type("Checkbox"));
Arbre Columns.Mark.EditMode=EditModeColumns.Directly
absolument;
TreeColumns.Mark.ThreeStatesFlag=True ;

Deuxièmement, lors de la modification d'une case à cocher, vous devez définir les valeurs correspondantes dans les lignes subordonnées et contrôler la valeur de la case à cocher dans la « ligne parent » :

Procédure TreeWhenChangementFlag (élément, colonne)
CurrentRow=Element.CurrentRow;
Si CurrentLine.Mark=2 Alors
CurrentLine.Mark=0;
fin si;
SettingFlags(CurrentRow,CurrentRow.Mark);
While CurrentRow.Parent Boucle non définie
CurrentRow.Parent.Mark=?(SetForAll(CurrentRow),CurrentRow.Mark, 2);
CurrentRow = CurrentRow.Parent;
Fin du cycle ;
Fin de la procédure

Ici, la procédure SetFlags() définit récursivement les cases à cocher dans les lignes subordonnées :

Procédure SettingFlags (CurrentRow, Value)
Pour chaque page du cycle CurrentRow.Rows
Marque de page=Valeur ;
SetChecks(Page,PageMark);
Fin du cycle ;
Fin de la procédure

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

Fonction SetForAll (Chaîne)
Pour chaque page du cycle Row.Parent.Rows
Si Page.MarkLine.Mark Alors
Renvoie Faux ;
fin si;
Fin du cycle ;
Renvoie Vrai ;
FinFonction

DANS: Comment puis-je implémenter le tri selon mes propres attributs dans le formulaire de liste ?
À PROPOS DE: Si l'attribut est de type primitif, alors il suffit de définir la propriété de l'attribut « Index » sur la valeur « Index » ou « Index avec supplémentaire. tri" (non disponible pour les attributs de type Value Storage). Si l'attribut est un type référence, il est alors nécessaire d'autoriser explicitement la disponibilité du tri pour celui-ci. Par exemple:

Element UP=Formulaire Elements.DirectoryList.Order Settings.Find("Props1");
Si l'élément UP n'est pas défini alors
ElementUP.Availability=True ;
fin si;

Les lignes de 1C 8.3 dans le langage intégré 1C représentent des valeurs d'un type primitif Doubler. Valeurs de ce genre contenir une chaîne Unicode de longueur arbitraire. Les variables de type chaîne sont un ensemble de caractères entourés de guillemets.

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

StringVariable = "Bonjour tout le monde !";

Fonctions pour travailler avec des chaînes en 1s 8.3

DANS cette section Seront données les principales fonctions qui permettent de modifier les lignes en 1c, ou d'analyser les informations qu'elles contiennent.

LongueurStre

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

Exemple 2. Comptons le nombre de caractères dans la ligne « Hello World ! »

String = "Bonjour tout le monde !"; Nombre de caractères = StrLength(String); Rapport (NombreCaractères);

Le résultat de l'exécution de ce code sera l'affichage du nombre de caractères dans la ligne : 11.

Abréviation

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

  • 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 ajoutez-y la ligne « Bonjour ».

String = Abréviation("monde!"); Chaîne = "Bonjour"+Chaîne ; Rapport (Chaîne);

Le résultat de l'exécution de ce code sera l'affichage de la ligne « Hello world ! » à l'écran.

Abrégé

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

Exemple 4. Formulaire à partir des lignes « Bonjour » et « paix ! la phrase « Bonjour tout le monde ! »

Ligne = Abréviation("Bonjour ")+" "+ Abréviation("monde!"); Rapport (Chaîne);

AbréviationLP

AbréviationLP(<Строка>) . Supprime les caractères non significatifs à droite du premier caractère significatif de la chaîne, ainsi que les caractères non significatifs à gauche du premier caractère significatif de la chaîne. Cette fonction est utilisé plus souvent que les deux précédents, car plus universel.

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

Contrepartie = Répertoires Contreparties.Rechercher par détails("TIN", "0777121211"); AccountObject = Compte.GetObject(); CounterpartyObject.Name = AbbrLP(CounterpartyObject.Name); AccountObject.Write();

un lion

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

Exemple 6. Laisser entrer la structure Employé contenir les noms, prénom et patronyme du salarié. Obtenez une chaîne avec le nom de famille et les initiales.

NomInitial = Lev(Employé.Nom, 1); Patronymique Initial = Lion(Employé. Patronymique, 1) ; Nom complet = Employé.Nom + " " + Initiale Prénom + "." + Initiale du milieu + "." ;

Droite

Droite(<Строка>, <ЧислоСимволов>) . Récupère les derniers caractères d'une chaîne, le nombre de caractères 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. Laissez une date au format « aaaammjj » être écrite à la fin d'une variable de chaîne, récupérez une chaîne avec la date et convertissez-la en type date.

Chaîne = " La date actuelle: 20170910"; StringDate = Droits (String, 8); Date = Date (StringDate);

Mercredi

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

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

String = « Région : 99 Moscou » ; Région = Moy (Chaîne, 9, 2) ;

Recherche de page

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

  • Doubler. Chaîne source ;
  • Rechercher une sous-chaîne. Rechercher une sous-chaîne ;
  • Sens de recherche. Spécifie la direction dans laquelle rechercher une sous-chaîne dans une chaîne. Peut prendre des valeurs :
    • Direction de recherche. Depuis le début;
    • Recherche.Fin Direction;
  • Position initiale. Spécifie la position dans la chaîne à laquelle commence la recherche ;
  • NombreOccurrences. Spécifie le numéro d'occurrence de la sous-chaîne recherchée dans la chaîne source.

Exemple 9. Dans la ligne « Bonjour tout le monde ! Déterminez la position de la dernière occurrence du caractère « et ».

PositionNumber = StrFind("Bonjour tout le monde !", "et", SearchDirection.End); Rapport (PositionNumber);

Le résultat de l'exécution de ce code sera d'afficher le numéro de la dernière occurrence du symbole « et » : 9.

VReg

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

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

StringVreg = VReg("Bonjour tout le monde !"); Rapport (StringVreg);

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

NReg

NReg(<Строка>) . 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 = NReg("BONJOUR LE MONDE !"); Rapport (StringVreg);

Le résultat de l'exécution de ce code sera l'affichage de la ligne « hello world ! »

Treg

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

Exemple 12 : Mettez en majuscule les premières lettres des mots de la ligne « hello world ! »

StringTreg = TReg("Bonjour tout 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 Unicode.

Exemple 13. Ajoutez gauche et droite à la ligne « Hello World ! » symbole ★

StringWithStars = Symbole("9733")+"Bonjour tout le monde !"+Symbol("9733"); Rapport (ChaîneAvecÉtoiles);

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

Symbole Code

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

Exemple 14. Découvrez le code du dernier caractère de la ligne « Hello World ! »

String = "Bonjour tout le monde !"; CharacterCode = CharacterCode (String, StrLength (String)); Notifier(CharacterCode);

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

Ligne vide

Ligne vide (<Строка>) . Vérifie si la 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.

Vide = Chaîne Vide(" "); Rapport (vide);

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

PageRemplacer

StrRemplacer(<Строка>, <ПодстрокаПоиска>, <ПодстрокаЗамены>) . Recherche toutes les occurrences de la sous-chaîne de recherche dans la chaîne source 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 = StrReplace("Bonjour tout 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 ! »

StrNombreLignes

StrNumberRow(<Строка>) . Permet de compter le nombre de lignes dans une chaîne multiligne. Aller à nouvelle ligne en 1s 8 le symbole est utilisé PS(caractère de nouvelle ligne).

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

Number = StrNumberString("Première ligne"+Characters.PS +"Deuxième ligne"+Symbols.PS +"Troisième ligne"); Signaler le numéro);

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

StrGetString

StrGetString(<Строка>, <НомерСтроки>) . Obtient une ligne 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 = "Première ligne" + Symboles PS + "Deuxième ligne" + Symboles PS + "Troisième ligne" ; LastRow = StrGetRow(Texte, StrNumberLines(Texte)); Rapport (DernièreLigne);

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

Occurrences de numéro de page

StrNumberOccurrences(<Строка>, <ПодстрокаПоиска>) . 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 ligne « Lignes en 1s 8.3 et 8.2 », quelle que soit sa casse.

Ligne = "Lignes en 1s 8.3 et 8.2" ; NombreOccurrences = StrNumberOccurrences(Vreg(String), "C"); Rapport (Nombre d'occurrences);

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

PageDébutAvec

StrDébutAvec(<Строка>, <СтрокаПоиска>) . 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 le NIF de la contrepartie sélectionnée commence par le chiffre 1. Introduisez la variable Contrepartie Contreparties.

TIN = Contrepartie.TIN ; StartsUNits = StrStartsWith(TIN, "1"); Si commence par des unités Alors //Votre code EndIf ;

Fin de page activée

StrEndsWith(<Строка>, <СтрокаПоиска>) . 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éterminer si le NIF de la contrepartie sélectionnée se termine par le chiffre 2. Introduire la variable Contrepartie une référence à un élément de répertoire est stockée Contreparties.

TIN = Contrepartie.TIN ; EndsWithTwo = StrEndsWith(TIN, "2"); If EndsInTwo Then //Votre code EndIf;

Fractionnement de page

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

Exemple 22. Ayons une chaîne contenant des nombres séparés par le symbole « ; », récupérons un tableau de nombres à partir de la chaîne.

Chaîne = "1 ; 2 ; 3" ; Tableau = StrDivide(Chaîne, ";"); Pour Count = 0 Par Array.Quantity() - 1 tentative de cycle Array[Count] = Number(AbbrLP(Array[Count])); Tableau d'exceptions [Sch] = 0 ; EndAttemptsEndCycle ;

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

PageConnecter

StrConnect(<Строки>, <Разделитель>) . Convertit le 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 Account = 0 By Array.Quantity() - 1 Cycle Array[Act] = String(Array[Act]); Fin du cycle ; Ligne = StrConnect(Array, "; ");

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 espaces dans les chiffres qui interfèrent avec le traitement normal des données. La solution à ce problème est très simple.

Regardons quels types d'espaces il existe.

Les espaces peuvent être de deux types :

  • Espace non-cassant;
  • espace « normal ».

Suppression des espaces insécables

StringRepresentation = String(Nombre); // le système écrira « 10 000 » dans la variable

Il est très simple de supprimer de tels espaces dans 1C à l'aide de la fonction de formatage des nombres :

Nombre = Format(10000, « NH = »);

StringRepresentation = String(Nombre); // le système écrira « 10000 » dans la variable

Nous avons constitué un regroupement en formater la chaîne Une valeur vide (vous pouvez aussi écrire « 0 »).

Si le type de données est déjà « string », alors la méthode suivante peut être utilisée :

StringRepresentation = StrReplace(String(StringRepresentation), Characters.NPP, ""); // dans la variable StringRepresentation était "10 000", maintenant c'est "10 000"

Autrement dit, nous avons simplement remplacé l'espace insécable (Characters.NPP) dans la ligne par une valeur vide.

Espaces réguliers

Supprimer un espace régulier dans une ligne est aussi simple que de décortiquer des poires. Il suffit de remplir la fonction suivante :

StringRepresentation = StrReplace(String(StringRepresentation), " ", ""); // "10 000", devenu "10 000"

L'exemple est similaire à la méthode précédente. Cependant, au lieu de Characters.NPP, nous utilisons une chaîne avec un espace.

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

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

Doubler

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 des types primitifs en chaîne, mais également d'autres, par exemple des éléments de répertoires et de documents.

SokrLP, SokrL, SokrP

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.) : respectivement du côté gauche et droit, uniquement du côté gauche et uniquement du côté droit.

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

Lion, droite, moyen

Ces fonctions vous permettent de couper une partie d'une chaîne. La fonction "Left()" renverra la partie d'une chaîne de son côté gauche de la longueur spécifiée. La fonction "Right()" est similaire, mais recadre depuis la droite. La fonction « Avg() » permet de préciser le numéro du caractère à partir duquel la ligne sera sélectionnée et sa longueur.

Lev("Variable chaîne", 4) // renvoie "Str"
Right("String variable", 7) // renvoie "variable"
Medium("String variable", 2, 5) // renvoie "troco"

LongueurStre

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

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

Trouver

La fonction permet de rechercher une partie d'une chaîne dans une 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 la recherche est sensible à la casse. S'il y a plus d'une occurrence de la sous-chaîne recherchée dans la chaîne d'origine, 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 permet de déterminer si une chaîne est vide. Les caractères mineurs tels que l'espace, le retour chariot et autres ne sont pas pris en compte.

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

VReg, NReg, TReg

Ces fonctions sont très utiles lors de la comparaison et de la conversion de variables chaîne. "Vreg()" renverra la chaîne d'origine en majuscule, "HPreg()" en minuscules et "TReg()" la formatera de sorte que le premier caractère de chaque mot individuel soit en majuscule et que tous les caractères suivants soient en majuscule.

VReg("DIRECTEUR GÉNÉRAL") // valeur de retour - "DIRECTEUR GÉNÉRAL"
NReg ("PDG DIRECTEUR") // valeur de retour – "PDG"
TREG("CEO DIRECTOR") // valeur de retour – "Directeur Général"

PageRemplacer

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

StrReplace("rouge, blanc, jaune", ","", ";") // renvoie "rouge; blanc; jaune"

StrNombreLignes

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

La boucle de l'exemple ci-dessous effectuera trois tours car la fonction LineNumberRow renverra la valeur 3 :

Pour ind = 1 par StrNumber of Strings ("Line1" + Symbols.PS + "Line2" + Symbols.PS + "Line3") Cycle
<тело цикла>
Fin du cycle ;

StrGetString

Cette fonction fonctionne avec du 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 texte.

StrGetString("Chaîne1" + Caractères.PS + "Chaîne2" + Caractères.PS + "Chaîne3", 2) // renvoie "Chaîne2"

Occurrences de numéro de page

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

StrNumberAttachments("a;b;c;d; ", ";") // la fonction renverra le chiffre 4

Symbole et code de symbole

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

SymbolCode("A") // la fonction renverra le nombre 1 040
CharacterCode(1040) // la fonction renverra « A »

Tâches courantes lorsque vous travaillez avec des chaînes

Concaténation de chaînes

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

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

Conversion de types

Pour convertir un type en chaîne, par exemple un lien vers un élément de répertoire, un nombre, etc., il suffit d'utiliser la fonction « String() ». Des fonctions comme « ScrLP() » convertiront également les variables en chaîne, mais immédiatement en coupant les caractères insignifiants.

String(1000) // renvoie "1 000"

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

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

String(Format(1000,"HG=")) // renvoie "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 du texte de la requête écrit dans le configurateur, soit simplement d'une variable. Pour résoudre ce problème, il vous suffit de mettre deux guillemets.

Header = String("Horns and Hooves LLC - c'est nous !") // renverra "Horns and Hooves LLC - c'est nous !"

Multiligne, saut de ligne

Afin de créer du texte multiligne, ajoutez-y simplement des sauts de ligne (Symbols.PS).

MultilineText = « Première ligne » + Symbols.PS + « Deuxième ligne »

Comment supprimer des espaces

Afin de supprimer les espaces à droite ou à gauche, vous pouvez utiliser la fonction « ScrAP() » (ainsi que « ScrL() » et « ScrP() ») :

StringNoSpaces = Abbreviation(" Plusieurs lettres ") // la fonction retournera la valeur " Plusieurs lettres "

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

StringNoSpaces = StrReplace(String(99999),Characters.NPP,"") // renvoie "99999"

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

StringNoSpaces = StrReplace("bonjour", "") // renvoie "bonjour"

Comparer les chaînes entre elles

Vous pouvez comparer les termes avec le signe égal habituel. La comparaison est sensible à la casse.

"Bonjour" = "bonjour" // renvoie False
"Bonjour" = "Bonjour" // renvoie True
"Bonjour" = "Au revoir" // renverra False

Partager