Funkcija, kas ļauj iegūt momentuzņēmumu par jaunākajiem ierakstiem informācijas reģistrā. Jaunāko ierakstu daļas iegūšanas iespēja informācijas reģistrā Jaunāko ierakstu šķēle no informācijas reģistra 1c dokuments

/
Datu apstrādes īstenošana

Periodiskās informācijas reģistru kopsummas risināšana

Pielietojuma joma: pārvaldīta lietojumprogramma, mobilā lietotne, izplatīta lietojumprogramma.

1.1. Periodiskās informācijas reģistros ir ieteicams atļaut kopsummas, ja ir izpildīti visi tālāk minētie nosacījumi.

  • reģistrā ir sagaidāms liels datu apjoms (piemēram, tas ir attaisnojams reģistram ar preču cenām; bet nav jēgas reģistram ar valūtas kursiem);
  • konfigurācija nodrošina frekvenču vaicājumus pēdējās šķēlēs pašreizējā laikā un/vai pirmās šķēlēs, lai iegūtu pašreizējos datus (t.i., ja periods nav norādīts virtuālo tabulu parametros Pirmā šķēle Un Pēdējā šķēle);
  • savukārt atlikušie nosacījumi virtuālajām tabulām Pirmā šķēle Un Pēdējā šķēle ir iestatīti tikai uz mērījumu vērtībām (un atdalītājiem režīmā Neatkarīgi un kopīgi);
  • reģistra datu piekļuves ierobežojumi izmanto tikai dimensijas (un norobežotājus, kas ir režīmā Neatkarīgi un kopīgi).

Pilnīgu sarakstu ar visiem nosacījumiem, kad vaicājumi izmanto informācijas reģistra kopsummas, skdokumentācija platformai 1C:Enterprise.

Piemēram, ja konfigurācijā ir iekļauti bieži izpildīti vaicājumi reģistrā CenasNomenklatūras lai iegūtu pašreizējās preču cenas:

ATLASĪT vienumu. Raksts AS Artikuls, CenasNomenklatūra. Cena AS Cena,. . . NO direktorija. Nomenklatūra AS Nomenklatūra KREISAIS SAVIENOJUMS Informācijas reģistrs. CenasNomenklatūras. SliceLast(, PriceView = &Cenu veids) KĀ CenasNomenklatūras Programmatūras cenasNomenklatūras. Nomenklatūra = Nomenklatūra. Saite . . .

pēc tam, ievērojot visus citus iepriekš uzskaitītos nosacījumus, nosaka īpašumu Atļaut kopsummas: daļa no jaunākajām ievērojami paātrinās šādu vaicājumu izpildi, jo atlase tiks veikta tieši no papildu tabulām, kurās tiek saglabātas tikai pēdējās vērtības (pēdējo izgriešanai) un pirmās vērtības (izgriešanai). pirmie).

1.2. Turklāt jums vajadzētu apsvērt alternatīvas iespējas pārskatīt pieprasījumus reģistram, lai šie nosacījumi tiktu izpildīti.

Piemēram, ja atsevišķos gadījumos dati reģistrā CenasNomenklatūras tiek ierakstīti nākotnē, un, izvēloties preces šim reģistrā, vienmēr tiek izpildīts vaicājums par pašreizējo datumu (datums ir skaidri norādīts virtuālās tabulas parametrā Pēdējā šķēle), tad rezultāti nepaātrinās šādu vaicājumu izpildi. Tā kā kopsummas tiek veidotas tikai par pirmo un pēdējo reģistra ierakstu.

Tomēr, ja, atverot preču atlases veidlapu, jūs analizējat, vai ir reģistratori ar nākotnes datumu, un, ja tādu nav, izpildīsit citu vaicājumu par pēdējo daļu, neiestatot datumu, tad šāds vaicājums darbosies ātrāk. .

