1c Pronađite položaj u nizu. Opcije optimizacije su beskrajne

Pozdrav svima
Danas su me pitali prilikom ispisa dokumenta o provedbi, da ne ispišite prefiks dokumenta, zadatak je odlučio kako slijedi.

Napetost (broj, lav (broj, 3), "");

Kad sam pogledao u asistent za sintaksu pa mi se svidjelo što sam htjela pisati rad s redovima u "1c: Enterprise".

Linija u 1 ° C se odnosi na primitivnu vrstu podataka.

Ako pogledate 1C pomoć, vidjet ćemo sljedeći opis vrste linije (niz)
Vrijednost ovaj tip Sadrže niz u Unicode formatu proizvoljne duljine.
Ako se u svojim riječima o redovima ispada. String je konstanta koja se sastoji od različitih likova, uvijek je uokvirena navodnicima.

String zadataka
Žalba \u003d "hi putnik";

Više-line linije B. tipične konfiguracije Najčešće se stvara pomoću vertikalnog separatora "|
Redak \u003d "multi-line
Đon
| Pisati
| tekst ";

Citiranje unutar niza postavljaju dvostruke navodnike.
Red \u003d "" tekst u navodnicima "";

Postoje mnoge operacije na redovima (pretraživanje u točkicama, definicija prvog, itd.), Bolje je vidjeti pomoćne sintakse.
Pomoćnik za sintakse - Opći opis Ugrađeni jezik-\u003e ugrađene funkcije-\u003e funkcije za rad s redovima.

Funkcije za rad s redovima

Ovdje u kratkom obliku dat ću funkcije za rad s redovima:

Vrega (<Строка>) - Značajke svih niskih znakova pretvara u gornji registar.

Codeimvol (<Строка>, <НомерСимвола>) - Funkcija dobiva simbol kod koji se nalazi u prenesenom retku u položaju s navedenim brojem.

Lav(<Строка>, <ЧислоСимволов>) - Funkcija odabire prvi lijevi simboli niza.

Pronaći(<Строка>, <ПодстрокаПоиска>) - Funkcija pronalazi unos željenog niza kao podniz u izvornoj liniji.

Nrega (<Строка>) - Funkcija pretvara sve znakove niza u donji slučaj.

Prava (<Строка>, <ЧислоСимволов>) Ova značajka Razlikuje se od funkcija lava (lijevo) u činjenici da odabire simbole posljednjeg retka.

Prazna linija (<Строка>) - Funkcija provjerava niz za prisutnost značajnih znakova.

Simbol(<КодСимвола>) - Funkcija pretvara kod simbola u niz koji sadrži znak.

Sokrel (<Строка>) - Funkcija izrezuje beznačajne znakove lijevo od prvog znaka značenja u retku.

Sokrlp (<Строка>) - Funkcija izrezuje beznačajne znakove koji su ostali od prvog karakterističnog karaktera u nizu i prostorima koji su u pravu od posljednjeg značajnog karaktera u redu.

Copp (<Строка>) - Funkcija se izrezuje iz beznačajnih znakova desno od posljednjeg značajan simbol u retku.

Okruženja (<Строка>, <НачальныйНомер>, <ЧислоСимволов>) - Funkcija odabire niz znakova, počevši od simbola<НачальныйНомер>Zajednička količina<ЧислоСимволов>.

Stranton (<Строка>) - Funkcija dobiva broj znakova u nizu.

Napetost (<Строка>, <ПодстрокаПоиска>, <ПодстрокаЗамены>) - Funkcija se nalazi u izvornoj liniji svih unosa podniza za pretraživanje i zamjenjuje ga na supstituciju supstitucije.

Plotenka (<Строка>, <НомерСтроки>) - Funkcija dobiva niz višestruki niz po broju.

Stroga (<Строка>, <ПодстрокаПоиска>) - Funkcija izračunava broj unosa podnosti za pretraživanje u izvornoj liniji.

Strokelost (<Строка>) - Funkcija razmatra broj redaka u višestrukom nizu. U više liniju, nizovi su podijeljeni u simbole prevođenja niza.

Trega (<Строка>) - Funkcija pretvara niz u registar naslova. To znači da svaka riječ ima prvi znak koji se pretvara u naslovni registar ili na vrh registar ako se ne definira naslovni registar za simbol. Preostali se znakovi pretvaraju u donji registar.

Vrsta pretvorbe
Izričito pretvoriti vrste podataka, funkcije istog imena s vrstom podataka na koju se pojavljuje konverzija: String (<Значение>)

Staza niz \u003d red (broj);

Sve ove značajke su detaljno opisane u asistentskoj sintaksi, kao početni programer može pomoći pomoćnici sintaksi, opisao sam u članku.

Primjeri za rad s redovima

Pretvorba broja u nizu i leđa.

Da biste dobili reprezentaciju u godini, koristite funkciju formata.

Godina \u003d format (CurrentData (), "DF \u003d YYYY") // Godina \u003d "2012"

Za pretvaranje broja na niz bez umetanja simbola grupe separatora (nerazdvojni prostor), morate primijeniti funkciju formata s ng \u003d 0 parametar:

Broj \u003d 2012 red \u003d format (broj, "ČHG \u003d 0"); // red \u003d "2012"

Red bez razmaka.

