Kontakty

Funkcie pre prácu s reťazcami 1s. Nové funkcie pre prácu s reťazcami. Funkcia formátovania StrTemplate()

Reťazce v 1C 8.3 v zabudovanom jazyku 1c sú hodnoty primitívneho typu Linka. hodnoty tohto typu obsahujú reťazec Unicode ľubovoľnej dĺžky. Premenné typu reťazec sú množinou znakov uzavretých v úvodzovkách.

Príklad 1. Vytvorme reťazcovú premennú s textom.

StringVariable = "Ahoj svet!";

Funkcie pre prácu s reťazcami v 1s 8.3

Táto časť poskytuje hlavné funkcie, ktoré vám umožňujú meniť riadky v priebehu 1 s alebo analyzovať informácie v nich obsiahnuté.

StrLength

StrLength(<Строка>) . Vráti počet znakov obsiahnutých v reťazci odovzdanom v parametri.

Príklad 2. Spočítajme počet znakov v reťazci „Ahoj svet!“.

String = "Ahoj svet!"; Počet znakov = StrLength(String); Správa (počet znakov);

Výsledkom vykonania tohto kódu bude zobrazenie počtu znakov v reťazci: 11.

Skrátené

Abbr(<Строка>) . Orezáva nevýznamné znaky vľavo od prvého významného znaku v reťazci.
Bezvýznamné postavy:

  • priestor;
  • neprerušiteľný priestor;
  • tabelácia;
  • návrat vozňa;
  • preklad riadkov;
  • preklad formulára (stránky).

Príklad 3. Odstráňte všetky medzery z ľavej strany reťazca "mier!" a pripojte k nemu reťazec „Ahoj“.

String = abbr("svet!"); String = "Ahoj"+String; Upozorniť(String);

Výsledkom vykonania tohto kódu bude zobrazenie reťazca "Ahoj svet!".

Skratka

abbr(<Строка>) . Orezáva nevýznamné znaky vpravo od prvého významného znaku v reťazci.

Príklad 4. Formulár z reťazcov "Ahoj" a "svet!" fráza "Ahoj svet!"

String = abbr("Ahoj")+" "+abbr("svet!"); Upozorniť(String);

Skrátené LP

Abbrl(<Строка>) . Orezáva nevýznamné znaky vpravo od prvého významného znaku v reťazci a orezáva aj nevýznamné znaky vľavo od prvého významného znaku v reťazci. Táto funkcia používa sa častejšie ako predchádzajúce dva, pretože je všestrannejší.

Príklad 5. Odstráňte nepodstatné znaky vľavo a vpravo v mene protistrany.

Dodávateľ = Directories.Contractors.FindBy Details("TIN", "0777121211"); ContractorObject = Contractor.GetObject(); ContractorObject.Description = Skrátený LP(ContractorObject.Description); ContractorObject.Write();

Lev

Lev(<Строка>, <ЧислоСимволов>) . Získa prvé znaky reťazca, počet znakov je zadaný v parametri Počet znakov.

Príklad 6. Nechajte štruktúru zamestnanec obsahuje meno, priezvisko a priezvisko zamestnanca. Získajte reťazec s priezviskom a iniciálami.

Počiatočné meno = Lion(meno zamestnanca, 1); Patronymická iniciála = Lev(Zamestnanec.Patronym, 1); Celé meno = Zamestnanec.Priezvisko + " " + Úvodné meno + "." + Patronymická iniciála + ".";

práva

Správny(<Строка>, <ЧислоСимволов>) . Získa posledné znaky reťazca, počet znakov je zadaný v parametri Počet znakov. Ak zadaný počet znakov prekročí dĺžku reťazca, vráti sa celý reťazec.

Príklad 7. Na koniec reťazcovej premennej nech je napísaný dátum vo formáte „rrrrmmdd“, získajte reťazec s dátumom a preveďte ho na typ dátum.

Reťazec = " Aktuálny dátum: 20170910"; StringDate = Rights(String, 8); Date = Date(StringDate);

streda

streda(<Строка>, <НачальныйНомер>, <ЧислоСимволов>) . Získa podreťazec z reťazca odovzdaného v parametri Linka, počnúc znakom, ktorého číslo je uvedené v parametri InitialNumber a dĺžka odovzdaná parametru Počet znakov.Číslovanie znakov v reťazci začína od 1. Ak je parameter InitialNumber je zadaná hodnota menšia alebo rovná nule, potom parameter nadobudne hodnotu 1. Ak je parameter Počet znakov nie je zadané, vyberú sa znaky až do konca reťazca.

Príklad 8. Nech reťazcová premenná obsahuje kód regiónu začínajúci od deviatej pozície, mali by ste ho získať a napísať do samostatného riadku.

