Buvimas grupėje pagal 1C 8 hierarchiją. Operatorius „hierarchijoje“ užklausoje. Visų elemento tėvų gavimas

Ildarovičius 6489 16.11.12 18:24 Šiuo metu į temą

() Vladimiras! Džiaugiuosi, kad atkreipėte dėmesį į straipsnį, ypač todėl, kad buvote vienas pirmųjų, pamatęs (ir įvertinęs) šią techniką prieš dvejus metus vykusioje diskusijoje „Realu parašyti sudėtingą užklausą“. Aš pats nesugalvojau įdomaus klausimo, bet pamačiau jį forume. Klausimo autorius – Stanislavas Šeptalovas. Kitas - 2012-10-24 tas pats (tik pastebėjau, nes slapyvardis kitoks) forumo dalyvis uždavė panašų klausimą, bet taikydamas hierarchiją. Pasirodo, PRAKTINIS klausimas išspręstas. Be to, vadovaudamasis „moksliniu“ požiūriu, nagrinėjau praktines problemas, kuriose ši technika galėtų būti pritaikyta. Rastos dar 7 problemos. 5 – šiame straipsnyje. Tarp jų yra problema dėl ciklų specifikacijose, kurią anksčiau pažadėjau išspręsti Ish_2 su viena užklausa. Manau, Ish_2 sugebės jus įtikinti šios užduoties aktualumu – jis tam skyrė daug laiko. Sprendimas trumpas – kelių eilučių, todėl itin aiškus, suformuluotas neprocedūriniu stiliumi, per reikalavimą rezultatui. Na, o straipsniuose ir forume buvo susidurta su kitomis problemomis, joms buvo pasiūlyta sudėtingesnių sprendimų. Taigi palaukite, kol pamatysime, kaip dažnai tai bus taikoma. Būtent tokio atsiliepimo ir tikiuosi – iš tų, kurie bandys.
Beje, tai, kad ši matematikos šaka nėra toli nuo praktikos ir reikalinga buhalteriams, liudija BP2 bendras modulis „Išlaidų koregavimas“, su kuriuo šiuo metu keikiasi (nestabilus standartinės užklausos veikimas). Ten kalbame apie elementų judėjimo grafiko ciklų nutraukimą ir apimančio medžio sukūrimą.
Dabar apie duomenų bazės struktūrą „konkrečiai užduočiai“. Buvo užduotas klausimas apie užduoties įgyvendinimą 1C, todėl užduotis buvo išspręsta 1C. Jei jūsų paklaustų „kokiu autobusu galima nuvykti į biblioteką“, ir jūs atsakytumėte, kad geriau skristi dirižabliu, tada jūsų tiesiog nesuprastų (galbūt išskyrus tuos, kurie įstrigo Maskvos kamštyje). ). Iš pradžių metodas veikė visiškai kita kalba.
Apskritai aš negalėsiu jūsų įtikinti, jei manote, kad 1C platformos architektūra nėra gera. Galiu pasakyti tik savo nuomone. Duomenų bazės schemos nuo nulio kūrimas konkrečiai užduočiai yra brangus. Jei lyginsime su statyba: 1C yra skydiniai aukštybiniai pastatai - pigus būstas - masinio automatizavimo priemonė - ankštomis sąlygomis, bet nieko blogo. Atskiros organizacijos gali pasamdyti Normaną Fosterį, kad tiksliai įgyvendintų savo reikalavimus. Likusieji turi naudoti pigius masinės gamybos projektus – reliacines DBVS su standžiu objekto modeliu. Be to, esu susipažinęs su liūdna patirtimi naudojant „Cashe“ keliuose projektuose. Kūrėjo akimis žiūrint, viskas neatrodo taip rožiškai, kaip teoriškai. 1C objekto modelis atlaiko laiko išbandymą – „užkurtos ir apgyvendintos didžiulės teritorijos“. Be to, jis vystosi. Pastaruoju metu atsirado išorinių duomenų šaltinių technologija. Ir jei kuriai nors užduočiai reikia didesnio reaktyvumo (pavyzdžiui, atsiskaitymo sistemoms), dabar galite sklandžiai sujungti 1C su kita DBVS. Pavyzdžiui, taip keičiamės su importuota ERP.
Bet vis tiek nenorėčiau nukreipti pokalbio nuo pagrindinės temos – siūlomų technikų darbo detaliose PRAKTINĖSE užduotyse.

