O caracteristică de obținere a unui instantaneu al celor mai recente înregistrări din registrul de informații. Primirea prețurilor pentru data documentului într-o solicitare; tăierea ultimului nu funcționează

: Felie din primulȘi Felie din Ultimul Să luăm în considerare lucrul cu aceste tabele virtuale folosind 1C. Mult mai des folosit Felie din Ultimul, deci să începem cu el.

O porțiune din cele mai recente vă permite să obțineți ultima înregistrare a registrului de informații pentru o dată specificată în contextul măsurătorilor. Pentru ultimul (primul) tabel de felii, este posibil să specificați doi parametri între paranteze, despărțiți prin virgulă. Primul parametru conține data la care este realizată felia (dacă nu este specificat parametrul, felia se face la data curentă). Al doilea parametru este o condiție în limbajul de interogare 1C și vă permite să setați diferite selecții. De regulă, măsurătorile sunt utilizate în aceste selecții. Toate acestea sună destul de vag, așa că este imposibil să faci fără un exemplu.
Deci, să avem un registru periodic al informațiilor Preț care stochează prețurile pe produs și furnizor. Frecvența registrului este ziua.

Registrul conține următoarele înregistrări

Pentru început, vom obține o felie din acesta din urmă fără a folosi parametri, executând următoarea solicitare:

SELECT PriceSliceLast.Period AS Perioada, PriceSliceLast.Product AS Product, PriceSliceLast.Supplier AS Supplier, PriceSliceLast.Amount AS Amount FROM Informații de înregistrare.Price.SliceLast AS PriceSliceLast

Deoarece parametrii nu sunt specificați, felia este efectuată la data curentă - 02/01/2017. Ca rezultat, obținem următorul tabel

Aici vedem că combinația de dimensiuni Produs + Furnizor este unică, adică. Pentru fiecare combinație de măsurători din registru, a fost luată înregistrarea cu data maximă, iar data înregistrării este mai mică sau egală cu data curentă.

Să presupunem că trebuie să facem același lucru, dar vrem să obținem înregistrări cu o dată mai mică sau egală cu 15.01.2017. Pentru a face acest lucru, trebuie să modificați rândul cu cel mai recent tabel de felii din cerere, după cum urmează

FROM RegisterInformation.Price.SliceLast(&CutDate,) AS PriceSliceLast

Înainte de a executa cererea, desigur, trebuie să îi transmiteți un parametru &CutDate. Acum rezultatul interogării va arăta astfel

Și, în sfârșit, imaginați-vă că trebuie să obținem un instantaneu al celor mai recente pentru aceeași dată, cu condiția să avem bunurile Creion, și furnizorul Papetărie. Pentru a face acest lucru, specificați al doilea parametru din cerere

DE LA RegisterInformation.Price.Last Cut(&CutDate, Product = &Product AND Supplier = &Supplier) AS PriceLast Cut

Drept urmare, obținem o singură înregistrare

Pentru a evita pierderea în toate aceste paranteze și virgule, este mai bine să utilizați un generator de interogări. Vă voi arăta folosind ultima solicitare ca exemplu.

După ce ați selectat un tabel cu o felie dintre cele mai recente din designerul de interogări, trebuie să faceți clic pe butonul Opțiuni de masă virtuală iar în fereastra care se deschide scrie

Nu este greu de ghicit că pentru prima felie principiul de funcționare este același, cu excepția faptului că este selectată prima înregistrare după data tăierii.

Să presupunem că am primit o sarcină pentru care clientul dorește să primească un raport privind documentele „Vânzări de bunuri și servicii” introduse în baza de date, iar pentru fiecare document este necesar să obținem prețul din registrul de informații „Prețurile articolelor”. ” pentru data documentului. Raportul este scris pentru versiunea 1.3 de configurare „Manufacturing Enterprise Management”.

Înregistrării din tabelul de documente i se alătură o înregistrare din tabelul virtual „Nomenclatură Prețuri. SliceLast” conform condițiilor corespunzătoare perioadei, tipului de preț și articolului. Tipul de preț se obține din detaliile documentului cu același nume.

