Vytváranie požiadaviek a práca s nimi (pre začiatočníkov). Vytváranie požiadaviek a práca s nimi (pre začiatočníkov) 1s 8.3 v prípade požiadavky

Programovanie 1C pozostáva z viac než len písania programu. 1C je ingot používateľských akcií a údajov, s ktorými pracuje.

Údaje sú uložené v databáze. Dotazy 1C predstavujú spôsob, ako získať údaje z databázy, aby ich bolo možné zobraziť používateľovi vo forme alebo ich spracovať.

Základnou časťou správy je požiadavka 1C. V prípade správy je ACS najväčšou časťou správy.

Posaď sa. Nadýchni sa. Ukľudni sa. Teraz vám poviem novinky.

Na programovanie v 1C nestačí poznať programovací jazyk 1C. Musíte tiež poznať jazyk dopytov 1C.

Dotazovací jazyk 1C je úplne samostatný jazyk, ktorý nám umožňuje špecifikovať, aké údaje potrebujeme z databázy získať.

Je tiež bilingválny - to znamená, že môžete písať v ruštine alebo angličtine. Je mimoriadne podobný dotazovaciemu jazyku SQL a tí, ktorí ho poznajú, si môžu oddýchnuť.

Ako sa používajú požiadavky 1C

Keď používateľ spustí 1C v režime Enterprise, v spustenom klientovi nie je ani jeden gram údajov. Preto, keď potrebujete otvoriť adresár, 1C požaduje údaje z databázy, to znamená, že vytvára požiadavku 1C.

1C dotazy sú:

  • Automatické dotazy 1C
    Automaticky generované systémom. Vytvorili ste formulár zoznamu dokumentov. Pridaný stĺpec. To znamená, že keď otvoríte tento formulár v podnikovom režime, zaznamená sa dotaz a vyžiadajú sa údaje pre tento stĺpec.
  • Poloautomatické dotazy 1C
    V jazyku 1C je veľa metód (funkcií), pri prístupe sa vykoná dotaz do databázy. Napríklad.GetObject()
  • Manuálne 1C dotazy (napísané programátorom konkrétne ako dotaz)
    Požiadavku 1C môžete napísať sami v kóde a vykonať ju.

Vytváranie a vykonávanie 1C dotazov

Žiadosť 1C je skutočný text žiadosti v jazyku žiadosti 1C.
Text je možné písať perom. To znamená, vezmite si to a napíšte to (ak ovládate tento jazyk).

Keďže 1C presadzuje koncepciu vizuálneho programovania, kde sa veľa alebo takmer všetko dá urobiť bez ručného písania kódu, existuje špeciálny objekt Query Constructor, ktorý vám umožňuje nakresliť text dotazu bez znalosti jazyka dotazu. Zázraky sa však nedejú - na to musíte vedieť pracovať s konštruktérom.

Keď je text žiadosti 1C pripravený, je potrebné ju vykonať. Na tento účel je v 1C kóde Request() objekt. Tu je príklad:

Požiadavka = Nová požiadavka();
Query.Text = "VYBRAŤ
| Nomenklatúra.Odkaz
|OD
| Adresár.Nomenklatúra AS Nomenklatúra
| KDE
| Nomenklatúra.Služba";
Select = Query.Run().Select();

Správa(Výber.Odkaz);
EndCycle;

Ako vidíte na príklade, po vykonaní požiadavky 1C nám príde výsledok a musíme ho spracovať. Výsledkom je jeden alebo niekoľko riadkov tabuľky (v špeciálnom formulári).

Výsledok je možné nahrať do bežnej tabuľky:
Fetch = Query.Run().Unload(); //Výsledok – tabuľka hodnôt

Alebo len obiehajte rad za radom.
Select = Query.Run().Select();
Zatiaľ čo Select.Next() Loop
//Urobte niečo s výsledkami dotazu
EndCycle;

Práca s požiadavkami 1C

Základné princípy 1C dotazov

Základné princípy vytvárania požiadavky 1C –
SELECT Zoznam polí FROM Názov tabuľky WHERE Podmienky

Príklad vytvorenia takejto požiadavky 1C:

VYBERTE SI
//zoznam polí na výber
odkaz,
Názov,
kód
OD
//názov tabuľky, z ktorej vyberáme dáta
//zoznam tabuliek je zoznam objektov v okne konfigurátora
Adresár.Nomenklatúra
KDE
//označenie výberu
Typ produktu = &Služba //výber podľa externej hodnoty
Alebo Service // atribút „Služba“ typu Boolean, výber podľa hodnoty True
TRIEDIŤ PODĽA
//Triedenie
názov

Zoznam tabuliek 1C

Názvy tabuliek môžete vidieť v okne konfigurátora. Stačí namiesto „Adresárov“ napísať „Adresár“, napríklad „Adresár.Nomenklatúra“ alebo „Dokument.Predaj tovaru a služieb“ alebo „Register akumulácie.Predaj“.

Pre registre existujú ďalšie tabuľky (virtuálne), ktoré umožňujú získať konečné čísla.

Information Register.RegisterName.Last Slice(&Date) – žiadosť 1C z registra informácií, ak je pravidelná, na konkrétny dátum

Register akumulácie. Meno registra. Zostatky(&Dátum) – žiadosť 1C z evidencie zostatkov k určitému dátumu

Akumulačný register. Meno registra. Obrat (&Dátum začiatku, & Dátum ukončenia) – žiadosť 1C z registra obratu za obdobie od dátumu začiatku do dátumu ukončenia.

Dodatočné zásady

Keď požadujeme zoznam niektorých údajov, fungujú základné princípy. Môžeme si ale vyžiadať aj čísla a žiadosť nám ich môže spočítať (napr. doplniť).

VYBERTE SI
//Quantity(FieldName) – počíta množstvo
//Field AS OtherName – premenuje pole
Množstvo (Odkaz) AS Množstvo zaúčtovaných dokumentov
OD

KDE
Dirigované

Táto žiadosť 1C nám vráti celkový počet dokumentov. Každý dokument má však pole Organizácia. Povedzme, že chceme spočítať počet dokumentov pre každú organizáciu pomocou dotazu 1C.

VYBERTE SI
//len pole dokumentu
Organizácia,
//počítajte množstvo
Množstvo(Odkaz) AS MnožstvoPodľa organizácií
OD
Dokument Predaj tovaru a služieb
KDE
Dirigované
GROUP BY

Organizácia

Táto žiadosť 1C nám vráti počet dokumentov pre každú organizáciu (nazývanú aj „podľa organizácie“).

Dovoľte nám dodatočne vypočítať množstvo týchto dokumentov pomocou žiadosti 1C:

VYBERTE SI
//len pole dokumentu
Organizácia,
//počítajte množstvo

//počítajte sumu

OD
Dokument Predaj tovaru a služieb
KDE
Dirigované
GROUP BY
//musí sa použiť, ak má zoznam polí funkciu count() a jedno alebo viac polí súčasne - potom je potrebné zoskupiť podľa týchto polí
Organizácia

Táto žiadosť 1C nám tiež vráti množstvo dokumentov.

VYBERTE SI
//len pole dokumentu
Organizácia,
//počítajte množstvo
Množstvo (Odkaz) AS Množstvo Podľa organizácií,
//počítajte sumu
Suma(DocumentAmount) AS Suma
OD
Dokument Predaj tovaru a služieb
KDE
Dirigované
GROUP BY
//musí sa použiť, ak má zoznam polí funkciu count() a jedno alebo viac polí súčasne - potom je potrebné zoskupiť podľa týchto polí
Organizácia
PO VÝSLEDKY Všeobecné

Dotazovací jazyk 1C je rozsiahly a zložitý a nebudeme zvažovať všetky jeho možnosti v jednej lekcii – prečítajte si naše ďalšie lekcie.

Stručne o ďalších funkciách dopytovacieho jazyka 1C:

  • Spájanie údajov z viacerých tabuliek
  • Vnorené dopyty
  • Dávková žiadosť
  • Vytváranie vlastných virtuálnych tabuliek
  • Dopyt z tabuľky hodnôt
  • Používanie vstavaných funkcií na získavanie a manipuláciu s hodnotami.

1C Query Builder

Aby sa text požiadavky nepísal ručne, existuje návrhár požiadaviek 1C. Stačí kliknúť pravým tlačidlom myši kdekoľvek v module a vybrať 1C Query Designer.

Vyberte požadovanú tabuľku vľavo v návrhárovi dotazov 1C a presuňte ju doprava.