Moje ime je Pavel Ballets, radim na Softpoint. Više od 10 godina rješavamo zadatke optimizacije učinkovitosti. I unatoč veliki broj Riješeni zadaci, njihov broj se ne smanjuje, ali raste u geometrijskoj progresiji. Količine podataka povećavaju, a zadaci za optimizaciju rada s tim podacima su komplicirani. Ovaj proces je neizbježan.

Članak Tema - netrivijalni pristupi optimizaciji, Će se razmotriti dva aspekta:

  • Prvo - tražiti stres, Korisnici ga često koriste, a mnogi, vjerojatno, već su naišli na značajno očekivanje, potraga za podniznom se ne izvodi dovoljno.
  • Drugo - izvođenje velikih dokumenata, kao što je zatvaranje mjeseca, izračun troškova. Sigurno, mnogi su naišli na činjenicu da računovođe troše te dokumente za 5-9 sati, noću i nema vremena. Najzanimljivija stvar je da klasične metode optimizacije ne uvijek ne pomažu uvijek. Ako, kada provodite takve dokumente, pokrenuti u mjerenjem mjerenja za debugger, vidjet će da se najveća količina vremena troši na pisanje na privremene ili stvarne strukture - tablice, registre itd. I nemoguće je riješiti taj zadatak klasičnim metodama.

Tražiti stres

Prva tema - potražite stres. Tijekom ove godine naišao sam nekoliko puta s problemima o ovoj operaciji. Došli ste u osiguravajuće društvo za proširenje politike, nudite se da pronađete na telefonskom broju. Jasno je da to nije klasično pretraživanje puni broj Telefon, jer korisnik može imati broj preko osam, kroz sedam ili nekako, dakle, tražeći broj sobe. U tom slučaju, dugoročne operacije pretraživanja koriste se - u brojnim situacijama, kašnjenje može biti nekoliko sekundi, a može doći do minuta.

Tražite početne znakove

Počet ću s prvim primjerom kada se pretraživanje provodi pomoću početnih znakova. To - privatni slučaj Potražite stres kada korisnik točno zna da željena vrijednost počinje određenim znakovima.

Traženje početnih znakova implementirana je u 1 ° C (ili u engleskoj verziji, kao), što ukazuje na vrijednost s "%" na kraju ("%" označava slijed drugih znakova). Na primjer, tražimo:

Ime poput "Ivano%"

Imajte na umu da ako imate indeks u ovom polju u sustavu, onda traženje indeksa koristit će se u SQL upitu - Ovo je pretraživanje po indeksu.

Stanje "poput trake za pretraživanje" je ekvivalentno pretraživanju u rasponu vrijednosti, U određenom slučaju, kada smo u potrazi za "Ivano%" - to je ekvivalentno pretraživanju u rasponu prezimena, koji počinju "Ivano", a završava s "IVANP" (jer simbol "P" ide poslije simbol "O").

Moderni optimizatori samostalno pretvoriti kao zahtjev za traženje zahtjeva za upit, Stoga, ako imate indeks u ovom polju u sustavu, primit ćete takav rezultat prilikom tumačenja upita u smislu SQL Uvjeti - Optimizer će podnijeti zahtjev kao u obliku pretraživanja po rasponu.

Dakle, moguće je izvršiti klasik brza pretraga pomoću indeksa (traženje indeksa). Nema problema s ovim ili ih riješiti na jednostavan način.

Tražiti unos

Sada uzmite primjer kompliciranije kada je nepoznat, na kojem je mjesto linije naša željena vrijednost, a provodi se potraga za unosom retka. U ovom slučaju, u upitu "kao" "%" stoji na obje strane.

Kada pretvaranje takve upite u SQL, vidimo da samo promjene naredbe (u vrijednosti već postoje dva "%").

Razmotrite pojedinosti o planu izvršenja. Ovdje vidimo isti indeks, ali u ovom slučaju ne radi učinkovito.

Činjenica je da je indeks na ime referentne knjige, koji smatramo, sastoji se od nekoliko polja.

  • Prvi od njih je računovodstveni separator.
  • Nadalje izravno ide polje za pretraživanje.

I stoga, kada se prikaže "indeks traženja" u smislu izvršenja, to znači to pretraživanje se vrši na prvom polju separatora - Na slide iznad to možete vidjeti pretraživanje na željenu vrijednost descara apsolutno se ne koristi.

Što učiniti u ovoj situaciji? Vrlo često sam u praksi bio u praksi da korisnici su zabranili zahtjeve za unos. I korisnici u nekim slučajevima nisu koristili ovu funkcionalnost, jer je vrijeme izvršenja vrlo značajno, a morate nastaviti raditi. Stoga su se morali biti uvrnuti na druge načine - izabrali na popisima, pokušali pronaći prve likove i tako dalje.

Ali to dovodi do nezadovoljstva funkcionalnošću i nepravilnom percepcijom sustava. Korisnik razumije da se sustav ne može nositi s nečim i ne radi kao što bi trebao biti. Nije u redu.

Netrivijski pristup rješavanju zadatka pronalaženja podneza

Sada razmotrimo netrivijski pristup rješavanju ovog zadatka.