Problema are mai multe moduri de a o rezolva. Să luăm în considerare două dintre ele: un raport privind sistemul de control al accesului folosind două seturi de date și obținerea tuturor datelor necesare într-o singură solicitare. Acum, în ordine.

Folosind ACS

Pentru a implementa un astfel de raport asupra sistemului de control al accesului, vom crea două seturi de date în schema de compunere a datelor. Primul va primi o listă de documente, al doilea va primi prețuri pentru datele documentului în funcție de articolul selectat și tipul de preț. Conexiunea dintre două seturi de date se realizează pe articol, perioadă (data documentului) și tip de preț. Din primul set este necesar să transferați parametrii „Nomenclatură”, „Tip de preț” și „Perioada” în al doilea set.

Primul set de date conține următoarea interogare:

Interogarea selectează următoarele câmpuri din tabelul de documente și din partea tabulară „Produse”: „Link”, „Data”, „Tip de preț”, „Nomenclatură”. Acum să ne uităm la al doilea set de date:

În al doilea set de date, ar trebui să acordați atenție parametrilor trecuți cererii. Lista câmpurilor selectabile conține parametrii „Perioadă, „Articol” și „Tip de preț”. Aceiași parametri sunt utilizați în parametrii tabelului virtual „Prețuri de nomenclatură. Fățiune de Ultime”. Este necesar să se afișeze acești parametri în listă de câmpuri selectabile, astfel încât valorile acestor parametri să poată fi transferate de la primul set la al doilea set.Acest lucru se face folosind setările de conectare între seturile de date din fila „Conexiuni seturi de date” a designerului de scheme de compoziție de date. Să trecem la analiza sa:

Configurarea conexiunilor între sursele de date se realizează folosind câmpurile de selecție din cerere. În al doilea set de date, am adăugat parametri de interogare la câmpurile de selecție. La stabilirea relațiilor între seturi, dacă selectați un câmp în coloana „Parametru” pentru relație, valoarea din coloana „Expresie sursă” va fi transferată în „Expresie destinație” și completați parametrul selectat cu valoarea corespunzătoare.

După ce am configurat structura raportului și am generat-o, vom obține următorul rezultat:

Raportul funcționează. Să trecem la considerarea opțiunilor pentru obținerea prețului pentru data documentului într-o singură cerere.

Într-o singură cerere

Să creăm un nou raport cu câmpuri de ieșire și setări de raport similare. Singura diferență va fi sursele de date. De această dată, raportul va conține un singur set de date în care toate produsele documentului și prețurile asociate acestora sunt selectate într-o singură interogare. Textul solicitării arată astfel:

„SELECT | DocumentNomenclaturePeriod.Document, | DocumentNomenclaturePeriod.Document.Date AS Data, | DocumentNomenclaturePeriod.Document.PriceType AS TypePrice, | DocumentNomenclaturePeriod.Nomenclature, | PricesNomenclature.Price | FROM | (SELECT | Vânzări de mărfuri | Vânzări AS Documente | de bunuri ServiciiProduse.Nomenclatura AS Nomenclatura, | MAXIM (Prețurile Nomenclatorului. Perioada) AS Perioada | DIN | Document. Vânzări de bunuri și servicii. Bunuri AS Vânzări de bunuri și servicii Bunuri | CONEXIUNEA STANGA Registrul de informații. Nomenclatorul prețurilor AS Nomenclatorul prețurilor | Software Vânzări de bunuri și servicii de bunuri. Nomenclatură = Nomenclatura prețurilor. Nomenclatura | Și reimplementarea bunurilor și bunurilor de servicii. Link. Data >= Nomenclatorul prețurilor. Perioada | Și vânzările de bunuriServicesGoods.Link.PriceType = PricesNomenclature.TypePrices | | GROUP BY | Vânzări de BunuriServicesGoods.Link, | Vânzări de BunuriServicesGoods.Nomenclature) AS DocumentNomenclaturePeriod | LEFT CONNECTION RegisterInformation.PricesNomenclature AS PricesNomenclatures | BY DocumentNomenclature tourPeriod.Nomenclature = PricesNomenclature.Nomenclature | Și DocumentNomenclaturePeriod.Document.PriceType = PricesNomenclature.PriceType | Și DocumentNomenclaturePeriod.Period = PricesNomenclature.Period"

