Príklady dotazov na prácu s hierarchickými adresármi. Operátor "v hierarchii" v požiadavke skupiny 1c v riadku požiadavky 1

  • 04.02.2024

Adresáre 1C sú špecializovaný objekt stromu metadát, ktorý slúži na ukladanie statických referenčných informácií. Napríklad v typických konfiguráciách môžete vidieť nasledujúce zobrazenia: , Nomenklatúra, Zamestnanci, Dlhodobý majetok atď. Informácie v adresároch sa spravidla často nemenia. Adresáre sa následne používajú takmer vo všetkých účtovných objektoch ako účtovná sekcia alebo referenčné informácie.

Nižšie sa pozrieme na nastavenie a navrhnutie adresára z konfigurátora pomocou adresára „Nomenklatúra“ ako príklad.

Základná karta

Karta „Základné“ špecifikuje názov, synonymum, reprezentáciu objektu a popis účelu.

Karta „Hierarchia adresára“.

Tu je stanovená hierarchia adresára.

Hierarchia v 1C 8.3 je dvoch typov - “ skupiny a prvky"A" prvkov". Líši sa tým, že v prvom prípade môže byť rodičom (priečinkom) iba priečinok (skupina) a v druhom prípade môže byť rodičom aj prvok.

„Umiestniť skupiny navrchu“ - príznak je zodpovedný za zobrazenie skupín vo forme zoznamu.

Taktiež v nastaveniach môžete obmedziť počet skupín v hierarchii adresárov pomocou príslušného nastavenia.

Vlastníci Tab

Adresár môže byť podriadený inému adresáru. Z hľadiska konfigurácie 1C 8.3 to znamená, že atribút „Owner“ sa stáva povinným pre podriadený prvok. Príklad takéhoto prepojenia medzi adresármi v štandardných konfiguráciách „Nomenklatúra – merné jednotky“, „Protistrany – zmluvy dodávateľov“.

Vlastníkom adresára môžu byť aj nasledujúce objekty metadát: , .

Údaje Tab

Získajte 267 video lekcií na 1C zadarmo:

Najdôležitejšia záložka z pohľadu programátora. Obsahuje podrobnosti o adresári.

Adresár obsahuje súbor štandardných podrobností, ktoré neupravuje programátor 1C 8.2, ich zoznam si môžete pozrieť kliknutím na tlačidlo „Štandardné podrobnosti“:

Budem sa venovať každému podrobnejšie:

  • Táto skupina— atribút s booleovským typom, ktorý označuje, či ide o skupinu alebo prvok. Dostupné iba v hierarchickom adresári. Poznámka, hodnotu tohto atribútu nie je možné zmeniť v režime 1C: Enterprise.
  • kód— rekvizity, zadajte číslo alebo reťazec (zvyčajne reťazec). Číslo pridelené automaticky systémom. Zvyčajne sa vypočíta ako (predchádzajúci kód + 1). Odporúčam použiť typ reťazca, pretože triedenie číselných hodnôt nefunguje podľa očakávania. Môže byť použitý ako reprezentácia adresára v zozname a vo vstupných poliach. Zvyčajne sa používa na vyhľadávanie prvku pri zadávaní reťazca. Ak potrebujete odstrániť pole Kód, zadajte do dĺžky riadku nulu.
  • názov— povinné údaje, typ reťazca. Maximálna dĺžka riadku je 150 znakov. Môže byť použitý ako reprezentácia adresára v zozname a vo vstupných poliach. Zvyčajne sa používa na vyhľadávanie prvku pri zadávaní reťazca. Ak potrebujete odstrániť pole Názov, zadajte do dĺžky riadku nulu.
  • Rodič— atribút typu DirectoryLink.<ИмяТекущегоСправочника>. Dostupné iba v hierarchickom adresári. Ukazuje na nadriadeného rodiča v hierarchii. Ak je prvok alebo skupina v koreňovom adresári adresára, zadá sa hodnota Adresár.<ИмяТекущегоСправочника>.EmptyLink.
  • Vlastník— prepojenie na prvok vlastníka aktuálneho prvku adresára (skupiny). Dostupné iba v podriadenom adresári 1C.
  • FlagDelete— rekvizity typu Boolean. Zodpovedá za zobrazenie „značky vymazania“ v systéme. Prvok označený na vymazanie sa považuje za nepoužiteľný, ale môžu na ňom zostať staré pohyby dokumentov.
  • Odkaz— pole typu reťazec. Tento atribút uchováva jedinečný identifikátor objektu – GUID. To, čo vidíme v systéme vo vizuálnom zobrazení nazývanom „odkaz“, je len reprezentácia objektu. Nedá sa zmeniť.
  • Preddefinované— booleovský typ, zobrazuje, či je prvok preddefinovaný, o tom neskôr. Nedá sa zmeniť.

Záložka „Údaje“ tiež uvádza reprezentáciu adresára v systéme pred verziou 8.2.16, reprezentácia môže byť iba Kód alebo Názov. V najnovších verziách platformy (od 8.3) je možné pohľad popísať nezávisle v module manažéra pomocou obslužného programu „ViewReceivingProcessing“.

Karta číslovanie

Tu môžete zadať nastavenia adresára týkajúce sa číslovania. Odporúča sa použiť automatické číslovanie. Kontrola jedinečnosti je príznak, ktorý v prípade potreby pomáha urobiť kód jedinečným. Ak sa s nastaveným príznakom pokúsite napísať prvok adresára s nejedinečným kódom, v 1C dostanete správu „Kód adresára sa stal nejedinečným“.

Kódová séria - určuje spôsob číslovania adresára môžete zadať číslovanie adresára podľa vlastníka; Napríklad protistrana „Rohy a kopytá“ bude mať svoje vlastné číslovanie zmlúv – „1, 2, 3“ atď.

Formuláre Tab

Formuláre pre adresár sú popísané tu. Ak je konfigurácia spustená v normálnom aj riadenom režime, potom budú predvolene dve karty s formulármi: „hlavné“ a „rozšírené“ - odlišné pre normálne a spravované aplikácie.

Táto stránka má dôležitú vlastnosť adresára - „“. Toto je veľmi pohodlná funkcia 1C 8, ktorá vám umožňuje pri vypĺňaní údajov do vstupného poľa nevstúpiť do adresára, ale zadať jeho názov, kód atď. a vyberte požadovaný prvok z rozbaľovacieho zoznamu. Vyzerá to takto:

Iné Tab

Na karte môžete získať rýchly prístup k hlavným modulom adresára - objektovému modulu a modulu manažéra.

Môžete tiež definovať zoznam preddefinovaných prvkov adresára na stránke. Toto sú položky, ktoré nie je možné odstrániť v režime Enterprise. K preddefinovaným prvkom je možné pristupovať priamo v konfigurátore podľa názvu, napríklad: Directories.Nomenclature.Service.

Táto záložka tiež určuje režim blokovania – automatický alebo riadený. Použitie fulltextového vyhľadávania, ako aj referenčné informácie o adresári, dostupné v režime 1C: Enterprise.

Táto časť ukazuje príklady riešenia typických problémov pri práci s hierarchickými adresármi.

Získanie prvkov hierarchického adresára, ktoré sú podriadené danej skupine

Na získanie podriadených prvkov hierarchického adresára poskytuje dopytovací jazyk konštrukciu IN HIERARCHY. Príklad použitia V HIERARCHII:


VYBERTE SI
Nomenclature.Code,
Nomenklatúra.Nákupná cena
OD

V tomto príklade sa získajú všetky záznamy adresára Nomenclature nachádzajúce sa v skupine &Group, vrátane jeho samotného, ​​jeho podriadených skupín a prvkov patriacich do podriadených skupín.

Ak nás zaujímajú len prvky a skupiny nachádzajúce sa priamo v danej skupine, tak takéto prvky môžeme získať nastavením podmienky v poli Parent. Príklad:


VYBERTE SI
Nomenclature.Code,
Nomenclature.Name AS Name,
Nomenklatúra.Nákupná cena
OD
Adresár.Nomenklatúra AS Nomenklatúra

KDE
Nomenklatúra.Rodič = &Skupina

Tento dotaz vyberie skupiny a prvky podriadené skupine s prepojením &Skupina.

Kontrola prítomnosti podriadených prvkov prvku adresára

Ak chcete skontrolovať prítomnosť podriadených záznamov prvku adresára, môžete použiť dotaz podobný tomu, ktorý je uvedený:

V tomto príklade je odkaz na element, pre ktorý chcete skontrolovať deti, zapísaný do parametra rodičovského dotazu. Po vykonaní takéhoto dotazu musíte skontrolovať, či je výsledok prázdny. Ak výsledok nie je prázdny, existujú podriadené záznamy. Inak - nie. Príklad:


If Request.Execute().Empty() Then
Správa ("Žiadne záznamy");
Inak
Správa ("Dostupné záznamy");
koniec Ak;

Získanie všetkých rodičov prvku

Dopytovací jazyk neposkytuje žiadne špeciálne prostriedky na získanie všetkých rodičov prvku. Na dokončenie úlohy môžete použiť hierarchické súčty, ale získavanie hierarchických súčtov je optimalizované na vytváranie súčtov pre veľký počet záznamov a nie je úplne efektívne na získanie rodičov jedného prvku. Ak chcete efektívnejšie získať všetky rodičovské záznamy prvku, odporúča sa prechádzať cez jeho rodičov v malých častiach. Príklad:


CurrentItemItem = ItemItem;

Dopyt = Nový dotaz("SELECT
| Nomenklatúra.Rodič,
| Nomenklatúra.Rodič.Rodič,
| Nomenklatúra.Parent.Parent.Parent,
| Nomenklatúra.Parent.Parent.Parent.Parent,
| Nomenklatúra.Rodič.Rodič.Rodič.Rodič.Rodič
|OD
| Adresár.Nomenklatúra AS Nomenklatúra
| KDE
| Nomenclature.Link = &CurrentNomenclatureElement";

Zatiaľ čo cyklus pravdy
Request.SetParameter("CurrentItemItem", CurrentItemItem);
Vysledok = Query.Run();
If Result.Empty() Then
Prerušiť;
koniec Ak;
Výber = Vysledok.Vyber();
Selection.Next();
Pre ColumnNumber = 0 Podľa Result.Columns.Quantity() - 1 slučka
CurrentItemItem = Selection[ColumnNumber];
Prerušiť;
Inak
Správa(AktuálnaPoložka);
koniec Ak;
EndCycle;

Ak CurrentItemItem = Directories.Nomenclature.EmptyLink() Then
Prerušiť;
koniec Ak;
EndCycle;

V tomto príklade sa v okne servisnej správy zobrazia všetci rodičia pre prepojenie zaznamenané v premennej ElementNomenclature. V cykle sa vyberie 5 odkazových rodičov.

Ak je počet úrovní v adresári obmedzený a malý, potom je možné získať všetkých rodičov jednou požiadavkou bez slučky.

Zobrazenie hierarchického adresára v zostave

Ak chcete zobraziť hierarchický adresár v zostave pri zachovaní hierarchie, musíte použiť dotaz podobný tomuto:


VYBERTE SI
Nomenclature.Code,
Nomenclature.Name AS Name,
Nomenklatúra.Nákupná cena
OD
Adresár.Nomenklatúra AS Nomenklatúra
TRIEDIŤ PODĽA
Názov HIERARCHIA

Tento dotaz vyberie všetky záznamy z adresára a usporiada ich do hierarchie. Výsledok bude zoradený podľa mena s prihliadnutím na hierarchiu.

Aby sa skupiny adresárov umiestnili nad prvky, je potrebné nahradiť klauzulu ORDER BY v tejto požiadavke nasledujúcim:


TRIEDIŤ PODĽA
Nomenklatúra. Toto je skupina HIERARCHIA,
názov

Výsledok bude stále usporiadaný hierarchicky, ale skupiny sa zobrazia nad prvkami.

Ponuku OBJEDNÁVKA je tiež možné nahradiť možnosťou AUTOMATICKÁ OBJEDNÁVKA. V tomto prípade bude výsledok zoradený v súlade s nastavením adresára, t.j. ak je v adresári uvedené, že skupiny by mali byť umiestnené nad prvkami, potom budú umiestnené vyššie.

Pomocou výsledkov je tiež možné získať hierarchickú štruktúru adresára.


VYBERTE SI
Nomenclature.Code,
Nomenclature.Name AS Name,
Nomenklatúra.Nákupná cena

FROM Directory.Nomenclature AS Nomenklatúra

KDE
(Nomenclature.ThisGroup = FALSE)

OBJEDNAŤ PODĽA mena

Získavanie súčtov podľa hierarchie

Ak chcete získať súčty podľa hierarchie v dotaze, musíte zadať kľúčové slovo HIERARCHY v klauzule SOFTWARE TOTAL po zadaní poľa, podľa ktorého sa budú vypočítavať súčty. Príklad zostavy „Obrat položiek“ so získaním súčtu podľa hierarchie:


VYBERTE SI

OD

Nomenklatúra HIERARCHIA

V dôsledku tejto požiadavky sa vypočítajú súčty nielen pre každú položku, ale aj pre skupiny, do ktorých táto alebo táto položka patrí.

V prípade, že nepotrebujeme súčty pre prvky, ale potrebujeme len súčty pre skupiny, musíme v súčtoch použiť konštrukciu LEN HIERARCHIA. Príklad:


VYBERTE SI
Účtovanie nomenklatúryObrat. Nomenklatúra AS Nomenklatúra,
Účtovanie pre nomenklatúruObrat.Nomenklatúra.Prezentácia,
Účtovanie pre nomenklatúru Obrat. Množstvo Obrat AS Množstvo Obrat
OD
Akumulačný register. Číselníkové účtovníctvo. Obrat AKO Číselník ÚčtovníctvoObrat
VÝSLEDKY SUMA (Množstvo Obrat) PO
LEN nomenklatúra HIERARCHIA

Výsledkom tohto dotazu budú celkové záznamy len pre skupiny položiek.

Dotazovací jazyk v 1C 8 je zjednodušeným analógom známeho „štruktúrovaného programovacieho jazyka“ (ako sa častejšie nazýva SQL). Ale v 1C sa používa iba na čítanie údajov na zmenu údajov;

Ďalším zaujímavým rozdielom je ruská syntax. Aj keď v skutočnosti môžete použiť konštrukcie v anglickom jazyku.

Príklad žiadosti:

VYBERTE SI
Banks.Name,
Banky.Účet
OD
Adresár.Banky AKO Banky

Táto požiadavka nám umožní vidieť informácie o názve a korešpondenčnom účte všetkých bánk existujúcich v databáze.

Dotazovací jazyk je najjednoduchší a najefektívnejší spôsob získavania informácií. Ako je vidieť z vyššie uvedeného príkladu, v dopytovacom jazyku musíte použiť názvy metadát (ide o zoznam systémových objektov, ktoré tvoria konfiguráciu, t. j. adresáre, dokumenty, registre atď.).

Popis konštrukcií dotazovacieho jazyka

Štruktúra dopytu

Na získanie údajov stačí použiť konštrukcie „SELECT“ a „FROM“. Najjednoduchšia požiadavka vyzerá takto:

SELECT * FROM Directories.Nomenklatúra

Kde „*“ znamená výber všetkých polí tabuľky a Directories.Nomenclature – názov tabuľky v databáze.

Pozrime sa na komplexnejší a všeobecnejší príklad:

VYBERTE SI
<ИмяПоля1>AKO<ПредставлениеПоля1>,
Suma(<ИмяПоля2>) AKO<ПредставлениеПоля2>
OD
<ИмяТаблицы1>AKO<ПредставлениеТаблицы1>
<ТипСоединения>COMPOUND<ИмяТаблицы2>AKO<ПредставлениеТаблицы2>
BY<УсловиеСоединениеТаблиц>

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

GROUP BY
<ИмяПоля1>

TRIEDIŤ PODĽA
<ИмяПоля1>

VÝSLEDKY
<ИмяПоля2>
BY
<ИмяПоля1>

V tomto dotaze vyberieme údaje polí „NázovPole1“ a „NázovPole1“ z tabuliek „Názov Tabuľky1“ a „Názov Tabuľky“, priradíme k poliam synonymá pomocou operátora „AKO“ a spojíme ich podľa určitej podmienky „ TableConnectionCondition“.

Z prijatých údajov vyberieme len údaje, ktoré spĺňajú podmienku z „KDE“ „Podmienka výberu údajov“ Ďalej zoskupíme požiadavku podľa poľa „Názov poľa1“, pričom „Názov poľa2“ vytvoríme súčty „Názov poľa1“ a posledné pole „Názov poľa2“.

Posledným krokom je triedenie požiadavky pomocou konštrukcie ORDER BY.

Všeobecné vzory

Pozrime sa na všeobecné štruktúry dopytovacieho jazyka 1C 8.2.

NAJPRVn

Pomocou tohto operátora môžete získať n počet prvých záznamov. Poradie záznamov je určené poradím v dotaze.

VYBERTE PRVÝCH 100
Banks.Name,
Banky kód AS BIC
OD
Adresár.Banky AKO Banky
TRIEDIŤ PODĽA
Banky.Názov

Žiadosť dostane prvých 100 záznamov z adresára „Banky“ zoradených podľa abecedy.

POVOLENÝ

Tento dizajn je relevantný pre prácu s mechanizmom. Podstatou mechanizmu je obmedziť čítanie (a iné akcie) na používateľov pre konkrétne záznamy v databázovej tabuľke a nie pre tabuľku ako celok.

Ak sa používateľ pokúsi pomocou dotazu prečítať záznamy, ktoré nemá k dispozícii, zobrazí sa mu chybové hlásenie. Aby ste tomu zabránili, mali by ste použiť konštrukciu „POVOLENÉ“, t. j. požiadavka bude čítať iba záznamy, ktoré má povolené.

VYBERTE POVOLENÉ
Odkaz na úložisko ďalších informácií
OD
Adresár.Úložisko dodatočných informácií

RÔZNY

Použitie „DIFFERENT“ zabráni duplicitným riadkom v zadávaní výsledku dotazu 1C. Duplikácia znamená, že všetky polia požiadavky sa zhodujú.

VYBERTE PRVÝCH 100
Banks.Name,
Banky kód AS BIC
OD
Adresár.Banky AKO Banky

EmptyTable

Táto konštrukcia sa používa veľmi zriedkavo na kombinovanie dopytov. Pri pripájaní možno budete musieť zadať prázdnu vnorenú tabuľku v jednej z tabuliek. Operátor „EmptyTable“ je na to ako stvorený.

Príklad z pomocníka 1C 8:

VYBERTE číslo odkazu, PRÁZDNÚ TABUĽKU. (Č., Položka, Množstvo) AKO Zloženie
FROM Document.Expense Faktúra
KOMBINUJTE VŠETKO
SELECT Link.Number, Contents. (LineNumber, Product, Quantity)
FROM Document.Invoice Document.Invoice.Composition.*

ISNULL

Veľmi užitočná funkcia, ktorá vám umožní vyhnúť sa mnohým chybám. YesNULL() vám umožňuje nahradiť hodnotu NULL požadovanou hodnotou. Veľmi často sa používa pri kontrole prítomnosti hodnoty v spojených tabuľkách, napríklad:

VYBERTE SI
Odkaz na nomenklatúru,
IsNULL(Položka Remaining.QuantityRemaining,0) AS QuantityRemaining
OD


Dá sa použiť aj inak. Napríklad, ak pre každý riadok nie je známe, v ktorej tabuľke hodnota existuje:

ISNULL(InvoiceReceived.Date, InvoiceIssued.Date)

HOW je operátor, ktorý nám umožňuje priradiť názov (synonymum) tabuľke alebo poli. Príklad použitia sme videli vyššie.

Tieto konštrukcie sú veľmi podobné – umožňujú vám získať reťazcovú reprezentáciu požadovanej hodnoty. Jediný rozdiel je v tom, že REPRESENTATION konvertuje akékoľvek hodnoty na typ reťazca, zatiaľ čo REPRESENTATIONREF konvertuje iba referenčné hodnoty. REFERENČNÁ REPREZENTÁCIA sa odporúča použiť v systémových dotazoch na zloženie údajov na optimalizáciu, pokiaľ sa, samozrejme, neplánuje použiť pole referenčných údajov vo výberoch.

VYBERTE SI
View(Link), //reťazec, napríklad „Predbežná správa č. 123 zo dňa 10.10.2015
View(DeletionMark) AS DeleteMarkText, //string, “Yes” or “No”
ViewReferences(DeletionMark) AS DeleteMarkBoolean //boolean, True or False
OD
Dokument.Predbežná správa

EXPRESNÉ

Express vám umožňuje konvertovať hodnoty polí na požadovaný typ údajov. Hodnotu môžete previesť buď na primitívny typ, alebo na typ odkazu.

Express pre referenčný typ sa používa na obmedzenie požadovaných typov údajov v poliach komplexného typu, ktoré sa často používajú na optimalizáciu výkonu systému. Príklad:

EXPRESS(TableCost.Subconto1 AS Directory.Cost Items).Typ aktivitypreNáklady na daňové účtovníctvo

Pri primitívnych typoch sa táto funkcia často používa na obmedzenie počtu znakov v poliach neobmedzenej dĺžky (takéto polia nemožno porovnávať). Aby sa predišlo chybe" Neplatné parametre v operácii porovnávania. Nemôžete porovnávať polia
neobmedzená dĺžka a polia nekompatibilných typov
", musíte tieto polia vyjadriť takto:

EXPRESS(Komentár AKO riadok(150))

DIFFERENCEDATE

Získajte 267 video lekcií na 1C zadarmo:

Príklad použitia IS NULL v požiadavke 1C:

VYBER Z
Ref
ĽAVÉ PRIPOJENIE RegisterAkumulácia.ProduktyVSkladoch.Zostávajúce AKO Zostávajúce produkty
Softvér NomenclatureRef.Link = Predaný tovarCommitteesRemains.Nomenclature
KDE NIE JE Zostávajúce produkty

Typ údajov v dotaze možno určiť pomocou funkcií TYPE() a VALUETYPE() alebo pomocou logického operátora REFERENCE. Tieto dve funkcie sú podobné.

Preddefinované hodnoty

Okrem použitia odovzdaných parametrov v dotazoch v dotazovacom jazyku 1C môžete použiť preddefinované hodnoty alebo . Napríklad prevody, preddefinované adresáre, účtovné osnovy atď. Na tento účel sa používa konštrukcia „Value()“.

Príklad použitia:

WHERE Nomenklatúra. Typ nomenklatúry = Hodnota (Adresár. Typy nomenklatúry. Produkt)

WHERE Protistrany. Typ kontaktných informácií = hodnota (vyčíslenie. Typy kontaktných informácií. Telefón)

KDE Zostatky na účte. Účtovný účet = Hodnota (Účtovná tabuľka. Zisk. ZiskStrata)

Spojenia

Existujú 4 typy spojení: LEFT, SPRÁVNY, KOMPLETNÉ, VNÚTORNÉ.

ĽAVÉ a PRAVÉ PRIPOJENIE

Spojenia sa používajú na prepojenie dvoch tabuliek na základe konkrétnej podmienky. Funkcia kedy ĽAVÉ PRIPOJENIE je, že vezmeme prvú špecifikovanú tabuľku celú a podmienečne zviažeme druhú tabuľku. Polia druhej tabuľky, ktoré nebolo možné zviazať podmienkou, sú vyplnené hodnotou NULOVÝ.

Napríklad:

Vráti celú tabuľku Protistrán a pole „Banka“ vyplní len na tých miestach, kde bude splnená podmienka „Protistrany.Názov = Banky.Názov“. Ak podmienka nie je splnená, pole Banka bude nastavené na NULOVÝ.

RIGHT JOIN v jazyku 1Cúplne podobné ĽAVÉ pripojenie, s výnimkou jedného rozdielu - v PRÁVO PRIPOJENIA„Hlavná“ tabuľka je druhá, nie prvá.

ÚPLNÉ PRIPOJENIE

ÚPLNÉ PRIPOJENIE od ľavej a pravej sa líši tým, že zobrazuje všetky záznamy z dvoch tabuliek a spája len tie, ktoré dokáže spojiť podľa podmienky.

Napríklad:

OD

ÚPLNÉ PRIPOJENIE
Adresár.Banky AKO Banky

BY

Jazyk dotazu vráti obe tabuľky úplne iba vtedy, ak je splnená podmienka spojenia záznamov. Na rozdiel od ľavého/pravého spojenia je možné, že NULL sa objaví v dvoch poliach.

VNÚTORNÉ SPOJENIE

VNÚTORNÉ SPOJENIE sa od plnej líši tým, že zobrazuje len tie záznamy, ktoré bolo možné podľa danej podmienky spojiť.

Napríklad:

OD
Adresár Klientov protistrany

VNÚTORNÉ SPOJENIE
Adresár.Banky AKO Banky

BY
Klienti.Názov = Banky.Názov

Tento dotaz vráti iba riadky, v ktorých majú banka a protistrana rovnaký názov.

združenia

Konštrukty JOIN a JOIN ALL spájajú dva výsledky do jedného. Tie. výsledok vykonania dvoch sa „zlúči“ do jedného, ​​spoločného.

To znamená, že systém funguje úplne rovnako ako bežné, len pre dočasnú tabuľku.

Ako používať INDEX BY

Treba však vziať do úvahy jeden bod. Vytvorenie indexu na dočasnej tabuľke si tiež vyžaduje čas. Preto je vhodné použiť konštrukciu „ “ iba vtedy, ak je s istotou známe, že v dočasnej tabuľke bude viac ako 1-2 záznamy. V opačnom prípade môže byť efekt opačný – výkon indexovaných polí nekompenzuje čas potrebný na vytvorenie indexu.

VYBERTE SI
Kurzy mien Najnovší prierez Mena AS Mena,
Kurzy mien Najnovší prierez.
Kurzy mien PUT
OD
Informácie Register.Currency Kurzy.Posledný výsek(&obdobie,) AS Kurzy mienPosledný výsek
INDEX BY
mena
;
VYBERTE SI
Ceny Nomenklatúra. Nomenklatúra,
Ceny Nomenklatúry. Cena,
Nomenklatúry cien. Mena,
Kurzy mien. Sadzba
OD
Register informácií.Nomenklatúra Ceny.Posledná časť(&Obdobie,
Nomenklatúra B (&Nomenklatúra) A PriceType = &PriceType) AS Cenová nomenklatúra
LEFT JOIN Menové kurzy AKO kurzy mien
Nomenklatúry cien softvéru.Currency = Kurzy meny.Mena

Zoskupovanie

Dotazovací jazyk 1C vám umožňuje používať špeciálne agregačné funkcie pri zoskupovaní výsledkov dotazov. Zoskupovanie možno použiť aj bez agregačných funkcií na „elimináciu“ duplikátov.

Existujú nasledujúce funkcie:

Množstvo, Množstvo, Počet rôznych, Maximum, Minimum, Priemer.

Príklad č. 1:

VYBERTE SI
Nomenklatúra tovaru a služieb.
SUM(Predaj tovaruSlužbyTovar.Množstvo) AS Množstvo,
SUM(Sales of GoodsServicesToods.Amount) AS Suma
OD

GROUP BY
Predaj tovarov a služieb Nomenklatúra tovaru

Dotaz dostane všetky riadky s tovarom a sumarizuje ich podľa množstva a sumy podľa položky.

Príklad č.2

VYBERTE SI
Banks.Code,
MNOŽSTVO (ROZNÉ Banky.Odkaz) AKO Počet duplikátov
OD
Adresár.Banky AKO Banky
GROUP BY
Banks.Code

Tento príklad zobrazí zoznam BIC v adresári „Banks“ a ukáže, koľko duplikátov existuje pre každú z nich.

Výsledky

Výsledky predstavujú spôsob, ako získať údaje zo systému s hierarchickou štruktúrou. Súhrnné funkcie možno použiť pre súhrnné polia, rovnako ako pre zoskupenia.

Jedným z najobľúbenejších spôsobov využitia výsledkov v praxi je dávkový odpis tovaru.

VYBERTE SI




OD
Dokument Predaj tovarov a služieb AKO Predaj tovarov a služieb
TRIEDIŤ PODĽA

VÝSLEDKY
SUM(množstvo),
SUM(Súčet)
BY
Nomenklatúra

Výsledok dotazu bude nasledujúci hierarchický:

Všeobecné výsledky

Ak potrebujete získať súčty pre všetky „súčty“, použite operátor „GENERAL“.

VYBERTE SI
Predaj tovarov a služieb Nomenklatúra AS Nomenklatúra,
Predaj tovaru a služieb Tovar Link AS,
Predaj tovaru a služieb Množstvo AS Množstvo,
Predaj tovaru a služieb Tovar Suma AS Suma
OD
Dokument Predaj tovarov a služieb AKO Predaj tovarov a služieb
TRIEDIŤ PODĽA
Dátum predaja tovaru a služieb
VÝSLEDKY
SUM(množstvo),
SUM(Súčet)
BY
SÚ BEŽNÉ,
Nomenklatúra

V dôsledku vykonania požiadavky dostaneme nasledujúci výsledok:

V ktorej 1 úrovni zoskupenia je agregácia všetkých potrebných polí.

Aranžovanie

Operátor ORDER BY sa používa na triedenie výsledku dotazu.

Triedenie pre primitívne typy (reťazec, číslo, boolean) sa riadi obvyklými pravidlami. Pre polia typu odkazu sa triedenie uskutočňuje podľa internej reprezentácie odkazu (jedinečný identifikátor), a nie podľa kódu alebo reprezentácie odkazu.

VYBERTE SI

OD
Adresár.Nomenklatúra AS Nomenklatúra
TRIEDIŤ PODĽA
názov

Požiadavka zobrazí zoznam mien v adresári nomenklatúry zoradený abecedne.

Automatická objednávka

Výsledkom dotazu bez zoradenia je chaoticky prezentovaná množina riadkov. Vývojári platformy 1C nezaručujú, že pri vykonávaní rovnakých dopytov sa riadky budú zobrazovať v rovnakom poradí.

Ak potrebujete zobraziť záznamy tabuľky v konštantnom poradí, musíte použiť konštrukciu automatického poradia.

VYBERTE SI
Nomenklatúra.Názov AS Názov
OD
Adresár.Nomenklatúra AS Nomenklatúra
AUTOMATICKÁ OBJEDNÁVKA

Virtuálne stoly

Virtuálne tabuľky v 1C sú jedinečnou vlastnosťou dopytovacieho jazyka 1C, ktorá sa nenachádza v iných podobných syntaxách. Virtuálna tabuľka je rýchly spôsob, ako získať informácie o profile z registrov.

Každý typ registra má svoju vlastnú sadu virtuálnych tabuliek, ktoré sa môžu líšiť v závislosti od nastavenia registra.

  • rez prvého;
  • rez z toho posledného.
  • zvyšky;
  • revolúcie;
  • zostatky a obrat.
  • pohyby zo subkonta;
  • revolúcie;
  • rýchlosť Dt Kt;
  • zvyšky;
  • zostatky a obrat
  • subconto.
  • základňa;
  • grafové údaje;
  • skutočné obdobie platnosti.

Pre vývojára riešenia sú dáta prevzaté z jednej (virtuálnej) tabuľky, ale v skutočnosti platforma 1C berie z mnohých tabuliek a transformuje ich do požadovanej podoby.

VYBERTE SI
Nomenklatúra produktov v skladoch a obrat.
ProductsInWarehousesRemainingAndTurnover.QuantityInitialRemaining,
ProductsInWarehousesRemainsAndTurnover.QuantityObrat,
Tovar v skladochRemainsAndTurnover.QuantityIncoming,
Tovar v skladochRemainsAndTurnover.QuantityConsumption,
ProductsInWarehousesRemainingsAndTurnover.QuantityFinalRemaining
OD
RegisterAccumulations.GoodsInWarehouses.RemainsAndTurnover AS GoodsInWarehousesRemainsAndTurnover

Tento dotaz vám umožňuje rýchlo získať veľké množstvo údajov.

Možnosti virtuálneho stola

Veľmi dôležitým aspektom práce s virtuálnymi tabuľkami je použitie parametrov. Parametre virtuálnej tabuľky – špecializované parametre pre výber a konfiguráciu.

Pre takéto tabuľky sa považuje za nesprávne použiť výber v konštrukcii „WHERE“. Okrem toho, že sa dopyt stane neoptimálnym, je možné získať nesprávne údaje.

Príklad použitia týchto parametrov:

Evidencia hromadenia tovaru na skladoch (& Začiatok obdobia, & Koniec obdobia, Mesiac, pohyby a hranice obdobia, Číselník = & Povinná nomenklatúra)

Algoritmus pre virtuálne tabuľky

Napríklad najpoužívanejšia virtuálna tabuľka typu „Remains“ ukladá dáta z dvoch fyzických tabuliek – zostatky a pohyby.

Pri použití virtuálnej tabuľky systém vykonáva nasledujúce manipulácie:

  1. Získame najbližšiu vypočítanú hodnotu z hľadiska dátumu a meraní v tabuľke súčtov.
  2. Sumu z tabuľky pohybu „pripočítame“ k sume z tabuľky súčtov.


Takéto jednoduché akcie môžu výrazne zlepšiť výkon systému ako celku.

Používanie nástroja na tvorbu dotazov

Query Builder– nástroj zabudovaný do systému 1C Enterprise, ktorý výrazne uľahčuje vývoj databázových dotazov.

Nástroj na tvorbu dotazov má pomerne jednoduché a intuitívne rozhranie. Napriek tomu sa pozrime na používanie konštruktora dotazov podrobnejšie.

Konštruktor textu dotazu sa spúšťa z kontextového menu (pravé tlačidlo myši) na požadovanom mieste v kóde programu.

Popis konštruktora požiadavky 1C

Pozrime sa na každú kartu dizajnéra podrobnejšie. Výnimkou je záložka Builder, ktorá je témou na inú diskusiu.

Karta Tabuľky a polia

Táto karta určuje zdroj údajov a polia, ktoré je potrebné zobraziť v zostave. V podstate sú tu popísané konštrukcie SELECT.. FROM.

Zdrojom môže byť fyzická tabuľka databázy, tabuľka virtuálnych registrov, dočasné tabuľky, vnorené dotazy atď.

V kontextovom menu virtuálnych tabuliek môžete nastaviť parametre virtuálnej tabuľky:

Karta Pripojenia

Záložka slúži na popis spojení viacerých tabuliek a vytvára konštrukcie so slovom SPOJENIE.

Karta Zoskupovanie

Na tejto karte vám systém umožňuje zoskupiť a zhrnúť požadované polia výsledku tabuľky. Popisuje použitie konštrukcií GROUP BY, SUM, MINIMUM, AVERAGE, MAXIMUM, QUANTITY, NUMBER OF RŮZNÉ.

Karta Podmienky

Zodpovedá za všetko, čo príde v texte požiadavky po konštrukcii WHERE, t.j. za všetky podmienky kladené na prijaté dáta.

Karta Rozšírené

Tab Okrem toho plný najrôznejších parametrov, ktoré sú veľmi dôležité. Pozrime sa na každú z vlastností.

Zoskupovanie Výber záznamov:

  • Prvý N– parameter, ktorý do dotazu vráti iba N záznamov (operátor FIRST)
  • Žiadne duplikáty– zabezpečuje jedinečnosť prijatých záznamov (INÝ operátor)
  • Povolený– umožňuje vybrať len tie záznamy, ktoré vám systém umožňuje vybrať s prihliadnutím na (POVOLENÁ konštrukcia)

Zoskupovanie Typ žiadosti určuje, aký typ dotazu bude: získanie údajov, vytvorenie dočasnej tabuľky alebo zničenie dočasnej tabuľky.

Dole je vlajka Zamknúť prijaté údaje pre neskoršie úpravy. Umožňuje povoliť možnosť nastavenia uzamykania údajov, ktoré zaisťuje bezpečnosť údajov od ich načítania až po ich zmenu (relevantné len pre režim Automatické uzamykanie, prevedenie NA ZMENU).

Karta Pripojenia/Aliasy

Na tejto karte návrhára dotazov môžete nastaviť možnosť spájania rôznych tabuliek a aliasov (konštrukcia AKO). Tabuľky sú uvedené na ľavej strane. Ak nastavíte príznaky oproti tabuľke, použije sa konštrukcia UNITE, inak - UNITE ALL (rozdiely medzi týmito dvoma metódami). Na pravej strane je uvedená korešpondencia polí v rôznych tabuľkách, ak korešpondencia nie je špecifikovaná, dotaz vráti hodnotu NULL.

Záložka Objednávka

Toto určuje poradie, v ktorom sú hodnoty zoradené (ORDER BY) - zostupne (DESC) alebo vzostupne (ASC).

Existuje aj zaujímavá vlajka - Automatická objednávka(v dopyte - AUTO OBJEDNÁVKA). V predvolenom nastavení systém 1C zobrazuje údaje v „chaotickom“ poradí. Ak nastavíte tento príznak, systém zoradí údaje podľa interných údajov.

Karta Dávka dopytov

Na karte Návrhár dotazov môžete vytvoriť nové a použiť ju aj ako navigáciu. V texte požiadavky sú pakety oddelené symbolom „;“ (čiarkou).

Tlačidlo „Dopyt“ v návrhárovi dotazov

V ľavom dolnom rohu návrhára požiadavky sa nachádza tlačidlo Žiadosť, pomocou ktorého si môžete kedykoľvek zobraziť text požiadavky:

V tomto okne môžete vykonať úpravy požiadavky a vykonať ju.


Pomocou konzoly dotazov

Query Console je jednoduchý a pohodlný spôsob ladenia zložitých dotazov a rýchleho získavania informácií. V tomto článku sa pokúsim opísať, ako používať Query Console a poskytnúť odkaz na stiahnutie Query Console.

Poďme sa na tento nástroj pozrieť bližšie.

Stiahnite si konzolu dotazov 1C

Ak chcete začať pracovať s konzolou dotazov, musíte si ju odniekiaľ stiahnuť. Liečby sa zvyčajne delia na dva typy – kontrolované formy a konvenčné (alebo sa niekedy nazývajú 8.1 a 8.2/8.3).

Pokúsil som sa spojiť tieto dva pohľady do jedného spracovania - požadovaný formulár sa otvorí v požadovanom prevádzkovom režime (v riadenom režime konzola funguje iba v hrubom režime).

Popis konzoly dotazu 1C

Začnime sa pozerať na konzolu dotazov s popisom hlavného panela spracovania:

V hlavičke konzoly dotazov môžete vidieť čas vykonania posledného dotazu s presnosťou na milisekundy, čo vám umožňuje porovnávať rôzne návrhy z hľadiska výkonu.

Prvá skupina tlačidiel na paneli príkazov je zodpovedná za ukladanie aktuálnych dopytov do externého súboru. To je veľmi pohodlné, vždy sa môžete vrátiť k písaniu zložitej žiadosti. Alebo si napríklad uložte zoznam typických príkladov určitých vzorov.

Vľavo v poli „Žiadosť“ môžete vytvárať nové požiadavky a ukladať ich do stromovej štruktúry. Druhá skupina tlačidiel je zodpovedná za správu zoznamu požiadaviek. Pomocou neho môžete vytvoriť, kopírovať, mazať, presúvať požiadavku.

  • Vykonaťžiadosť– jednoduché prevedenie a výsledky
  • Spustite balík– umožňuje zobraziť všetky prechodné dotazy v dávke dotazov
  • Zobrazenie dočasných tabuliek– umožňuje zobraziť výsledky, ktoré dočasné dotazy vracajú v tabuľke

Parametre požiadavky:

Umožňuje nastaviť aktuálne parametre požiadavky.

V okne parametrov dotazu je zaujímavé nasledovné:

  • Tlačidlo Získajte zo žiadosti automaticky nájde všetky parametre v požiadavke pre pohodlie vývojára.
  • Vlajka Spoločné parametre pre všetky požiadavky– po inštalácii sa pri jeho spracovaní nevymažú parametre pri prechode z požiadavky na požiadavku vo všeobecnom zozname požiadaviek.

Nastavte parameter so zoznamom hodnôt Je to veľmi jednoduché, stačí pri výbere hodnoty parametra kliknúť na tlačidlo vymazať hodnotu (krížik), systém vás vyzve na výber typu údajov, kde je potrebné vybrať „Zoznam hodnôt“:

V hornom paneli je tiež tlačidlo na vyvolanie nastavení konzoly dotazov:

Tu môžete zadať parametre pre automatické ukladanie dotazov a parametre vykonávania dotazu.

Text požiadavky sa zadá do poľa žiadosti konzoly. Dá sa to urobiť jednoduchým zadaním testu dotazu alebo zavolaním špeciálneho nástroja – návrhára dotazov.

Návrhár dotazov 1C 8 sa vyvolá z kontextovej ponuky (pravé tlačidlo myši), keď kliknete na vstupné pole:

Toto menu má tiež také užitočné funkcie, ako je vymazanie alebo pridanie zlomov riadkov („|“) k požiadavke alebo prijatie kódu požiadavky v tejto pohodlnej forme:

Žiadosť = Nová požiadavka;
Request.Text = ”
|VYBERTE
| Meny.Odkaz
|OD
| Adresár.Currencies AS Meny”;
RequestResult = Request.Execute();

Spodné pole konzoly dotazu zobrazuje pole výsledku dotazu, preto bolo vytvorené toto spracovanie:



Konzola dotazov môže okrem zoznamu zobraziť aj údaje vo forme stromu - pre dotazy obsahujúce súčty.

Optimalizácia dopytu

Jedným z najdôležitejších bodov pri zvyšovaní produktivity 1C enterprise 8.3 je optimalizáciažiadosti. Tento bod je tiež veľmi dôležitý, keď absolvovanie certifikácie. Nižšie si povieme o typických príčinách neoptimálneho výkonu dotazov ao optimalizačných metódach.

Výbery vo virtuálnej tabuľke pomocou konštrukcie WHERE

Na detaily virtuálnej tabuľky je potrebné aplikovať filtre len cez parametre VT. Za žiadnych okolností by ste nemali používať konštrukciu WHERE na výber vo virtuálnej tabuľke, čo je z hľadiska optimalizácie hrubá chyba. V prípade výberu pomocou WHERE v skutočnosti systém dostane VŠETKY záznamy a až potom vyberie potrebné.

SPRÁVNY:

VYBERTE SI

OD
Register kumulácií s účastníkmi zostatkov (.
,
Organizácia = &Organizácia
AND Jednotlivec = &Jednotlivec) AKO Vzájomné vyrovnania s účastníkmi organizácií zostatky

ZLE:

VYBERTE SI
Vzájomné vyrovnanie zostatkov s účastníkmi organizácií
OD
Register kumulácií s účastníkmi organizácií Zostatky (,) AKO Vzájomné vyrovnania s účastníkmi organizácií Zostatky
KDE
Vzájomné vyrovnania s účastníkmi organizácií Zostatky Organizácia = & Organizácia
AND Vzájomné vyrovnania s účastníkmi organizácií Zostatky Jednotlivec = &Jednotlivec

Získanie hodnoty poľa komplexného typu pomocou bodky

Pri prijímaní údajov komplexného typu v dotaze cez bodku systém spojí ľavým spojením presne toľko tabuliek, koľko je možných typov v poli komplexného typu.

Napríklad pre optimalizáciu je veľmi nežiaduce pristupovať do poľa záznam registra – registrátor. Registrátor má zložený typ údajov, medzi ktorými sú všetky možné typy dokumentov, ktoré môžu zapisovať údaje do registra.

ZLE:

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

To znamená, že v skutočnosti takýto dopyt nepristúpi k jednej tabuľke, ale k 22 databázovým tabuľkám (tento register má 21 typov registrátora).

SPRÁVNY:

VYBERTE SI
VOĽBA
KEĎ ProductsOrg.Registrar LINK Document.Predaj produktov a služieb
POTOM VYJADRITE(Organizácia produktov.Registrátor AS doklad.Predaj tovaruSlužby).Dátum
KEĎ GoodsOrg.Registrar LINK Document.Prijatie tovaruSlužby
POTOM VYJADRITE(GoodsOrg.Registrar AS Document.Receipt of GoodsServices).Dátum
KONIEC AKO DÁTUM,
ProduktyOrg.Množstvo
OD
RegisterAkumulácie.Organizácie tovaru AKO organizácia tovaru

Alebo druhá možnosť je doplniť takéto informácie do detailov, napríklad v našom prípade doplnenie dátumu.

SPRÁVNY:

VYBERTE SI
ProductsOrganizations.Date,
ProduktyOrganizácie.Množstvo
OD
Register tovarov organizácií AS tovary organizácií

Poddotazy v stave spojenia

Pre optimalizáciu je neprijateľné používať poddotazy v podmienkach spojenia, čo výrazne spomaľuje dopyt. V takýchto prípadoch je vhodné použiť VT. Ak sa chcete pripojiť, musíte použiť iba metaúdaje a objekty VT, ktoré ste predtým indexovali podľa polí pripojenia.

ZLE:

VYBERTE si…

PRIPOJTE SA VĽAVO (
SELECT FROM RegisterInformation.Limits
KDE …
SKUPINA PODĽA...
) OD…

SPRÁVNY:

VYBERTE si…
Limity PUT
FROM Information Register.Limits
KDE …
SKUPINA PODĽA...
INDEX PODĽA...;

VYBERTE si…
Z dokladu o predaji tovaru a služieb
LEFT JOIN Limity
BY…;

Spájanie záznamov s virtuálnymi tabuľkami

Sú situácie, keď pri pripájaní virtuálneho stola k iným systém nefunguje optimálne. V tomto prípade, aby ste optimalizovali výkon dotazu, môžete skúsiť umiestniť virtuálnu tabuľku do dočasnej tabuľky, pričom nezabudnite indexovať spojené polia v dotaze na dočasnú tabuľku. Je to spôsobené skutočnosťou, že VT sú často obsiahnuté v niekoľkých fyzických tabuľkách DBMS, v dôsledku čoho sa na ich výber zostaví poddotaz a problém je podobný predchádzajúcemu bodu.

Používanie výberov založených na neindexovaných poliach

Jednou z najčastejších chýb pri písaní dotazov je používanie podmienok na neindexovaných poliach, čo je v rozpore pravidlá optimalizácie dopytov. DBMS nemôže vykonať dotaz optimálne, ak dotaz obsahuje výber neindexovateľných polí. Ak vezmete dočasnú tabuľku, musíte tiež indexovať polia pripojenia.

Pre každú podmienku musí existovať vhodný index. Vhodný index je taký, ktorý spĺňa nasledujúce požiadavky:

  1. Index obsahuje všetky polia uvedené v podmienke.
  2. Tieto polia sú na samom začiatku indexu.
  3. Tieto výbery idú za sebou, to znamená, že hodnoty, ktoré nie sú zahrnuté v podmienke dotazu, nie sú medzi nimi „zaklinené“.

Ak DBMS nezvolí správne indexy, bude naskenovaná celá tabuľka – bude to mať veľmi negatívny dopad na výkon a môže viesť k dlhšiemu zablokovaniu celej sady záznamov.

Použitie logického OR v podmienkach

To je všetko, tento článok pokrýval základné aspekty optimalizácie dotazov, ktoré by mal poznať každý odborník na 1C.

Veľmi užitočný bezplatný video kurz o vývoji a optimalizácii dopytov, Vrelo odporucam pre začiatočníkov a viac!

V tomto článku s vami chceme všetko prediskutovať Funkcie dotazovacieho jazyka 1C, a konštrukcie dotazovacieho jazyka. Aký je rozdiel medzi funkciou a dizajnom? Funkcia sa volá so zátvorkami a možnými parametrami v nich a konštrukcia sa zapisuje bez zátvoriek. Nepochybne všetky štruktúry a funkcie dotazovacieho jazyka 1C aby bol proces získavania údajov flexibilný a multifunkčný. Tieto funkcie a konštrukcie sa vzťahujú na polia dotazu a niektoré sa vzťahujú aj na podmienky.

1C Funkcie jazyka dotazu

Pretože jasný popis Funkcie dotazovacieho jazyka 1C je oveľa menej bežné ako popisy štruktúr, rozhodli sme sa začať skúmať funkcie. Teraz sa pozrime na každý zvlášť, popíšeme jeho účel, syntax a príklad použitia, takže:

1. Funkcia DÁTUM ČAS- táto funkcia vytvára konštantné pole s typom "Dátum".

Syntax: DÁTUM ČAS(<Год>,<Месяц>,<День>,<Час>,<Минута>,<Секунда>)

Príklad použitia:

2. Funkcia DATE DIFFERENCE- vráti rozdiel medzi dvoma dátumami v jednej z dimenzií (rok, mesiac, deň, hodina, minúta, sekunda). Meranie sa odovzdá ako parameter.

Syntax: DIFFERENCEDATE(<Дата1>, <Дата2>, <Тип>)

Príklad použitia:

Query.Text = "SELECT | DIFFERENCEDATE(DATETIME(2015, 4, 17), DATETIME(2015, 2, 1), DAY) | AS Počet dní";

3. Funkcia VALUE- nastaví konštantné pole s preddefinovaným záznamom z databázy, môžete tiež získať prázdny odkaz akéhokoľvek typu;

Syntax: VALUE(<Имя>)

Príklad použitia:

Request.Text = "SELECT //preddefinovaný prvok | VALUE(Directory.Currencies.Dollar) AS dolár, //prázdny odkaz | VALUE(Dokument.Príjem tovaru a služieb.EmptyLink) AS Príjem, //hodnota prevodu | VALUE(Prevod .

4. Funkcia SELECT- máme pred sebou analógiu konštrukcie IF, ktorá sa používa v kóde, iba táto sa používa v dopytoch 1C.

Syntax: VOĽBA KEDY<Выражение>POTOM<Выражение>INAK<Выражение>KONIEC

Príklad použitia:

Požiadavka.Text = //ak je suma vyššia ako 7500, potom by mala byť zľava 300 rubľov, //takže ak sa podmienka spustí, funkcia //vráti sumu - 300 //inak žiadosť jednoducho vráti sumu "SELECT | SELECT | WHEN TCReceips.Amount > 7500 | THEN TCReceipts.Amount - 300 | ELSE TCReceipts.Amount | KONIEC AKO SumaWithDiscount | OD |

5. Funkcia EXPRESS- umožňuje vyjadriť konštantné pole konkrétnym typom.

Syntax: EXPRESS(názov poľa AKO názov typu)

Príklad použitia:

Query.Text = "VYBERTE RÔZNE | Číslo registr.predaja, | VYBERTE | KEĎ PREPOJTE DOKLAD.REGISTRÁTORA odbytu. Výdavok | TAK VYJADRITE (VYBRAŤ.Registrátor AKO doklad.Výdavok) | ELSE VYBERTE | KEĎ PREPOJTE DOKUMENT.REGISTRÁTORA.Implementácia | THEN EXPRESS(Predaj.Registrátor AS. Implementácia) |. KONIEC AS Číslo |.

Existuje iná možnosť použitia funkcie EXPRESS v poliach zmiešaných typov, kde sa vyskytujú? Najjednoduchším príkladom je „Registrátor“ pre akýkoľvek register. Prečo by sme teda mohli potrebovať kvalifikovať typ v registri? Zoberme si situáciu, keď z registrátora vyberieme pole "Číslo", z ktorej tabuľky sa číslo vyberie? Správna odpoveď všetkých! Preto, aby náš dotaz fungoval rýchlo, mali by sme zadať explicitný typ pomocou funkcie EXPRESS

Príklad použitia:

Query.Text = "SELECT | EXPRESS(Nomenclature.Comment AS Line(300)) AS Comment, | EXPRESS(Nomenclature.Sum AS Number(15,2)) AS Sum |FROM | Directory.Nomenclature AS Nomenclature";

6. Funkcia ISNULL(alternatívny pravopis ISNULL) - ak je pole typu NULL, nahradí sa druhým parametrom funkcie.

Syntax: ISNULL(<Поле>, <ПодставляемоеЗначение>)

Príklad použitia:

Tiež si všimnite, že je vhodné VŽDY nahradiť typ NULL nejakou hodnotou, pretože porovnanie s typom NULL vždy vráti hodnotu FALSE, aj keď porovnáte hodnotu NULL s hodnotou NULL. Hodnoty NULL sa najčastejšie vytvárajú v dôsledku spájania tabuliek (všetky typy spojení okrem interných).

Query.Text = //Vyberte celú položku a jej zostatky //ak v niektorej položke nie je zostatok, potom bude pole //NULL, ktoré bude nahradené hodnotou 0 "SELECT | No. Link, | ISNULL (ProductsInStockRemains.InStockRemaining, 0) AS Zostávajúce OD |. Nomenklatúra AS Č. |. ĽAVÉ PRIPOJENIE RegistrovaťAkumulácie.TovarVSkladoch.Zostatky AS TovarVSkladochZostatky = ZAPNUTÉ (ZostatkyVSkladoch.Linky |.

7. Funkcia REPREZENTÁCIE- umožňuje získať reprezentáciu poľa požiadavky.

Syntax: VÝKON (<НаименованиеПоля>)

Príklad použitia:

dotaz

Konštrukty v dopytovacom jazyku 1C

Diskutovali sme s vami vyššie Funkcie dotazovacieho jazyka 1C, teraz je čas zvážiť konštrukcie v dopytovacom jazyku 1C, nie sú o nič menej dôležité a užitočné, začnime.

1. Stavebný LINK- je logický operátor na kontrolu typu odkazu. Najčastejšie sa vyskytuje pri kontrole poľa komplexného typu voči špecifickému typu. Syntax: LINK<Имя таблицы>

Príklad použitia:

Požiadavka.Text = //ak je typ hodnoty záznamníka Príjem dokladu, //potom dotaz vráti "Príjem tovaru", inak "Predaj tovaru" "VYBERTE | VYBERTE | KEDY Zostávajúci.Registrátor LINK Dokument.Príjem tovaruSlužby | POTOM ""Príjem"" ELSE ""Spotreba"" |. KONIEC OD |.

2. Dizajn MEDZI- tento operátor kontroluje, či je hodnota v zadanom rozsahu.

Syntax: MEDZI<Выражение>A<Выражение>

Príklad použitia:

Request.Text = //získame celú nomenklatúru, ktorej kód leží v rozsahu od 1 do 100 "SELECT | Nomenclature.Link |FROM | Directory.Nomenclature AS Nomenclature |WHERE | Nomenclature.Code BETWEEN 1 AND 100" ;

3. Konštrukcia B a B HIERARCHIA- skontrolujte, či sa hodnota nachádza v prenesenom zozname (ako zoznam je možné preniesť polia, tabuľky hodnôt atď.). Operátor IN HIERARCHY umožňuje zobraziť hierarchiu (príklad použitia Účtovej osnovy).

Syntax: IN(<СписокЗначений>), V HIERARCHII(<СписокЗначений>)

Príklad použitia:

Request.Text = //vyberte všetky podúčty účtu "SELECT | Samonosný. Prepojiť AS účet | FROM | Účtová osnova. Samonosný AS Samonosný | WHERE | Samonosný. Link IN HIERARCHY VALUE (Graf of Samonosný tovar)“;

4. Dizajn PODOBNÝ- Táto funkcia nám umožňuje porovnávať reťazec so vzorom reťazca.

Syntax: PÁČI SA MI TO "<ТекстШаблона>"

Možnosti vzoru riadkov:

% - sekvencia obsahujúca ľubovoľný počet ľubovoľných znakov.

Jedna ľubovoľná postava.

[...] - každý jednotlivý znak alebo postupnosť znakov uvedených v hranatých zátvorkách. Enumerácia môže špecifikovať rozsahy, napríklad a-z, čo znamená ľubovoľný znak zahrnutý v rozsahu vrátane koncov rozsahu.

[^...] – každý jeden znak alebo postupnosť znakov uvedených v hranatých zátvorkách okrem tých, ktoré sú uvedené za znakom záporu.

Príklad použitia:

Query.Text = //nájdite celú nomenklatúru, ktorá obsahuje koreň TABUR a začína //buď malým alebo veľkým písmenom t "SELECT | Nomenklatúra. Odkaz | FROM | Adresár. Nomenklatúra AKO Nomenklatúra | WHERE | Produkty. Názov LIKE "" [Tt ]abur%""" ;

5. Dizajn POVOLENÝ- tento operátor umožňuje vybrať z databázy len tie záznamy, pre ktoré má volajúci povolenie na čítanie. Tieto práva sa konfigurujú na úrovni záznamu (RLS).

Syntax: Za kľúčovým slovom SELECT sa píše ALLOWED

Príklad použitia:

Request.Text = "VYBRAŤ POVOLENÉ | Protistrany. Odkaz | Z | Adresár. Protistrany AKO protistrany";

6. Dizajn RÔZNY- umožňuje vybrať záznamy, v ktorých nie sú žiadne duplicitné záznamy.

Syntax: Za kľúčovým slovom SELECT sa píše VARIOUS

Príklad použitia:

Request.Text = //vyberie záznamy, na ktoré má čitateľ práva "SELECT VARIOUS | Counterparties.Name |FROM | Directory. Counterparties AS Counterparties" ;

Konštrukcia RÔZNA môže byť tiež použitá s POVOLENÝM operátorom a inými operátormi.

Príklad použitia:

Request.Text = //vyberie rôzne záznamy, na ktoré má čitateľ práva "SELECT ALLOWED VARIOUS | Counterparties.Name |FROM | Directory. Counterparties AS Counterparties";

7. PRVÝ dizajn- vyberie počet záznamov zadaný v parametri z výsledku dotazu.

Syntax: FIRST<число>

Príklad použitia:

Request.Text = //vyberte prvé 4 čísla CCD z adresára "SELECT FIRST 4 | CCD Numbers. Link | FROM | Directory. CCD Numbers AS CCD Numbers";

8. Dizajn PRE ZMENU- umožňuje uzamknúť tabuľku, funguje iba v transakciách (relevantné len pre automatické zámky).

Syntax: PRE ZMENU<НаименованиеТаблицы>

Príklad použitia:

Query.Text = "SELECT | Voľné zostatky. Nomenklatúra, | Voľné zostatky. Sklad, | Voľné zostatky. Zostávajúce na sklade | OD | Registra kumulácií. Voľné zostatky. Zostatky AKO Voľné zostatky | NA ZMENU | Register kumulácií Voľné zvyšky“;

9. Dizajn OBJEDNAŤ BY- organizuje údaje podľa konkrétneho poľa. Ak je pole odkaz, potom pri nastavovaní príznaku AUTOMATICKÁ OBJEDNÁVKA Triedenie sa uskutoční podľa reprezentácie odkazu, ak je príznak vypnutý, odkazy sa zoradia podľa seniority adresy odkazu v pamäti.

Syntax: TRIEDIŤ PODĽA<НаименованиеПоля>AUTOMATICKÁ OBJEDNÁVKA

Príklad použitia:

Query.Text = "SELECT | Voľné zostatky. Nomenklatúra AKO Nomenklatúra, | Voľné zostatky. Sklad AS Sklad, | Voľné zostatky. Zostávajúce na sklade | FROM | Registrácia akumulácie. Voľné zostatky. Zostávajúce AKO Voľné zostatky | | OBJEDNAŤ PODĽA |. Nomenklatúra |.

10. Dizajn GROUP BY- používa sa na zoskupenie reťazcov dopytov podľa konkrétnych polí. Číselné polia sa musia použiť s akoukoľvek agregovanou funkciou.

Syntax: GROUP BY<НаименованиеПоля1>, .... , <НаименованиеПоляN>

Príklad použitia:

Query.Text = "SELECT | ProduktyVSkladoch.Nomenklatúra AS Nomenklatúra, | ProduktyVSkladoch.Sklad, | SUM(TovarVSkladoch.Na sklade) AKO NA SKLADE |OD | RegistrovaťAkumulácie.ProduktyVskladoch AKO ProduktyVskladoch | |SKUPINA PODĽA | ProduktySklad.

11. Dizajn MAJÚCI- umožňuje aplikovať agregovanú funkciu na podmienku výberu údajov, podobne ako pri konštrukcii WHERE.

Syntax: MAJÚCE<агрегатная функция с условием>

Príklad použitia:

Query.Text = //vyberie zoskupené záznamy, kde je pole InStock väčšie ako 3 "SELECT | ItemsInStocks.Nomenclature AS Nomenclature, | ItemsInWarehouses.Warehouse, | SUM(ItemsInStocks.InStock) AS INSTOCK |FROM | RegisterAccumulationsto.ItemsInS |ItemsInS | GROUP BY |. ProduktyVSkladoch.Nomenklatúra, |. ProduktyVSkladoch.DOSTUPNÉ |.

12. Stavebníctvo INDEX BY- používa sa na indexovanie poľa dotazu. Dokončenie dotazu s indexovaním trvá dlhšie, no zrýchľuje vyhľadávanie v indexovaných poliach. Dá sa použiť iba vo virtuálnych tabuľkách.

Syntax: INDEX BY<Поле1, ... , ПолеN>

Príklad použitia:

Query.Text = "SELECT | Ts.NameOS, | Ts.FolderNumber, | Ts.CodeOS, | Ts.Term, | Ts.Type | PLACE DataTs | FROM | &Ts AS Ts | | INDEX BY | Ts.NameOS, | Ts .CodeOS";

13. Dizajn KDE- umožňuje uložiť podmienku na ľubovoľné výberové polia. Výsledok bude zahŕňať iba záznamy, ktoré spĺňajú podmienku.

Syntax: KDE<Условие1 ОператорЛогСоединения УсловиеN>

Príklad použitia:

Query.Text = //vyberú sa všetky záznamy s CompensationRemaining<>0 a //AmountForCalcCompRemaining > 100 "SELECT | CompensationRPORemains.Counterparty, |CompensationRPORemains.Dieťa, | CompensationRPORemains.CompensationRemaining, | CompensationRPORemains.AmountForCalcCompRemains |Miesto | Miesto registrácieTRPORmains ASFROM | |KDE |KompenzáciaRPZostáva.KompenzáciaZostávajúca<>0 | And CompensationRPORemains.AmountForCalcCompRemaining> 100" ;

14. VÝSLEDKY dizajnu... VŠEOBECNÉ- používa sa na výpočet súčtov, návrh špecifikuje polia, podľa ktorých sa budú počítať súčty a agregované funkcie aplikované na celkové polia. Pri použití súčtov pre každé pole podľa konštrukcie TOTAL sú údaje zoskupené. Existuje voliteľný konštrukt GENERAL, jeho použitie tiež poskytuje ďalšie zoskupovanie. Nižšie uvidíte príklad výsledku žiadosti.

Syntax: VÝSLEDKY<АгрегатнаяФункция1, ... , АгрегатнаяФункцияN>BY<ОБЩИЕ> <Поле1, ... , ПолеN>

Príklad použitia:

Request.Text = "SELECT | Výpočty. Dohoda protistrany. Typ zmluvy AS Typ zmluvy, | Výpočty. Dohoda protistrany AS zmluva, | Výpočty. Protistrana, | Výpočty. Výška zostatku vzájomného vyrovnania AS zostatok | OD | Register kumulácií. Vzájomné Vyrovnanie S protistranami Výpočty AS SPOLU |. SUMA (Zostatok) |VŠEOBECNÉ |

Na obrázku sú znázornené zoskupenia, ktoré sa vytvorili počas vykonávania požiadavky, prvé sa vzťahuje na sekciu VŠEOBECNÉ a druhé na pole Typ dohody s protistranou.

Čo je to adresár 1C a prečo je potrebný? V adresári sú uložené podmienene trvalé informácie, t.j. informácie, ktoré zostávajú takmer nezmenené počas dlhého časového obdobia. Napríklad adresár „Nomenklatúra“ obsahuje zoznam predaného alebo vyrobeného tovaru. Adresár môže tiež obsahovať veľa vlastností popisujúcich prvok adresára.

Ak na porovnanie vezmeme pohlavie osoby, potom je zoznam obmedzený a nemení sa, preto je preň vhodnejší zoznam.

Po vytvorení nového adresára uvidíme nasledujúci obrázok.

Pozrime sa na všetky jeho záložky.

Základné

Tu sa uvádza názov (identifikátor v databáze) a synonymum (používateľské meno adresára). Voliteľný komentár je taký, ktorý môže vysvetliť účel adresára alebo opísať jeho vlastnosti.

Hierarchia

Na tejto karte môžete nakonfigurovať hĺbku vnorenia prvkov adresára. Pomocou tohto nastavenia je vhodné rozlišovať a detailovať prvky podľa určitých kritérií. Napríklad produkty „Skrine“ sú v jednej skupine a produkty „Stoly“ sú v inej. V predvolenom nastavení sa po vytvorení adresár zobrazí zoznam prvkov. Ak zaškrtnete políčko Hierarchický adresár, potom každý prvok môže byť podriadený inému prvku (skupine). Nižšie sú uvedené možnosti prispôsobenia tejto záložky a zmeny zobrazenia vo vlastnom režime.

Typ hierarchie:

Hierarchia skupín a prvkov

Pri tomto nastavení môže byť vnorenie prvkov iba do skupín (priečinkov).

Ako vidíte, všetky prvky a skupiny majú rovnaké ikony a ľubovoľný prvok možno vnoriť.

Umiestnite skupiny na vrch

Keď je toto políčko začiarknuté, skupiny budú vždy navrchu, inak budú usporiadané v poradí zoradenia, napríklad takto:

Obmedzenie počtu úrovní hierarchie

Ak tu nie je začiarknuté políčko, vkladanie je neobmedzené.

Ak je začiarkavacie políčko začiarknuté, nižšie môžete zadať počet úrovní.

Vlastníci

Na záložke vlastníkov môžu byť uvedené ďalšie adresáre, ktorým je tento podriadený. Diagram vzťahov podriadených adresárov je podobný diagramu vzťahov hierarchického adresára, len tu iný adresár vystupuje ako nadradený a nazýva sa vlastník. V typických konfiguráciách je dobrým príkladom podriadenie adresára „Dohody“ adresáru „Protistrany“, pretože Nemôže existovať dohoda, ktorá nepatrí žiadnej protistrane.

Pole "Zoznam vlastníkov adresára" určuje zoznam adresárov, ktoré vlastnia prvky tohto adresára.

Nižšie v poli „Použitie podriadenosti“ je uvedené, čomu budú prvky tohto adresára podriadené.

Ako programovo zistiť, či je adresár hierarchický alebo nie

Ak to chcete urobiť, musíte sa pozrieť na metadáta

Toto je Hierarchický Adresár = Metaúdaje. Adresáre. Protistrany. Hierarchické;

Pokračovanie nabudúce...