Internet Windows Android

1s 8 elimină spații din șir. Compararea corzilor între ele

Se întâmplă adesea ca la încărcarea și descărcarea datelor din 1C 8.2 și 8.3, să existe spații în numere care împiedică procesarea normală a datelor. Soluția la această problemă este foarte simplă.

Luați în considerare ce tipuri de lacune sunt.

Spațiile pot fi de două tipuri:

  • spatiu nerupere;
  • spațiu „obișnuit”.

Eliminarea spațiilor care nu se rupe

StringRepresentation = String(Number); // sistemul va scrie în variabila „10 000”

Eliminarea unor astfel de spații în 1C este foarte simplă prin funcția de format de numere:

Număr = Format(10000, "CH=");

StringRepresentation = String(Number); // sistemul va scrie la variabila „10000”

Setăm gruparea în șirul de format la o valoare goală (puteți scrie și „0”).

Dacă tipul de date este deja „șir”, atunci se poate folosi următoarea metodă:

StringRepresentation = StrReplace(String(StringRepresentation), Characters.NPP, ""); // variabila StringRepresentation a fost „10 000”, a devenit „10000”

Adică, pur și simplu am înlocuit spațiul neîntrerupt (Symbols.NPP) din șir cu o valoare goală.

Spații obișnuite

Îndepărtarea unui spațiu obișnuit dintr-un șir este la fel de ușoară ca decojirea perelor. Este suficient să executați următoarea funcție:

StringRepresentation = StrReplace(String(StringRepresentation), " ", ""); // „10.000” a devenit „10.000”

Exemplul este similar cu metoda anterioară. Cu toate acestea, în loc de Symbols.npp, folosim un șir cu un singur spațiu.