Označite brojnim tolerancijama:

  • Prvo - od modernog diskovi imaju neograničenu veličinu, Pretpostavimo da prostor na disku možete koristiti, imate prilično velik.
  • Drugo - korisnik je u potrazi za niti jedan-dva simbola, već za neki fragment, Na primjer, nitko od nas ne traži "Al" - to je premala selektivnost. U potrazi za značajan slijed znakova. Ovdje smo odabrali potragu za šest simbola.

Primjer željene linije "Alexe" zabilježen je u obliku i bio bi testiranje s njom.

  • Pretpostavimo da imamo polje s prezimenom, imenom i patronimom klijenta. Prvi korak, automatski postavljamo tu vrijednost na fragmente od šest simbola s pomicanjem "1"i dobivamo niz fragmenata (vidi gore), koji uvijek pripada željenoj vrijednosti. Imamo fragmente koji teoretski mogu ući u korisnika. Naime, u prošlosti je slajd određen da tražimo šest znakova. Može postojati pet, a četiri, samo veličina strukture će biti više.

  • U drugom koraku, mi zapisujemo ove setove u zasebnu strukturu (Ovo može biti tablica, registar informacija, itd.) I dobiti uzorak u kojem određeni fragment pripada različitim vrijednostima.

  • Iu trećem koraku, mi, kada u potrazi za podniz na dizajn zahtjeva od 1c "kao" dodatak dodatno stanje "I", koji filtrira broj mogućih kombinacija, i izvući ovu opcionalnu strukturu (to može biti informacijski registar) sve elemente koji pripadaju željenim fragmentima redaka.

Na primjer, korisnik traži klijenta s prezimenom "vojnicima". To je osam znakova, to znači da će biti tri fragmenta u šest znakova, koje tražimo u strukturi usluge. Zatim, kombinirati sve u upitu. Tako se dobiva dodatna filtriranje.

Kao rezultat toga, dobili smo osloboditi od "%" znaka (tj. Ispred tih fragmenata, simbol koji trebamo uvijek će biti), a prilikom obavljanja internog zahtjeva bit će tražeći indeks za koji smo se borili.

U praksi se ispada vrlo zanimljiva priča - ubrzanje u desetinama, stotine puta, Štoviše, sve to se može učiniti sa sredstvima od 1c, što je vrlo lijepo. Nećete trebati prepisati logiku, korisnik će se radovati da je upit za pretraživanje ubrzao. U primjeru, ubrzanje od 4 sekunde do 0,05 sekundi, a ako smo u početku imali zahtjev za dvije minute, to bi se pogubilo manje od sekunde.

Mehanizam koji sam vam pokazao nije neki eksperimentalni primjer, već radi za stvarne kupce.

Pripremne aktivnosti

Sada ću vam reći o pripremnim aktivnostima.

  • Prvi potrebno je popuniti početne vrijednosti registra., Da biste to učinili, moramo zakazati regulatorni prozor.
  • Zatim se moramo pridržavati konzistencije podataka - to znači mora postojati pretplata za promjenu vrijednostiTako da su ti fragmenti automatski obnovljeni.
  • I zadnji - dodajte standardni obrazac za pretraživanje.

Punjenje registra može se obaviti i pomoću 1C i s SQL.

Mogu reći da popunjavanje takve strukture za 17 milijuna vrijednosti zauzima negdje 20-25 minuta. Naravno, korisnici u ovom trenutku ne bi trebali mijenjati vrijednosti imenika.

Ako izračunamo milijun vrijednosti od negdje 100 znakova od 6 u fragmentu, to će se pokazati negdje 4.7 GB. Morate planirati tako da ovo mjesto imate. Ako imate u svom direktoriju, na primjer, 100 milijuna vrijednosti, onda morate zakazati mjesto koje će biti dostupno na disku.

Potrebno uzeti u obzir statistiku popularnosti fragmenata

Da li ova metoda uvijek radi brzo?

Na to je pod utjecajem statistika Fragmenata popularnosti.

  • Na primjer, imate fragment "alex", koji može ući u ime Alexey, na srednje ime Alekseevich, u ime Alekseenko, itd. Ovaj fragment može biti 50-100 tisuća unosa.
  • I rijetko se koriste fragmenti.

Dakle, pojavljuje se statistika popularnosti u fragmentima.

napomenuti da ako je popularnost fragmenata niska (100 elemenata), onda dobivamo ubrzanje - 0.1 sekundu.

Ako je podniz vrlo popularan (50 tisuća elemenata), onda dobivamo degradacijuI mnogo veće nego ako nema optimizacije.

Na ovaj način, potrebno je napraviti poboljšanu shemu izvršenja upitaU kojoj bismo prvi put primili vrijednost popularnosti ponderiji. To se radi s tri linije u 1 ° C. U isto vrijeme, točno znamo da ako je niz nepopularan, onda ide u prvu granu, a ako je popularan, onda na drugom.

Kako radi ubrzanje? Pretraživanje pretraživanja iz obrasca je u tijeku, a zatim se sviđamo da se registrirate informacije s statistikom, dobivamo stavku i dalje odabirom ono što je koristiti je klasični ili ubrzani upit.

I sada pogledajmo kako se SQL zahtjev obavlja na SQL poslužitelju.

Slajd prikazuje pojednostavljenu shemu:

  • zahtjev za optimizaciju;
  • gledamo na statistiku polja koja se koristi na zahtjev;
  • odabiremo koji izvršenje plan za korištenje, to jest, odaberite strategiju izvršenja upita (na primjer, uloženi ciklus).