Kas yra 1C katalogas ir kodėl jis reikalingas? Kataloge saugoma sąlyginai nuolatinė informacija, t.y. informacija, kuri ilgą laiką išlieka beveik nepakitusi. Pavyzdžiui, kataloge „Nomenklatūra“ yra parduotų arba pagamintų prekių sąrašas. Be to, kataloge gali būti daug ypatybių, apibūdinančių katalogo elementą.

Jei palyginimui imtume žmogaus lytį, tai sąrašas yra ribotas ir nekeičiamas, todėl jam labiau tinka surašymas.

Sukūrę naują katalogą, pamatysime tokį paveikslėlį.

Pažvelkime į visas jo žymes.

Pagrindinis

Čia nurodomas pavadinimas (identifikatorius duomenų bazėje) ir sinonimas (katalogo vartotojo vardas). Neprivalomas komentaras yra tas, kuris gali paaiškinti katalogo paskirtį arba aprašyti jo funkcijas.

Hierarchija

Šiame skirtuke galite konfigūruoti katalogo elementų įdėjimo gylį. Naudojant šį nustatymą patogu atskirti ir detalizuoti elementus pagal kai kuriuos kriterijus. Pavyzdžiui, prekės „Spintelės“ yra vienoje grupėje, o prekės „Staleliai“ – kitoje. Pagal numatytuosius nustatymus, kai sukurtas, katalogas pateikiamas elementų sąrašas. Jei pažymėsite žymės langelį Hierarchinis katalogas, kiekvienas elementas gali būti pavaldus kitam elementui (grupei). Toliau pateikiamos šios žymės tinkinimo ir ekrano keitimo pasirinktiniu režimu parinktys.

Hierarchijos tipas:

Grupių ir elementų hierarchija

Naudojant šį nustatymą, elementus galima sudėti tik į grupes (aplankus).

Čia, kaip matote, visi elementai ir grupės turi tas pačias piktogramas ir bet kurį elementą galima įdėti.

Padėkite grupes viršuje

Pažymėjus šį žymimąjį laukelį, grupės visada bus viršuje, kitu atveju jos bus išdėstytos rūšiavimo tvarka, pavyzdžiui, taip:

Hierarchijos lygių skaičiaus ribojimas

Jei žymimasis laukelis čia nepažymėtas, įdėjimas yra neribotas.

Jei žymimasis laukelis pažymėtas, žemiau galite nurodyti lygių skaičių.

Savininkai

Ant žymės savininkai gali būti nurodyti kiti katalogai, kuriems šis yra pavaldus. Pavaldžių katalogų santykių diagrama yra panaši į hierarchinio katalogo santykių diagramą, tik čia kitas katalogas veikia kaip pirminis ir vadinamas savininku. Įprastose konfigūracijose geras pavyzdys yra katalogo „Sutartys“ pajungimas katalogui „Sąlygų šalys“, nes Negali būti susitarimo, kuris nepriklausytų jokiai sandorio šaliai.

Lauke „Katalogų savininkų sąrašas“ nurodomas katalogų, kuriems priklauso šio katalogo elementai, sąrašas.

Žemiau laukelyje „Pavaldumo naudojimas“ nurodoma, kam bus pavaldūs šio katalogo elementai.

Kaip programiškai sužinoti, ar katalogas yra hierarchinis, ar ne

Norėdami tai padaryti, turite kreiptis į metaduomenis

Tai HierarchicalDirectory = Metadata.Directories.Counterparties.Hierarchical;

Tęsinys...

1C katalogai yra specializuotas metaduomenų medžio objektas, skirtas statinei informacinei informacijai saugoti. Pavyzdžiui, įprastose konfigūracijose galite matyti šiuos rodinius: , Nomenklatūra, Darbuotojai, Ilgalaikis turtas ir kt. Informacija kataloguose, kaip taisyklė, dažnai nesikeičia. Katalogai vėliau naudojami beveik visuose apskaitos objektuose kaip apskaitos skyrius arba informacinė informacija.

Toliau apžvelgsime katalogo nustatymą ir projektavimą iš konfigūratoriaus, kaip pavyzdį naudodami katalogą „Nomenklatūra“.

Pagrindinis skirtukas

Skirtuke „Pagrindinis“ nurodomas pavadinimas, sinonimas, objekto vaizdavimas ir tikslo aprašymas.