Reťazec = "Región: 99 Moskva"; Oblasť = priem(riadok, 9, 2);

PageFind

StrFind(<Строка>, <ПодстрокаПоиска>, <НаправлениеПоиска>, <НачальнаяПозиция>, <НомерВхождения>) . Vyhľadá zadaný podreťazec v reťazci, vráti číslo pozície prvého znaku nájdeného podreťazca. Zvážte parametre tejto funkcie:

  • Linka. Zdrojový reťazec;
  • SubstringSearch. Požadovaný podreťazec;
  • DirectionSearch. Určuje smer hľadania podreťazca v reťazci. Môže nadobúdať hodnoty:
    • Smer hľadania. Od začiatku;
    • Smer hľadania. Od konca;
  • StartPosition. Určuje pozíciu v reťazci, na ktorej sa má spustiť vyhľadávanie;
  • Vstupné číslo. Určuje počet výskytov hľadaného podreťazca v zdrojovom reťazci.

Príklad 9. V riadku "Ahoj svet!" určiť polohu posledného výskytu znaku „a“.

PositionNumber = StrFind("Ahoj svet!", "and", SearchDirection.From End); Upozorniť(číslo pozície);

Výsledkom vykonania tohto kódu bude zobrazenie čísla posledného výskytu symbolu „a“ na obrazovke: 9.

VReg

VReg(<Строка>) . Skonvertuje všetky znaky zadaného reťazca na 1 s 8 na veľké písmená.

Príklad 10. Preveďte reťazec "ahoj svet!" na veľké písmená.

StringVreg = Vreg("ahoj svet!"); Report(StringVreg);

Výsledkom vykonania tohto kódu bude zobrazenie reťazca "HELLO WORLD!"

HReg

HReg(<Строка>) . Skonvertuje všetky znaky zadaného reťazca na 1 s 8 na malé písmená.

Príklad 11. Preveďte reťazec "HELLO WORLD!" na malé písmená.

StringNreg = NReg("AHOJ SVET!"); Report(StringVreg);

Výsledkom vykonania tohto kódu bude zobrazenie reťazca "hello world!"

TReg

TReg(<Строка>) . Skonvertuje reťazec nasledovne: prvý znak každého slova sa skonvertuje na veľké, zvyšné znaky slova sa skonvertujú na malé.

Príklad 12. Prvé písmená slov v reťazci „hello world!“ napíšte veľkými písmenami.

StringTreg = TReg("ahoj svet!"); Report(StringTreg);

Výsledkom vykonania tohto kódu bude zobrazenie reťazca "Hello World!"

Symbol

Symbol(<КодСимвола>) . Získa znak pomocou kódu Unicode.

Príklad 13. Pridajte doľava a doprava do riadku "Ahoj svet!" symbol ★

StringWithStars = Character("9733")+"Ahoj svet!"+Character("9733"); Správa(StringWithStars);

Výsledkom vykonania tohto kódu bude zobrazenie reťazca „★Ahoj svet!★“

SymbolCode

Kód symbolu(<Строка>, <НомерСимвола>) . Získa kód znaku Unicode z reťazca zadaného v prvom parametri, ktorý sa nachádza na pozícii špecifikovanej v druhom parametri.

Príklad 14. Zistite kód posledného znaku v reťazci „Hello World!“.

String = "Ahoj Svet!"; CharacterCode =Kód znaku(Reťazec, StrLength(Reťazec)); Upozorniť(Kód znaku);

Výsledkom vykonania tohto kódu bude zobrazenie kódu symbolu "!" — 33.

Prázdny riadok

Prázdny riadok (<Строка>) . Kontroluje, či reťazec pozostáva len z nepodstatných znakov, teda či je prázdny.

Príklad 15. Skontrolujte, či je reťazec prázdny a pozostáva z troch medzier.

Empty = EmptyString(" "); Report(Empty);

Výsledkom vykonania tohto kódu bude zobrazenie slova „Áno“ (reťazcový výraz booleovskej hodnoty Pravda).

StrReplace

StrReplace(<Строка>, <ПодстрокаПоиска>, <ПодстрокаЗамены>) . Vyhľadá všetky výskyty hľadaného podreťazca v zdrojovom reťazci a nahradí ho náhradným podreťazcom.

Príklad 16. V riadku "Ahoj Svet!" nahradiť slovo „Svet“ slovom „Priatelia“.

String = StrReplace("Ahoj svet!", "Svet", "Priatelia"); Upozorniť(String);

Výsledkom vykonania tohto kódu bude zobrazenie reťazca "Ahoj priatelia!"

StrNumberRows