Principiul cererii este de a obține cea mai apropiată dată de modificare a prețului pentru fiecare articol utilizat în secțiunea tabelară a documentului, apoi atașați date din tabelul fizic „Prețuri articole” pe perioadă, articol și tip de preț la rezultatul interogării rezultat . La prima vedere, cererea poate părea complicată, dar de fapt sintaxa ei este destul de simplă.

Rezultatul execuției este similar cu rezultatul raportului anterior (vezi captura de ecran de mai sus).

A trage concluzii

Care opțiune pentru finalizarea sarcinii este mai bună? Totul depinde de condițiile specifice. În unele situații, un raport din două seturi de date va fi mai rapid decât recuperarea tuturor datelor pentru un raport într-o singură interogare. În scopul acestui articol, nu vom putea atinge problemele de performanță pentru metodele luate în considerare de rezolvare a problemei.

De asemenea, merită să ne amintim că crearea de rapoarte bazate pe tabele de documente nu este recomandată de metodologia de dezvoltare a companiei 1C, deoarece se crede că informațiile din documente pot să nu fie de încredere. Toate rapoartele trebuie să se bazeze pe registre.

/
Implementarea prelucrarii datelor

Rezolvarea totalurilor pentru registrele periodice de informații

Domeniul de aplicare: aplicație gestionată, aplicație mobilă, aplicație obișnuită.

1.1. Pentru registrele periodice de informații, se recomandă să se permită totaluri dacă sunt îndeplinite toate următoarele condiții:

  • se așteaptă un volum mare de date în registru (de exemplu, este justificat pentru un registru cu prețuri articole; dar nu are sens pentru un registru cu cursuri de schimb);
  • configurația furnizează interogări de frecvență la secțiunile din urmă la momentul curent și/sau la secțiunile din prima pentru a obține date curente (adică atunci când perioada nu este specificată în parametrii tabelelor virtuale Felie din primulȘi Felie din Ultimul);
  • în timp ce condiţiile rămase pentru mesele virtuale Felie din primulȘi Felie din Ultimul sunt setate numai la valorile de măsurare (și separatorii în modul În mod independent și în comun);
  • restricțiile de acces la date înregistrează folosesc numai dimensiuni (și delimitatori care sunt în modul În mod independent și în comun).

Pentru o listă completă a tuturor condițiilor când interogările folosesc totalurile din registrul de informații, consultațidocumentație pentru platforma 1C:Enterprise.

De exemplu, dacă configurația include interogări executate frecvent către registru Nomenclaturi de prețuri pentru a obține prețurile curente ale articolelor:

Selectați elementul. Articolul AS Articol, Nomenclatura prețurilor. Preț AS Preț, . . . DIN Director. Nomenclator AS Nomenclator LEFT CONNECTION Registrul de informații. Nomenclaturi de prețuri. SliceLast(, PriceView = &Tip de prețuri) CUM PrețuriNomenclaturi Nomenclaturi de prețuri software. Nomenclatura = Nomenclatura. Link . . .

apoi, sub rezerva tuturor celorlalte condiții enumerate mai sus, stabilirea proprietății Permite totaluri: felie din cele recente va accelera semnificativ execuția unor astfel de interogări, datorită faptului că selecția se va efectua direct din tabele suplimentare, care stochează doar ultimele valori (pentru tăierea ultimelor) și primele valori (pentru tăierea ultimelor). primii).

1.2. În plus, ar trebui luate în considerare opțiuni alternative pentru a revizui interogările din registru, astfel încât aceste condiții să fie îndeplinite.

