Salutări către voi, dragi cititori ai site-ului blogului! Astăzi, cu ajutorul exemplelor, vom analiza modul în care în practică puteți utiliza funcția de interogare 1C SUBSTRING... Utilizarea acestei funcții va fi utilă nu numai în interogările simple, pe care le vom lua în considerare aici, ci și în interogări, precum și în interogări.

Sarcina era ceea ce era necesar din recuzita documentului Conformitate selectați două linii și sortați după ele. Se potrivește unui cont de acest tip: 779000/004599. Cum împărțiți această valoare în două?

Funcția SUBSTRING are trei parametri. Primul este șirul original, din care doriți să selectați o parte a caracterelor - un șir secundar. Este clar că tipul valorii acestui parametru este Linia... Atenție, aceasta este o notă foarte importantă, dacă utilizați un tip non-string al primului parametru, funcția nu va funcționa, solicitarea va genera o eroare! Al doilea parametru determină poziția caracterului în șirul sursă din care începe selecția unei părți a șirului, iar al treilea este lungimea șirului selectat. Tipul valorii pentru al doilea și al treilea parametru este un număr.

Să trecem la practică:

Selectați tipic. DVR AS Nume, Substring(Tipic.Recorder.Nume corespondent, 1, 6) AS Cont de cost, Substring(Typical.Recorder.CorrespondingName, 8, 11) AS Department, SUM (SELECT WHEN MONTH (Typical.Period) \u003d 3 THEN EXPRESS (Typical.Sum AS NUMBER (15, 2)) ELSE 0 END) AS March din Registrul de contabilitate. Tipic AS Tipic WHERE Typical.Account \u003d & AccountCt ȘI Typical.Period BETWEEN & Start Și Period & PeriodCon Group By Substring(Tipic. Registrator. Numele corespondent, 1, 6), Substring(Tipic.Recorder.Nume corespondent, 8, 11), Tipic.Registrator COMANDĂ DE Departament, Cont de cost

Rezultatul acestei interogări este după cum urmează:

Nume Cost factură Departamentul Martie
Ordin de plată ieșit 00000000319 din 01.03.2010 14:42:54 779000 004599 9 000
Ordin de plată ieșit 00000000320 din 02.03.2010 12:07:34 779000 004599 4 721,6
Ordin de plată ieșit 00000000203 din 01.03.2010 12:28:52 786500 004599 987 614,51
Ordin de plată ieșit 00000000227 din 03.03.2010 14:16:00 786500 004599 400 000
Ordin de plată ieșit 00000000238 din 05.03.2010 12:37:57 732000 004600 5 400
Ordin de plată ieșit 00000000197 din 01.03.2010 11:53:11 732500 004600 12 100
Ordin de plată ieșit 00000000198 de la 01.03.2010 11:55:39 732500 004600 12 100
Ordin de plată ieșit 00000000279 din 26.03.2010 0:00:00 734100 004600 19 609
Ordin de plată ieșit 00000000287 din 29 martie 2010 14:15:36 734100 004600 55 300
Ordin de plată ieșit 00000000291 din 30.03.2010 11:01:10 734100 004600 18 090
Ordin de plată ieșit 00000000268 din data de 18.03.2010 10:34:25 738000 004600 10 050
Ordin de plată ieșit 00000000276 din data de 18.03.2010 12:20:20 750400 004600 13 060,98
Ordin de plată ieșit 00000000281 din 29 martie 2010 12:33:46 750400 004600 555 645,41
Ordin de plată ieșit 00000000234 din 03/04/2010 12:21:55 PM 754450 004600 24 120
Ordin de plată ieșit 00000000290 din 30.03.2010 10:44:39 754450 004600 100 000
Ordin de plată ieșit 00000000240 din data de 09.03.2010 10:53:24 786300 004600 20 800
Ordin de plată ieșit 00000000269 din data de 18.03.2010 10:58:04 786300 004600 61 012
Ordin de plată ieșit 00000000289 din 30.03.2010 9:27:14 786300 004600 6 000
Ordin de plată ieșit 00000000223 din 03.03.2010 12:13:38 786500 004600 36 000
Ordin de plată ieșit 00000000228 din 04.03.2010 9:52:35 786500 004600 378 138,85
Ordin de plată ieșit 00000000229 din 04.03.2010 9:57:50 786503 004600 126 117,75
Ordin de plată ieșit 00000000200 din 01.03.2010 11:58:06 754422 004762 63 000
Ordin de plată ieșit 00000000286 din 29 martie 2010 14:10:18 764422 004762 10 000
Ordin de plată ieșit 00000000267 din 17.03.2010 0:00:00 764423 004762 464 370
Ordin de plată ieșit 00000000261 din data de 15.03.2010 11:16:28 764522 004762 81 357

Deci, dacă luăm linia 779000/004599, atunci SUBSTRING (Typical.Registrator.Corresponding to name, 1, 6) va evidenția linia „779000”. Un SUBSTRING (Typical.Regist.Related.Name, 8, 11) va afișa „004599”.

În aceeași solicitare, se folosește expresia:

SUMĂ (SELECȚIONEAZĂ CÂND LUNA (Tipic. Perioadă) \u003d 3 EXPRIMĂ APOI (Tipic. SUMĂ CĂ NUMĂRUL (15, 2)) ALTE 0 FINALIZARE) AS Martie

În aceeași sarcină, a fost necesar să adăugați coloane noi cu numele lunilor și sumele pentru acestea. Aceasta este expresia care rezolvă această problemă. Dacă trebuie să utilizați alte luni, de exemplu ianuarie, înlocuiți expresia:

SUMĂ (SELECȚIONEAZĂ CÂND LUNA (Tipic. Perioadă) \u003d 1 ATUNCĂ EXPRIMĂ (Tipic. SUMA CĂTRE NUMĂRUL (15, 2)) ALTE 0 FINALĂ) AS ianuarie

Voi da un exemplu de text de solicitare, în care câmpurile de luni (cu caractere aldine) sunt formate folosind un ciclu, începând din martie până în februarie.

