Kako postaviti pametne telefone i računala. Informativni portal
  • Dom
  • Windows Phone
  • Odsijeca liniju do znaka 1c. Nove funkcije za rad sa nizovima

Odsijeca liniju do znaka 1c. Nove funkcije za rad sa nizovima

Postoji nekoliko mehanizama za rad sa nizovima u 1C upitima. Prvo se mogu dodati linije. Drugo, možete uzeti podniz iz niza. Treće, nizovi se mogu usporediti, uključujući i uzorak. To je vjerojatno sve što se može učiniti sa žicama.

Dodavanje niza

Za dodavanje redaka u upitu koristi se operacija “+”. Možete dodati samo nizove ograničene duljine.

ODABERITE "Naziv: " + Ime druge strane AS Stupac 1 FROM Imenik druge strane GDJE Veza = &Veza

Funkcija podniza

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

Analog funkcije Environment() iz objektnog modela. Funkcija Substring() može se primijeniti na podatke niza i omogućuje odabir fragmenta <Строки> , počevši od broja simbola <НачальнаяПозиция> (znakovi u retku su numerirani počevši od 1) i duljina <Длина> likovi. Rezultat proračuna funkcije ima tip niza promjenjive duljine, a duljina će se smatrati neograničenom ako <Строка> ima neograničenu duljinu i parametar <Длина> nije konstanta niti veća od 1024.

Ako je duljina niza manja od navedene u drugom parametru, funkcija će vratiti prazan niz.

Pažnja! Ne preporučuje se korištenje funkcije SUBSTRING() za pretvaranje nizova neograničene duljine u nizove ograničene duljine. Umjesto toga, bolje je koristiti cast operator EXPRESS().

Funkcija Slična

Ako trebamo provjeriti zadovoljava li atribut niza određene kriterije, uspoređujemo ga:

SELECT Counterparties Stupac 1 FROM Counterparties AS Counterparties Naziv = "Gazprom".

Ali što ako trebate suptilniju usporedbu? Ne samo jednakost ili nejednakost, nego sličnost s određenim uzorkom? Upravo je za to stvorena funkcija SIMILAR.

LIKE — Operator za provjeru sličnosti niza s uzorkom. Analog LIKE-a u SQL-u.

Operator SIMILAR omogućuje vam da usporedite vrijednost izraza navedenog lijevo od njega s nizom uzoraka navedenim desno. Vrijednost izraza mora biti tipa string. Ako vrijednost izraza odgovara uzorku, rezultat operatora bit će TRUE, inače će biti FALSE.

Sljedeći znakovi u nizu uzorka su službeni znakovi i imaju različito značenje od znakova niza:

  • % (postotak): niz koji sadrži bilo koji broj proizvoljnih znakova;
  • _ (podvlaka): jedan proizvoljan znak;
  • […] (jedan ili više znakova u uglatim zagradama): svaki pojedinačni znak naveden unutar uglatih zagrada. Nabrajanje može sadržavati raspone, na primjer a-z, što znači proizvoljni znak uključen u raspon, uključujući krajeve raspona;
  • [^...] (u uglatim zagradama znak negacije iza kojeg slijedi jedan ili više znakova): svaki pojedinačni znak osim onih navedenih nakon znaka negacije.

Bilo koji drugi simbol znači sam za sebe i ne nosi nikakvo dodatno opterećenje. Ako jedan od navedenih znakova treba biti napisan kao sam, tada mu mora prethoditi<Спецсимвол>. Sebe<Спецсимвол>(bilo koji prikladan znak) definiran je u istoj izjavi nakon ključne riječi SPECIAL CHARACTER.

Osnovne mogućnosti programskog jezika obično uključuju rad s brojevima i nizovima. Obično su ove značajke tvrdo kodirane u kod prevoditelja (ili su implementirane "osnovne" klase programskog jezika).

