Funkce získání snímku nejnovějších záznamů v registru informací. Funkce získání výseče nejnovějších záznamů v registru informací Výřez nejnovějších z dokumentu registru informací 1c

/
Provádění zpracování dat

Řešení součtů pro periodické informační registry

Rozsah aplikace: spravovaná aplikace, mobilní aplikace, běžná aplikace.

1.1. U periodických informačních registrů se doporučuje povolit součty, pokud jsou splněny všechny následující podmínky:

  • v registru se očekává velký objem dat (např. u registru s cenami položek je to opodstatněné, u registru s kurzy to ale nemá smysl);
  • konfigurace poskytuje frekvenční dotazy na řezy druhého v aktuálním čase a/nebo na řezy prvního za účelem získání aktuálních dat (tj. když období není specifikováno v parametrech virtuálních tabulek Slice of the First A Slice of the Last);
  • zatímco zbývající podmínky pro virtuální tabulky Slice of the First A Slice of the Last jsou nastaveny pouze na naměřené hodnoty (a oddělovače v režimu Nezávisle a společně);
  • omezení přístupu k datům registru používají pouze dimenze (a oddělovače, které jsou v režimu Nezávisle a společně).

Úplný seznam všech podmínek, kdy dotazy používají součty registru informací, vizdokumentaci pro platformu 1C:Enterprise.

Například pokud konfigurace obsahuje často prováděné dotazy do registru Ceny Nomenklatury pro získání aktuální ceny zboží:

Vybrat předmět. Článek AS Článek, Nomenklatura cen. Cena AS Cena, . . . Z adresáře. Nomenklatura AS Nomenklatura LEVÉ SPOJENÍ Registr informací. Ceny Nomenklatury. SliceLast(, PriceView = &Typ cen) JAK Ceny Nomenklatury Nomenklatura cen softwaru. Nomenklatura = Nomenklatura. Odkaz . . .

poté, za splnění všech ostatních podmínek uvedených výše, nastavení nemovitosti Povolit součty: část posledních výrazně urychlí provádění takových dotazů, a to díky tomu, že výběr bude prováděn přímo z doplňkových tabulek, ve kterých jsou uloženy pouze poslední hodnoty (pro oříznutí posledních) a první hodnoty (pro oříznutí ty první).

1.2. Kromě toho byste měli zvážit alternativní možnosti revidovat žádosti do registru tak, aby byly tyto podmínky splněny.

Například pokud v některých případech údaje v registru Ceny Nomenklatury jsou evidovány k budoucímu datu a při výběru zboží do této evidence je vždy proveden dotaz na aktuální datum (datum je explicitně uvedeno v parametru virtuální tabulky Slice of the Last), pak výsledky provádění takových dotazů neurychlí. Vzhledem k tomu, že součty jsou sestaveny pouze pro první a poslední záznamy registru.

Pokud však při otevírání formuláře pro výběr produktu analyzujete, zda existují registrátoři s budoucím datem, a pokud žádní nejsou, spustíte další dotaz na část druhého bez nastavení data, bude takový dotaz fungovat rychleji. .

2. Ve všech ostatních případech by neměly být součty povoleny pro pravidelné informační registry. Za prvé, pokud

  • nejčastěji (vždy) dochází k dotazům do virtuálních tabulek prvního/posledního periodického registru informací za konkrétní období (například na datum dokumentu).
  • v podmínkách pro virtuální stoly Slice of the First A Slice of the Last Nejčastěji (vždy) se používají poddotazy a spojení (volání „přes tečku“ do polí souvisejících tabulek). Například v tomto případě:

3. V konfiguraci není potřeba poskytovat samostatný mechanismus pro přepočítávání součtů, protože aktualizace součtových tabulek se provádí automaticky při každém zápisu sady záznamů do registru.

: Slice of the First A Slice of the Last Zvažme práci s těmito virtuálními tabulkami pomocí 1C. Mnohem častěji používané Slice of the Last, tak začneme s tím.

