Procedura de lucru cu obiectul de cerere de limbă încorporat. Care este scopul obiectului de configurare „Limbă”?

Dezvoltarea unei soluții de aplicație în sistemul 1C: Enterprise constă din două acțiuni principale: proiectarea vizuală a obiectelor de configurare și descrierea comportamentului specific al sistemului folosind limbajul încorporat și limbajul de interogare.

Limbajul încorporat al sistemului 1C: Enterprise are multe asemănări cu alte limbaje de programare, dar nu este un analog direct cu niciuna dintre ele. Caracteristicile sale cele mai semnificative:

· soft typing (tipul unei variabile este determinat de tipul valorii pe care o conține și se poate modifica în timpul funcționării);

· lipsa descrierii software a tipurilor de aplicații (acestea sunt create la adăugarea obiectelor de configurare);

· limbaj încorporat orientat spre evenimente;

· toți operatorii au atât ortografie rusă, cât și engleză, care pot fi folosite simultan.

Module de configurare

Modulele soluției aplicației sunt concepute pentru a plasa textul programului în limbajul încorporat. Aceste module sunt amplasate în locuri diferite în configurație și au scopuri diferite. Majoritatea modulelor sunt „legate” de anumite obiecte de configurare sau de soluția aplicației în sine.

Se disting următoarele tipuri de module software:

· Module comune. Configurația poate avea un număr arbitrar de module, inclusiv niciunul. Modulele comune în sine nu sunt apelate în timpul procesului de configurare. Acestea servesc doar pentru a conține textele procedurilor și funcțiilor care pot fi apelate din alte module ale soluției aplicației. Prin urmare, le lipsește o secțiune de descriere variabilă și o secțiune principală a programului. Acea. Modulele comune conțin doar proceduri și funcții.

· Modul de aplicație. Există întotdeauna un singur modul de aplicație în configurație. Este executat atunci când sistemul pornește în 1C: modul Enterprise și este destinat să elaboreze acțiuni legate de sesiunea de lucru a utilizatorului final. Principalele evenimente care pot fi procesate într-un modul de aplicație sunt evenimentele de început și de sfârșit ale aplicației. Secvența apelului este afișată în orez. 1. Eveniment Înainte de a porni sistemul Apare când sistemul pornește înainte ca fereastra principală să se deschidă. Prin gestionarea acestui eveniment, dezvoltatorul, de exemplu, are posibilitatea de a refuza să ruleze dacă nu sunt îndeplinite condițiile. Eveniment La pornirea sistemului apare după deschiderea ferestrei principale. În gestionarea acestui eveniment, puteți, de exemplu, să afișați informații despre persoanele de naștere etc.

· Modul de conectare extern. Există întotdeauna un singur modul de conectare extern în configurație. Se execută atunci când aplicația este accesată ca server COM (în modul de conectare externă). În modul de conectare externă, nu este lansată aplicația cu drepturi depline 1C: Enterprise, ci o „versiune ușoară” în care nu sunt disponibile toate funcțiile care sunt într-un fel sau altul legate de organizarea interfeței cu utilizatorul.

· Module obiect aplicație. Fiecare obiect de configurare a aplicației (de exemplu, un document software sau un director), ale cărui date pot fi modificate în modul 1C: Enterprise, are propriul modul. Pe lângă descrierea variabilelor și a programului principal, un modul obiect poate conține o descriere a procedurilor - handlere de evenimente asociate unui obiect de configurare dat. Există două evenimente care sunt ridicate pentru toate obiectele - Înainte de înregistrareȘi Când se înregistrează.

· Module de formulare. Fiecare formular are propriul modul, care definește comportamentul formularului și acțiunile efectuate din acesta, de exemplu, deschiderea altor formulare. Evenimente sunt ridicate pentru toate formele Înainte de deschidere, în timpul deschiderii, înainte de închidereȘi La Închidere.

Context

În sistemul 1C: Enterprise, contextul denotă mediul modulului, adică. variabile, obiecte, proprietăți, metode și evenimente disponibile. Putem distinge următoarele tipuri de contexte și, în consecință, reguli pentru vizibilitatea variabilelor, procedurilor și funcțiilor exportate:

· Contextul global, disponibil în toate celelalte contexte, constă din următoarele părți:

§ proprietăți, metode și evenimente ale contextului global (de exemplu, proprietatea Data de lucru);

§ enumerari de sistem si seturi de valori de sistem (de exemplu, Return CodeDialogȘi Simboluri).

· Contextul comun al modulului format din contextul global și contextul local al modulului general în sine (adică procedurile și funcțiile definite în cadrul modulului general). În contextul unui modul comun, sunt disponibile procedurile exportate și funcțiile altor module comune. Variabilele, procedurile și funcțiile exportate ale modulului de aplicație nu sunt disponibile.

· În contextul unui modul de aplicație sau al unui modul de conectare extern Sunt disponibile procedurile și funcțiile exportate ale modulelor comune.

· În contextul unui modul obiect aplicație există acces la detaliile și părțile tabulare ale obiectului, precum și la metodele și evenimentele acestuia. Variabilele exportate, procedurile și funcțiile modulului de aplicație (modul de conexiune extern) și modulele comune sunt disponibile aici.

· În contextul unui modul de formular detaliile formularului sunt disponibile, precum și proprietățile formularului, metodele și evenimentele. Dacă un formular are alocat un atribut principal, atunci proprietățile și metodele obiectului aplicație utilizat ca atribut principal devin disponibile în modulul formular.

Relația dintre contexte este prezentată schematic în orez. 2. Pe orez. 3 descrie posibila interacțiune a modulului formular jurnal și modulul document.


Proceduri și funcții

Procedurile și funcțiile sunt blocuri de program care pot fi apelate după nume dintr-o altă locație, cum ar fi o altă procedură. Funcțiile diferă de proceduri doar prin aceea că au o valoare returnată. În versiunea 8, ordinea procedurilor și funcțiilor nu este importantă. Aceasta înseamnă că procedura poate fi localizată mai jos de unde este numită.

Procedurile și funcțiile pot avea parametri care definesc ce acțiuni ar trebui să facă cu ce obiecte. Parametrii unei proceduri sau ai unei funcții sunt transferați implicit prin referință. Aceasta înseamnă că modificarea unui parametru formal într-o procedură sau funcție va schimba parametrul real în punctul în care este apelat. Pentru a garanta că un parametru este transmis după valoare, trebuie să inserați un cuvânt cheie înaintea numelui parametrului Sens.

Exemplul 1:

Procedură Calculați()

Sumă=Preț*Cantitate;

Sfârșitul procedurii

Calcul(); // Apelați procedura

Exemplul 2:

Perem Glob;

// Descrierea procedurii

Calcul procedurii (Par1, Par2, ParZ) Export

Glob = Glob + Par1 + Par2 + ParZ;

Sfârșitul procedurii

Calcul (5, 6, 7); // Apelați procedura

Exemplul 3:

Perem Glob;

// Descrierea funcției

Calcul funcției (Par1, Par2, ParZ) Export

Lok = Glob + Par1 + Par2 + ParZ;

Blocare de întoarcere;

EndFunction

Res = Calc(5, 6, 7); // Apel de funcție

Tipuri de date

Număr, șir, dată, boolean, nedefinit, nul (pentru valori nespecificate în tabelele bazei de date)

Tip. Valorile de tipul special „Tip” sunt necesare pentru a reprezenta și compara tipurile de date, de exemplu:

Declararea variabilelor

Variabilele apar în program în următoarele cazuri:

· după ce sunt declarate folosind operatorul Variabil.

Perem<Имя_переменной>[Export];

Variabila A, B;

· după prima plasare a numelui variabilei în partea stângă a operatorului de atribuire.

Exemplu:

· la determinarea numelor identificatorilor elementelor de dialog editate;

· la stabilirea parametrilor formali ai procedurilor.

Distribuție

Castingul tipului poate fi explicit sau implicit.

Pentru casting explicit, există următoarele funcții: Number, String, Date, Boolean. Turnarea tip implicit este efectuată automat de către sistem la evaluarea expresiilor.

Exemplu: valoarea variabilei numerice MonthNumber este implicit convertită într-un șir și atașată la alt șir:

A = „Lună” + MonthNumber;

Directoare

Lucrul cu directoarele se realizează folosind următoarele obiecte:

· DirectoriesManager. Oferă acces la toate cărțile de referință de configurare. Proprietățile acestui obiect coincid cu numele directoarelor și conțin obiecte de tip DirectoryManager.

· DirectoryManager. Oferă acces la operațiunile dintr-un director ca un set de elemente. Folosind metodele acestui obiect, puteți căuta, obține o selecție, puteți crea elemente noi și puteți accesa formulare și machete de director.

· DirectoryLink. Identifică fără ambiguitate un element (grup) al directorului și vă permite să-l accesați în modul doar citire. Prin proprietățile și metodele acestui obiect, puteți citi detaliile unui element (grup) și puteți accesa părțile tabulare ale acestuia. Valoarea acestui tip este stocată în atribute care se referă la elemente din acest director, de exemplu, în atributul Angajat document Recrutare este stocat un link către un anumit element de director Angajatii.