U 1C, sposobnost rada sa nizovima programirana je u samoj platformi. Danas ćemo pogledati značajke rada s 1C nizovima u programima na ugrađenom 1C jeziku.

Vrijednost linije 1C

1. Počnimo s najjednostavnijim. Stvaranje varijable i dodjeljivanje konstantne vrijednosti niza izgleda ovako u 1C:

Varijabla = "Zdravo, svijete!";

Ako trebate navesti znak navodnika u konstantnoj vrijednosti niza 1C, tada ga trebate udvostručiti ""

Varijabla = "Zdravo, svijete"!;

2. Prijelom retka 1C može se odrediti na dva načina odjednom. Prvi je korištenje simbola |

Varijabla = "Pozdrav,
| svijet! ";

Drugi je korištenje nabrajanja sustava simbola. Omogućuje vam dodavanje prijeloma redaka 1C i drugih znakova koji se ne ispisuju, kao što je TAB.

Varijabla = "Zdravo" + Simboli.PS + "mir!";

3. Konfiguracije u 1C mogu se razviti ne samo za jedan jezik (ruski, engleski ili drugi) - već istovremeno za nekoliko jezika. U ovom slučaju, trenutno korišteni jezik odabran je na dnu prozora 1C.

Popis jezika nalazi se u konfiguracijskom prozoru u grani General/Languages ​​​​. Svaki jezik ima kratki identifikator kao što je ru ili hrv.

Jasno je da kod programiranja takve konfiguracije 1C linije također mogu biti višejezične. Da biste to učinili, moguće je stvoriti takvu 1C liniju određivanjem kroz; opcije prema identifikatoru jezika:

Variable = "ru=""Zdravo, svijete! ""; en=""Zdravo, svijete! """;

Ako koristite ovako oblikovanu liniju 1C kao i obično, tada će biti ono što je u njoj napisano. Kako bi ga sustav podijelio u dvije opcije i koristio željenu, potrebno je koristiti NStr() funkciju:

//ispravno za dvojezične konfiguracije
Izvješće(NSr(varijabla));

Rekviziti sa strunom tipa 1C

Atribut je polje u imeniku/dokumentu 1C. Razlikuje se od varijable u programu u 1C jeziku po tome što je za atribut točno naznačen njegov tip (broj, 1C niz itd.). Ako trebate osvježiti svoje sjećanje o tome što je rekvizit, pogledajte lekciju dalje.

Ako navedete vrstu atributa - linija 1C, tada morate dodatno navesti parametre.

1C linije dolaze u neograničenoj duljini (označeno kao duljina = 0) i ograničenoj duljini, koja označava točan broj znakova. 1C redovi neograničene duljine pohranjuju se u zasebnu SQL tablicu, tako da je njihova upotreba manje produktivna od ograničenih.

Zato korištenje 1C nizova neograničene duljine ima svoja ograničenja - nije ih moguće koristiti svugdje. Na primjer, nije dopušten kao broj dokumenta, referentni kod ili mjera.

Rad s 1C nizovima

Postoji nekoliko ugrađenih funkcija 1C platforme za rad s nizovima.

  • AbbrLP ("Nevjerojatno, ali istinito!")
    Uklanja dodatne razmake iz retka 1C. Također se može koristiti za pretvaranje bilo koje vrste u 1C niz (na primjer, brojeve).
  • Varijabla = "Vasya" + AbbrLP(" plus") + "Olya"; //bit će "Vasya plus Olya"
    Primjer zbrajanja nekoliko vrijednosti niza 1C. Rezultat će biti jedna linija 1C.
  • Varijabla = Lev("Glazba", 2); //bit će "Mu"
    Varijabla = Medium("Glazba", 2, 2); //bit će "prijetnja"
    Varijabla = Prava("Glazba", 2); //bit će "ka"
    Razne opcije za dobivanje podniza iz niza 1C.
  • Varijabla = Find("Glazba", "zy"); //bit će 3
    Potražite podniz u nizu 1C, počevši od znaka 1.
  • Varijabla = StrLength("Glazba"); //bit će 6
    Vraća broj znakova u retku 1C.
  • Izvješće ("Hello") //u prozoru s porukom na dnu prozora 1C
    Upozorenje("Zdravo") //skočni dijaloški okvir
    Status("Hello") //u retku prikaza statusa dolje lijevo
    .

