Možnost pridobivanja posnetka zadnjih vnosov v informacijski register. Prejmite cene za datum dokumenta v zahtevku Prejmite ceno za datum dokumenta v zahtevku

: Najprej rezanje 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, navedite drugi parameter v zahtevi

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.

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 samo zaradi enakosti polj.

IZBERI Prodaja blagaStoritve.Povezava, Prodaja blagaStoritve.Valuta, NAJVEČ(Valutni tečaji.Obdobje) KOT Obdobje MESTO V ObdobjihNastavitev tečajev IZ Dokumenta.Prodaja blagaStoritve KAKO Prodaja blagaStoritve LEVA POVEZAVA Register informacij.Valutni tečaji KAKO Valutni tečaji Prodaja izdelkov Storitve.Valuta = Tečaji valut.Valuta in prodaja storitev.Datum >= Tečaji valut.Programska oprema skupine za obdobje.Povezava, prodaja blaga in storitev. /////////////////////////////////////////////// // ////////////////////////// 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, 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.

/
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 občasnih informacij je priporočljivo dovoliti vsote, č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 Najprej rezanje in Rezina zadnjega);
  • medtem ko preostali pogoji za virtualne mize Najprej rezanje 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 predmet. 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 Nomenklatura 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 je treba razmisliti o alternativnih možnostih za revizijo poizvedb v registru, 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. po datumu dokumenta).
  • v pogojih za virtualne mize Najprej rezanje in Rezina zadnjega Najpogosteje (vedno) se uporabljajo podpoizvedbe in spoji (klici »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.

To ni prvič, da sem naletel na situacijo, ko poizvedba ne zahteva iskanja stanja za določen datum (en parameter za celotno poročilo), ampak za poljuben (ko je datum stanja v vsaki vrstici drugačen). Našel sem članek, ki se mi je izkazal za zelo uporabnega, škoda, da je pozno, saj sem se moral sam domisliti prve možnosti.

Kopirano iz: http://www.kb.mista.ru/article.php?id=92

Pridobitev aktualnih podatkov iz informacijskega registra na dan prejema v sami zahtevi


Podatke, ki jih potrebujete, lahko dobite na več načinov.

1. Neposredno v poizvedbi (prek prave tabele registra)

Metoda je primerna za skoraj vsako situacijo in zato najbolj univerzalna. Morda je edina pomanjkljivost te metode ta, da če uporabnik v poročilu ne zahteva predmeta, bo zahteva izbrala odvečne podatke.

Klic SliceLast() lahko uporabite samo tako, da vanj posredujete vnaprej pripravljeno vrednost datuma, za katerega želite pridobiti vrednosti. Zato je predmet narejen z združevanjem več zahtev -
glavni, nanj je povezana poizvedba po informacijskem registru z datumskim pogojem in iskanje zapisa z maksimalnim datumom (obdobjem).

Za splošni razvoj:
Kakšen je prerez slednjega v platformi?

Glede na periodičnost vpisnika (časovno, glede na položaj vpisnika) se VT razširi v naslednjo zahtevo:
1. Po času (leto, mesec, ... sekunda)

2. Glede na položaj tajnika
V tem primeru morate izbor znova zaviti

Vse to je razvidno z vpogledom v tehnološki dnevnik z vključenim načinom beleženja zahtev

2. Sistem za sestavo podatkov (prenos niza vrednosti iz ene tabele v parameter virtualne tabele)

Ta metoda je primerna za poročila. Ena od očitnih prednosti je, da če tečaj (ali drugi podatki) niso potrebni za izdelavo poročila, jih ACS ne bo prejel. Vendar pa je lahko uspešnost takšnega poročila nekoliko nižja kot pri prvi metodi.

Na primer, ustvarimo poročilo - seznam naročil strank.

Če želite to narediti, ustvarimo nabor podatkov "Dokumenti" - zahtevo:

Za kasnejšo uspešno povezavo naborov podatkov je treba v zahtevo vključiti polji »Datum« in »Valuta dokumenta«. Če želite preprečiti, da bi se pojavila na seznamu razpoložljivih polj, jih po potrebi odstranite tako, da označite potrditvena polja za omejitve v tabeli »Polja« v diagramu postavitve. Sicer zahteva skoraj ne potrebuje komentarjev.

Da bi pridobili informacije o menjalnih tečajih, bomo dodali drugi niz podatkov poizvedbe, »Valutni tečaji«:

Ta zahteva ima 2 parametra: "Datum" in "Valuta". Te parametre bo nastavil ACS pri povezovanju sklopov. Poleg tega je v izbranih poljih naveden parameter "Datum" - to je potrebno za povezavo tabel.
Za nepotrebna polja »Datum« in »Valuta« smo tudi nastavili zastavice omejitve, da se ne prikažejo v razpoložljivih poljih.

Preidimo na povezovanje sklopov. Na strani »Povezave nabora podatkov« dodajte 2 povezavi:
1. Vir komunikacije je nabor »Dokumenti«, prejemnik je nabor »Valutni tečaji«. Izvorni izraz - "Datum", ciljni izraz - "Datum", Parameter - "Datum"
2. Vir komunikacije je nabor »Dokumenti«, prejemnik je nabor »Tečaji«. Izvorni izraz - "Valuta dokumenta", ciljni izraz - "Valuta", parameter - "Valuta"

Glavna stvar pri tem so komunikacijski parametri. Pri povezovanju podatkovnih nizov, če je določen parameter, ACS prenese v podrejeni niz (v našem primeru zahteva “Currency Rates”) parametre, navedene v povezavi. Vrednosti parametrov bodo vrednosti ustreznih polj izvornega niza.

Preidimo na izračunana polja. Dodajmo izračunano polje "AmountInAccountingCurrency". Izraz polja je "Količina dokumenta * Stopnja / večkratnost".

Kot sredstva bomo navedli tudi polji »Znesek dokumenta« in »Znesek v valuti«

Pripravimo poročilo.
Dodajmo eno skupino »Podrobni zapisi«, v izbranih poljih bomo navedli »Naročilo kupca«, »Razmerje« in »Množičnost«. Dodajmo vira "Znesek dokumenta" in "ZnesekVvalutnem obračunu"

Ustvarite lahko poročilo

Predpostavimo, da smo prejeli opravilo, za katerega želi kupec prejeti poročilo o dokumentih »Prodaja blaga in storitev«, vnesenih v bazo podatkov, in je za vsak dokument potrebno pridobiti ceno iz informatorja »Cene artiklov«. ” na datum dokumenta. Poročilo je napisano za različico konfiguracije "Manufacturing Enterprise Management" 1.3.

Zapisu iz tabele dokumentov se pridružuje zapis iz virtualne tabele "Nomenklaturne cene. SliceLast" glede na ustrezne pogoje obdobja, vrste cene in postavke. Vrsta cene se pridobi iz istoimenskih podrobnosti dokumenta.

Težavo je mogoče rešiti na več načinov. Razmislimo o dveh: poročilo o sistemu za nadzor dostopa z uporabo dveh nizov podatkov in pridobitev vseh potrebnih podatkov v eni zahtevi. Zdaj pa po vrsti.

Uporaba ACS

Za implementacijo takega poročila na sistemu za nadzor dostopa bomo v shemi sestave podatkov ustvarili dva niza podatkov. Prvi prejme seznam dokumentov, drugi cene za datume dokumentov glede na izbrano postavko in vrsto cene. Povezava med dvema nizoma podatkov se izvaja po postavki, obdobju (datum dokumenta) in vrsti cene. Iz prvega niza je potrebno prenesti parametre "Nomenklatura", "Vrsta cene" in "Obdobje" v drugi niz.

Prvi niz podatkov vsebuje naslednjo poizvedbo:

Poizvedba iz tabele dokumentov in tabelarnega dela “Izdelki” izbere naslednja polja: “Povezava”, “Datum”, “Vrsta cene”, “Nomenklatura”. Zdaj pa poglejmo drugi niz podatkov:

V drugem nizu podatkov bodite pozorni na parametre, posredovane zahtevku. Seznam izbirnih polj vsebuje parametre "Obdobje, "Postavka" in "Vrsta cene". Isti parametri se uporabljajo v parametrih virtualne tabele "Nomenklaturne cene. Rez zadnjega". Te parametre je potrebno prikazati v seznam polj, ki jih je mogoče izbrati, tako da je mogoče vrednosti teh parametrov prenesti iz prvega nabora v drugi nabor. To se izvede z uporabo nastavitev povezave med nabori podatkov na zavihku »Povezave nabora podatkov« oblikovalca diagramov postavitve podatkov:

Vzpostavitev povezav med viri podatkov se izvaja s pomočjo izbirnih polj v zahtevku. V drugem nizu podatkov smo v izbirna polja dodali poizvedbene parametre. Če pri vzpostavljanju relacij med nizi za relacijo izberete polje v stolpcu "Parameter", se vrednost iz stolpca "Izvorni izraz" prenese v "Ciljni izraz" in izbrani parameter zapolni z ustrezno vrednostjo.

Ko konfiguriramo strukturo poročila in ga ustvarimo, bomo dobili naslednji rezultat:

Poročilo deluje. Pojdimo k preučitvi možnosti za pridobitev cene za datum dokumenta v eni zahtevi.

V eni zahtevi

Ustvarimo novo poročilo s podobnimi izhodnimi polji in nastavitvami poročila. Edina razlika bodo viri podatkov. Tokrat bo poročilo vsebovalo en sam nabor podatkov, v katerem so v eni poizvedbi izbrani vsi dokumentni izdelki in z njimi povezane cene. Besedilo zahteve izgleda takole:

"SELECT | DocumentNomenclaturePeriod.Document, | DocumentNomenclaturePeriod.Document.Date AS Date, | DocumentNomenclaturePeriod.Document.PriceType AS TypePrice, | DocumentNomenclaturePeriod.Nomenclature, | PricesNomenclature.Price | FROM | (IZBERI | Prodaja blagaStoritveIzdelki. Povezava AS Document, ovServicesProducts .Nomenklatura AS. Obdobje AS. Prodaja blagaStoritveIzdelki LEVO.Nomenklature cen AS |.Prodaja blaga in storitev s. Povezava >= Cene Nomenklature |. In Prodaja GoodsServicesProducts.PriceType = CeneNomenclature.TypePrices |. In DocumentNomenclaturePeriod.Document.PriceType = Nomenklatura cen.PriceType | In DocumentNomenclaturePeriod.Period = PricesNomenclature.Period"

Načelo zahteve je pridobiti najbližji datum spremembe cene za vsak rabljen artikel v tabelarnem delu dokumenta, nato pa rezultatu poizvedbe priložiti podatke iz fizične tabele “Cene artiklov” po obdobju, artiklu in vrsti cene. . Zahteva se na prvi pogled morda zdi zapletena, v resnici pa je njena sintaksa precej preprosta.

Rezultat izvedbe je podoben rezultatu prejšnjega poročila (glejte zgornji posnetek zaslona).

Potegnite zaključke

Katera možnost za dokončanje naloge je boljša? Vse je odvisno od posebnih pogojev. V nekaterih primerih bo poročilo iz dveh nizov podatkov hitrejše kot pridobivanje vseh podatkov za poročilo v eni poizvedbi. V okviru tega članka se ne bomo mogli dotakniti težav z zmogljivostjo za obravnavane metode reševanja problema.

Upoštevati je treba tudi, da razvojna metodologija podjetja 1C ne priporoča ustvarjanja poročil na podlagi tabel dokumentov, saj se domneva, da informacije v dokumentih morda niso zanesljive. Vsa poročila morajo temeljiti na registrih.