Skirtukas „Katalogo hierarchija“.

Čia nustatoma katalogo hierarchija.

1C 8.3 hierarchija yra dviejų tipų - " grupės ir elementai"Ir" elementai“. Jis skiriasi tuo, kad pirmuoju atveju tik aplankas (grupė) gali būti pirminis (aplankas), o antruoju atveju elementas gali būti ir pirminis.

„Padėkite grupes viršuje“ - vėliavėlė yra atsakinga už grupių rodymą sąrašo formoje.

Taip pat nustatymuose galite apriboti grupių skaičių katalogų hierarchijoje naudodami atitinkamą nustatymą.

Savininkų skirtukas

Katalogas gali būti pavaldus kitam katalogui. 1C 8.3 konfigūravimo požiūriu tai reiškia, kad atributas „Savininkas“ tampa privalomas antraeiliui elementui. Tokio ryšio tarp katalogų standartinėse konfigūracijose pavyzdys „Nomenklatūra – matavimo vienetai“, „Sandorio šalys – rangovų sutartys“.

Katalogo savininkas taip pat gali būti šie metaduomenų objektai: , .

Duomenų skirtukas

Gaukite 267 vaizdo įrašų pamokas 1C nemokamai:

Svarbiausias skirtukas programuotojo požiūriu. Jame yra informacija apie katalogą.

Kataloge yra standartinės informacijos rinkinys, kurio neredaguoja 1C 8.2 programuotojas; jų sąrašą galite pamatyti spustelėję mygtuką „Standartinė informacija“:

Apie kiekvieną pakalbėsiu išsamiau:

  • Ši grupė— Būlio tipo atributas, nurodantis, ar tai grupė, ar elementas. Galima tik hierarchiniame kataloge. Pastaba, šio atributo reikšmės negalima pakeisti 1C: Enterprise režimu.
  • Kodas— rekvizitai, tipo numeris arba eilutė (dažniausiai eilutė). Sistemos automatiškai priskirtas numeris. Paprastai apskaičiuojama kaip (ankstesnis kodas + 1). Rekomenduoju naudoti eilutės tipą, nes skaitinių verčių rūšiavimas neveikia taip, kaip tikėtasi. Gali būti naudojamas kaip katalogo pristatymas sąraše ir įvesties laukuose. Paprastai naudojamas elemento paieškai įvedant eilutę. Jei reikia pašalinti kodo lauką, eilutės ilgyje įveskite nulį.
  • vardas— privalomi duomenys, eilutės tipas. Didžiausias eilutės ilgis yra 150 simbolių. Gali būti naudojamas kaip katalogo pristatymas sąraše ir įvesties laukuose. Paprastai naudojamas elemento paieškai įvedant eilutę. Jei reikia pašalinti lauką Pavadinimas, eilutės ilgyje įveskite nulį.
  • Tėvas— DirectoryLink tipo atributas.<ИмяТекущегоСправочника>. Galima tik hierarchiniame kataloge. Nurodo aukštesnio lygio hierarchijoje tėvą. Jei elementas arba grupė yra katalogo šaknyje, nurodoma reikšmė Katalogas.<ИмяТекущегоСправочника>.EmptyLink.
  • Savininkas— nuoroda į dabartinio katalogo elemento (grupės) savininko elementą. Yra tik pavaldžiame 1C kataloge.
  • FlagDeletion— rekvizitai su Būlio tipu. Atsakingas už „ištrynimo ženklo“ rodymą sistemoje. Elementas, pažymėtas naikinti, laikomas netinkamu naudoti, tačiau jame gali likti senų dokumentų judėjimų.
  • Nuoroda— eilutės tipo laukas. Šis atributas saugo unikalų objekto identifikatorių – GUID. Tai, ką matome sistemoje vaizdiniame ekrane, vadinamame „nuoroda“, yra tik objekto atvaizdas. Negalima pakeisti.
  • Iš anksto nustatyta— loginis tipas, rodo, ar elementas yra iš anksto nustatytas, daugiau apie tai vėliau. Negalima pakeisti.

Skirtuke „Duomenys“ taip pat nurodomas katalogo atvaizdavimas sistemoje; iki 8.2.16 versijos atvaizdavimas galėjo būti tik kodas arba pavadinimas. Naujausiose platformos versijose (pradedant nuo 8.3) vaizdas gali būti aprašomas atskirai tvarkyklės modulyje naudojant „ViewReceivingProcessing“ tvarkyklę.