Dovođenje objekata na liniju 1C

Kao što znate, najpopularniji format za razmjenu strukturiranih informacija trenutno je XML. Čak i najnovija verzija MS Office Worda i Excela sprema datoteke u ovom formatu (docx i xlsx, odnosno, mijenjaju ekstenziju u zip, otvaraju u arhiveru).

1C platforma za razmjenu podataka nudi nekoliko opcija, od kojih je glavna također XML.

1. Najjednostavnija metoda je korištenje funkcije Abbreviation() ili String(). Možete koristiti funkciju REPRESENTATION() u tijelu zahtjeva. Rezultat njihove akcije je isti - oni generiraju prikaz niza bilo kojeg 1C objekta za korisnika.

Za imenik, prema zadanim postavkama ovo će biti njegov naziv. Za dokument – ​​naziv dokumenta, broj i datum.

2. Bilo koji 1C objekt (s ograničenjima) može se pretvoriti u XML i obrnuto. Proces pretvorbe naziva se serijalizacija.

StringViewXml = XMLString(Vrijednost); //dobijte XML iz 1C vrijednosti
Vrijednost1C = XMLVrijednost(Tip("Veza imenika.Nomenklatura"),TipStringXml); //dobijte 1C vrijednost iz XML niza, morate navesti tip 1C koji treba biti primljen

3. Postoji vlastiti način 1C platforme za pretvaranje bilo kojeg 1C objekta u niz. Migrirao je iz verzije 1C 7.7. Ovaj format ne razumiju drugi programi, ali drugi 1C ga razumiju, što olakšava njegovu upotrebu za razmjenu između 1C baza podataka.

Redak = ValueInRowInt(Value1C); //dobi niz 1C iz vrijednosti 1C
ValueVFile("C:\MyFile.txt", Vrijednost1C); //druga opcija, dobivamo datoteku sa spremljenim nizom iz 1C vrijednosti
Vrijednost1C = VrijednostIzStringInt(Niz); //natrag s linije 1C
Vrijednost1C = Datoteka Vrijednost("C:\MojaDatoteka.txt"); //nazad iz datoteke

Uređivanje 1C linija na obrascu

Osim rada s nizovima 1C u programu na jeziku 1C, naravno da bih želio da ih korisnik može uređivati. Za to postoji nekoliko mogućnosti:

1. Najlakši način je zatražiti unos 1C linije na zahtjev. Ova metoda se koristi pri podučavanju 1C programiranja; u životu se koristi mnogo rjeđe (ali se koristi!).

Varijabla = "";
Redak = EnterValue(varijabla, "Unesite puno ime");

2. Za prikaz pojedinosti 1C objekta (imenik/dokument) ili pojedinosti obrasca (vidi), najčešće se koristi polje za unos. Ovo je najčešći alat u 1C za rad korisnika s poljima za uređivanje.

3. Mogućnosti polja za unos mogu se proširiti (pogledajte svojstva polja za unos, desni klik na njega, više detalja):

  • Potvrdni okvir Višeredni način uređivanja
  • Potvrdni okvir za napredno uređivanje (dostupno ako je potvrđen prethodni potvrdni okvir)
  • Potvrdni okvir Način zaporke (pogledajte).

4. Ako vam sve mogućnosti polja za unos nisu dovoljne, postoji ugrađeni uređivač. Da biste ga dodali u obrazac, trebate dodati polje tekstualnog dokumenta u izbornik Form/Insert Control. U njegovim svojstvima možete odrediti način rada – svojstvo Extension.

