Contacte

Lucrul cu șiruri într-o interogare 1c 8.2. O caracteristică a execuției funcției substring(). Utilizarea SAU logic în condiții

În limbajul de interogare 1C:Enterprise, funcția SUBSTRING() v SUBSTRING(<Исходная строка>, <Начало>, <Длина>) poate fi aplicat datelor de tip șir și vă permite să selectați un fragment<Исходной строки>, începând cu un caracter numeric<Начало>(caracterele dintr-un șir sunt numerotate de la 1) și lungime<Длина>personaje. Rezultatul calculului funcției SUBSTRING() are un tip ș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.

Calcularea funcției SUBSTRING() în SQL Server:
În versiunea client-server a lucrării, funcția SUBSTRING() este implementată folosind funcția SUBSTRING() a funcției corespunzătoare. Declarație SQL transmis la serverul bazei de date date SQL Server, care calculează tipul de rezultat al funcției SUBSTRING() după reguli complexe, în funcție de tipul și valorile parametrilor săi, precum și în funcție de contextul în care este utilizată.

În cele mai multe cazuri, aceste reguli nu afectează execuția unei interogări 1C:Enterprise, totuși, există cazuri în care lungimea maximă a șirului de rezultat calculată de SQL Server. Este important de reținut că în unele contexte când se utilizează funcția SUBSTRING(), lungimea maximă a rezultatului acesteia poate fi egală cu lungimea maximă a unui șir de lungime limitată, care este de 4000 de caractere în SQL Server. Acest lucru poate duce la blocarea neașteptată a interogării.

De exemplu, o cerere:
Cod 1C v 8.x SELECT
ALEGERE

ALTE NUL
SFÂRȘIT CA O Vedere,
ALEGERE
WHEN Type = &LegalAddressIndividuals
THEN SUBSTRING(Vizualizare, 0, 200)
ALTE NUL
TERMINAT CA O Vedere1
DIN

FILTREAZĂ DUPĂ
Reprezentare,
Depunerea 1
se încheie anormal cu mesajul DBMS error:
Furnizor Microsoft OLE DB pentru SQL Server: Avertisment: Procesorul de interogări nu a putut produce un plan de interogare de la optimizator deoarece lungimea totală a tuturor coloanelor din clauza GROUP BY sau ORDER BY depășește 8000 de octeți.
HRESULT=80040E14, SQLSTATE=42000, nativ=8618

Acest lucru se datorează faptului că Microsoft SQL Server a calculat lungimea maximă a șirului care rezultă din expresie:
Cod 1C v 8.x SELECT
WHEN Type = &LegalAddressIndividuals
THEN SUBSTRING(Vizualizare, 0, 200)
ALTE NUL
SFÂRȘIT CA O Vedere,
este egal cu 4000 de caractere. Prin urmare, lungimea unei înregistrări constând din două astfel de câmpuri depășește cei 8000 de octeți permisi pentru o operație de sortare.

Datorită particularității descrise a execuției funcției SUBSTRING() pe SQL Server, nu este recomandată utilizarea funcției SUBSTRING() pentru a converti șiruri de lungime nelimitată în șiruri de lungime limitată. În schimb, este mai bine să utilizați operatorul de distribuție EXPRESS(). În special, exemplul de mai sus poate fi rescris astfel:
Cod 1C v 8.x SELECT
ALEGERE
WHEN Type = &LegalAddressIndividuals
ALTE NUL
SFÂRȘIT CA O Vedere,
ALEGERE
WHEN Type = &LegalAddressIndividuals
THEN EXPRESS(Reprezentarea ca șir (200))
ALTE NUL
TERMINAT CA O Vedere1
DIN
Registrul de informații Informații de contact AS Informații de contact
FILTREAZĂ DUPĂ
Reprezentare,
Depunerea 1

Tipul String se găsește în toate limbajele de programare. Este primitiv, iar în 1C există multe funcții pentru a lucra cu el. În acest articol, vom arunca o privire mai atentă diferite căi lucrați cu tipuri de șir în 1C 8.3 și 8.2 cu exemple.

Linia

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

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

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

LP abreviat, L abreviat, P abreviat

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

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

Leu, corect, mijloc

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

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

StrLength

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

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

Găsi

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

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

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

Linie goală

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

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

VReg, NReg, TReg

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

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

StrReplace

Această funcție este un analog al înlocuirii în editori de text. Vă permite să înlocuiți un caracter sau un set de caractere cu altul în variabilele șir.

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

StrNumberRows

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

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

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

StrGetString

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

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

StrNumberOccurrences

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

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

Simbol și SymbolCode

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

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

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

Concatenarea șirurilor

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

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

Conversie de tip

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

String(1000) // va returna „1000”

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

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

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

Citate într-un șir

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

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

Multilinie, întrerupere de linie

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

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

Cum să eliminați spațiile

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

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

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

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

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

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

Compararea șirurilor între ele

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

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

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

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

StringVariable = „Bună lume!”;

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

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

StrLength

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

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

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

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

Abreviat

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

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

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

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

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

Abreviere

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

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

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

LP prescurtat

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

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

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

un leu

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

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

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

Drepturi

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

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

String = " Data curentă: 20170910"; StringDate = Drepturi (String, 8); Data = Data (StringDate);

miercuri

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

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

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

PageFind

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

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

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

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

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

VReg

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

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

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

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

HReg

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

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

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

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

TReg

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

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

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

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

Simbol

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

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

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

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

SymbolCode

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

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

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

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

Linie goală

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

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

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

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

StrReplace

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

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

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

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

StrNumberRows

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

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

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

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

StrGetString

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

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

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

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

StrNumberOccurrences

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

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

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

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

Pagina începe de la

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

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

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

Pagina se termină pe

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

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

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

PageSplit

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

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

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

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

StrConnect

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

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

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

String este unul dintre tipurile de date primitive din sistemele 1C:Enterprise 8. Variabile cu tip linia conţin text.

Tastați Valori variabile linia sunt cuprinse între ghilimele duble. Se pot adăuga mai multe variabile de acest tip.

Per1 = „Cuvântul 1” ;
Per2 = „Cuvântul 2” ;
Per3 = Per1 + " " + Per2 ;

În cele din urmă Per3 va conta" Cuvântul 1 Cuvântul 2″.

În plus, sistemele 1C:Enterprise 8 oferă funcții pentru lucrul cu șiruri. Luați în considerare cele principale:

EnterString(<Строка>, <Подсказка>, <Длина>, <Многострочность>) — funcția este menită să afișeze o casetă de dialog în care utilizatorul poate specifica o valoare variabila de tip Linia. Parametru <Строка> este obligatoriu și conține numele variabilei în care va fi scris șirul introdus. Parametru <Подсказка> opțional este titlul casetei de dialog. Parametru <Длина> opțional, arată lungime maximașir de intrare. Valoarea implicită este zero, ceea ce înseamnă lungime nelimitată. Parametru <Многострочность> opțional. Specifică modul de introducere a textului pe mai multe linii: True — introducerea textului pe mai multe linii cu separatoare de linii; Fals - Introduceți un șir simplu.

Se poate introduce un șir și, cunoscând codul caracterelor în Unicode:

Simbol(<КодСимвола>) — Codul este introdus ca număr.

Literă= Simbol(1103 ); // EU SUNT

Există și o funcție inversă care vă permite să aflați codul unui caracter.

CodSimbol(<Строка>, <НомерСимвола>) — Returnează numărul Unicode al caracterului specificat ca număr.

Funcții de conversie a majusculei textului:

VReg(<Строка>) - Convertește toate caracterele dintr-un șir în majuscule.

HReg(<Строка>) - Convertește toate caracterele dintr-un șir în minuscule.

TReg(<Строка>) - convertește toate caracterele șirului în majuscule pentru titlu. Adică, primele litere din toate cuvintele sunt convertite în majuscule, iar literele rămase sunt convertite în minuscule.

Funcții pentru căutarea și înlocuirea caracterelor dintr-un șir:

Găsi(<Строка>, <ПодстрокаПоиска>) - găsește numărul de caracter al apariției subșirului de căutare. De exemplu:

Găsiți („Șnur”, „ochi”); // 4

StrFind(<Строка>, <ПодстрокаПоиска>, <НаправлениеПоиска>, <НачальнаяПозиция>, <НомерВхождения>) — găsește numărul de caracter al apariției subșirului de căutare, numărul apariției este specificat în parametrul corespunzător. În acest caz, căutarea începe de la caracterul, al cărui număr este specificat în parametru StartPosition. Căutarea este posibilă de la începutul sau de la sfârșitul șirului. De exemplu:

Număr4 intrare= StrFind( "Defensivitate", „o” , Direcția de căutare. În primul rând, 1, 4); // 7

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

StrReplace("Șir", "ochi", "" ); // Pagina

Linie goală (<Строка>) - verifică caracterele semnificative din șir. Dacă nu există caractere semnificative sau nici un caracter, atunci valoarea este returnată Adevărat. In caz contrar - Minciună.

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

StrNumberOccurrences ( „Studiați, studiați și studiați din nou”, "a studia" , "" ) ; // 3

StrTemplate(<Строка>, <ЗначениеПодстановки1>…<ЗначениеПодстановкиN> — înlocuiește parametrii în șir după număr. Șirul trebuie să conțină marcatori de substituție de forma: „%1..%N”. Numerotarea markerilor începe de la 1. Dacă valoarea parametrului Nedefinit, șirul gol este înlocuit.

StrPattern ( „Opțiunea 1 = %1, Opțiunea 2 = %2”, "1" , "2" ) ; // Parametrul 1= 1, Parametrul 2 = 2

Funcții de conversie a șirurilor:

Un leu(<Строка>, <ЧислоСимволов>) returnează primele caractere ale șirului.

Dreapta(<Строка>, <ЧислоСимволов>) - returnează ultimele caractere ale șirului.

Miercuri(<Строка>, <НачальныйНомер>, <ЧислоСимволов>) - returnează un șir de lungime<ЧислоСимволов>, începând cu un simbol<НачальныйНомер>.

Abr(<Строка>) trunchiază caracterele nesemnificative la stânga primului caracter semnificativ din șir.

abr(<Строка>) - decupează caracterele nesemnificative din dreapta ultimului caracter semnificativ din șir.

Abbrl(<Строка>) - decupează caracterele nesemnificative din stânga primului caracter semnificativ din șir și din dreapta ultimului caracter semnificativ din șir.

StrGetString(<Строка>, <НомерСтроки>) – primește șirul unui șir cu mai multe linii după număr.

Alte caracteristici:

StrLength(<Строка>) - returnează numărul de caractere dintr-un șir.

StrNumăr de linii(<Строка>) - returnează numărul de rânduri dintr-un șir cu mai multe linii. O linie este considerată nouă dacă este separată de linia anterioară printr-un caracter newline.

StrCompare(<Строка1>, <Строка2> ) - compară două șiruri fără a ține seama de majuscule și minuscule. Funcția funcționează ca un obiect Compararea Valorilor. Se intoarce:

  • 1 - dacă prima linie este mai mare decât a doua
  • -1 - dacă a doua linie este mai mare decât prima
  • 0 - dacă șirurile sunt egale

StrCompare(„Primul rând” , „Al doilea rând” ); // unu

Limbajul de interogare din 1C 8 este un analog simplificat al binecunoscutului „limbaj de programare structurat” (cum este adesea numit, SQL). Dar în 1C este folosit doar pentru citirea datelor, pentru modificarea datelor este folosit model de obiect date.

O altă diferență interesantă este sintaxa rusă. Deși de fapt poți folosi construcții englezești.

Exemplu de solicitare:

SELECTAȚI
Banci.Nume,
Bănci.Cont corect
DIN
Director.Bănci AS Bănci

Această solicitare ne va permite să vedem informații despre numele și contul de corespondent al tuturor băncilor existente în baza de date.

Limbajul de interogare este cel mai simplu și metoda eficienta obtinerea de informatii. După cum puteți vedea din exemplul de mai sus, în limbajul de interogare, trebuie să faceți apel cu numele metadatelor (este o listă de obiecte de sistem care alcătuiesc configurația, adică directoare, documente, registre etc.).

Descrierea constructelor limbajului de interogare

Structura cererii

Pentru a obține date, este suficient să folosiți construcțiile SELECT (select) și FROM (from). Cea mai simplă cerere după cum urmează:

SELECT * FROM Directoare.Nomenclator

Unde „*” înseamnă selecția tuturor câmpurilor din tabel, iar References.Nomenclature - numele tabelului din baza de date.

Luați în considerare un exemplu mai complex și general:

SELECTAȚI
<ИмяПоля1>CUM<ПредставлениеПоля1>,
Sumă(<ИмяПоля2>) CUM<ПредставлениеПоля2>
DIN
<ИмяТаблицы1>CUM<ПредставлениеТаблицы1>
<ТипСоединения>COMPUS<ИмяТаблицы2>CUM<ПредставлениеТаблицы2>
PE<УсловиеСоединениеТаблиц>

UNDE
<УсловиеОтбораДанных>

A SE GRUPA CU
<ИмяПоля1>

FILTREAZĂ DUPĂ
<ИмяПоля1>

REZULTATE
<ИмяПоля2>
PE
<ИмяПоля1>

V cererea dată selectăm datele câmpurilor „FieldName1” și „FieldName1” din tabelele „TableName1” și „TableName”, atribuim sinonime câmpurilor folosind operatorul „HOW”, le conectăm după o anumită condiție „TableConnection Condition”.

Din datele primite, selectăm numai datele care îndeplinesc condiția din „UNDE” „Condiția de selecție a datelor”. În continuare, grupăm interogarea după câmpul „Nume Câmp1”, însumând „Nume Câmp2”. Creăm totaluri pentru „ Câmpul FieldName1” și câmpul final „FieldName2”.

Ultimul pas este sortarea interogării folosind constructul „ORDER BY”.

Proiecte generale

Luați în considerare construcțiile generale ale limbajului de interogare 1C 8.2.

PRIMULn

Prin intermediul operator dat puteți obține n număr de primele înregistrări. Ordinea înregistrărilor este determinată de ordinea în interogare.

SELECTAȚI PRIMILE 100
Banci.Nume,
Bănci.Cod AS BIC
DIN
Director.Bănci AS Bănci
FILTREAZĂ DUPĂ
Bănci.Nume

Solicitarea va primi primele 100 de intrări din directorul „Bănci”, sortate alfabetic.

PERMIS

Acest design este relevant pentru lucrul cu mecanismul. Esența mecanismului este de a restricționa citirea (și alte acțiuni) la utilizatori pentru anumite înregistrări din tabelul bazei de date, și nu tabelul în ansamblu.

Dacă utilizatorul încearcă să citească înregistrări care nu sunt disponibile pentru el cu o interogare, va primi un mesaj de eroare. Pentru a evita acest lucru, ar trebui să utilizați construcția „PERMIS”, adică cererea va citi numai înregistrările permise.

SELECTARE PERMIS
RepositoryAdditionalInformation.Link
DIN
Director. Stocarea informațiilor suplimentare

VARIAT

Utilizarea „DIFERENT” va face posibilă excluderea rândurilor duplicate de la introducerea rezultatului unei interogări 1C. Dublarea înseamnă că toate câmpurile cererii se potrivesc.

SELECTAȚI PRIMILE 100
Banci.Nume,
Bănci.Cod AS BIC
DIN
Director.Bănci AS Bănci

EmptyTable

Această construcție este folosită foarte rar pentru a combina interogări. La alăturare, poate fi necesar să specificați un tabel imbricat gol într-unul dintre tabele. Operatorul „EmptyTable” este potrivit pentru asta.

Exemplu din ajutorul 1C 8:

ALEGE Număr.Referință, TABEL GOL.(Nom, Tov, Cant.) CA COMPOZIȚIE
DIN Document.Factură
UNIȚI TOȚI
SELECTează Link.Number, Composition.(LineNumber, Product, Quantity)
FROM Document.Invoice Document.Invoice.Composition.*

ISNULL

O caracteristică foarte utilă care vă permite să evitați multe greșeli. IsNULL() vă permite să înlocuiți valoarea NULL cu cea dorită. Foarte des folosit în verificări pentru prezența unei valori în tabelele unite, de exemplu:

SELECTAȚI
NomenclaturăRef.Referință,
IsNULL(Product Remaining.QuantityRemaining,0) AS CantitateRemaining
DIN


Poate fi folosit și în alte moduri. De exemplu, dacă pentru fiecare rând nu se știe în ce tabel există valoarea:

ISNULL(Data facturii primite, data emiterii facturii)

AS este un operator care ne permite să atribuim un nume (sinonim) unui tabel sau câmp. Am văzut un exemplu de utilizare mai sus.

Aceste constructe sunt foarte asemănătoare - vă permit să obțineți o reprezentare șir a valorii dorite. Singura diferență este că VIEW convertește orice valoare într-un tip șir, în timp ce REF VIEW convertește doar valorile de referință. REPREZENTAREA REFERINȚEI este recomandată a fi utilizată în interogările sistemului de compoziție a datelor pentru optimizare, cu excepția cazului în care, desigur, câmpul de date de referință este planificat să fie utilizat în filtre.

SELECTAȚI
Vizualizare(Link), //șir, de exemplu „Raportul anticipat nr. 123 din 10.10.2015
Reprezentare(DeletionMark) AS DeleteMarkText, //șir, „Da” sau „Nu”
ReferenceRepresentation(DeletionMark) AS DeletionMarkBoolean //boolean, True sau False
DIN
Document.AdvanceReport

EXPRES

Express vă permite să convertiți valorile câmpului în tipul de date dorit. Puteți converti o valoare fie într-un tip primitiv, fie într-un tip de referință.

Tipul de referință Express este utilizat pentru a restricționa tipurile de date solicitate în câmpurile unui tip compozit, adesea folosit pentru a optimiza performanța sistemului. Exemplu:

EXPRESS(Tabel de costuri. Subconto1 AS Directory. Articole de cost).Tip de activitatePentru Contabilitatea fiscală a costurilor

Pentru tipurile primitive, această funcție este adesea folosită pentru a limita numărul de caractere în câmpuri de lungime nelimitată (nu poate fi comparată cu astfel de câmpuri). Pentru a evita eroarea " Parametri nevalidi în operațiunea de comparare. Nu se pot compara câmpurile
lungime nelimitată și câmpuri de tipuri incompatibile
”, este necesar să se exprimi astfel de câmpuri după cum urmează:

EXPRESS(Comentează ca șir(150))

DIFERENTA DE DATA

Obțineți 267 de lecții video 1C gratuit:

Un exemplu de utilizare a IS NULL într-o interogare 1C:

ALEGE DIN
Ref
LEFT JOIN
Software
UNDE NU Rămâne de mărfuri Cantitatea rămasă ESTE NULĂ

Tipul de date dintr-o interogare poate fi determinat după cum urmează: folosind funcțiile TYPE() și VALUETYPE() sau folosind operator logic LEGĂTURĂ. Aceste două funcții sunt similare.

Valori predefinite

Pe lângă utilizarea parametrilor trecuți în interogări în limbajul de interogare 1C, puteți utiliza valori predefinite sau . De exemplu, enumerări, directoare predefinite, planuri de conturi etc.. Pentru aceasta, se folosește construcția „Valoare ()”.

Exemplu de utilizare:

UNDE

WHERE Counterparties.KindofContactInformation = Valoare(Enumeration.Types ofContactInformation.Phone)

WHERE Soldurile contului.Cont contabil = Valoare(Planul de conturi.Auto-susținere.Profit-Pierdere)

Conexiuni

Conexiunile sunt de 4 tipuri: STÂNGA, DREAPTA, COMPLET, INTERN.

ÎNSCRIEȚI ȘÂNGA și DREAPTA

Joinurile sunt folosite pentru a lega două tabele printr-o anumită condiție. Caracteristică la LEFT JOIN prin aceea că luăm primul tabel specificat complet și legăm al doilea tabel după condiție. Câmpurile celui de-al doilea tabel care nu au putut fi legate prin condiție sunt completate cu valoarea NUL.

De exemplu:

Va returna întregul tabel de Contrapartide și va completa câmpul „Bancă” numai în acele locuri în care va fi îndeplinită condiția „Contrapărți.Nume = Bănci.Nume”. Dacă condiția nu este îndeplinită, câmpul Bank va fi setat la NUL.

RIGHT JOIN în limba 1C absolut asemănătoare STANGA alăturați-vă cu excepția unei diferențe - în ÎNSCRIEȚI DREPT masa „master” este a doua, nu prima.

CONEXIUNE COMPLETA

CONEXIUNE COMPLETA diferă de stânga și dreapta prin faptul că afișează toate înregistrările din două tabele, le unește doar pe cele care pot fi unite după condiție.

De exemplu:

DIN

CONEXIUNE COMPLETA
Director.Bănci AS Bănci

PE

Limbajul de interogare va returna ambele tabele în întregime numai dacă este îndeplinită condiția de a se alătura înregistrărilor. Spre deosebire de o îmbinare stânga/dreapta, este posibil ca NULL-urile să apară în două câmpuri.

INNER JOIN

INNER JOIN diferă de cel complet prin faptul că afișează doar acele înregistrări care ar putea fi conectate în funcție de o anumită condiție.

De exemplu:

DIN
Director.Contrapărți AS Clienți

INNER JOIN
Director.Bănci AS Bănci

PE
Clients.Name = Banks.Name

Această interogare va returna numai rândurile în care banca și contrapartea au același nume.

Asociațiile

Construcția UNION și UNION ALL combină două rezultate într-unul singur. Acestea. rezultatul executării a două va fi „combinat” într-unul, comun.

Adică sistemul funcționează exact la fel ca și cele obișnuite, doar pentru un tabel temporar.

Cum se utilizează INDEX BY

Cu toate acestea, un punct trebuie luat în considerare. Construirea unui index pe un tabel temporar necesită, de asemenea, timp. Prin urmare, este recomandabil să folosiți construcția ” ” numai dacă se știe cu siguranță că vor fi mai mult de 1-2 înregistrări în tabelul temporar. În caz contrar, efectul poate fi opus - performanța câmpurilor indexate nu compensează timpul de construire a indexului.

SELECTAȚI
CurrenciesCurrencySliceLast.Currency AS Moneda,
MonedeCurrencySliceLast.Course
Ratele valutare PUT
DIN
DataRegister.Currency Rates.SliceLast(&Period,) AS Currency RatesSliceLast
INDEX PRIN
Valută
;
SELECTAȚI
Nomenclatura prețurilor.Nomenclatura,
PreturiNomenclatura.Pret,
PrețuriNomenclaturi.Moneda,
RateMoneda.Curs
DIN
RegisterInformation.PricesNomenclature.SliceLast(&Period,
Item B (&Nomenclatură) AND PriceType = &PriceType) AS Item Prices
LEFT JOIN Currencies Rates AS Currencies Rates
Software PricesNomenclature.Currency = RatesCurrency.Currency

gruparea

Limbajul de interogare 1C vă permite să utilizați special funcții agregate la gruparea rezultatelor interogării. Gruparea poate fi folosită și fără funcții de agregare pentru a „elimina” duplicatele.

Există următoarele funcții:

Sumă, Cantitate, Număr de diferite, Maxim, Minim, Medie.

Exemplul #1:

SELECTAȚI
Realizare Bunuri, Servicii, Bunuri.Nomenclatura,
SUM(Vânzarea de bunuri, servicii, bunuri. Cantitate) AS Cantitate,
SUM(Vânzarea de bunuri, servicii, bunuri. Sumă) AS Sum
DIN

A SE GRUPA CU
Realizare Bunuri, Servicii, Bunuri.Nomenclator

Interogarea primește toate rândurile cu mărfuri și le rezumă pe cantitate și sume în contextul articolului.

Exemplul #2

SELECTAȚI
Codul băncilor,
NUMĂR (Bănci DIFERITE. Referință) AS Număr de duplicate
DIN
Director.Bănci AS Bănci
A SE GRUPA CU
Bănci.Cod

Acest exemplu va afișa o listă de BIC-uri în directorul „Bănci” și va arăta câte duplicate există pentru fiecare dintre ele.

Rezultate

Totalurile sunt o modalitate de a obține date dintr-un sistem cu o structură ierarhică. Funcțiile de agregare pot fi utilizate pentru câmpurile de rezumat, ca și pentru grupări.

Una dintre cele mai populare modalități de a utiliza totalurile în practică este anularea loturilor de mărfuri.

SELECTAȚI




DIN
Document.Vânzarea de BunuriServicii.Bunuri AS Realizare de BunuriServiciiBunuri
FILTREAZĂ DUPĂ

REZULTATE
SUM(număr),
SUMA(Suma)
PE
Nomenclatură

Interogarea va avea ca rezultat următoarea ierarhie:

Rezultate generale

Dacă trebuie să obțineți totaluri pentru toate „totalurile”, utilizați operatorul „TOTAL”.

SELECTAȚI
Realizare Bunuri, Servicii, Bunuri Nomenclatura AS Nomenclatura,
Realizare Bunuri Servicii Bunuri Document AS de referinta,
Vânzări de bunuri, servicii, bunuri Cantitate AS Cantitate,
Realizare Bunuri de Servicii Bunuri.Suma AS Suma
DIN
Document.Vânzarea de BunuriServicii.Bunuri AS Realizare de BunuriServiciiBunuri
FILTREAZĂ DUPĂ
Realizare Bunuri si Servicii Bunuri.Referinta.Data
REZULTATE
SUM(număr),
SUMA(Suma)
PE
SUNT COMUNE,
Nomenclatură

Ca rezultat al executării interogării, obținem următorul rezultat:

În care 1 nivel de grupare este agregarea tuturor câmpurilor necesare.

comanda

Operatorul ORDER BY este folosit pentru a sorta rezultatul unei interogări.

Sortarea pentru tipurile primitive (șir, număr, boolean) are loc prin reguli uzuale. Pentru câmpurile de tipuri de referință, sortarea are loc pe reprezentarea internă a referinței (identificator unic), și nu pe cod sau pe reprezentarea referinței.

SELECTAȚI

DIN
Director.Nomenclatura AS Nomenclatura
FILTREAZĂ DUPĂ
Nume

Interogarea va afișa o listă de nume ale cărții de referință a nomenclaturii, sortate alfabetic.

Auto-aranjare

Rezultatul unei interogări nesortate este un set de rânduri reprezentat aleatoriu. Dezvoltatorii platformei 1C nu garantează ieșirea liniilor în aceeași secvență atunci când execută aceleași interogări.

Dacă trebuie să afișați înregistrările tabelului într-o ordine constantă, trebuie să utilizați constructul „Auto-Ordering”.

SELECTAȚI
Nomenclator Nume AS Nume
DIN
Director.Nomenclatura AS Nomenclatura
COMANDA AUTOMATA

Mesele virtuale

Tabelele virtuale în 1C sunt o caracteristică unică a limbajului de interogare 1C, care nu se găsește în alte sintaxe similare. Masa virtuala - drumul rapid obținerea de informații de profil din registre.

Fiecare tip de registru are propriul set de tabele virtuale, care pot diferi în funcție de setările registrului.

  • tăiați mai întâi;
  • felie din acesta din urmă.
  • resturi;
  • cifre de afaceri;
  • solduri si rulaje.
  • mișcări din subconto;
  • cifre de afaceri;
  • revoluții Dt Kt;
  • resturi;
  • solduri si rulaje
  • subconto.
  • baza;
  • date grafice;
  • perioada efectivă de valabilitate.

Pentru dezvoltatorul de soluții, datele sunt preluate dintr-un singur tabel (virtual), dar, de fapt, platforma 1C preia din mai multe tabele, transformându-le în forma dorită.

SELECTAȚI
Mărfuri În Depozite, Rămăși și Cifre de Afaceri. Nomenclatură,
MărfuriÎn DepoziteRămășiȘi Cifra de Afaceri.Cantitate
MărfuriÎn DepoziteRemainsAndTurnovers.CantityCurnover,
MărfuriÎn DepoziteRămășiȘi Cifre de Afaceri.CantitateIntrat,
MărfuriÎn DepoziteRămășiȘi Cifra de Afaceri.CantitateConsum
MărfuriÎn Depozite Resturi și cifre de afaceri
DIN
Registrul de acumulare Mărfuri în depozite resturi și cifre de afaceri AS Mărfuri în depozite resturi și cifre de afaceri

O astfel de cerere vă permite să obțineți rapid un numar mare de date.

Opțiuni de masă virtuală

Foarte aspect important lucrul cu tabele virtuale - folosind parametri. Opțiunile de masă virtuală sunt opțiuni specializate pentru selecție și personalizare.

Pentru astfel de tabele, se consideră incorectă utilizarea selecției în clauza WHERE. Pe lângă faptul că interogarea devine suboptimă, este posibil să primiți date incorecte.

Un exemplu de utilizare a unor astfel de parametri:

Registrul de acumulare.MarfaInDepozite.RemainsAndTurnovers(&StartPeriod, &EndPeriod, Month, Movements ANDPeriodBorders, Nomenclature = &NecessaryNomenclature)

Algoritm pentru tabele virtuale

De exemplu, cel mai folosit tabel virtual de tip „Rămăsuri” stochează date din două tabele fizice - solduri și mișcări.

Când se utilizează o masă virtuală, sistemul efectuează următoarele manipulări:

  1. Obținem valoarea calculată cea mai apropiată după dată și dimensiuni în tabelul cu totaluri.
  2. „Adăugați” suma din tabelul de mișcări la suma din tabelul cu totaluri.


Astfel de pași simpli poate îmbunătăți semnificativ performanța sistemului în ansamblu.

Folosind Generatorul de interogări

Generator de interogări- un instrument integrat în sistemul 1C Enterprise, care facilitează foarte mult dezvoltarea interogărilor bazei de date.

Generatorul de interogări are un mod destul de simplu, intuitiv interfață clară. Cu toate acestea, să luăm în considerare utilizarea constructorului de interogări mai detaliat.

Constructorul de text de interogare este lansat de meniul contextual (clic dreapta) în locul potrivit în codul programului.

Descrierea constructorului de interogare 1C

Să luăm în considerare fiecare filă a designerului mai detaliat. Excepția este fila Builder, acesta este un subiect pentru o discuție separată.

Fila Tabele și câmpuri

Această filă specifică sursa de date și câmpurile de afișat în raport. De fapt, aici sunt descrise construcțiile SELECT.FROM.

Sursa poate fi un tabel fizic de bază de date, un tabel de registru virtual, tabele temporare, interogări imbricate etc.

În meniul contextual al meselor virtuale, puteți seta parametrii tabelului virtual:

Fila Linkuri

Fila este folosită pentru a descrie conexiunile mai multor tabele, creează construcții cu cuvântul JOIN.

Fila Grupare

În această filă, sistemul vă permite să grupați și să rezumați câmpurile dorite ale rezultatului tabelului. Este descrisă utilizarea structurilor GROUP BY, SUM, MINIM, AVERAGE, MAXIMUM, NUMBER, NUMBER OF DIFERITE.

fila Condiții

Responsabil pentru tot ceea ce apare în textul de solicitare după constructul WHERE, adică pentru toate condițiile impuse datelor primite.

Filă avansată

fila În plus plin cu tot felul de parametri foarte importanți. Să ne uităm la fiecare dintre proprietăți.

gruparea Selectarea înregistrărilor:

  • Primul N– un parametru care returnează doar N înregistrări în interogare (primul operator)
  • Nu se repetă– asigură unicitatea înregistrărilor primite (operator DIFERIT)
  • Permis– vă permite să selectați doar acele înregistrări pe care sistemul vă permite să le selectați ținând cont (construcția PERMISĂ)

gruparea Tip de solicitare determină ce tip de interogare va fi: preluarea datelor, crearea unui tabel temporar sau distrugerea unui tabel temporar.

Mai jos este un steag Blocați datele primite pentru modificare ulterioară. Vă permite să activați capacitatea de a seta blocarea datelor, ceea ce asigură siguranța datelor din momentul în care sunt citite până la modificare (relevant doar pentru Mod automat interblocări, construi PENTRU SCHIMBARE).

Fila Joins/Aliases

În această filă a designerului de interogări, puteți seta capacitatea de a uni diferite tabele și alias-uri (constructia AS). Tabelele sunt listate în partea stângă. Dacă setați steagurile în fața mesei, se va folosi construcția JOIN, în caz contrar - JOIN ALL (diferențe între cele două metode). În partea dreaptă sunt indicate corespondențele câmpurilor din diferite tabele; dacă nu este specificată o corespondență, interogarea va returna NULL.

fila Comanda

Aici specificați ordinea de sortare a valorilor (ORDER BY) - descendent (DESC) sau crescător (ASC).

Există și un steag interesant - Auto-aranjare(în interogare - AUTOCOMANDĂ). În mod implicit, sistemul 1C afișează datele într-o ordine „haotică”. Dacă setați acest indicator, sistemul va sorta datele după datele interne.

Fila Lot de interogări

Puteți crea altele noi în fila Proiectare interogări și, de asemenea, le puteți utiliza ca navigare. În textul cererii, pachetele sunt separate prin simbolul „;” (punct virgulă).

Butonul de interogare în generatorul de interogări

Există un buton Solicitare în colțul din stânga jos al generatorului de interogări, cu ajutorul căruia puteți vizualiza textul interogării în orice moment:

În această fereastră, puteți face ajustări la cerere și o puteți executa.


Folosind consola de interogări

Query Console este o modalitate simplă și convenabilă de a depana interogări complexe și de a obține rapid informații. În acest articol, voi încerca să descriu cum să utilizați Query Console și să ofer un link pentru a descărca Query Console.

Să aruncăm o privire mai atentă la acest instrument.

Descărcați consola de solicitări 1C

În primul rând, pentru a începe cu consola de interogări, trebuie să o descărcați de undeva. Tratamentele sunt de obicei împărțite în două tipuri - formulare gestionateși normal (sau, uneori, sunt chemați pe 8.1 și pe 8.2/8.3).

Am încercat să combin aceste două vederi într-o singură prelucrare - în modul de operare dorit, se deschide forma dorită (în modul controlat consola funcționează doar în modul gros).

Descrierea consolei de interogări 1C

Să începem analiza consolei de interogări cu o descriere a panoului principal de procesare:

În antetul consolei de interogări, puteți vedea timpul de execuție al ultimei interogări cu o precizie de milisecunde, acest lucru vă permite să comparați diferite modele în ceea ce privește performanța.

Primul grup de butoane din bara de comandă este responsabil pentru salvarea interogărilor curente într-un fișier extern. Acest lucru este foarte convenabil, puteți reveni oricând la scrierea unei interogări complexe. Sau, de exemplu, stocați o listă de exemple tipice ale anumitor construcții.

În stânga, în câmpul „Solicitare”, puteți crea cereri noi și le puteți salva într-o structură arborescentă. Al doilea grup de butoane este doar responsabil pentru gestionarea listei de solicitări. Cu acesta, puteți crea, copia, șterge, muta o solicitare.

  • AlergaAnchetă– execuție simplă și obținerea de rezultate
  • Executați pachetul- vă permite să vizualizați toate cererile intermediare dintr-un lot de cereri
  • Vizualizarea tabelelor temporare- vă permite să vedeți rezultatele pe care interogările temporare le returnează într-un tabel

Parametri de solicitare:

Vă permite să setați parametrii actuali pentru cerere.

În fereastra parametrilor de interogare, următoarele sunt interesante:

  • Buton Ia de la cerere găsește automat toți parametrii din cerere pentru confortul dezvoltatorului.
  • Steag Parametri unici pentru toate cererile- când se setează, procesarea acestuia nu șterge parametrii la trecerea de la cerere la cerere în lista generala cereri.

Setați un parametru ca o listă de valori foarte simplu, este suficient să faceți clic pe butonul de ștergere a valorii (cruce) atunci când alegeți o valoare a parametrului, sistemul vă va solicita să selectați tipul de date, unde trebuie să selectați „Lista de valori”:

De asemenea, în panoul de sus există un buton pentru apelarea setărilor consolei de interogare:

Aici puteți specifica opțiunile de salvare automată a interogării și opțiunile de execuție a interogării.

Textul solicitării este introdus în câmpul de cerere consolă. Acest lucru se poate face cu un set simplu de testare a interogării sau apelând un instrument special - constructorul de interogare.

Constructorul de interogări 1C 8 este apelat din meniul contextual (butonul dreapta al mouse-ului) când faceți clic pe câmpul de introducere:

De asemenea, în acest meniu sunt caracteristici utile, cum ar fi curățarea sau adăugarea de caractere newline (“|”) la solicitare sau obținerea codului de solicitare în această formă convenabilă:

Solicitare = Solicitare nouă;
Query.Text = ”
|ALEGE
| Monede.Link
| DE LA
| Manual.Monede AS Monede”;
QueryResult = Query.Execute();

Câmpul inferior al consolei de interogări afișează câmpul rezultat al interogării, pentru care a fost creată această procesare:



De asemenea, consola de interogări, pe lângă listă, poate afișa date sub formă de arbore - pentru interogările care conțin totaluri.

Optimizarea interogărilor

Unul dintre cele mai importante puncte în îmbunătățirea productivității întreprinderii 1C 8.3 este optimizarecereri. Acest punct este, de asemenea, foarte important pentru trecerea certificării. Următoarea este o discuție a motivelor tipice pentru performanța optima interogări și metode de optimizare.

Selecții într-un tabel virtual folosind constructul WHERE

Este necesar să se aplice filtre asupra detaliilor unui tabel virtual doar prin intermediul parametrilor BT. În niciun caz nu trebuie să utilizați construcția WHERE pentru selecție într-un tabel virtual, aceasta este o greșeală gravă din punct de vedere al optimizării. În cazul selecției folosind WHERE, de fapt, sistemul va primi TOATE înregistrările și abia apoi le va selecta pe cele necesare.

DREAPTA:

SELECTAȚI

DIN
Registrul de acumulare. Decontari reciproce cu Deponantii Organizatiilor. Solduri(
,
Organization = &Organizare
AND Individual = &Individual) CUM Decontări reciproce cuDepositorsOrganizationsBalances

NECORESPUNZĂTOR:

SELECTAȚI
Decontări reciproce cu DeponențiiOrganizațiiSolduri.SumaSold
DIN
Registrul de acumulare. Decontări reciproce cu deponenții organizațiilor. Solduri(,)
UNDE
Acordări reciproce cuDepositorsOrganizationsBalances.Organization = &Organizare
ȘI decontări reciproce cu DepositorsOrganizationsBalances.Individual = &Individual

Obținerea valorii unui câmp de tip compus printr-un punct

La preluarea datelor de tip compus într-o interogare punctată, sistemul se alătură la stânga exact atâtea tabele câte tipuri sunt posibile în câmpul tipului compus.

De exemplu, este extrem de nedorit ca optimizarea să se refere la câmpul înregistrării în registru - registrator. Registratorul are un tip de date compus, printre care se numără toate tipurile posibile de documente care pot scrie date în registru.

NECORESPUNZĂTOR:

SELECTAȚI
RecordSet.Registrator.Date,
RecordSet.Number
DIN
Registrul de acumulare.Organizarea mărfurilor ca un set de înregistrări

Adică, de fapt, o astfel de interogare se va referi nu la un singur tabel, ci la 22 de tabele de baze de date (acest registru are 21 de tipuri de registrator).

DREAPTA:

SELECTAȚI
ALEGERE
WHEN GoodsOrg.Registrar LINK Document.Vânzarea de BunuriServicii
ATUNCI EXPRESS(GoodsOrg.Registrar AS Document.Vânzarea de bunuriServicii).Data
WHEN GoodsOrg.Registrar LINK Document.Receipt of GoodsServices
APOI EXPRIMĂ (Registrul de organizare a mărfurilor ca document. Primirea bunurilor/serviciilor). Data
END AS Data,
BunuriOrg.Cantitate
DIN
ÎnregistrareAcumulare.MarfuriOrganizatii AS BunuriOrg

Sau a doua opțiune - adăugarea unor astfel de informații la recuzită, de exemplu, în cazul nostru - adăugarea unei date.

DREAPTA:

SELECTAȚI
BunuriOrganizații.Data,
MărfuriOrganizații.Cantitate
DIN
RegisterAcumulare.GoodsOrganizations AS GoodsOrganizations

Subinterogări într-o condiție de alăturare

Pentru optimizare, este inacceptabil să se utilizeze subinterogări în condiții de îmbinare, acest lucru încetinește semnificativ interogarea. Este recomandabil să folosiți VT în astfel de cazuri. Pentru a vă conecta, trebuie să utilizați doar metadate și obiecte BT, indexându-le în prealabil după câmpurile de conexiune.

NECORESPUNZĂTOR:

SELECTAȚI …

LEFT JOIN (
SELECT FROM Registrul de informații.Limite
UNDE …
A SE GRUPA CU…
) PE …

DREAPTA:

SELECTAȚI …
PUT Limite
DIN Registrul de informații.Limite
UNDE …
A SE GRUPA CU…
INDEX PRIN…;

SELECTAȚI …
DIN Document.Realizarea BunuriServicii
Limite LEFT JOIN
PE …;

Conectarea înregistrărilor la tabele virtuale

Există situații când, la conectarea unei mese virtuale la altele, sistemul nu funcționează optim. În acest caz, pentru a optimiza performanța interogării, puteți încerca să plasați tabelul virtual într-un tabel temporar, amintindu-vă să indexați câmpurile unite în interogarea tabelului temporar. Acest lucru se datorează faptului că VT-urile sunt adesea conținute în mai multe tabele fizice ale SGBD, ca urmare, este compilată o subinterogare pentru selecția lor, iar problema este similară cu paragraful anterior.

Utilizarea filtrelor pe câmpuri neindexate

Una dintre cele mai frecvente greșeli la compilarea interogărilor este utilizarea condițiilor pe câmpurile neindexate, aceasta contrazice reguli de optimizare a interogărilor. SGBD nu poate efectua interogarea în mod optim dacă interogarea este filtrată după câmpuri neindexate. Dacă se ia un tabel temporar, este necesară și indexarea câmpurilor de conexiune.

Trebuie să existe un index adecvat pentru fiecare condiție. Un index adecvat este unul care îndeplinește următoarele cerințe:

  1. Indexul conține toate câmpurile enumerate în condiție.
  2. Aceste câmpuri se află chiar la începutul indexului.
  3. Aceste selecții merg într-un rând, adică valorile care nu participă la condiția de interogare nu se „pune” între ele.

Dacă SGBD-ul nu preia indecșii corecti, atunci întregul tabel va fi scanat - acest lucru va avea un impact foarte negativ asupra performanței și poate duce la o blocare lungă a întregului set de înregistrări.

Utilizarea SAU logic în condiții

Asta e tot, acest articol a acoperit aspectele de bază ale optimizării interogărilor pe care fiecare expert 1C ar trebui să le cunoască.

Un curs video gratuit foarte util despre dezvoltarea și optimizarea interogărilor, recomandat cu tărie incepatori si nu numai!



Ți-a plăcut articolul? Împărtășește-l