Vyberte požadované polia z tabuľky v návrhárovi dotazov 1C a potiahnite doprava. Ak by ste chceli pole nielen vybrať, ale použiť naň nejakú sčítaciu funkciu, po ťahaní na pole dvakrát kliknite myšou. Na karte Zoskupenie potom budete musieť vybrať (potiahnuť) požadované polia na zoskupenie.

Na karte Podmienky v návrhárovi dotazov 1C môžete rovnakým spôsobom vybrať potrebné výbery (potiahnutím polí, pomocou ktorých vykonáte výber). Uistite sa, že ste vybrali správny stav.

Na karte Objednávka je uvedené triedenie. Na karte Výsledky – sumarizácia výsledkov.

Pomocou návrhára dotazov 1C môžete študovať akýkoľvek existujúci dotaz. Ak to chcete urobiť, kliknite pravým tlačidlom myši na text existujúcej požiadavky a tiež vyberte návrhára dotazov 1C - a požiadavka sa otvorí v návrhárovi dotazov 1C.

Dotazovací jazyk 1C 8 je nepostrádateľným nástrojom pre programátora 1C, umožňuje vám písať stručnejší, jednoduchší a zrozumiteľnejší kód a pri práci s údajmi používať menej systémových zdrojov. Tento článok otvára sériu lekcií venovaných dopytovaciemu jazyku 1C 8. V prvej lekcii sa pozrieme na štruktúru hlavného operátora tohto jazyka - VYBERTE SI. Pomocou tohto operátora môžete vytvárať výbery z databázových tabuliek. Vybrané údaje tabuľky je možné triediť, umiestňovať na ne podmienky, spájať a kombinovať s údajmi z iných tabuliek, zoskupovať podľa rôznych polí a mnoho iného.

Dopytovací jazyk 1C enterprise 8 - Štruktúra operátora SELECT

Pozrime sa na štruktúru operátora SELECT (voliteľné časti operátora sú uvedené v hranatých zátvorkách). Dotazovací jazyk 1C poskytuje širokú škálu nástrojov na vytváranie vzoriek údajov.

VYBERTE [POVOLENÉ] [INÉ] [PRVÉ A] [Pole1] [AS Alias1], [Pole2] [AS Alias2], ... [PoleM] [AS AliasB] [PUT TemporaryTableName] [FROM Table1 AS AliasTableTable1 [[INNER JOIN ][LEFT JOIN][FULL JOIN] Table2 AS Alias ​​​​Table2 [[INNER JOIN][LEFT JOIN][FULL JOIN] TableC AS Alias ​​​​TablesC BY Expression1 [And Expression2]...[And ExpressionD]] .. ... BY Výraz1 [A Výraz2]...[A VýrazE]] ... [TabuľkaF AKO Alias ​​tabuľkyF] ... ] [GROUP BY Pole zoskupenia1[,] ... [Pole skupinyG]] [WHERE Výraz1 [A Výraz2] ... [A VýrazH]] [SPOJTE VŠETKO...] [; ...] [INDEX BY Alias1 ... AliasB] [TOTALS [AggregationFunction(Field1)][,] [AggregationFunction(Field2)][,] ... [AggregationFunction(FieldI)] BY [GENERAL][,] [ GroupingField1][,] ... [GroupingFieldj]]

Kľúčové slová a bloky pre prácu s poľami

  • VYBERTE SI— kľúčové slovo označujúce začiatok operátora;
  • POVOLENÝ označuje, že výber by mal zahŕňať záznamy tabuľky, ktoré majú pre daného používateľa prístup na čítanie;
  • RÔZNY znamená, že vzorka by mala zahŕňať iba rôzne (vo všetkých poliach) toky. Inými slovami, duplicitné riadky budú zo vzorky vylúčené;
  • PRVÁ A ak zadáte toto kľúčové slovo, potom bude do výberu zahrnuté iba prvé A z riadkov vybraných dotazom, kde A je prirodzené číslo;
  • Poľný blok— tento blok označuje polia, ktoré je potrebné zahrnúť do výberu. Tieto polia budú vybraté stĺpce. V najjednoduchšom prípade pole vyzerá takto: Table Alias.TableFieldName AS Alias ​​poľa

    Takto označíme, z ktorej tabuľky toto pole berieme. Dotazovací jazyk 1C vám umožňuje zadať ľubovoľné aliasy, ale nemali by sa opakovať v rovnakom príkaze SELECT. Pole môže byť zložitejšie a môže pozostávať z rôznych kombinácií polí tabuľky, funkcií dotazovacieho jazyka a agregačných funkcií, ale týmito prípadmi sa v tomto návode nezaoberáme.

