Pogoj v virtualni tabeli 1c. Gumb »Poizvedba« v oblikovalcu poizvedb

Pri organiziranju vzorcev v realnih problemih je v veliki večini primerov izbor podatkov organiziran v skladu z določenimi kriteriji.

V primeru, da je izbira narejena iz prave tabele, ne nastanejo nobene težave. Podatki se obdelujejo povsem trivialno:

V primeru, ko je vir v poizvedbi virtualna tabela, postane situacija nekoliko bolj zapletena.


Poizvedbeni jezik vam omogoča, da določite pogoj za izbor iz virtualnih tabel na dva načina: v klavzuli WHERE in z uporabo parametrov virtualne tabele. Obe metodi bosta privedli do enakega rezultata (z izjemo nekaterih posebnih primerov), vendar še zdaleč nista enakovredna.

Vemo že, da se virtualne tabele imenujejo virtualne, ker dejansko niso v bazi podatkov. Oblikujejo se šele v trenutku, ko je do njih vložena zahteva. Kljub temu je nam (torej tistim, ki pišejo poizvedbo) priročno, da virtualne tabele obravnavamo kot prave. Kaj se bo zgodilo v sistemu 1C Enterprise 8, ko poizvedba, ki smo jo sestavili, še vedno dostopa do virtualne tabele?

V prvem koraku bo sistem zgradil virtualno tabelo. V drugem koraku bodo iz dobljene tabele izbrani zapisi, ki izpolnjujejo pogoj, naveden v klavzuli WHERE:
Jasno je razvidno, da končni vzorec ne bo vključeval vseh zapisov iz virtualne tabele (in s tem iz baze podatkov), ampak le tiste, ki bodo ustrezali danemu pogoju. In preostali zapisi bodo preprosto izključeni iz rezultata.

Tako sistem ne bo opravljal samo neuporabnega dela, temveč dvojno neuporabno delo! Najprej bodo sredstva porabljena za izgradnjo virtualne tabele na podlagi nepotrebnih podatkov (na sliki so označeni kot »podatkovni območji A in B«), nato pa bo opravljeno delo za filtriranje teh podatkov iz končnega rezultata.

Ali je mogoče takoj, v fazi izdelave virtualne tabele, prenehati uporabljati nepotrebne podatke? Izkazalo se je, da je to mogoče. Natančno temu so namenjeni parametri virtualne tabele:

S parametriranjem virtualne tabele takoj omejimo količino podatkov, ki jih bo obdelala poizvedba.

Kakšna je razlika med vrednostmi parametra virtualne tabele "Metoda dodajanja"?
Ko je metoda dodajanja nastavljena na "gibanja", bodo vrnjena samo tista obdobja, v katerih so bila gibanja. Ko so nastavljene "Gibanja in meje obdobij", bosta zgornjim premikom dodana 2 zapisa: gibanja na začetku in koncu obdobja, določenega v parametrih VT. Polje »Registrar« bo za ta 2 zapisa prazno.

Informacije povzete s strani

Jezik poizvedb v 1C 8 je poenostavljen analog dobro znanega "strukturiranega programskega jezika" (kot se pogosteje imenuje SQL). Toda v 1C se uporablja samo za branje podatkov, objektni podatkovni model pa se uporablja za spreminjanje podatkov.

Druga zanimiva razlika je ruska sintaksa. Čeprav v resnici lahko uporabite konstrukcije v angleškem jeziku.

Primer zahteve:

IZBERI
Ime banke,
Banke.CorrAccount
OD
Imenik.Banke KAKO Banke

Ta zahteva nam bo omogočila vpogled v podatke o imenu in korespondenčnem računu vseh bank, ki obstajajo v bazi podatkov.

Poizvedovalni jezik je najpreprostejši in učinkovita metoda pridobivanje informacij. Kot je razvidno iz zgornjega primera, morate v poizvedovalnem jeziku uporabiti imena metapodatkov (to je seznam sistemskih objektov, ki sestavljajo konfiguracijo, tj. imeniki, dokumenti, registri itd.).

Opis konstruktov poizvedovalnega jezika

Struktura poizvedbe

Za pridobitev podatkov je dovolj, da uporabite konstrukciji "SELECT" in "FROM". Najenostavnejša zahteva je videti takole:

IZBERI * IZ Imenikov.Nomenklatura

Pri čemer “*” pomeni izbiro vseh polj tabele, Imeniki.Nomenklatura pa ime tabele v bazi podatkov.

Poglejmo bolj zapleten in splošen primer:

IZBERI
<ИмяПоля1>KAKO<ПредставлениеПоля1>,
vsota(<ИмяПоля2>) KAKO<ПредставлениеПоля2>
OD
<ИмяТаблицы1>KAKO<ПредставлениеТаблицы1>
<ТипСоединения>SPOJINA<ИмяТаблицы2>KAKO<ПредставлениеТаблицы2>
BY<УсловиеСоединениеТаблиц>

KJE
<УсловиеОтбораДанных>

ZDRUŽI PO
<ИмяПоля1>

RAZVRSTI PO
<ИмяПоля1>

REZULTATI
<ИмяПоля2>
BY
<ИмяПоля1>

IN to zahtevo iz tabel “TableName1” in “TableName” izberemo podatke polj “FieldName1” in “FieldName1” iz tabel “TableName1” in “TableName”, poljem dodelimo sinonime z operatorjem “HOW” in jih povežemo z določenim pogojem “TableConnectionCondition”.

Iz prejetih podatkov izberemo samo tiste podatke, ki izpolnjujejo pogoj iz “WHERE” “Data Selection Condition” Nato združimo zahtevo po polju “Field Name1”, medtem ko seštejemo “Field Name2”. Ustvarimo seštevke za polje “Ime polja1” in končno polje “Ime polja2”.

Zadnji korak je razvrščanje zahteve s konstrukcijo ORDER BY.

Splošne zasnove

Oglejmo si splošne strukture poizvedovalnega jezika 1C 8.2.

NAJPREJn

Z uporabo tega operaterja lahko dobite n število prvih zapisov. Vrstni red zapisov je določen z vrstnim redom v poizvedbi.

IZBERI PRVIH 100
Ime banke,
Banke Koda AS BIC
OD
Imenik.Banke KAKO Banke
RAZVRSTI PO
Banke. Ime

Zahteva bo prejela prvih 100 vnosov imenika »Banke«, razvrščenih po abecedi.

DOVOLJENO

Ta oblika je pomembna za delo z mehanizmom. Bistvo mehanizma je omejiti branje (in druga dejanja) uporabnikom za določene zapise v tabeli baze podatkov in ne tabele kot celote.

Če uporabnik poskuša uporabiti poizvedbo za branje zapisov, ki so mu nedostopni, bo prejel sporočilo o napaki. Da bi se temu izognili, uporabite konstrukcijo »ALOWED«, kar pomeni, da bo zahteva prebrala samo tiste zapise, ki so ji dovoljeni.

IZBERI DOVOLJENO
Repozitorij dodatnih informacij Povezava
OD
Imenik.Repozitorij dodatnih informacij

RAZLIČNO

Če uporabite »DIFFERENT«, boste preprečili, da bi podvojene vrstice vstopile v rezultat poizvedbe 1C. Podvajanje pomeni, da se vsa polja zahteve ujemajo.

IZBERI PRVIH 100
Ime banke,
Banke Koda AS BIC
OD
Imenik.Banke KAKO Banke

EmptyTable

Ta konstrukcija se zelo redko uporablja za združevanje poizvedb. Pri pridruževanju boste morda morali podati prazno ugnezdeno tabelo v eni od tabel. Operator “EmptyTable” je ravno pravi za to.

Primer iz pomoči 1C 8:

IZBERI Povezava. Številka, PRAZNA TABELA. (Št., Artikel, Količina) KOT Sestava
IZ dokumenta.Račun
ZDRUŽI VSE
IZBERI Link.Number, Contents.(LineNumber, Product, Quantity)
FROM Dokument.Račun Dokument.Račun.Sestava.*

ISNULL

Zelo uporabna funkcija, ki vam omogoča, da se izognete številnim napakam. YesNULL() vam omogoča zamenjavo vrednosti NULL z želeno. Zelo pogosto se uporablja pri preverjanju prisotnosti vrednosti v združenih tabelah, na primer:

IZBERI
Ref. povezava do nomenklature,
IsNULL(Preostali element.Preostala količina,0) AS Preostala količina
OD


Lahko se uporablja tudi na druge načine. Na primer, če za vsako vrstico ni znano, v kateri tabeli obstaja vrednost:

ISNULL(Datum prejetega računa, Datum izdaje računa)