Výseč nejnovější umožňuje získat poslední záznam registru informací k určenému datu v rámci měření. Pro poslední (první) tabulku řezů je možné zadat dva parametry v závorkách oddělené čárkami. První parametr obsahuje datum, kdy byl řez vytvořen (pokud parametr není uveden, je řez vytvořen v aktuální datum). Druhý parametr je podmínka v dotazovacím jazyce 1C a umožňuje nastavit různé výběry. V těchto výběrech se zpravidla používají měření. To vše zní dost vágně, takže se to bez příkladu neobejde.
Mějme tedy pravidelný registr informací Cena který ukládá ceny podle produktu a dodavatele. Frekvence registrace je den.

Registr obsahuje následující položky

Nejprve získáme část druhého bez použití parametrů provedením následujícího požadavku:

SELECT PriceSliceLast.Period AS Období, PriceSliceLast.Product AS Product, PriceSliceLast.Supplier AS Dodavatel, PriceSliceLast.Amount AS Částka OD Registrovat Information.Price.SliceLast AS PriceSliceLast

Vzhledem k tomu, že parametry nejsou specifikovány, je řez proveden k aktuálnímu datu - 02.01.2017. Výsledkem je následující tabulka

Zde vidíme, že unikátní je kombinace rozměrů Produkt + Dodavatel, tzn. Pro každou kombinaci měření registru byl pořízen záznam s maximálním datem a datum záznamu je menší nebo rovno aktuálnímu datu.

Řekněme, že potřebujeme udělat totéž, ale chceme získat záznamy s datem menším nebo rovným 15.01.2017. Chcete-li to provést, musíte změnit řádek s nejnovější tabulkou řezů v požadavku následovně

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

Před provedením požadavku mu samozřejmě musíte předat parametr &Datum vystřižení. Nyní bude výsledek dotazu vypadat takto

A nakonec si představte, že potřebujeme získat snímek nejnovějších ke stejnému datu s podmínkou, že zboží máme Tužka a dodavatelem Papírnictví. Chcete-li to provést, zadejte druhý parametr v požadavku

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

Výsledkem je pouze jeden záznam

Abyste se ve všech těchto závorkách a čárkách neztratili, je lepší použít tvůrce dotazů. Jako příklad vám ukážu poslední požadavek.

Po výběru tabulky s výřezem nejnovějších v návrháři dotazů musíte kliknout na tlačítko Možnosti virtuálního stolu a v okně, které se otevře, napište

Není těžké uhodnout, že pro první řez je princip fungování stejný, až na to, že je vybrán první záznam po datu řezu.

V testovací konfigurace Máme pravidelný informační registr „PriceNomenclature“ s následujícími zdrojovými údaji:

Obrázek také ukazuje strukturu metadat registru. Jak vidíme, registr obsahuje dimenzi „Produkt“ s typem reference „Produkty“, dále číselný zdroj „Cena“ a atribut „OldPrice“.

Řekněme, že ve zprávě potřebujeme získat část nejnovějších záznamů pro produkty a jejich ceny s podmínkou, že stará cena je menší nebo rovna 50.

Dvě možnosti požadavku

Hned řeknu, že zvážíme správné a nesprávné možnosti. Začněme tou druhou. To je chyba, které se začínající programátoři často dopouštějí. A tak byl pro zprávu napsán následující dotaz:

Žádost = Nová žádost; Žádost. Text = " VYBRAT | | | | | Z | Registr informací. Ceny Nomenklatury. Slice of the Latest JAK Ceny NomenklaturaSlice of the Latest|KDE | Ceny NomenklaturaPlátekNejnovější. Stará cena< = 50 " ;

Věnujte pozornost stavu v sekci "KDE". To je hlavní chyba! Tento dotaz nevrátí jediný záznam a zde je důvod: při použití virtuálních tabulek, v našem případě "Poslední řez", jsou data nejprve načtena z databáze podle podmínek popsaných v virtuální stůl a poté se provedou akce popsané v textu požadavku (seskupení, podmínky v sekci „KDE“, řazení atd.).

Proto v našem příkladu požadavek nevrací výsledek. Nejprve obdrží část druhého jmenovaného a teprve poté nastaví podmínku u atributu „Stará cena“. Takto to vypadá na diagramu:

Pro správné vyřešení problému je nutné přenést podmínku pro atribut „Stará cena“ do podmínek virtuálního stolu. Takto bude vypadat správný text požadavku:

Žádost = Nová žádost; Žádost. Text = "VYBRAT Ceny NomenklaturaPlátekNejnovější. Doba, Ceny NomenklaturaPlátekNejnovější. Produkt, Ceny NomenklaturaPlátekNejnovější. Cena, Ceny NomenklaturaPlátekNejnovější. Stará cena Z Registr informací. Ceny Nomenklatury. SliceLast(, OldPrice< = 50 ) JAK CENYNomenklaturaSliceNejnovější"

Nyní požadavek obdrží správná data, protože bude přijata část nejnovějších cen s ohledem na podmínku pro atribut „Stará cena“.

Výsledek

Je třeba si uvědomit, že výše uvedené platí pro všechny případy použití virtuálních tabulek v dotazech (pro akumulační registry, účetní registry, úlohy atd.).

Z toho také vyplývá hlavní pravidlo pro používání virtuálních tabulek: „při použití virtuální tabulky nezapomeňte nastavit parametry výběru přímo ve virtuální tabulce, jinak dotaz obdrží nepotřebná data, která budou následně použita pro výběr.“

Někdy je potřeba použít dotaz k získání dat pro několik dat najednou z periodického informačního registru. Typickým příkladem je práce s měnovými kurzy. Podívejme se na algoritmus pro řešení tohoto problému pomocí příkladu.

Formulace problému

V databázi je vytvořen doklad „Prodej zboží a služeb“, v jehož záhlaví je atribut „Měna“. Požadavek vyžaduje pro každý doklad získat aktuální kurz z hlavičky k datu dokladu. Kurzy měn jsou uloženy v pravidelném informačním registru „Měnové kurzy“.
Přímým řešením tohoto problému by mohl být dotaz ve smyčce: získání všech dokladů s jejich daty a měnami a v příkladu přístup k virtuální tabulce s výřezem z nejnovějšího registru „Currency Kurzy“. Ale protože požadavek ve smyčce je „špatný“, zkusme úkol implementovat jedním požadavkem.

Řešení

K vyřešení problému využijeme toho, že tabulky v dotazu lze propojit nejen pro rovnost polí.

VYBERTE Prodej zboží a služeb Odkaz, Prodej zboží a služeb Měna, MAXIMÁLNÍ (kurzy měny. Období) JAKO Období MÍSTO V OBDOBÍCH Nastavení Sazby Z DOKUMENTU Prodej zboží a služeb JAK Prodej zboží a služeb LEVO PŘIPOJENÍ Registr informací Kurzy měn JAKO Kurzy měn při prodeji zboží služebníků.Currency = Kurzy měn.Měna a prodej zbožíSlužby.Datum >= Kurzy měn.Období GROUP Software Prodej zboží a služeb Odkaz, Prodej zboží a služeb. ///////////////////////////////////////////////// /////////////////////////// SELECT VTPobdobíNastavení sazeb.Link,VTPobdobíNastavení sazeb.Měna, sazbyCurrency.Rate Z VTPobdobíNastavení sazeb JAKO Období VTPNastavení sazeb LEVÉ PŘIPOJENÍ RegistrovatInformace . Kurzy měn JAKO kurzy měn ZAPNUTO VTPobdobíRate Settings.Period = Kurzy měn.Období A období VTPRate Settings.Currency = Kurzy měn.Měna

Postup pro žádost:

  1. Získání období pro nastavení kurzu pro každý doklad. Dokumenty jsou propojeny s FYZICKOU tabulkou „Kurzy měn“. Zde byste měli věnovat pozornost podmínkám připojení. Měny se musí rovnat a datum dokumentu >= období evidence informací.
    V důsledku takového spojení bude pro každý dokument získána sada řádků, které splňují podmínku: všechny záznamy o směnných kurzech pro měnu dokumentu, založené nejpozději k datu dokumentu.
    Posledním krokem bude seskupení řádků, abyste získali období maximální rychlosti. Výsledkem je, že pro každý doklad bude získáno požadované období pro nastavení směnného kurzu pro požadovanou měnu (maximální datum pro nastavení směnného kurzu, maximálně však datum dokladu). Výsledek je umístěn do dočasné tabulky VTPeriodsSettingRates.
  2. Získání kurzu. Dočasná tabulka VTPeriodsSetting Rates je propojena s tabulkou PHYSICAL „Currency Rats“. K připojení dojde podle měny dokladu a období nastavení sazby definované v druhé dočasné tabulce.