StrNumber of Lines(<Строка>) . Umožňuje vám spočítať počet riadkov vo viacriadkovom reťazci. Ak chcete prejsť na Nový riadok v 1s 8 sa používa symbol PS(riadkový znak).

Príklad 17. Určte počet riadkov v texte:
"Prvá línia
Druhý riadok
Tretí riadok"

Číslo = StrPočet riadkov("Prvý riadok"+Symboly.PS +"Druhý riadok"+Symboly.PS +"Tretí riadok"); Správa (číslo);

Výsledkom vykonania tohto kódu bude zobrazenie počtu riadkov v texte: 3

StrGetString

StrGetString(<Строка>, <НомерСтроки>) . Získa reťazec vo viacriadkovom reťazci podľa jeho čísla. Číslovanie riadkov začína od 1.

Príklad 18. Získajte posledný riadok v texte:
"Prvá línia
Druhý riadok
Tretí riadok"

Text = "Prvý riadok"+Znaky.PS +"Druhý riadok"+Znaky.PS +"Tretí riadok"; Posledný riadok = StrGetLine(Text, Počet riadkov(Text)); Upozorniť (Posledný riadok);

Výsledkom vykonania tohto kódu bude zobrazenie riadku "Tretí riadok".

StrNumberOccurrences

StrNumberOccurrences(<Строка>, <ПодстрокаПоиска>) . Vráti počet výskytov zadaného podreťazca v reťazci. Funkcia rozlišuje malé a veľké písmená.

Príklad 19. Určite, koľkokrát písmeno „c“ vstúpi do riadku „Riadky v 1s 8.3 a 8.2“, bez ohľadu na veľkosť písmen.

Reťazec = "Riadky v 1s 8,3 a 8,2"; Počet výskytov = StrPočet výskytov(Vreg(String), "C"); správa (počet výskytov);

Výsledok vykonania tohto kódu zobrazí počet výskytov na obrazovke: 2.

PageBeginsFrom

StrBeginsFrom(<Строка>, <СтрокаПоиска>) . Skontroluje, či reťazec uvedený v prvom parametri začína reťazcom v druhom parametri.

Príklad 20. Zistite, či DIČ vybranej protistrany začína číslom 1. Nechajte premennú protistrana protistrany.

DIČ = Dodávateľ.TIN; StartsCUnits = StrStartsC(TIN, "1"); If StartsFROM1 Then //Váš kód EndIf;

Stránka sa končí

StrEndsOn(<Строка>, <СтрокаПоиска>) . Skontroluje, či reťazec odovzdaný v prvom parametri končí reťazcom v druhom parametri.

Príklad 21. Zistite, či DIČ vybranej protistrany končí číslom 2. Nechajte premennú protistrana odkaz na prvok adresára je uložený protistrany.

DIČ = Dodávateľ.TIN; Končí dvoma = Str končí (TIN, "2"); If Ends Two Then //Váš kód EndIf;

PageSplit

StrDivide(<Строка>, <Разделитель>, <ВключатьПустые>) . Rozdelí reťazec na časti podľa zadaných oddeľovacích znakov a výsledné reťazce zapíše do poľa. Prvý parameter ukladá pôvodný reťazec, druhý parameter obsahuje reťazec obsahujúci oddeľovač, tretí parameter určuje, či sa má zapisovať do poľa prázdne riadky(predvolené Pravda).

Príklad 22. Predpokladajme, že máme reťazec obsahujúci čísla oddelené symbolom ";", získajme z reťazca pole čísel.

Reťazec = "1; 2; 3"; Pole = StrSplit(String, ";"); For Count = 0 By Array.Quantity() - 1 Loop Attempt Array[Count] = Number(Ablp(Array[Count])); Pole výnimiek[W] = 0; EndTry EndCycle;

V dôsledku vykonania sa získa pole s číslami od 1 do 3.

StrConnect

StrConnect(<Строки>, <Разделитель>) . Skonvertuje pole reťazcov z prvého parametra na reťazec obsahujúci všetky prvky poľa pomocou oddeľovača špecifikovaného v druhom parametri.

Príklad 23. Pomocou poľa čísel z predchádzajúceho príkladu získajte pôvodný reťazec.

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

Realizované vo verzii 8.3.6.1977.

Rozšírili sme sadu funkcií pre prácu s reťazcami. Urobili sme to preto, aby sme vám poskytli pokročilejšie nástroje na analýzu údajov reťazca. Nové funkcie budú pohodlné a užitočné v technologických úlohách analýzy textu. V úlohách súvisiacich s analýzou textu, ktorý obsahuje údaje vo formátovanej forme. Môže ísť o analýzu niektorých súborov prijatých zo zariadenia, alebo napríklad o analýzu technologického denníka.