Kľúčové slová a bloky pre prácu s tabuľkami

  • PUT TemporaryTableName- kľúčové slovo PLACE je určená na vytvorenie dočasnej tabuľky s konkrétnym názvom, ktorá bude uložená v pamäti RAM v danej relácii 1C 8 až do jej ukončenia alebo do zničenia dočasnej tabuľky. Treba poznamenať, že názvy dočasných tabuliek v jednej relácii 1C 8 by sa nemali opakovať;
  • Blok tabuliek a vzťahov— blok označuje všetky tabuľky použité v tomto dotaze, ako aj vzťahy medzi nimi. Blok začína kľúčovým slovom OD, nasleduje názov a prezývka prvej tabuľky. Ak táto tabuľka súvisí s inými tabuľkami, potom sú uvedené vzťahy. Dotazovací jazyk 1C obsahuje nasledujúcu množinu typov pripojenia:
    • VNÚTORNÉ SPOJENIE— záznam z ľavej tabuľky bude zaradený do výberu len pri splnení podmienky pripojenia, záznam z pravej tabuľky bude zaradený do výberu len vtedy, ak bude splnená podmienka pripojenia;
    • ĽAVÉ PRIPOJENIE— záznam z ľavej tabuľky bude do výberu zaradený v každom prípade, záznam z pravej tabuľky bude zaradený do výberu len vtedy, ak bude splnená podmienka pripojenia;
    • ÚPLNÉ PRIPOJENIE— záznam z ľavej tabuľky bude v každom prípade zaradený ako prvý do výberu, potom len ak je splnená podmienka spojenia, záznam z pravej tabuľky bude v každom prípade zaradený ako prvý, potom iba ak je podmienka spojenia je splnená. V tomto prípade sú výsledné duplicitné riadky vylúčené zo vzorky.

    Po type pripojenia je uvedený názov a alias druhej tabuľky. Nasleduje kľúčové slovo BY, po ktorých nasledujú komunikačné podmienky navzájom prepojené logickými operátormi A, ALEBO. Každý výraz v podmienke musí vrátiť boolovskú hodnotu (pravda, nepravda). Ak je prvá tabuľka pripojená k iným tabuľkám ako k druhej, potom sa znova uvedie typ pripojenia atď. Každá z tabuliek zúčastňujúcich sa spojenia môže byť prepojená s inými tabuľkami, čo je znázornené v diagrame štruktúry dotazu. Ak tabuľka nesúvisí s prvou tabuľkou, potom je uvedená bez typu pripojenia, potom môžu nasledovať jej pripojenia atď.

Kľúčové slová a bloky konverzie údajov

  • Skupinový blok— tento blok sa používa na zoskupenie riadkov tabuľky. Riadky sa skombinujú do jedného, ​​ak sú hodnoty polí špecifikované za kľúčovým slovom GROUP BY ukáže byť rovnaký. V tomto prípade sú všetky ostatné polia sčítané, spriemerované, maximalizované alebo minimalizované pomocou agregačných funkcií. Agregátne funkcie sa používajú v bloku poľa. Príklad: Maximum(TableAlias.TableFieldName) AS FieldAlias
  • Stavový blok- v tomto bloku za kľúčovým slovom KDE sú označené podmienené výrazy oddelené logickými operátormi A, ALEBO, aby bol ktorýkoľvek z vybraných riadkov zahrnutý do vzorky, je potrebné, aby všetky podmienky v súhrne mali hodnotu Pravda.
  • KOMBINUJTE VŠETKO— toto kľúčové slovo sa používa na kombinovanie dopytov (operátori VYBRAŤ). Dotazovací jazyk 1C vám umožňuje spojiť niekoľko dopytov do jedného. Aby bolo možné dopyty zlúčiť, musia mať rovnakú množinu polí;
  • «;» - bodkočiarky sa používajú na oddelenie výrokov, ktoré sú na sebe nezávislé VYBERTE SI;
  • INDEX BY— kľúčové slovo sa používa na indexovanie polí špecifikovaných za ním;
  • Súhrnný blok— používa sa na stavbu vzoriek podobných stromom. Pre každé z polí zoskupenia zadaných za kľúčovým slovom BY, vo výbere sa vytvorí samostatný riadok. V tomto riadku sa pomocou agregačných funkcií vypočítajú celkové hodnoty polí zadaných za kľúčovým slovom VÝSLEDKY.