Numeravimo skirtukas

Čia galite nurodyti katalogo nustatymus, susijusius su numeracija. Rekomenduojama naudoti automatinį numeravimą. Unikalumo kontrolė – tai vėliavėlė, kuri prireikus padeda kodą padaryti unikalų. Jei nustatę vėliavėlę bandysite parašyti katalogo elementą su neunikaliu kodu, 1C gausite pranešimą „Katalogo kodas tapo neunikalus“.

Kodų serija - nustato, kaip sunumeruoti katalogą; galite įvesti katalogo numeraciją pagal savininką. Pavyzdžiui, sandorio šalis „Ragai ir kanopos“ turės savo sutarčių numeraciją - „1, 2, 3“ ir kt.

Formos skirtukas

Katalogo formos aprašytos čia. Jei konfigūracija paleidžiama ir įprastu, ir valdomu režimu, pagal numatytuosius nustatymus bus du skirtukai su formomis: „pagrindinis“ ir „išplėstinis“ - skiriasi įprastoms ir valdomoms programoms.

Šiame puslapyje yra svarbi katalogo funkcija – „“. Tai labai patogi 1C 8 funkcija, leidžianti, pildant duomenis įvesties lauke, neįeiti į katalogą, o įvesti jo pavadinimą, kodą ir pan. ir išskleidžiamajame sąraše pasirinkite norimą elementą. Tai atrodo taip:

Kitas skirtukas

Skirtuke galite greitai pasiekti pagrindinius katalogo modulius - objekto modulį ir tvarkyklės modulį.

Taip pat puslapyje galite nustatyti iš anksto nustatytų katalogo elementų sąrašą. Tai yra elementai, kurių negalima ištrinti įmonės režimu. Iš anksto apibrėžtus elementus galima pasiekti tiesiogiai konfigūravimo priemonėje pagal pavadinimą, pavyzdžiui: Katalogai.Nomenklatūra.Paslauga.

Šiame skirtuke taip pat nustatomas blokavimo režimas – automatinis arba valdomas. 1C: Enterprise režimu galima naudoti viso teksto paiešką, taip pat informacinę informaciją apie katalogą.

„HIERARCHYJE“ dizainas 1C:Enterprise 8.x užklausose leidžia gauti pavaldžius hierarchinės konfigūracijos objekto elementus pagal nurodytą pasirinkimą. Šiandien straipsnyje apžvelgsime jo naudojimo pavyzdį, taip pat platformos veiksmus DBVS pusėje ir jos įtaką našumui.

Naudojimas

Pažvelkime į paprastą konstrukcijos „HIERARCHIJA“ naudojimo pavyzdį. Vykdant šią užklausą, perduotai kintamojo „Nuoroda“ reikšmei bus gauti antriniai hierarchinio katalogo „Produktai“ elementai.

Užklausos tekstas = " SELECT | Produktai . nuoroda,| Prekės . pardavėjo kodas |NUO| Katalogas . Produktai AS Produktai|KUR | Prekės . Nuoroda HIERARCHIJOJE (& nuoroda)"

Bandymų duomenų bazėje kataloge „Produktai“ yra šie bandymų duomenys:

Žinoma, paveikslėlyje nerodomi visi katalogo įrašai. Ekrano kopijoje rodoma tik duomenų saugojimo struktūra hierarchiniame kataloge. Katalogų lentelėje saugoma 10 aukščiausio lygio grupių, kurių kiekvienoje yra 5 įdėtos grupės, kurių kiekvienoje yra 200 elementų.

Grįžkime prie bandymo užklausos. Nuorodą į grupę „Grupė – 1“ perduokime parametrui „&Nuoroda“ (žr. ekrano kopiją aukščiau). Tada užklausos rezultatas atrodys taip:

Kaip matome, užklausa grąžino nuorodą į pačią aukščiausią grupę (perduota kaip parametras), taip pat įdėtas grupes su jose esančiais elementais. Taigi, naudojant konstrukciją „HIERARCHYJE“ galima patogiai gauti hierarchiškai subordinuotus duomenis.

1C:Enterprise užklausos kalbos sintaksė klasikinis SQL kai kuriais atžvilgiais labai panašus. Tačiau posakiui „IN HIERARCHIJA“ nėra analogo SQL užklausos kalboje, nes, pavyzdžiui, platformos „B“ užklausos kalbos išraiškai yra panašus SQL operatorius „IN“. Todėl platformos darbas su DBVS naudojant šį operatorių yra įdomus.