Koja je shema koju smo implementirali?

  • Napravili smo svoje indeks, Nije standardni SQL indeks, a ne indeks 1c, već njegov indeks potreban za rješavanje ovog problema;
  • Štoviše, sudari se s onim što treba vlastiti statistika;
  • I trebate svoje optimizatorkoji prema ovoj statistici odlučuje koje nit odabrati.

Na temelju ove logike, može se reći da ovaj proces otkriva značenje onoga što su indeksi, statistika i optimizator za nas.

Tko nije znao što služiti statistikama u SQL-u, pogledaj ovu logiku, i shvatit ćete da ako je pogrešno ili nevažno, onda ćemo ići na pogrešnu granu. Upit će usporiti. Razumijemo kako kvalitativno i ispravno poslužiti statistiku - to utječe na produktivnost, na indeksu.

Ako nema indeksa - skenirat ćemo sve vrijednosti.

Tako smo stvorili barem primitivni, ali vaš optimizator. Možemo reći da su pratili "na prstima" kako MS SQL radi i druge DBMS i stvaranje vlastitih struktura.

Ubrzanje "velikih" dokumenata

Ići ću na drugu temu - ubrzanje velikih dokumenata.

Često se suočavamo s nekim regulatornim postupcima kao što su: zatvaranje mjeseca, izvješće agenta, izračun troškova. Ovi teški, masivni dokumenti se provode i dovršena je znatna količina vremena. I kada pogledamo u pogrešku i napravimo trag na tim operacijama, to vidimo 1c redak umeće vrijednosti u neki stol i glavno vrijeme je zbog toga., I nemoguće je učiniti sve o tome. Jedina preporuka koja se može ponuditi je ubrzati disk (učinkovitost ovog rješenja je vrlo sumnjiva i zahtijeva preliminarnu analizu).

Predlažem se povratku u priču i razmotriti kako je to učinjeno u 1c, počevši od 8.0 do 8.3 - to je učinjeno, SQL poslužitelj je svaki put analizirao zahtjev, obradio ga, stvorio plan izvršenja, dodao, poslao naredbu na 1C uspjeha i primio sljedeći zahtjev. I takav korak po korak hodao od 1c aplikacijskog poslužitelja do MS SQL.

Jasno je da ako imate 40 zapisa u dokumentu, ne bi trebalo biti problema. Ako imate 10 tisuća i više evidencija (postoje organizacije u kojima u regulatornim dokumentima, milijun zapisa), tada taj proces traje jako dugo. Jedan se unos vrlo brzo obrađuje, ali u dokumentu su previše. Što su iznad glave? Na mreži, o izvršenju upita, na povratni signal, na obradi ovog signala u sustavu 1c, zbroj četiri koraka. Sve faze su zbrojene, pomnožite s milijun linija, a dobivaju se naša dugotrajna očekivanja. Jasno je da nije strašno.

U 1 ° C počevši od 8.3. Poboljšanja su napravljene. Sada je zahtjev za umetanje u privremenim tablicama i informiranim registrima pripremljen na SQL poslužitelju, a njegovo daljnje izvršenje događa uz pomoć klasičnih RPC poziva, gdje 1c samog davatelja usluga (autohtone ili ole dB) zapisi i umeće ih n nizovima (obično 100 linija).

Dakle, ubrzanje se postiže od 30% do 300%. Ali još uvijek nije dovoljno, jer danas imate 10 tisuća linija, sutra je 20 tisuća linija. Ovo nije temeljno rješenje problema, još uvijek nailazite na njega, ali samo šest mjeseci godišnje.

Što najviše brz umetak U SQL poslužitelju i doista u bilo kojem DBMS-u?

to Bulk insert., U 1C se koristi, ali za druge zadatke. Rad s "velikim" dokumentima također bi željeli ubrzati konsolidiranjem umetnutih umetnutih i dodavanjem unosa s jednim nizom u bazu podataka SQL Server.

Da vidimo kakav je učinak postignut. U ovom primjeru primljene ubrzanje negdje 5 puta, ali možete ubrzati i 10 puta, Teoretski glavni problem tako da ubrza je mnogo jači - to je brzina diska. Disk može biti usko grlo.

Također važno je zapamtiti o takvom kriteriju kao indeksi., Ako smo umetnuli u umetku u tablici bez ažuriranja indeksa, dobili bismo značajno ubrzanje (rezultat je manji od sekunde). Ovdje dobivamo 69 sekundi zbog činjenice da svaki umetak u tablici zahtijeva indeks osvježavanja.

U svakom slučaju, ova metoda omogućuje postizanje 5-10 puta učinak.

Osim toga, takve mogućnosti ovdje ne razmatraju kao particioniranje, particioniranje. Bilo bi moguće poboljšati situaciju ako bismo znali da je masovni umetak umetnut u tekuće razdoblje, a mi bismo iznijeli irelevantnu particiju u drugu particiju. Bilo bi još veći učinak. Ispada da je ubrzanje vrlo dobro.

Opcije optimizacije su beskrajne

