Parametru standard și perioadă și probleme de utilizare. Parametru standard și perioadă și probleme de utilizare 1s parametri de rotație a tabelelor virtuale

Atunci când se organizează eșantioane în probleme reale, în majoritatea covârșitoare a cazurilor, selectarea datelor este organizată în conformitate cu unele criterii.

În cazul în care selecția se face dintr-un tabel real, nu apar dificultăți. Datele sunt prelucrate absolut banal:

În cazul în care sursa din interogare este un tabel virtual, situația devine oarecum mai complicată.


Limbajul de interogare vă permite să impuneți o condiție pentru o selecție din tabelele virtuale în două moduri: în clauza WHERE și folosind parametrii tabelelor virtuale. Ambele metode vor conduce la același rezultat (cu excepția unor cazuri specifice), dar, cu toate acestea, sunt departe de a fi echivalente.

Știm deja că tabelele virtuale se numesc virtuale deoarece nu se află de fapt în baza de date. Ele se formează numai în momentul în care li se aplică o cerere. În ciuda acestui fapt, este convenabil pentru noi (adică cei care compun interogarea) să luăm în considerare tabelele virtuale exact așa cum există de fapt. Ce se va întâmpla în sistemul 1C Enterprise 8, când interogarea pe care am întocmit-o încă se îndreaptă spre masa virtuală?

În primul pas, sistemul va construi o masă virtuală. La al doilea pas, înregistrările vor fi selectate din tabelul rezultat care îndeplinesc condiția specificată în clauza WHERE:
Se vede clar că nu toate înregistrările din tabelul virtual (și, prin urmare, din baza de date) vor fi incluse în selecția finală, ci doar cele care îndeplinesc condiția specificată. Și restul înregistrărilor vor fi pur și simplu excluse din rezultat.

Astfel, sistemul nu va face doar o muncă inutilă, ci va dubla inutilă! În primul rând, resursele vor fi cheltuite pentru construirea unui tabel virtual bazat pe date inutile (în figură sunt marcate ca „zone de date A și B”), iar apoi se va lucra pentru a filtra aceste date din rezultatul final.

Nu puteți refuza imediat, în etapa de construire a unei mese virtuale, să utilizați date inutile? Se pare că poți. Pentru aceasta sunt folosiți parametrii tabelului virtual:

Parametrizând tabelul virtual, limităm imediat cantitatea de date care va fi procesată de interogare.

Care este diferența dintre valorile parametrului tabelului virtual "Metoda de adăugare"?
Când Metoda Completion este setată la „mișcări”, vor fi returnate numai acele perioade în care au existat mișcări. Când este setat „Mișcări și limite de perioadă”, atunci se vor adăuga 2 înregistrări la mișcările de mai sus: mișcări la începutul și sfârșitul perioadei specificate în parametrii BT. Câmpul „Registrar” va fi gol pentru aceste 2 intrări.

Informații preluate de pe site

Registre de acumulare în sistemul 1C: Enterprise, acestea sunt împărțite în două tipuri: registre de acumulare resturi și registre de acumulare revoluții.

Tipul de registru este selectat atunci când este creat în configurator

După cum sugerează și numele, unele sunt destinate să obțină solduri pentru o anumită dată, iar acestea din urmă să obțină cifre de afaceri pentru o perioadă selectată. În funcție de tipul de registru de acumulare, platforma 1C: Enterprise generează un set diferit de tabele virtuale. În acest articol, vom lua în considerare lucrul cu tabele virtuale de registre de acumulare. Pentru a face acest lucru, creați un registru pentru acumularea de solduri - Produse și registrul de acumulare - Produse Cifra de afaceri.

Acum să ne uităm la ce tabele virtuale oferă platforma pentru fiecare dintre aceste registre.

Registrul de acumulare a vitezei

Pentru claritate, să deschidem și să vedem ce tabele sunt disponibile pentru registru Produse Cifra de afaceri... Acesta este un tabel al registrului în sine - Produse Cifra de afacericare există fizic în baza de date și un tabel virtual este Produse Cifra de afaceri. Cifra de afaceri

Totul este clar cu tabelul standard. Să aruncăm o privire mai atentă pe cea virtuală.

Cifra de afaceri a mesei virtuale

Acest tabel vă permite să obțineți o rotație a resurselor în contextul măsurătorilor. În cazul nostru, avem două dimensiuni: Depozit și Produs... Și o resursă - Cantitate

Lăsați registrul nostru să conțină următoarele intrări

Să ne întoarcem la generatorul de interogări și, pentru început, selectăm pur și simplu din tabel Produse Cifra de afaceri. Cifra de afaceri toate câmpurile

În consecință, cererea va arăta astfel:

SELECTAți mărfuri cifre de afaceri cifre de afaceri. Depozit, mărfuri cifre de afaceri cifre de afaceri. Bun, mărfuri cifre de afaceri. Cantitate cifra de afaceri din registrul de acumulare. Mărfuri cifre de afaceri. Cifre de afaceri

Rezultatul interogării arată astfel:

Adică, am primit cifre de afaceri în ceea ce privește bunurile și depozitele pentru tot timpul. Să presupunem că nu ne interesează depozitele și vrem să obținem cifre de afaceri numai în ceea ce privește bunurile.

Pentru a face acest lucru, excludem din interogare dimensiunea Depozit

SELECTAȚI Produse Cifra de afaceri. Bunuri, mărfuri Cifra de afaceri. Cantități Cifra de afaceri din registrul de acumulare. Bunuri Cifra de afaceri. Cifra de afaceri (,) AS

și, ca rezultat, vom avea doar două linii

Dar, de regulă, pentru întreaga existență a registrului, nu este necesar să se primească cifre de afaceri. Practic, sunt necesare pentru o anumită perioadă: lună, trimestru, an etc. În plus, de obicei aveți nevoie de selecții după dimensiuni (Bunuri, Depozit). Acest lucru se realizează prin utilizarea parametrii tabelului virtual... Este convenabil să completați parametrii din constructor. Prin buton Parametrii tabelului virtual se deschide o casetă de dialog în care puteți înregistra tot ce avem nevoie:

După aceea, interogarea noastră originală va lua următoarea formă

SELECȚIONEAZĂ mărfurile de afaceri.

După cum puteți vedea, diferența este că între paranteze după numele tabelului virtual există parametri care trebuie completați înainte de a executa interogarea.

Cei care abia încep să lucreze cu tabele virtuale sunt adesea tentați să seteze selecția în mod obișnuit în loc să utilizeze parametrii:

DIN Registru de acumulare.BunuriTurnări.Turnări (,) AS BunuriTurnăriUnde BunuriTurnări.Warehouse \u003d & Warehouse

La completarea parametrilor, am ratat Periodicitate... Să extindem lista și să alegem din masa posibilelor opțiuni Lună... Vom elimina toți ceilalți parametri pentru a nu ne deruta.

După aceea, observăm că câmpul a apărut în câmpurile mesei Perioadă.

Adăugându-l în câmpurile selectate, primim următorul text de solicitare:

SELECȚIAȚI Produse Cifra de afaceri Cifre de afaceri. Perioadă, Cifre de afaceri. Cifra de afaceri. Depozit, Cifre de afaceri. Bun, Cifre de afaceri. Cantitate Cifra de afaceri din registrul de acumulare.

Executăm cererea:

Astfel, în intervalul de timp selectat, putem împărți cifrele de afaceri în intervale mai mici, în conformitate cu frecvența selectată.

Registrul de acumulare

La fel ca și cu registrul rotativ, să vedem în constructorul de interogări care sunt tabelele virtuale disponibile pentru registrul de acumulare de solduri

După cum puteți vedea, există trei tabele virtuale disponibile pentru registrul de acumulare a soldului: Cifre de afaceri, Resturi, Solduri și cifre de afaceri... Să luăm în considerare fiecare dintre ele separat.

Cifra de afaceri a mesei virtuale

În ciuda faptului că tipul de registru este Resturi, totuși, putem primi cifre de afaceri pentru aceasta. În plus, avem aici două resurse suplimentare: Venire și Consum

Permiteți-mi să vă reamintesc că, atunci când se face o înregistrare în registrul de sold, este indicat tipul de mișcare de acumulare (venituri sau cheltuieli), în timp ce pentru registrul rotativ, tipul de mișcare nu este indicat. Prin urmare, aici avem un bonus suplimentar sub forma oportunității de a primi nu numai cifra de afaceri pentru perioada în ansamblu, ci și veniturile și cheltuielile separat. Dar, desigur, dacă metadatele conțin un registru al cifrei de afaceri cu un set similar de măsurători, atunci este mai bine să le folosiți pentru a obține cifre de afaceri. În general, lucrul cu această masă virtuală este similar cu lucrul cu o masă virtuală Cifre de afaceri registrul rotativ discutat mai sus.

Solduri de masă virtuale

Acest tabel este utilizat pentru a obține solduri de resurse după dimensiuni. În parametrii tabelului, putem indica data la care primim soldurile și putem seta selecțiile:

Să ne uităm la un mic exemplu. Avem următoarele înregistrări:

Vom selecta toate câmpurile disponibile și vom seta sfârșitul lunii iunie ca data primirii soldurilor. Nu vom stabili selecția prin măsurători. Apoi, textul cererii va arăta astfel:

SELECȚIONEAZĂ Balanțe de mărfuri. Depozite, mărfuri. Balanțe. Solduri. Marfuri, mărfuri. Solduri. Balanță de cantitate din registrul de acumulare. Solduri de mărfuri. Rămâne (și data soldului,) AS

Și după executarea acestuia, obținem următorul rezultat

Solduri de tabel virtual și cifre de afaceri

Acest tabel combină cele două considerate anterior și vă permite să obțineți cifre de afaceri pentru o perioadă de timp selectată, precum și solduri la începutul și sfârșitul perioadei. De asemenea, puteți seta selecția.

Utilizarea acestui tabel poate fi justificată atunci când trebuie să obțineți simultan atât cifre de afaceri cât și solduri la începutul și la sfârșitul perioadei într-un singur raport. În alte cazuri, utilizarea sa nu trebuie abuzată.

Atunci când se organizează eșantioane în probleme reale, în majoritatea covârșitoare a cazurilor, selectarea datelor este organizată în conformitate cu unele criterii.

În cazul în care selecția se face dintr-un tabel real, nu apar dificultăți. Datele sunt prelucrate absolut banal:

În cazul în care sursa din interogare este un tabel virtual, situația devine oarecum mai complicată.

Limbajul de interogare vă permite să impuneți o condiție pentru o selecție din tabelele virtuale în două moduri: în clauza WHERE și folosind parametrii tabelelor virtuale. Ambele metode vor duce la același rezultat (cu excepția unor cazuri specifice), dar, cu toate acestea, sunt departe de a fi echivalente.

Știm deja că tabelele virtuale se numesc virtuale deoarece nu se află de fapt în baza de date. Ele se formează numai în momentul în care li se aplică o cerere. În ciuda acestui fapt, este convenabil pentru noi (adică cei care compun interogarea) să luăm în considerare tabelele virtuale exact așa cum există de fapt. Ce se va întâmpla în sistemul 1C Enterprise 8, când interogarea pe care am compilat-o se va referi în continuare la tabelul virtual?

În primul pas, sistemul va construi o masă virtuală. La al doilea pas, înregistrările vor fi selectate din tabelul rezultat care îndeplinesc condiția specificată în clauza WHERE:


Se vede clar că nu toate înregistrările din tabelul virtual (și, prin urmare, din baza de date) vor fi incluse în selecția finală, ci doar cele care îndeplinesc condiția specificată. Și restul înregistrărilor vor fi pur și simplu excluse din rezultat.

Astfel, sistemul nu va face doar o muncă inutilă, ci va dubla inutilă! În primul rând, resursele vor fi cheltuite pentru construirea unui tabel virtual bazat pe date inutile (în figură sunt marcate ca „zone de date A și B”), iar apoi se va lucra în continuare pentru a filtra aceste date din rezultatul final.

Nu puteți, imediat, în etapa de construire a unei mese virtuale, să nu mai folosiți date inutile? Se pare că poți. Pentru aceasta sunt folosiți parametrii tabelului virtual:


Parametrizând tabelul virtual, limităm imediat cantitatea de date care va fi procesată de interogare.

Care este diferența dintre valorile parametrului tabelului virtual "Metoda de adăugare"?
Când Metoda Completion este setată la „mișcări”, vor fi returnate numai acele perioade în care au existat mișcări. Când este setat „Mișcări și limite de perioadă”, atunci se vor adăuga 2 înregistrări la mișcările de mai sus: mișcări la începutul și sfârșitul perioadei specificate în parametrii BT. Câmpul „Registrar” va fi gol pentru aceste 2 intrări.

Articolul descrie implementarea fizică a unui tabel virtual de reziduuri de configurație care operează în modul de operare client-server, utilizând exemplul utilizării SGBD MS SQL Server.

Aplicabilitate

Articolul discută platforma „1C: Enterprise” ediția 8.3.5.1383. În versiunea actuală a platformei, sunt posibile unele modificări în textul descris în material, interogarea T-SQL executată pe partea serverului SGBD.

Tabel virtual al dispozitivului rezidual

Să luăm în considerare în ce interogare către SGBD interogarea este transformată utilizând tabelul virtual al soldurilor registrului de acumulare. De exemplu, va fi luat în considerare următorul text de solicitare:

SELECTAȚI
Stocuri de mărfuri,
Stocuri,
StocksBalances.Cantitate
DE
Registrul de acumulare. Stocuri de mărfuri. Solduri(& Data, Depozit \u003d & Depozit) LA FEL DE
Stocuri de mărfuri

Mai întâi cu metoda contextului global GetDatabaseStorageStructure () obținem o listă de tabele de baze de date, care stochează datele din registrul de acumulare „Stocuri de mărfuri”:

Compoziția câmpurilor din tabelul principal al registrului de acumulare și din tabelul totalurilor este dată mai jos:

Stocarea totalelor pentru acest registru este configurată în modul 1C: Enterprise 8 după cum urmează:

Completați parametrii din cererea în cauză după cum urmează:


Cadrul convertește textul cererii în următoarea solicitare, care va fi executată pe serverul SGBD:

SELECTAȚI
Q_000_T_001.Fld82,
Q_000_T_001.Fld83,
Q_000_T_001.Fld84Balance
DIN
(SELECT Fld82,
Fld83,

DIN
(SELECT Fld82,
Fld83,
SUM (Fld84) AS Fld84Balance
DIN AccumRgT85
UNDE Perioada \u003d DATETIME (3999, 11, 1)
ȘI ((Fld83 \u003d))
ȘI (Fld84<> 0) ȘI (Fld84<> 0 )
GRUPUL DE Fld82, Fld83
AVÂND Fld84Balance<> 0
UNION TOATE
SELECT Fld82,
Fld83,
SUMĂ (CAS CÂND RecordKind \u003d 0 THEN - Fld84 ELSE Fld84 END) AS Fld84Balance
DIN AccumRg81
UNDE Perioada\u003e \u003d DATETIME (2012, 9, 1)
ȘI Perioada< DATETIME (3999 , 11 , 1 )
ȘI activ
ȘI ((Fld83 \u003d 9:))
GRUPUL DE Fld82, Fld83
AVÂND Fld84Balance<> 0) T
GRUPUL DE Fld82, Fld83
AVÂND Fld84Balance<> 0) Q_000_T_001

Să aruncăm o privire mai atentă asupra solicitării primite.

În primul rând, prima interogare din joncțiune selectează date din tabelul rezumat AccumRgT85. Totalurile se obțin începând cu data de stocare a totalurilor curente (01.11.3999) și o condiție este aplicată suplimentar câmpului Depozit (deoarece o astfel de condiție a fost utilizată în parametrii tabelului virtual). În plus, se efectuează o verificare a absenței rândurilor cu zero reziduuri ca rezultat.

Rețineți că gruparea este realizată de dimensiunile selectate în textul interogării. De aceea nu este necesară gruparea suplimentară după dimensiuni în text în limbajul de interogare 1C: Enterprise.

A doua interogare de îmbinare utilizează tabelul de mișcare a registrului AccumRg81. În funcție de tipul de mișcare (dacă RecordKind este egal cu 0, atunci acesta este chitanță, altfel - Cheltuieli), un semn este pus în expresie. Platforma selectează date pentru perioada de la data specificată ca parametru al tabelului virtual până la data de stocare a totalurilor curente (01.11.3999).

În plus, sunt selectate numai înregistrări active, câmpul Depozit trebuie să fie egal cu valoarea specificată. La fel ca în prima cerere de asociere, grupează, de asemenea, în funcție de dimensiunile selectate și aruncă înregistrările cu valori de resursă zero.

Dacă se utilizează SGBD MS SQL Server și decalarea datei este setată la 2000, atunci toate datele vor fi stocate cu decalajul specificat, adică în loc de 01.11.3999 veți vedea 01.11.5999.

Dacă dezactivați totalurile curente pentru registrul de acumulare, platforma va primi mai întâi ultimele totale calculate pentru data anterioară celei specificate în parametrul perioadei tabelului virtual.

Apoi, în mod similar, aceste date vor fi completate din tabelul de mișcări, dar numai pentru perioada de la data ultimelor totale până la perioada tabelului virtual.

SELECTAȚI
Q_000_T_001.Fld82,
Q_000_T_001.Fld83,
Q_000_T_001.Fld84Balance
DIN
(SELECT Fld82,
Fld83,
SUM (Fld84Balance) AS Fld84Balance
DIN
(SELECT Fld82,
Fld83,
SUM (Fld84) AS Fld84Balance
DIN AccumRgT85
UNDE Perioada \u003d DATETIME (2012, 4, 1)
ȘI ((Fld83 \u003d 9:))
ȘI (Fld84<> 0 )
ȘI (Fld84<> 0 )
GRUPUL DE Fld82, Fld83
AVÂND Fld84Balance<> 0
UNION TOATE
SELECT Fld82,
Fld83,
SUMĂ (CAS CÂND RecordKind \u003d 0 THEN Fld84 ELSE - Fld84 END) AS Fld84Balance
DIN AccumRg81
WHERE Perioada\u003e \u003d DATETIME (2012, 4, 1)
ȘI Perioada< DATETIME (2012 , 9 , 1 )
ȘI activ
ȘI ((Fld83 \u003d 9:))
GRUPUL DE Fld82, Fld83
AVÂND Fld84Balance<> 0) T
GRUPUL DE Fld82, Fld83
AVÂND Fld84Balance<> 0) Q_000_T_001

Fiți atenți la următoarea condiție din textul cererii.