Noi funcții pentru lucrul cu șiruri. Noi funcții pentru lucrul cu șiruri de caractere 1c limbaj încorporat cum se verifică apariția caracterelor

Există puține mecanisme pentru a lucra cu șiruri în interogările 1C. În primul rând, liniile pot fi adăugate. În al doilea rând, puteți lua un subșir dintr-un șir. În al treilea rând, șirurile pot fi comparate, inclusiv după model. Asta este probabil tot ce se poate face cu șiruri.

Adăugarea șirurilor

Pentru a adăuga rânduri într-o interogare, se utilizează operația „+”. Puteți adăuga doar șiruri de lungime limitată.

SELECTAȚI „Nume: „ + Counterparties Coloana 1 FROM Counterparties AS Counterparties WHERE Link = &Link

Funcția subșir

SUBSTRING(<Строка>, <НачальнаяПозиция>, <Длина>)

Un analog al funcției Environment() din modelul obiect. Funcția Substring() poate fi aplicată datelor șirului și vă permite să selectați un fragment <Строки> , începând cu numărul caracterului <НачальнаяПозиция> (caracterele dintr-o linie sunt numerotate începând de la 1) și lungime <Длина> personaje. Rezultatul calculului funcției are un tip de șir de lungime variabilă, iar lungimea va fi considerată nelimitată dacă <Строка> are lungime și parametri nelimitați <Длина> nu este o constantă sau mai mare decât 1024.

Dacă lungimea șirului este mai mică decât cea specificată în al doilea parametru, atunci funcția va returna un șir gol.

Atenţie! Utilizarea funcției SUBSTRING() pentru a converti șiruri de lungime nelimitată în șiruri de lungime limitată nu este recomandată. În schimb, este mai bine să utilizați operatorul de distribuție EXPRESS().

Funcție similară

Dacă trebuie să ne asigurăm că un atribut șir îndeplinește anumite criterii, îl comparăm:

SELECT Counterparties Nume AS Coloana 1 FROM Counterparties AS Counterparties WHERE Counterparties.

Dar dacă ai nevoie de o comparație mai subtilă? Nu doar egalitate sau inegalitate, ci asemănarea cu un anumit tipar? Exact pentru asta a fost creată funcția SIMILAR.

LIKE — Operator pentru verificarea asemănării unui șir cu un model. Analog de LIKE în SQL.

Operatorul SIMILAR vă permite să comparați valoarea expresiei specificate în stânga acesteia cu șirul de model specificat în dreapta. Valoarea expresiei trebuie să fie de tip șir. Dacă valoarea expresiei se potrivește cu modelul, rezultatul operatorului va fi TRUE, altfel va fi FALS.

Următoarele caractere din șirul de model sunt caractere de serviciu și au o semnificație diferită de caracterul șir:

  • % (procent): o secvență care conține orice număr de caractere arbitrare;
  • _ (subliniere): un caracter arbitrar;
  • […] (unul sau mai multe caractere între paranteze drepte): orice caracter unic enumerat între paranteze drepte. Enumerarea poate conține intervale, de exemplu a-z, adică un caracter arbitrar inclus în interval, inclusiv capetele intervalului;
  • [^...] (în paranteze drepte un semn de negație urmat de unul sau mai multe caractere): orice caracter unic, altul decât cele enumerate după semnul de negație.

Orice alt simbol înseamnă el însuși și nu poartă nicio sarcină suplimentară. Dacă unul dintre caracterele enumerate trebuie să fie scris ca el însuși, atunci trebuie să fie precedat de<Спецсимвол>. eu însumi<Спецсимвол>(orice caracter adecvat) este definit în aceeași instrucțiune după cuvântul cheie SPECIAL CHARACTER.

Note din Through the Looking Glass

18.08.2014 Noi funcții pentru lucrul cu șiruri

Implementat în versiunea 8.3.6.1977.

Am extins setul de funcții concepute pentru a funcționa cu șiruri. Am făcut acest lucru pentru a vă oferi instrumente mai avansate pentru analizarea datelor șirurilor. Noile funcții vor fi convenabile și utile în sarcinile tehnologice de analiză a textului. În sarcinile legate de analizarea textului care conține date în formă formatată. Aceasta ar putea fi o analiză a unor fișiere primite de la echipament sau, de exemplu, o analiză a unui jurnal tehnologic.