· DirectoryObject. Oferă acces de scriere la un element. Acest obiect conține metode care afectează un element din baza de date, de exemplu, metode ScrieȘi Șterge.

· DirectorySelection. Oferă capacitatea de a itera prin elementele directorului. Eșantionarea poate fi directă sau ierarhică.

· DirectoryList. Un obiect pentru gestionarea listei de elemente dintr-un câmp de tabel. Vă permite să gestionați coloanele, selecția și sortarea în listă.

În sistemul 1C:Enterprise?

1. Textele de configurare și baze de date sunt stocate în formatUNICODE

3. Nu există un răspuns corect

6.75 În ce scop sunt stocate textele de configurare și baze de date în formatUNICODE?

1. Formatul UNICODE asigură imuabilitatea (independența platformei software a sistemului de operare) prezentării informațiilor

2. FormatUNICODE vă permite să acceptați diferite limbi în sistemul 1C:Enterprise

3. Nu există un răspuns corect

6.76 Mecanisme de internaționalizare stabilite. ..

1. platforma tehnologică 1C: Enterprise

2. solutii aplicate

3. Răspunsurile 1 și 2 sunt corecte

4. nu există un răspuns corect

6.77 Ce este un cod de localizare?

1. Un șir format dintr-un cod de limbă și un cod de țară care identifică o regiune a lumii

2. Cod produs software (indicat pe formularul de înregistrare, documentație inclusă în trusa de livrare)

3. Opțiunea de format șir pentru conversie

4. Răspunsul ei este corect

6.78 Este adevărat că în 1C:Enterprise 8 orice informație text poate include simultan caractere din diferite limbi?

1. Da, deoarece toate configurațiile și textele bazei de date sunt stocate în formatUNICODE

2. În funcție de setările specificate la crearea bazei de informații

3. Numai dacă acest lucru este furnizat de configurație

6.79 Care este scopul obiectului de configurare „Limbă”?

1. Pentru a crea o interfață de program în diferite limbi

2. Pentru a crea documente text în diferite limbi

3. Un astfel de obiect nu există în 1C: Enterprise 8

6.80 Cum pot schimba limba pentru vizualizarea (editarea) configurației?

1. Folosind butonul de selectare a limbii situat în bara de stare din dreapta butonului „NUM”.

2. Prin elementul de meniu „Configurare - Limbă de editare a configurației”

3. În 1 C: Enterprise această posibilitate nu există

4. Verpa răspunde la 1 și 2

6.81 Care este ortografia operatorilor de limbă încorporați?

1. Doar scris rusesc

3.

6.82 Este posibil să utilizați operatori de limbă încorporați în scris în rusă și engleză într-un singur text sursă?

1. Numai cu setări speciale ale configuratorului

2. Da, aceasta nu necesită modificarea setărilor configuratorului

3. Nu, deoarece opțiunea de limbă încorporată este setată în proprietățile de configurare

6.83 Care este scopul limbajului încorporat?

1. Pentru a determina interfața implicită a programului

2. Să descrie (la etapa de dezvoltare a configurației) algoritmi pentru funcționarea unei sarcini aplicate

3. Nu există un răspuns corect

6.84 Care este ortografia funcțiilor de limbaj încorporate?

1. Doar scris rusesc

2. Doar ortografie engleză

3. Scriere rusă și engleză

4. În funcție de setările configuratorului

6.85 Ce înseamnă parametrul L?(L) în șirul de format al funcției de formatare NumberInWriting()?

1. Semnează „ieșiți partea fracțională în numere/cuvinte”

2. Numărul de zecimale

3. Cod de localizare

7. Model tabelar al soluției aplicației

7.1 Când configurați restricții de acces la date, puteți seta mai multe restricții (în funcție de numărul de câmpuri):

1. Pentru dreptul „Citește”.

2. Pentru „Schimbarea” corectă

3. Pentru dreptul „Adăugați”.

4. Pentru dreptul „Ștergere”.

5. Pentru toate drepturile de mai sus

6. Pentru toate drepturile posibile

7.2 La configurarea restricțiilor de acces la date, următoarele pot fi utilizate ca valori prin care se fac restricțiile de acces la date:

1. Numai valorile parametrilor de sesiune

2. Numai date din tabele (interogări)

3. Valorile parametrilor de sesiune și datele din tabele (interogări)

4. Doar valori cu tipuri: Număr, șir, boolean, dată

7.3 Care dintre metodele de mai sus pot fi folosite astfel încât codul și numele directorului să apară în secțiunea „Câmpuri” a designerului de interogări?

1. Completați mai întâi secțiunea „Tabele”, apoi, selectând obiectele dorite din această secțiune, mutați-le în secțiunea „Câmpuri” folosind un dublu clic cu butonul stâng al mouse-ului

2. Fără a completa secțiunea „Tabele”, selectați imediat obiectele necesare din tabelele - surse de date ale secțiunii „Bază de date”, transferându-le în secțiunea „Câmpuri” folosind tehnologia Drag & Drop. Secțiunea „Tabele” este completată automat

3. Completați mai întâi secțiunea „Tabele”, apoi, selectând obiectele necesare din această secțiune, transferați-le în secțiunea „Câmpuri” folosind butoanele de pe formularul „>” „””

4. Răspunsurile I și 3 sunt corecte

5. Răspunsurile I, 2 și 3 sunt corecte

7.4 Pentru a crește viteza de execuție a cererii, trebuie să:

1. Setați parametrii pentru majoritatea tabelelor reale

2. Setați parametrii pentru majoritatea tabelelor virtuale

3. În loc să specificați parametrii pentru un tabel real sau virtual, utilizați selecția specificată de constructul limbajului de interogare „WHERE”

4. Răspunsurile I și 2 sunt corecte

7.5 Este posibil să îi atribuiți un nou nume (alias) atunci când selectați un tabel sursă în secțiunea „Tabele” a designerului de interogări?

1. da, poti

2. Da, puteți, dar numai dacă sursa de date este o interogare imbricată

3. Da, puteți, dar numai dacă sursa de date este un tabel virtual

4. Răspunsurile 1 și 2 sunt corecte

5. Răspunsurile 1 și 3 sunt corecte

7.6 O interogare imbricată poate fi utilizată:

1. Ca tabel sursă de date

2. Ca operand al operațiunilor de comparare „B” sau „NU B” la setarea parametrilor tabelului virtual

3. Ca operand al operațiilor de comparare „B” sau „NU B” atunci când se specifică constructul limbajului de interogare „UNDE”

4. Verpa răspunde la 1, 2 și 3

7.7 Este posibil să obțineți totaluri în funcție de ierarhie folosind designerul de interogări?

1. Este posibil dacă specificați tipul total „Elemente și Ierarhie” pentru câmpul de grupare

2. Este posibil dacă specificați tipul total „Numai Ierarhie” pentru câmpul de grupare

3. Verpa răspunde la 1 și 2

7.8 În fila „Condiții” a designerului de interogări, poate fi generată o linie separată a listei de condiții:

1. Faceți dublu clic cu butonul stâng al mouse-ului pe câmpul dorit din lista câmpurilor disponibile

2. Prin mutarea câmpului dorit în listă utilizând tehnologia Drag & Drop

3. Faceți clic pe butonul „Adăugați”. Dacă condiția este arbitrară, atunci textul condiției poate fi introdus „manual”

4. Apelați meniul contextual și selectați „Adăugați” din acesta. Este posibil să folosiți o expresie arbitrară

5. Toate răspunsurile de mai sus sunt corecte

7.9 În fila „Legături” a designerului de interogări, puteți defini:

1. Conectarea tabelelor surselor de date și a relațiilor dintre acestea

2. Combinarea tabelelor surselor de date și a conexiunilor dintre ele

3. Relații între câmpurile tabelului obținute în urma interogării

4. Relații dintre câmpurile tabelului sursă de date și tabelul obținut în urma interogării

7.10 Când conectați tabele surse de date în designerul de interogări, puteți:

1. Atribuiți o conexiune fără a specifica condiția conexiunii

2. Atribuiți o conexiune care indică starea conexiunii, iar această condiție poate fi doar una

3. Atribuiți o conexiune care indică starea conexiunii, iar această condiție poate fi doar simplă

4. Atribuiți numărul necesar de conexiuni indicând numărul necesar de condiții de comunicare, iar aceste condiții pot fi fie simple, fie arbitrare

7.11 Crearea unei conexiuni între tabelele surse de date în designerul de interogări permite:

1. Unirea doar a două tabele surse de date

2. Conectarea numărului necesar de tabele surse de date

3. Conectarea doar a două tabele surse de date și caseta de selectare „Toate” trebuie bifată pentru cel puțin unul dintre tabele

De bază, ceea ce face mai ușor de învățat pentru dezvoltatorii începători. Cu toate acestea, nu este un analog direct cu nici una dintre limbile enumerate.

Iată doar câteva dintre cele mai importante caracteristici ale limbajului încorporat:

  • pre-compilare; înainte de execuție, modulele care conțin text în limbajul încorporat sunt convertite în cod intern;
  • stocarea în memoria cache a modulelor compilate;
  • tastare soft - tipul unei variabile este determinat de tipul valorii pe care o conține și se poate modifica în timpul funcționării;
  • lipsa descrierii software a obiectelor de configurare; Dezvoltatorul poate folosi fie obiecte încorporate în platformă, fie obiecte create de sistem ca rezultat al designului vizual al soluției aplicației.