Na ovaj način, opcije optimizacije su beskrajne, Jedino se ne može uključiti. Prije optimizacije uvijek ima smisla izračunati hoće li namjeravani učinak biti. Također bih savjetovao u nekim situacijama da se "uzdiže" zbog problema, koriste ne klasične metode za optimizaciju zahtjeva, a neke potpuno različite, što može donijeti značajniji rezultat.

****************

Ovaj članak je napisan u skladu s izvješćem izvješća () pročitanim na konferenciji Zajednice InfoStart 2017.

Linije u 1C 8.3 u ugrađenom 1C jeziku su vrijednosti primitivne vrste Crta, Vrijednosti ove vrste sadrže niz u Unicode formatu proizvoljnoj duljini. Stridači su skup zatvorenih znakova u navodnicima.

Primjer 1. Stvorite niz varijable s tekstom.

Redak-free \u003d "hello svijet!";

Funkcije rada s linijama u 1C 8.3

Ovaj odjeljak sadrži osnovne funkcije koje vam omogućuju da promijenite linije u 1 ° C ili analizirajte informacije sadržane u njima.

Strotina

Stranton (<Строка>) , Vraća broj znakova sadržanih u nizu prenesenom u parametru.

Primjer 2. Izračunajte broj znakova u nizu "Pozdrav!".

Red \u003d "Pozdrav svijeta!"; Martensumess \u003d Stondn (niz); Izvješće (poziv);

Rezultat izvršenja ovog koda prikazuje broj znakova niza: 11.

Bale

Sokrel (<Строка>) , Izrezuje iz beznačajnih znakova ulijevo od simbola prvog značenja u retku.
Neiskorišteni simboli:

  • prostor;
  • ne-izuzetni prostor;
  • tabeliranje;
  • povratak;
  • prijevod;
  • prijevod obrasca (stranice).

Primjer 3. Uklonite sve prostore na lijevoj strani linije "Svijet!" I pričvrstite na to linija "zdravo".

Linija \u003d sokrel ("mir!"); Red \u003d "halo" + linija; Izvješće (niz);

Rezultat izvršenja ovog koda bit će izlaz na zaslon "Bok Mir!".

Škrtac

Copp (<Строка>) , Izrezuje iz beznačajnih znakova udesno od simbola prvog značenja u retku.

Primjer 4. Za formiranje iz retka "Bok" i "Mir!" fraza "hello svijet!"

Red \u003d Cropp ("Bok") + "" + Sokrel ("Mir!"); Izvješće (niz);

Sok

Sokrlp (<Строка>) , Izrezuje iz beznačajnih znakova udesno od simbola prvog značenja u retku, također izrezuje iz beznačajnih znakova lijevo od prvog smislenog karaktera u retku. Ova se funkcija koristi češće od prethodne dvije, jer je svestranije.

Primjer 5. Uklonite beznačajne znakove koji stoje na lijevoj i desnoj strani u imenu ugovorne strane.

Protuteža \u003d Reference. Proteces. ENTI-MOVE ("Inn", "0777121211"); Dvostruka strana \u003d ugovorna strana. Objekt obrezivanja (); Ugovorna strana. Naziv \u003d Coolp (ugovorna strana. Ime); Ugovorna strana. Za zaposliti ();

Lav

Lav(<Строка>, <ЧислоСимволов>) , Dobiva prve znakove niza, broj znakova je označen u parametru Slovesmiths.

Primjer 6. Pustite strukturu Zaposlenik sadrže ime, prezime i srednje ime zaposlenika. Nabavite niz s prezimenom i inicijalima.

Početni podaci \u003d lav (zaposlenik. Mislim, 1); Inicijalnost \u003d lav (zaposlenik. Delikat, 1); Ispunjenje \u003d zaposlenika.Familia + "" + početni i "." + Inicijalnost + ".";

Pravo

Prava (<Строка>, <ЧислоСимволов>) , Prima najnovije simbole niza, broj znakova označen je u parametru Slovesmiths. Ako određeni broj znakova premašuje duljinu linije, vrati se cijeli niz.

Primjer 7. Dopustite da se datum u formatu "Gghhmdd" snima na kraju varijable niza, da biste dobili liniju s datumom i pretvorite ga na vrstu datum.

Redak \u003d "trenutni datum: 20170910"; Strfedat \u003d prava (niz, 8); Datum \u003d datum (strfevar);

Medija

Okruženja (<Строка>, <НачальныйНомер>, <ЧислоСимволов>) , Dobiva podniz iz retka prenesenog u parametru CrtaPočevši od broja znakova koji je naveden u parametru Start i duljina koja se prenosi na parametar Slovesmiths.Numeriranje znakova u nizu počinje s 1. ako je u parametru Start Vrijednost je manja ili jednaka nuli, parametar uzima vrijednost 1. ako je parametar Nizaltimvol Nije navedeno, a zatim su odabrani simboli do kraja linije.

Primjer 8. Pretpostavimo da u nizu varijabla, počevši od devetog položaja sadrži kod regije, trebali biste ga dobiti i napisati ga u zasebni niz.

Redak \u003d "Regija: 99 Moskva"; Regija \u003d mediji (niz, 9, 2);

Ravno