Polje tekstualnog dokumenta ne može se izravno povezati s podacima. Potrebno je napisati funkciju u OnOpen() obradi događaja obrasca (pogledajte):

Elementi obrasca.ImeElementaTekstDokumentPolje.PostaviTekst(StringValue); //ovdje je ValueString tekst primljen, na primjer, od atributa

A u obrađivaču spremanja - na primjer, u gumbu Spremi - dodajte spremanje:

ValueString = FormElements.ElementNameTextDocumentField.GetText(); //Vrijednost Redak ovdje je atribut u koji spremamo vrijednost

5. U 1C verziji 8.2.11, u upravljanim obrascima, pojavila se nova opcija za predstavljanje 1C linije - polje Formatirani dokument.


Slično polju tekstualnog dokumenta, morate ga postaviti prilikom otvaranja i zapisati kada ga sami spremate pomoću programa.

  • U 1C objekt čiji obrazac kreiramo (imenik, dokument, obrada itd.) - dodajte atribut s tipom Pohrana vrijednosti
  • U funkciji OnReadOnServer() postavljamo tekst iz atributa

    //ovdje je atribut dodani atribut 1C objekta
    //ovdje FormattedDocument je naziv polja na obrascu za uređivanje
    &Na poslužitelju

    FormattedDocument = CurrentObject.Attributes.Get();
    Kraj postupka

  • U funkciji BeforeWritingOnServer() ili pomoću gumba ispisat ćemo tekst iz polja

    &Na poslužitelju
    Procedura prilikom čitanja na poslužitelju (trenutni objekt)
    CurrentObject.Props = NewValueStorage(FormattedDocument);
    Kraj postupka

Implementirano u verziji 8.3.6.1977.

Proširili smo skup funkcija dizajniranih za rad s nizovima. Učinili smo to kako bismo vam dali naprednije alate za raščlanjivanje podataka niza. Nove funkcije bit će prikladne i korisne u tehnološkim zadacima analize teksta. U zadacima koji se odnose na raščlanjivanje teksta koji sadrži podatke u oblikovanom obliku. To može biti analiza nekih datoteka primljenih od opreme ili, na primjer, analiza tehnološkog dnevnika.

Prije ste mogli izvoditi sve radnje koje izvode nove funkcije. Korištenje više ili manje složenih algoritama napisanih na ugrađenom jeziku. Stoga vam nove funkcije ne daju nikakve fundamentalno nove mogućnosti. Međutim, oni vam omogućuju smanjenje količine koda i čine ga jednostavnijim i razumljivijim. Osim toga, omogućuju vam da ubrzate izvršenje radnji. Budući da funkcije implementirane u platformu rade, naravno, brže od sličnog algoritma napisanog na ugrađenom jeziku.

Funkcija oblikovanja StrTemplate()

Ova funkcija zamjenjuje parametre u niz. Potreba za takvom pretvorbom često se javlja, primjerice, prilikom prikaza poruka upozorenja. Sintaksa ove funkcije je sljedeća:

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

<Шаблон>- ovo je niz u koji trebate zamijeniti prikaze parametara.

<Значение1> , ... <Значение10>- to su parametri (maksimalno deset), čiji se prikazi moraju zamijeniti u nizu.

Da biste označili određeno mjesto u predlošku na kojem želite izvršiti zamjenu, trebate koristiti markere kao što su %1, ... %10. Broj markera uključenih u predložak i broj parametara koji sadrže vrijednosti moraju se podudarati.

Na primjer, rezultat izvršavanja takvog operatora:

bit će redak:

Pogreška podataka u retku 2 (potrebna vrsta datuma)

Funkcija za rad sa stringovima StrCompare()

Ova funkcija uspoređuje dva niza na način koji ne razlikuje velika i mala slova. Na primjer, ovako:

Mogli biste izvršiti istu radnju ranije koristeći objekt Usporedba vrijednosti:

Međutim, korištenje nove značajke izgleda lakše. Osim toga, funkcija, za razliku od objekta usporedbe vrijednosti, radi i na tankom klijentu i na web klijentu.

Funkcije za rad sa nizovima StrStartsWith(), StrEndsAt()

Ove funkcije određuju počinje li niz određenim podnizom ili završava li niz navedenim podnizom. Algoritam za ove funkcije nije teško implementirati u ugrađeni jezik, ali njihova prisutnost omogućuje pisanje čišćeg i razumljivijeg koda. I rade brže.

Na primjer, prikladni su za korištenje u If izjavi:

Funkcije za rad sa stringovima StrDivide(), StrConnect()

Ove funkcije dijele niz na dijelove pomoću određenog graničnika. Ili obrnuto, kombiniraju nekoliko redaka u jedan, umetajući odabrani razdjelnik između njih. Pogodni su za izradu ili analizu dnevnika i tehnoloških dnevnika. Na primjer, možete lako raščlaniti unos tehnološkog dnevnika na dijelove prikladne za daljnju analizu:

Funkcija za rad sa stringovima StrFind()

Umjesto stare funkcije Find(), implementirali smo novu funkciju koja ima dodatne mogućnosti:

  • Traži u različitim smjerovima (od početka, od kraja);
  • Pretraživanje s određene pozicije;
  • Potražite pojavu s određenim brojem (drugi, treći itd.).

Zapravo, duplicira mogućnosti stare funkcije. Ovo je učinjeno kako bi se održala kompatibilnost s modulima kompajliranim u starijim verzijama. Preporuča se da više ne koristite staru funkciju Find().

Dolje je primjer korištenja novih mogućnosti pretraživanja. Obrnuto pretraživanje je korisno kada trebate posljednji fragment formaliziranog niza, kao što je puni naziv datoteke u URL-u. A pretraživanje s određenog položaja pomaže u slučajevima kada trebate pretraživati ​​u poznatom fragmentu, a ne u cijelom retku.

String je jedan od primitivnih tipova podataka u sustavima 1C:Enterprise 8 Varijable s tipom crta sadrže tekst.

Upišite vrijednosti varijable crta nalaze se u dvostrukim navodnicima. Može se dodati nekoliko varijabli ove vrste.

Per1 = "Riječ 1" ;
Per2 = "Riječ 2" ;
Per3 = Per1 + " " + Per2;

Eventualno Per3 značit će " Riječ 1 Riječ 2″.

Osim toga, sustavi 1C:Enterprise 8 pružaju funkcije za rad s nizovima. Pogledajmo glavne:

Unesite niz (<Строка>, <Подсказка>, <Длина>, <Многострочность>) — funkcija je dizajnirana za prikaz dijaloškog okvira u kojem korisnik može odrediti vrijednost varijable tipa Crta. Parametar <Строка> je obavezan i sadrži naziv varijable u koju će se upisati upisani niz. Parametar <Подсказка> izborno - ovo je naslov dijaloškog okvira. Parametar <Длина> izborno, prikazuje maksimalnu duljinu ulaznog niza. Zadana vrijednost je nula, što znači neograničenu duljinu. Parametar <Многострочность> neobavezan. Definira višeredni način unosa teksta: True—višeredni unos teksta s razdjelnicima redaka; False - unesite jednostavan niz.

Možete unijeti niz ako znate kôd znaka u Unicodeu:

Simbol(<КодСимвола>) — šifra se unosi kao broj.

Slovo= Simbol(1103) ; // I

Postoji i inverzna funkcija koja vam omogućuje da saznate kod simbola.

SimbolKod(<Строка>, <НомерСимвола>) — vraća Unicode broj navedenog znaka kao broj.

Funkcije pretvorbe velikih i malih slova teksta:

VReg(<Строка>) — Pretvara sve znakove u nizu u velika slova.

NReg(<Строка>) — Pretvara sve znakove u nizu u mala slova.