Všetky akcie, ktoré nové funkcie vykonávajú, ste mohli vykonávať predtým. S viac či menej komplexné algoritmy napísané vo vloženom jazyku. Nové funkcie vám teda nedávajú zásadne nové príležitosti. Umožňujú vám však znížiť množstvo kódu, urobiť kód jednoduchším a zrozumiteľnejším. Okrem toho vám umožňujú urýchliť vykonávanie akcií. Pretože funkcie implementované v platforme fungujú, samozrejme, rýchlejšie ako podobný algoritmus napísaný vo vstavanom jazyku.

Funkcia formátovania StrTemplate()

Táto funkcia nahrádza parametre do reťazca. Potreba takejto konverzie často vzniká napríklad pri zobrazovaní varovných správ. Syntax tejto funkcie je nasledovná:

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

<Шаблон>je reťazec, v ktorom sa majú nahradiť reprezentácie parametrov.

<Значение1> , ... <Значение10>- toto sú parametre (maximum - desať), ktorých reprezentácie je potrebné nahradiť do reťazca.

Ak chcete zadať konkrétne miesto v šablóne, na ktorom chcete vykonať nahradenie, musíte použiť značky v tvare %1, ... %10. Počet značiek zahrnutých v šablóne a počet parametrov obsahujúcich hodnoty sa musia zhodovať.

Napríklad výsledok vykonania takéhoto operátora:

bude tam riadok:

Chyba údajov v riadku 2 (vyžaduje typ dátumu)

Funkcia reťazca StrCompare()

Táto funkcia necitlivo porovnáva veľkosť dvoch reťazcov. Napríklad takto:

Pred použitím objektu ValueComparison môžete vykonať rovnakú akciu:

Používanie novej funkcie však vyzerá jednoduchšie. A okrem toho funkcia na rozdiel od objektu Value Compare funguje ako v tenkom, tak aj vo webovom klientovi.

Funkcie reťazcov StrBeginsC(), StrEndsTo()

Tieto funkcie určujú, či reťazec začína určeným podreťazcom alebo či reťazec končí určeným podreťazcom. Algoritmus týchto funkcií nie je ťažké implementovať do vstavaného jazyka, ale ich prítomnosť vám umožňuje písať čistejší a zrozumiteľnejší kód. A fungujú rýchlejšie.

Napríklad je vhodné ich použiť v príkaze If:

Funkcie na prácu s reťazcami StrSplit(), StrJoin()

Tieto funkcie rozdeľujú reťazec na časti podľa zadaného oddeľovača. Alebo naopak, spoja niekoľko riadkov do jedného, ​​pričom medzi ne vložia vybraný oddeľovač. Sú vhodné na vytváranie alebo analýzu protokolov, technologického denníka. Napríklad záznam technologického denníka môžete jednoducho rozložiť na časti vhodné pre ďalšiu analýzu:

Funkcia práce s reťazcami StrFind()

Namiesto starej funkcie Find() sme implementovali Nová funkcia, ktorý má ďalšie funkcie:

  • Hľadať v rôznych smeroch (od začiatku, od konca);
  • Vyhľadajte zo zadanej pozície;
  • Vyhľadajte výskyt so zadaným číslom (druhý, tretí atď.).

V skutočnosti duplikuje možnosti starej funkcie. Deje sa tak s cieľom zachovať kompatibilitu s modulmi zostavenými v starších verziách. Odporúča sa už nepoužívať starú funkciu Find().

Nižšie je uvedený príklad použitia nových možností vyhľadávania. Spätné vyhľadávanie je užitočné, keď potrebujete posledný kus formalizovaného reťazca, ako je napríklad úplný názov súboru v adrese URL. A vyhľadávanie zo zadanej pozície pomáha v prípadoch, keď potrebujete hľadať v známom fragmente, a nie v celom reťazci.

String je jedným z primitívnych dátových typov v systémoch 1C:Enterprise 8. Premenné s typom riadok obsahovať text.

Zadajte hodnoty premenných riadok sú uvedené v úvodzovkách. Je možné pridať niekoľko premenných tohto typu.

Per1 = "Slovo 1" ;
Per2 = "Slovo 2" ;
Per3 = Per1 + " " + Per2 ;

Nakoniec Per3 bude záležať" Slovo 1 Slovo 2″.

Systémy 1C:Enterprise 8 navyše poskytujú funkcie pre prácu s reťazcami. Zvážte hlavné:

EnterString(<Строка>, <Подсказка>, <Длина>, <Многострочность>) — funkcia je určená na zobrazenie dialógového okna, v ktorom môže používateľ zadať hodnotu typ premennej Linka. Parameter <Строка> je povinný a obsahuje názov premennej, do ktorej sa zadaný reťazec zapíše. Parameter <Подсказка> nepovinný je názov dialógového okna. Parameter <Длина> voliteľné, ukazuje maximálna dĺžka vstupný reťazec. Predvolená hodnota je nula, čo znamená neobmedzenú dĺžku. Parameter <Многострочность> voliteľné. Určuje režim viacriadkového zadávania textu: True — zadávanie viacriadkového textu s oddeľovačmi riadkov; False – Zadajte jednoduchý reťazec.

Je možné zadať reťazec a so znalosťou kódu znaku v Unicode:

Symbol(<КодСимвола>) — Kód sa zadáva ako číslo.

Letter= Symbol(1103 ) ; // Ja

Existuje aj inverzná funkcia, ktorá vám umožní zistiť kód znaku.

Kód symbolu(<Строка>, <НомерСимвола>) — Vráti číslo Unicode zadaného znaku ako číslo.

Funkcie prevodu malých a veľkých písmen:

VReg(<Строка>) - Prevedie všetky znaky v reťazci na veľké písmená.

HReg(<Строка>) - Prevedie všetky znaky v reťazci na malé písmená.

TReg(<Строка>) - konvertuje všetky znaky reťazca na veľkosť písmen. To znamená, že prvé písmená vo všetkých slovách sa skonvertujú na veľké a zvyšné písmená sa skonvertujú na malé.

Funkcie na vyhľadávanie a nahradzovanie znakov v reťazci:

Nájsť(<Строка>, <ПодстрокаПоиска>) - nájde číslo znaku výskytu hľadaného podreťazca. Napríklad:

Nájsť ("String" , "oko" ) ; // 4

StrFind(<Строка>, <ПодстрокаПоиска>, <НаправлениеПоиска>, <НачальнаяПозиция>, <НомерВхождения>) — nájde číslo znaku výskytu hľadaného podreťazca, číslo výskytu je uvedené v príslušnom parametri. V tomto prípade vyhľadávanie začína od znaku, ktorého číslo je uvedené v parametri StartPosition. Vyhľadávanie je možné od začiatku alebo od konca reťazca. Napríklad:

Položka číslo4= StrFind( "obrana", "o" , Smer hľadania. Najprv 1, 4); // 7

StrReplace(<Строка>, <ПодстрокаПоиска>, <ПодстрокаЗамены>) Vyhľadá všetky výskyty hľadaného podreťazca v zdrojovom reťazci a nahradí ho náhradným podreťazcom.

StrReplace("String" , "oko" , "" ) ; // Stránka

Prázdny riadok (<Строка>) - skontroluje, či reťazec neobsahuje významné znaky. Ak neexistujú žiadne alebo žiadne významné znaky, vráti sa hodnota Pravda. Inak - Klamať.

StrNumberOccurrences(<Строка>, <ПодстрокаПоиска>) – vypočíta počet výskytov hľadaného podreťazca v zdrojovom reťazci.

StrNumberOccurrences ( "Študovať, študovať a ešte raz študovať", "študovať" , "" ) ; // 3

StrTemplate(<Строка>, <ЗначениеПодстановки1>…<ЗначениеПодстановкиN> — nahradí parametre do reťazca číslom. Reťazec musí obsahovať substitučné značky v tvare: "%1..%N". Číslovanie značiek začína od 1. Ak je hodnota parametra Nedefinované, prázdny reťazec je nahradený.

StrPattern ( "Možnosť 1 = %1, možnosť 2 = %2", "1" , "2" ) ; // Parameter 1= 1, Parameter 2 = 2

Funkcie konverzie reťazcov:

Lev(<Строка>, <ЧислоСимволов>) vráti prvé znaky reťazca.

Správny(<Строка>, <ЧислоСимволов>) - vráti posledné znaky reťazca.

streda(<Строка>, <НачальныйНомер>, <ЧислоСимволов>) - vráti reťazec dĺžky<ЧислоСимволов>, začínajúc symbolom<НачальныйНомер>.

Abbr(<Строка>) skráti nevýznamné znaky naľavo od prvého významného znaku v reťazci.

abbr(<Строка>) - odreže nepodstatné znaky vpravo od posledného významného znaku v reťazci.

Abbrl(<Строка>) - orezáva nevýznamné znaky vľavo od prvého významného znaku v reťazci a vpravo od posledného významného znaku v reťazci.

StrGetString(<Строка>, <НомерСтроки>) – získa reťazec viacriadkového reťazca podľa čísla.

Ďalšie vlastnosti:

StrLength(<Строка>) - vráti počet znakov v reťazci.

StrNumber of Lines(<Строка>) - vráti počet riadkov vo viacriadkovom reťazci. Riadok sa považuje za nový, ak je oddelený od predchádzajúceho riadku znakom nového riadku.

StrCompare(<Строка1>, <Строка2> ) - necitlivo porovnáva veľkosť písmen dvoch reťazcov. Funkcia funguje ako objekt Porovnávanie hodnôt. Vrátenie:

  • 1 - ak je prvý riadok väčší ako druhý
  • -1 - ak je druhý riadok väčší ako prvý
  • 0 - ak sú reťazce rovnaké

StrCompare("Prvý riadok" , "Druhý riadok" ) ; // jeden

Existuje niekoľko mechanizmov na prácu s reťazcami v dopytoch 1C. Najprv je možné pridať reťazce. Po druhé, podreťazec môže byť prevzatý z reťazca. Po tretie, reťazce možno porovnávať, a to aj podľa vzoru. To je asi tak všetko, čo môžete so šnúrkami robiť.

Pridávanie reťazcov

Operátor „+“ sa používa na pridávanie reťazcov do dotazu. Môžete pridať iba reťazce obmedzenej dĺžky.

SELECT "Názov: " + Dodávatelia.Názov AS Stĺpec 1 FROM Adresár.Dodávatelia AKO Dodávatelia WHERE Dodávatelia.Odkaz = &Odkaz

Funkcia podreťazca

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

Analóg funkcie Environment() from objektový model. Funkciu Substring() možno použiť na údaje typu reťazec a umožňuje vám vybrať fragment <Строки> , začínajúc číselným znakom <НачальнаяПозиция> (znaky v reťazci sú číslované od 1) a dĺžku <Длина> postavy. Výsledok vyhodnotenia funkcie má reťazec typu s premenlivou dĺžkou a dĺžka sa bude považovať za neobmedzenú, ak <Строка> má neobmedzenú dĺžku a parametre <Длина> nie je konštantná alebo väčšia ako 1024.

Ak je dĺžka reťazca menšia ako špecifikovaná v druhom parametri, funkcia vráti prázdny reťazec.

Pozor! Použitie funkcie SUBSTRING() na konverziu reťazcov neobmedzenej dĺžky na reťazce s obmedzenou dĺžkou sa neodporúča. Namiesto toho je lepšie použiť operátor obsadenia EXPRESS().

Funkcia podobná

Ak sa potrebujete uistiť, že strunová podpera sa zhoduje určité kritériá porovnávame to:

SELECT Counterparties.Name AS Stĺpec 1 FROM Directory.Counterparties AS Counterparties WHERE Counterparties.Name = "Gazprom"

Ale čo ak je potrebné jemnejšie porovnanie? Nielen pre rovnosť alebo nerovnosť, ale pre podobnosť s určitým vzorom? Presne na to bola vytvorená funkcia LIKE.

LIKE – Operátor na kontrolu, či je reťazec podobný vzoru. Analóg LIKE v SQL.

Operátor LIKE vám umožňuje porovnať hodnotu výrazu zadaného naľavo od neho s reťazcom šablóny zadaným napravo. Hodnota výrazu musí byť typu string. Ak sa hodnota výrazu zhoduje so šablónou, výsledok operátora bude TRUE, inak bude FALSE.

Nasledujúce znaky v reťazci šablóny sú servisné znaky a majú iný význam ako znak reťazca:

  • % (percento): sekvencia obsahujúca ľubovoľný počet ľubovoľných znakov;
  • _ (podčiarkovník): jeden ľubovoľný znak;
  • […] (jeden alebo viac znakov v hranatých zátvorkách): každý jeden znak uvedený v hranatých zátvorkách. Enumerácia môže obsahovať rozsahy, ako napríklad a-z, čo znamená akýkoľvek znak v rozsahu, vrátane koncov rozsahu;
  • [^…] (v hranatých zátvorkách znak záporu, za ktorým nasleduje jeden alebo viacero znakov): Akýkoľvek jednotlivý znak okrem tých, ktoré sú uvedené za znakom záporu.

Akýkoľvek iný symbol znamená sám seba a nenesie žiadnu dodatočnú záťaž. Ak je potrebné napísať jeden z uvedených znakov ako samotný, potom mu musí predchádzať<Спецсимвол>. seba<Спецсимвол>(akýkoľvek vhodný znak) je definovaný v tom istom príkaze za kľúčové slovoŠPECIÁLNY SYMBOL.

TO základné schopnosti programovacie jazyky zvyčajne zahŕňajú prácu s číslami a reťazcami. Zvyčajne sú tieto funkcie pevne zapojené do kódu kompilátora (alebo sú implementované „základné“ triedy programovacieho jazyka).

V 1C sú možnosti práce s reťazcami naprogramované v samotnej platforme. Dnes zvážime funkcie práce s reťazcami 1C v programoch vo vstavanom jazyku 1C.

Hodnota riadku 1C

1. Začnime tým najjednoduchším. Vytvorenie premennej a priradenie konštantnej hodnoty reťazca v 1C vyzerá takto:

Premenná = "Ahoj svet!";

Ak chcete zadať znak úvodzovky v konštantnej hodnote reťazca 1C, musíte ho zdvojnásobiť ""

Premenná = "Ahoj, "svet""!";

2. Zalomenie riadku 1C môže byť špecifikované dvoma spôsobmi naraz. Prvým je použitie symbolu |

Premenná = "Dobrý deň,
| mier! ";

Druhým je použitie systémového enum Symbols. Umožňuje vám pridať zalomenie riadku 1C a ďalšie netlačiteľné znaky, ako napríklad TAB.

Premenná = "Ahoj" + Symboly.ps + "mier!";

3. Konfigurácie v 1C môžu byť vyvinuté nielen pre jeden jazyk (ruština, angličtina alebo iný) - ale súčasne pre niekoľko jazykov. V tomto prípade sa aktuálne používaný jazyk vyberie v spodnej časti okna 1C.

Zoznam jazykov sa nachádza v konfiguračnom okne vo vetve Všeobecné/Jazyky. Každý jazyk má krátky identifikátor ako napr en alebo Ing.

Je jasné, že pri programovaní takejto konfigurácie môžu byť linky 1C aj viacjazyčné. Na tento účel je možné vytvoriť takýto riadok 1C zadaním cez; možnosti podľa ID jazyka:

Premenná = "ru=""Ahoj, svet!""; en=""Ahoj svet! """;

Ak použijete takto vytvorenú čiaru 1C ako obvykle, bude to, čo je v nej napísané. Aby ho systém rozdelil na dve možnosti a použil požadovanú, musíte použiť funkciu NSt():

//správne pre dvojjazyčné konfigurácie
Správa(NStr(Premenná));

Rekvizity s líniou typu 1C

Nevyhnutnou podmienkou je pole adresára / dokumentu 1C. Od premennej v programe v jazyku 1C sa líši tým, že jej typ je presne uvedený pri atribúte (číslo, reťazec 1C atď.). Ak si potrebujete oprášiť, čo sú to rekvizity, pozrite si návod na .

Ak zadáte typ atribútu - riadok 1C, musíte dodatočne zadať parametre.

Reťazce 1C majú neobmedzenú dĺžku (označuje sa ako dĺžka = 0) a obmedzenú dĺžku, ktorá označuje presný počet znakov. 1C reťazce neobmedzenej dĺžky sú uložené v samostatnej SQL tabuľke, takže ich použitie je menej produktívne ako obmedzené.

Preto má použitie 1C strún neobmedzenej dĺžky svoje obmedzenia - nie je možné ich použiť všade. Napríklad nie je možné ako číslo dokladu, kód adresára, meranie.

Práca s čiarami 1C

Pre prácu so strunami je v platforme 1C zabudovaných niekoľko funkcií.

  • AbbrLP("Neuveriteľné, ale pravdivé!")
    Odstraňuje nadbytočné medzery z reťazca 1C. Môže sa tiež použiť na prevod akéhokoľvek typu na reťazec 1C (napríklad čísla).
  • Premenná = "Vasya" + Abbrl("plus") + "Olya"; //bude "Vasya plus Olya"
    Príklad sčítania niekoľkých hodnôt reťazca 1C. Výsledkom je jeden riadok 1C.
  • Premenná = Lev("Hudba", 2); // bude "Mu"
    Premenná = Avg("Hudba", 2, 2); // bude "ps"
    Premenná = Práva("Hudba", 2); // bude "ka"
    Rôzne možnosti získania podreťazca z reťazca 1C.
  • Premenná = Nájsť ("Hudba", "ps"); //bude 3
    Vyhľadajte podreťazec v reťazci 1C, začínajúci znakom 1.
  • Premenná = StrLength("Hudba"); //bude 6
    Vráti počet znakov v reťazci 1C.
  • Upozorniť("Ahoj") //v okne so správou v spodnej časti okna 1C
    alert("ahoj") //vyskakovacie dialógové okno
    Status("Ahoj") //v riadku zobrazenia stavu vľavo dole
    .

Prineste predmety na riadok 1C

Ako viete, v súčasnosti je najpopulárnejším formátom na výmenu štruktúrovaných informácií XML. Dokonca Najnovšia verzia PANI Office Word a Excel ukladajú súbory v tomto formáte (docx a xlsx, zmeňte príponu na zip, otvorte v archivátore).

Platforma 1C na výmenu údajov poskytuje niekoľko možností, z ktorých hlavnou je tiež XML.

1. Najjednoduchším spôsobom je použitie funkcie ShortLP() alebo String(). V texte dopytu môžete použiť funkciu REPRESENTATION(). Výsledok ich akcie je rovnaký – používateľovi vygenerujú reťazcovú reprezentáciu ľubovoľného objektu 1C.

Pre predvolený adresár to bude jeho názov. V prípade dokumentu názov dokumentu, číslo a dátum.

2. Akýkoľvek objekt 1C (s obmedzeniami) je možné previesť do XML a naopak. Proces konverzie sa nazýva serializácia.

ViewStringXml = XMLString(Hodnota); //získať XML z hodnoty 1C
Hodnota1С = XMLValue(Typ("Katalógová referencia.Nomenklatúra"),ViewStringXml); //získajte hodnotu 1C z reťazca XML, musíte zadať typ 1C, ktorý sa má prijať

3. Existuje natívny spôsob platformy 1C na konverziu akéhokoľvek objektu 1C na reťazec. Prešiel z verzie 1C 7.7. Tomuto formátu iné programy nerozumejú, ale rozumie inému 1C, čo uľahčuje jeho používanie na výmenu medzi databázami 1C.

Reťazec = ValueInStringInt(Value1S); //získame reťazec 1C z hodnoty 1C
ValueToFile("C:\MyFile.txt", Hodnota1C); //ďalšia možnosť, dostaneme súbor s uloženým reťazcom od hodnoty 1C
Hodnota1C = ValueFromStringInt(String); //späť z riadku 1C
Value1C = ValueFromFile("C:\MyFile.txt"); //späť zo súboru

Úprava riadkov 1C vo formulári

Okrem práce s 1C reťazcami v programe 1C by som bol samozrejme rád, keby ich používateľ mohol upravovať. Existuje na to niekoľko možností:

1. Najjednoduchším spôsobom je vyžiadať si vstup linky 1C na požiadanie. Táto metóda sa používa pri výučbe programovania 1C, v živote sa používa oveľa menej často (ale používa sa!).

Premenná = "";
String = EnterValue(Premenná, "Zadajte celé meno");

2. Na zobrazenie detailov objektu 1C (adresár / dokument) alebo detailov formulára (pozri) sa najčastejšie používa vstupné pole. Toto je najbežnejší nástroj v 1C pre používateľa na prácu s poľami úprav.

3. Možnosti vstupného poľa je možné rozšíriť (pozrite si vlastnosti vstupného poľa, kliknite naň pravým tlačidlom myši, pre bližšie informácie):

  • Začiarkavacie políčko Režim viacriadkovej úpravy
  • Začiarkavacie políčko Rozšírené úpravy (dostupné, ak je začiarknuté predchádzajúce políčko)
  • Zaškrtávacie políčko Režim hesla (pozri ).

4. Ak by vám nestačili všetky možnosti vstupného poľa, je tu zabudovaný editor. Pre pridanie do formulára je potrebné pridať Pole v menu Formulár / Vložiť ovládací prvok textový dokument. V jeho vlastnostiach môžete určiť režim jeho fungovania - vlastnosť Extension.

Pole textového dokumentu nemožno prepojiť priamo s údajmi. Do obsluhy udalosti formulára OnOpening() je potrebné napísať nasledujúcu funkciu (pozri ):

FormElements.ElementNameTextDocumentField.SetText(StringValue); //tu, ValueString je text prijatý napríklad z atribútu

A v obslužnom programe uloženia - napríklad v tlačidle Uložiť - pridajte uloženie:

ValueString = FormElements.ElementNameTextDocumentField.GetText(); //ValueString tu sú rekvizity, kde uložíme hodnotu

5. Vo verzii 1C 8.2.11, v riadené formuláre, objavilo sa nová príležitosť riadková reprezentácia 1C - Pole formátovaného dokumentu.


Podobne ako pole textového dokumentu je potrebné nastaviť pri otváraní a zapisovať pri ukladaní textu sami pomocou programu.

  • V objekte 1C, ktorého formu vytvárame (referenčná kniha, dokument, spracovanie atď.) - pridajte atribút s typom Uloženie hodnoty
  • Vo funkcii OnReadOnServer() nastavte text z atribútu

    //tu Requisite je pridaný atribút objektu 1C
    //tu FormattedDocument je názov poľa vo formulári úprav
    &Na serveri

    FormattedDocument = CurrentObject.Attributes.Get();
    EndProcedure

  • Vo funkcii BeforeWriteOnServer() alebo stlačením tlačidla napíšte text z poľa

    &Na serveri
    Procedúra OnReadingOnServer(CurrentObject)
    CurrentObject.Attributes = NewValueStorage(FormattedDocument);
    EndProcedure



Páčil sa vám článok? Zdieľaj to