Puteți efectua toate acțiunile care îndeplinesc funcții noi înainte. Folosind algoritmi mai mult sau mai puțin complecși scriși într-un limbaj încorporat. Prin urmare, noile funcții nu vă oferă capabilități fundamental noi. Cu toate acestea, vă permit să reduceți cantitatea de cod și să faceți codul mai simplu și mai ușor de înțeles. În plus, vă permit să accelerați execuția acțiunilor. Pentru că funcțiile implementate în platformă funcționează, desigur, mai rapid decât un algoritm similar scris într-un limbaj încorporat.

Funcția de formatare StrTemplate()

Această funcție înlocuiește parametrii într-un șir. Necesitatea unei astfel de conversii apare adesea, de exemplu, la afișarea mesajelor de avertizare. Sintaxa pentru această funcție este următoarea:

StrTemplate(<Шаблон>, <Значение1-Значение10>)

<Шаблон>- acesta este șirul în care trebuie să înlocuiți reprezentările parametrilor.

<Значение1> , ... <Значение10>- sunt parametri (maximum zece), ale căror reprezentări trebuie substituite în șir.

Pentru a indica un anumit loc din șablon unde doriți să efectuați înlocuirea, trebuie să utilizați marcatori precum %1, ... %10. Numărul de markeri implicați în șablon și numărul de parametri care conțin valori trebuie să se potrivească.

De exemplu, rezultatul executării unui astfel de operator:

va fi o linie:

Eroare de date pe linia 2 (Tipul de dată este necesar)

Funcție pentru lucrul cu șiruri de caractere StrCompare()

Această funcție compară două șiruri de caractere fără a ține seama de majuscule și minuscule. De exemplu, așa:

Puteți efectua aceeași acțiune mai devreme folosind obiectul Compararea Valorilor:

Cu toate acestea, utilizarea noii caracteristici pare mai ușoară. Și pe lângă aceasta, o funcție, spre deosebire de un obiect Compararea Valorilor, funcționează atât în ​​clientul subțire, cât și în clientul web.

Funcții pentru lucrul cu șiruri de caractere StrStartsWith(), StrEndsAt()

Aceste funcții determină dacă un șir începe cu un subșir specificat sau dacă un șir se termină cu un subșir specificat. Algoritmul pentru aceste funcții nu este greu de implementat într-un limbaj încorporat, dar prezența lor vă permite să scrieți un cod mai curat și mai ușor de înțeles. Și lucrează mai repede.

De exemplu, este convenabil să le folosiți în operator Dacă:

Funcții pentru lucrul cu șiruri de caractere StrDivide(), StrConnect()

Aceste funcții împart un șir în părți folosind un delimitator specificat. Sau invers, combină mai multe linii într-una singură, inserând între ele separatorul selectat. Sunt convenabile pentru crearea sau analizarea jurnalelor și a revistelor tehnologice. De exemplu, puteți analiza cu ușurință o intrare de jurnal tehnologic în părți adecvate pentru analiză ulterioară:

Funcție pentru lucrul cu șiruri de caractere StrFind()

În loc de vechea funcție Găsi() Am implementat o nouă funcție care are capacități suplimentare:

  • Caută în direcții diferite (de la început, de la sfârșit);
  • Căutați dintr-o poziție specificată;
  • Căutați o apariție cu un număr specificat (al doilea, al treilea etc.).

De fapt, dublează capacitățile vechii funcție. Acest lucru se face pentru a menține compatibilitatea cu modulele compilate în versiuni mai vechi. Funcție veche Găsi() Se recomandă să nu mai utilizați.

Mai jos este un exemplu de utilizare a noilor capabilități de căutare. Căutarea inversă este utilă atunci când aveți nevoie de ultimul fragment dintr-un șir formalizat, cum ar fi numele complet al fișierului într-o adresă URL. Și căutarea dintr-o poziție specificată ajută în cazurile în care trebuie să căutați într-un fragment cunoscut, și nu în întreaga linie.

Capacitățile de bază ale unui limbaj de programare includ de obicei lucrul cu numere și șiruri. De obicei, aceste capabilități sunt codificate în codul compilatorului (sau sunt implementate clasele „de bază” ale limbajului de programare).

În 1C, capacitatea de a lucra cu șiruri este programată chiar în platformă. Astăzi ne vom uita la caracteristicile lucrului cu șiruri 1C în programele în limbajul 1C încorporat.

Valoarea liniei 1C

1. Să începem cu cel mai simplu. Crearea unei variabile și atribuirea unei valori constante șirului arată astfel în 1C:

Variabilă = „Bună, lume!”;

Dacă trebuie să specificați un caracter de ghilimele într-o valoare constantă de șir 1C, atunci trebuie să-l dublați „”