Limbajul încorporat orientat spre evenimente. Scopul limbajului încorporat în sistemul 1C:Enterprise este determinat de ideologia creării de soluții de aplicație. Soluțiile de aplicație din 1C:Enterprise 8.0 nu sunt complet codificate. Cea mai mare parte a soluției aplicației este creată de dezvoltator prin proiectare vizuală - crearea de noi obiecte de configurare, setarea proprietăților acestora, formele de prezentare, relațiile etc. Limbajul încorporat este folosit doar pentru a determina comportamentul obiectelor soluției aplicației care diferă de unul standard și să-și creeze proprii algoritmi de procesare a datelor.

Din acest motiv, modulele care conțin text în limbajul încorporat sunt folosite de sistem în situații specifice, cunoscute anterior, care pot apărea în timpul funcționării soluției aplicației. Astfel de situații se numesc evenimente. Evenimentele pot fi asociate cu funcționarea obiectelor soluției aplicației sau cu soluția aplicației în sine, ca atare.

De exemplu, un număr de evenimente sunt asociate cu funcționarea obiectului soluție de aplicație Directory, printre care se numără și evenimentul BeforeWrite. Acest eveniment are loc chiar înainte ca datele elementului din director să fie scrise în baza de date. Un dezvoltator, folosind un limbaj încorporat, poate descrie un algoritm care, de exemplu, va verifica corectitudinea datelor introduse de utilizator. Prin plasarea acestui algoritm în modulul corespunzător, dezvoltatorul se va asigura că de fiecare dată când utilizatorul înregistrează un element de director, sistemul va executa algoritmul creat de dezvoltator și va verifica dacă utilizatorul a uitat să completeze detaliile de director necesare.

Astfel, putem spune că limbajul încorporat este un limbaj de scripting pentru programarea logicii de afaceri, iar utilizarea modulelor în limbajul încorporat este dependentă de eveniment, adică. modulele sunt executate atunci când apar anumite evenimente în timpul funcționării soluției aplicației.

Tipuri de date predefinite

Platforma 1C:Enterprise 8.0 permite dezvoltatorului să utilizeze diferite tipuri de date.

Există un număr mare de tipuri de date care sunt definite la nivelul platformei în sine. De exemplu asta tipuri de date primitive, cum ar fi șir, număr, dată etc.


Descriere tipuri de date primitive:

  • NUL- valoare lipsă. Folosit, de exemplu, în interogări.
  • Nedefinit- valoare goală, nedefinită. Este folosit, de exemplu, la evaluarea transmiterii parametrilor dacă acest parametru este omis la apelarea unei proceduri sau funcție. Detaliile care au un tip de date compus sunt de tipul „Nedefinit” în mod implicit.
  • boolean- conține două valori: adevărat sau fals. Folosită, de exemplu, în expresii logice - o expresie logică este de tip „Boolean”.
  • Data- conține data și ora. Valoarea implicită este 01/01/01 00:00:00 data de începere a erei noastre. Timpul se măsoară de la începutul zilei. O expresie care are un tip literal „data” este scrisă după cum urmează - „00010101000000”. Mai întâi se notează anul, apoi luna, apoi data și apoi ora. Următoarea intrare este posibilă: „20041031”. Ora implicită este începutul zilei.
  • Linia- poate fi de lungime variabilă, fixă ​​sau nelimitată. În general, se recomandă utilizarea șirurilor de lungime variabilă.
  • Număr- adâncimea de biți a numărului a fost mărită la 38 de biți.
  • Tip- serveşte la determinarea tipurilor de valori. Folosit, de exemplu, pentru a compara tipuri de date. Nu are literale și este returnat de funcțiile Type(<Имя типа>) sau TypeValue(<Значение>).

De asemenea, sunt mai multe tipuri de date complexe. De exemplu, platforma acceptă o serie de tipuri care sunt colecții universale de valori: matrice, structură, listă de valori, arbore de valori etc.


Tipuri de date „Colecții universale” - o listă (set) de obiecte de date de orice tip, ale căror valori pot fi accesate prin forță brută sau printr-un index (cheie) specificat. Numerotarea elementelor de colecție începe de la 0. Toate tipurile de date specificate sunt create numai programatic.

Matrice. Reprezintă o colecție numerotată de valori de tip arbitrar. Un element de matrice poate fi accesat prin indexul său. Elementele unei matrice pot fi, în special, alte matrice. Acest lucru vă permite să creați tablouri multidimensionale.

Structura. Reprezintă o colecție numită constând din perechi cheie-valoare. Cheia poate fi doar un șir, valoarea poate fi de tip arbitrar. Un element de structură poate fi accesat prin valoarea cheii sale, adică. dupa nume. De obicei, folosit pentru a stoca un număr mic de valori, fiecare cu un nume unic.

Corespondenţă. La fel ca Structure, este o colecție de perechi Cheie - Valoare. Cu toate acestea, spre deosebire de o Structură, o cheie poate fi de aproape orice tip.

Lista de valori. Utilizat de obicei pentru a rezolva probleme de interfață. Vă permite să construiți seturi dinamice de valori și să le manipulați (adăugați, editați, ștergeți elemente, sortați). Poate conține valori de orice tip; în plus, tipurile de valori stocate într-o singură listă pot fi diferite.

Tabelul de valori. Un tabel de valori vă permite să construiți și să manipulați seturi dinamice de valori. Poate fi umplut cu valori de orice tip, iar într-un singur tabel tipurile de valori stocate pot fi diferite.

Arborele valorilor. Un arbore de valori este un set generat dinamic de valori de orice tip, similar unui tabel de valori. Spre deosebire de un tabel de valori, rândurile unui arbore de valori pot forma structuri ierarhice: fiecare rând din arbore poate avea un set de rânduri subordonate, fiecare dintre rândurile subordonate poate avea la rândul său și un set de rânduri subordonate și așa mai departe. În acest caz, căutarea valorilor, sortarea și obținerea rezultatelor pot fi efectuate fie în funcție de nivelul ierarhic curent, fie incluzând toate cele subordonate.

COMSafeArray. Reprezintă un înveliș de obiect peste o matrice multidimensională SAFEARRAY de

Procedură SelectFromFileClick(Element) // Selectarea unui fișier cu viewingFileSelectionDialog = NewFileSelectionDialog(FileSelectionDialogMode.Open); FileSelectionDialog.Directory = ""; FileSelectDialog.Preview = Adevărat; FileSelectionDialog.FilterIndex = 0; Dacă FileSelectDialog.Select() Then File = New File(FileSelectDialog.FullFileName); Imagine = NewValueStorage(NewImage(FileSelectionDialog.FullFileName)); DisplayImage(); endIf; Sfârșitul procedurii

THIS_KEYWORD
<Это конструкция языка>,
<Это конструкция языка>
THIS_FUNCTION(<Это конструкция языка>)

În regulile care descriu un limbaj de interogare, constructele limbajului sunt indicate între paranteze unghiulare. Cuvintele cheie și numele funcțiilor sunt descrise cu majuscule.

Constructele limbajului pot conține elemente opționale - cuvinte cheie etc. În regulile care descriu limbajul de interogare, elementele opționale sunt incluse între paranteze drepte „[” și „]”:

[ACSTA ESTE UN CUVÂNT OPȚIONAL] [<Это необязательная конструкция>]

În unele cazuri, designul limbajului poate utiliza unul dintre mai multe elemente alternative. Astfel de elemente din reguli sunt enumerate printr-o bară verticală „|”:

EITHER_THIS_WORD | SAU THIS_WORD
<Либо эта конструкция> | <Либо эта конструкция>

Descrierile tuturor constructelor sunt însoțite de exemple care explică modul în care sunt utilizate în limbajul de interogare.

Comentarii în limbajul de interogare

Organismul solicitant poate include comentarii. Un comentariu este considerat a fi o parte a unei linii care începe cu secvența de caractere // și continuă până la sfârșitul rândului:

// Acesta este un comentariu.

Comentariile sunt ignorate atunci când cererea este executată.

Reprezentarea bilingvă a cuvintelor cheie

Una dintre caracteristicile semnificative ale limbajului de interogare 1C: Enterprise este că, ca și în limbajul încorporat, toate cuvintele cheie au două ortografii: în rusă și engleză. Mai târziu, în acest capitol, sunt indicate ortografia rusă a cuvintelor cheie. Mai jos este un tabel care arată corespondența dintre rusă și engleză și opțiunile de ortografie pentru cuvintele cheie în limba de interogare...... (omis)

Secțiunile principale ale textului cererii

Textul cererii poate fi descris prin următoarea regulă:

<Описание запроса>
[<Объединение запросов>]
[<Упорядочивание результатов>]
[COMANDĂ AUTOMATĂ]
[<Описание итогов>]

După cum se poate observa din această regulă, textul cererii este format din mai multe părți sau secțiuni:

In sectiune<Упорядочивание результатов>Puteți defini condiții de ordonare pentru rândurile din rezultatul interogării. Ordonarea rezultatului unei interogări este discutată la pagina 324.

