Vyjadrenie ako číslo v dotaze 1s 8.3. Dokument.Výdavky AS D

Nekompatibilné typy „EXPRESS“.- takáto správa sa objaví, keď sa programátor 1C 8.2 alebo 8.3 pokúša porovnať dva rôzne typy.

Funkcia Express() vám umožňuje previesť hodnotu poľa požiadavky 1C na konkrétny typ. Môže to byť potrebné v dvoch prípadoch:

1. Získajte požadovanú bitovú hĺbku čísla alebo požadovaný počet znakov hodnoty reťazca. Počet znakov pre polia neobmedzeného typu musí byť obmedzený kvôli určitým vlastnostiam.

Získajte 267 1C video lekcií zadarmo:

Napríklad:

EXPRESS(Nomenklatúra.Komentár AKO STRING(300))
EXPRESS(Item.Cena AS NUMBER(15, 2)) AS Sum

2. Preveďte pole zloženého typu na pole s jedným typom. To môže byť potrebné na účely. Ak sa do typovaného poľa dostane hodnota iného typu, systém vráti NULL, preto je vždy potrebné v sekcii „KDE“ dodatočne nastaviť podmienku, ktorá ju obmedzí na operátor REFERENCE.

Napríklad:

VYBERTE SI

EXPRESS(Predaj.Registrátor AKO Dokument.Predaj)

OD

KDE Predaj.Registračný LINK Dokument.Implementácia

Ako sa vyhnúť chybám

Pri nesprávnom použití syntaxe sa môžu vyskytnúť chyby ako „EXPRESS NEKOMPATIBILNÉ TYPY...“.

Napríklad konštrukcia „EXPRESS(“123″ AS A NUMBER(5, 2)) AS A Sum“ sa považuje za chybnú, pretože nie je možné konvertovať z jedného typu na druhý v dotaze pomocou bežných metód.