Variabilă = „Bună, lume”!;

2. Ruptura de linie 1C poate fi specificată în două moduri simultan. Primul folosește simbolul |

Variabilă = „Bună ziua,
| lume! ";

Al doilea folosește enumerarea sistemului Symbols. Vă permite să adăugați atât o întrerupere de linie 1C, cât și alte caractere care nu se imprimă, cum ar fi TAB.

Variabilă = „Bună ziua” + Simboluri.PS + „pace!”;

3. Configurațiile în 1C pot fi dezvoltate nu numai pentru o limbă (rusă, engleză sau alta) - ci simultan pentru mai multe limbi. În acest caz, limba utilizată curent este selectată în partea de jos a ferestrei 1C.

Lista limbilor se află în fereastra de configurare din ramura General/Limbi. Fiecare limbă are un identificator scurt, cum ar fi ru sau ing.

Este clar că la programarea unei astfel de configurații, liniile 1C pot fi și multilingve. Pentru a face acest lucru, este posibil să creați o astfel de linie 1C specificând prin; opțiuni după identificatorul de limbă:

Variabilă = "ru=""Bună ziua, lume! ""; ro=""Bună ziua, lume! """;

Dacă utilizați linia 1C formată astfel ca de obicei, atunci va fi ceea ce este scris în ea. Pentru ca sistemul să îl împartă în două opțiuni și să o utilizeze pe cea dorită, trebuie să utilizați funcția НStr():

//corect pentru configurațiile bilingve
Raport(NStr(Variabilă));

Recuzită cu linie tip 1C

Atributul este un câmp din directorul/documentul 1C. Diferă de o variabilă dintr-un program în limbajul 1C prin faptul că pentru atribut este indicat cu precizie tipul acesteia (număr, șir 1C etc.). Dacă aveți nevoie să vă reîmprospătați memoria despre ce este o recuzită, urmăriți lecția.

Dacă specificați tipul de atribut - linia 1C, atunci trebuie să specificați suplimentar parametrii.

Liniile 1C au lungime nelimitată (indicată ca lungime = 0) și lungime limitată, indicând numărul exact de caractere. Rândurile 1C de lungime nelimitată sunt stocate într-un tabel SQL separat, astfel încât utilizarea lor este mai puțin productivă decât cele limitate.

De aceea, utilizarea șirurilor 1C de lungime nelimitată are limitările sale - nu este posibil să le folosiți peste tot. De exemplu, nu este permis ca număr de document, cod de referință sau măsurare.

Lucrul cu șiruri 1C

Există mai multe funcții încorporate ale platformei 1C pentru lucrul cu șiruri.

  • AbbrLP („Incredibil, dar adevărat!”)
    Elimină spațiile suplimentare din linia 1C. Poate fi folosit și pentru a converti orice tip într-un șir 1C (de exemplu, numere).
  • Variabilă = "Vasya" + AbbrLP ("plus") + "Olya"; //va fi „Vasya plus Olya”
    Un exemplu de însumare a mai multor valori de șir 1C. Rezultatul va fi o linie 1C.
  • Variabilă = Lev(„Muzică”, 2); //va fi "Mu"
    Variabilă = Mediu(„Muzică”, 2, 2); //va exista „amenințare”
    Variabilă = Drepturi ("Muzică", 2); //va fi "ka"
    Diverse opțiuni pentru obținerea unui subșir dintr-un șir 1C.
  • Variabila = Find("Muzică", "zy"); //vor fi 3
    Căutați un subșir în șirul 1C, începând cu caracterul 1.
  • Variabila = StrLength("Muzica"); //vor fi 6
    Returnează numărul de caractere din linia 1C.
  • Raport ("Bună ziua") //în fereastra de mesaje din partea de jos a ferestrei 1C
    Alertă(„Bună ziua”) // dialog pop-up
    Stare(„Bună ziua”) //în linia de afișare a stării din stânga jos
    .

Aducerea obiectelor pe linia 1C

După cum știți, cel mai popular format pentru schimbul de informații structurate în prezent este XML. Chiar și cea mai recentă versiune de MS Office Word și Excel salvează fișierele în acest format (docx și, respectiv, xlsx, schimbă extensia în zip, deschide într-un arhivator).

Platforma 1C pentru schimbul de date oferă mai multe opțiuni, dintre care principala este și XML.

1. Cea mai simplă metodă este să folosiți funcția Abreviere() sau String(). Puteți utiliza funcția REPRESENTATION() în corpul cererii. Rezultatul acțiunii lor este același - ei generează o reprezentare șir a oricărui obiect 1C pentru utilizator.