HOW je operator, ki nam omogoča, da tabeli ali polju dodelimo ime (sinonim). Zgoraj smo videli primer uporabe.

Te konstrukcije so zelo podobne - omogočajo vam, da dobite predstavitev niza želene vrednosti. Edina razlika je v tem, da REPRESENTATION pretvori vse vrednosti v vrsto niza, in REPRESENTATIONLINKS sta samo referenca. REFERENČNO PREDSTAVITEV je priporočljivo uporabiti v sistemskih poizvedbah za sestavo podatkov za optimizacijo, razen če je seveda načrtovana uporaba referenčnega podatkovnega polja pri izbirah.

IZBERI
Pogled(Povezava), //niz, na primer “Predhodno poročilo št. 123 z dne 10.10.2015.
View(DeletionMark) AS DeleteMarkText, //niz, “Da” ali “Ne”
ViewReferences(DeletionMark) AS DeleteMarkBoolean //boolean, True ali False
OD
Dokument.Predhodno poročilo

EKSPRES

Express vam omogoča pretvorbo vrednosti polj v pravi tip podatke. Vrednost lahko pretvorite bodisi v primitivni tip bodisi v referenčni tip.

Express za referenčni tip se uporablja za omejevanje zahtevanih tipov podatkov v poljih kompleksnega tipa, ki se pogosto uporabljajo za optimizacijo delovanja sistema. primer:

EXPRESS(TableCost.Subconto1 AS Directory.Cost Items).Type of ActivityForTaxAccountingCosts

Za primitivne tipe se ta funkcija pogosto uporablja za omejevanje števila znakov v poljih neomejene dolžine (s takšnimi polji ni mogoče primerjati). Da bi se izognili napaki " Neveljavni parametri v operaciji primerjave. Ne morete primerjati polj
neomejena dolžina in polja nezdružljivih vrst
", morate taka polja izraziti na naslednji način:

EXPRESS(Komentar AS Line(150))

DATUM RAZLIKE

Pridobite 267 video lekcij o 1C brezplačno:

Primer uporabe IS NULL v zahtevi 1C:

IZBIRAJTE IZ
Ref
LEVA POVEZAVA RegisterAcumulations.ProductsInWarehouses.Remaining AS Product Remaining
Nomenklatura programske opremeRef.Link = Ostanki komitov prodanega blaga.Nomenklatura
WHERE NOT Preostali izdelki. QuantityRemaining JE NULL

Tip podatkov v poizvedbi je mogoče določiti na naslednji način: z uporabo funkcij TYPE() in VALUETYPE() ali z uporabo logični operator POVEZAVA. Funkciji sta podobni.

Vnaprej določene vrednosti

Poleg uporabe posredovanih parametrov v poizvedbah v jeziku poizvedb 1C lahko uporabite vnaprej določene vrednosti ali . Na primer prenosi, vnaprej določeni imeniki, kontni načrti itd.. Za to se uporablja konstrukt "Value()".

Primer uporabe:

WHERE Nomenklatura. Vrsta nomenklature = Vrednost (Imenik. Vrste nomenklature. Izdelek)

WHERE Nasprotne stranke. Vrsta kontaktnih podatkov = vrednost (Naštevanje. Vrste kontaktnih podatkov. Telefon)

WHERE Stanja na računih.Računovodski račun = vrednost(Kontni načrt.Dobiček.DobičekIzguba)

Povezave

Obstajajo 4 vrste povezav: LEVO, PRAV, KOMPLETNO, INTERNO.

LEVI in DESNI PRIKLJUČEK

Spoji se uporabljajo za povezovanje dveh tabel na podlagi določenega pogoja. Značilnost, ko LEVO PRIDRUŽI SE je, da prvo navedeno tabelo vzamemo v celoti in pogojno povežemo drugo tabelo. Polja druge tabele, ki jih ni bilo mogoče vezati s pogojem, so izpolnjena z vrednostjo NIČ.

Na primer:

Vrne celotno tabelo Nasprotnih strank in izpolni polje »Banka« le na tistih mestih, kjer bo izpolnjen pogoj »Nasprotne stranke.Ime = Banke.Ime«. Če pogoj ni izpolnjen, bo polje Banka nastavljeno na NIČ.

RIGHT JOIN v jeziku 1C popolnoma podoben LEVI priključek, z izjemo ene razlike - v PRAVICA DO PRIKLJUČITVE"Glavna" tabela je druga, ne prva.

POPOLNA POVEZAVA

POPOLNA POVEZAVA razlikuje se od leve in desne po tem, da prikaže vse zapise iz dveh tabel in poveže samo tiste, ki jih lahko poveže po pogoju.

Na primer:

OD

POPOLNA POVEZAVA
Imenik.Banke KAKO Banke

BY

Poizvedbeni jezik vrne obe tabeli v celoti le, če je izpolnjen pogoj za združitev zapisov. Za razliko od združevanja levo/desno je možno, da se NULL prikaže v dveh poljih.

NOTRANJI SPOJ

NOTRANJI SPOJ se od polnega razlikuje po tem, da prikazuje samo tiste zapise, ki jih je mogoče povezati glede na dani pogoj.

Na primer:

OD
Imenik Nasprotne stranke AS Stranke

NOTRANJI SPOJ
Imenik.Banke KAKO Banke

BY
Clients.Name = Ime banke

Ta poizvedba bo vrnila samo vrstice, v katerih imata banka in nasprotna stranka isto ime.

Asociacije

Konstrukti JOIN in JOIN ALL združita dva rezultata v enega. Tisti. rezultat izvajanja dveh se bo »združil« v enega, skupnega.

To pomeni, da sistem deluje popolnoma enako kot običajni, le za začasno tabelo.

Kako uporabljati INDEX BY

Vendar je treba upoštevati eno točko. Gradnja indeksa na začasni tabeli prav tako zahteva čas. Zato je priporočljivo uporabiti konstrukcijo " " samo, če je zagotovo znano, da bo v začasni tabeli več kot 1-2 zapisa. V nasprotnem primeru je lahko učinek nasproten – zmogljivost indeksiranih polj ne nadomesti časa, ki je potreben za izdelavo indeksa.

IZBERI
Valutni tečaji Zadnji prerez Valuta AS Valuta,
Tečaji Najnovejši prerez.
PUT tečaji valut
OD
Register informacij. Valutni tečaji. Zadnji rez (&obdobje,) AS Valutni tečaji Zadnji rez
INDEKS PO
Valuta
;
IZBERI
CeneNomenklatura.Nomenklatura,
CeneNomenklature.Cena,
CeneNomenklature.Valuta,
Tečaji valut
OD
Register informacij. Cene nomenklature. Zadnja rezina (&obdobje,
Nomenklatura B (&Nomenklatura) IN PriceType = &PriceType) AS PriceNomenclature
LEFT JOIN Valutni tečaji KOT Valutni tečaji
Nomenklature cen programske opreme. Valuta = Tečaji valut. Valuta

Združevanje v skupine

Jezik poizvedb 1C vam omogoča uporabo posebnih agregatne funkcije pri združevanju rezultatov poizvedbe. Združevanje lahko uporabite tudi brez agregatnih funkcij za "odpravo" dvojnikov.

Obstajajo naslednje funkcije:

Količina, Količina, Število različnih, Največ, Najmanj, Povprečje.

Primer #1:

IZBERI
Prodaja blaga in storitev Blago Nomenklatura,
SUM(Prodaja blagaStoritveBlago.Količina) AS količina,
SUM(Sales of GoodsServicesGoods.Amount) AS Amount
OD

ZDRUŽI PO
Prodaja blaga in storitev Blago Nomenklatura

Zahtevek prejme vse vrstice z blagom in jih povzema po količini in zneskih po postavkah.

Primer št. 2

IZBERI
Banke. Koda,
QUANTITY(DIFFERENT Banks.Link) AS Število dvojnikov
OD
Imenik.Banke KAKO Banke
ZDRUŽI PO
Banke.Kodeks

Ta primer bo prikazal seznam BIC v imeniku »Banke« in pokazal, koliko dvojnikov obstaja za vsako od njih.

Rezultati

Rezultati - način pridobivanja podatkov iz sistema z hierarhično strukturo. Združevalne funkcije je mogoče uporabiti za polja povzetka, tako kot za združevanje.

Eden najbolj priljubljenih načinov uporabe rezultatov v praksi je serijski odpis blaga.

IZBERI




OD
Dokument Prodaja blaga in storitev Blago KAKO Prodaja blaga in storitev Blago
RAZVRSTI PO

REZULTATI
SUM(količina),
SUM(Vsota)
BY
Nomenklatura

Rezultat poizvedbe bo naslednja hierarhija:

Splošni rezultati

Če želite dobiti vsote za vse "vsote", uporabite operator "GENERAL".

IZBERI
Prodaja blaga in storitev Blago Nomenklatura AS Nomenklatura,
Prodaja blaga in storitev Blago Povezava AS Dokument,
Prodaja blaga in storitev Blago. Količina KOT Količina,
Prodaja blaga in storitev Blago Znesek KOT Znesek
OD
Dokument Prodaja blaga in storitev Blago KAKO Prodaja blaga in storitev Blago
RAZVRSTI PO
Prodaja blaga in storitev Blago Povezava Datum
REZULTATI
SUM(količina),
SUM(Vsota)
BY
SO POGOSTI,
Nomenklatura

Kot rezultat izvedbe zahteve dobimo naslednji rezultat:

V kateri 1 ravni združevanja je združevanje vseh potrebnih polj.

Aranžiranje

Operator ORDER BY se uporablja za razvrščanje rezultatov poizvedbe.

Razvrščanje za primitivne tipe (niz, število, logična vrednost) sledi običajnim pravilom. Za polja sklicnega tipa se razvrščanje izvede po notranji predstavitvi povezave (enolični identifikator) in ne po kodi ali po predstavitvi sklica.

IZBERI

OD
Imenik.Nomenklatura AS Nomenklatura
RAZVRSTI PO
Ime

Zahteva bo prikazala seznam imen v imeniku nomenklature, razvrščenih po abecedi.

Samodejno naročilo

Rezultat poizvedbe brez razvrščanja je kaotično predstavljen niz vrstic. Razvijalci platforme 1C ne zagotavljajo, da bodo vrstice izpisane v istem zaporedju pri izvajanju enakih poizvedb.

Če morate zapise tabele prikazati v stalnem vrstnem redu, morate uporabiti konstrukcijo samodejnega vrstnega reda.

IZBERI
Nomenklatura. Ime AS Ime
OD
Imenik.Nomenklatura AS Nomenklatura
AVTO NAROČILO

Virtualne mize

Navidezne tabele v 1C so edinstvena lastnost poizvedovalnega jezika 1C, ki je ni v drugih podobnih sintaksah. Virtualna miza – hiter način pridobivanje podatkov o profilu iz registrov.

Vsak tip registra ima svoj niz virtualnih tabel, ki se lahko razlikujejo glede na nastavitve registra.

  • rez prvega;
  • izrez slednjega.
  • ostanki;
  • revolucije;
  • stanja in prometa.
  • premiki iz podkonto;
  • revolucije;
  • hitrost Dt Kt;
  • ostanki;
  • stanja in prometa
  • subconto.
  • osnova;
  • grafični podatki;
  • dejansko obdobje veljavnosti.

Za razvijalca rešitve so podatki vzeti iz ene (virtualne) tabele, v resnici pa platforma 1C vzame iz številnih tabel in jih pretvori v zahtevano obliko.

IZBERI
Proizvodi v skladiščih Ostanki in promet Nomenklatura,
ProductsInWarehousesRemainingAndTurnover.QuantityInitialRemaining,
ProductsInWarehousesRemainsAndTurnover.QuantityTurnover,
Blago V Skladiščih Ostanki In Promet. Količina Vhodna,
Blago V SkladiščihOstankiInPromet.KoličinskaPoraba,
ProductsInWarehousesRemainingsAndTurnover.QuantityFinalRemaining
OD
RegisterAkumulacije.BlagaVSkladišcih.OstankiInPromet AS BlagoVSkladišcihOstankiInPromet

Ta poizvedba vam omogoča hitro pridobitev velike količine podatkov.

Možnosti virtualne mize

Zelo pomemben vidik dela z virtualnimi tabelami je uporaba parametrov. Parametri virtualne tabele so specializirani parametri za izbiro in konfiguracijo.

Za takšne tabele se šteje, da je uporaba izbire v konstrukciji "WHERE" nepravilna. Poleg tega, da poizvedba postane neoptimalna, je možno prejeti napačne podatke.

Primer uporabe teh parametrov:

Register akumulacij. Blago v skladiščih. Stanja in promet (& Začetek obdobja, & Konec obdobja, Mesec, Premiki in meje obdobja, Nomenklatura = & Zahtevana nomenklatura)

Algoritem za virtualne tabele

Na primer, najpogosteje uporabljena virtualna tabela tipa "Ostanki" hrani podatke iz dveh fizičnih tabel - stanja in gibanja.

Pri uporabi navidezne tabele sistem izvaja naslednje manipulacije:

  1. Najbližjo izračunano vrednost glede na datum in meritve dobimo v tabeli seštevkov.
  2. Znesek iz tabele gibanja »prištejemo« znesku iz tabele seštevkov.


Takšna preprosta dejanja lahko bistveno izboljšajo delovanje sistema kot celote.

Uporaba Query Builder

Graditelj poizvedb– orodje, vgrajeno v sistem 1C Enterprise, ki močno olajša razvoj poizvedb po bazah podatkov.

Graditelj poizvedb ima dokaj preprost in intuitiven vmesnik. Kljub temu si poglejmo uporabo konstruktorja poizvedbe podrobneje.

Konstruktor besedila poizvedbe zaženemo iz kontekstnega menija (desni gumb miške) na želenem mestu v programski kodi.

Opis konstruktorja zahtev 1C

Oglejmo si vsak zavihek oblikovalca podrobneje. Izjema je zavihek Builder, ki je tema za drugo razpravo.

Zavihek Tabele in polja

Ta zavihek določa vir podatkov in polja, ki morajo biti prikazana v poročilu. V bistvu so tukaj opisane konstrukcije SELECT.. FROM.

Vir je lahko fizična tabela baze podatkov, tabela virtualnega registra, začasne tabele, ugnezdene poizvedbe itd.

V kontekstnem meniju virtualnih tabel lahko nastavite parametre virtualne tabele:

Zavihek Povezave

Zavihek se uporablja za opis povezav več tabel in ustvarja konstrukcije z besedo POVEZAVA.

Zavihek združevanja

Na tem zavihku vam sistem omogoča združevanje in povzemanje zahtevanih polj rezultata tabele. Opisuje uporabo konstrukcij ZGRUPI PO, VSOTI, NAJMANJ, POVPREČJE, NAJVEČ, KOLIČINA, ŠTEVILO RAZLIČ.

Zavihek Pogoji

Odgovoren za vse, kar pride v besedilu zahteve po konstrukciji WHERE, torej za vse pogoje, ki so postavljeni na prejete podatke.

Zavihek Napredno

Tab Dodatno polna najrazličnejših parametrov, ki so zelo pomembni. Oglejmo si vsako od lastnosti.

Združevanje v skupine Izbiranje zapisov:

  • Najprej N– parameter, ki v poizvedbo vrne samo N zapisov (operator FIRST)
  • Brez dvojnikov– zagotavlja unikatnost prejetih zapisov (DRUGAČNI operater)
  • Dovoljeno– omogoča izbiro samo tistih zapisov, ki vam jih sistem omogoča, da jih izberete ob upoštevanju (DOVOLJENA konstrukcija)

Združevanje v skupine Vrsta zahteve določa, kakšen tip zahteve bo: pridobivanje podatkov, izdelava začasne tabele ali uničenje začasne tabele.

Spodaj je zastava Zakleni prejete podatke za poznejše spreminjanje. Omogoča vam, da omogočite možnost nastavitve zaklepanja podatkov, ki zagotavlja varnost podatkov od trenutka branja do spremembe (relevantno samo za Samodejni način zapore, dizajn ZA SPREMEMBO).

Zavihek Spoji/Vzdevki

Na tem zavihku načrtovalca poizvedb lahko nastavite možnost združevanja različnih tabel in vzdevkov (konstrukcija HOW). Tabele so označene na levi strani. Če nastavite zastavice nasproti tabele, bo uporabljena konstrukcija UNITE, drugače - UNITE ALL (razlike med metodama). Na desni strani je prikazano ujemanje polj v različnih tabelah; če ujemanje ni navedeno, bo poizvedba vrnila NULL.

Zavihek Naročilo

To določa vrstni red, v katerem so vrednosti razvrščene (ORDER BY) - padajoče (DESC) ali naraščajoče (ASC).

Obstaja tudi zanimiva zastava - Samodejno naročilo(v povpraševanju - AVTO NAROČANJE). Sistem 1C privzeto prikazuje podatke v "kaotičnem" vrstnem redu. Če nastavite to zastavico, bo sistem razvrstil podatke po notranjih podatkih.

Zavihek Paket poizvedb

Na zavihku načrtovalnika poizvedb lahko ustvarite nove in ga uporabite tudi kot navigacijo. V besedilu zahteve so paketi ločeni s simbolom “;” (vejica).

Gumb »Poizvedba« v oblikovalcu poizvedb

V spodnjem levem kotu oblikovalca zahtev je gumb Zahtevaj, s katerim si lahko kadarkoli ogledate besedilo zahteve:

V tem oknu lahko prilagodite zahtevo in jo izvedete.


Uporaba konzole Query Console

Konzola za poizvedbe je preprost in priročen način za odpravljanje napak v kompleksnih poizvedbah in hitro pridobivanje informacij. V tem članku bom poskušal opisati, kako uporabljati konzolo Query Console, in zagotoviti povezavo za prenos konzole Query Console.

Oglejmo si to orodje pobližje.

Prenesite poizvedovalno konzolo 1C

Najprej, če želite začeti delati s poizvedovalno konzolo, jo morate od nekje prenesti. Zdravljenja so običajno razdeljena na dve vrsti - kontrolirane oblike in navaden (ali včasih imenovan 8.1 in 8.2/8.3).

Poskušal sem združiti ti dve vrsti v enem tretmaju – v želeni način delovanja, se odpre želeni obrazec (v upravljanem načinu konzola deluje samo v debelem načinu).

Opis poizvedovalne konzole 1C

Začnimo si ogledovati poizvedovalno konzolo z opisom glavne plošče za obdelavo:

V glavi poizvedovalne konzole lahko vidite čas izvajanja zadnje poizvedbe z natančnostjo do milisekunde, kar vam omogoča primerjavo različnih zasnov v smislu zmogljivosti.

Prva skupina gumbov v ukazni vrstici je odgovorna za shranjevanje trenutnih poizvedb v zunanjo datoteko. To je zelo priročno, vedno se lahko vrnete k pisanju zapletene zahteve. Ali pa na primer shranite seznam tipičnih primerov določenih modelov.

Na levi v polju “Zahteva” lahko ustvarite nove zahteve in jih shranite v drevesni strukturi. Druga skupina gumbov je odgovorna za upravljanje seznama zahtev. Z njim lahko ustvarite, kopirate, izbrišete, premaknete zahtevo.

  • Izvediprošnja– enostavna izvedba in rezultati
  • Izvedi paket– omogoča ogled vseh vmesnih poizvedb v paketu poizvedb
  • Ogled začasnih tabel– omogoča ogled rezultatov, ki jih vrnejo začasne poizvedbe v tabeli

Parametri zahteve:

Omogoča nastavitev trenutnih parametrov za zahtevo.

V oknu s parametri poizvedbe je zanimivo naslednje:

  • Gumb Pridobite iz zahteve samodejno najde vse parametre v zahtevi za udobje razvijalca.
  • Zastava Skupni parametri za vse zahteve– ko je nameščen, njegova obdelava ne počisti parametrov pri premikanju od zahteve do zahteve na splošnem seznamu zahtev.

Nastavite parameter s seznamom vrednosti Zelo preprosto je, ko izberete vrednost parametra, kliknite gumb za brisanje vrednosti (križ), sistem vas bo pozval, da izberete vrsto podatkov, kjer morate izbrati "Seznam vrednosti":

Tudi na zgornji plošči je gumb za priklic nastavitev poizvedovalne konzole:

Tukaj lahko določite parametre za samodejno shranjevanje poizvedb in parametre izvajanja poizvedbe.

Besedilo zahteve se vnese v polje za zahtevo konzole. To lahko storite tako, da preprosto vnesete test poizvedbe ali pokličete posebno orodje - oblikovalec poizvedb.

Oblikovalnik poizvedb 1C 8 se pokliče iz kontekstnega menija (desni gumb miške), ko kliknete polje za vnos:

Tudi v tem meniju so takšni uporabne lastnosti, na primer brisanje ali dodajanje prelomov vrstic (»|«) v zahtevo ali pridobivanje kode zahteve v tej priročni obliki:

Zahteva = Nova zahteva;
Request.Text = ”
|IZBERI
| Valute.Povezava
|OD
| Imenik.Valute AS Valute«;
RequestResult = Request.Execute();

V spodnjem polju poizvedovalne konzole je prikazano polje z rezultati poizvedbe, zato je bila ustvarjena ta obdelava:



Prav tako lahko poizvedovalna konzola poleg seznama prikaže podatke v obliki drevesa – za poizvedbe, ki vsebujejo vsote.

Optimizacija poizvedb

Ena najpomembnejših točk pri povečanju produktivnosti 1C podjetja 8.3 je optimizacijazahteve. Ta točka je zelo pomembna tudi pri opravljanje certificiranja. Spodaj bomo govorili o tipični razlogi ne optimalno delovanje poizvedb in optimizacijskih metod.

Izbire v virtualni tabeli z uporabo konstrukcije WHERE

Za podrobnosti virtualne tabele je treba uporabiti filtre samo prek parametrov VT. V nobenem primeru ne smete uporabljati konstrukcije WHERE za izbiro v virtualni tabeli; to je resna napaka z vidika optimizacije. V primeru izbire s pomočjo WHERE bo sistem dejansko prejel VSE zapise in šele nato izbral potrebne.

PRAV:

IZBERI

OD
Register akumulacij. Medsebojni obračuni z udeleženci organizacij. Stanja (
,
Organizacija = &Organizacija
IN Posameznik = &Posameznik) KAKO Medsebojni obračuni z Udeleženci organizacij Stanja

NAROBE:

IZBERI
Medsebojni obračuni z udeleženci organizacij Stanja Znesek Stanje
OD
Register akumulacij Medsebojni obračuni z udeleženci organizacij Stanja (,) KAKO Medsebojni obračuni z udeleženci organizacij Stanja
KJE
Medsebojni obračuni z udeleženci organizacij Stanja Organizacija = & Organizacija
IN medsebojni obračuni z udeleženci organizacij Stanja. Posameznik = &Posameznik

Pridobivanje vrednosti polja kompleksnega tipa s piko

Pri sprejemu podatkov kompleksnega tipa v poizvedbi prek pike sistem z levim spojem poveže natanko toliko tabel, kolikor je tipov možnih v polju kompleksnega tipa.

Na primer, zelo nezaželeno je, da optimizacija dostopa do polja zapisa registra – registrarja. Registrar ima sestavljen tip podatkov, med katerimi so vse možne vrste dokumentov, ki lahko zapisujejo podatke v register.

NAROBE:

IZBERI
Record Set.Recorder.Date,
RecordSet.Quantity
OD
RegisterAccumulations.ProductsOrganizations AS SetRecords

To pomeni, da taka poizvedba dejansko ne bo dostopala do ene tabele, temveč do 22 tabel baze podatkov (ta register ima 21 vrst registratorjev).

PRAV:

IZBERI
IZBIRA
WHEN ProductsOrg.Registrar LINK Document.Sales of Products and Services
THEN EXPRESS(ProductsOrganization.Registrar AS Document.Sales of GoodsServices).Datum
WHEN GoodsOrg.Registrar LINK Document.Receipt of GoodsServices
THEN EXPRESS(GoodsOrg.Registrar AS Document.Receipt of GoodsServices).Datum
KONEC KOT DATUM,
ProductsOrg.Quantity
OD
RegisterAccumulations.ProductsOrganizations AS ProductsOrganization

Ali pa je druga možnost, da dodate takšne podatke k podrobnostim, na primer v našem primeru dodajanje datuma.

PRAV:

IZBERI
IzdelkiOrganizacije.Datum,
IzdelkiOrganizacije.Količina
OD
Register kopičenj Blago organizacij AS Blago organizacij

Podpoizvedbe v združevalnem stanju

Za optimizacijo je uporaba podpoizvedb v pogojih združevanja nesprejemljiva, kar znatno upočasni poizvedbo. V takih primerih je priporočljivo uporabiti VT. Za povezavo morate uporabiti samo metapodatke in objekte VT, ki ste jih predhodno indeksirali po poljih povezave.

NAROBE:

IZBERI …

LEVO PRIDRUŽI (
IZBERI IZ RegisterInformation.Limits
KJE …
ZDRUŽI PO ...
) OD …

PRAV:

IZBERI …
PUT Omejitve
IZ Informacijskega registra.Omejitve
KJE …
ZDRUŽI PO ...
KAZALO PO...;

IZBERI …
IZ Dokumenta Prodaja blaga in storitev
LEFT JOIN Meje
OD …;

Združevanje zapisov z virtualnimi tabelami

Obstajajo situacije, ko pri povezovanju virtualne mize z drugimi sistem ne deluje optimalno. V tem primeru lahko za optimizacijo delovanja poizvedbe poskusite postaviti navidezno tabelo v začasno tabelo, pri čemer ne pozabite indeksirati združenih polj v poizvedbi začasne tabele. To je posledica dejstva, da so VT-ji pogosto vsebovani v več fizičnih tabelah DBMS; posledično se za njihovo izbiro sestavi podpoizvedba in težava se izkaže za podobno prejšnji točki.

Uporaba izbir na podlagi neindeksiranih polj

Ena najpogostejših napak pri pisanju poizvedb je uporaba pogojev na neindeksiranih poljih, kar je v nasprotju pravila za optimizacijo poizvedb. DBMS ne more optimalno izvesti poizvedbe, če poizvedba vključuje izbor v poljih, ki jih ni mogoče indeksirati. Če vzamete začasno tabelo, morate indeksirati tudi povezovalna polja.

Za vsako stanje mora obstajati ustrezen indeks. Ustrezen indeks je tisti, ki izpolnjuje naslednje zahteve:

  1. Indeks vsebuje vsa polja, navedena v pogoju.
  2. Ta polja so na samem začetku kazala.
  3. Te izbire so zaporedne, kar pomeni, da vrednosti, ki niso vključene v pogoj poizvedbe, niso "vkleščene" med njimi.

Če DBMS ne izbere pravilnih indeksov, bo skenirana celotna tabela – to bo imelo zelo negativen vpliv na zmogljivost in lahko povzroči dolgotrajno blokiranje celotnega nabora zapisov.

Uporaba logičnega ALI v pogojih

To je vse, ta članek je zajemal osnovne vidike optimizacije poizvedb, ki bi jih moral poznati vsak strokovnjak 1C.

Zelo uporaben brezplačen video tečaj o razvoju in optimizaciji poizvedb, Toplo priporočam za začetnike in več!

Če je moja publikacija koristna za vas, je ne pozabite dati plus :-)

Tukaj je rubrikator za vse naloge v zbirki(stran s povezavami do niti foruma za vsako nalogo)
http://chistov.spb.ru/forum/16-969-1

No, zdaj pa moj razvoj in zapiski, ki sem jih ustvaril med pripravami.
Z zgoraj omenjenima se bom poskušal čim manj ponavljati zadnji publikacije.

Pa začnimo:


Če ga opravljate na daljavo, bi morali imeti ob koncu izpita na namizju dva predmeta:

1. Končno razkladanje informacijsko bazo(dt datoteka)
2. Pojasnilo

Ne sme biti nič drugega, nobenih vmesnih kopij itd.

Bodite prepričani, da napišete pojasnilo!
V primeru nejasno oblikovane naloge obvezno napišite, da ste izbrali točno takšno in takšno rešitev.
Tudi na ključnih mestih v kodi je bolje pustiti kratke komentarje, brez fanatizma, kjer pa ima izpraševalec morda vprašanja, je bolje napisati.

Toda o tem boste povedali v navodilih, ki jih boste dobili v branje pred izpitom.
Samo bolje je vedeti vnaprej)


Uporaba znaka ampersand v poizvedbah.

Včasih je hitreje tipkati z dodatne tipkovnice kot preklapljati postavitev naprej in nazaj, s čimer prihranite čas
& = Alt+38

*************************************************************************************************
Uporaba TimePoint() v poizvedbah

Pri poizvedbah po akumulacijskih in računovodskih registrih je treba uporabiti ne datum dokumenta kot parameter navidezne tabele (obdobje), temveč parameter Moment, ki je v kodi definiran na naslednji način:

Trenutek = ?(Način prehoda = Način knjiženja dokumenta. Operativno, Nedefinirano, Časovni trenutek());

*************************************************************************************************
Pri generiranju prometa dokumentov po registru je na samem začetku postopka obdelave knjiženja potrebno počistiti promet tekočega dokumenta po registru.

Koda je:

Movement.RegisterName.Write = True; Movements.RegisterName.Clear();

Možno je, da bo med postopkom potrebna analiza zapisov iz tega registra.
Torej, da pri analizi trenutnih zapisov (starih, pred spremembo dokumenta) zagotovo ne bodo vključeni v vzorec, lahko zgornjima dvema vrsticama dodate še eno vrstico:

Movement.RegisterName.Write();

Ali pa pri analizi zapisov izrecno označite mejo, ki ne vključuje časovne točke trenutnega dokumenta.

Toda povsod sem preprosto navedel konstrukcijo teh treh vrstic:

Movement.RegisterName.Write = True; Movements.RegisterName.Clear(); Movement.RegisterName.Write();

*************************************************************************************************
Podatke lahko blokirate na dva načina, izbira med njima je odvisna od uporabljene metode - stare ali nove:

1) Redno nadzorovano blokiranje, stari način obdelave dokumentov (Data Blocking object)

Nastavite, ali se stanja najprej preverijo in nato odpišejo.
V primeru, ko za oblikovanje gibanja potrebujemo nekaj podatkov iz registra.


primer:

V dokumentu - količina, v registru - količina in znesek (strošek)
Torej iz dokumenta poznamo količino blaga - koliko odpišemo, stroškov pa ne.
To lahko izvemo samo iz registra, vendar moramo register zakleniti še pred odčitavanjem stanj, da nihče ne spremeni registra od trenutka prejema stanja do trenutka evidentiranja gibanja.
Torej je v tem primeru uporabljen objekt Data Locking. In ko ga ustvarite, je pravilneje navesti, s kakšnimi dimenzijami blokiramo register (na primer v našem primeru - samo s postavko, navedeno v dokumentu) - tako da ni nepotrebnih ključavnic in lahko drug uporabnik proda drugega postavka.


1. Nastavite zaklepanje z uporabo predmeta Data Lock
2. Preberi ostalo
3. Preverimo možnost odpisa
4. Ustvarjamo gibanja, na primer odpis blaga
5. Po knjižbi dokumenta se blokada samodejno odstrani (blokada velja kot del transakcije knjiženja in jo sistem samodejno odstrani). To pomeni, da predmeta ni treba posebej odkleniti.

2) Nova metodologija obdelave dokumentov (z uporabo lastnosti LockForChange = True)

Uporablja se, če za oblikovanje gibanja ne potrebujemo podatkov iz registrov, ali smo pri odpisu šli v minus, pa lahko preverimo, če po evidentiranju pogledamo stanja v registru in vidimo, da so negativna. . V tem primeru bomo razumeli, da smo odpisali preveč in bomo preklicali operacijo odpisa.

primer:
Oglejmo si operacijo prodaje izdelka.
V dokumentu - količina, v registru - samo količina
Iz dokumenta torej poznamo količino blaga.
S količino, navedeno v dokumentu, oblikujemo gibanja in jih evidentiramo. Nato preberemo register, pogledamo stanja in analiziramo, ali so negativna. Če obstaja, prikažite napako in nastavite Refusal = True.

Se pravi, zaporedje je takšno:
1. Za premikanje po registru nastavite lastnost BlockForChange = True
2. Ustvarjamo premike - odpis blaga
3. Zabeležite gibe
4. Preberite register in se prepričajte, da ni negativnih stanj. Če je, potem so presežek odpisali, če ne, potem je vse v redu.

Torej v tem primeru ni treba navesti, po katerih dimenzijah moramo blokirati register.
Lastnost BlockForChange preprosto nastavimo na True, preden posnamemo naše premike, oblikujemo premike in posnamemo.
Sistem bo sam blokiral register v času snemanja glede na potrebne meritve, potem ko je analiziral, kaj smo zabeležili.
Ko bo končano, bo blokada odstranjena.

Ta možnost (druga) je enostavnejša, imenuje se "nova metodologija za obdelavo dokumentov" in 1C priporoča njeno uporabo, če je to mogoče, in odšteje točke, če je uporabljena prva možnost, v nekaterih primerih pa je preprosto ni mogoče uporabiti in prva možnost z uporabljen je objekt Data Locking (glejte zgornji primer).

Opozarjam tudi, da je treba ne glede na izbrano metodo gibe pred delom z njimi očistiti (glej prejšnji nasvet)

*************************************************************************************************
Blokiranje podatkov (način blokiranja št. 1 iz zgornjega opisa)

Kontrolirano zaklepanje je potrebno, kjer se podatki berejo in na podlagi teh podatkov izvajajo premiki
Najhitrejši način za pridobitev upravljane kode za zaklepanje je, da vnesete »Data Locking«, pokličete Syntax Assistant in preprosto kopirate primer kode od tam. Nato ga preprosto spremenite v ime svojega registra in dimenzije.

Videti je nekako takole:

Zaklepanje = NewDataLock; Element zaklepanja = Locking.Add("Register akumulacije.BlagoVSkladiščih"); LockElement.Mode = DataLockMode.Exclusive; BlockingElement.DataSource = PM; Zaklepni element.UseFromDataSource("Nomenklatura", "Nomenklatura"); Zakleni.Zakleni();

*************************************************************************************************
Tabelarni del dokumentov je bolje imenovati preprosto "TC"

V 99% dokumentov je samo en tabelarični del. Tako enotno ime tabelarnih delov Pomagal vam bo prihraniti veliko časa, ker:
1) Zelo kratko - pišite hitro
2) Enako za vse dokumente, pri pisanju kode se vam ni treba spomniti, kako se imenuje

*************************************************************************************************
Pred pridobivanjem ali nalaganjem v tehnično specifikacijo je treba preveriti, ali je rezultat poizvedbe prazen.

Na splošno sem vzorčenje uporabljal pri vseh nalogah.

Vzorčenje je bolj optimalno za sistem glede zmogljivosti, saj je "izostren" samo za branje podatkov (za razliko od TK).

V vsakem primeru pa je pred metodo Select() bolje preveriti, ali je rezultat poizvedbe prazen, kar bo dodatno zmanjšalo obremenitev sistema.

Rezultat = Query.Run(); Če ni Result.Empty(), potem izberite = Result.Select(TravelQueryResult.ByGrouping); ... EndIf;

In v primeru, da moramo iz zahteve dobiti samo eno vrednost
(na primer samo način odpisa v skladu z računovodsko usmeritvijo, določeno za letos):

Rezultat = Query.Run(); Če ni Result.Empty(), potem izberite = Result.Select(); Izbira.Naprej(); Metoda odpisa stroškov = Sample.Cost Write-Off Method; endIf;

*************************************************************************************************
Dokument "Operacija" za računovodsko opravilo

Za računovodska opravila je potrebno izdelati Operativni dokument.

Knjiženje mu popolnoma onemogočimo (v lastnostih »Knjiženje = Zavrni«), označimo, da dela premike v knjigovodskem registru in premike povlečemo na obrazec.

*************************************************************************************************
Hitra obdelava dokumentov:

Mora biti vključeno:
V operativnem in računovodskem. mora biti omogočeno obračunavanje dokumentov (razen za dokument »Operacija«, glej spodaj).

Mora biti ugasnjen:
pri računskih nalogah ni smiselna za plačilni list.

Za dokument "Operacija" naj bo knjiženje popolnoma onemogočeno (v lastnostih dokumenta "Knjiženje = Prepoved"),
ker piše preprosto zapisuje podatke neposredno v register pri pisanju.

*************************************************************************************************
Pogoj v zahtevi obrazca "Bodisi določena nomenklatura ali katera koli, če ni navedena"

Pri poizvedbah se pojavi naslednja naloga: na primer, izbrati morate dokumente z določeno nomenklaturo ali vse dokumente, če nomenklatura ni podana.
Rešuje se z naslednjim pogojem v sami zahtevi:

Nomenklatura = &Nomenklatura ALI &Nomenklatura = Vrednost (Imenik.Nomenklatura.Prazna povezava)

Vendar bi bilo bolj optimalno in pravilno preoblikovati ta pogoj (hvala yukon):


Request.Text = Request.Text + "WHERE Nomenklatura = &Nomenklatura";

endIf;

S prihodom poizvedovalnega objektnega modela v različici 8.3.5 bo mogoče varneje dodati pogoj:

Če je ValueFilled(nomenklatura) Potem
Query1.Selection.Add("Postavka = &nomenklatura");
Request.SetParameter("Nomenklatura", Nomenklatura);
endIf;

*************************************************************************************************
Združevanje tabel v poizvedbah:

Število skupnih zapisov ni odvisno od tega, ali je polje združene tabele prikazano, odvisno je samo od konfiguriranih odnosov.
To pomeni, da polje priložene tabele morda ne bo prikazano.

Če želite priložiti tabelo brez kakršnih koli pogojev, potem na zavihku pogoji preprosto napišite pogoj “TRUE”.
V tem primeru bo tabela natančno spojena.

*************************************************************************************************
Uporaba načrta tipov značilnosti (PVC):

1. Uporaba kot mehanizem za opisovanje značilnosti predmetov.

1.1. Izdelujemo PVC. To bodo vrste značilnosti (na primer barva, velikost, največja hitrost itd.). V nastavitvah izberite vse možne tipe karakterističnih vrednosti in po potrebi izdelajte objekt iz točke 1.2 ter ga tudi navedite v nastavitvah.

1.2. Za dodatne vrednosti PVC ustvarimo podrejeni imenik AdditionalValues ​​​​of Characteristics (ali preprosto Values ​​​​of Characteristics).
Shranil bo značilnosti, če niso v obstoječih imenikih. Morda ga ne bomo ustvarili, če so vse lastnosti, ki jih potrebujemo, v obstoječih imenikih ali pa so te vrednosti lahko predstavljene z osnovnimi tipi podatkov. V nastavitvah PVC navedemo, da bo ta imenik uporabljen za dodatne namene. značilnosti vrednosti.

1.3. Ustvarimo informacijski register, ki pravzaprav povezuje tri objekte:
- Objekt, na katerega povežemo mehanizem značilnosti
- VrstaKarakteristike (tip PVC)
- Vrednost značilnosti (tip - značilnost, to je nov tip, ki se je pojavil v sistemu po nastanku PVC
in opis vseh možnih tipov podatkov, ki jih lahko sprejme značilna vrednost).
V informacijskem registru navedemo, da je Lastnik Tip Karakteristike za Vrednost Karakteristike (povezava na izbirni parameter), kot tudi tipsko povezavo za Vrednost Karakteristike, spet iz Tipa Karakteristike.

Druga značilnost je, da lahko za vsako izdelano vrsto karakteristike določite vrsto vrednosti značilnosti, če ne potrebujete vseh možnih tipov za opis vrednosti te lastnosti.

2. Uporaba PVC za ustvarjanje mehanizma subconto za računovodski register .

2.1. Izdelujemo PVC TypesSubconto.

2.2. Ustvarimo podrejeni imenik ValuesSubConto (kot pri karakteristikah bo vseboval vrednosti podkonto, če jih v drugih imenikih ni).

2.3. Komunikacija poteka s pomočjo kontnega načrta.

*************************************************************************************************
Viri računovodskega registra:

Znesek - bilanca stanja,
Količina - zunajbilančna in povezana z računovodsko značilnostjo Količinska

*************************************************************************************************
Tabele virtualnega računovodskega registra:

Promet: promet posameznega računa
TurnoverDtKt: promet med katerima koli dvema računoma, to je vse enake transakcije v obdobju.

*************************************************************************************************
Valutno računovodstvo na računovodskih registrih - kako izvesti:

V kontnem načrtu izdelamo računovodski atribut »valuta«.
V računovodskem registru dodatno oblikujemo:
- Valutna dimenzija (prepoved praznih vrednosti, zunajbilančna evidenca, računovodski atribut - valuta)
- vir CurrencyAmount (zunajbilančni, računovodski atribut - valuta, shranil bo znesek v valuti, to je na primer 100 USD)
Vse.

Tako je struktura registra:

Mere:
- Valuta
Viri
- Količina
- Znesek (znesek v rubljih)
- CurrencyAmount (znesek v valuti)

Tako je valutno računovodstvo le izboljšava običajnega računovodstva v Republiki Belorusiji; ne spremeni bistva, na primer, vira Znesek
(tam je kot običajno znesek v rubljih, ne glede na to, ali je račun v tuji valuti ali ne).
In če je za račun izklopljena funkcija Valutno računovodstvo, potem je to običajna struktura Republike Belorusije (viri - samo količina in znesek).

*************************************************************************************************
Pri nastavljanju parametrov virtualne tabele za pridobitev rezine slednje postavljamo pogoje na dimenzije in ne na vire.

Slednjega sicer ne bomo dobili rezine, ampak zadnji vnos z navedeno vrednostjo vira – morda ni zadnji v naboru dimenzij

*************************************************************************************************
Pomen vira in podrobnosti v računskem registru

V računskih registrih ustvarjanje vira omogoča njegov sprejem pri izračunu osnove s pomočjo tega registra.
In tudi sorazmerno z danim obdobjem se bo vrednost vira preračunala (če bazno obdobje ne sovpada s periodičnostjo registra).

In vrednost atributa je na voljo samo v resnični tabeli registra izračuna, ni na voljo v virtualnih tabelah.

*************************************************************************************************
Potrditveno polje "Osnovno" v lastnostih dimenzije računskega registra
Pomeni, da bo ta meritev uporabljena za pridobitev osnove v prihodnosti in se uporablja za dodatno indeksiranje vrednosti za to polje.

*************************************************************************************************
Razčlenitev obdobja veljavnosti dopusta po mesecih pri evidentiranju sklopov vpisov v register,
če je dopust naveden v dokumentu v eni vrstici za več mesecev hkrati v eni vrstici:

Začetni datum trenutnega meseca = začetek meseca (TexLineMainAccruals.ActionPeriodStart); CurrentMonthEndDate = EndMonth(TexLineMainAccruals.ActionPeriodStart); CurrentMonth = Datum; WhileDateStartCurrentMonth<= НачалоМесяца(ТекСтрокаОсновныеНачисления.ПериодДействияКонец) Цикл Движение = Движения.ОсновныеНачисления.Добавить(); Движение.Сторно = Ложь; Движение.ВидРасчета = ТекСтрокаОсновныеНачисления.ВидРасчета; Движение.ПериодДействияНачало = Макс(ДатаНачалаТекМесяца, ТекСтрокаОсновныеНачисления.ПериодДействияНачало); Движение.ПериодДействияКонец = КонецДня(Мин(ДатаОкончанияТекМесяца, ТекСтрокаОсновныеНачисления.ПериодДействияКонец)); Движение.ПериодРегистрации = Дата; Движение.Сотрудник = ТекСтрокаОсновныеНачисления.Сотрудник; Движение.Подразделение = ТекСтрокаОсновныеНачисления.Подразделение; Движение.Сумма = 0; Движение.КоличествоДней = 0; Движение.График = ТекСтрокаОсновныеНачисления.График; Движение.Параметр = ТекСтрокаОсновныеНачисления.Параметр; Движение.БазовыйПериодНачало = НачалоМесяца(ДобавитьМесяц(Дата, -3)); Движение.БазовыйПериодКонец = КонецДня(КонецМесяца(ДобавитьМесяц(Дата, -1))); ДатаНачалаТекМесяца = НачалоМесяца(ДобавитьМесяц(ДатаНачалаТекМесяца, 1)); ДатаОкончанияТекМесяца = КонецМесяца(ДатаНачалаТекМесяца); КонецЦикла; КонецЕсли;

*************************************************************************************************
Izdelava gantograma:

Na obrazec postavimo element tipa “Gantogram”, ga poimenujemo DG, nato ustvarimo ukaz “Generate” in v modul obrazca zapišemo naslednje:

Postopek &OnClient Generate(Command) GenerateOnServer(); Konec postopka &Na strežniku Postopek GenerateOn Server() DG.Clear(); DG.Update = False; Zahteva = Nova zahteva("IZBERI |BasicAccrualsActualActionPeriod.Employee, |BasicAccrualsActualActionPeriod.CalculationType, |BasicAccrualsActualActionPeriod.ActionPeriodStart AS ActionPeriodStart, |BasicAccrualsActualActionPeriod.Period ActionsEnd AS PeriodActionsE nd |FROM |Caculation Register.BasicAccruals.ActualPeriodActions AS BasicAccrualsActualPeriodActions |WHERE |BasicAccrualsActualPeriodActions.PeriodActions BETWEEN &StartDate IN &Končni datum "); Query.SetParameter("ZačetniDatum", Period.ZačetniDatum); Request.SetParameter("EndDate", Period.EndDate); Izberite = Query.Run().Select(); Medtem ko Selection.Next() Loop Point = DG.SetPoint(Selection.Employee); Serija = DG.SetSeries(Selection.CalculationType); Vrednost = DG.GetValue(točka, serija); Interval = Value.Add(); Interval.Start = Sample.PeriodActionStart; Interval.End = Sample.ActionPeriodEnd; EndCycle; DG.Update = True; Konec postopka

Pravzaprav nam je tukaj pomembna samo koda v zanki, ostale stvari so pomožne, podal sem samo celotno izvedbo te podnaloge.
V povpraševanju nam je pomembno, da obstaja zaposleni, vrsta plačila, datum začetka in datum konca obdobja.
Koda je pravzaprav zelo preprosta, lahko si jo je zapomniti, ne skrbite, če se zdi okorna

*************************************************************************************************
Obdelava vnosov »storniranja« v računskih nalogah:

V postopku obdelave transakcij (modul objekt) oblikujemo vsa gibanja, nato pa če so zapisi v drugih obdobjih, jih dobimo takole
(sistem jih samodejno generira – pomaga nam):

Dodatni zapisi = Movements.MainAccruals.GetAddition(); // Ni potrebe po snemanju premikov, da bi dobili dodatek

Za vsako tehnično vrstico iz cikla dodajanja zapisov
Evidenca = Premiki.Glavne Prispevke.Dodaj();
FillPropertyValues(Record, TechString);
Record.RegistrationPeriod = TechString.RegistrationPeriodReversal;
Record.ActionPeriodStart = TechString.ActionPeriodStartReverse;
Record.ActionPeriodEnd = TechString.ActionPeriodEndReversal;
Konec cikla

In pri izračunu zapisov vstavite preverjanja:

Če TechMotion.Reversal Potem
CurrentMovement.Sum = - CurrentMovement.Amount;
endIf;

*************************************************************************************************
Kako v računskih nalogah ugotoviti, kaj sodi v glavne časovne razmejitve in kaj v dodatne časovne razmejitve.

A to ni vedno 100% jasno, obstajajo tudi bolj zapleteni primeri, čeprav jih je kar nekaj
(na primer bonus, ki je odvisen od števila delovnih dni v mesecu - to je ON).

Osnovni stroški:
Če je vrsta izračuna odvisna od urnika (kar pomeni register informacij s koledarskimi datumi), potem se nanaša na glavne stroške.

Primer OH:
- Plača
- Nekaj, kar se izračuna iz števila delovnih dni (in za to morate uporabiti urnik): bodisi v obdobju veljavnosti (kot plača) ali v osnovnem obdobju

Dodatni stroški:
Kaj se upošteva bodisi od obračunanega zneska bodisi od DELOVANEGA časa (in ne od norme!) Ali pa sploh ni odvisno - to je dodatno. časovne razmejitve.

Se pravi: časovne razmejitve, za izračun katerih se uporablja časovni standard (lahko tudi dejstvo) so OH, za katere pa niso potrebni dejanski podatki ali nič, pa DN.

Ali z drugimi besedami:

Če VR uporablja časovni standard, mora biti za VR vključeno obdobje veljavnosti.

*************************************************************************************************
Dodajte možnost odpiranja vgrajenega razdelka pomoči "Delo z referenčnimi knjigami" v obliki seznama imenika "Nomenklatura".

Zaženite ukaz na obrazcu:

&OnClient
Pomoč za postopek (ukaz)
OpenHelp("v8help://1cv8/EnterprWorkingWithCatalogs");
Konec postopka

Črto odseka definiramo na naslednji način:
Pojdite na informacije o pomoči konfiguracijskega objekta (v konfiguratorju), napišite besedo, jo izberite, pojdite v meni Elementi/Povezava in izberite želeni razdelek pomoči 1C, po katerem se povezava samodejno vstavi. Videti je zapleteno, a v praksi je enostavno.

*************************************************************************************************
Izvedba interakcije med obrazci, na primer izbor:

1. Iz trenutnega obrazca odprite želenega z metodo »OpenForm()« in posredujte strukturo s parametri kot drugi parameter (če je potrebno). Tretji parameter lahko posreduje povezavo do tega obrazca - ThisForm.

2. V odprtem obrazcu lahko v upravljalniku »When CreatedOnServer()« zajamemo parametre, posredovane v koraku 1 prek »Parameters.[ParameterName]«. Obrazec, ki je sprožil odpiranje tega obrazca, bo dostopen preko identifikatorja “Lastnik” (če je bil seveda naveden v koraku 1).

In kar je najpomembneje, na voljo bodo izvozne funkcije obrazca lastnika. To pomeni, da lahko pokličemo izvozno funkcijo izvornega obrazca in tja posredujemo nekaj kot parameter za obdelavo izbire. In ta funkcija bo že izpolnila, kar je potrebno v izvirnem obrazcu. Obstaja le eno opozorilo - tabele vrednosti ne morete posredovati med postopki odjemalca, lahko pa jo postavimo v začasno shrambo in preprosto posredujemo naslov VX ter jo nato ekstrahiramo iz VX.

*************************************************************************************************
Življenjski cikel parametrov obrazca

Vsi parametri, preneseni v obrazec ob njegovem odpiranju, so vidni samo v postopku “When CreateOnServer”.
Ko so ustvarjeni, so vsi parametri uničeni in niso več na voljo na obrazcu.
Izjema so parametri, ki so deklarirani v urejevalniku obrazcev z atributom »Ključni parameter«.
Določajo edinstvenost oblike.
Ta parameter bo obstajal, dokler obstaja sam obrazec.

*************************************************************************************************
Uporaba vmesnika Taxi

Med razvojem lahko v konfiguracijskih lastnostih nastavite običajni upravljani vmesnik 8.2 - zaradi tega je vse opazno bolj kompaktno in znano.
To še posebej velja, če najamete na daljavo - ločljivost zaslona je zelo majhna in z vmesnikom "taksi" ni mogoče storiti ničesar.
Ko končate, ne pozabite znova vnesti "Taxi"!V nasprotnem primeru bo izpraševalec odštel točke!

*************************************************************************************************

PS: E Obstajajo ločene standardne podnaloge, ki se uporabljajo pri vseh nalogah, in prav te morate znati rešiti (na primer odpis po serijah, uporaba PVC (no, to je res redko) in drugo). In pri vseh nalogah se preprosto ponavljajo (nekje so nekatere podnaloge, drugje, le v različnih kombinacijah). Poleg tega že dolgo obljubljajo, da bodo izdali novo zbirko (če je še niso), v kateri naj bi bilo veliko več težav, torej nima smisla učiti rešitev posameznih težav, smiselno se je naučiti, kako rešite posamezne standardne podnaloge, potem boste rešili katerikoli problem.

PSS: Kolegi, če ima kdo še kakšno koristno informacijo o pripravi na izpit in opravljanje le-tega, naj napiše v komentarje in članek bomo dodali.

Akumulacijski registri v sistemu 1C:Enterprise so razdeljeni na dve vrsti: akumulacijski registri ostanki in akumulacijskih registrov vrtljajev na minuto.

Vrsto registra izberemo ob ustvarjanju v konfiguratorju

Kot že ime pove, so eni namenjeni pridobivanju stanja na določen datum, drugi pa pridobivanju prometa za izbrano obdobje. Platforma 1C:Enterprise generira drugačen nabor virtualnih tabel glede na vrsto registra kopičenja. V tem članku si bomo ogledali delo z virtualnimi tabelami akumulacijskih registrov. Da bi to naredili, bomo ustvarili register za zbiranje stanj - Izdelki ostanejo in register kopičenja vrtljajev - Promet izdelkov.

Zdaj pa poglejmo, katere virtualne tabele ponuja platforma za vsakega od teh registrov.

Register kopičenja vrtljajev

Zaradi jasnosti odprimo in poglejmo, katere tabele so na voljo za register Promet izdelkov. To je tabela samega registra - Promet izdelkov, ki fizično obstaja v bazi podatkov, in ena virtualna tabela - IzdelkiPromet.Promet

S standardno tabelo je vse jasno. Oglejmo si virtualnega pobližje.

Virtualna tabela Promet

Ta tabela vam omogoča, da dobite promet virov v smislu dimenzij. V našem primeru imamo dve dimenziji: Zaloga in Izdelek. In en vir - Količina

Naj naš register vsebuje naslednje vnose

Vrnimo se k oblikovalcu poizvedb in začnimo s preprostim izbiranjem iz tabele IzdelkiPromet.Promet vsa področja

V skladu s tem bo zahteva videti takole:

SELECT ProductsTurnoverTurnover.Warehouse, ProductsTurnoverTurnover.Product, ProductsTurnoverTurnover.QuantityTurnover FROM RegisterAccumulation.ProductsTurnover.Turnover(,) AS ProductsTurnoverTurnover

Rezultat poizvedbe je videti takole:

To pomeni, da smo ves čas prejeli promet v smislu blaga in skladišč. Predpostavimo, da nas skladišča ne zanimajo in želimo imeti promet samo z blagom.

Da bi to naredili, dimenzijo izključimo iz zahteve Zaloga

SELECT ProductsTurnoverTurnover.Product, ProductTurnoverTurnover.QuantityTurnover FROM RegisterAccumulation.ProductsTurnover.Turnover(,) AS ProductsTurnoverTurnover

in posledično nam bosta ostali samo še dve vrstici

Toda praviloma ni treba pridobiti prometa za ves obstoj registra. V bistvu so potrebni za določeno obdobje: mesec, četrtletje, leto itd. Poleg tega so običajno potrebne izbire po dimenzijah (Produkt, Skladišče). To se doseže z uporabo parametri virtualne tabele. Priročno je izpolniti parametre iz konstruktorja. Z gumbom Možnosti virtualne mize Odpre se pogovorno okno, v katerega vnesemo vse, kar potrebujemo:

Po tem bo naša prvotna zahteva dobila naslednjo obliko

SELECT BlagoPrometPromet.Skladišče, BlagoPrometPromet.Izdelek, BlagoPrometPromet.KoličinaPromet FROM RegisterAkumulacija.BlagoPromet.Promet(&Začetek obdobja, &Konec obdobja, Skladišče = &Skladišče) AS BlagoPrometPromet

Kot lahko vidimo, je razlika v tem, da so v oklepaju za imenom virtualne tabele parametri, ki jih je treba izpolniti pred izvedbo poizvedbe.

Tisti, ki šele začenjajo delati z virtualnimi tabelami, so pogosto v skušnjavi, da namesto s parametri nastavijo izbiro na običajen način:

FROM RegisterAccumulations.ProductsTurnover.Turnover(,) HOW ProductsTurnoverTurnover WHERE ProductsTurnoverTurnover.Warehouse = &Warehouse

Pri izpolnjevanju parametrov smo spregledali Periodičnost. Odprimo seznam in izberimo med množico možnih možnosti mesec. Vse druge parametre bomo odstranili, da ne bi prišlo do zmede.

Po tem opazimo, da se v poljih tabele pojavi polje Pika.

Če ga dodamo v izbrana polja, dobimo naslednje besedilo zahteve:

SELECT ProductsTurnoverTurnover.Period, ProductsTurnoverTurnover.Warehouse, ProductsTurnoverTurnover.Product, ProductsTurnoverTurnover.QuantityTurnover FROM RegisterAccumulation.ProductsTurnover.Turnover(, Month,) AS ProductsTurnoverTurnover

Zahtevo izpolnimo:

Tako lahko znotraj izbranega časovnega intervala razdelimo vrtljaje na manjše intervale v skladu z izbrano frekvenco.

Register akumulacije stanja

Tako kot pri obratnem registru, poglejmo v oblikovalcu poizvedbe, katere virtualne tabele so na voljo za register akumulacije stanja

Kot lahko vidite, so za register akumulacije stanja na voljo tri virtualne tabele: Revolucije, Ostanki, Ostanki in preobrati. Razmislimo o vsakem od njih posebej.

Virtualna tabela Promet

Kljub temu, da je vrsta registra Ostanki, lahko kljub temu prejemamo promet od tega. Poleg tega imamo tukaj dva dodatna vira: Prihajam in Poraba

Naj vas spomnim, da se pri vpisu v bilančni register navede vrsta akumulacijskega gibanja (prihodki ali odhodki), pri prometnem registru pa vrsta gibanja ni navedena. Zato imamo tukaj dodaten bonus v obliki priložnosti, da prejmete ne le skupni promet za obdobje, temveč tudi prihodke in odhodke ločeno. Seveda, če metapodatki vsebujejo obratni register s podobnim nizom meritev, potem je bolje, da ga uporabite za pridobivanje prometa. Na splošno je delo s to virtualno tabelo podobno delu z virtualno tabelo Revolucije prenosni register, o katerem smo govorili zgoraj.

Stanja virtualne tabele

Ta tabela se uporablja za pridobivanje bilanc virov po dimenzijah. V parametrih tabele lahko določimo datum, za katerega prejmemo stanja in nastavimo izbire:

Poglejmo majhen primer. Imamo naslednje vnose v register:

Izberimo vsa razpoložljiva polja in za datum prejema stanja nastavimo konec junija. Ne bomo izbirali na podlagi mer. Potem bo besedilo zahteve videti takole:

SELECT ProductsRemainingsRemainings.Warehouse, ProductsRemainingsRemainings.Product, ProductsRemainingsRemainings.QuantityRemaining FROM RegisterAccumulations.ProductsRemainings.Remainings(&DateRemainings,) AS ProductsRemainingRemainings

In po izvedbi dobimo ta rezultat

Virtualna miza Stanja in promet

Ta tabela združuje obe prej obravnavani in vam omogoča, da pridobite promet za izbrano časovno obdobje ter stanja na začetku in koncu obdobja. Nastavite lahko tudi izbiro.

Uporaba te tabele je lahko upravičena, kadar morate v enem poročilu hkrati pridobiti promet in stanja na začetku in koncu obdobja. V drugih primerih ne smete zlorabljati njegove uporabe.