Možnost pridobivanja posnetka zadnjih vnosov v informacijski register. Možnost pridobivanja izreza zadnjih vnosov v informacijski register Izrez zadnjega iz informacijskega registra 1c dokument

/
Izvedba obdelave podatkov

Razrešitev vsot za registre periodičnih informacij

Področje uporabe: upravljana aplikacija, mobilna aplikacija, običajna aplikacija.

1.1. Za registre periodičnih informacij je priporočljivo dovoliti skupne vrednosti, če so izpolnjeni vsi naslednji pogoji:

  • v registru se pričakuje velika količina podatkov (npr. za register s cenami artiklov je upravičeno, za register s tečaji pa ni smiselno);
  • konfiguracija zagotavlja frekvenčne poizvedbe rezinam slednjega v trenutnem času in/ali rezinam prvega za pridobitev trenutnih podatkov (tj. ko obdobje ni navedeno v parametrih virtualnih tabel Rezina Prvega in Rezina zadnjega);
  • medtem ko preostali pogoji za virtualne mize Rezina Prvega in Rezina zadnjega so nastavljene samo na vrednosti meritev (in ločila v načinu Samostojno in skupno);
  • omejitve dostopa do registrskih podatkov uporabljajo samo dimenzije (in ločila, ki so v načinu Samostojno in skupno).

Za popoln seznam vseh pogojev, ko poizvedbe uporabljajo vsote registra informacij, glejtedokumentacijo za platformo 1C:Enterprise.

Na primer, če konfiguracija vključuje pogosto izvajane poizvedbe v register Nomenklature cen za pridobitev trenutnih cen artiklov:

IZBERI element. Artikel AS Artikel, Nomenklatura cen. Cena KOT Cena,. . . IZ imenika. Nomenklatura AS Nomenklatura LEVA POVEZAVA Register informacij. Nomenklature cen. SliceLast(, PriceView = &Vrsta cen) HOW Nomenklature cen Nomenklature cen programske opreme. Nomenklatura = Nomenklatura. povezava . .

nato ob upoštevanju vseh drugih zgoraj navedenih pogojev nastavitev lastnosti Dovoli vsote: del nedavnih bo znatno pospešilo izvajanje takšnih poizvedb, saj bo izbor izveden neposredno iz dodatnih tabel, ki shranjujejo samo zadnje vrednosti (za rezanje zadnjih) in prve vrednosti (za rezanje prvi).

1.2. Poleg tega morate upoštevati alternativne možnosti revidirati zahteve v register, tako da so ti pogoji izpolnjeni.

Na primer, če v nekaterih primerih podatki v registru Nomenklature cen se beležijo na datum v prihodnosti, pri izbiri blaga v ta register pa se vedno izvede poizvedba za trenutni datum (datum je izrecno naveden v parametru virtualne tabele Rezina zadnjega), potem rezultati ne bodo pospešili izvajanja takih poizvedb. Ker so vsote zgrajene samo za prvi in ​​zadnji zapis registra.

Če pa ob odpiranju obrazca za izbiro izdelka analizirate, ali obstajajo registratorji s prihodnjim datumom, in če jih ni, zaženete novo poizvedbo za delček slednjega brez nastavitve datuma, bo taka poizvedba delovala hitreje .

2. V vseh drugih primerih vsote ne smejo biti dovoljene za registre periodičnih informacij. Najprej, če

  • največkrat (vedno) se izvajajo poizvedbe po virtualnih tabelah prvega/zadnjega periodičnega registra informacij za določeno obdobje (npr. za datum dokumenta).
  • v pogojih za virtualne mize Rezina Prvega in Rezina zadnjega Najpogosteje (vedno) se uporabljajo podpoizvedbe in spoji (priklici “skozi piko” v polja povezanih tabel). Na primer, v tem primeru:

3. V konfiguraciji ni treba zagotoviti ločenega mehanizma za preračunavanje vsot, saj se posodabljanje tabel vsot izvede samodejno vsakič, ko se niz zapisov zapiše v register.

: Rezina Prvega in Rezina zadnjega Razmislimo o delu s temi virtualnimi tabelami z uporabo 1C. Veliko pogosteje uporabljena Rezina zadnjega, torej začnimo s tem.