Text de cerere \u003d "| SELECT | Tipic.Registrator AS Name, | SUBSTRATE (Typical.Registrator.According to Name, 1, 6) AS Cost Account, | SUBSTRING (Typical.Registrator.According to Name, 8, 11) AS Department, "; Pentru Mid \u003d 1 până la 12 cicluri Dacă Mid< 11 Тогда Мес = Сч + 2; Иначе Мес = Сч - 10; КонецЕсли; ТекстЗапроса = ТекстЗапроса + " |СУММА(ВЫБОР | КОГДА МЕСЯЦ(Типовой.Период) = " + Мес + " | ТОГДА ВЫРАЗИТЬ(Типовой.Сумма КАК ЧИСЛО(15, 2)) | ИНАЧЕ 0 |КОНЕЦ) КАК Поле" + Мес + ?(Сч=12,"",","); КонецЦикла; Text cerere \u003d Text cerere + "| FROM | Registrul contabilității." + AccountRegisterName + ".MotionsSubconto (| & StartPeriod, | & ConPeriod,"; StringDefinitionsByData \u003d "(Activity \u003d TRUE) AND (Account IN HIERARCHY (& AnalysisAcount))"; Query Text \u003d QueryText "QueryQuery QueryText \u003d QueryText + "| UNDE | Typical.Account \u003d & Cont de analiză | ȘI Typical.Period BETWEEN & StartPeriod AND & EndPeriod | LOAD BY | SUBSTRING (Typical.Regist.Related.Name, 1, 6), | Substring. Nume, 8, 11), | Tipic.Registrator | COMANDĂ DE | Departament, | Cont de cost ";

Deci, folosind codul de mai sus (cu caractere aldine), sunt afișate părțile interogării cu luni. Astfel, se adaugă coloane noi cu numele lunilor și sumele pentru acestea.

Tipul „String” se găsește în toate limbajele de programare. Este primitiv și în 1C există multe funcții pentru lucrul cu acesta. În acest articol, vom arunca o privire mai atentă asupra diferitelor moduri de a lucra cu tipurile de șiruri în 1C 8.3 și 8.2 folosind exemple.

Linia

Pentru a converti o variabilă de orice tip într-un șir, există o funcție cu același nume „Șir ()”. Parametrul de intrare va fi variabila însăși, a cărei reprezentare a șirului trebuie obținută.

Șir (False) // returnează „Nu”
Șir (12345) // returnează „12 345”
Șir (CurrentDate ()) // 21.07.2017 11:55:36 ″

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

SocrLP, SocrL, SocrP

O variabilă de tip șir este utilizată ca parametri de intrare pentru aceste funcții. Funcțiile elimină caractere nesemnificative (spații, retururi de carucioare și altele): din partea stângă și dreapta, numai din partea stângă și, respectiv, numai din dreapta.

Abreviere („Spațiile de pe ambele părți vor fi eliminate”) // „Spațiile de pe ambele părți vor fi eliminate”
Abreviat („Spațiile de pe ambele părți vor fi eliminate”) // „Spațiile din stânga vor fi eliminate”
Abreviere („Spațiile de pe ambele părți vor fi eliminate”) // „Spațiile din dreapta vor fi eliminate”

Leo, corect, miercuri

Aceste funcții vă permit să tăiați o parte a unui șir. Funcția „Lion ()” va returna partea șirului din partea stângă a lungimii specificate. Funcția „Dreapta ()” este aceeași, dar decuparea se face în dreapta. Funcția „Med ()” 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ă”
Miercuri („Variabilă șir”, 2, 5) // returnează „troco”

Lungimea str

Funcția determină numărul de caractere conținute în variabila șir.

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

A găsi

Funcția face posibilă căutarea unei părți a unui șir în orice variabilă de șir. Valoarea returnată va fi un număr care arată poziția de la începutul șirului găsit. Dacă nu se găsește nicio potrivire, se returnează zero.

Rețineți că căutările sunt sensibile la majuscule și minuscule. Dacă șirul original conține mai multe apariții ale șirului de căutare, funcția va returna începutul primei apariții.

Găsiți („unu, doi, unu, doi, trei”, „doi”) // 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, returul carului și altele, sunt ignorate.

EmptyString („Pupkin Vasily Ivanovich”) // funcția va returna valoarea False
EmptyString ("") // funcția va reveni True

VReg, NReg, Treg

Aceste funcții sunt foarte utile pentru compararea și conversia variabilelor șir. Breg () va returna șirul original cu majuscule, HPreg () cu litere mici, iar TPreg () îl va forma astfel încât primul caracter al fiecărui cuvânt individual să fie scris cu majusculă și toate cele ulterioare să fie minuscule.

Vreg („DIRECTOR GENERAL”) // valoarea returnată - „DIRECTOR GENERAL”
NReg („DIRECTOR GENERAL”) // valoarea returnată - „director general”
TREG („DIRECTOR GENERAL”) // valoarea returnată - „Director general”

Înlocuiți pagina

Această funcție este similară cu înlocuirea în editorii de text. Vă permite să înlocuiți un caracter sau un set de caractere cu altul în variabile șir.

StrReplace ("roșu, alb, galben", ",", ";") // va returna "roșu; alb; galben"

StrNumberStrings

Funcția vă permite să determinați numărul de linii separate prin returnări de căruță într-o variabilă text.

Bucla din exemplul de mai jos va trece prin trei cercuri, deoarece funcția RowNumber va reveni la 3:

Pentru ind \u003d 1 după StrNumber of Lines ("String1" + Symbols.PS + "String2" + Symbols.PS + "String3") Buclă
<тело цикла>
Sfârșitul ciclului;

StrGetString

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

StrGetString ("String1" + Symbols.PS + "String2" + Symbols.PS + "String3", 2) // va returna „String2”

StrNumber of Occurrences

Funcția contorizează numărul de apariții ale unui caracter sau al unui șir din șirul de căutare.

StrNumber of Attachments ("a; b; c; d;", \u200b\u200b";") // funcția va returna numărul 4

Simbol și cod de simbol

Aceste funcții vă permit să obțineți un caracter după codul său Unicode, precum și să determinați acest cod de către 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 (pentru a efectua concatenarea), este suficient 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 tip

Pentru a converti un tip într-un șir, de exemplu, o referință la un articol din dicționar, un număr etc., este suficient să folosiți funcția „Șir ()”. Funcții precum „Abreviere ()” vor converti, de asemenea, variabile într-un șir, dar imediat cu trunchierea caracterelor nesemnificative.

Șirul (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ă o mie. Pentru a evita acest lucru, puteți utiliza următoarele construcții:

StrReplace (String (1000), Characters.NPP, "") // va returna "1000"

Șir (Format (1000, "ChG \u003d")) // va returna "1000"

Citate într-un șir

Destul de des va trebui să vă confruntați cu necesitatea de a specifica 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.

Title \u003d String ("Horns and Hooves LLC" - asta suntem noi! ") // returnează" Horns and Hoofs LLC - suntem noi! "

Linii multiple, întrerupere de linie

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

MultilineText \u003d "Prima linie" + Simboluri.PS + "A doua linie"

Cum să eliminați spațiile

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

StringNoSpaces \u003d abreviatLP ("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:

StringNoSpaces \u003d StrReplace (String (99999), Characters.NPP, "") // va returna "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:

StringNoSpaces \u003d StrReplace ("bun venit", "", "") // returnează "salut"

Comparând șiruri între ele

Termenii pot fi comparați cu semnul egal obișnuit. Comparația este sensibilă la majuscule și minuscule.

"Hello" \u003d "hello" // returnează False
"Hello" \u003d "Hello" // va reveni True
"Hello" \u003d "Goodbye" // va întoarce False

În limbajul de interogare 1C: Enterprise, funcția SUBSTRAT () în format SUBSTRING (<Исходная строка>, <Начало>, <Длина>) poate fi aplicat datelor de tip șir și permite evidențierea unui fragment<Исходной строки>începând cu numărul caracterului<Начало> (caracterele din șir sunt numerotate de la 1) și lungime<Длина> personaje. Rezultatul evaluării funcției SUBSTRING () are un tip de șir de lungime variabilă, iar lungimea va fi considerată nelimitată dacă<Исходная строка> are lungime și parametri nelimitați<Длина> nu este constantă sau depășește 1024.

Evaluarea funcției SUBSTRING () în serverul SQL:
În modul de operare client-server, funcția SUBSTRING () este implementată utilizând funcția SUBSTRING () a instrucțiunii SQL corespunzătoare transmise serverului de baze de date SQL Server, care calculează tipul de rezultat al funcției SUBSTRING () conform regulilor complexe în funcție de tipul și valorile parametrilor săi, precum și aceleași în funcție de contextul în care este utilizat.

În majoritatea cazurilor, aceste reguli nu afectează executarea unei interogări 1C: Enterprise, dar există cazuri în care lungimea maximă a șirului de rezultate calculată de SQL Server este esențială pentru executarea interogării. Este important să rețineți că în unele contexte în care este utilizată funcția SUBSTRING (), lungimea maximă a rezultatului său poate fi lungimea maximă a unui șir delimitat, care în SQL Server este de 4000 de caractere. Acest lucru poate duce la terminarea neașteptată a cererii.

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

ALTE NULI
END LIKE Vizualizare,
ALEGERE
WHEN View \u003d & LegalAddressPhysPersons
THEN SUBSTRING (Vizualizare, 0, 200)
ALTE NULI
ÎNCHEIȚI-VĂ CA VEDERE1
DE

FILTREAZĂ DUPĂ
Reprezentare,
Performanță1
se termină anormal cu mesajul eroare SGBD:
Furnizor Microsoft OLE DB pentru SQL Server: Avertisment: Procesorul de interogare 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 \u003d 80040E14, SQLSTATE \u003d 42000, nativ \u003d 8618

Acest lucru se datorează faptului că Microsoft SQL Server a calculat lungimea maximă a șirului care este rezultatul expresiei:
Cod 1C v 8.x ALEGERE
WHEN View \u003d & LegalAddressPhysPersons
THEN SUBSTRING (Vizualizare, 0, 200)
ALTE NULI
END LIKE Vizualizare,
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 permiși pentru operația de sortare.

Datorită caracteristicii descrise a executării funcției SUBSTRING () pe SQL Server, nu se recomandă utilizarea funcției SUBSTRING () pentru a converti șiruri de lungime nelimitată în șiruri de lungime limitată. Este mai bine să folosiți operația de exprimare EXPRESS (). În special, exemplul de mai sus poate fi rescris ca:
Cod 1C v 8.x SELECT
ALEGERE
WHEN View \u003d & LegalAddressPhysPersons
ALTE NULI
END LIKE Vizualizare,
ALEGERE
WHEN View \u003d & LegalAddressPhysPersons
THEN EXPRESS (Reprezentând ca șir (200))
ALTE NULI
ÎNCHEIȚI-VĂ CA VEDERE1
DE
Registrul de informații. Informații de contact AS Informații de contact
FILTREAZĂ DUPĂ
Reprezentare,
Performanță1

Un șir este unul dintre tipurile de date primitive din sistemele 1C: Enterprise 8. Variabile cu tipul linia conține text.

Valorile variabilelor de tip liniasunt cuprinse între ghilimele duble. Se pot adăuga mai multe variabile de acest tip.

Per1 \u003d "Cuvântul 1";
Per2 \u003d "Cuvântul 2";
Per3 \u003d Per1 + "" + Per2;

În cele din urmă Per3 va însemna „ Cuvânt 1 Cuvânt 2 ″.

În plus, sistemele 1C: Enterprise 8 oferă funcții pentru lucrul cu șiruri. Să luăm în considerare principalele:

Introduceți șirul (<Строка>, <Подсказка>, <Длина>, <Многострочность>) — funcția este concepută pentru a afișa o casetă de dialog în care utilizatorul poate specifica valoarea unei variabile de tip Linia... Parametru <Строка> este obligatoriu și conține numele variabilei la care va fi scris șirul introdus. Parametru <Подсказка> opțional este titlul casetei de dialog. Parametru <Длина> opțional, indică lungimea maximă a șirului de intrare. Valoarea implicită este zero, ceea ce înseamnă o lungime nelimitată. Parametru <Многострочность> opțional. Determină modul de introducere pentru textul cu mai multe linii: Adevărat - introducerea textului cu mai multe linii cu separatoare de linie; Fals - introducere de șir simplu.

Șirul poate fi introdus și poate primi codul de caractere Unicode:

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

Scrisoare \u003d Simbol (1103); // eu

Există, de asemenea, o funcție inversă care vă permite să aflați codul unui personaj.

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

Funcții de conversie a carcasei:

BReg (<Строка>) - convertește toate caracterele din șir în majuscule.

HPreg (<Строка>) - convertește toate caracterele din șir în minuscule.

Treg (<Строка>) - convertește toate caracterele dintr-un șir în majuscule. Adică, primele litere din toate cuvintele sunt convertite în majuscule, iar restul literelor sunt convertite în minuscule.

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

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

Găsiți („Șir”, „Oka”); // 4

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

Numărul 4 de apariții \u003d StrFind ( „Capacitate de apărare”, "o", direcția de căutare. De la început, 1, 4); // 7

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

StrReplace ("String", "Oka", ""); // Pagină

Linie goală (<Строка>) - verifică șirul pentru caracterele semnificative. Dacă nu există caractere semnificative sau deloc caractere, atunci valoarea este returnată Adevărat... In caz contrar - Minciuna.

StrNumber of Occurrences (<Строка>, <ПодстрокаПоиска>) - calculează numărul de apariții al șirului de căutare din șirul original.

StrNumber of Occurrences ( „Studiază, studiază și studiază din nou”, "studiu", ""); // 3

PageTemplate (<Строка>, <ЗначениеПодстановки1>…<ЗначениеПодстановкиN> — înlocuiește parametrii în șir cu numărul. Linia trebuie să conțină markeri de substituție de forma: „% 1 ..% N”. Markerele sunt numerotate începând de la 1. Dacă valoarea parametrului Nedefinit, se înlocuiește un șir gol.

PageTemplate ( "Parametrul 1 \u003d% 1, Parametrul 2 \u003d% 2", "1" , "2" ) ; // Parametrul 1 \u003d 1, Parametrul 2 \u003d 2

Funcții de conversie șir:

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

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

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

AbbrL (<Строка>) trunchiază caractere nesemnificative în stânga primului caracter semnificativ din șir.

Abreviere (<Строка>) - taie caractere nesemnificative în dreapta ultimului caracter semnificativ din șir.

SocrLP (<Строка>) - taie caractere nesemnificative în stânga primului personaj semnificativ din linie și în dreapta ultimului personaj semnificativ din linie.

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

Alte funcții:

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

RowNumber (<Строка>) - returnează numărul de linii dintr-un șir multiliniu. O linie este considerată nouă dacă este separată de linia anterioară printr-un caracter de alimentare cu linie.

Comparați (<Строка1>, <Строка2> ) - compară două șiruri, fără sensibilitate la majuscule. Funcția funcționează la fel 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 ("Prima linie", "A doua linie"); // unu

Limbajul de interogare din 1C 8 este un analog simplificat al binecunoscutului „limbaj de programare structurat” (așa cum se numește adesea, SQL). Dar în 1C este folosit doar pentru citirea datelor, modelul de date obiect este folosit pentru a schimba datele.

O altă diferență interesantă este sintaxa rusă. Deși, de fapt, puteți utiliza construcții în limba engleză.

Cerere de exemplu:

SELECTAȚI
Bănci. Nume,
Bănci.CorrAccount
DE
Director Bănci AS Bănci

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

Limbajul de interogare este cel mai simplu și mai eficient mod de a obține informații. După cum puteți vedea din exemplul de mai sus, în limba interogării trebuie să faceți apel cu numele metadatelor (aceasta este o listă de obiecte de sistem care alcătuiesc configurația, adică directoare, documente, registre etc.).

Descrierea structurilor de limbaj de interogare

Structura interogării

Pentru a obține datele, este suficient să folosiți construcțiile „SELECT” (selectare) și „FROM” (din). Cea mai simplă cerere arată astfel:

SELECT * FROM Directoare.Nomenclatură

Unde „*” înseamnă selecția tuturor câmpurilor din tabel și Referințe.Nomenclatura este numele tabelului din baza de date.

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

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

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

ÎNCĂRCARE DE
<ИмяПоля1>

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

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

În această interogare, selectăm datele câmpurilor „FieldName1” și „FieldName1” din tabelele „TableName1” și „TableName”, atribuim sinonime câmpurilor folosind operatorul „AS”, le alăturăm conform unei anumite „TableCondition” condiție.

Din datele primite, selectăm doar datele care îndeplinesc condiția din „UNDE” „Condiția DataFeed”. Apoi, grupăm interogarea după câmpul „FieldName1”, în timp ce însumăm „FieldName2”. Creați totaluri pentru câmpul „FieldNameField1” și câmpul final "FieldName2"

Ultimul pas este să sortați solicitarea utilizând construcția ORDER BY.

Construcții generale

Să luăm în considerare construcțiile generale ale limbajului de interogare 1C 8.2.

PRIMULn

Folosind acest operator, puteți obține numărul n al primelor înregistrări. Ordinea înregistrărilor este determinată de ordinea din cerere.

ALEGEȚI PRIMUL 100
Bănci. Nume,
Bănci. Cod AS BIC
DE
Director Bănci AS Bănci
FILTREAZĂ DUPĂ
Bănci.

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

PERMIS

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

Dacă un utilizator încearcă să citească înregistrările care îi sunt inaccesibile printr-o cerere, 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 pentru aceasta.

SELECTAȚI PERMIS
Stocare de informații suplimentare. Link
DE
Referință. Stocare de informații suplimentare

VARIAT

Utilizarea „DIFERENT” vă va permite să excludeți șirurile duplicate de la introducerea rezultatului interogării 1C. Duplicarea înseamnă că toate câmpurile cererii se potrivesc.

ALEGEȚI PRIMUL 100
Bănci. Nume,
Bănci. Cod AS BIC
DE
Director Bănci AS Bănci

EmptyTable

Această construcție este rar utilizată pentru a combina interogări. Când vă alăturați, poate fi necesar să specificați un tabel imbricat gol într-unul dintre tabele. Operatorul „EmptyTable” este potrivit doar pentru aceasta.

Exemplu din ajutorul 1C 8:

SELECȚIONEAZĂ Referința Număr, TABEL GOL. (Nom, Tov, Cantitate) AS Compoziție
FROM Document.Cheltuieli
COMBINAȚI TOATE
SELECT Reference.Number, Composition. (LineNumber, Item, Quantity)
FROM Document.Invoice Document.Invoice.Content. *

ESTE NUL

O caracteristică foarte utilă, care evită multe greșeli. YesNULL () vă permite să înlocuiți valoarea NULL cu cea dorită. Este foarte des utilizat în teste pentru prezența unei valori în tabelele unite, de exemplu:

SELECTAȚI
NomenclaturăRef.Ref.
Există NULL (soldul articolului. Soldul cantității, 0) AS soldul cantității
DE


Îl puteți folosi într-un alt mod. De exemplu, dacă pentru fiecare rând nu se știe în ce tabel există valoarea:

ESTE NUL (InvoiceReceived.Date, InvoiceEdited.Date)

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 construcții sunt foarte similare - vă permit să obțineți o reprezentare în șir a valorii dorite. Singura diferență este că REPREZENTAREA convertește orice valori într-un tip de șir, iar REPREZENTAREA DE REFERINȚĂ convertește numai valorile de referință. REPREZENTAREA DE REFERINȚĂ 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), // linie, de exemplu „Raport anticipat nr. 123 din 10/10/2015
Reprezentare (marcaj de ștergere) AS Text de marcare de ștergere, // șir, „Da” sau „Nu”
Vizualizare referențiere (Mark de ștergere) AS Mark de ștergere Boolean // Boolean, Adevărat sau Fals
DE
Document.Raport avans

A exprima

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

Express pentru tipul de referință este utilizat pentru a restricționa tipurile de date solicitate în câmpuri de tip complex, adesea utilizate pentru a optimiza performanța sistemului. Exemplu:

EXPRESS (Cost.Subconto1 Tabelul ca referință. Articolele de cost). Activitate Tip Pentru contabilitatea costurilor fiscale

Pentru tipurile primitive, această funcție este adesea utilizată pentru a limita numărul de caractere din câmpurile cu lungime nelimitată (astfel de câmpuri nu pot fi comparate). Pentru a evita eroarea „ Parametri nevalizi în operația de comparare. Nu puteți compara câmpuri
lungime nelimitată și câmpuri de tipuri incompatibile
", Este necesar să se exprime astfel de câmpuri după cum urmează:

EXPRESS (Comentariu AS Line (150))

DIFERENȚĂ

Obțineți gratuit 267 tutoriale video 1C:

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

ALEGE DIN
Spr
ÎNREGISTRARE ÎNREGISTRARE Registru de acumulare. Produse în depozite. Stânga AS Sold
Software NomenclatureRef.Ref \u003d ImplementedCommentsComponentsRemains.Nomenclature
UNDE ESTE BALANȚA PRODUSULUI. Soldul cantității este NUL

Tipul de date dintr-o interogare poate fi definit după cum urmează: folosind funcțiile TYPE () și TYPE () sau folosind operatorul logic REFERENCE. Cele două funcții sunt similare.

Valori predefinite

Pe lângă utilizarea parametrilor trecuți în solicitări în limba de interogare 1C, puteți utiliza valori predefinite sau. De exemplu, enumerări, directoare predefinite, planuri de conturi și așa mai departe. Pentru aceasta, se utilizează construcția „Value ()”.

Exemplu de utilizare:

WHERE Nomenclature.NomenclatureType \u003d Value (Directory.NomenclatureTypes.Product)

WHERE Contractors.Cont Information Type \u003d Value (Enumeration.Contact Information.Type.Phone)

UNDE Solduri de cont.Cont \u003d Valoare (Planul de conturi. Autosustenare.ProfitePerderi)

Conexiuni

Există 4 tipuri de conexiuni: STÂNGA, DREAPTA, COMPLET, INTERN.

STÂNGA și DREAPTA ÎNSCRIEȚI-VĂ

Asocierile sunt utilizate pentru a lega două tabele în funcție de o anumită condiție. Caracteristică la ARTICULAȚIA STÂNGA prin aceea că luăm primul tabel specificat integral și legăm condiționat al doilea tabel. Câmpurile celui de-al doilea tabel care nu au putut fi legate de condiție sunt completate cu valoarea NUL.

De exemplu:

Va returna întregul tabel al contrapărților și va completa câmpul „Bancă” numai în acele locuri în care va fi îndeplinită condiția „Counterparties.Name \u003d Banks.Name”. Dacă condiția nu este îndeplinită, va fi setat câmpul Bancă NUL.

ARTICOLUL DREPT în limbajul 1C absolut la fel Conexiune STÂNGA, cu excepția unei diferențe - în CONEXIUNE DREPTĂ Tabelul „principal” este al doilea, nu primul.

CONEXIUNE COMPLETĂ

CONEXIUNE COMPLETĂ diferă de stânga și dreapta prin faptul că afișează toate înregistrările din două tabele, se alătură doar celor pe care le poate uni după condiție.

De exemplu:

DE

CONEXIUNE COMPLETĂ
Director Bănci AS Bănci

DE

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

CONEXIUNE INTERNA

CONEXIUNE INTERNA diferă de cea completă prin faptul că afișează numai acele înregistrări care ar putea fi conectate prin condiția specificată.

De exemplu:

DE
Anuar Contractori AS Clienți

CONEXIUNE INTERNA
Director Bănci AS Bănci

DE
Clients.Name \u003d Bănci.Nume

Această cerere va returna numai liniile în care banca și contrapartida au același nume.

Asociațiile

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

Adică, sistemul funcționează în același mod ca de obicei, numai pentru o masă temporară.

Cum se utilizează SOFTWARE INDEX

Cu toate acestea, ar trebui luat în considerare un punct. Construirea unui index pe o masă temporară necesită, de asemenea, timp pentru finalizare. De aceea, este recomandabil să folosiți "" construcția numai dacă se știe sigur că nu vor exista 1-2 înregistrări în tabelul temporar. În caz contrar, efectul poate fi opus - performanța din câmpurile indexate nu compensează timpul de construire a indexului.

SELECTAȚI
Rate Rate SliceLast.Currency AS Currency,
Curs valutar SliceLast.Course
POST Rate valutare
DE
Registrul de informații. Tarife valutare. SliceLast (& Period,) AS Rate RateSliceLast
INDICE DE
Valută
;
SELECTAȚI
Prețuri Nomenclatură. Nomenclatură,
Prețuri Nomenclaturi. Preț,
Prețuri Nomenclaturi. Monedă,
Cursuri valutare.
DE
Register Information.NomenclaturePrices.SliceLast (& Period,
Nomenclatura B (& Nomenclatura) ȘI PriceType \u003d & PriceType) AS Prețuri
UNIUNEA STÂNGA Rata valutară AS Rata valutară
BY RatesNomenclature.Currency \u003d RatesCurrency.Currency

Gruparea

Limbajul de interogare 1C vă permite să utilizați funcții speciale de agregare atunci când grupați rezultatele interogării. Gruparea poate fi utilizată și fără funcții agregate pentru a „elimina” duplicatele.

Există următoarele funcții:

Suma, numărul, numărul diferitelor, maxim, minim, mediu.

Exemplul nr. 1:

SELECTAȚI
Vânzarea de mărfuri, servicii, mărfuri, nomenclatură,
SUMA (Vânzarea de bunuri, servicii, mărfuri. Cantitate) AS Cantitate,
SUMA (Vânzarea mărfurilor ServiciiMărfuri. Suma) AS Suma
DE

ÎNCĂRCARE DE
Realizarea mărfurilor ServiciiMărfuri.Nomenclatură

Solicitarea primește toate liniile cu mărfuri și le rezumă în funcție de cantitate și sume în contextul articolului.

Exemplul nr. 2

SELECTAȚI
Bănci. Cod,
CANTITATE (DIFERITE Bănci.Link) AS CantitateDoubles
DE
Director Bănci AS Bănci
ÎNCĂRCARE DE
Codul băncilor

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.

Rezultat

Totalurile sunt o modalitate de a obține date dintr-un sistem ierarhic. Funcțiile agregate pot fi utilizate pentru câmpuri rezumative, ca și pentru grupări.

Unul dintre cele mai populare moduri de utilizare a totalurilor în practică este eliminarea pe lot a mărfurilor.

SELECTAȚI




DE
Document.Realizarea bunurilorServicii.Marfurilor AS Vânzarea marfurilorServiciiMarfurilor
FILTREAZĂ DUPĂ

REZULTATE
SUMA (Cantitate),
SUMA (Suma)
DE
Nomenclatură

Rezultatul interogării va fi următorul ierarhic:

Rezumat general

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

SELECTAȚI
Realizarea mărfurilor, serviciilor, mărfurilor. Nomenclatura AS Nomenclatura,
Realizarea produsului GoodsServicesGoods.Link AS,
Realizarea de bunuri, servicii, bunuri. Cantitate AS Cantitate,
Vânzarea mărfurilor ServiciiMărfuri. Suma AS Suma
DE
Document.Realizarea bunurilorServicii.Marfurilor AS Vânzarea marfurilorServiciiMarfurilor
FILTREAZĂ DUPĂ
Implementarea GoodsServicesGoods.Link.Date
REZULTATE
SUMA (Cantitate),
SUMA (Suma)
DE
SUNT COMUNE,
Nomenclatură

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

În care primul nivel de grupare este agregarea tuturor câmpurilor obligatorii.

Comanda

Operatorul ORDER BY este utilizat pentru a sorta rezultatul interogării.

Sortarea pentru tipurile primitive (șir, număr, boolean) respectă regulile obișnuite. Pentru câmpurile de tipuri de referință, sortarea are loc prin reprezentarea internă a legăturii (identificator unic), și nu prin reprezentarea codului sau a legăturii.

SELECTAȚI

DE
Referință.Nomenclatură AS Nomenclatură
FILTREAZĂ DUPĂ
Nume

Interogarea va afișa o listă cu numele catalogului listei de stocuri sortate alfabetic.

Comandare automată

Rezultatul unei interogări fără sortare este un set de rânduri prezentat 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 tabelelor într-o ordine consecventă, trebuie să utilizați construcția „Autoorder”.

SELECTAȚI
Nomenclatura Nume AS Nume
DE
Referință.Nomenclatură AS Nomenclatură
COMANDARE AUTO

Tabelele virtuale

Tabelele virtuale din 1C sunt o caracteristică unică a limbajului de interogare 1C, care nu se găsește în alte sintaxi similare. Tabelul virtual este o modalitate rapidă de a obține informații de profil din registre.

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

  • felie din prima;
  • o tăietură din acesta din urmă.
  • resturi;
  • revoluții;
  • solduri și cifre de afaceri.
  • mișcări din subconto;
  • revoluții;
  • rPM Dt Kt;
  • resturi;
  • solduri și cifre de afaceri
  • subconto.
  • baza;
  • date grafice;
  • perioada efectivă de valabilitate.

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

SELECTAȚI
Produse În depozite Solduri și cifre de afaceri. Nomenclatură,
Mărfuri În depozite Solduri Și Cifra de afaceri. Cantitate Balanță de începere,
Mărfuri În depozite Solduri și cifre de afaceri.
Bunuri în depozite Solduri și cifră de afaceri.
Mărfuri În depozite Solduri Și Cifra de afaceri.
Produse În depoziteBalancesAndTurnover.QuantityBalan final
DE
Registrul de acumulare. Bunuri în depozite. Solduri și cifre de afaceri CA mărfuri în depozite Solduri și cifre de afaceri

O astfel de interogare vă permite să obțineți rapid o cantitate mare de date.

Parametrii tabelului virtual

Un aspect foarte important al lucrului cu tabele virtuale este utilizarea parametrilor. Parametrii tabelului virtual - parametri specializați pentru selecție și reglare.

Pentru astfel de tabele, se consideră incorectă utilizarea selecției în construcția „UNDE”. Pe lângă faptul că solicitarea nu devine optimă, este posibil să primiți date incorecte.

Un exemplu de utilizare a acestor parametri:

Registrul de acumulare.Produse În depozite.RemainsAndTurnovers (& BeginningPeriod, & EndPeriod, Month, Movements and PeriodBorders, Nomenclature \u003d & DesiredNomenclature)

Algoritmul tabelelor virtuale

De exemplu, tabelul virtual cel mai frecvent utilizat de tipul „Reziduuri” stochează date din două tabele fizice - solduri și mișcări.

Când utilizați o masă virtuală, sistemul efectuează următoarele manipulări:

  1. Obținem cea mai apropiată valoare calculată în ceea ce privește data și măsurătorile din tabelul totalurilor.
  2. „Adăugați” suma din tabelul de mișcare la suma din tabelul totalurilor.


Astfel de acțiuni simple pot îmbunătăți semnificativ performanța sistemului în ansamblu.

Folosind Query Designer

Constructor de interogări - un instrument încorporat în sistemul de întreprindere 1C, care facilitează foarte mult dezvoltarea de interogări către baza de date.

Constructorul de interogări are o interfață destul de simplă, intuitivă. Cu toate acestea, să aruncăm o privire mai atentă la utilizarea constructorului de interogări.

Constructorul de text de interogare este lansat de meniul contextual (cu butonul din dreapta al mouse-ului) în locul dorit al codului programului.

Descrierea constructorului de interogări 1C

Să aruncăm o privire mai atentă la fiecare filă de design. Excepția este fila Builder, acesta este un subiect pentru o altă discuție.

Tabele și câmpuri de file

Această filă specifică sursa de date și câmpurile pe care doriți să le afișați în raport. De fapt, construcțiile SELECȚIONEAZĂ .. DIN.

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

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

Fila Link-uri

Fila servește pentru a descrie conexiunile mai multor tabele, creează construcții cu cuvântul CONEXIUNE.

Fila de grupare

În această filă, sistemul vă permite să grupați și să rezumați câmpurile obligatorii ale rezultatului tabelului. Descrie utilizarea construcțiilor GRUPUL PE, SUMĂ, MINIMĂ, MEDIE, MAXIMĂ, CANTITATE, NUMĂR DE DIFERITE.

Fila Condiții

Responsabil pentru tot ceea ce apare în textul cererii după construcția WHERE, adică pentru toate condițiile impuse datelor primite.

Filă avansată

Tab În plus plin de tot felul de parametri care sunt foarte importanți. Să luăm în considerare fiecare dintre proprietăți.

Gruparea Preluarea înregistrărilor:

  • Primul N - un parametru care returnează numai N înregistrări la interogare (operator FIRST)
  • Fără repetitive - asigură unicitatea înregistrărilor primite (operator DIFERIT)
  • Permis - vă permite să selectați numai acele înregistrări pe care sistemul vă permite să le selectați, luând în considerare (construcția PERMISĂ)

Gruparea Tip de solicitaredetermină 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 modificări ulterioare... Vă permite să activați posibilitatea de a seta o blocare a datelor, care asigură siguranța datelor din momentul în care sunt citite până când sunt modificate (relevantă doar pentru modul automat de blocare, structura PENTRU SCHIMBARE).

Fila Uniuni / Aliasuri

În această filă a proiectantului de interogări, puteți seta abilitatea de a combina diferite tabele și aliasuri (construcția CUM). Tabelele sunt indicate în stânga. Dacă setați steagurile în fața mesei, va fi utilizată construcția UNION, altfel - UNION ALL (cele două moduri diferă). Partea dreaptă indică corespondența câmpurilor din diferite tabele, dacă nu este specificată nicio potrivire, interogarea va returna NULL.

Fila Comandă

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

Există, de asemenea, un steag interesant - Comandare automată (în cerere - COMANDĂ AUTO). În mod implicit, sistemul 1C afișează datele într-o ordine „haotică”. Dacă setați acest semnal, sistemul va sorta datele după datele interne.

Fila Pachet de interogare

În fila Designer de interogări, puteți crea altele noi și o puteți utiliza și ca navigare. În textul cererii, pachetele sunt separate prin caracterul „;” (virgulă).

Butonul de interogare în Generatorul de interogări

În colțul din stânga jos al constructorului de interogare există un buton de interogare, cu care puteți vizualiza textul interogării în orice moment:

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


Utilizarea Consolei de interogare

Consola de interogare este un mod ușor și convenabil de a depana interogări complexe și de a obține informații rapid. În acest articol voi încerca să descriu modul de utilizare a Consolei de interogare și să furnizez un link pentru a descărca Consola de interogare.

Să aruncăm o privire mai atentă asupra acestui instrument.

Descărcați 1C Query Console

În primul rând, pentru a începe cu Consola de interogare, trebuie să o descărcați de undeva. Procesele sunt de obicei împărțite în două tipuri - formulare gestionate și regulate (sau, uneori, sunt apelate la 8.1 și 8.2 / 8.3).

Am încercat să combin aceste două vizualizări într-o singură procesare - în modul de operare necesar, se deschide forma necesară (în modul controlat, consola funcționează numai în modul gros).

Descrierea consolei de interogare 1C

Să începem să analizăm consola de interogare descriind panoul principal de procesare:

În antetul consolei de interogare, puteți vedea timpul de execuție al ultimei interogări cu precizie de milisecunde, acest lucru vă permite să comparați diferite constructe din punct de vedere al performanței.

Primul grup de butoane din bara de comenzi este responsabil pentru salvarea cererilor 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, păstrați o listă cu exemple tipice de anumite construcții.

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

  • A executacerere - executare simplă și obținerea rezultatului
  • Rulați pachetul - vă permite să vizualizați toate cererile intermediare din lotul de solicitări
  • Vizualizarea tabelelor temporare - vă permite să vedeți rezultatele care sunt returnate de interogări temporare în tabel

Solicitați parametrii:

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

Următorul este interesant în fereastra parametrilor de interogare:

  • Buton Obțineți din cerere găsește automat toți parametrii în cerere pentru confortul dezvoltatorului.
  • Steag Parametri uniformi pentru toate cererile - când este instalat, procesarea acestuia nu șterge parametrii atunci când se trece de la cerere la cerere în lista generală de cereri.

Setați parametrul ca listă de valori este foarte simplu, când selectați o valoare a parametrului, faceți clic pe butonul de ștergere a valorii (încrucișat), sistemul vă va oferi să selectați un tip de date, unde trebuie să selectați „Lista valorilor”:

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

Aici puteți specifica opțiuni pentru salvarea automată a interogărilor și opțiuni pentru executarea unei interogări.

Textul interogării este introdus în câmpul interogării consolei. Acest lucru se poate face cu o suită simplă de testare a interogărilor sau apelând un instrument special - proiectantul de interogări.

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

De asemenea, în acest meniu există funcții utile precum ștergerea sau adăugarea caracterelor de întrerupere a liniei („|”) la cerere sau obținerea codului de cerere într-o formă atât de convenabilă:

Cerere \u003d Cerere nouă;
Request.Text \u003d "
| ALEGE
| Valute.Link
| FROM
| Director. Valute AS Valute ”;
QueryResult \u003d Query.Run ();

În câmpul inferior al consolei de interogare, este afișat câmpul rezultatului interogării, pentru care a fost creată această procesare:



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

Optimizarea interogărilor

Unul dintre cele mai importante puncte în creșterea productivității 1C Enterprise 8.3 este optimizaresolicitări... Acest punct este, de asemenea, foarte important atunci când trecerea certificării ... Mai jos vom vorbi despre motivele tipice de lucru suboptim al interogărilor și metodele de optimizare.

Selecții într-un tabel virtual folosind o construcție WHERE

Este necesar să aplicați filtre la detaliile tabelului virtual numai prin intermediul parametrilor BT. În nici un caz nu ar trebui să utilizați construcția WHERE pentru selecție într-un tabel virtual, aceasta este o eroare brută din punct de vedere al optimizării. În cazul selecției folosind WHERE, de fapt, sistemul va primi TOATE înregistrările și numai atunci le va selecta pe cele necesare.

DREAPTA:

SELECTAȚI

DE
Registrul de acumulare. Așezări reciproce cu deponenți. Organizații. Rămâne (
,
Organizație \u003d & Organizație
Și individual \u003d și individual) CUM decontări reciproce cu organizații dependente

GRESIT:

SELECTAȚI
Așezări reciproceCuDeponențiOrganizațiiSolduri.SumăBalanță
DE
Registrul de acumulare. Decontări reciproce cu deponenți Organizații. Solduri (,) AS decontări reciproce cu deponenți Organizații solduri
UNDE
SettlementsWith DeponentsOrganizationsBalances.Organization \u003d & Organizare
Și decontări reciproce Cu DeponentsOrganisationsBalances.Personal \u003d & Individual

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

Când primiți date de tip compozit într-o interogare printr-un punct, sistemul se unește cu o îmbinare la stânga exact atâtea tabele câte tipuri sunt posibile în câmpul tipului compozit.

De exemplu, este extrem de nedorit ca optimizarea să se refere la câmpul de înregistrare a registrului - registratorul. Registratorul are un tip de date compuse, incluzând toate tipurile posibile de documente care pot scrie date în registru.

GRESIT:

SELECTAȚI
Set set.Registrator.Date,
Set de înregistrări.Număr
DE
Registrul de acumulare.ProduseOrganizații AS SetRecords

Adică, de fapt, o astfel de cerere 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.Realization of GoodsServices
THEN EXPRESS (GoodsOrg.Registrar AS Document. Realizarea produselorServices) .Data
WHEN GoodsOrg.Registrar LINK Document.Sosirea produselorServices
THEN EXPRESS (GoodsOrg.Registrar AS Document. Arrival of GoodsServices) .Data
FINALIZARE AS Data,
ProductsOrg.Quantity
DE
Registrul de acumulare. GoodsOrg

Sau a doua opțiune este să adăugați astfel de informații la recuzită, de exemplu, în cazul nostru, adăugați data.

DREAPTA:

SELECTAȚI
ProduseOrganizații.Dată,
ProduseOrganizații.Număr
DE
Registrul de acumulare. Mărfuri ale organizațiilor ca bunuri ale organizațiilor

Solicitări într-o condiție de asociere

Pentru optimizare, este inacceptabil să utilizați subinterogări în condiții de asociere, ceea ce încetinește semnificativ interogarea. Este recomandabil să utilizați TV în astfel de cazuri. Pentru a vă conecta, trebuie să utilizați numai metadate și obiecte BT, după ce le-ați indexat anterior prin câmpurile de conexiune.

GRESIT:

SELECTAȚI …

ARTICOLUL STÂNGA (
ALEGEȚI DIN Foaia de date. Limite
UNDE ...
ÎNCĂRCARE DE ...
) DE …

DREAPTA:

SELECTAȚI …
Limite POST
DIN Registrul de informații. Limite
UNDE ...
ÎNCĂRCARE DE ...
INDICE DE ...;

SELECTAȚI …
DIN Document.Realizarea bunurilor Servicii
LEGĂTURI ÎN STÂNGA Limite
DE …;

Alăturarea înregistrărilor cu tabele virtuale

Există situații în care sistemul nu funcționează optim atunci când se alătură unei mese virtuale cu alții. În acest caz, pentru a optimiza performanța interogării, puteți încerca să puneț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 a le selecta, iar problema este similară cu punctul anterior.

Utilizarea selecțiilor pe câmpuri neindexate

Una dintre cele mai frecvente greșeli atunci când scrieți interogări este utilizarea condițiilor pe câmpuri neindexate, acest lucru contrazice reguli de optimizare a interogării. SGBD nu poate efectua interogarea în mod optim dacă interogarea se suprapune câmpurilor neindexate. Dacă este luat un tabel temporar, este necesar, de asemenea, să indexați câmpurile de asociere.

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

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

Dacă SGBD nu găsește indexurile corecte, atunci întregul tabel va fi scanat - acest lucru va avea un impact foarte negativ asupra performanței și poate duce la blocarea prelungită a întregului set de înregistrări.

Utilizarea OR logică în condiții

Gata, acest articol a acoperit elementele de bază ale aspectelor de optimizare a interogărilor pe care fiecare expert 1C ar trebui să le cunoască.

Un curs video foarte util gratuit despre dezvoltarea și optimizarea interogărilor, recomandat cu tărie pentru începători și nu numai!