Užkuliusiuose

Taigi pradėkime. Pavyzdžiui, katalogui „Produktai“ naudosime anksčiau parašytą užklausą. Išanalizuosime platformos veiksmus dviem situacijoms:

  1. Aukščiausio lygio grupę „Group 1“ perduosime kaip parametrą „&Nuoroda“ (kaip ir anksčiau).
  2. Parametre perduosime nuorodą į grupę „1 grupė – 1“, įdėtą į aukščiausio lygio grupę „1 grupė“.

Dabar tvarka. Pirmuoju atveju platforma SQL serveryje atliks šiuos veiksmus:

1. Pirmiausia vykdoma SQL užklausa, siekiant gauti nuorodą į katalogų grupę, perduotą kaip parametrą, ir visas pavaldžias grupes. Rezultatas dedamas į laikinąją lentelę „#tt1“.

2. Antrame etape ta pati užklausa vykdoma du kartus:

Ekrano kopijoje yra išsamūs komentarai apie SQL užklausos tekstą. Trumpai tariant, užklausa leidžia pasirinkti pavaldžius elementus grupėms, kurios nurodytos laikinojoje lentelėje. Klausimas išlieka: "Kodėl užklausa vykdoma du kartus?" Atsakymas čia paprastas: pirma, užklausa gauna pavaldžius elementus pirmojo lygio grupėms, kurios jau yra laikinojoje lentelėje (žr. 1 punktą). Tada antroji užklausa nuskaito antrojo lygio pogrupių poelementius. Kadangi trečiame hierarchijos lygyje nėra katalogų grupės, ši užklausa nebevykdoma.

Mūsų atveju antroji užklausa pateiks tuščią rezultatą, nes įrašams, esantiems 3-iame hierarchijos lygyje, nėra pavaldžių elementų (ten nėra grupių).

3. Norėdami gauti galutinį užklausos rezultatą, platforma generuoja šią SQL užklausą:

Šios konkrečios užklausos rezultatas gali būti toliau apdorotas naudojant algoritmus integruota platformos kalba. Taigi, įrašai laikinojoje lentelėje „#tt1“ naudojami atrankos sąlygoms nustatyti iš nuorodų lentelės „_Reference41“.

4. Paskutiniame etape 1C:Enterprise 8.x platforma ištrina laikinąją lentelę „#tt1“, nes ji nebebus naudojama ateityje.

Tai užbaigia operatoriaus „IN HIERARCHIJA“ vykdymo procesą. Leiskite jums priminti, kad svarstyta veiksmų seka SQL serveryje buvo atlikta, kai platformos pusėje perdavėme nuorodą į aukščiausio lygio grupę „Grupė - 1“. Bet kaip platforma elgsis, jei kaip parametrą „&Nuoroda“ perduosime nuorodą į antrojo lygio grupę „Grupė - 1 - 1“? Viskas vyks taip pat, išskyrus šį punktą: aukščiau, antrajame platformos SQL užklausų vykdymo etape, buvo parašyta, kad užklausa gauti pavaldžius elementus buvo vykdoma du kartus - gavus pavaldžius elementus grupė "Grupė - 1 - 1" taip nėra. Prašymas bus įvykdytas tik vieną kartą.

Faktas yra tas, kad užklausų gauti pavaldžius elementus skaičius priklauso nuo grupių skaičiaus hierarchijoje. Kitaip tariant, jei elementų hierarchijos lygyje yra bent viena grupė, tada prašymas iš 2 punkto.

Našumo poveikis

Neteisingai naudojant bet kurį operatorių užklausoje, sistemos veikimas gali būti neoptimalus. Nagrinėjamas operatorius „HIERARCHIJA“ nėra išimtis. Jį reikia naudoti atsargiai, nes tai labai apsunkina SQL užklausų duomenų bazėje vykdymo algoritmą ir taip padidina DBVS serverio apkrovą.

Pateiksiu neoptimalios užklausos, kuri gali sukelti liūdnų pasekmių, paminėtų aukščiau, pavyzdį:

PASIRINKITE produktus. Nuoroda IŠ katalogo. Produktai KAIP Produktai WHERE (Produktai. Nuoroda HIERARCHIJOJE (& Nuoroda) ARBA Produktai. Nuoroda HIERARCHIJOJE (& Nuoroda1) ARBA Produktai. Nuoroda HIERARCHIJOJE (& Nuoroda2) )

Kaip jau galima spėti, užklausa sugeneruos daug SQL užklausų, dėl kurių sumažės informacinės sistemos našumas.

Padarykite išvadas!

Jūs turite padaryti išvadas. Tik pasakysiu, kad operatorių „HIERARCHIJA“ platforma naudoja duomenų komponavimo sistemai, kai pasirinkimo sąlygose yra „GRUPĖJE“, „GRUPĖJE IŠ SĄRAŠO“ ir kt. Manau, nereikia aiškinti, kad neteisingai manipuliuodami vartotojai gali nustatyti labai sudėtingus pasirinkimus ir kelis kartus padidinti 1C serverio ir DBVS apkrovą. Keiskime nustatymus tik patyrusiems vartotojams.

Ir, žinoma, rašydami savo mechanizmus, atkreipkite dėmesį į operatorių „HIERARCHIJA“. Viena vertus, labai patogu, kita vertus, pavojinga.

Šiame skyriuje pateikiami tipinių problemų, susijusių su darbo su hierarchiniais katalogais, sprendimo pavyzdžiai.

Hierarchinio katalogo elementų, pavaldžių nurodytai grupei, gavimas

Norėdami gauti pavaldžius hierarchinio katalogo elementus, užklausos kalba pateikia konstrukciją IN HIERARCHY. Naudojimo HIERARCHIJOJE pavyzdys:


PASIRINKTI
Nomenklatūra. Kodas,
Nomenklatūra.PirkimoKaina
NUO

Šiame pavyzdyje bus gauti visi Nomenklatūros katalogo įrašai, esantys &Group grupėje, įskaitant save, jam pavaldžias grupes ir pavaldžioms grupėms priklausančius elementus.

Jei mus domina tik tiesiogiai tam tikroje grupėje esantys elementai ir grupės, tokius elementus galime gauti nustatę sąlygą lauke Parent. Pavyzdys:


PASIRINKTI
Nomenklatūra. Kodas,
Nomenklatūra. Pavadinimas AS Pavadinimas,
Nomenklatūra.PirkimoKaina
NUO
Katalogas.Nomenklatūra AS Nomenklatūra

KUR
Nomenklatūra.Parent = &Grupė

Ši užklausa pasirinks grupes ir elementus, pavaldžius grupei su nuoroda &Grupė.

Pavaldžių katalogo elemento elementų buvimo tikrinimas

Norėdami patikrinti, ar katalogo elemente yra antraeilių įrašų, galite naudoti užklausą, panašią į pateiktą:

Šiame pavyzdyje nuoroda į elementą, kuriam norite patikrinti, ar nėra antrinių, įrašoma į pirminės užklausos parametrą. Atlikę tokią užklausą, turite patikrinti, ar rezultatas yra tuščias. Jei rezultatas nėra tuščias, tada yra antraeilių įrašų. Kitaip – ​​ne. Pavyzdys:


Jei Request.Execute().Empty() Tada
Ataskaita ("Nėra įrašų");
Priešingu atveju
Ataskaita ("Galimi įrašai");
endIf;

Visų elemento tėvų gavimas

Užklausos kalba nesuteikia jokių specialių priemonių, leidžiančių gauti visus elemento pirminius elementus. Užduočiai atlikti galite naudoti hierarchines sumas, tačiau hierarchinių sumų gavimas yra optimizuotas norint sudaryti daugelio įrašų sumas ir nėra visiškai efektyvus norint gauti vieno elemento pirminius duomenis. Norint efektyviau gauti visus pirminius elemento įrašus, rekomenduojama mažomis dalimis pereiti per jo pirminius įrašus. Pavyzdys:


CurrentItemItem = Prekė;