Rez najnovejšega omogoča pridobitev zadnjega zapisa informacijskega registra za določen datum v okviru meritev. Za zadnjo (prvo) tabelo rezin je možno v oklepajih podati dva parametra, ločena z vejicami. Prvi parameter vsebuje datum, ko je rezina narejena (če parameter ni naveden, je rezina narejena na trenutni datum). Drugi parameter je pogoj v poizvedovalnem jeziku 1C in omogoča nastavitev različnih izbir. Pri teh izbirah se praviloma uporabljajo mere. Vse to zveni precej nejasno, zato brez primera ne gre.
Imejmo torej periodični register informacij Cena ki hrani cene po izdelkih in dobaviteljih. Pogostost registra je dan.

Register vsebuje naslednje vnose

Za začetek bomo dobili delček slednjega brez uporabe parametrov z izvedbo naslednje zahteve:

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

Ker parametri niso podani, se rez izvede na trenutni datum - 01.02.2017. Kot rezultat dobimo naslednjo tabelo

Tukaj vidimo, da je kombinacija dimenzij Izdelek + Dobavitelj edinstvena, tj. Za vsako kombinacijo registrskih meritev je bil posnet zapis z maksimalnim datumom, datum zapisa pa je manjši ali enak trenutnemu datumu.

Recimo, da moramo narediti isto, vendar želimo dobiti zapise z datumom, ki je manjši ali enak 15. 1. 2017. Če želite to narediti, morate spremeniti vrstico z zadnjo tabelo rezin v zahtevi, kot sledi

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

Preden zahtevo izvedete, ji morate seveda posredovati parameter &Datum rezanja. Zdaj bo rezultat poizvedbe videti takole

In končno, predstavljajte si, da moramo dobiti posnetek najnovejših za isti datum pod pogojem, da imamo blago Svinčnik, in dobavitelj Pisalne potrebščine. Če želite to narediti, v zahtevi navedite drugi parameter

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

Posledično dobimo samo en zapis

Da se ne izgubite v vseh teh oklepajih in vejicah, je bolje uporabiti graditelj poizvedb. Pokazal vam bom na primeru zadnje zahteve.

Ko v oblikovalcu poizvedb izberete tabelo z rezino najnovejših, morate klikniti gumb Možnosti virtualne mize in v okno, ki se odpre, napišite

Ni težko uganiti, da je za prvo rezino princip delovanja enak, le da je izbran prvi zapis po datumu reza.

IN testna konfiguracija Imamo periodični informacijski register "Nomenklatura cen" z naslednjimi izvornimi podatki:

Slika prikazuje tudi strukturo metapodatkov registra. Kot lahko vidimo, register vsebuje dimenzijo »Produkt« s tipom sklicevanja »Produkti« ter številski vir »Cena« in atribut »Stara cena«.

Recimo, da moramo v poročilu pridobiti del najnovejših zapisov za izdelke in njihove cene pod pogojem, da je stara cena nižja ali enaka 50.

Dve možnosti zahteve

Takoj bom rekel, da bomo razmislili o pravilnih in napačnih možnostih. Začnimo s slednjimi. To je napaka, ki jo programerji začetniki pogosto delajo. In tako je bila za poročilo napisana naslednja poizvedba:

Zahteva = Nova zahteva; Prošnja. Besedilo = "IZBERI | | | | | OD | Register informacij. Nomenklature cen. Rez najnovejšega HOW CeneNomenklatura Rez najnovejšega|KJE | PricesNomenclatureSliceLatest. Stara cena< = 50 " ;

Bodite pozorni na pogoj v rubriki "KJE". To je glavna napaka! Ta poizvedba ne bo vrnila niti enega zapisa in tukaj je razlog: pri uporabi navideznih tabel, v našem primeru "Zadnja rezina", se podatki najprej pridobijo iz baze podatkov v skladu s pogoji, opisanimi v virtualna miza, nato pa se izvedejo dejanja, opisana v besedilu zahteve (združevanje, pogoji v razdelku »KJE«, ​​razvrščanje itd.).

Zato v našem primeru zahteva ne vrne rezultata. Najprej prejme delček slednjega, šele nato postavi pogoj na atribut “Stara cena”. Takole izgleda na diagramu:

Za pravilno rešitev problema je treba pogoj za atribut “Stara cena” prenesti v pogoje virtualne tabele. Takole bo videti pravilno besedilo zahteve:

Zahteva = Nova zahteva; Prošnja. Besedilo = "IZBERI PricesNomenclatureSliceLatest. Pika, PricesNomenclatureSliceLatest. izdelek, PricesNomenclatureSliceLatest. cena, PricesNomenclatureSliceLatest. Stara cena OD Register informacij. Nomenklature cen. SliceLast(, OldPrice< = 50 ) KAKO CENENomenklaturaSliceLatest"

Zdaj bo zahteva prejela pravilne podatke, saj bo prejet del najnovejših cen ob upoštevanju pogoja za atribut “OldPrice”.

rezultate

Razumeti je treba, da navedeno velja za vse primere uporabe navideznih tabel v poizvedbah (za akumulacijske registre, knjigovodske registre, opravila itd.).

To pomeni tudi glavno pravilo za uporabo virtualnih tabel: "pri uporabi virtualne tabele se prepričajte, da nastavite izbirne parametre neposredno v virtualni tabeli, sicer bo poizvedba prejela nepotrebne podatke, ki bodo nato uporabljeni za izbiro."

Včasih morate uporabiti poizvedbo, da pridobite podatke za več datumov hkrati iz registra periodičnih informacij. Tipičen primer je delo z menjalnimi tečaji. Razmislimo o algoritmu za rešitev te težave na primeru.

Oblikovanje problema

V bazi je ustvarjen dokument »Prodaja blaga in storitev«, v glavi katerega je atribut »Valuta«. Zahteva zahteva, da se za vsak dokument pridobi trenutni menjalni tečaj iz glave na datum dokumenta. Tečaji se hranijo v registru periodičnih informacij »Tečaji«.
Neposredna rešitev tega problema bi lahko bila poizvedba v zanki: pridobitev vseh dokumentov z njihovimi datumi in valutami ter v vzorcu dostop do virtualne tabele z rezino najnovejšega registra »tečaji valut«. Ampak ker zahteva v zanki je "slaba", poskusimo izvesti nalogo z eno zahtevo.

rešitev

Za rešitev problema bomo uporabili dejstvo, da tabele v poizvedbi je mogoče povezati ne le zaradi enakosti polj.

IZBERI Prodaja blaga in storitev Povezava Prodaja blaga in storitev Valuta NAJVEČ (Tečaji valute Obdobje) KOT Obdobje MESTO V Obdobjih Nastavitve Tečaji IZ Dokumenta Prodaja blaga in storitev KAKO Prodaja blaga in storitev LEVA POVEZAVA Register informacij . Valutni tečaji KOT Valutni tečaji ON Prodaja blaga in storitev. Valuta = Valutni tečaji. Valuta in prodaja blaga Storitve. Datum >= Valutni tečaji. Obdobje SKUPINA Programska oprema Prodaja blaga in storitev Povezava, Prodaja blaga in storitev Valuta; /////////////////////////////////////////////// // ////////////////////////// IZBERITE VTPeriodsSetting Rates.Link, VTPeriodsSetting Rates.Currency, RatesCurrency.Rate FROM VTPeriodsSetting Rates AS VTPeriodsSetting Rates LEVA POVEZAVA RegisterInformation . Valutni tečaji KOT Valutni tečaji NA VTPeriodsRate Settings.Period = Valutni tečaji.Period IN VTPeriodsRate Settings.Currency = Valutni tečaji.Currency

Postopek za zahtevo:

  1. Pridobitev obdobja za nastavitev tečaja za vsak dokument. Dokumenti so povezani s FIZIČNO tabelo “Tečaji”. Tukaj morate biti pozorni na pogoje povezave. Valuti morata biti enaki, datum dokumenta pa >= obdobje registra informacij.
    Kot rezultat takšne povezave bo za vsak dokument pridobljen nabor vrstic, ki izpolnjujejo pogoj: vsi zapisi menjalnih tečajev za valuto dokumenta, vzpostavljeni najkasneje na datum dokumenta.
    Zadnji korak bo združevanje vrstic v skupine, da dobimo obdobje najvišje stopnje. Posledično bo za vsak dokument pridobljen zahtevani rok za nastavitev menjalnega tečaja za želeno valuto (maksimalni datum za nastavitev menjalnega tečaja, vendar ne več kot datum dokumenta). Rezultat se postavi v začasno tabelo VTPeriodsSettingRates.
  2. Pridobivanje tečaja. Začasna tabela VTPeriodsSetting Rates je povezana s tabelo PHYSICAL “Currency Rates”. Povezava se izvede glede na valuto dokumenta in obdobje nastavitve tečaja, opredeljeno v drugi začasni tabeli.