Značajka dobivanja snimke najnovijih unosa u registar podataka. Značajka dobivanja isječka zadnjih unosa u registar podataka Isječak posljednjeg iz dokumenta 1c registra informacija

/
Provedba obrade podataka

Razrješavanje ukupnih iznosa za registre periodičnih informacija

Opseg primjene: upravljana aplikacija, mobilna aplikacija, uobičajena primjena.

1.1. Za registre periodičnih informacija preporučuje se dopustiti ukupne iznose ako su ispunjeni svi sljedeći uvjeti:

  • očekuje se velika količina podataka u očevidniku (npr. opravdano je za registar s cijenama artikala, ali nema smisla za registar s tečajevima);
  • konfiguracija pruža upite učestalosti odsječcima potonjeg u trenutnom vremenu i/ili odsječcima prvog za dobivanje trenutnih podataka (tj. kada razdoblje nije navedeno u parametrima virtualnih tablica Kriška Prvog I Kriška Posljednje);
  • dok su preostali uvjeti za virtualne tablice Kriška Prvog I Kriška Posljednje postavljeni su samo na mjerne vrijednosti (i separatori u načinu rada Samostalno i zajednički);
  • registrirajte ograničenja pristupa podacima koriste samo dimenzije (i graničnike koji su u modu Samostalno i zajednički).

Za potpuni popis svih uvjeta kada upiti koriste ukupne registre informacija, pogledajtedokumentacija za platformu 1C:Enterprise.

Na primjer, ako konfiguracija uključuje često izvršavane upite u registar Nomenklature cijena kako biste dobili trenutne cijene artikala:

ODABIR stavke. Članak KAO artikl, Nomenklatura cijena. Cijena KAO Cijena,. . . IZ imenika. Nomenklatura AS Nomenklatura LIJEVA VEZA Registar informacija. Nomenklature cijena. SliceLast(, PriceView = &Type of Prices) HOW PricesNomenclatures Nomenklatura cijena softvera. Nomenklatura = Nomenklatura. Veza . . .

zatim, podložno svim ostalim gore navedenim uvjetima, postavljanje svojstva Dopusti ukupne iznose: isječak nedavnih značajno će ubrzati izvršavanje takvih upita, zbog činjenice da će se odabir izvršiti izravno iz dodatnih tablica, koje pohranjuju samo zadnje vrijednosti (za rezanje zadnjih) i prve vrijednosti (za rezanje prvi).

1.2. Osim toga, trebali biste razmotriti alternativne opcije izvršiti reviziju zahtjeva u registar kako bi ti uvjeti bili ispunjeni.

Primjerice, ako u nekim slučajevima podaci u očevidniku Nomenklature cijena bilježe se na budući datum, a prilikom odabira robe u ovaj registar uvijek se izvršava upit za tekući datum (datum je eksplicitno naveden u parametru virtualne tablice Kriška Posljednje), tada rezultati neće ubrzati izvršavanje takvih upita. Budući da se zbrojevi grade samo za prvi i zadnji zapis upisnika.

Međutim, ako prilikom otvaranja obrasca za odabir proizvoda analizirate postoje li registratori s budućim datumom, a ako ih nema, pokrenete još jedan upit za isječak potonjeg bez postavljanja datuma, tada će takav upit raditi brže .

2. U svim ostalim slučajevima, zbrojevi ne bi trebali biti dopušteni za registre periodičnih podataka. Prije svega, ako

  • najčešće (uvijek) se postavljaju upiti prema virtualnim tablicama prvog/zadnjeg periodičnog registra informacija za određeno razdoblje (npr. za datum dokumenta).
  • u uvjetima za virtualne stolove Kriška Prvog I Kriška Posljednje Najčešće (uvijek) se koriste podupiti i spojevi (pozivi “kroz točku” na polja povezanih tablica). Na primjer, u ovom slučaju:

3. U konfiguraciji nije potrebno osigurati poseban mehanizam za ponovno izračunavanje ukupnih iznosa, budući da se ažuriranje tablica ukupnih iznosa izvodi automatski svaki put kada se skup zapisa upiše u registar.

: Kriška Prvog I Kriška Posljednje Razmotrimo rad s ovim virtualnim tablicama pomoću 1C. Puno češće korišten Kriška Posljednje, pa počnimo s njim.