Ravno<Строка>, <ПодстрокаПоиска>, <НаправлениеПоиска>, <НачальнаяПозиция>, <НомерВхождения>) , Pretražuje određeni podniz u nizu, vraća broj položaja prvog otkrivenog podloga. Razmotrite parametre ove značajke:

  • Crta, Izvorna linija;
  • Podstrem, Željeni podniz;
  • Smjer, Određuje smjer pretraživanja podniza u retku. Mogu uzeti vrijednosti:
    • Smjer;
    • Smjer;
  • Stagnacija, Određuje položaj u nizu iz kojeg počinje pretraživanje;
  • Povratne informacije, Označava ulazni broj željenog podloga u liniji izvora.

Primjer 9. U liniji "Pozdrav svijet!" Odredite položaj posljednjeg ulaska simbola "i".

DRIZE \u003d STNENT ("Hello Mir!", "I", smjer iz .sconijacije); Izvješće (ulagač);

Rezultat izvršenja ovog koda bit će izlaz na zaslon broj zadnjeg unosa simbola "i": 9.

Svjetlo

Vrega (<Строка>) , Pretvara sve znakove navedenog niza u 1C 8 do gornjeg registra.

Primjer 10. Pretvorite liniju "Pozdrav Mir!" Do gornjeg registra.

Rringed \u003d LAG ("Hello World!"); Izvješće (veslanje);

Rezultat izvršenja ovog koda bit će izlaz na zaslon linije "Pozdrav svijeta!"

Nreg

Nrega (<Строка>) , Pretvara sve znakove navedenog niza u 1 C8 u donji registar.

Primjer 11. Pretvorite niz "hello mir!" u manji registar.

Strochanneg \u003d nreg ("Hello Pee!"); Izvješće (veslanje);

Rezultat izvršenja ovog koda bit će izlaz na zaslon linije "Pozdrav mir!"

Treg.

Trega (<Строка>) , Pretvara niz na sljedeći način: Prvi simbol svake riječi je preveden u gornji slučaj, preostale riječi riječi su prevedene u donji registar.

Primjer 12. Napravite glave prvih slova riječi u liniji "Pozdrav svijeta!".

STINKETEG \u003d TREG ("HELLO MIRE!"); IZVJEŠĆE (STINKRETEM);

Rezultat izvršenja ovog koda bit će izlaz na zaslon linije "Pozdrav mir!"

Simbol

Simbol(<КодСимвола>) , Dobiva simbol na svom kodu u Unicod kodiranju.

Primjer 13. Dodajte lijevo i desno na liniju "Pozdrav svijet!" Simbol ★

String prolazi \u003d simbol ("9733") + "Hello World!" + Simbol ("9733"); Izvješće (string prolazi);

Rezultat izvršenja ovog koda prikazat će se na zaslonu niza "★ Hi Mir! ★"

Kodsimvol.

Codeimvol (<Строка>, <НомерСимвола>) , Dobiva simbol kod u Unicode kodiranju iz niza navedenog u prvom parametru koji se nalazi u položaju navedenom u drugom parametrom.

Primjer 14. Saznajte kod zadnjeg simbola u liniji "Hi svijet!".

Red \u003d "Pozdrav svijeta!"; Codeimvol \u003d Codeimvol (niz, string (niz)); Izvješće (Codeimvol);

Rezultat izvršenja ovog koda bit će izlaz na simbol kod "!" - 33.

Prazna linija

Prazna linija (<Строка>) , Provjerava je li niz samo iz beznačajnih znakova, to jest, bilo da je prazan.

Primjer 15. Provjerite je li prazan niz sastoji od tri prostora.

Prazna \u003d otkinuta (""); Izvješće (prazno);

Rezultat izvršenja ovog koda bit će izlaz na zaslon "Da" (Izražavanje logičke vrijednosti Pravi).

Napetost

Napetost (<Строка>, <ПодстрокаПоиска>, <ПодстрокаЗамены>) , U izvornoj liniji nalazi sve unose podniza za pretraživanje i zamjenjuje ga na zamjenu supstitucije.

Primjer 16. U liniji "Pozdrav svijet!" Zamijenite riječ "svijet" na riječi "prijatelji".

Red \u003d napetost ("hello mir!", "Mir", "Prijatelji"); Izvješće (niz);

Rezultat izvršenja ovog koda bit će izlaz na zaslon "HI prijatelji!"

Stromor

Strokelost (<Строка>) , Omogućuje izračunavanje broja redaka u više-linidu. Za prijelaz na novi niz 1c 8 koristi simbol P.S. (simbol prevođenja niza).

Primjer 17. Odredite broj redaka u tekstu:
"Prvi red
Drugi niz
Treća linija »

Broj \u003d strover košara ("prvi red" + simboli. PC + "drugi redak" + znakova. PC + "treći niz"); Izvješće (broj);

Rezultat izvršenja ovog koda bit će izlaz na broj redaka u tekstu: 3

Plugulastik

Plotenka (<Строка>, <НомерСтроки>) , Dobiva niz u multi-liniju po broju. Numeriranje retka počinje s 1.

Primjer 18. Nabavite posljednji niz u tekstu:
"Prvi red
Drugi niz
Treća linija »

Tekst \u003d "Prvi redak" + znakova. PC + "Drugi redak" + znakova. FS + "Treći red"; LastastAstrth \u003d plisproktriktka (tekst, strokelock (tekst)); Izvješće (posljednji put);

Rezultat izvršenja ovog koda bit će izlaz na zaslon "trećeg retka".