Dacă începeți să învățați programarea 1C, vă recomandăm cursul nostru gratuit (nu uitați abonați-vă la youtube - Videoclipuri noi sunt lansate în mod regulat.

Întrebări frecvente sau platforma 8 pentru manechin.

Judecând după forumurile dedicate 1C, programatorii care au întâlnit prima dată platforma 1C v 8 sau care au trecut de la 7.7 au adesea aceleași întrebări. Aici am decis să colectez cele mai comune, după părerea mea...

V: Cum se elimină un spațiu în numărul 12.600,00?
O: Este important de înțeles că nu caracterul de spațiu este folosit aici, ci așa-numitul „spațiu care nu se rupe”, prin urmare, de exemplu, următoarea construcție:

StrReplace(VariableNumber," ","");

nu va funcționa. Există două opțiuni pentru rezolvarea problemei, fie specificați Symbols.NPP pentru înlocuire în loc de spațiu, fie folosind funcția Format ().

StrReplace(VariableNumber, Symbols.NPP,""); // Prima opțiune
Format(VariableNumber,"CH="); // A doua opțiune

V: Cum să setați o condiție într-o interogare astfel încât doar documentele de un anumit tip să fie incluse în selecția rezultată?
O: Acest lucru se poate face folosind operatorul de limbaj de interogare REFERENCE, care vă permite să verificați dacă valoarea expresiei specificate în stânga acesteia este o referință la tabelul specificat în dreapta. Luați în considerare un exemplu, selectați din registrul de acumulare Realizare Servicii numai acele înregistrări pentru care registratorul este documentul Realizare Bunuri și Servicii:

Solicitare=Solicitare nouă("
|ALEGE
| Implementarea Serviciilor. Registrator,
| Implementarea Serviciilor.Suma
| DE LA
| Registrul de acumulare Implementarea Servicii AS Implementarea Serviciilor
|UNDE
| Registrator LINK Document. Vânzări de Bunuri și Servicii");

V: Cum se transferă anumite documente/directoare între configurații identice?
O: Acest lucru se poate face cu ajutorul eșantionului de procesare UploadUploadDataXML.epf furnizat pe discurile ITS.

V: Cum se transferă date între diferite configurații (sau de la 7.7 la 8)?
O: Cea mai bună opțiune, după părerea mea, este să utilizați configurația tipică „Conversia datelor”, care este furnizată pe discurile ITS, există și câteva articole care descriu utilizarea acestei configurații.

V: Cum se adaugă un anumit șir într-un câmp de tip non-șir într-o interogare, de exemplu, SELECT Realizarea Bunurilor de Servicii. Sumă + „frecare.”?
O:În nici un caz. Conversia tipului nu este posibilă într-o interogare. Construcția limbajului de interogare EXPRESS este înșelătoare pentru unii, dar aruncă doar o valoare a unui tip compus la unul dintre tipurile componente ale acelei valori și nu convertește în niciun fel tipul, deci nu este aplicabil în această situație.

V: Cum să setați o condiție într-o interogare pe un câmp cu tipul șirului de lungime nelimitată, de exemplu, selectați toate documentele cu un anumit comentariu?
O: Pentru a face acest lucru, trebuie să limitați lungimea câmpului folosind operatorul de limbaj de interogare EXPRESS. De exemplu:

Solicitare=Solicitare nouă("
|ALEGE
| Realizare Bunuri si Servicii.Link
| DE LA
| Document.Vânzarea Bunurilor/Serviciilor CUM Realizarea Bunurilor/Serviciilor
|UNDE
| EXPRESS(ImplementationProductsServices.Comment AS STRING(100)) = &Comment");

V: Există un analog al funcției 7.7 CatalogIB() în v 8?
O: Nu, deoarece o astfel de funcție nu ar avea sens pentru un mod de operare client-server. Cu toate acestea, pentru modul de funcționare fișier, puteți obține directorul infobase folosind următoarea construcție:

DirectoryIB=NSstr(InfobaseConnectionString(),"Fișier");

V: Cum să deconectați un nod de la o bază de informații distribuită?
O: Cu următorul construct:

Exchange Plans.SetMainNode(Undefined);

Sau rulați configuratorul cu parametrul de linie de comandă /ResetMasterNode (nu este utilizat pentru versiunile de bază).

V: Cum să obțineți numele documentului (analog cu metoda 7.7 View())?
O: Cu ajutorul metadatelor. De exemplu:

V: Cum să selectezi documente de toate tipurile cu o singură interogare?
O: Utilizarea metadatelor și capacitatea de a combina interogări V:

Solicitare=Solicitare nouă;
Text="";
Pentru fiecare document din metadate.Bucla documentelor
Text=Text+"ALEGE Link FROM Document."+Document.Nume+"JOIN";
EndCycle;
Query.Text=Lev(Text, StrLength(Text)-StrLength(" UNITE "));
Selection=Query.Execute().Select();

V: Cum se întrerupe executarea unui raport/prelucrare?
O: Cu operatorul UserInterruptHandle(), este recomandat să îl utilizați în bucle. Când utilizatorul apasă combinația de taste Ctrl+Break, execuția este întreruptă și este afișat un mesaj corespunzător. De exemplu:

While Selection.Next() Loop
HandlingUserInterrupt();

EndCycle;

V: Formularul are un TableField cu tipul ValueTree și setul de proprietăți Tree. De ce nu este afișat arborele valorii?
O: De asemenea, este necesar să setați proprietatea DisplayHierarchy pentru una dintre coloane.

V: Cum să utilizați sarcinile programate în modul fișier infobase?
O: Spre deosebire de modul client-server, în modul fișier, dezvoltatorul este responsabil pentru implementarea lansării automate a sarcinilor programate. Pentru a implementa pornirea automată a joburilor, aveți nevoie de un Wait Handler care verifică periodic joburile „întârziate” și le pornește. Este foarte recomandat să folosiți o sesiune separată pentru aceasta. Exemplu:

Procedura Task Check().
ExecuteProcessingJobs();
EndProcedure
ConnectWaitingHandler(„Verificarea sarcinilor”,3);

V: Cum se obține o matrice dintr-un șir delimitat?
O: Ca exemplu, voi da versiunea mea a unei funcții care funcționează „în ambele direcții”, i.e. la trecerea unui șir delimitat, formează o matrice, iar când trece un șir delimitat, formează din acesta un șir delimitat.

Funcție StringArray (Valoare Valoare, Separator)
Dacă TypeValue(Value)=Type(„String”), atunci
MnStr=StrReplace(Valoare, Separator, Simboluri.PS);
Array=Matrice nouă;
Pentru n=1 Prin StrNumber of Rows (MnStr) Ciclul
Array.Add(StrGetString(MnStr,n));
EndCycle;
Return Array;
ElseIf TypeValue(Value)=Type(„Matrice”) Atunci
String="";
Pentru fiecare element din bucla de valoare
String=String+?(String"",Separator,"")+Element;
EndCycle;
șir de returnare;
In caz contrar
Returnare nedefinită;
EndIf;
EndFunctions

V: Cum se activează capacitatea de a face modificări în configurator într-o configurație tipică?
O: Deoarece sunt acceptate configurațiile tipice (ceea ce permite actualizările automate), în mod implicit, capacitatea de a face modificări la configurație este dezactivată. Pentru a activa această caracteristică, selectați elementul de meniu „Configurare > Asistență > Setări de asistență” din configurator și faceți clic pe butonul „Activați capacitatea de modificare” din fereastra care se deschide.

V: Cum se stabilesc o parolă pentru procesare/configurare?
O:În 1C v 8, parolele pot fi setate numai pe modulele obiect. Pentru a seta o parolă, trebuie să deschideți modulul obiect și să selectați elementul de meniu „Text > Set password”. De asemenea, este posibilă livrarea configurației fără codul sursă al modulelor obiect (configurați „Configurare > Livrare configurație > Setări de livrare”). Aș dori să remarc faptul că, în acest moment, niciuna dintre aceste metode nu este o protecție fiabilă împotriva vizualizării codului sursă al modulului.

V: De ce nu funcționează căutarea unui document folosind FindByNumber(<Номер документа>)?
O: Trebuie reținut că dacă pentru acest tip de documente este setată numerotarea periodică în configurator, pe lângă numărul documentului, este necesar să se indice data intervalului ca al doilea parametru. În caz contrar, se va căuta un document cu data goală, ceea ce evident nu va duce la rezultatul dorit.

V:În 1C 8.1, dacă trebuie să vă conectați la o aplicație care rulează deja pentru depanare (Configurator > Depanare > Conexiune), elementele de depanare disponibile sunt goale. Care este motivul?
O: Faptul este că pentru aplicația pe care urmează să o depanăm, trebuie să activați în mod explicit depanarea. Meniul Instrumente > Opțiuni > fila Sistem > semnalizare Depanare activată.

V: Cum se sortează rândurile unei liste dinamice (de exemplu, DirectoryList sau DocumentList)?
O: Acest lucru se poate face folosind Generatorul de rapoarte, de exemplu:

Builder=New Report Builder;
Builder.DataSource=NewDataSourceDescription(DocumentList);
Selection=Builder.Result.Select();
While Selection.Next() Loop
Raport (Selectare. Link);
EndCycle;

Notă: selecția va include rânduri în conformitate cu selecția setată în prezent.

V: Cum se verifică valorile proprietăților obiectelor metadate? De exemplu, tipul ierarhiei directorului sau modul de intrare în registru sau frecvența numărului documentului?
O: Toate aceste proprietăți sunt proprietăți enumerate ale obiectelor metadate. De asemenea, puteți obține valori de acest tip prin metadate. Exemple:

// Exemplu 1. Vedere Ierarhie de căutare
Dacă Metadata.Catalogs[CatalogName].HierarchyView = Metadata.ObjectProperties.HierarchyView.HierarchyGroupsAndItems, atunci...
// Exemplul 2. RegisterWriteMode
Dacă Metadata.InformationRegisters[RegisterName].RegisterWriteMode = Metadata.ObjectProperties.RegisterWriteMode.RegisterSubordinate, atunci...
// Exemplul 3. Numărul documentului periodic
Dacă Metadata.Documents[DocumentName].Number Periodicity = Metadata.ObjectProperties.DocumentNumber Periodicity.Non-Periodic Atunci...

V: Cum se implementează o casetă de selectare cu trei stări în arborele de valori?
O: Să luăm în considerare declarația problemei mai detaliat. Formularul are un câmp de tabel a cărui sursă de date este un arbore de valori. Una dintre coloane conține o casetă de selectare. Este necesar că ar putea dura trei stări „Pornit”, „Oprit” și „Nedefinit”. În acest caz, statul este „Nedefinit” sau așa-numitul „steagul gri”, adică. selectat parțial, setat dacă nu toate rândurile subordonate au aceeași stare de pavilion. De asemenea, dacă un rând are rânduri subordonate, atunci când steagul său este schimbat, steaguri pentru toate rândurile subordonate ar trebui modificate în consecință.
Mai întâi, să adăugăm coloana casetă de selectare la arborele de valori:

Tree.Columns.Add("Mark",NewTypeDescription("Număr"));
FormElements.Tree.CreateColumns();
TreeColumns=FormElements.Tree.Columns;
TreeColumns.Mark.FlagData="Marca";
TreeColumns.Mark.SetControlItem(Type("Checkbox"));
TreeColumns.Mark.EditMode=EditModeColumns.Immediate
enno;
TreeColumns.Tag.ThreeFlagStates=Adevărat;

În al doilea rând, atunci când schimbați steag, trebuie să setați valorile corespunzătoare în rândurile subordonate și să controlați valoarea steagului în „rândul părinte”:

Arborele procedurilor la schimbarea unui steag (element, coloană)
CurrentRow=Element.CurrentRow;
Dacă CurrentLine.Mark=2 Atunci
CurrentLine.Mark=0;
EndIf;
SettingFlags(CurrentRow,CurrentRow.Mark);
While CurrentRow.ParentUndefined Loop
CurrentRow.Parent.Label=?(SetForAll(CurrentRow),CurrentRow.Label,2);
CurrentRow=CurrentRow.Parent;
EndCycle;
EndProcedure

Aici, procedura SetFlags() setează recursiv steagurile din sub-rânduri:

Procedură SetFlags(CurrentRow,Value)
Pentru fiecare pagină a buclei CurrentRow.Rows
PageMark=Valoare;
SetFlags(Pg,Pg.Mark);
EndCycle;
EndProcedure

Și funcția SetForAll() verifică dacă aceeași valoare este setată pentru toate rândurile de la nivelul curent:

Funcția SetForAll(String)
Pentru fiecare pagină a buclei Row.Parent.Row
Dacă Page.MarkString.Mark Atunci
returnează fals;
EndIf;
EndCycle;
returnează adevărat;
EndFunctions

V: Cum se implementează sortarea după atribut în formă de listă?
O: Dacă atributul este de tip primitiv, atunci este suficient să setați proprietatea atributului „Index” la „Index” sau „Index cu suplimentar ordonare” (nu este disponibil pentru atributele de tip ValueStorage). Dacă atributul este de tip referință, atunci este necesar să activați în mod explicit sortarea pentru el. De exemplu:

ElementUE=Form Elements.DirectoryList.Order Settings.Find("Attribute1");
Dacă ElementUE este nedefinit, atunci
ItemUE.Availability=true;
EndIf;

Șirurile din 1C 8.3 în limbajul încorporat 1c sunt valori de tip primitiv Linia. Valorile de acest tip conțin un șir Unicode de lungime arbitrară. Variabilele de tip șir sunt un set de caractere cuprinse între ghilimele.

Exemplul 1. Să creăm o variabilă șir cu text.

StringVariable = „Bună lume!”;

Funcții pentru lucrul cu șiruri în 1s 8.3

Această secțiune vă va oferi principalele funcții care vă permit să schimbați liniile în 1s, sau să analizați informațiile conținute în acestea.

StrLength

StrLength(<Строка>) . Returnează numărul de caractere conținut în șirul transmis în parametru.

Exemplul 2. Să numărăm numărul de caractere din șirul „Hello world!”.

String = „Bună lume!”; Număr de caractere = StrLength(String); Raport (număr de caractere);

Rezultatul executării acestui cod va fi afișarea numărului de caractere din șir: 11.

Abreviat

Abr(<Строка>) . Decupează caracterele nesemnificative la stânga primului caracter semnificativ dintr-un șir.
Personaje nesemnificative:

  • spaţiu;
  • spatiu nerupere;
  • intabulare;
  • retur transport;
  • traducere de linie;
  • traducerea formularului (pagina).

Exemplul 3. Eliminați toate spațiile din partea stângă a șirului „pace!” și adăugați șirul „Bună ziua”.

String = abbr("lume!"); String = „Bună”+String; Notifică (Șir);

Rezultatul executării acestui cod va fi afișarea șirului „Hello world!”.

Abreviere

abr(<Строка>) . Decupează caracterele nesemnificative la dreapta primului caracter semnificativ dintr-un șir.

Exemplul 4. Formă din șirurile „Hello” și „world!” fraza „Bună lume!”

String = abbr("Bună")+" "+abbr("lume!"); Notifică (Șir);

LP prescurtat

Abbrl(<Строка>) . Decupează caracterele nesemnificative la dreapta primului caracter semnificativ din șir, de asemenea, decupează caracterele nesemnificative la stânga primului caracter semnificativ din șir. Această funcție este folosită mai des decât precedentele două, deoarece este mai versatilă.

Exemplul 5. Eliminați caracterele nesemnificative din stânga și dreapta din numele contrapărții.

Contractor = Directories.Contractors.FindBy Details("TIN", "0777121211"); ContractorObject = Contractor.GetObject(); ContractorObject.Description = LP abreviat(ContractorObject.Description); ContractorObject.Write();

un leu

Un leu(<Строка>, <ЧислоСимволов>) . Obține primele caractere ale unui șir, numărul de caractere este specificat în parametru Numărul de caractere.

Exemplul 6. Fie structura Angajat conțin numele, prenumele și patronimul salariatului. Obțineți șir cu numele de familie și inițialele.

InitialName = Lion(Employee.Name, 1); Patronimic Initial = Leu(Angajat.Patronimic, 1); FullName = Employee.LastName + " " + FirstName Initial + "." + Inițiala patronimică + ".";

Drepturi

Dreapta(<Строка>, <ЧислоСимволов>) . Obține ultimele caractere ale unui șir, numărul de caractere este specificat în parametru Numărul de caractere. Dacă numărul specificat de caractere depășește lungimea șirului, atunci întregul șir este returnat.

Exemplul 7. Să fie scrisă o dată la sfârșitul unei variabile șir în formatul „aaaammzz”, obțineți un șir cu o dată și convertiți-l în tip Data.

String = „Data curentă: 20170910”; StringData = Drepturi (String, 8); Data = Data(StringDate);

miercuri

Miercuri(<Строка>, <НачальныйНомер>, <ЧислоСимволов>) . Obține un subșir din șirul transmis în parametru Linia, începând de la caracterul al cărui număr este specificat în parametru InitialNumber iar lungimea trecută la parametru Numărul de caractere. Numerotarea caracterelor dintr-un şir începe de la 1. Dacă parametrul InitialNumber este specificată o valoare mai mică sau egală cu zero, atunci parametrul ia valoarea 1. Dacă parametrul Numărul de caractere nu este specificat, sunt selectate caractere până la sfârșitul șirului.

Exemplul 8. Lăsați variabila șir să conțină codul regiunii începând de la a noua poziție, ar trebui să-l obțineți și să îl scrieți într-o linie separată.

String = „Regiune: 99 Moscova”; Regiune = Avg(Rând, 9, 2);

PageFind

StrFind(<Строка>, <ПодстрокаПоиска>, <НаправлениеПоиска>, <НачальнаяПозиция>, <НомерВхождения>) . Caută subșirul specificat într-un șir, returnează numărul de poziție al primului caracter al subșirului găsit. Luați în considerare parametrii acestei funcții:

  • Linia. șir sursă;
  • SubstringSearch. Subșirul dorit;
  • DirectionSearch. Specifică direcția de căutare a unui subșir într-un șir. Poate lua valori:
    • Direcția de căutare. De la început;
    • Căutați direcția. De la sfârșit;
  • StartPosition. Specifică poziția din șir de la care se începe căutarea;
  • Numărul de intrare. Specifică numărul de apariții ale subșirului căutat în șirul sursă.

Exemplul 9. În rândul „Bună lume!” determinați poziția ultimei apariții a caracterului „și”.

PositionNumber = StrFind("Bună ziua!", "și", SearchDirection.From End); Notify(PositionNumber);

Rezultatul executării acestui cod va fi afișarea numărului ultimei apariții a simbolului „și” pe ecran: 9.

VReg

VReg(<Строка>) . Convertește toate caracterele șirului specificat în 1s 8 în majuscule.

Exemplul 10. Convertiți șirul „hello world!” la majuscule.

StringVreg = Vreg("bună lume!"); Raport (StringVreg);

Rezultatul executării acestui cod va fi afișarea șirului „HELLO WORLD!”

HReg

HReg(<Строка>) . Convertește toate caracterele șirului specificat în 1s 8 în minuscule.

Exemplul 11. Convertiți șirul „HELLO WORLD!” la litere mici.

StringNreg = NReg("HELLO WORLD!"); Raport (StringVreg);

Rezultatul executării acestui cod va fi afișarea șirului „hello world!”

TReg

TReg(<Строка>) . Convertește un șir după cum urmează: primul caracter al fiecărui cuvânt este convertit în majuscule, caracterele rămase ale cuvântului sunt convertite în minuscule.

Exemplul 12. Scrieți cu majuscule primele litere ale cuvintelor din șirul „hello world!”.

StringTreg = TReg("bună lume!"); Raport (StringTreg);

Rezultatul executării acestui cod va fi afișarea șirului „Hello World!”

Simbol

Simbol(<КодСимвола>) . Obține un caracter prin codul său Unicode.

Exemplul 13. Adăugați stânga și dreapta la linia „Hello World!” simbol ★

StringWithStars = Personaj("9733")+"Bună lume!"+Personaj ("9733"); Raport (StringWithStars);

Rezultatul executării acestui cod va fi afișarea șirului „★Hello World!”

SymbolCode

CodSimbol(<Строка>, <НомерСимвола>) . Obține codul caracterului Unicode din șirul specificat în primul parametru, situat în poziția specificată în al doilea parametru.

Exemplul 14. Aflați codul ultimului caracter din șirul „Hello World!”.

String = „Bună lume!”; CharacterCode =CharacterCode(String, StrLength(String)); Notify(CharacterCode);

Rezultatul executării acestui cod va fi afișarea codului simbolului "!" — 33.

Linie goală

Linie goală (<Строка>) . Verifică dacă șirul este format doar din caractere nesemnificative, adică dacă este gol.

Exemplul 15. Verificați dacă șirul este gol și este format din trei spații.

Gol = EmptyString(" "); Raport (Gol);

Rezultatul executării acestui cod va fi afișarea cuvântului „Da” (expresie șir a unei valori booleene Adevărat).

StrReplace

StrInlocuire(<Строка>, <ПодстрокаПоиска>, <ПодстрокаЗамены>) . Găsește toate aparițiile subșirului de căutare în șirul sursă și îl înlocuiește cu subșirul de înlocuire.

Exemplul 16. În rândul „Hello World!” înlocuiți cuvântul „Lumea” cu cuvântul „Prieteni”.

String = StrReplace("Bună lume!", "Lumea", "Prieteni"); Notifică (Șir);

Rezultatul executării acestui cod va fi afișarea șirului „Bună ziua, Prieteni!”

StrNumberRows

StrNumăr de linii(<Строка>) . Vă permite să numărați numărul de linii dintr-un șir cu mai multe linii. Pentru a trece la o nouă linie în 1s 8, este folosit simbolul PS(caracter de avans de linie).

Exemplul 17. Determinați numărul de rânduri din text:
"Prima linie
A doua linie
A treia linie"

Number = StrNumber of Lines ("Prima linie"+Simboluri.PS +"A doua linie"+Simboluri.PS +"A treia linie"); Raport (Număr);

Rezultatul executării acestui cod va fi afișarea numărului de linii din text: 3

StrGetString

StrGetString(<Строка>, <НомерСтроки>) . Obține un șir într-un șir cu mai multe linii după numărul său. Numerotarea liniilor începe de la 1.

Exemplul 18. Obțineți ultima linie din text:
"Prima linie
A doua linie
A treia linie"

Text = „Prima linie”+Caractere.PS +„Linia a doua”+Caractere.PS +„Linia a treia”; LastLine = StrGetLine(Text, StrNumber of Lines(Text)); Notifică (Ultima linie);

Rezultatul executării acestui cod va fi afișarea liniei „A treia linie”.

StrNumberOccurrences

StrNumberOccurrences(<Строка>, <ПодстрокаПоиска>) . Returnează numărul de apariții ale subșirului specificat într-un șir. Funcția este sensibilă la majuscule.

Exemplul 19. Determinați de câte ori litera „c” intră pe linia „Linii în 1s 8.3 și 8.2”, indiferent de cazul ei.

String = „Linii în 1s 8.3 și 8.2”; Number of Occurrences = StrNumber of Occurrences(Vreg(String), "C"); raport (număr de apariții);

Rezultatul executării acestui cod va afișa numărul de apariții pe ecran: 2.

Pagina începe de la

StrBeginsFrom(<Строка>, <СтрокаПоиска>) . Verifică dacă șirul dat în primul parametru începe cu șirul din al doilea parametru.

Exemplul 20. Determinați dacă TIN-ul contrapărții selectate începe cu numărul 1. Fie variabila contraparte Contrapartide.

TIN = Contractor.TIN; StartsCUnits = StrStartsC(TIN, "1"); If StartsFROM1 Then //Codul dvs. EndIf;

Pagina se termină pe

StrEndsOn(<Строка>, <СтрокаПоиска>) . Verifică dacă șirul trecut în primul parametru se termină cu șirul din al doilea parametru.

Exemplul 21. Determinați dacă TIN-ul contrapărții selectate se termină cu numărul 2. Fie variabila contraparte linkul către elementul director este stocat Contrapartide.

TIN = Contractor.TIN; Se termină cu doi = Str se termină cu (TIN, „2”); Dacă se termină cu doi, atunci //Codul dvs. EndIf;

PageSplit

StrDivide(<Строка>, <Разделитель>, <ВключатьПустые>) . Împarte un șir în părți după caracterele delimitatoare specificate și scrie șirurile rezultate într-o matrice. Primul parametru stochează șirul original, al doilea parametru conține șirul care conține delimitatorul, al treilea parametru indică dacă șirurile goale trebuie scrise în matrice (în mod implicit Adevărat).

Exemplul 22. Să presupunem că avem un șir care conține numere separate prin simbolul „;”, obținem o matrice de numere din șir.

Șir = "1; 2; 3"; Array = StrSplit(String, ";"); Pentru Count = 0 By Array.Quantity() - 1 Loop Attempt Array[Count] = Number(Ablp(Array[Count])); Exception Array[W] = 0; EndTry EndCycle;

În urma execuției, se va obține o matrice cu numere de la 1 la 3.

StrConnect

StrConnect(<Строки>, <Разделитель>) . Convertește o matrice de șiruri din primul parametru într-un șir care conține toate elementele matricei folosind delimitatorul specificat în al doilea parametru.

Exemplul 23. Folosind tabloul de numere din exemplul anterior, obțineți șirul original.

Pentru Count = 0 By Array.Quantity() - 1 Loop Array[Count] = String(Array[Count]); EndCycle; String = StrConnect(Matrice, "; ");

Tipul String se găsește în toate limbajele de programare. Este primitiv, iar în 1C există multe funcții pentru a lucra cu el. În acest articol, vom lua în considerare în detaliu diferitele modalități de a lucra cu tipuri de șir în 1C 8.3 și 8.2 folosind exemple.

Linia

Pentru a converti o variabilă de orice tip într-un șir, există funcția „String ()” cu același nume. Parametrul de intrare va fi variabila însăși, a cărei reprezentare în șir urmează să fie obținută.

String(False) // returnează „Nu”
String(12345) // returnează „12 345”
String(CurrentDate()) //"21.07.2017 11:55:36"

Este posibil să se convertească într-un șir nu numai tipurile primitive, ci și altele, de exemplu, elemente de directoare și documente.

LP abreviat, L abreviat, P abreviat

Parametrii de intrare ai acestor funcții sunt o variabilă de tip șir. Funcțiile îndepărtează caractere nesemnificative (spații, întoarceri de căruță etc.): din stânga și din dreapta, doar din stânga și, respectiv, numai din dreapta.

abbrl("Spatiile de pe ambele fete vor fi eliminate") // "Spatiile de pe ambele fete vor fi eliminate"
abbr("Spațiile de pe ambele părți vor fi eliminate") // "Spațiile din stânga vor fi eliminate"
abbr(" Spațiile de pe ambele părți vor fi eliminate ") // "Spațiile din dreapta vor fi eliminate"

Leu, corect, mijloc

Aceste funcții vă permit să tăiați o parte dintr-un șir. Funcția Lion() va returna partea din șir de pe partea stângă a lungimii specificate. Funcția „Right()” este similară, dar decuparea se face în dreapta. Funcția „Wed()” vă permite să specificați numărul caracterului din care va fi selectat șirul și lungimea acestuia.

Lion(„variabilă șir”, 4) // returnează „Stro”
Dreapta(„variabilă șir”, 7) // returnează „variabilă”
avg(„variabilă șir”, 2, 5)// returnează „troco”

StrLength

Funcția determină numărul de caractere care sunt conținute într-o variabilă șir.

StrLength("Cuvânt") // rezultatul execuției va fi numărul 5

Găsi

Funcția face posibilă căutarea unei părți a unui șir într-o variabilă șir. Valoarea returnată va fi un număr care indică poziția începutului șirului găsit. Dacă nu se găsesc potriviri, se returnează zero.

Rețineți că căutarea face distincție între majuscule și minuscule. Dacă există mai mult de o apariție a subșirului de căutare în șirul original, funcția va returna începutul primei apariții.

Găsiți ("unu, doi, unu, doi, trei", "două") // funcția va returna numărul 6

Linie goală

Utilizarea acestei funcții vă permite să determinați dacă un șir este gol. Caracterele nesemnificative, cum ar fi spațiul, întoarcerea căruciorului și altele, nu sunt luate în considerare.

EmptyString("Vasili Ivanovich Pupkin") // funcția va returna False
EmptyString(" ") // funcția va returna True

VReg, NReg, TReg

Aceste funcții sunt foarte utile atunci când se compară și se convertesc variabile șir. „Vreg()” va returna șirul original cu majuscule, „HReg()” cu litere mici, iar „TReg()” îl va formata astfel încât primul caracter al fiecărui cuvânt individual să fie scris cu majuscule, iar toate caracterele ulterioare să fie litere mici.

VReg("DIRECTOR GENERAL") // returnează valoarea - "DIRECTOR GENERAL"
HReg("DIRECTOR GENERAL") // returnează valoarea - "CEO"
TReg("DIRECTOR GENERAL") // returnează valoarea - "Director general"

StrReplace

Această funcție este similară cu înlocuirea în editorii de text. Vă permite să înlocuiți un caracter sau un set de caractere cu altul în variabilele șir.

StrReplace("rosu, alb, galben", ",", ";") // returneaza "rosu; Alb; galben"

StrNumberRows

Funcția vă permite să determinați numărul de linii separate printr-un întoarcere de cărucior într-o variabilă text.

Bucla din exemplul de mai jos va trece prin trei cercuri, deoarece funcția StrNumberRows va returna valoarea 3:

Pentru ind \u003d 1 după StrNumăr de linii ("Line1" + Symbols.PS + "String2" + Symbols.PS + "Line3") Bucla
<тело цикла>
EndCycle;

StrGetString

Această funcție funcționează cu textul cu mai multe linii în același mod ca și cea anterioară. Vă permite să obțineți un șir specific dintr-o variabilă text.

StrGetString(„Șir1” + Simboluri.PS + „Șir2” + Simboluri.PS + „Șir3”, 2) // returnează „Line2”

StrNumberOccurrences

Funcția numără numărul de apariții ale unui caracter sau subșir în șirul căutat.

StrNumberInstallations("a;b;c;d; ", ";") // funcția va returna numărul 4

Simbol și SymbolCode

Aceste funcții vă permit să obțineți un caracter prin codul său Unicode, precum și să determinați acest cod după caracterul însuși.

SymbolCode("A") // funcția va returna numărul 1 040
SymbolCode(1040) // funcția va returna „A”

Sarcini frecvente atunci când lucrați cu șiruri

Concatenarea șirurilor

Pentru a concatena mai multe șiruri de caractere (concatenare) trebuie doar să utilizați operatorul de adăugare.

„Linia 1” + „Linia 2” //rezultatul adăugării a două linii va fi „Linia 1 Linia 2”

Conversie de tip

Pentru a converti un tip într-un șir, de exemplu, o referință la un element de dicționar, un număr și așa mai departe, este suficient să folosiți funcția „String ()”. Funcții precum „ShortLP()” vor converti, de asemenea, variabilele într-un șir, dar imediat cu tăierea caracterelor nesemnificative.

String(1000) // va returna „1000”

Vă rugăm să rețineți că atunci când convertiți un număr într-un șir, programul a adăugat automat un spațiu care separă mie. Pentru a evita acest lucru, puteți utiliza următoarele structuri:

StrReplace(String(1000),Characters.NPP,"") // returnează "1000"

String(Format(1000,"CH=")) // va returna "1000"

Citate într-un șir

Destul de des va trebui să faceți față nevoii de a pune ghilimele într-o variabilă șir. Poate fi fie un text de cerere scris în configurator, fie doar o variabilă. Pentru a rezolva această problemă, trebuie doar să setați două ghilimele.

Antet = String("Horns and Hooves LLC suntem noi!") // returnează "Roga and Hooves LLC suntem noi!"

Multilinie, întrerupere de linie

Pentru a crea un text cu mai multe linii, este suficient să adăugați caractere de întrerupere de linie (Symbols.PS).

MultilineText = „Prima linie” + Caractere.PS + „A doua linie”

Cum să eliminați spațiile

Pentru a elimina spațiile din dreapta sau din stânga, puteți folosi funcția „Stretch()” (precum și „Scrpt()” și „ScreenP()”):

StringWithoutSpaces = ShortLP ("Multe litere") // funcția va returna valoarea "Multe litere"

Dacă, după convertirea unui număr într-un șir, trebuie să eliminați spațiile care nu se rup, utilizați următoarea construcție:

StringWithoutSpaces = StrReplace(String(99999),Characters.NPP,"") // returnează "99999"

De asemenea, programatorii folosesc adesea următoarea construcție, care vă permite să eliminați sau să înlocuiți toate spațiile unei variabile text cu un alt caracter:

StringWithoutSpaces = StrReplace(" salut", " " ,"") // returnează "bună ziua"

Compararea corzilor între ele

Puteți compara termeni cu semnul egal obișnuit. Comparația face distincție între majuscule și minuscule.

"hello" = "bună ziua" // va returna false
„Hello” = „Hello” // va returna True
„Hello” = „La revedere” // va returna False