TReg(<Строка>) — pretvara sve znakove u nizu u velika i mala slova. To jest, prva slova u svim riječima pretvaraju se u velika slova, a preostala slova u mala slova.

Funkcije za traženje i zamjenu znakova u nizu:

Pronaći(<Строка>, <ПодстрокаПоиска>) — pronalazi broj znaka pojavljivanja podniza za pretraživanje. Na primjer:

Pronađi ("String" , "oka" ) ; // 4

StrFind(<Строка>, <ПодстрокаПоиска>, <НаправлениеПоиска>, <НачальнаяПозиция>, <НомерВхождения>) — pronalazi broj znaka pojavljivanja podniza za pretraživanje, broj pojavljivanja je naznačen u odgovarajućem parametru. U ovom slučaju, pretraga počinje sa znakom čiji je broj naveden u parametru Početni položaj. Pretraživanje je moguće od početka ili od kraja niza. Na primjer:

Broj4 pojavljivanja = Str Nađi ( "defanzivnost", "o" ,Smjer pretraživanja. Od početka, 1, 4); // 7

StrReplace(<Строка>, <ПодстрокаПоиска>, <ПодстрокаЗамены>) – pronalazi sva pojavljivanja traženog podniza u izvornom nizu i zamjenjuje ga zamjenskim podnizom.

StrReplace ("String" , "oka" , "" ) ; // Stranica

Prazna linija (<Строка>) – provjerava značajne znakove u nizu. Ako nema značajnih znakova ili uopće nema znakova, vrijednost se vraća Pravi. Inače - Laž.

StrNumberOccurrences(<Строка>, <ПодстрокаПоиска>) – Izračunava broj pojavljivanja podniza za pretraživanje u izvornom nizu.

StrNumberOccurrences ( "Uči, uči i opet uči", "studija" , "" ) ; // 3

StrTemplate(<Строка>, <ЗначениеПодстановки1>…<ЗначениеПодстановкиN> — zamjenjuje parametre u nizu brojem. Red mora sadržavati oznake zamjene u obliku: “%1..%N”. Numeriranje markera počinje od 1. Ako vrijednost parametra Nedefiniran, zamjenjuje se prazan niz.

StrTemplate ( "Parametar 1 = %1, parametar 2 = %2", "1" , "2" ) ; // Parametar 1= 1, Parametar 2 = 2

Funkcije pretvorbe niza:

Lav(<Строка>, <ЧислоСимволов>) – vraća prve znakove niza.

Pravo(<Строка>, <ЧислоСимволов>) – vraća posljednje znakove niza.

Srijeda(<Строка>, <НачальныйНомер>, <ЧислоСимволов>) – vraća niz duljine<ЧислоСимволов>, počevši od simbola<НачальныйНомер>.

AbbrL(<Строка>) skraćuje nevažne znakove lijevo od prvog značajnog znaka u nizu.

skraćenica(<Строка>) — odsijeca beznačajne znakove desno od posljednjeg značajnog znaka u retku.

AbbrLP(<Строка>) – odsijeca beznačajne znakove lijevo od prvog značajnog znaka u retku i desno od posljednjeg značajnog znaka u retku.

StrGetString(<Строка>, <НомерСтроки>) – Dobiva višeredni niz prema broju.

Druge značajke:

StrLength(<Строка>) – vraća broj znakova u nizu.

StrNumberRow(<Строка>) – vraća broj redaka u nizu s više reda. Red se smatra novim ako je od prethodnog odvojen znakom novog retka.

StrUsporedi(<Строка1>, <Строка2> ) – uspoređuje dva niza na način koji ne razlikuje velika i mala slova. Funkcija radi kao objekt Usporedba vrijednosti. Povratak:

  • 1 - ako je prvi red veći od drugog
  • -1 - ako je drugi red veći od prvog
  • 0 - ako su nizovi jednaki

StrCompare("Prvi red" , "Drugi red" ) ; // 1

Najbolji članci na temu