2. Visos citos gadījumos nevajadzētu atļaut periodisko informācijas reģistru kopsummas. Pirmkārt, ja

  • visbiežāk (vienmēr) vaicājumi tiek veikti pirmā/pēdējā periodiskā informācijas reģistra virtuālajām tabulām par konkrētu periodu (piemēram, par dokumenta datumu).
  • virtuālo galdu apstākļos Pirmā šķēle Un Pēdējā šķēle Visbiežāk (vienmēr) tiek izmantoti apakšvaicājumi un savienojumi (izsauc “caur punktu” saistīto tabulu laukiem). Piemēram, šajā gadījumā:

3. Konfigurācijā nav jāparedz atsevišķs kopsummas pārrēķināšanas mehānisms, jo kopsummas tabulu atjaunināšana tiek veikta automātiski katru reizi, kad reģistrā tiek ierakstīta ierakstu kopa.

: Pirmā šķēle Un Pēdējā šķēle Apsvērsim iespēju strādāt ar šīm virtuālajām tabulām, izmantojot 1C. Daudz biežāk lietots Pēdējā šķēle, tāpēc sāksim ar to.

Jaunākā šķēle ļauj iegūt informācijas reģistra pēdējo ierakstu noteiktam datumam mērījumu kontekstā. Pēdējai (pirmai) šķēlumu tabulai ir iespējams norādīt divus parametrus iekavās, atdalot tos ar komatiem. Pirmais parametrs satur datumu, kurā šķēle ir izveidota (ja parametrs nav norādīts, šķēle tiek veikta pašreizējā datumā). Otrais parametrs ir nosacījums 1C vaicājuma valodā un ļauj iestatīt dažādas atlases. Parasti šajās atlasēs tiek izmantoti mērījumi. Tas viss izklausās diezgan neskaidri, tāpēc bez piemēra nav iespējams iztikt.
Tāpēc izveidosim periodisku informācijas reģistru Cena kurā tiek saglabātas cenas pēc produkta un piegādātāja. Reģistra biežums ir diena.

Reģistrā ir šādi ieraksti

Sākumā mēs iegūsim daļu no pēdējās, neizmantojot parametrus, izpildot šādu pieprasījumu:

SELECT PriceSliceLast.Period AS Periods, PriceSliceLast.Product AS Product, PriceSliceLast.Supplier AS Piegādātājs, PriceSliceLast.Amount AS Summa NO Reģistrēties Informācija.Cena.ŠķēlePēdējā AS CenaŠķēlePēdējā

Tā kā parametri nav norādīti, šķēle tiek veikta pašreizējā datumā - 01.02.2017. Rezultātā mēs iegūstam šādu tabulu

Te redzam, ka izmēru kombinācija Prece + Piegādātājs ir unikāla, t.i. Katrai reģistra dimensiju kombinācijai tika uzņemts ieraksts ar maksimālo datumu, un ieraksta datums ir mazāks par pašreizējo datumu vai vienāds ar to.

Pieņemsim, ka mums ir jādara tas pats, taču mēs vēlamies iegūt ierakstus, kuru datums ir mazāks vai vienāds ar 15.01.2017. Lai to izdarītu, pieprasījumā ir jāmaina rinda ar jaunāko slāņu tabulu šādi

NO ReģistraInformation.Price.SliceLast(&CutDate,) AS PriceSliceLast

Pirms pieprasījuma izpildes, protams, jums ir jānodod tam parametrs &Izgriešanas datums. Tagad vaicājuma rezultāts izskatīsies šādi

Un visbeidzot, iedomājieties, ka mums ir jāiegūst momentuzņēmums no jaunākajām precēm tajā pašā datumā ar nosacījumu, ka mums ir preces Zīmulis, un piegādātājs Kancelejas preces. Lai to izdarītu, pieprasījumā norādiet otro parametru

NO ReģistraInformation.Price.Last Cut(&CutDate, Product = &Product UN Piegādātājs = &Piegādātājs) AS PriceLast Cut

Rezultātā mēs iegūstam tikai vienu ierakstu

Lai nepazustu visās šajās iekavās un komatos, labāk ir izmantot vaicājumu veidotāju. Es jums parādīšu, kā piemēru izmantojot pēdējo pieprasījumu.

Kad vaicājumu noformētājā ir atlasīta tabula ar jaunāko tabulu daļu, jums jānoklikšķina uz pogas Virtuālā galda opcijas un atvērtajā logā ierakstiet

Nav grūti uzminēt, ka pirmajai šķēlei darbības princips ir vienāds, izņemot to, ka tiek atlasīts pirmais ieraksts pēc griešanas datuma.

IN testa konfigurācija Mums ir periodisks informācijas reģistrs "Cenu nomenklatūra" ar šādiem avota datiem:

Attēlā parādīta arī reģistra metadatu struktūra. Kā redzam, reģistrā ir dimensija “Produkts” ar atsauces veidu “Produkti”, kā arī ciparu resurss “Price” un atribūts “OldPrice”.

Pieņemsim, ka pārskatā mums ir jāiegūst jaunākie ieraksti par produktiem un to cenām ar nosacījumu, ka vecā cena ir mazāka vai vienāda ar 50.

Divas pieprasījuma iespējas

Uzreiz teikšu, ka mēs apsvērsim pareizās un nepareizās iespējas. Sāksim ar pēdējo. Šī ir kļūda, ko bieži pieļauj iesācēju programmētāji. Tātad ziņojumam tika uzrakstīts šāds vaicājums:

Pieprasījums = jauns pieprasījums; Pieprasīt. Teksts = " SELECT | | | | | NO | Informācijas reģistrs. CenasNomenklatūras. Jaunākās KĀ cenas Nomenklatūras sadaļa Jaunākās daļas|KUR | CenasNomenklatūraŠķēleJaunākais. Vecā cena< = 50 " ;

Pievērsiet uzmanību stāvoklim sadaļā "KUR". Tā ir galvenā kļūda! Šis vaicājums neatgriezīs nevienu ierakstu, un tas ir iemesls, kāpēc: izmantojot virtuālās tabulas, mūsu gadījumā "Pēdējais šķēlums", dati vispirms tiek izgūti no datu bāzes saskaņā ar nosacījumiem, kas aprakstīti sadaļā virtuālais galds, un pēc tam tiek veiktas pieprasījuma tekstā aprakstītās darbības (grupēšana, nosacījumi sadaļā “KUR”, kārtošana utt.).

Tāpēc mūsu piemērā pieprasījums neatgriež rezultātu. Pirmkārt, viņš saņem daļu no pēdējās un tikai pēc tam iestata nosacījumu atribūtam “Vecā cena”. Lūk, kā tas izskatās diagrammā:

Lai pareizi atrisinātu problēmu, atribūta “Vecā cena” nosacījums ir jāpārnes uz virtuālās tabulas nosacījumiem. Pareizais pieprasījuma teksts izskatīsies šādi:

Pieprasījums = jauns pieprasījums; Pieprasīt. Teksts = " ATLASĪT CenasNomenklatūraŠķēleJaunākais. periods, CenasNomenklatūraŠķēleJaunākais. Produkts, CenasNomenklatūraŠķēleJaunākais. cena, CenasNomenklatūraŠķēleJaunākais. Vecā cena NO Informācijas reģistrs. CenasNomenklatūras. SliceLast(, OldPrice< = 50 ) KĀ CENASNomenklatūraSliceLatest"

Tagad pieprasījums saņems pareizos datus, jo tiks saņemta jaunāko cenu daļa, ņemot vērā atribūta “OldPrice” nosacījumu.

rezultātus

Jāsaprot, ka iepriekš minētais attiecas uz visiem virtuālo tabulu izmantošanas gadījumiem vaicājumos (uzkrāšanas reģistriem, grāmatvedības reģistriem, uzdevumiem utt.).

Tas nozīmē arī galveno virtuālo tabulu lietošanas noteikumu: "lietojot virtuālo tabulu, noteikti iestatiet atlases parametrus tieši virtuālajā tabulā, pretējā gadījumā vaicājums saņems nevajadzīgus datus, kas pēc tam tiks izmantoti atlasei."

Dažkārt ir nepieciešams izmantot vaicājumu, lai no periodiskas informācijas reģistra iegūtu datus par vairākiem datumiem vienlaikus. Tipisks piemērs ir darbs ar valūtas kursiem. Apskatīsim algoritmu šīs problēmas risināšanai, izmantojot piemēru.

Problēmas formulēšana

Datu bāzē ir izveidots dokuments “Preču un pakalpojumu pārdošana”, kura galvenē ir atribūts “Valūta”. Pieprasījums pieprasa katram dokumentam iegūt pašreizējo valūtas kursu no galvenes dokumenta datumā. Valūtu kursi tiek glabāti periodiskās informācijas reģistrā “Valūtu kursi”.
Tiešs risinājums šai problēmai varētu būt vaicājums cilpā: iegūt visus dokumentus ar to datumiem un valūtām un paraugā piekļūt virtuālajai tabulai ar jaunāko “Valūtu kursu” reģistra daļu. Bet tāpēc pieprasījums ciklā ir “slikts”, mēģināsim īstenot uzdevumu ar vienu pieprasījumu.

Risinājums

Lai atrisinātu problēmu, mēs izmantosim to, ka vaicājumā esošās tabulas var savienot ne tikai lauku vienlīdzības dēļ.

IZVĒLĒTIES Preču un pakalpojumu pārdošana. Saite, Preču un pakalpojumu pārdošana. Valūta, MAKSIMĀLĀ (Valūtas kursi. Periods) AS Periods VIETA TPperiodos Iestatījumi Kursi NO dokumenta Preču un pakalpojumu pārdošana KĀ Preču un pakalpojumu pārdošana KREISAIS SAVIENOJUMS Informācijas reģistrs Valūtu kursi AS Valūtu kursi PAR Preču pārdošanu.Valūta = Valūtas kursi.Valūta un preču pārdošanaPakalpojumi.Datums >= Valūtas kursi.Periods GROUP Programmatūra Preču un pakalpojumu pārdošana.Saite, Preču un pakalpojumu pārdošana.Valūta; ////////////////////////////////////////////////// //////////////////////////// IZVĒLĒTIES VTPperiodu iestatīšana Kursi.Saite, VTP periodi Kursu iestatīšana.Valūta, kursi Valūta.Likums NO VTPperiodiem Kursu iestatīšana AS VTPperiodu iestatīšana Kursu iestatīšana KREISĀ SAVIENOJUMS Valūtu kursi AS Valūtu kursi ON VTPperiodsRate Settings.Period = Valūtas kursi.Periods UN VTPperiodsRate Settings.Currency = Valūtas kursi.Valūta

Pieprasīšanas procedūra:

  1. Katra dokumenta maiņas kursa noteikšanas perioda iegūšana. Dokumenti ir savienoti ar FIZISKO tabulu “Valūtu kursi”. Šeit jums vajadzētu pievērst uzmanību savienojuma nosacījumiem. Valūtām jābūt vienādām, un dokumenta datumam >= informācijas reģistra periods.
    Šāda savienojuma rezultātā katram dokumentam tiks iegūta rindu kopa, kas atbilst nosacījumam: visi dokumenta valūtas maiņas kursu ieraksti, kas izveidoti ne vēlāk kā dokumenta datumā.
    Pēdējais solis būs rindu grupēšana, lai iegūtu maksimālās likmes periodu. Rezultātā katram dokumentam tiks iegūts nepieciešamais periods vēlamās valūtas maiņas kursa noteikšanai (maksimālais maiņas kursa noteikšanas datums, bet ne ilgāks par dokumenta datumu). Rezultāts tiek ievietots pagaidu tabulā VTPeriodsSettingRates.
  2. Kursa iegūšana. Pagaidu tabula VTPeriodsSetting Rates ir savienota ar FIZISKO tabulu “Valūtu kursi”. Savienojums notiek atbilstoši Dokumenta valūtai un kursa iestatīšanas periodam, kas noteikts otrajā pagaidu tabulā.