Ak sa začínate učiť programovanie 1C, odporúčame náš bezplatný kurz (nezabudnite

V tomto článku budeme analyzovať možnosti pretypovania v dopytovacom jazyku 1C, ktorý poskytuje funkcia „Express“.
Pozrime sa na niekoľko možností využitia tejto funkcie.
A prvou možnosťou je zaokrúhľovanie čísel.

Ak to chcete urobiť, použite funkciu Express v nasledujúcom formáte:

Expresné(<Число>ako číslo(<ДлинаЧисла>,<Точность>))

Kde:
číslo— pole, parameter, ktorý sa má zaokrúhliť
LengthNumbers- maximálna dĺžka čísla
Presnosť- presnosť zaokrúhľovania čísel

Parametre, dĺžka a presnosť musia byť kladné celé čísla.
Pozrite si, ako táto funkcia funguje na obrázku nižšie.

Druhým prípadom použitia je odlievanie strún. Veľmi často sa v konfiguráciách používajú reťazce neobmedzenej dĺžky, čo ukladá určité obmedzenia. Nemôžeme napríklad porovnávať reťazce neobmedzenej dĺžky.
V dotaze nižšie má pole Celé meno typ reťazca s neobmedzenou dĺžkou a tento dotaz nebude fungovať.

Aby to fungovalo, musíte previesť pole neobmedzenej dĺžky na reťazec s určitou dĺžkou, a to pomocou funkcie Express v nasledujúcom formáte:

Expresné(<Строка>ako reťazec (<ДлинаСтроки>)

Kde
Dĺžka reťazca- maximálna dĺžka, na ktorú sa struna skráti.
Prerobme dotaz: v podmienke privedieme neobmedzený reťazec na reťazec s určitou dĺžkou. Potom nebudú žiadne chyby.

Zoberme si posledný a povedal by som najdôležitejší variant jeho použitia: pri práci s poľami kompozitného typu.
Nižšie sú uvedené dva dotazy, ktoré používajú polia zloženého typu. Prvý je nesprávny a druhý je správny.

Tie. keď potrebujete získať pole nejakého zloženého typu, vždy získajte hodnotu tohto poľa až po pretypovaní typu pomocou funkcie Express. V tomto prípade bude formát dokumentov a adresárov nasledovný:

Expresné(<Документ>ako dokument.<ИмяТаблицы>)
Expresné(<Справочник>ako adresár.< ИмяТаблицы >)
.

Kde
TableName— názov objektu v .

Pri práci s kompozitnými typmi vždy používajte expresnú funkciu, čo výrazne optimalizuje dopyt.

Ak sa stále „vznášate“ v konštrukciách dopytovacieho jazyka a aj tie najjednoduchšie dotazy vám spôsobujú ťažkosti, potom vám odporúčam môj kurz „Požiadavky v 1C od začiatočníka po profesionála“. Kde sa o týchto a mnohých ďalších problémoch diskutuje podrobnejšie.

Čo je špeciálne na tomto kurze:
Kurz je určený pre tých, ktorí nepoznajú dopytovací jazyk v 1C;
Vzdelávací materiál dobre navrhnuté a ľahko sa učí;
Niekoľko desiatok lekcií;
Užitočné praktické príklady;
Všetky lekcie sú prezentované jasným a jednoduchým jazykom.

Pre mojich čitateľov 25% zľavový kupón: hrW0rl9Nnx

Snažím sa čo najčastejšie vydávať rôzne zaujímavé bezplatné články a videonávody. Preto budem veľmi rád, ak môj projekt podporíte prevodom akejkoľvek sumy:

Akúkoľvek sumu môžete previesť priamo:
Yandex.Money — 410012882996301
Web Money - R955262494655

Pridajte sa k mojim skupinám.

Dotazovací jazyk je jedným zo základných mechanizmov 1C 8.3 pre vývojárov. Pomocou dotazov môžete rýchlo získať akékoľvek údaje uložené v databáze. Jeho syntax je veľmi podobná SQL, existujú však určité rozdiely.

Hlavné výhody dotazovacieho jazyka 1C 8.3 (8.2) oproti SQL:

  • dereferencovanie referenčných polí (premena jednej alebo viacerých bodiek na atribúty objektu);
  • práca s výsledkami je veľmi pohodlná;
  • schopnosť vytvárať virtuálne tabuľky;
  • žiadosť môže byť napísaná v angličtine aj ruštine;
  • schopnosť blokovať údaje, aby sa zabránilo zablokovaniu.

Nevýhody dopytovacieho jazyka v 1C:

  • na rozdiel od SQL vám dotazy v 1C neumožňujú meniť údaje;
  • nedostatok uložených procedúr;
  • nemožnosť prevodu reťazca na číslo.

Zvážte náš mini tutoriál o základných konštrukciách dotazovacieho jazyka 1C.

Vzhľadom na to, že požiadavky v 1C vám umožňujú iba prijímať údaje, každá požiadavka musí začínať slovom „SELECT“. Po tomto príkaze sú označené polia, z ktorých chcete získať údaje. Ak zadáte "*", vyberú sa všetky dostupné polia. Miesto, odkiaľ sa budú údaje vyberať (dokumenty, registre, adresáre a pod.), sa uvádza za slovom „OD“.

V nižšie uvedenom príklade sú názvy celej nomenklatúry vybrané z referenčnej knihy "Nomenklatúra". Za slovom „AKO“ sú uvedené aliasy (názvy) tabuliek a polí.

VYBERTE SI
Nomenclature.Name AS NameNomenklatúra
OD
Adresár Nomenklatúra AS Nomenklatúra

Vedľa príkazu "SELECT" môžete zadať kľúčové slová:

  • RÔZNY. Dotaz vyberie iba riadky, ktoré sa líšia aspoň v jednom poli (bez duplikátov).
  • PRVÁ n, Kde n– počet riadkov od začiatku výsledku, ktorý sa má vybrať. Najčastejšie sa táto konštrukcia používa v spojení s triedením (ORDER BY). Napríklad, keď potrebujete vybrať určitý počet najnovších dokumentov podľa dátumu.
  • POVOLENÝ. Tento dizajn umožňuje vybrať z databázy len tie záznamy, ktoré sú dostupné aktuálnemu používateľovi. Základné použitie tohto kľúčové slovo používateľ dostane chybové hlásenie, ak sa pokúsi vyhľadať záznamy, ku ktorým nemá prístup.

Tieto kľúčové slová možno použiť všetky spolu alebo samostatne.

PRE ZMENU

Táto klauzula uzamkne údaje, aby sa predišlo konfliktom. Zamknuté údaje nebudú načítané z iného pripojenia až do konca transakcie. V tejto klauzule môžete zadať konkrétne tabuľky, ktoré chcete uzamknúť. V opačnom prípade budú všetky zablokované. Konštrukcia je relevantná len pre režim automatického blokovania.

Najčastejšie sa pri prijímaní zostatkov používa klauzula „ZA ZMENU“. V skutočnosti, keď v programe pracuje niekoľko používateľov súčasne, zatiaľ čo jeden prijíma zostatky, druhý ich môže meniť. V tomto prípade už nebude výsledný zostatok správny. Ak s týmto návrhom zablokujete údaje, potom kým prvý zamestnanec nedostane správny zostatok a nevykoná s ním všetky potrebné manipulácie, druhý zamestnanec bude musieť počkať.

VYBERTE SI
Vzájomné vyrovnania. Zamestnanec,
Vzájomné vyrovnania Suma Vzájomné vyrovnania Zostatok
OD
Register akumulácie. Vzájomné vyrovnania SO zamestnancami. Zostatky AKO vzájomné dohody
PRE ZMENU

KDE

Konštrukcia je potrebná na uloženie akéhokoľvek výberu na vyložené dáta. V niektorých prípadoch získavania údajov z registrov je rozumnejšie predpísať podmienky výberu v parametroch virtuálnych tabuliek. Pri použití „WHERE“ sa najskôr získajú všetky záznamy a až potom sa aplikuje výber, čo výrazne spomalí dopyt.

Nasleduje príklad žiadosti o získanie kontaktných osôb s konkrétnou pozíciou. Parameter výberu má nasledujúci formát: &Názov parametra (názov parametra je ľubovoľný).

VÝBER (prípad)

Konštrukcia vám umožňuje špecifikovať podmienky priamo v tele požiadavky.

V nižšie uvedenom príklade bude „Dodatočné pole“ obsahovať text v závislosti od toho, či je dokument odoslaný alebo nie:

VYBERTE SI
VstupnéT&U.Link,
VOĽBA
KEDY
POTOM "Dokument odoslaný!"
ELSE "Dokument nebol odoslaný..."
KONIEC AKO ĎalšiePole
OD
Dokument. Príjem tovaruSlužby AS Príjem VOP

PRIPOJTE SA

Spojenia spájajú dve tabuľky určitou podmienkou prepojenia.

PRIPOJENIE VĽAVO/VPRAVO

Podstatou ĽAVÉHO spojenia je, že prvá špecifikovaná tabuľka je prevzatá úplne a druhá je k nej pripojená podmienkou spojenia. Ak neexistujú žiadne záznamy zodpovedajúce prvej tabuľke v druhej tabuľke, potom sa ich hodnoty nahradí NULL. Jednoducho povedané, hlavná tabuľka je prvá špecifikovaná tabuľka a údaje druhej tabuľky (ak existujú) sú už nahradené jej údajmi.

Napríklad potrebujete získať položky položiek z dokladov „Príjem tovaru a služieb“ a ceny z informačného registra „Ceny položiek“. V tomto prípade, ak sa nenájde cena akejkoľvek pozície, nahraďte namiesto toho NULL. Vyberú sa všetky položky z dokladu bez ohľadu na to, či majú cenu alebo nie.

VYBERTE SI
Potvrdenie o nomenklatúre T&U.
Ceny.Cena
OD
Doklad.Prijatie tovaruSlužby.Tovar AS Príjem VOP
VNÚTORNÉ SPOJENIE
ON Príjem otázok a odpovedí. Nomenklatúra = Ceny. Nomenklatúra

V PRÁVE je všetko presne naopak.

ÚPLNÉ PRIPOJENIE

Tento typ spojenia sa líši od predchádzajúcich v tom, že sa vrátia všetky záznamy prvej aj druhej tabuľky. Ak sa v prvej alebo druhej tabuľke pre zadanú podmienku prepojenia nenájdu žiadne záznamy, namiesto toho sa vráti NULL.

Pri použití úplného spojenia v predchádzajúcom príklade sa vyberú všetky položky položiek z dokladu Príjem tovaru a služieb a všetky najnovšie ceny z evidencie Ceny položiek. Hodnoty nenájdených záznamov v prvej aj v druhej tabuľke budú NULL.

VNÚTORNÉ SPOJENIE

Rozdiel medzi VNÚTORNÝM spojením a ÚPLNÝM spojením je v tom, že ak sa záznam nenájde aspoň v jednej z tabuliek, dotaz ho vôbec nezobrazí. V dôsledku toho sa vyberú len tie položky položiek z dokladu Príjem tovaru a služieb, pre ktoré sú záznamy v registri informácií o cenách položiek, ak v predchádzajúcom príklade nahradíme PLNÉ za INTERNÉ.

GROUP BY

Zoskupovanie v dotazoch 1C vám umožňuje zbaliť riadky tabuľky (zoskupovacie polia) podľa určitej spoločnej funkcie (zoskupovacie polia). Zoskupovacie polia je možné zobraziť iba pomocou agregačných funkcií.

Výsledkom nasledujúceho dotazu bude zoznam typov položiek s ich maximálnymi cenami.

VYBERTE SI
,
MAX(Cena.Price) AS Cena
OD

GROUP BY
Ceny.Nomenklatúra.TypNomenklatúra

VÝSLEDKY

Na rozdiel od zoskupovania sa pri použití súčtov zobrazujú všetky záznamy a sú k nim už pridané riadky súčtov. Zoskupenie zobrazuje iba zovšeobecnené záznamy.

Výsledky možno zhrnúť pre celú tabuľku (pomocou kľúčového slova „VŠEOBECNÉ“), pre viaceré polia, pre polia s hierarchickou štruktúrou (kľúčové slová „HIERARCHIA“, „LEN HIERARCHIA“). Pri sumovaní nie je potrebné používať agregačné funkcie.

Zvážte príklad podobný vyššie uvedenému s použitím zoskupovania. V tomto prípade výsledok dotazu vráti nielen zoskupené polia, ale aj podrobné záznamy.

VYBERTE SI
Ceny.Nomenklatúra.Typ nomenklatúry AS Typ nomenklatúry,
Ceny. Cena AS Cena
OD
RegisterInformation.CenyNomenklatúra.SliceLast AS Ceny
VÝSLEDKY
MAXIMUM (cena)
BY
Nomenklatúra typu

MAJÚCE

Tento operátor je podobný operátoru WHERE, ale používa sa len pre agregované funkcie. Ostatné polia ako tie, ktoré používa tento operátor, musia byť zoskupené. Operátor "WHERE" nie je použiteľný pre agregované funkcie.

V nižšie uvedenom príklade sú maximálne ceny položiek vybrané, ak presahujú 1 000, zoskupené podľa typu položky.

VYBERTE SI

MAX(Cena.Price) AS Cena
OD
RegisterInformation.CenyNomenklatúra.SliceLast AS Ceny
GROUP BY
Ceny.Nomenklatúra.TypNomenklatúra
MAJÚCE
MAX (Ceny. Cena) > 1 000

TRIEDIŤ PODĽA

Operátor "ORDER BY" zoradí výsledok dotazu. Aby sa zabezpečilo, že záznamy budú na výstupe v konzistentnom poradí, používa sa AUTO-ORDER. Primitívne typy sú zoradené podľa obvyklé pravidlá. Typy odkazov sú zoradené podľa GUID.

Príklad získania zoznamu zamestnancov zoradených podľa mena:

VYBERTE SI
Zamestnanci. Meno AS Meno
OD
Adresár Zamestnanci AS Zamestnanci
TRIEDIŤ PODĽA
názov
AUTOMATICKÁ OBJEDNÁVKA

Ďalšie konštrukcie dopytovacieho jazyka 1C

  • SPOJIŤ- výsledky dvoch dopytov v jednom.
  • ZJEDNITE VŠETKÝCH– podobne ako JOIN, ale bez zoskupovania rovnakých riadkov.
  • PRÁZDNY TABUĽ- niekedy sa používa pri spájaní dopytov na určenie prázdnej vnorenej tabuľky.
  • PUT- vytvorí dočasnú tabuľku na optimalizáciu zložitých 1C dotazov. Takéto požiadavky sa nazývajú dávkové požiadavky.

Funkcie jazyka dopytu

  • SUBSTRING skráti reťazec zo zadanej pozície o zadaný počet znakov.
  • ROK… DRUHÝ umožňujú získať zvolenú hodnotu číselného typu. Vstupným parametrom je dátum.
  • ZAČIATOK OBDOBIA A KONIEC OBDOBIA sa používajú pri práci s dátumami. Typ obdobia (DEŇ, MESIAC, ROK atď.) je špecifikovaný ako dodatočný parameter.
  • PRIDAŤ umožňuje pridať alebo odpočítať od dátumu zadaný čas určitého typu (SEKUND, MINÚTA, DEŇ atď.).
  • DÁTUMOVÝ ROZDIEL určuje rozdiel medzi dvoma dátumami s uvedením typu výstupnej hodnoty (DEŇ, ROK, MESIAC atď.).
  • ISNULL nahradí chýbajúcu hodnotu zadaným výrazom.
  • PREZENTÁCIA a PREZENTAČNÉ ODKAZY získajte reťazcovú reprezentáciu zadaného poľa. Používajú sa pre akékoľvek hodnoty a iba referenčné hodnoty.
  • TYPE, VALUE TYPE sa používajú na určenie typu vstupného parametra.
  • LINK je logický operátor porovnávania pre typ hodnoty atribútu.
  • EXPRESNÉ sa používa na prevod hodnoty na požadovaný typ.
  • DÁTUM ČAS získa hodnotu typu "Dátum" z číselných hodnôt (rok, mesiac, deň, hodina, minúta, sekunda).
  • VÝZNAM v požiadavke 1C sa používa na špecifikáciu preddefinovaných hodnôt - adresárov, enumerácií, plánov typov charakteristík. Príklad použitia: " Kde LegalIndividual = Hodnota(Enumeration.LegalIndividual.Individual)«.

Query Builder

Na vytváranie dotazov s 1C existuje veľmi pohodlný vstavaný mechanizmus - návrhár dotazov. Obsahuje tieto hlavné karty:

  • "Tabuľky a polia" - obsahuje polia, ktoré sa majú vybrať, a ich zdroje.
  • "Odkazy" - popisuje podmienky pre konštrukciu CONNECTION.
  • "Zoskupovanie" - obsahuje popis konštrukcií zoskupení a nimi zhrnutých polí.
  • "Podmienky" - zodpovedá za výber údajov v dopyte.
  • "Advanced" - dodatočné parametre dopytu, ako sú kľúčové slová príkazu "SELECT" atď.
  • „Joins / Aliases“ - sú uvedené možnosti spájania tabuliek a sú nastavené aliasy (konštrukt „HOW“).
  • "Objednávka" - je zodpovedná za triedenie výsledkov dopytov.
  • "Totals" - podobne ako záložka "Grouping", ale používa sa pre konštrukciu "TOTALS".

Samotný text žiadosti je možné zobraziť kliknutím na tlačidlo „Žiadosť“ v ľavom dolnom rohu. V tomto formulári sa dá opraviť ručne alebo skopírovať.


Konzola dotazov

Ak chcete rýchlo zobraziť výsledok dotazu v režime „Enterprise“ alebo ladiť zložité dotazy, použite . Napíše sa doň text dotazu, nastavia sa parametre a zobrazí sa jeho výsledok.

Konzolu dotazov si môžete stiahnuť na disku ITS alebo prostredníctvom .

NULL nie je nič iné ako absencia hodnoty. Mnohí si ho mýlia s hodnotou „0“ typu čísla, prázdnou referenciou na nejaký objekt alebo s prázdnym reťazcom. Táto mylná predstava spôsobuje veľa chýb.

Hodnota NULL sa zobrazí, ak dotaz odkazuje na neexistujúce pole, vlastnosť alebo nefunkčný odkaz.

Založené na SQL, ktoré vám neumožňuje testovať NULL s pravidelnou rovnosťou. Nižšie sú uvedené dva spôsoby, ako skontrolovať NULL v 1C 8.3.

Funkcia dopytovacieho jazyka 1C 8.3 IS NULL() má dva vstupné parametre:

  • výraz, ktorý sa má skontrolovať;
  • náhradný výraz.

Ak je testovaná hodnota NULL, potom táto funkcia vráti hodnotu náhradného výrazu. Ak hodnota nie je NULL, vráti sa kontrolovaný výraz.

Nižšie je uvedený príklad. Z dokladu „Príjem tovaru a služieb“ vyberie všetky skladové položky tabuľkovej časti tovaru. Pomocou ľavého spoja je každá položka označená poslednou cenou z informačného registra "Ceny položiek".

V tomto prípade môže nastať situácia, že na niektorú pozíciu jednoducho nemusí byť v registri žiadna cena. V tomto prípade nám funkcia ISNULL vráti obvyklú nulu. Ak ho nepoužívate, pri pokuse o vykonanie aritmetických operácií v poli "Cena" s hodnotou NULL sa zobrazí chyba.

VYBERTE SI

ISNULL(Ceny.Cena, 0) AS ActualPrice
OD



KDE

V príkaze SELECT JE NULL

Analóg funkcie ISNULL() je "IS NULL", ktorý sa používa v príkaze SELECT a kontroluje, či je hodnota NULL. "IS" v tomto prípade znamená rovnosť a dotaz z predchádzajúceho príkladu by vyzeral takto:

VYBERTE SI
Produkty. Nomenklatúra AKO Produkt,
VOĽBA
KEĎ Ceny. Cena je NULL
POTOM 0
INÉ Ceny.Cena
KONIEC AKO Skutočná cena
OD
Dokument.Prijatý tovarSlužby.Tovar AS Tovar
ĽAVÉ PRIPOJENIE
Tovar PO.Nomenklatúra = Ceny.Nomenklatúra
KDE
Goods.Link = &LinkToDocument

Rozdiely medzi funkciou ISNULL() a funkciou IS NULL

Ako môžete vidieť z predchádzajúcich príkladov, dotaz vracia rovnaké údaje v oboch prípadoch. Funkcia ISNULL() je skratka pre SELECT WHEN...IS NULL...END, ale stále je preferovaná z nasledujúcich dôvodov:

  1. Funkcia ESTNULL() optimalizuje dotaz. Číta sa raz, takže pri kontrole zložitého výrazu bude dopyt prebiehať rýchlejšie.
  2. Funkcia ESTNULL() skracuje konštrukciu, vďaka čomu je dotaz čitateľnejší.
  3. Keď sa vykoná funkcia ESTNULL(), náhradný výraz sa skonvertuje na typ výrazu, ktorý sa kontroluje pre typy typov reťazcov (na dĺžku reťazca) a číselné typy (na bitovú hĺbku).

V tomto článku chceme s vami všetkými diskutovať funkcie dopytovacieho jazyka 1s, a konštrukcie dotazovacieho jazyka. Aký je rozdiel medzi funkciou a štruktúrou? Funkcia sa volá so zátvorkami a možnými parametrami v nich a konštrukcia je napísaná bez zátvoriek. Bezpochyby všetky konštrukcie a funkcie dopytovacieho jazyka 1s 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.

Funkcie jazyka dotazu 1s

Vzhľadom k tomu, jasný popis funkcie dopytovacieho jazyka 1s je oveľa menej bežné ako popis štruktúr, rozhodli sme sa začať pozerať na funkcie. Teraz poďme analyzovať každý z nich samostatne, opísať 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 dvoch dátumov 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 | DATE-DIFFERENCE(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ť nulovú referenciu akéhokoľvek typu.

Syntax: VALUE(<Имя>)

Príklad použitia:

Query.Text = "SELECT //preddefinovaný prvok | VALUE(Currency.Dollar.Catalog.Dollar) AS dolár, //prázdna referencia | VALUE(Document.IncomingGoodsServices.EmptyReference) AS Príjem, //hodnota prevodu | VALUE(Transfer.LegalIndividual . Jednotlivec) AS Jednotlivec, //preddefinovaný účet | VALUE(Účtovná tabuľka.Samonosné.Materiály) AS Účet_10" ;

4. Funkcia SELECT- máme analógovú konštrukciu 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, //preto, ak sa podmienka spustí, funkcia //vráti sumu - 300 //v opačnom prípade žiadosť jednoducho vráti Čiastku "SELECT | SELECT | WHEN PMIncome.Amount > 7500 | THEN PTReceipt.Amount - 300 | ELSE PTReceipt.Amount | END AS Amount Discounted |FROM | Document.ReceiptofGoodsServices.Goods AS";PTReceipts

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.registra.predaja, | VYBERTE | KEĎ REF. REF. predaj.Výdavok | THEN EXPRESS(Registrátor predaja AKO doklad.Výdavok) | ELSE VYBERTE | KEĎ REF.Registr.predajca. doklad.Implementácia | THEN EXPRESS(Sales.Registrar AS Document.Release) | KONIEC | ... | KONIEC AKO Číslo | OD | Register akumulácie.Nákupy AKO Nákupy";

Existuje ešte variant použitia funkcie EXPRESS v poliach zmiešaných typov, kde sa stretávajú? Najjednoduchším príkladom je „Registrátor“ pre akýkoľvek register. Prečo by sme teda mali 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, musíme zadať explicitný typ pomocou funkcie EXPRESS

Príklad použitia:

Query.Text = "CHOOSE | EXPRESS(Nomenclature.Comment AS String(300)) AS Comment, | EXPRESS(Nomenclature.Sum AS Number(15,2)) AS Sum |FROM | Reference.Nomenclature AS Nomenclature";

6. Funkcia ISNULL(alternatívny pravopis IS NULL) - ak je pole typu NULL, potom je nahradené druhým parametrom funkcie.

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

Príklad použitia:

Všimnite si tiež, že je žiaduce VŽDY nahradiť typ NULL nejakou hodnotou, pretože porovnanie s NULL sa vždy vyhodnotí ako FALSE, aj keď porovnávate NULL s NULL. Hodnoty NULL sa najčastejšie vytvárajú ako výsledok spojení tabuliek (všetky typy spojení okrem vnútorných).

Query.Text = //Vyberte celú položku a zostatky na nej //ak v niektorej položke nie je zostatok, potom bude pole //NULL, ktoré bude nahradené hodnotou 0 "SELECT | No.Reference, | ISNULL(Zostáva tovar na sklade.Zostáva na sklade, 0) AKO Zostatok | Z | Adresár. Nomenklatúra AKO Nom | LEFT JOIN Register akumulácie.

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

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

Príklad použitia:

Query.Text = "SELECT | REPRESENTATION(Free RemainsRemains.Nomenclature) AS Nomenklatúra, | REPRESENTATION(FreeRemainsRemains.Warehouse) AS Warehouse, | FreeRemainsRemains.AvailableRemains |FROM | Accumulation Register.FreeRemains.Remains AS FreeRemains";

Konštrukcie v dopytovacom jazyku 1s

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

1. Stavebný LINK- je logický operátor kontroly typu odkazu. Najčastejšie sa vyskytuje pri testovaní poľa zloženého typu pre konkrétny typ. Syntax: LINK<Имя таблицы>

Príklad použitia:

Query.Text = //ak je typ hodnoty registrátora Príjem dokladu, //potom dotaz vráti "Došlý tovar", inak "Predaj tovaru" "VYBERTE | VYBERTE | KEĎ Zostatky.Registrátor LINK Dokument.Došlý tovarSlužby | POTOM ""Prichádzajúce" | ELSE "Výdavky" | KONIEC AKO Typ pohybu | OD | Register hromadenia. Zvyšky tovaru v skladoch AS Zvyšky ";

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

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

Príklad použitia:

Query.Text = //získame celú nomenklatúru, ktorej kód je v rozsahu od 1 do 100 "SELECT | Nomenclature.Reference |FROM | Catalog.Nomenclature AS Nomenclature |WHERE | Nomenclature.Code BETWEEN 1 AND 100" ;

3. Konštrukcia B a B HIERARCHIE- skontrolujte, či je hodnota v odovzdanom zozname (polia, tabuľky hodnôt atď. môžu byť odovzdané ako zoznam). Operátor IN HIERARCHY umožňuje zobraziť hierarchiu (príklad použitia PlanAccounts).

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

Príklad použitia:

Query.Text = // vyberte všetky podúčty účtu "SELECT | Samonosný. Prepojiť AS účet | FROM | Plán účtov. Samonosný AS Samonosný | WHERE | Samonosný. Odkaz V HODNOTE HIERARCHIE( Rozpis účtov. Samonosné. Tovar)";

4. Stavebné LIKE- táto funkcia nám umožňuje porovnávať reťazec so vzorom reťazca.

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

Možnosti šablóny riadkov:

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

Jedna ľubovoľná postava.

[...] - každý jeden znak alebo postupnosť znakov uvedených v hranatých zátvorkách. Enumerácia môže obsahovať rozsahy, ako napríklad a-z, čo znamená akýkoľvek znak 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ájdi celú nomenklatúru, ktorá obsahuje koreň TABUR a začína //buď malým alebo veľkým písmenom t "SELECT | Nomenclature.Reference |FROM | Directory.Nomenclature AS Nomenclature |WHERE | Tovar.Name LIKE ""[Тт ]abur%""" ;

5. Dizajn POVOLENÝ- tento výpis umožňuje vybrať z databázy len tie záznamy, ku ktorým má volajúci právo čítať. 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:

Query.Text = "VYBRAŤ POVOLENÉ | Protistrany. Referencia | Z | Adresár. Protistrany AKO Protistrany";

6. Konštrukcia RÔZNA- umožňuje vybrať záznamy, v ktorých nie sú žiadne opakované záznamy.

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

Príklad použitia:

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

Konštrukt DIFFERENT možno použiť aj s operátorom POVOLENÝ a inými operátormi.

Príklad použitia:

Query.Text = //vyberie rôzne záznamy, ku ktorým má čitateľ práva "VYBRAŤ POVOLENÉ INÉ | Dodávatelia.Názov |FROM | Adresár.Dodávatelia AS Dodávatelia";

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

Syntax: FIRST<число>

Príklad použitia:

Query.Text = //vyberte prvé 4 GTD čísla z adresára "SELECT THE FIRST 4 | GTD Numbers.Reference |FROM | Catalog.GTE Numbers AS GTD Numbers";

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

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

Príklad použitia:

Query.Text = "SELECT | FreeRemainsRemains.Nomenklatúra, | FreeRemainsRemains.Warehouse, | FreeRemainsRemains.AvailableRemains |FROM | Akumulačný register.FreeRemains.Remains AS FreeRemainsRemains |NA ZMENU |

9. Štruktúra OBJEDNAŤ PODĽA- triedi údaje podľa konkrétneho poľa. Ak je pole odkaz, potom pri nastavovaní príznaku AUTOMATICKÁ OBJEDNÁVKA budú zoradené podľa reprezentácie odkazu, ak je príznak vypnutý, potom sa odkazy zoradia podľa seniority adresy odkazu v pamäti.

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

Príklad použitia:

Query.Text = "SELECT | FreeRemainsRemains.Remains AS Nomenklatúra, | FreeRemainsRemains.Warehouse AS Warehouse, | FreeRemainsRemains.In StockRemaining |FROM | Akumulačný register.FreeRemains.Remains AS FreeRemainsRemains | | ORDER BY | Nomenklatúra |

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

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

Príklad použitia:

Query.Text = "SELECT | ItemsInWarehouse.Nomenclature AS Nomenklatúra, | ItemsInWarehouse.Warehouse, | SUM(ItemsInWarehouse.InStock) AS InStock |FROM |

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:

dotaz |SKUPINA PODĽA | Tovar v skladoch.Nomenklatúra, | Tovar v skladoch.Sklad | |MÁ | SUMA(Tovar v skladoch.Na sklade) > 3" ;

12. INDEX PODĽA konštrukcie- používa sa na indexovanie poľa dotazu. Dokončenie indexovaného dotazu 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 | Názov Tz.OS, | Číslo priečinka Tz, | Tz.CodeOS, | Tz.Term, | Tz.Type |PUT DataTz |OD | &Tz AKO Tz | | INDEX PODĽA | Názov Tz.OS , | Tz .CodeOS";

13. Stavba KDE- umožňuje uložiť podmienku na ľubovoľné polia výberu. Do výsledku budú zahrnuté len záznamy, ktoré spĺňajú podmienku.

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

Príklad použitia:

Query.Text = //vyberie všetky záznamy s CompensationRemainder<>0 a // SumaFor Calc.CompBalance > 100 "SELECT | Kompenzácia RPO zostatky.Protistrana, | Kompenzačné RPO zostatky.Dieťa, | Kompenzačné RPO zostatky. Kompenzačný zostatok, | Kompenzačné RPO zostatky. AmountFor Calc.Comp Balance | PLACE DataTz | FROM | Register akumulácie. Kompenzácia RP. Zostatky AS Kompenzácia R zostatky | KDE | Kompenzačné zostatky RPO. Kompenzačný zostatok<>0 | A zostatky kompenzácie RPO. Suma pre zostatok CalcComp > 100" ;

14. VÝSLEDKY dizajnu ... GENERÁLNE- používa sa na výpočet súčtov, návrh špecifikuje polia, podľa ktorých sa budú vypočítavať súčty a agregačné funkcie aplikované na polia súčtu. Pri použití súčtov pre každé pole podľa konštrukcie TOTALS sú údaje zoskupené. Existuje voliteľný konštrukt GENERAL, jeho použitie poskytuje aj ďalšie zoskupovanie. Nižšie si môžete pozrieť príklad výsledku dopytu.

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

Príklad použitia:

Query.Text = "VYBERTE | Vyrovnania. Dohoda s protistranou. Typ dohody AS Typ zmluvy, | Vyrovnania. Dohoda s protistranou AS dohoda, | Vyrovnania. Protistrana, | Vyrovnania. Suma vzájomných vyrovnaní Zostatok AKO Zostatok | OD | | Softvér | VŠEOBECNÉ INFORMÁCIE, | Typ zmluvy";

Zoskupenia, ktoré sa vytvorili počas vykonávania požiadavky, sú na obrázku zakrúžkované, horná časť odkazuje na sekciu GENERAL a druhá na pole ContractContractorTypeContract.