Užklausa = Nauja užklausa("SELECT
| Nomenklatūra. Tėvas,
| Nomenklatūra.Parent.Parent,
| Nomenklatūra.Parent.Parent.Parent,
| Nomenklatūra.Parent.Parent.Parent.Parent,
| Nomenklatūra.Parent.Parent.Parent.Parent.Parent
|NUO
| Katalogas.Nomenklatūra AS Nomenklatūra
|KUR
| Nomenclature.Link = &CurrentNomenclatureElement";

Nors tiesos ciklas
Request.SetParameter("CurrentItemItem", CurrentItemItem);
Rezultatas = Query.Run();
Jei Result.Empty() Tada
Nutraukti;
endIf;
Pasirinkimas = Result.Select();
Pasirinkimas.Kitas();
Jei stulpelio skaičius = 0 pagal rezultatą. Stulpeliai. Kiekis () - 1 ciklas
CurrentItemItem = Pasirinkimas[StulpelioSkaičius];
Nutraukti;
Priešingu atveju
Ataskaita(Dabartinis elementas);
endIf;
EndCycle;

Jei CurrentItemItem = Directories.Nomenclature.EmptyLink() Tada
Nutraukti;
endIf;
EndCycle;

Šiame pavyzdyje paslaugos pranešimo lange rodomi visi pirminiai saitai, įrašyti į ElementNomenclature kintamąjį. Cikle atrenkami 5 nuorodų tėvai.

Jei lygių skaičius kataloge yra ribotas ir mažas, tada visus tėvus galima gauti vienu prašymu be kilpos.

Ataskaitoje rodomas hierarchinis katalogas

Jei norite, kad ataskaitoje būtų rodomas hierarchinis katalogas, išsaugant hierarchiją, turite naudoti užklausą, panašią į šią:


PASIRINKTI
Nomenklatūra. Kodas,
Nomenklatūra. Pavadinimas AS Pavadinimas,
Nomenklatūra.PirkimoKaina
NUO
Katalogas.Nomenklatūra AS Nomenklatūra
RŪŠIUOTI PAGAL
Pavadinimas HIERARCHIJA

Ši užklausa parenka visus įrašus iš katalogo ir sutvarko juos pagal hierarchiją. Rezultatas bus rūšiuojamas pagal pavadinimą, atsižvelgiant į hierarchiją.

Kad katalogų grupės būtų dedamos virš elementų, šios užklausos sąlygą ORDER BY reikia pakeisti taip:


RŪŠIUOTI PAGAL
Nomenklatūra. Tai grupės HIERARCHIJA,
vardas

Rezultatas vis tiek bus išdėstytas hierarchiškai, tačiau grupės bus rodomos virš elementų.

Taip pat galima UŽSAKYTI PAGAL pasiūlymą pakeisti AUTO UŽSAKYMO galimybe. Tokiu atveju rezultatas bus užsakytas pagal katalogo nustatymus, t.y. jei kataloge nurodyta, kad grupės turi būti virš elementų, tada jos bus aukščiau.

Taip pat naudojant rezultatus galima gauti katalogo hierarchinę struktūrą.


PASIRINKTI
Nomenklatūra. Kodas,
Nomenklatūra. Pavadinimas AS Pavadinimas,
Nomenklatūra.PirkimoKaina

IŠ Directory.Nomenclature AS nomenklatūra

KUR
(Nomenklatūra. Ši grupė = FALSE)

UŽSAKYTI PAGAL vardą

Sumų gavimas pagal hierarchiją

Norėdami gauti sumas pagal hierarchiją užklausoje, nurodę lauką, pagal kurį bus skaičiuojamos sumos, SOFTWARE TOTAL sąlygoje turite nurodyti raktinį žodį HIERARCHY. Ataskaitos „Prekės apyvarta“ pavyzdys su sumomis pagal hierarchiją:


PASIRINKTI

NUO

Nomenklatūros HIERARCHIJA

Dėl šios užklausos sumos bus skaičiuojamos ne tik kiekvienai prekei, bet ir grupėms, kurioms priklauso ta ar kita prekė.

Tuo atveju, kai mums nereikia elementų sumų, o reikia tik grupių sumų, sumose turime naudoti konstrukciją HIERARCHY ONLY. Pavyzdys:


PASIRINKTI
Nomenklatūros apskaitaApyvarta. Nomenclature AS nomenklatūra,
Nomenklatūros apskaitaApyvarta.Nomenklatūra.Pateikimas,
Nomenklatūros apskaitaTurnover.QuantityTurnover AS QuantityTurnover
NUO
Kaupimo registras.Nomenklatūros apskaita.Apyvarta KAIP Nomenklatūros apskaitaApyvarta
REZULTATAI SUMA (KiekisApyvarta) PO
TIK nomenklatūros HIERARCHIJA

Šios užklausos rezultatas bus tik prekių grupių įrašai.