De exemplu, dacă în unele cazuri datele din registru Nomenclaturi de prețuri sunt înregistrate la o dată viitoare, iar la selectarea mărfurilor în acest registru, se execută întotdeauna o interogare pentru data curentă (data este specificată în mod explicit în parametrul tabelului virtual Felie din Ultimul), atunci rezultatele nu vor grăbi execuția unor astfel de interogări. Deoarece totalurile sunt construite numai pentru prima și ultima înregistrare a registrului.

Totuși, dacă, la deschiderea formularului de selecție a produsului, analizezi dacă există registratori cu o dată viitoare, iar dacă nu există, rulezi o altă interogare pentru o felie din acesta din urmă fără a seta data, atunci o astfel de interogare va funcționa mai rapid. .

2. În toate celelalte cazuri, totalurile nu ar trebui permise pentru registrele periodice de informații. În primul rând, dacă

  • cel mai adesea (întotdeauna) se fac interogări către tabelele virtuale ale primului/ultim registru periodic de informații pentru o anumită perioadă (de exemplu, pentru data documentului).
  • în condiţii pentru mese virtuale Felie din primulȘi Felie din Ultimul Cel mai adesea (întotdeauna) sunt folosite subinterogări și îmbinări (apeluri „prin punct” la câmpurile tabelelor înrudite). De exemplu, în acest caz:

3. Nu este necesar să se prevadă un mecanism separat pentru recalcularea totalurilor în configurație, deoarece actualizarea tabelelor cu totaluri se realizează automat de fiecare dată când un set de înregistrări este scris în registru.

În configurația testului, avem un registru periodic de informații „Nomenclatură Prețuri” cu următoarele date inițiale:

Figura arată, de asemenea, structura metadatelor de registru. După cum putem vedea, registrul conține dimensiunea „Produs” cu tipul de referință „Produse”, precum și resursa numerică „Preț” și atributul „Preț vechi”.

Să presupunem că într-un raport trebuie să obținem o porțiune din cele mai recente înregistrări pentru produse și prețurile acestora, cu condiția ca prețul vechi să fie mai mic sau egal cu 50.

Două opțiuni de solicitare

Voi spune imediat că vom lua în considerare opțiunile corecte și incorecte. Să începem cu acestea din urmă. Aceasta este o greșeală pe care o fac adesea programatorii începători. Și astfel, a fost scrisă următoarea interogare pentru raport:

Solicitare = Solicitare nouă; Cerere. Text = " SELECTAȚI | | | | | DIN | Registrul de informații. Nomenclaturi de prețuri. Fățiune din cele mai recente CUM PrețuriNomenclaturăSlice din cele mai recente|UNDE | PrețuriNomenclaturăSliceLatest. Preț vechi< = 50 " ;

Fiți atenți la starea din secțiunea „UNDE”. Aceasta este principala greșeală! Această interogare nu va returna o singură înregistrare și iată de ce: atunci când folosiți tabele virtuale, în cazul nostru „Ultima felie”, datele sunt preluate mai întâi din baza de date conform condițiilor descrise în tabelul virtual și apoi acțiunile descrise în se efectuează interogarea textului (grupări, condiții în secțiunea „UNDE”, sortare etc.).

Prin urmare, în exemplul nostru, cererea nu returnează un rezultat. În primul rând, el primește o felie din acesta din urmă și abia apoi stabilește condiția atributului „Preț vechi”. Iată cum arată în diagramă:

Pentru a rezolva problema corect, condiția pentru atributul „Preț vechi” trebuie transferată în condițiile tabelului virtual. Iată cum va arăta textul corect al cererii:

Solicitare = Solicitare nouă; Cerere. Text = " SELECT PrețuriNomenclaturăSliceLatest. Perioadă, PrețuriNomenclaturăSliceLatest. Produs, PrețuriNomenclaturăSliceLatest. Preț, PrețuriNomenclaturăSliceLatest. Preț vechi DIN Registrul de informații. Nomenclaturi de prețuri. SliceLast(, OldPrice< = 50 ) CUM PREȚURINomenclaturăSliceLatest"