Pentru un director implicit, acesta va fi numele acestuia. Pentru un document – ​​numele documentului, numărul și data.

2. Orice obiect 1C (cu restricții) poate fi convertit în XML și invers. Procesul de conversie se numește serializare.

StringViewXml = XMLString(Valoare); //obține XML din valoarea 1C
Value1C = XMLValue(Type("DirectoryLink.Nomenclature"),TypeStringXml); // obțineți valoarea 1C din șirul XML, trebuie să specificați tipul 1C care ar trebui să fie primit

3. Există o modalitate proprie a platformei 1C de a converti orice obiect 1C într-un șir. A migrat de la versiunea 1C 7.7. Acest format nu este înțeles de alte programe, dar alți 1C îl înțelege, ceea ce face ușoară utilizarea lui pentru schimbul între bazele de date 1C.

Rând = ValueInRowInt(Value1C); //obține șirul 1C din valoarea 1C
ValueVFile("C:\MyFile.txt", Value1C); //o altă opțiune, obținem un fișier cu un șir salvat din valoarea 1C
Value1C = ValueFromStringInt(String); //înapoi de la linia 1C
Value1C = ValueFile("C:\MyFile.txt"); //înapoi din fișier

Editarea liniilor 1C pe formular

Pe lângă lucrul cu șiruri 1C într-un program în limbajul 1C, bineînțeles că aș dori ca utilizatorul să le poată edita. Există mai multe posibilități pentru aceasta:

1. Cel mai simplu mod este de a solicita intrarea unei linii 1C la cerere. Această metodă este folosită atunci când predați programarea 1C în viață este folosită mult mai rar (dar este folosită!).

Variabila = "";
Rând = EnterValue(Variabilă, „Introduceți numele complet”);

2. Pentru a afișa detaliile unui obiect 1C (director/document) sau detalii de formular (vezi), cel mai des este folosit un câmp de introducere. Acesta este cel mai comun instrument din 1C pentru ca utilizatorul să lucreze cu câmpuri de editare.

3. Capacitățile câmpului de intrare pot fi extinse (a se vedea proprietățile câmpului de intrare, faceți clic dreapta pe el, mai multe detalii):

  • Caseta de selectare Modul de editare multilinie
  • Casetă de selectare Editare avansată (disponibilă dacă caseta de selectare anterioară este bifată)
  • Casetă de selectare Mod parolă (vezi).

4. Dacă toate capabilitățile câmpului de intrare nu sunt suficiente pentru dvs., există un editor încorporat. Pentru a-l adăuga în formular, trebuie să adăugați un câmp de document text în meniul Formular/Inserare control. În proprietățile sale puteți specifica modul său de funcționare – proprietatea Extensie.

Un câmp de document text nu poate fi asociat direct cu date. Este necesar să scrieți o funcție în handlerul de evenimente OnOpen() al formularului (vezi ):

Form Elements.ElementNameTextDocumentField.SetText(StringValue); //aici ValueString este textul primit, de exemplu, de la atribut

Și în gestionarea de salvare - de exemplu, în butonul Salvare - adăugați o salvare:

ValueString = FormElements.ElementNameTextDocumentField.GetText(); //ValoareLinia aici este atributul în care salvăm valoarea

5. În versiunea 1C 8.2.11, în formele gestionate, a apărut o nouă opțiune pentru reprezentarea unei linii 1C - câmpul Document formatat.


Asemănător câmpului unui document text, trebuie să îl setați când îl deschideți și să îl notați când îl salvați singur folosind programul.

  • În obiectul 1C a cărui formă o creăm (director, document, procesare etc.) - adăugați un atribut cu tipul Value Storage
  • În funcția OnReadOnServer() setăm textul din atribut

    //aici Atributul este atributul adăugat al obiectului 1C
    //aici FormattedDocument este numele câmpului din formular pentru editare
    &OnServer

    FormattedDocument = CurrentObject.Attributes.Get();
    Sfârșitul procedurii

  • În funcția BeforeWritingOnServer() sau folosind butonul, vom scrie textul din câmp

    &OnServer
    Procedură la ReadingOnServer(CurrentObject)
    CurrentObject.Props = NewValueStorage(FormattedDocument);
    Sfârșitul procedurii

Salutare tuturor
Astăzi mi-au cerut să nu afișez prefixul documentului la tipărirea unui document de implementare, am rezolvat problema în felul următor.

StrReplace(Număr, Lev(Număr, 3), "" );