Isječak najnovijeg omogućuje dobivanje posljednjeg zapisa registra informacija za određeni datum u kontekstu mjerenja. Za posljednju (prvu) tablicu isječaka moguće je navesti dva parametra u zagradama, odvojena zarezima. Prvi parametar sadrži datum na koji je napravljen presjek (ako parametar nije naveden, presjek se pravi na tekući datum). Drugi parametar je uvjet u jeziku upita 1C i omogućuje vam postavljanje različitih odabira. U pravilu se u tim odabirima koriste mjere. Sve ovo zvuči prilično nejasno, pa je nemoguće bez primjera.
Pa neka imamo periodični registar informacija Cijena koji pohranjuje cijene po proizvodima i dobavljačima. Učestalost registra je dan.

Registar sadrži sljedeće unose

Za početak, dobit ćemo dio potonjeg bez korištenja parametara izvršavanjem sljedećeg zahtjeva:

SELECT PriceSliceLast.Period AS Period, PriceSliceLast.Product AS Product, PriceSliceLast.Supplier AS Supplier, PriceSliceLast.Amount AS Amount FROM Register Information.Price.SliceLast AS PriceSliceLast

Budući da parametri nisu navedeni, presjek se izvodi na tekući datum - 01.02.2017. Kao rezultat toga dobivamo sljedeću tablicu

Ovdje vidimo da je kombinacija dimenzija Proizvod + Dobavljač jedinstvena, tj. Za svaku kombinaciju mjerenja registra uzet je zapis s maksimalnim datumom, a datum zapisa je manji ili jednak tekućem datumu.

Recimo da trebamo učiniti istu stvar, ali želimo dobiti zapise s datumom manjim ili jednakim 15.1.2017. Da biste to učinili, trebate promijeniti redak s posljednjom tablicom odsječka u zahtjevu kako slijedi

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

Prije izvršenja zahtjeva, naravno, trebate mu proslijediti parametar &Datum rezanja. Sada će rezultat upita izgledati ovako

I na kraju, zamislite da trebamo dobiti snimku najnovijih za isti datum uz uvjet da imamo robu Olovka, i dobavljač Dopisnice. Da biste to učinili, navedite drugi parametar u zahtjevu

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

Kao rezultat toga, dobivamo samo jedan zapis

Da se ne biste izgubili u svim tim zagradama i zarezima, bolje je koristiti alat za sastavljanje upita. Pokazat ću vam koristeći posljednji zahtjev kao primjer.

Nakon odabira tablice s odsječkom najnovijih u dizajneru upita, morate kliknuti na gumb Mogućnosti virtualnog stola i u prozor koji se otvori napišite

Nije teško pogoditi da je za prvi isječak princip rada isti, osim što je odabran prvi zapis nakon datuma izrezivanja.

U ispitna konfiguracija Imamo periodični informacijski registar "Nomenklatura cijena" sa sljedećim izvornim podacima:

Slika također prikazuje strukturu metapodataka registra. Kao što vidimo, registar sadrži dimenziju “Proizvod” s tipom reference “Proizvodi”, kao i numerički resurs “Cijena” i atribut “Stara cijena”.

Recimo da u izvješću trebamo dobiti isječak najnovijih zapisa za proizvode i njihove cijene uz uvjet da je stara cijena manja ili jednaka 50.

Dvije opcije zahtjeva

Odmah ću reći da ćemo razmotriti točne i netočne opcije. Počnimo s potonjim. Ovo je pogreška koju programeri početnici često čine. I tako je za izvješće napisan sljedeći upit:

Zahtjev = Novi zahtjev; Zahtjev. Tekst = "ODABIR | | | | | IZ | Registar informacija. Nomenklature cijena. Isječak najnovijeg HOW CijeneNomenklatura Isječak najnovijeg|GDJE | PricesNomenclatureSliceLatest. Stara cijena< = 50 " ;

Obratite pozornost na stanje u rubrici "GDJE". Ovo je glavna greška! Ovaj upit neće vratiti niti jedan zapis, a evo i zašto: kada koristite virtualne tablice, u našem slučaju "Zadnji isječak", podaci se prvo dohvaćaju iz baze podataka prema uvjetima opisanim u virtualni stol, a zatim se izvršavaju radnje opisane u tekstu zahtjeva (grupiranja, uvjeti u odjeljku “WHERE”, sortiranje itd.).

Stoga, u našem primjeru, zahtjev ne vraća rezultat. Prvo prima dio potonjeg, a tek onda postavlja uvjet na atributu “Stara cijena”. Ovako to izgleda na dijagramu:

Za ispravno rješavanje problema uvjet za atribut “Stara cijena” mora se prenijeti na uvjete virtualne tablice. Ovako će izgledati točan tekst zahtjeva:

Zahtjev = Novi zahtjev; Zahtjev. Tekst = " SELECT PricesNomenclatureSliceLatest. Razdoblje, PricesNomenclatureSliceLatest. Proizvod, PricesNomenclatureSliceLatest. Cijena, PricesNomenclatureSliceLatest. Stara cijena IZ Registar informacija. Nomenklature cijena. SliceLast(, OldPrice< = 50 ) KAKO CIJENENomenklaturaSliceLatest"

Sada će zahtjev primiti točne podatke, budući da će se primiti isječak najnovijih cijena uzimajući u obzir uvjet za atribut "OldPrice".

rezultate

Treba imati na umu da se navedeno odnosi na sve slučajeve korištenja virtualnih tablica u upitima (za akumulacijske registre, knjigovodstvene registre, zadatke itd.).

Ovo također podrazumijeva glavno pravilo za korištenje virtualnih tablica: "kada koristite virtualnu tablicu, svakako postavite parametre odabira izravno u virtualnoj tablici, inače će upit dobiti nepotrebne podatke, koji će se zatim koristiti za odabir."

Ponekad je potrebno upotrijebiti upit za dobivanje podataka za nekoliko datuma odjednom iz registra periodičnih informacija. Tipičan primjer je rad s tečajevima. Razmotrimo algoritam za rješavanje ovog problema koristeći primjer.

Formulacija problema

U bazi je kreiran dokument “Prodaja roba i usluga” u čijem se zaglavlju nalazi atribut “Valuta”. Zahtjev zahtijeva da se za svaki dokument dobije trenutni tečaj iz zaglavlja na datum dokumenta. Tečajna lista pohranjena je u registru periodičnih informacija „Tečajna lista“.
Izravno rješenje za ovaj problem mogao bi biti upit u petlji: dobivanje svih dokumenata s njihovim datumima i valutama i, u uzorku, pristup virtualnoj tablici s isječkom najnovijeg registra "Tečajne liste". Ali zbog zahtjev u petlji je "loš", pokušajmo implementirati zadatak jednim zahtjevom.

Riješenje

Za rješavanje problema koristit ćemo se činjenicom da tablice u upitu mogu se povezati ne samo radi jednakosti polja.

ODABERITE Prodaja roba i usluga Veza, Prodaja roba i usluga Valuta, MAKSIMALNO (Tečajevi valuta. Razdoblje) KAO Razdoblje MJESTO U TRazdoblja Postavke Tečajevi IZ dokumenta Prodaja roba i usluga KAKO Prodaja roba i usluga LIJEVA VEZA Registar informacija . Valutni tečajevi KAO Valutni tečajevi ON Prodaja robe poslužiteljima.Valuta = Valutni tečajevi.Valuta i prodaja robeUsluge.Datum >= Valutni tečajevi.Razdoblje GRUPA Software Prodaja roba i usluga Veza, Prodaja roba i usluga Valuta; /////////////////////////////////////////////// // /////////////////////////// SELECT VTPeriodsSetting Rates.Link, VTPeriodsSetting Rates.Currency, RatesCurrency.Rate FROM VTPeriodsSetting Rates AS VTPeriodsSetting Rates LEFT CONNECTION RegisterInformation . Valutni tečajevi KAO tečajevi valuta NA VTPeriodsRate Settings.Period = Valutni tečajevi.Period I VTPeriodsRate Settings.Currency = Valutni tečajevi.Currency

Postupak za zahtjev:

  1. Dobivanje roka za postavljanje tečaja za svaki dokument. Dokumenti su povezani s FIZIČKOM tablicom “Tečajevi”. Ovdje biste trebali obratiti pozornost na uvjete povezivanja. Valute moraju biti jednake, a datum dokumenta >= razdoblje registra podataka.
    Kao rezultat takve veze, za svaki dokument će se dobiti skup redaka koji zadovoljavaju uvjet: svi zapisi tečajeva za valutu dokumenta, uspostavljeni najkasnije do datuma dokumenta.
    Posljednji korak bit će grupiranje redaka kako bi se dobilo razdoblje maksimalne stope. Kao rezultat, za svaki dokument će se dobiti potrebno razdoblje za postavljanje tečaja za željenu valutu (maksimalni datum za postavljanje tečaja, ali ne više od datuma dokumenta). Rezultat se stavlja u privremenu tablicu VTPeriodsSettingRates.
  2. Dobivanje tečaja. Privremena tablica VTPeriodsSetting Rates povezana je s tablicom PHYSICAL “Currency Rates”. Povezivanje se odvija prema valuti dokumenta i razdoblju postavljanja tečaja definiranom u drugoj privremenoj tablici.