Chcete sa naďalej učiť dopytovací jazyk 1C 8? Potom si prečítajte nasledujúci článok.

Žiadosť . Text = "VYBERTE si | StorageUnits.Link |OD | Directory.usStorageUnits AKO používaťStorageUnits // Príklad 1: porovnanie s prázdnou boolovskou hodnotou: | KDE | StorageUnits.AllowSelectionFromReserveZone = False // Príklad 2. ale ak je táto logická hodnota definovaná, potom je lepšie takto: // podmienka pre zápornú logickú hodnotu: | KDE | NIE Úložné jednotky. Povoliť výber z rezervnej zóny // Príklad 3. výber na základe podmienky prázdneho poľa, ktoré má typ “adresár špecifického typu” | KDE | StorageUnits.ActiveSelectionArea = VALUE(Directory.usSelectionArea.EmptyRef) // Príklad 3a. výber na základe podmienky prázdneho poľa typu „dokument špecifického typu“ | KDE | OurInformationRegister.Document = VALUE(Document.OurDocument.EmptyLink) // Príklad 3b. výber na základe podmienky prázdneho poľa typu „dokumenty rôznych typov“ ( kompozitné pole) | KDE | (OurInformationRegister.Document = VALUE(Document.OurDocument1.EmptyLink) | OR OurInformationRegister.Document = VALUE(Document.OurDocument2.EmptyLink) | ALEBO... (atď. – postupne uvádzame podmienky pre všetky možné typy tohto zloženého poľa) ) // Príklad 4. alebo naopak, ak potrebujete vybrať vyplnenú hodnotu typu "string", pomôže podmienka: |KDE | Storage Unit.Name > """" // Príklad 5. ak potrebujete vybrať dokumenty konkrétneho typu so zloženým typom údajov, napríklad v registri „RunningTasks“, zdroj „Task“ má zložený typ, medzi hodnotami ktorého dokument "Výber" je možný | KDE | EXPRESS(Information RegisterExecutedTasks.Task AS Document.Selection) LINK Document.Selection // Príklad 5a. Ďalší podobný príklad, keď potrebujete vybrať dokumenty konkrétneho typu | VÝBER | KEDY VYJADROVAŤ (ag Korešpondencia dokumentov. DokumentBU AS Dokument. Príjem tovaru a služieb) LINK Dokument. Príjem tovaru a služieb | POTOM ""Prijatie tovaru a služieb"" | KEDY VYJADROVAŤ (ag Korešpondencia dokladov. Dokument BU AS. Predaj tovaru a služieb) LINK Dokument Predaj tovaru a služieb | POTOM ""Predaj tovaru a služieb"" | INÉ """" | KONIEC AKO Zobrazenie dokumentu // Príklad 6. výber podľa podmienky nedefinovanej hodnoty: | KDE | SavedSettings.User = NEDEFINOVANÉ // Príklad 7. výber podľa typu pohybu "Príchod" registra akumulácie, "Výdavky" - podobne): | KDE | RegProductsInRetail.MovementType = VALUE(MovementTypeAccumulation.Incoming) // Príklad 8. Ako naznačiť v požiadavke, že nie je potrebné vykonať požiadavku (napríklad musíte programovo, v závislosti od nejakej podmienky, vrátiť prázdny výsledok požiadavky - Request.Text = StrReplace(Request.Text, "WHERE Doc.Link = &DocumentLink" , "KDE JE KLAMSTVO");). Ak to chcete urobiť, stačí pridať podmienku „Kde je nepravda“. Mimochodom, bez ohľadu na objem údajov požadovaných vo vzorke, takáto požiadavka bude vykonaná okamžite. |KDE JE KLAMSTVO // Príklad 9. Kontrola, či výsledok dotazu obsahuje údaje: Ak nieŽiadosť.Vykonať().Prázdny() Potom // Príklad 10. výber na základe prázdneho dátumu: | KDE | tbStrings.CancellationDate = DATETIME(1; 1; 1)

V tomto článku s vami chceme všetko prediskutovať Funkcie dopytovacieho 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. Bezpochyby 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 požiadaviek 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 Qty.Days";

3. Funkcia VALUE- nastaví konštantné pole s preddefinovaným záznamom z databázy, môžete získať aj 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 . Právnická osoba. Fyzická osoba) AS Fyzická osoba, //preddefinovaný účet | VALUE(Účtovná osnova. Samonosné. Materiály) AS Účet_10" ;

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:

Request.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 Sum - 300 //inak sa žiadosť vráti jednoducho Sum "SELECT | SELECT | WHEN TCReceips.Amount > 7500 | THEN TCReceipts.Amount - 300 | ELSE TCReceipts.Amount | END AS AmountWithDiscount |FROM | Document.Receipt of GoodsServices.Tovars AS TCReceipts";

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 = "SELECT VARIOUS | Sales.Registrar.Number, | SELECT | WHEN Sales.Registrar LINK Document.Consumable | THEN EXPRESS(Sales.Registrar AS Document.Consumable) | ELSE SELECT | WHEN Sales.Registrar LINK Document.Implementation | THEN EXPRESS(Sales.Registrar AS Document.Implementation) | KONIEC | ... | KONIEC AKO Číslo | OD | RegisterAkumulácie.Nákupy AKO Nákupy";

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ú ako výsledok 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 Zostatok | FROM | Directory.Nomenclature AS No. | ĽAVÉ PRIPOJENIE Registrovať Akumulácie. TovarVSkladoch. Zvyšky AKO TovarVSkladochZostatky | ON (TovarVSkladochZostatky =Nomenklatúra)";

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 dopytovacieho 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:

Request.Text = //ak je typ hodnoty záznamníka Príjem dokladu, //potom dotaz vráti "Príjem tovaru", inak "Predaj tovaru" "VYBERTE | VYBERTE | KEDY Zostatky.Registrátor LINK Dokument.Príjem tovaru a Služby | POTOM ""Príjem"" | INAK ""Spotreba"" | KONIEC AKO Typ pohybu | Z | Registra akumulácie. Zostávajúce produkty v skladoch AS Zostávajú" ;

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

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

Príklad použitia:

Request.Text = //získanie celej nomenklatúry, ktorej kód je 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 Účty. 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. 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 | AUTOMATICKÉ OBNOVENIE OBJEDNÁVKY";

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:

dotaz ;

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 | ProductsInWarehouses.Nomenklatúra, | ProductsInWarehouses.Warehouse | |DOSTUPNÉ | SUMA(ProduktyVSkladoch.Na sklade) > 3" ;

12. Stavebníctvo INDEX BY- používa sa na indexovanie poľa dotazu. Dotaz 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.Protistrana, |CompensationRPORemains.Child, | CompensationRPORemains.CompensationRemaining, | Compensation kRRPORemains.AmountForCalcCompRemains |Miesto | Miesto DataTcumains ASFROM. i |WHERE |KompenzáciaRPORemaining.CompensationRemaining<>0 | And CompensationRPORemains.AmountForCalcCompRemaining> 100" ;

14. VÝSLEDKY dizajnu... VŠEOBECNÉ- používa sa na výpočet súčtu; dizajn š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. Zostatky AS Výpočty | SPOLU | SUMA (Zostatok) |Softvér | VŠEOBECNÉ INFORMÁCIE | Typ dohody";

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.

V tomto článku preskúmame tému vnorených tabuliek v dopytovacom jazyku 1C.

V poliach výberu dotazu môžete použiť vnorenú zdrojovú tabuľku dotazu. Napríklad dokument „Poskytovanie služieb“ má tabuľkovú časť Služieb, a tak je možné túto tabuľkovú časť zobraziť aj vo výberovom poli. Teraz uvidíte, ako sa to dá implementovať.

V mojej tréningovej databáze spustím konzolu dotazov, otvorím návrhára dotazov a vyberiem tabuľku „Poskytovanie služieb“.

Rozšírime túto tabuľku

A v ňom vidíme tabuľkovú časť „Služby“.

Vyberieme celú túto časť tabuľky.

Ako vidíte, celá tabuľková časť služby sa úplne presunula do polí.

Upozorňujeme, že tabuľková časť v skutočnosti prichádza ako samostatné pole s názvom „Služby“ a typ bude „Výsledok žiadosti“. Poďme sa naučiť, ako používať vnorenú tabuľku v dotaze.

Nechajme tri polia vnorenej tabuľky a pridajme nejaké polia z hlavičky dokumentu.

Klikneme na OK v dizajnéri a uvidíme, ako bude naša požiadavka vyzerať.

Ako vidíte, v žiadosti je za poľom „Služby“ bodka a vybrané polia sú uvedené v zátvorkách za ňou.

Splňme žiadosť.

Na obrázku vidíme, že všetky vybrané polia v tabuľkovej časti dokumentu sú uvedené oddelené čiarkami v poli „Služby“. Nie všetky dotazovacie konzoly majú displej ako ten na obrázku vyššie; niekedy môže povedať len „ “.

Ďalší zaujímavý bod: do vnorenej tabuľky môžete namiesto polí vložiť hviezdičku, potom sa zobrazia všetky polia tabuľkovej časti. Toto sa nedá urobiť v konštruktore, iba ručne v požiadavke. Žiadosť bude mať nasledujúcu formu:

Pozrime sa, ako bude takáto požiadavka vykonaná.

Jediná vec je, že táto hviezdička sa neuloží, ak otvoríme konštruktor dotazu.

Naučili sme sa, ako vytvoriť dotaz s vnorenou tabuľkou v konzole, teraz sa naučíme, ako použiť vnorenú tabuľku vo výbere

V skutočnosti nie je pri spracovaní dotazu tak ťažké získať prístup k vnorenej tabuľke. Jednoducho pristúpite k výberu podľa názvu vašej tabuľky a získate premennú s typom „Výsledok dopytu“. A potom to spracujete ako normálny výsledok požiadavky: ak chcete, získajte vzorku, ak chcete, urobte upload.

Nižšie je uvedený malý príklad kódu, ktorý funguje s vnorenou tabuľkou:


&Na serveri
Postup FillOnServer()
Žiadosť = Nová požiadavka;
Žiadosť. Text = "VYBERTE si
| Predaj produktu. Odkaz,
| Predaj produktu.Produktov.(
| produkt,
| Množstvo
|OD
| Dokument. Predaj produktov AKO predávať produkty"
;
Načítanie = dotaz. Spustiť (). Vybrať ();
Čau výber. Next() Slučka
TopLine of the Tree = Výpredaj produktov. GetItems();
NewRow = TopRowTree. Pridať ();
Nový riadok. Odkaz = výber. Link;
TableProducts = Výber. Tovar;
SelectionProducts = TableProducts. Vybrať ();
Pri výbere produktov. Next() Slučka
TreeChildRow = Nový riadok. GetItems();
ProductRow = ChildTreeRow. Pridať ();
ProductString. Odkaz = Výber produktu. Produkt;
ProductString. Množstvo = SampleItems. Množstvo ;
EndCycle;
EndCycle;
Koniec procedúry

Dovoľte mi vysvetliť vyššie uvedený kód.

V prvom rade sme dostali lineárny výber a tento výber prejdeme v slučke, v ktorej vytvoríme horný riadok stromu hodnôt (je na formulári) a napíšeme do neho odkaz na náš dokument.

A potom to najzaujímavejšie, dokonca si to môžete pozrieť neskôr v debuggeri sami, obrátime sa na pole Výber produktov a pre pohodlie zapíšte toto pole do samostatnej premennej v TableProducts. Táto premenná je typu „Výsledok dopytu“. A môžete ľahko získať vzorku tohto výsledku. To je to, čo robíme. Zostáva obísť tento výber pomocou nasledujúcej funkcie a cyklu while.

A v tejto slučke budeme označovať výberové polia ako polia vnorenej tabuľky a zapíšeme ich do podriadených riadkov stromu z formulára.

Toto je výsledok, ktorý tento kód vráti

Stále máte otázky?

Zodpovedáte si ich sami, keď si preštudujete môj kurz “Dotazy v 1C pre začiatočníkov”. Kde sa o týchto a mnohých ďalších problémoch diskutuje podrobnejšie. Všetky informácie sú uvedené v jednoduchej a dostupnej forme a sú zrozumiteľné aj pre tých, ktorí nie sú obzvlášť oboznámení s programovaním v 1C.

Promo kód na zľavu 20%: hrW0rl9Nnx

Podporte môj projekt prispením akejkoľvek sumy

Pridajte sa k mojim skupinám.