AUTO ORDER vă permite să activați ordonarea automată a rândurilor în rezultatul interogării. Acest mod este descris la pagina 331.

In sectiune<Описание итогов>Puteți specifica ce totaluri trebuie calculate în interogare. Această secțiune este descrisă la pagina 332.

Descrierea cererii

După cum sa menționat deja, textul cererii trebuie să conțină în mod necesar o secțiune de descriere a cererii, care definește:

Câmpurile care vor fi cuprinse în rezultatul solicitării;

Interogarea surselor de date - tabele sursă;

Condiții care afectează selecția datelor într-o solicitare;

Ordinea în care sunt grupate rezultatele interogării.

Secțiunea de descriere a cererii constă din mai multe propoziții interdependente:

SELECTAȚI [DIFFERIT] [PRIMUL<Количество>]
<Список полей выборки>
[DIN<Список источников>]
[UNDE<Условие отбора>]
[A SE GRUPA CU<Поля группировки>]
[AVÂND<Условие отбора>]
[PENTRU SCHIMBARE [<Список таблиц верхнего уровня>]]

Descrierea solicitării începe cu un cuvânt cheie obligatoriu ALEGE.

Oferi UNDE<Условие отбора> vă permite să filtrați rezultatul interogării. Rezultatul include numai acele înregistrări pentru care condiția specificată este adevărată. Regulile pentru descrierea condițiilor de selecție sunt discutate la pagina 315.

Oferi PENTRU SCHIMBARE are scopul de a indica necesitatea blocării datelor citite într-o tranzacție.

Oferi GRUP vă permite să descrieți ordinea în care sunt grupate rezultatele interogării. Gruparea este discutată în detaliu la pagina 316.

Oferi AVÂND vă permite să impuneți condiții privind gruparea rezultatelor. Descris la pagina 318.

Toate exemplele de interogare din acest capitol furnizează textul interogării și rezultatul interogării. Se presupune că textul cererii este transmis ca parametru la metoda Execute a obiectului Request.

Să dăm un exemplu de interogare destul de simplă constând dintr-o instrucțiune SELECT și o listă de câmpuri de selecție.

// Trebuie să afișați o listă de facturi în raport.

Rezultatul interogării:

Utilizarea cuvântului DIFERIT

În multe situații, este de dorit ca aceleași rânduri dintr-un raport să nu fie repetate.

// Este necesar să se afle ce contrapărți în general
// mărfurile au fost expediate pentru perioada respectivă.
Selectați Document.Factura.Contraparte

Rezultatul interogării:

Se poate observa că rezultatul interogării conține multe linii repetate, ceea ce îi reduce claritatea. Pentru a evita repetarea, cuvântul cheie DIFERIT trebuie specificat în descrierea interogării.

Selectați Diverse documente.Factură.Contraparte

Rezultatul interogării:

Utilizarea cuvântului FIRST

În unele cazuri, este necesar să se afișeze un număr limitat de rânduri într-un raport. Pentru a face acest lucru, în descrierea interogării ar trebui să specificați cuvântul cheie FIRST, iar după acesta - numărul necesar de linii.

// Este necesar să selectați cele mai scumpe cinci mărfuri.
// Selecția trebuie efectuată în ordinea descrescătoare a prețului produsului.
Selectați Primele 5
Directory.Nomenclature.Name,
Director.Nomenclatură.PurchasingPrice
Sortați după Director.Nomenclatură.Preț de cumpărare Descrescător

Rezultatul interogării:

Descrierea câmpurilor de selecție

După cuvântul cheie obligatoriu SELECT (și cuvintele calificative DIFFERENT și FIRST), în textul cererii este specificată o listă de câmpuri de selecție. Aceste câmpuri vor fi procesate la preluarea datelor dintr-o solicitare. Rezultatul interogării va avea, de asemenea, setul de câmpuri definite în această listă. Câmpurile de selecție sunt descrise conform următoarelor reguli:

<Описание поля>[ [CUM]<Псевдоним поля>]

<Выражение>[.<Группа полей>]

Lista câmpurilor de selecție constă din unul sau mai multe elemente separate prin virgule. Fiecare<Поле выборки>constă dintr-o descriere a câmpului de selecție și un alias de câmp opțional.

În loc să enumerați câmpurile din lista de selecție, puteți specifica un asterisc „*”. Aceasta va însemna că rezultatul interogării trebuie să conțină toate câmpurile care se află în tabelele sursă - sursele de date ale interogării descrise în lista de surse.

Cometariu! Când se specifică un asterisc „*” în lista câmpurilor de selecție, câmpurile virtuale ale tabelelor sursă nu sunt incluse în rezultat.

<Описание поля>definește modul în care trebuie generate valorile câmpului. În cel mai simplu caz, câmpul de selecție este o legătură către un câmp din tabelul sursă. Legătura poate fi specificată prin specificarea tabelului care conține acest câmp sau fără a specifica tabelul în sine. Dereferențiarea câmpului este discutată la.

În general, câmpul de selecție poate fi nu numai o legătură către un câmp din tabelul sursă, ci și unele<Выражение>. Expresiile sunt discutate în detaliu la pagina 344.

Rezultatele interogării pot fi grupate folosind funcții agregate specificate ca expresii în câmpurile selectate. Gruparea rezultatelor interogării este discutată la pagina 316. Funcțiile agregate sunt descrise la pagina 345.

Fiecărui câmp de selecție i se poate atribui un alias. Pe viitor poate fi folosit pentru un acces mai convenabil la acest domeniu. Utilizarea aliasurilor de câmp este discutată mai jos.

<Группа полей>poate fi specificat numai atunci când câmpul de selectare indică către un tabel imbricat. În acest caz, puteți specifica ce câmpuri trebuie procesate în selecția tabelului imbricat. Dacă nu este specificat un grup de câmpuri, toate câmpurile din tabelul imbricat vor fi procesate în selecție. Accesarea tabelelor imbricate este descrisă în .

Aliasuri de câmp în lista de selecție

Dacă atribuiți un alias unui câmp de selecție, vă puteți referi ulterior la acest câmp folosind aliasul său în clauzele ORDER BY și TOTAL, precum și atunci când lucrați cu rezultatul unei interogări. Un astfel de tratament poate fi mai convenabil și mai vizual și, în unele cazuri, singurul posibil.

Cuvântul cheie CUM poate precede aliasul câmpului. Este posibil ca acest cuvânt să nu fie specificat deloc, dar dacă este specificat, vizibilitatea și lizibilitatea textului de solicitare crește.

Aliasurile de câmp sunt setate în conformitate cu regulile de atribuire a identificatorilor de variabile. Aliasurile din cerere nu pot fi aceleași.

Atribuirea de aliasuri câmpurilor nu afectează în sine selecția datelor din interogare.

// Trebuie selectat din directorul de produse
// nume de mărfuri și nume de grupuri.
Alege
Director. Nomenclatură. Nume ca produs,
Director. Nomenclatură.Parent.Nume ca grup
din
Director.Nomenclator

Rezultatul interogării:

Rețineți că câmpurile din rezultatul interogării câmpului sunt denumite „Articol” și „Grup”. Dacă nu s-au specificat aliasuri de câmp, câmpurile din rezultatul interogării s-ar numi „Nume” și „Nume1” (numele câmpurilor din rezultatul interogării nu se potrivesc, așa că „1” este adăugat automat la numele celui de-al doilea câmp), ceea ce este mult mai puțin clar.

Tabele imbricate în lista câmpurilor de selecție

Un câmp din lista de selectare poate face referire la un tabel imbricat în sursa de date de interogare. În acest caz, câmpul rezultat al interogării va fi de tipul Rezultat interogare, adică va conține un rezultat al interogării imbricate generat pe baza unui tabel sursă imbricat.

În mod implicit, toate câmpurile din tabelul imbricat - sursa de date - sunt incluse în rezultatul imbricat. Este posibil să se definească în mod explicit un grup de câmpuri care ar trebui să fie conținut într-un rezultat al unei interogări imbricate. Un grup de câmpuri de rezultat imbricate este descris conform următoarei reguli:

(<Список вложенных полей>) | *

<Вложенное поле [, <Вложенное поле>[, ...] ]

<Список вложенных полей>este format din unul sau mai multe elemente separate prin virgule. Dacă lista constă dintr-un element, nu trebuie să fie inclusă în paranteze.

În loc să enumerați câmpurile imbricate, puteți specifica un asterisc „*”; aceasta va însemna că rezultatul interogării imbricate trebuie să conțină toate câmpurile care se află în tabelul imbricat.

<Выражение>[[CUM]<Псевдоним поля>]

<Вложенное поле>poate reprezenta o expresie. În cel mai simplu caz<Выражение>este o referință la un câmp dintr-un tabel imbricat. Expresiile sunt discutate în detaliu la pagina 344.

Fiecărui câmp imbricat i se poate atribui un alias. Mai departe<Псевдоним поля>poate fi folosit pentru un acces mai convenabil la acest câmp, similar alias-urilor pentru câmpurile din lista de selecție - consultați secțiunea „Alias-uri pentru câmpurile din lista de selecție” de pe

Aliasurile pot fi atribuite câmpurilor imbricate, indiferent dacă un alias este atribuit tabelului imbricat în sine.