Širi

Stroga (<Строка>, <ПодстрокаПоиска>) , Vraća broj unosa navedenog podniza u nizu. Funkcija je osjetljiva na registar.

Primjer 19. Odredite koliko puta ulazi u niz od 1C 8.3 i 8.2. Pismo "c", bez obzira na njegov registar.

Red \u003d "redovi u 1 C 8,3 i 8,2"; Brojčani \u003d oznaka (LAG (niz), "C"); Izvješće (broj);

Rezultat izvršenja ovog Kodeksa će se reproducirati broj unosa: 2.

Zakazan

Uron (<Строка>, <СтрокаПоиска>) , Provjerava je li niz prenio u prvom parameru, od retka u drugom parametrom.

PRIMJER 20. Odredite je li gostionica odabranog kolege pokrenut s brojem 1. Pusti varijable Ugovorna strana Ugovorne strane.

Inn \u003d Counterparty.inn; Počinje zajedno \u003d Rrinced (Inn, "1"); Ako počne na tada // završio je vaš kod;

Strazanacivna

Strujanje (<Строка>, <СтрокаПоиска>) , Provjerava je li niz završen u prvom parameru, na liniji u drugom parametrom.

Primjer 21. Odredite je li gostionica odabranog kolege završiti na slici 2. pustiti varijablu Ugovorna stranapohranjena veza s elementom direktorija Ugovorne strane.

Inn \u003d Counterparty.inn; Utvrđeni ventili \u003d strujne (Inn, "2"); Ako ga završite onda // završio je vaš kod;

Remen

naprezanje<Строка>, <Разделитель>, <ВключатьПустые>) , Dijelovi žice prema dijelu prema određenim simbolima separatora i bilježi rezultirajuće žice u niz. U prvom parametru, izvorna linija je pohranjena, u drugoj liniji koja sadrži separator, u trećem je naznačeno da li za snimanje praznih linija na niz (prema zadanim postavkama Pravi).

Primjer 22. Neka imamo niz koji sadrži brojeve odvojene ";" simbolom, dobiti niz brojeva s niza.

Redak \u003d "1; 2; 3"; Polja \u003d remen (niz, ";"); Za Sch \u003d 0 po nizu. Broj () - 1 pokušaj pokušaja ciklusa [SCH] \u003d broj (Crolp (niz [Sch])); Polja iznimke [SCH] \u003d 0; Endropset Endrequency;

Kao rezultat izvršenja, niz će se dobiti brojevima od 1 do 3.

Udarati

Slojati<Строки>, <Разделитель>) , Pretvara niz redaka iz prvog parametra na niz koji sadrži sve elemente polja kroz separator koji je naveden u drugom parametrom.

Primjer 23. Korištenje niza brojeva iz prethodnog primjera, za dobivanje izvornog niza.

Za Sch \u003d 0 po nizu. Broj () - 1 ciklus polja [Sch] \u003d niz (niz [SCH]); Endcycle; Linija \u003d moždani udar (niz, ";");

U ovom članku, ja ću vam reći o funkciji brzog pretraživanja 1c poduzeća 8. Što je brzo pretraživanje? Jako jednostavno. Brzo pretraživanje je jedan od načina navigacije na velikim popisima 1c zapisa. To mogu biti popisi dokumenata, direktorija, registri su svi koji su predstavljeni tablicama.

Što je brzo pretraživanje?

Funkcija brzog pretraživanja u dokumentima 1c Tvrtka je iznimno prikladna i omogućuje vam da se ne pomičite kroz ogromne podatke o podacima (na primjer, pomoću trake za pomicanje) i odmah idite na pravo mjesto na popisu. Nažalost, korisnici novaka od 1c Enterprise 8 (uključujući 1c računovodstvo 8) u početku ne koriste mogućnost brzog traženja, preferirajući ručno flipping popise dokumenata (i mogu biti visoko velik). Ovaj članak će vam pomoći da se nosite s korištenjem brzog pretraživanja u 1c.

Prije svega, treba napomenuti da u konfiguracijama 1c poduzeća 8 izgrađena na upravljanim obrascima, brzo pretraživanje funkcionira drugačije nego u prethodne verzije 1c. Stoga ćemo analizirati zasebno korištenje brzog pretraživanja upravljani forme i običnim.

Brzo pretraživanje u računovodstvu 1c 8.2

U verzijama 1C računovodstva od 8.0 do 8.2 Funkcija je namijenjena za tranzicija Na željeni dio popisa. Na primjer, pogledajte prozor plana računa prikazanog na slici.


Prozor je istaknuo neki red. Obratite pozornost na neovlašteni trokut od traka na koje označava crvenu strelicu. Kao iu drugim Windows programima, gdje postoje popise (na primjer, u vodiču), položaj ovog markera (trokut) određuje sortiranje popisa u cjelini - u kojem stupcu je oznaka instalirana, na istoj i cijeli popis će biti razvrstani. Na slici, marker je u stupcu koda, stoga će račun računa biti sortiran po kodu.

Marker se može premjestiti iz jednog stupca na drugi, nespretan na željenom stupcu ( na stupcu za zapošljavanje!) Miš. Ako je marker već stajao u tekućem stupcu, tada klik će dovest do promjene u smjeru sortiranja na suprotno (tj. Više na manji ili obrnuto). Ovo je standardno ponašanje za bilo koji windows programi, Koja je značajka ovog markera u 1c Enterprise i kako je povezano s brzom pretraživanjem?