Când m-am uitat în asistentul de sintaxă, mi-a plăcut atât de mult încât am vrut să scriu despre el lucrul cu șiruri în 1C:Enterprise.

Un șir în 1C se referă la un tip de date primitiv.

Dacă te uiți la ajutorul 1C, vom vedea următoarea descriere a tipului String:
Valorile de acest tip conțin un șir Unicode de lungime arbitrară.
Dacă folosiți propriile cuvinte despre șiruri, va funcționa. Un șir este o constantă formată din diferite caractere, întotdeauna înconjurate de ghilimele.

Stabilirea unei linii
Salutare = „Bună ziua pasagerului”;

Liniile cu mai multe linii în configurații tipice sunt cel mai adesea create folosind separatorul vertical „|”:
String = „Multilinie
|șir
|scrie
|text";

Un ghilimele dintr-un șir este specificat prin ghilimele duble.
String = ""Text între ghilimele"";

Există multe operații pe șiruri (căutarea în interiorul șirului, determinarea primelor etc.), este mai bine să te uiți la Syntax Assistant.
Syntax Helper - Descrierea generală a limbajului încorporat -> funcții încorporate -> funcții pentru lucrul cu șiruri.

Funcții pentru lucrul cu șiruri

Iată un scurt rezumat al funcțiilor pentru lucrul cu șiruri de caractere:

VReg(<Строка>) — Funcția convertește toate caracterele din șir în majuscule.

CodSimbol(<Строка>, <НомерСимвола>) – Funcția primește codul caracterului aflat în șirul transmis la poziția cu numărul specificat.

Leu(<Строка>, <ЧислоСимволов>) – Funcția selectează primele caractere din stânga șirului.

Găsi(<Строка>, <ПодстрокаПоиска>) — Funcția găsește o apariție a șirului de căutare ca subșir în șirul sursă.

NReg(<Строка>) — Funcția convertește toate caracterele din șir în litere mici.

Corect(<Строка>, <ЧислоСимволов>) – Această funcție diferă de funcțiile Left prin faptul că selectează ultimele caractere din dreapta șirului.

EmptyString(<Строка>) — Funcția verifică șirul pentru prezența caracterelor semnificative.

Simbol(<КодСимвола>) — Funcția convertește codul caracterului într-un șir care conține caracterul.

AbbrL(<Строка>) — Funcția decupează caracterele nesemnificative din stânga primului caracter semnificativ din șir.

AbbrLP(<Строка>) — Funcția decupează caracterele nesemnificative la stânga primului caracter semnificativ din linie și spațiile la dreapta ultimului caracter semnificativ din linie.

Abr(<Строка>) — Funcția decupează caracterele nesemnificative din dreapta ultimului caracter semnificativ din șir.

Miercuri(<Строка>, <НачальныйНомер>, <ЧислоСимволов>) — Funcția selectează un șir de caractere, începând cu caracterul<НачальныйНомер>, număr total<ЧислоСимволов>.

StrLength(<Строка>) — Funcția primește numărul de caractere din linie.

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

StrGetString(<Строка>, <НомерСтроки>) - Funcția primește un șir de mai multe linii după număr.

StrNumberOccurrences(<Строка>, <ПодстрокаПоиска>) — Funcția calculează numărul de apariții ale subșirului de căutare în șirul sursă.

StrNumberRow(<Строка>) — Funcția numără numărul de linii dintr-un șir cu mai multe linii. Într-un șir cu mai multe linii, liniile sunt separate prin linii noi.

TReg(<Строка>) — Funcția convertește șirul în majuscule de titlu. Aceasta înseamnă că primul caracter al fiecărui cuvânt este convertit în majuscule sau litere mari dacă nu este specificată pentru caracter. Caracterele rămase sunt convertite în litere mici.

Conversii de tip
Pentru conversia explicită a tipurilor de date, există funcții cu același nume cu tipul de date la care are loc conversia: String(<Значение>)

StringFromNumbers = String(Number);

Toate aceste funcții sunt descrise în detaliu în Syntax Assistant. Am descris modul în care Syntax Assistant poate ajuta un programator începător.

Exemple de lucru cu șiruri

Conversia unui număr într-un șir și înapoi.

Pentru a obține o reprezentare în șir a anului, utilizați funcția Format.

An = Format(CurrentDate(), "DF=aaaa") // An = "2012"

Pentru a converti un număr într-un șir fără a introduce un caracter separator de grup (spațiu neîntrerupt), trebuie să utilizați funcția Format cu parametrul NG=0:

Număr = 2012 Linie = Format(Număr, "NH=0" );

//Șir = „2012”