//Este necesar să se afișeze specificația facturilor în raport,
// documentul în sine, nomenclatura și cantitatea.
Alege

Document.Factură.Compoziție.(Nomenclatură ca produs, cantitate)

Rezultatul interogării:

Legătură Compus
Produs Cantitate
Blugi pentru femei 4
Blugi pentru femei 5
Cămașă „Cowgirl” 5
Factura 00005 din 24.02.2002 0:00:00 Blugi pentru femei 1
Blugi pentru femei 1
Moydodyr "Acvariu" 5
Chiuveta "Lily" 8
Mixer „Ultra” 10

Vă rugăm să rețineți că câmpul „Compoziție” al rezultatului interogării este un tabel imbricat care are câmpurile „Nomenclatură” și „Cantitate”.

//Afișează toate câmpurile din partea tabelară a facturii în raport.
Alege
Document.Invoice.Link,
Document.Factură.Compoziție.*

Scopul clauzei IZ este de a desemna o listă de tabele sursă - surse de date utilizate într-o anumită instrucțiune SELECT.

Trebuie remarcat faptul că clauza IZ în limbajul de interogare este opțională. Poate fi omis dacă sursele de date sunt pe deplin calificate în descrierea listei de câmpuri de selecție conținute în clauza SELECT. Vă rugăm să rețineți că o serie de exemple din secțiunile anterioare nu conțineau clauza IZ.

După cuvântul cheie IZ, este indicată o listă de surse. În general, lista surselor este descrisă de următorul set de reguli:

<Источник>[, <Источник>[, ...]]

Sursele de date de interogare sunt listate în lista de surse, separate prin virgule. Fiecare<Источник>lista surselor trebuie să includă o descriere a sursei; in plus, se poate preciza<Перечень соединений>- reguli pentru conectarea unei surse la alte surse. Sunt descrise specificațiile de conectare.

<Описание источника> [ <Перечень соединений> ]

Dacă sursa de date este un tabel de bază de informații,<Описание источника>conţine<Имя таблицы>.

<Таблица>[ [CUM]<Псевдоним источника>]

Dacă tabelul sursă este virtual, puteți specifica<Параметры>formarea acestuia. Parametrii tabelului virtual sunt descriși în detaliu în secțiunea „Surse de date de interogare”.

<Имя таблицы> [(<Параметры>)] | <Описание запроса>

O subinterogare poate acționa și ca sursă de date de interogare; în acest caz descrierea sursei conţine<Описание запроса>. Utilizarea interogărilor imbricate este descrisă la.

Descrierea sursei de date îi poate atribui și aliasul. Mai departe<Псевдоним источника>poate fi folosit pentru un acces mai convenabil la această sursă. Utilizarea aliasurilor sursei de date este discutată la.

Specificații de conectare

La definirea mai multor surse în lista sursă, pentru fiecare înregistrare din primul tabel sursă se face o selecție din al doilea tabel sursă și așa mai departe. Astfel, interogarea are ca rezultat toate combinațiile posibile ale tuturor înregistrărilor din toate sursele specificate.

Rezultatul interogării:

Contrapartidă bancă
Furnizori JSCB InvestBank
Furnizori JSCB PromStroyBank
Fabrica de tricotat „Zarya” JSCB InvestBank
Fabrica de tricotat „Zarya” JSCB PromStroyBank
Fabrică de îmbrăcăminte din denim JSCB InvestBank
Fabrică de îmbrăcăminte din denim JSCB PromStroyBank
Cumpărători JSCB InvestBank
Cumpărători JSCB PromStroyBank
Târg de îmbrăcăminte JSCB InvestBank
Târg de îmbrăcăminte JSCB PromStroyBank
Casa comercială „Budenovsky” JSCB InvestBank
Casa comercială „Budenovsky” JSCB PromStroyBank
Pavilionul 45 la piața angro JSCB InvestBank
Pavilionul 45 la piața angro JSCB PromStroyBank
Bavaria - porțelan JSCB InvestBank
Bavaria - porțelan JSCB PromStroyBank
Fabrică de îmbrăcăminte din denim JSCB InvestBank
Fabrică de îmbrăcăminte din denim JSCB PromStroyBank
JSCB PromStroyBank JSCB InvestBank
JSCB PromStroyBank JSCB PromStroyBank

Rezultatul interogării conține combinații ale tuturor contrapărților cu toate băncile. De regulă, un astfel de rezultat în sine nu are sens. De obicei, combinațiile de înregistrări din tabele sursă diferite trebuie să fie limitate de anumite condiții. Este posibil într-un limbaj de interogare să se descrie o astfel de combinație de surse prin specificarea surselor în sine și definirea condițiilor în care combinațiile de înregistrări din aceste surse trebuie incluse în rezultatul interogării.

Există mai multe tipuri de conexiuni, acestea sunt descrise de următoarele reguli:

<Соединение> [<Перечень соединений>]

În general<Перечень соединений>poate conține și descrie nu numai o conexiune (din două surse), ci și mai multe conexiuni din mai multe surse simultan.

[INTERN] ÎNSCRIEȚI-VĂ<Описание источника>DE<Условие отбора> |

PARTEA STÂNGA [EXTERIOR]<Описание источника>DE<Условие отбора> |

DREAPTA [EXTERIOR] ÎNSCRIEȚI-VĂ<Описание источника>DE<Условие отбора> |

ÎNSCRIERE COMPLETĂ (EXTERIOR).<Описание источника>DE<Условие отбора>

<Условие отбора>conține condiții conform cărora selecția trebuie să combine date din tabelele originale - sursele interogării. Regulile pentru descrierea condițiilor într-un limbaj de interogare sunt discutate la pagina 357.

Cuvintele cheie LEFT, RIGHT și FULL clarifică natura conexiunii. Cuvintele INTERN sau EXTERN pot să nu fie specificate deloc; ele măresc claritatea și lizibilitatea textului cererii.

Sursele care sunt alăturate nu sunt echivalente între ele și, în unele cazuri, rezultatul depinde de ce tabel este listat primul, înainte de cuvântul cheie JOIN (în stânga acestuia) și care tabel este listat al doilea (în dreapta).

[INTERNAL] JOIN înseamnă că din ambele tabele sursă - surse de date, numai acele combinații de înregistrări care îndeplinesc condiția specificată trebuie incluse în rezultatul interogării. Înregistrările rămase nu sunt incluse în rezultat.

// Trebuie să aflăm ce bănci sunt în același timp
// contrapărți (sunt prezente aceleași nume
//atât în ​​directorul Counterparties cât și în directorul Bănci).
Alege

Bănci.Link Cum să bancați
Din

Inner Join
Director.Bănci Cum Băncile
De

Rezultatul interogării:

Contrapartidă bancă
JSCB PromStroyBank JSCB PromStroyBank

O LEFT [OUTER] JOIN înseamnă că rezultatul interogării trebuie să includă combinații de înregistrări din ambele tabele sursă care îndeplinesc condiția specificată. Dar, spre deosebire de o îmbinare internă, rezultatul interogării trebuie să includă și înregistrări din prima sursă (indicată în stânga cuvântului JOIN) pentru care nu au fost găsite înregistrări din a doua sursă care să corespundă condiției.

În acest fel, rezultatul interogării va include toate înregistrările din prima sursă; acestea vor fi îmbinate cu înregistrările din a doua sursă dacă este îndeplinită condiția specificată. Liniile de rezultat de interogare pentru care nu au fost găsite înregistrări din a doua sursă care să corespundă condiției vor conține NULL în câmpurile generate pe baza înregistrărilor din această sursă.

//Este necesar să se afișeze toate contrapărțile în raport, iar pentru acestea
// care este și o bancă - indică un link către bancă.
Alege
Counterparties.Link As Counterparty,
Bănci.Link Cum să bancați
Din
Director.Contrapartide Cum Contrapartide
Left Outer Join
Director.Bănci Cum Băncile
De
Counterparties.Name = Banks.Name

Rezultatul interogării:

O UNIRE [EXTERIOR] DREPTĂ înseamnă că rezultatul interogării trebuie să includă combinații de înregistrări din ambele tabele sursă care îndeplinesc o condiție specificată. În plus, rezultatul interogării trebuie să includă și înregistrări din a doua sursă (indicată în dreapta cuvântului CONEXIUNE) pentru care nu au fost găsite înregistrări din prima sursă care să corespundă condiției.

Astfel, rezultatul interogării va include toate înregistrările din a doua sursă; acestea vor fi îmbinate cu înregistrările din prima sursă dacă este îndeplinită condiția specificată. Liniile de rezultat de interogare pentru care nu au fost găsite înregistrări din prima sursă care să corespundă condiției vor conține NULL în câmpurile generate pe baza înregistrărilor din această sursă.

//Este necesar să se afișeze toate băncile în raport, iar pentru acestea
// care este și contrapartea - indică o legătură către contraparte.
ALEGE
Counterparties.Link As Counterparty,
Bănci.Link Like Bank
DIN
Director.Contrapartide Cum Contrapartide
Uniunea exterioară dreaptă
Director.Bănci Cum Băncile
De
Counterparties.Name = Banks.Name

Rezultatul interogării:

Contrapartidă bancă
NUL JSCB InvestBank
JSCB PromStroyBank JSCB PromStroyBank

O FULL [OUTER] JOIN înseamnă că rezultatul interogării trebuie să includă combinații de înregistrări din ambele tabele sursă care îndeplinesc o condiție specificată. În plus, rezultatul interogării trebuie să includă și acele înregistrări din ambele surse pentru care nu au fost găsite potriviri.

În acest fel, rezultatul interogării va include toate înregistrările din ambele surse; vor fi conectate între ele când condiția specificată este îndeplinită. Liniile de rezultat de interogare pentru care nu au fost găsite înregistrări din nicio sursă care să corespundă condiției vor conține NULL în câmpurile generate pe baza înregistrărilor din acea sursă.

// Este necesar să se afișeze toate contrapărțile și toate băncile în raport,
// iar cei care sunt amândoi - tipăriți pe o singură linie.
Alege
Counterparties.Link As Counterparty,
Bănci.Link Cum să bancați
Din
Director.Contrapartide Cum Contrapartide
Unire exterioară completă
Director.Bănci Cum Băncile
De
Counterparties.Name = Banks.Name

Rezultatul interogării:

Aliasurile sursei de date

Dacă atribuiți un alias unei surse de date, atunci în viitor această sursă poate fi accesată folosind acest alias (și nu mai poate fi accesată specificând numele tabelului). Un astfel de tratament poate fi mai convenabil și mai vizual și, în unele cazuri, singurul posibil.

Aliasul este stabilit în conformitate cu regulile de atribuire a identificatorilor de variabile. Aliasurile din cerere nu pot fi aceleași.

Cuvântul cheie CUM poate precede aliasul sursă. Este posibil ca acest cuvânt să nu fie specificat deloc, dar dacă este specificat, vizibilitatea și lizibilitatea textului de solicitare crește.

Atribuirea de aliasuri la surse nu afectează în sine selecția datelor în interogare.

// Acest exemplu demonstrează utilizarea
// în lista câmpurilor de selecție ale aliasului Produs,
// atribuit tabelului sursă Directory.Nomenclature
Alege
Numele produsului,
Produs.Parinte
Din
Director.Nomenclatură.Produs

Tabele imbricate în lista sursă

Lista surselor poate include și tabele imbricate - părți tabelare ale cărților și documentelor de referință.

//Este necesara afisarea specificatiei facturilor in raport -
// arată documentul în sine, nomenclatura și cantitatea.
// Lista de surse conține tabelul imbricat „Compoziție” -
// partea tabelară a facturii.
// Selecția este limitată la opt înregistrări pentru a nu supraîncărca exemplul.
Selectați Primele 8
Link, Nomenclatură, Cantitate
Din
Document.Factură.Alcătuire

Rezultatul interogării:

Legătură Nomenclatură Cantitate
Factura 00007 din 25.02.2002 21:03:21 Blugi pentru femei 4
Factura 00006 din 25.02.2002 0:00:00 Blugi pentru femei 5
Factura 00006 din 25.02.2002 0:00:00 Cămașă „Cowgirl” 5
Factura 00005 din 03.01.2002 20:58:28 Blugi pentru femei 1
Factura 00004 din 03.01.2002 20:50:40 Blugi pentru femei 1
Factura 00003 din 23.02.2002 0:00:00 Moydodyr "Acvariu" 5
Factura 00003 din 23.02.2002 0:00:00 Chiuveta "Lily" 8
Factura 00003 din 23.02.2002 0:00:00 Mixer „Ultra” 10

Vă rugăm să rețineți că atunci când specificați un tabel imbricat în lista de surse, este posibil să accesați atât câmpurile tabelului imbricat în sine, cât și câmpurile tabelului de nivel superior (cel care conține tabelul imbricat). În acest caz, se accesează câmpul „Link” al documentului în sine.

Subinterogări în lista sursă

În lista surselor de interogare, o subinterogare poate fi folosită ca tabel sursă. În acest caz, descrierea sursei conține descrierea subinterogării. Descrierea unei interogări imbricate este compilată exact în același mod ca și una obișnuită: vezi

Utilizarea unei interogări imbricate ca sursă de date nu este diferită de utilizarea unui tabel de bază de informații. Toate câmpurile descrise în lista câmpurilor de selecție subinterogare sunt disponibile ca câmpuri ale unei astfel de surse.

Rezultatul va fi exact același ca în exemplul anterior.

Generarea de rapoarte

Lucrul cu cereri

Pentru a lucra cu interogări, se folosește un obiect limbaj încorporat Cerere . Vă permite să obțineți informații stocate în câmpurile bazei de date sub forma unui eșantion format conform regulilor specificate.

Interogați sursele de date

Interogarea primește informații inițiale dintr-un set de tabele. Aceste tabele reprezintă date din tabele de baze de date reale într-o formă ușor de analizat. Ele pot fi împărțite în două grupuri mari: reale și virtuale.

Tabelele reale, la rândul lor, pot fi obiect (de referință) sau non-obiect (non-referință):

Caracteristica distinctivă a tabelelor reale este că acestea conțin date dintr-un singur tabel real stocat într-o bază de date. De exemplu, tabelele reale sunt tabelul „Directory.Clients”, corespunzător directorului „Clients”, sau tabelul „Acumulation Register. Material Remaining”, corespunzător registrului de acumulare „Material Remaining”.

Tabelele virtuale sunt formate în principal din date din mai multe tabele de baze de date. De exemplu, un tabel virtual este tabelul „Registrul de acumulare. Resturi materiale. Solduri și cifre de afaceri”, format din mai multe tabele din registrul de acumulare „Rămăsuri materiale”. Uneori, tabele virtuale pot fi formate dintr-un singur tabel real (de exemplu, tabelul virtual „Prețuri.SliceLast” este format pe baza tabelului de registru de informații „Prețuri”). Cu toate acestea, toate tabelele virtuale au în comun este că li se pot da o serie de parametri care vor determina ce date sunt incluse în acele tabele virtuale. Setul de astfel de parametri poate fi diferit pentru diferite tabele virtuale și este determinat de datele stocate în tabelele bazei de date sursă.

Tabelele reale sunt împărțite în tabele obiect (de referință) și non-obiect (non-referință).

Tabelele de obiecte (de referință) oferă informații despre tipurile de date de referință (directoare, documente, planuri pentru tipuri de caracteristici etc.). Și în non-obiect (non-referință) - toate celelalte tipuri de date (constante, registre etc.).

O caracteristică distinctivă a tabelelor de obiecte (referință) este că acestea conțin un câmp „Link” care conține o legătură către înregistrarea curentă. În plus, pentru astfel de tabele este posibil să se obțină o reprezentare personalizată a obiectului; aceste tabele pot fi ierarhice, iar câmpurile acestor tabele pot conține tabele imbricate (părți de tabel).

Limbajul de interogare

Algoritmul prin care datele vor fi selectate din tabelele sursă ale cererii este descris în textul cererii într-o limbă specială - limbajul de interogare. Textul cererii constă din mai multe părți:

    cerere de descriere,

    fuzionarea interogărilor

    ordonarea rezultatelor,

    comanda automata,

    descrierea rezultatelor.

Singura parte obligatorie a cererii este prima - descrierea cererii. Toate celelalte sunt prezente la nevoie.

Descrierea cererii definește sursele de date, câmpurile de selecție, grupările etc.

Îmbinarea interogărilor determină cum vor fi combinate rezultatele interogărilor multiple.

Organizarea rezultatelor definește condițiile de ordonare pentru rândurile de rezultat al interogării.

Comanda automată vă permite să activați ordonarea automată a rândurilor cu rezultatele interogării.

Descrierea rezultatelor determină ce totaluri trebuie calculate în interogare și cum se grupează rezultatele.

Raport Registrul Documentelor Prestarea Serviciilor

Primul raport pe baza căruia vom începe să ne familiarizăm cu limbajul de interogare va fi raportul „Registrul documentelor pentru prestarea serviciilor”. Acest raport va afișa pur și simplu o listă de documente „Prestare servicii” existente în baza de date, în ordinea datelor și numerelor acestora.

Să creăm un nou obiect de configurare în configurator: Raportul „Registrul Documentelor Prestarea Serviciilor”. Să mergem la fila „Aspect” și să lansăm designerul de formulare de ieșire.

Ca sursă de date pentru cerere, vom selecta tabelul obiect (de referință) al documentelor „Prestarea serviciilor”. Din acest tabel selectăm următoarele câmpuri:

  • "Maestru",

    "Client":

Vă rugăm să rețineți că atunci când selectați câmpurile „Depozit”, „Master” și „Client”, câmpurile „Depozit.Vizualizare”, „Vizualizare principală” și „Vizualizare client” sunt selectate și în lista câmpurilor selectate. Faptul este că în cazul general se presupune că aceste câmpuri vor fi afișate în celulele unui document foaie de calcul. Deoarece câmpurile corespunzătoare „Depozit”, „Master” și „Client” sunt câmpuri de referință, dacă o valoare de referință este transmisă ca valoare de parametru pentru ieșire, sistemul va efectua o solicitare suplimentară pentru a obține o reprezentare a acestui câmp (care va fi afișate în document), rezultând o ieșire mai lentă a raportului. Prin urmare, la selectarea câmpurilor de referință, sistemul oferă să includă imediat reprezentări ale câmpurilor de referință în lista câmpurilor selectate, în așteptarea ca acestea să fie utilizate pentru ieșire în document.