Acum cererea va primi datele corecte, deoarece o porțiune din ultimele prețuri va fi primită ținând cont de condiția pentru atributul „OldPrice”.

rezultate

Trebuie înțeles că cele de mai sus se aplică tuturor cazurilor de utilizare a tabelelor virtuale în interogări (pentru registre de acumulare, registre contabile, sarcini etc.).

Aceasta implică și regula principală pentru utilizarea tabelelor virtuale: „când utilizați un tabel virtual, asigurați-vă că setați parametrii de selecție direct în tabelul virtual, altfel interogarea va primi date inutile, care vor fi apoi folosite pentru selecție”.

Registre de informații 1C este un set structurat de date cu dimensiuni și resurse. Conceput pentru a stoca informații periodice.

Periodicitate

Informațiile sunt stocate pe dimensiune și perioadă. Puteți seta frecvența registrului de informații:

  • Neperiodică
  • de registrator
  • al doilea
  • o săptămână
  • lună
  • sfert

Este necesară frecvența pentru a selecta informații din registru pentru o anumită perioadă de timp. Dacă specificați o frecvență, înscrierile în registru se vor face cu perioada în care a fost făcută înscrierea. Să presupunem că dacă te uiți la registrul „Prețuri articole”, poți vedea istoricul modificărilor de preț, cu ce măsurători și în ce perioadă de timp a fost făcută înregistrarea.

Periodicitatea în registrele de informații este necesară pentru informațiile care se modifică în timp, de exemplu: cursuri de schimb, prețuri ale produselor, reduceri și majorări de produse etc.

grefierii

Dacă faceți o intrare în registrul de informații folosind un document, trebuie să setați modul de intrare: „Depunerea la registrator” și să selectați documentul cu care se va face înregistrarea în registru. Apoi în registru va apărea câmpul „Registrar”, unde vor fi stocate informații despre ce document a fost făcută înscrierea. Înregistratorul poate fi folosit și ca perioadă; pentru a face acest lucru, indicați în câmpul „Frecvență” - „După înregistrator”. Subordonarea registratorului se face atunci când este necesară legarea strictă a unui registru de un document și modificarea manuală a intrărilor în registru devine indisponibilă.

Pot exista mai multe documente care vor acționa ca registratori. Pentru a adăuga un registrator, trebuie să mergeți la proprietățile registrului de informații dorit, să accesați fila „Registrari” și să bifați casetele de lângă documentele care vor acționa ca registrator.

Puteți vedea mișcările pe care le face reportofonul din document. Pentru a face acest lucru, trebuie să accesați documentul de care sunteți interesat, faceți clic pe: Go – Document moves by registrator.

Nu uitați să adăugați drepturi în proprietățile registrului; acestea pot fi atribuite în fila „Drepturi”. Apoi, în lista de roluri trebuie să selectați rolul la care doriți să adăugați drepturi la registru și în lista de drepturi să setați drepturile pentru rolul selectat.

Unicitatea înregistrărilor

Unicitatea unei înregistrări depinde de perioadă și măsurători. De exemplu, dacă doriți să scrieți o înregistrare cu aceleași măsurători în registrul „Prețuri articole” în aceeași zi, atunci nu veți putea face acest lucru și programul va provoca o eroare, deoarece periodicitatea registrului este într-o zi.

Dacă frecvența este stabilită de registrator, aceasta participă și la unicitatea înregistrării.

Pentru registrele neperiodice și independente, unicitatea depinde de combinația de dimensiuni.

Forme

Pentru a vizualiza înregistrările, utilizați formularul de listă, în acesta puteți seta selecția în funcție de câmpurile care vă interesează, vizualiza istoricul înregistrărilor și le puteți modifica prin intermediul formularului de înregistrare. Puteți vizualiza intrările de înregistrare după cum urmează: în meniul de sus, faceți clic pe butonul „Operațiuni” - „Registre de informații”. În fereastra care se deschide, selectați registrul de care aveți nevoie. După aceasta, se va deschide un formular de listă sub forma unui tabel, în care fiecare intrare este o intrare unică.

Pentru a edita/crea, utilizați formularul de înregistrare; dacă înregistrarea este subordonată registratorului, atunci câmpul nu va fi disponibil și formularul nu poate fi creat.

Trebuie să adăugați formulare în configurator accesând registrul de informații, în fila „Formulare” și făcând clic pe „lupă” de lângă tipul de formular dorit. În continuare, se va deschide o fereastră în care puteți configura câmpurile viitorului formular (locație, nume și specificați funcționalitatea).


Dimensiuni, resurse și detalii

Dimensiunile sunt menite să formeze unicitatea unei înregistrări; în viitor, le puteți selecta și face o tăietură pe baza unei anumite dimensiuni. Combinația de măsurători formează cheia de înregistrare. Este mai bine să nu creați un număr mare de dimensiuni, astfel încât masa să nu crească și să nu încetinească în timp ce lucrați cu el.

Dimensiunile au o casetă de selectare „Leading”; dacă este bifată, înregistrarea va fi stocată în baza de date atâta timp cât această dimensiune există. Se pot face mai multe măsurători principale. De exemplu, în registrul de informații „Prețuri articole”, dimensiunea principală este articolul; dacă ștergeți un articol care este inclus în înregistrare, atunci intrarea în registrul de informații pentru acest articol va fi ștearsă automat.

Resursele sunt concepute pentru a stoca informații rezumative: cantitate, preț etc. Pe viitor vom primi resurse pentru o anumită perioadă de timp (dacă registrul este periodic), conform măsurătorilor.

Detaliile, în cele mai multe cazuri, au scopul de a stoca informații suplimentare; ele nu iau parte la unicitatea înregistrării. De exemplu, puteți introduce informații precum autor, comentariu etc. în detalii.

Puteți efectua următoarele acțiuni cu registrul de informații:

  • Ștergerea unei înregistrări din registrul de informații 1C

Particularități

— Unicitatea înregistrărilor pe baza unui set de dimensiuni: fiecare înregistrare din registrul de informații este o nouă valoare de resursă.

— Înregistrările în registrul de informații pot fi periodice sau nu.

— Registrul de informații poate fi dependent și independent de registrator.

— Este posibil să se facă o secțiune transversală a primei și ultimei înregistrări pentru data dorită. Acest lucru este implementat de tabele virtuale: „Felia din primul” și „Felia din urmă”. Pentru a utiliza aceste tabele, puteți folosi atât selecția, cât și interogarea (în designerul de interogări veți selecta aceste tabele virtuale și puteți face o interogare asupra lor). Aceste tabele vor fi disponibile dacă registrul de informații este periodic.

Registrul „Prețuri Articole” este un registru periodic de informații, înscrierile se fac conform registratorului.

Imaginea arată că frecvența este setată la o zi. Aceasta înseamnă că prețul poate fi modificat o dată pe zi pe baza măsurătorilor unice în timpul zilei.

Registrul este subordonat documentului „Setarea prețurilor articolelor”. Aceasta înseamnă că înscrierea în registru provine din acest document. Mișcările dintr-un anumit document pot fi vizualizate din formularul de document „Setarea prețurilor articolelor”.

Registrul este conceput pentru a stoca informații despre prețul unui articol, cu dimensiunile „Tip de preț”, „Articol” și „Caracteristici articol”. Dimensiunea principală este toate câmpurile cu trei dimensiuni; va fi posibil să se facă selecții pe baza ei la eșantionare.

Concluzie: După citirea articolului, veți putea să creați un registru de informații 1C, să adăugați dimensiuni și resurse, să configurați editarea și listarea formularelor. Creați o înregistrare și selectați înregistrările existente. Dacă aveți întrebări, folosiți comentariile din articol, voi încerca să vă răspund rapid la întrebare.