Brzo pretraživanje u 1c popisima poduzeća 8 se provodi stupac u kojem je oznaka stoji. U tom slučaju, brzo pretraživanje u planu računa provodit će se kodom stupca.

Bio je važan dio članka, ali bez JavaScripta nije vidljiva!

Kako uživati \u200b\u200bu brzom pretraživanju u 1c? Lako! Počnite ispisati ono što želite pronaći u ovom stupcu., Gdje postoji oznaka. U primjeru, na slici iznad, morate unijeti broj računa. Na primjer, želite pronaći rezultat od 50 blagajnika. U ovom slučaju unesite ( kliknite klik miša ne i nigdje!) Broj 50 iz tipkovnice i ako u ovom stupcu postoji račun s istim brojem (i to je, naravno, je), tada se popis pomiče na ovu liniju, a sama niza će biti posvećen. Rezultat je prikazan u screenshotu plana računa u nastavku.

web stranica_

Tekst na kojem označava strelicu, ne trebam oprati - On će nestati.

Ako počnete upisivati \u200b\u200briječ "ulaznica" u gornjem primjeru, tekst na dnu prozora bit će unesen, a zatim složen. To se događa zato što prije početak Uneseni guda za brzo pretraživanje prestaje odgovarati početku najmanje jedne linije u ovom stupcu, 1c Enterprise zaključuje da se željena linija ne pronađe i automatski ga briše. O trebate se sjetiti dva pravila.

U 1c Enterprise 8 brzo pretraživanje se vrši na početku linije, tj. Stupac se traži za slučajno unosa teksta s početkom jednog od redaka ovog stupca.
To podrazumijeva važnu preporuku: prilikom unosa podataka na referentne knjige, nazovite stavke tako da je prikladno pretraživati \u200b\u200bbrzo pretraživanje. Na primjer, ime ugovorne strane je bolje pisati kao "namefirma LLC" nego "LLC Namefirma. I još više, ne biste trebali koristiti citate i druge nepotrebne likove u ime (govorimo o popunjavanju imena u obrascima).

Ako ste počeli unositi tekst i briše se - ono što tražite nedostaje u ovom stupcu! U tom slučaju, provjerite jezik unosa, kao i stupac u kojem se vrši brzo pretraživanje. Tipična pogreška - nije odabrana stupca. Na primjer, marker je instaliran u stupcu koda, a pretraživanje se vrši po imenu računa.

Brzo pretraživanje u 1c računovodstvo 8.3

Sada ćemo vidjeti što je razlika između brzog pretraživanja u verziji 1c Enterprise 8.3. Upotreba je u velikoj mjeri slična verziji 8.2, ali postoji jedna značajna razlika koja treba zapamtiti.

U 1c računovodstvu 8.3, kao iu bilo kojoj drugoj konfiguraciji na upravljanim oblicima (onaj novo sučelje) Radi kao filtar. Jednostavno stavite, kao rezultat funkcije brzog pretraživanja, dijela popisa skrivanje.

Kako ga koristiti, sada ćemo shvatiti s vama. Za početak, pogledajte screenshot plana računovodstvenog računa 1C 8.3, koji je smanjen u nastavku.

web stranica_

Kao što možete vidjeti, isti marker u jednom od stupaca. Pretraživanje se također vrši pomoću stupca u kojem je oznaka instalirana. Sve ostaje nepromijenjeno. Međutim, ako počnete unositi tekst (u primjeru, broj računa), tada će se pojaviti sljedeće.

web stranica_

Kao što možete vidjeti, okvir za pretraživanje se jednostavno otvori automatski. Isti prozor će se otvoriti ako kliknete na gumb za pretraživanje na alatnoj traci prozora (na slici je podcrtan). Kao rezultat toga, kada kliknete u prozor za pretraživanje, pronađite pronalaženje (na slici je skriven iza padajućeg izbornika) ili jednostavno unesite, a zatim dobiti sljedeći rezultat.

web stranica_

Čini se da je brzo pretraživanje u 1C računovodstvu 8.3 samo ostavlja vidljivi dio popisa koji zadovoljava uvjete pretraživanja. U ovom slučaju, gumb za pronalaženje nestaje i umjesto toga pojavljuje se objektiv s križa (na sl. Naglašeno), kada kliknete na koji se popis vraća početno stanje (Ovo je ostaje istaknuto niz pronađen kao rezultat brzog pretraživanja).

Još jedna važna značajka brzog pretraživanja u 1C računovodstvu 8.3 - slučajnost ne traži na vrhu linije, kao u verziji 8.2, ali je potraga za slučajnosti s bilo kojim dijelom redaka u stupcu. Dakle, ako se ugovorna strana zove "Ltd.phirma LLC", a kada traže početak unosa "Namefirma LLC", onda će i dalje biti niz!

Izrađujemo zaključke

Dakle, brzo pretraživanje u 1C računovodstvu 8.2 i ranijim verzijama namijenjeno je za pomicanje po popisu na željenu liniju, a u 1c računovodstvu 8.3 brzo pretraživanje kao redoviti filtar, skrivajući nepotreban dio popisa.