După aceasta, să mergem la fila „Comandă” și să indicăm că rezultatul solicitării ar trebui mai întâi ordonat după valoarea câmpului „Data”, apoi după valoarea câmpului „Furnizare de servicii. Link”:

Să mergem la fila „Raport” și să resetam indicatorul „Utilizați generatorul de rapoarte”:

Să resetam indicatorul „Utilizați generatorul de rapoarte”...

Faceți clic pe „OK”. Designerul va genera formularul și aspectul raportului. Să deschidem modulul formular și să găsim în el procedura „Registrul Documentelor Prestarea Serviciilor”. În această procedură, cum va fi generat textul de solicitare, care va fi folosit pentru a obține datele care ne interesează:

Query.Text = „SELECT

Furnizarea serviciilor.Data AS Data,

Furnizare de servicii Număr AS Număr,

Furnizare de servicii, depozit,

Furnizare de servicii, depozit, prezentare,

Furnizarea de servicii. Master,

Furnizarea de servicii. Master. Prezentare,

Furnizare de servicii. Client,

Furnizare de servicii.client.reprezentare

Document.Furnizarea Serviciilor CUM se FurnizeazăServicii

FILTREAZĂ DUPĂ

Textul cererii începe, așa cum am spus mai sus, cu o parte din descrierea cererii:

I Furnizarea serviciului Data AS Data,

I Furnizare de servicii Număr AS Număr,

I Furnizare de servicii. Depozit,

I Furnizare de servicii. Depozit. Prezentare,

I Furnizarea de servicii. Master,

I Furnizare de servicii. Master. Prezentare,

I Furnizare de servicii. Client,

1 Furnizare de servicii Clienți Reprezentare

Document I. Furnizarea serviciilor CUM se furnizează servicii

Descrierea solicitării începe cu un cuvânt cheie obligatoriu ALEGE. Aceasta este urmată de o listă de câmpuri selectate care descrie câmpurile care ar trebui să fie conținute în rezultatul interogării. Această listă poate conține atât câmpurile în sine, cât și unele expresii calculate pe baza valorilor câmpului.

După cuvântul cheie IZ, sunt indicate sursele de date - tabelele de interogare originale, al căror conținut este procesat în interogare. În acest caz, acesta este tabelul obiect (de referință) „Document. Furnizare de servicii”. După cuvântul cheie CUM indicat pseudonim sursă de date. În cazul nostru, acesta este „Furnizarea de servicii”. În viitor, această sursă de date poate fi accesată în corpul cererii folosind un alias.

Vedem acest apel în descrierea câmpurilor de selecție:

| Furnizarea serviciilor.Data AS Data,

| Furnizare de servicii Număr AS Număr,

| Furnizare de servicii, depozit,

| Furnizare de servicii, depozit, prezentare,

| Furnizarea de servicii. Master,

| Furnizarea de servicii. Master. Prezentare,

| Furnizare de servicii. Client,

| Furnizare de servicii.client.reprezentare

Câmpurile de selecție pot avea și aliasuri, care pot fi folosite pentru a face referire la acest câmp mai târziu în textul cererii. În cazul nostru, acestea sunt pseudonimele „Data” și „Număr”.

După partea de descriere a interogării din exemplul nostru vine partea de ordonare a rezultatelor:

|COMANDA DE

| Data, | Număr";

Oferi FILTREAZĂ DUPĂ vă permite să sortați rândurile din rezultatul interogării. După această clauză cheie este o expresie de ordonare, care, în general, este o listă de câmpuri (expresii) și ordine de ieșire. În cazul nostru, comanda va fi efectuată mai întâi de câmpul de selecție, care este accesat prin alias - „Cod”, iar apoi de câmpul - „Număr”. În ambele cazuri, ordinea de sortare va fi crescătoare, care este ordinea implicită de sortare.

Acum să acordăm atenție modului în care rezultatul interogării este afișat într-un document foaie de calcul.

Registrul Procedural al Documentelor Prestare Servicii (TabDoc) Export

//((CONSTRUCTOR_OUTPUT_FORM(Registrul Documentelor Prestarea Serviciilor)// Acest fragment a fost construit de constructor.// La reutilizarea constructorului,// introdus manual schimbări va fi pierdut!!!

Layout = GetLayout("Registrul documentelor care furnizează servicii"); Solicitare = Solicitare nouă;

Rezultat = Query.Run();

HeaderArea = Layout.GetArea("Header"); AreaBasement =

Layout.GetArea("TableFooter"); DetailRecordsArea =

TabDoc.Output(TableHeadArea); TabDoc.StartAutogruttingRows();

SelectDetails = Result.Select();

În timp ce SelectDetails.NextFunctions() Loop

AreaDetailRecords.Parameters.Fill(SelectionDetails);

TabDoc.Output(RecordsDetailsArea,DetailsSelection.Level()); EndCycle;

/L)CONSTRUCTOR_OUTPUT_FORM EndProcedure

Formularul de raport conține un element de control TabularDocumentField cu numele „TabDoc”, care este completat cu date bazate pe aspectul generat de designer.

La începutul procedurii, obținem aspectul raportului, din care obținem apoi zonele existente în acesta în variabilele corespunzătoare:

HeaderArea = Layout.GetArea("Header"); AreaBasement =

Layout.GetArea("Susol"); TableHeaderArea =

Layout.GetArea("TableHeader"); TableFooterArea =

Layout.GetArea("TableFooter"");DetailRecordsArea =

Layout.GetArea("Detalii");

Apoi ștergem documentul foaie de calcul și afișăm acele zone care nu conțin date obținute din rezultatul interogării:

TabDoc.Clear(); TabDoc.Output(AreaHeader);

TabDoc.Output(TableHeadArea); TabDoc.StartAutoGroupingRows();

În ultima linie, designerul a adăugat începutul grupării automate a rândurilor. În acest exemplu, nu avem rânduri care trebuie grupate, dar implicit designerul sugerează întotdeauna gruparea rândurilor într-un document de foaie de calcul. Acest apel nu va afecta viteza de ieșire a raportului, așa că vom lăsa textul constructorului neschimbat.

După aceasta, obținem o selecție din rezultatul interogării, pe care o parcurgem într-o buclă:

În fiecare iterație a buclei, completăm parametrii zonei de aspect obținute anterior cu valori obținute din următoarea înregistrare a eșantionului de rezultat al interogării și afișăm această zonă într-un document foaie de calcul.

La sfârșitul procedurii, afișăm zonele finale ale aspectului într-un document foaie de calcul:

TabDoc.FinishAutoGroupingRows();

TabDoc.Output(TableFooterArea);

TabDoc.Output(AreaFooter);

Acum să lansăm 1C:Enterprise în modul de depanare și să ne uităm la rezultatul raportului nostru:

Astfel, folosind exemplul acestui raport, am demonstrat cum să folosim designerul de formulare de ieșire și ne-am familiarizat cu câteva constructe de bază ale limbajului de interogare.

Raportul „Evaluare serviciu” va conține informații despre serviciile care au adus Master of All Trades LLC cel mai mare profit în perioada specificată. Folosind raportul „Evaluare serviciu” ca exemplu, vom ilustra cum să selectați datele într-o anumită perioadă, cum să setați parametrii de interogare și cum să folosiți datele din mai multe tabele într-o interogare și să includem toate datele dintr-una dintre sursele din rezultatul interogării.

Să creăm un nou obiect de configurare Raport „Service Rating”. Să mergem la fila „Aspecte” și să apelăm constructorul formularului de ieșire.

Să selectăm tabelul obiect (de referință) din directorul „Nomenclatură” și tabelul virtual al registrului de acumulare „Vânzări. Cifra de afaceri”. Pentru a elimina ambiguitatea numelor din interogare, redenumim tabelul „Nomenclatură” în „SprNomenclature” (meniul contextual cu clic dreapta).

Apoi plasați cursorul pe tabelul „SalesTurnover” și apelați dialogul pentru introducerea parametrilor tabelului virtual:

Deschideți caseta de dialog pentru introducerea parametrilor tabelului virtual

Să indicăm că începutul și sfârșitul perioadei vor fi trecute în parametrii corespunzători „StartDate” și „EndDate” (simbolul „&” dinaintea numelui indică faptul că acesta este un parametru de solicitare):

Apoi selectați din tabele câmpurile „SprNomenclature.Link” și „SalesTurnover.RevenueTurnover”:

SprNomenclatura.Prezentare

Cifra de afaceri din vânzăriVenitul de afaceri

Să mergem la fila „Legături” și să vedem că proiectantul a creat deja o conexiune între cele două tabele selectate - valoarea modificării registrului „Nomenclatură” ar trebui să fie egală cu referința la elementul de director „Nomenclatură”.

Singurul lucru care ne rămâne de făcut este să resetați indicatorul „Toate” pentru tabelul de înregistrare și să îl setăm pentru tabelul de director.

Vom selecta toate elementele din directorul „Nomenclatură”.

Setarea steagului „Toate” la tabelul directorului va însemna că toate elementele vor fi selectate din director și acestor elemente li se va atribui valoarea cifrei de afaceri a veniturilor din registru. Astfel, în urma solicitării, vor fi prezente toate serviciile, iar pentru unele dintre ele va fi indicată cifra de afaceri din venituri. Pentru acele servicii care nu au fost prestate în perioada selectată nu se va indica nimic.

Să mergem la fila „Condiții” și să setăm condițiile pentru selectarea elementelor din directorul „Nomenclatură”. La stabilirea condițiilor de selecție, vom folosi din nou parametrii de interogare. Prima condiție trebuie să fie ca elementul selectat să nu fie un grup (pentru a face acest lucru, treceți la modul „Condiție personalizată”).

A doua condiție trebuie să fie ca articolul selectat să fie un serviciu (aceasta este „Condiția simplă”):

În viitor, înainte de a executa cererea, vom trece valoarea de enumerare corespunzătoare în parametrul „Tip de nomenclatură”.

Să mergem la fila „Asociații/Aliasuri” și să specificăm că vizualizarea articolului din director va avea aliasul „Serviciu”, iar câmpul de registru va avea alias „Venituri”:

Să mergem la fila „Comandă” și să indicăm că rezultatul interogării trebuie sortat în ordinea descrescătoare a valorii câmpului „Venit”.

În fila „Totale”, determinăm că trebuie să afișăm totalurile generale, iar acestea ar trebui să fie suma valorilor din câmpul „Venit”:

În fila „Raport”, ștergeți indicatorul „Utilizați generatorul de rapoarte”.

Acum să mergem la fila „Formular de ieșire”. Să indicăm că parametrii „Data de încheiere” și „Data de început” vor fi editați în formularul în câmpurile de introducere de tip „Data”. Pentru parametrul „Tip de nomenclatură”, dimpotrivă, vom elimina steag-ul de editare sub forma:

Faceți clic pe „OK”. Platforma va genera un formular de aspect și raport. Deschideți modulul formular și găsiți procedura „Evaluare serviciu” în el.

În această procedură, în partea în care sunt setați parametrii de interogare, vom determina valoarea parametrului „Tipul de nomenclatură” (corecțiile sunt evidențiate cu caractere aldine):

| CONEXIUNEA STÂNGA ÎnregistrareAcumulare.Vânzări, Cifra de afaceri(&Data de începere,

| &Data expirării,)

| CUM SE VÂNZĂRÂND

|COMANDA DE | Venituri în jos

|SUMA REZULTATE (Venit) PRIN | SUNT COMUNE";

RequestSetParameterC"Tipul de nomenclatură",

Transferuri.Tipuri de Nomenclatură.Servicii);

Query.SetParameter("StartDate",StartDate); Request.SetParameterC"EndDate", EndDate);

Acum să ne uităm la textul de solicitare generat de constructor:

| SprNomenclature.Reprezentare AS Reprezentare,

|VânzăriTurnover.RevenueTurnover AS Venituri

| Directory.Nomenclatura AS RefNomenclature

CONEXIUNEA STÂNGA ÎnregistrareAcumulări.Vânzări.Cifra de afaceri(&Data de începere,

| CUM SE VÂNZĂRÂND

| Software SalesTurnover.Nomenclature = SprNomenclature.Link

| (RefNomenclature.ThisGroup = False) ȘI

| SprNomenclature.Type of Nomenclature = &Type of Nomenclature

|COMANDA DE

| Venituri în jos

|SUMA REZULTATE (Venit) PRIN

Mai întâi, ca de obicei, vine partea de descriere a cererii și conține construcții care sunt noi pentru noi.

La descrierea surselor de solicitare (după cuvântul cheie IZ), a fost folosită capacitatea de a defini mai multe surse de solicitare:

| Directory.Nomenclatura AS RefNomenclature

|&Data de încheiere,)

| CUM SE VÂNZĂRÂND

| Software SalesTurnover.Nomenclature = SprNomenclature.Link

În acest caz, înregistrările sunt selectate din două surse: „SprNomenklatura” și „SalesTurnover”, cu propoziția cheie CONEXIUNEA STÂNGA... DE descrie modul în care vor fi combinate înregistrările din aceste două surse.

CONEXIUNEA STÂNGAînseamnă că rezultatul interogării trebuie să includă combinații de înregistrări din ambele surse care corespund condiției specificate după cuvântul cheie software. În plus, rezultatul interogării trebuie să includă și înregistrări de la prima (indicată în stânga cuvântului COMPUS) sursă pentru care nu au fost găsite înregistrări care să corespundă condiției din a doua sursă.

Nu este nimic nou pentru noi în descrierea primei surse și a condiției de conectare, dar atunci când descriem a doua sursă, folosim capacitatea de a seta parametrii tabelului virtual de interogare:

| ÎnregistrareAcumulări.Vânzări.Cifra de afaceri(&Data de început, &Data de încheiere,)

Primul parametru este începutul perioadei pentru calcularea totalurilor, al doilea este sfârșitul perioadei. Ca urmare, tabelul sursă va conține doar cifra de afaceri calculată în perioada transferată. Aici ar trebui să vă amintiți întotdeauna că, dacă trecem o dată ca acești parametri (și în cazul nostru acesta va fi cazul), atunci data conține și ora exactă la secundă.

Dacă se știe dinainte că utilizatorul nu va fi interesat de rezultatele raportului în perioade specificate cu o precizie de secunde, atunci trebuie luată în considerare următoarea caracteristică: în mod implicit, ora din dată este setată la 00 :00:00. Prin urmare, dacă nu luați măsuri speciale, reiese că atunci când utilizatorul stabilește perioada de raportare de la 01/03/2004 la 31/03/2004, totalurile registrului vor fi calculate de la începutul zilei 01/03/2004. 2004 00:00:00 până la începutul zilei 31/03/2004 00:00:00. Astfel, datele pentru a 31-a zi, altele decât începutul zilei, nu vor fi incluse în calcul, ceea ce va surprinde foarte mult utilizatorul.

Pentru a elimina această situație, ar trebui făcut două lucruri.

Mai întâi, în formularul de raport, limitați capacitatea utilizatorului de a introduce data de început și data de încheiere setând compoziția datei pentru câmpurile de intrare corespunzătoare ca „Dată”:

Să stabilim componența datei...

În al doilea rând, atunci când treceți parametri, utilizați funcția încorporată Sfarsitul zilei(). Pentru a face acest lucru, reveniți la modulul formular de raport și faceți modificările necesare (adăugările sunt evidențiate cu caractere aldine):

ProcedureFormActionsRatingServicesGenerate(Button) //((CONSTRUCTOR_WEEKEND_FORM_PROCEDURE_CALL(RatingServices) //Acest fragment a fost construit de constructor. // La reutilizarea constructorului, // modificările făcute manual se vor pierde!!!

TabDoc = FormElements.TableField;

//))CONSTRUCTOR_OUTPUT_FORM_CALL_PROCEDURE

Co. netProceduri

Să continuăm să ne uităm la textul solicitării. Ca parte a descrierii interogării, există o altă construcție nouă pentru noi - stabilirea condițiilor pentru selectarea datelor din tabelele sursă:

| SprNomenclature.Reprezentare AS Reprezentare,

| SalesTurnover.RevenueTurnover AS Venituri

| Directory.Nomenclatura AS RefNomenclature

| CONEXIUNEA STÂNGA ÎnregistrareAcumulări.Vânzări.Cifra de afaceri(&Data de începere,

| &Data expirării,

| CUM SE VÂNZĂRÂND

| Software SalesTurnover.Nomenclature = SprNomenclature.Ssshka

| SprNomenclature.ThisGroup = False AND

| SprNomenclature.Type of Nomenclature = &Type of Nomenclature

Condiția de selecție este întotdeauna precedată de un cuvânt cheie UNDE. După aceasta este descrisă starea în sine. Vă rugăm să rețineți că câmpurile din tabelele sursă pe care se aplică condiția pot să nu fie incluse în lista de selecție (ca și în cazul nostru). În plus, condiția noastră folosește parametrul de interogare „Tip de nomenclatură”.

REZULTATE SUMA (Venit) PO

Începe întotdeauna cu un cuvânt cheie REZULTATE, urmată de o descriere a totalurilor care vor fi prezente în rezultatul interogării. Imediat după cuvânt REZULTATE descrie funcțiile agregate care trebuie calculate în rezultate. În cazul nostru, se va calcula suma din câmpul „Venit”. Acesta este urmat de cuvântul cheie PO, după care sunt descrise grupările în care urmează să fie calculate totalurile. În cazul nostru, acestea sunt absente și este folosit doar cuvântul cheie SUNT COMUNE, ceea ce indică faptul că totalurile vor fi calculate pentru întregul tabel în ansamblu.

Acum că am terminat de familiarizat cu textul solicitării, să lansăm 1C:Enterprise în modul de depanare și să vedem cum funcționează raportul nostru.

Să setăm perioada de raportare de la 01.03.2004 la 30.04.2004. Rezultatul va arăta astfel:

Acum să schimbăm data de încheiere la 31.03.2004 și să ne asigurăm că datele pentru 31 martie sunt incluse în raport: