Bezpečnosť.  Nastaviť.  internet.  zotavenie.  Inštalácia

Ako získať typ (typ) dokumentu v žiadosti? Napíšte žiadosť o kontrolu 1c.

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. 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É SPOJENIE Registrovať Akumulácie. TovarVSkladoch.Zostatky 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:

Query.Text = "SELECT | REPRESENTATION(FreeRemainingRemains.Nomenclature) AS Nomenklatúra, | REPRESENTATION(FreeRemainingRemaining.Warehouse) AS Warehouse, | FreeRemainingRemaining.InStockRemaining |FROM |Akumulácia Register.FreeRemaining.Remaining AS FreeRemaining";

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 AKO Typ pohybu | Z | Registra akumulácie. Zostávajúce produkty v skladoch AKO 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 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 Úč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.

Dotazovací jazyk 1C je jedným z hlavných rozdielov medzi verziami 7.7 a 8. Jedným z najdôležitejších bodov pri učení sa programovania 1C je dotazovací jazyk. V 1C 8.3 sú dotazy najsilnejším a najúčinnejším nástrojom na získavanie údajov. Dotazovací jazyk vám umožňuje získať informácie z databázy pohodlným spôsobom.

Samotná syntax veľmi pripomína klasický T-SQL, až na to, že v 1C pomocou dopytovacieho jazyka môžete prijímať údaje iba pomocou konštrukcie Select. Jazyk podporuje aj zložitejšie konštrukcie, napríklad (požiadavka v požiadavke). Dotazy v 1C 8 je možné písať v azbuke aj latinke.

V tomto článku sa pokúsim hovoriť o hlavných kľúčových slovách v dopytovacom jazyku 1C:

  • vyberte si
  • povolenej
  • rôzne
  • expresné
  • najprv
  • pre zmenu
  • význam
  • typ hodnoty (a operátor REFERENCE)
  • výber
  • skupina podľa
  • majúce
  • ISNULL
  • Áno NULL
  • prípojky - pravé, ľavé, vnútorné, plné.

Rovnako ako niekoľko malých trikov jazyka 1C, pomocou ktorých môžete optimálne zostaviť text požiadavky.

Na ladenie dotazov v systéme 1C 8.2 je k dispozícii špeciálny nástroj - konzola dotazov. Popis si môžete pozrieť a stiahnuť pomocou odkazu -.

Pozrime sa na najdôležitejšie a najzaujímavejšie operátory dopytovacieho jazyka 1C.

VYBRAŤ

V dopytovacom jazyku 1C Enterprise 8 každý dopyt začína kľúčovým slovom VYBERTE SI. V jazyku 1C neexistujú žiadne konštrukty UPDATE, DELETE, CREATE TABLE, INSERT; tieto manipulácie sa vykonávajú v objektovej technológii. Jeho účelom je iba čítanie údajov.

Napríklad:

VYBERTE SI
Aktuálny názov adresára
OD
Directory.Nomenclature AS Current Directory

Dotaz vráti tabuľku s názvami položiek.

V blízkosti konštrukcie VYBERTE SI môžete nájsť kľúčové slová PRE ZMENU, POVOLENÝ, RÔZNY, NAJPRV

POVOLENÝ— vyberie z tabuľky len záznamy, na ktoré má aktuálny používateľ práva.

RÔZNY— znamená, že výsledok nebude obsahovať duplicitné riadky.

VÝBER (prípad)

Veľmi často je tento dizajn programátormi podceňovaný. Príklad jeho použitia:

Aktuálny názov adresára,

KEĎ Aktuálny Directory.Service POTOM

"servis"

KONIEC AKO ZOBRAZIŤ Nomenklatúru

Directory.Nomenclature AS Current Directory

Príklad vráti textovú hodnotu v poli „Typ položky“ – „Produkt“ alebo „Služba“.

KDE

Dizajn dotazovacieho jazyka 1C, ktorý vám umožňuje uložiť výber na prijaté údaje. Upozorňujeme, že systém prijíma všetky údaje zo servera a až potom sa vyberie na základe tohto parametra.

VYBERTE SI
Adresár.Názov
OD
Aktuálny adresár.Nomenklatúra AS aktuálny adresár
WHERE CurrentDirectory.Service = TRUE

V príklade vyberieme záznamy, pre ktoré je hodnota atribútu „Service“ nastavená na „True“. V tomto príklade by sme si mohli vystačiť s nasledujúcou podmienkou:

"KDE JE SLUŽBA"

V podstate vyberáme riadky, v ktorých sa výraz za kľúčovým slovom rovná „pravda“.

Vo výrazoch môžete použiť priame podmienky:

WHERE kód = "005215"

Pomocou operátora „VALUE()“ v podmienkach použite prístup k preddefinovaným prvkom a enumeráciám v požiadavke 1C:

WHERE Typ položky = Hodnota (Vyčíslenie. Typy položiek. Produkt)

Časové hodnoty môžu byť špecifikované nasledovne:

WHERE Dátum prijatia > DATETIME(2012,01,01):

Najčastejšie sú podmienky špecifikované ako parametre odovzdané do požiadavky:

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

WHERE NomenclatureGroup= &NomenclatureGroup

Na typ atribútu možno uložiť podmienku, ak ide o zložený typ:

Ak potrebujete obmedziť výber zo zoznamu hodnôt alebo poľa, môžete urobiť nasledovné:

KDE je register zhromažďovania Registrátor B (&Zoznam dokumentov na výber)

Podmienka môže byť aj zložitá a pozostáva z niekoľkých podmienok:

WHERE Dátum prijatia > DATETIME(2012,01,01) AND NomenclatureGroup= &NomenclatureGroup AND NOT Service

GROUP BY

Návrh dotazovacieho jazyka 1C 8.2 použitého na zoskupenie výsledku.

Napríklad:

VYBERTE SI
Príjem tovaru a služieb Tovar.
SUM(Príjem tovaruSlužbyTovar.Množstvo) AS Množstvo,
SUM(Príjem tovaruSlužbyTovar.Suma) AS Suma
OD
Dokument. Prevzatie tovaru a služieb Tovar AKO Prevzatie tovaru a služieb Tovar

GROUP BY
Príjem tovaruSlužbyTovar.Tovar

Táto požiadavka zhrnie všetky príjmy podľa množstva a množstva podľa položky.

Okrem kľúčového slova SUM Môžete použiť ďalšie agregačné funkcie: MNOŽSTVO, POČET RÔZNYCH, MAXIMÁLNE, MINIMÁLNE, PRIEMERNÝ.

MAJÚCE

Dizajn, na ktorý sa často zabúda, no je veľmi dôležitý a užitočný. Umožňuje špecifikovať výber formou súhrnnej funkcie, v návrhu to nie je možné KDE.

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

VYBERTE SI
Príjem tovaru a služieb Tovar.
SUM(Príjem tovaruSlužbyTovar.Množstvo) AS Množstvo,
SUM(Príjem tovaruSlužbyTovar.Suma) AS Suma
OD
Dokument. Prevzatie tovaru a služieb Tovar AKO Prevzatie tovaru a služieb Tovar

GROUP BY
Príjem tovaru a služieb Tovar.tovar

SUM(Príjem tovaruSlužbyTovar.Množstvo) > 5

Vyberieme teda počet produktov, ktorých prišlo viac ako 5 kusov.

VÝZNAM()

Napríklad:

WHERE banka = hodnota(adresár.banky.prázdny odkaz)

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

WHERE Typ položky = Hodnota (Enumeration.Item Types.Service)

TYPE v žiadosti

Typ údajov možno skontrolovať pomocou funkcií TYPE() a VALUETYPE() alebo pomocou logického operátora REFERENCE.

EXPRESNÉ()

Operátor Express v dotazoch 1C sa používa na konverziu dátových typov.

Syntax: EXPRESNÉ(<Выражение>AKO<Тип значения>)

Pomocou neho môžete previesť hodnoty reťazca na dátum alebo referenčné hodnoty na údaje reťazca atď.

V praktických aplikáciách sa operátor Express() veľmi často používa na prevod polí neobmedzenej dĺžky, pretože polia neobmedzenej dĺžky nemožno vyberať, zoskupovať atď. Ak takéto polia nie sú skonvertované, zobrazí sa chyba Nemôžete porovnávať polia neobmedzenej dĺžky a polia nekompatibilných typov.

VYBERTE SI
ContactInformation.Object,
EXPRESS(ContactInfo.View AS ROW(150)) AS View
OD
Register informácií Kontaktné informácie AKO Kontaktné informácie

GROUP BY
EXPRESS(ContactInfo.Representation AS ROW(150)),
ContactInformation.Object

ISNULL (ISNULL)

Celkom užitočná funkcia dopytovacieho jazyka 1C, ktorá kontroluje hodnotu v zázname a či je rovnaká NULOVÝ, To vám umožní nahradiť ho vlastnou hodnotou. Najčastejšie sa používa pri získavaní virtuálnych tabuliek zostatkov a obratov s cieľom skryť sa NULOVÝ a vložte jasnú 0 (nulu).

ISNULL(Predmesačné dane. Benefit AppliedFSS, 0)

Takáto funkcia dopytovacieho jazyka 1C ISNULL vráti nulu, ak neexistuje žiadna hodnota, čím sa zabráni chybe.

PRIPOJTE SA

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Ý.

Príklad ľavého spojenia v požiadavke 1C:

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

RIGHT JOIN v jazyku 1C 8.3ú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:

Ú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 Protistrany AS Klienti

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.

Záver

Toto je len malá časť syntaxe z dopytovacieho jazyka 1C 8; v budúcnosti sa pokúsim podrobnejšie zvážiť niektoré body, ukázať a oveľa viac!

Pozor! Toto je úvodná verzia lekcie, ktorej materiály môžu byť neúplné.

Prihláste sa na stránku ako študent

Ak chcete získať prístup k školským materiálom, prihláste sa ako študent

Dotazovací jazyk 1C 8.3 pre začínajúcich programátorov: funkcie a operátory pre prácu s typmi (VALUE TYPE, TYPE, REFERENCE, ISNULL, EXPRESS)

Pripomeňme si, že každý atribút (vlastnosť, pole) adresára, dokumentu alebo akéhokoľvek iného aplikačného objektu má svoj vlastný typ. A na tento typ sa môžeme pozrieť v konfigurátore:

V dopytovacom jazyku existuje celá trieda funkcií a operátorov na prácu s typmi detailov. Pozrime sa na ne.

Funkcia VALUE TYPE

Táto funkcia preberá jeden parameter (hodnotu) a vracia jeho typ. Pre rekvizity opísané na obrázku (vyššie) Ochutnajte adresár Jedlo vráti sa nasledovné:

Teraz sa pozrime na rekvizity Výrazná vlastnosť v adresári Mestá:

Vidíte, že táto rekvizita môže byť jedným z niekoľkých typov: Linka, Adresár.Chute, Adresár.Farby. Tento typ detailov sa nazýva COMPOSITE.

Ak sa pokúsime vyplniť hodnotu takéhoto detailu v režime 1C:Enterprise, systém sa nás opýta, aký typ hodnoty bude zadaný:

A až po našom výbere nám umožní zadať hodnotu zvoleného typu.

Takže prvky adresára rovnakého typu ( Adresár.Mestá) bude možné uložiť do rovnakého atribútu ( Výrazná vlastnosť) hodnoty rôznych typov (reťazec, farby alebo príchute).

Môžete sa o tom presvedčiť kliknutím na prvky adresára Mestá v režime 1C:Enterprise. Čítate skúšobnú verziu lekcie, k dispozícii sú celé lekcie.

Hodnotou rozlišovacej funkcie je tu prvok adresára Príchute:

Tu je riadok:

A tu je vo všeobecnosti prvok referenčnej knihy Farby:

Toto sú možnosti, ktoré nám otvára zložený dátový typ!

Som zvedavý ako sa bude funkcia správať HODNOTY TYPU na rekvizitách Výrazný prvok, ktorý má zložený typ údajov:

Toto je už veľmi zaujímavé. Pozrime sa na každý riadok jednotlivo.

Typ hodnoty rozlišovacieho znaku pre prvok Rusko sa rovná NULOVÝ. S týmto typom sa stretávame prvýkrát. Hodnoty tohto typu sa používajú výlučne na určenie chýbajúcej hodnoty pri práci s databázou.

To je pravda, pretože prvok Rusko je skupina a nie obyčajný prvok adresára Mestá, takže nemá žiadne pole Výrazná vlastnosť. A typ chýbajúcej hodnoty, ako sme čítali vyššie, sa vždy rovná NULOVÝ.

Typ hodnoty rozlišovacieho znaku pre Perm sa rovná Príchute. To je pravda, pretože hodnota charakteristického znaku zadaného v databáze pre mesto Perm je odkaz na prvok adresára Príchute.

Pre Krasnojarsk sa typ atribútu rovná Farby, pretože hodnota vybraná v databáze je odkaz na prvok adresára Farby.

Pre Voronež sa typ atribútu rovná Linka, pretože hodnota zadaná v databáze je obyčajný reťazec.

India je opäť skupina, takže to nemá význam. A typ chýbajúcej hodnoty, ako si pamätáme, sa rovná NULOVÝ.

Tu je vec. Ak prejdete na prvok adresára Mestá s menom Sao Paulo, potom uvidíte, že pole Výrazná vlastnosť vôbec nevyplnené. Je to prázdne. A všetky prázdne polia zloženého typu majú osobitný význam NEDEFINOVANÉ .

S NEDEFINOVANÝ tiež sa stretávame prvýkrát. Význam NEDEFINOVANÝ používa sa, keď je potrebné použiť prázdnu hodnotu, ktorá nepatrí žiadnemu inému typu. Toto je presne naša situácia. A typ hodnoty NEDEFINOVANÝ, ako ste už pravdepodobne uhádli, sa rovná NULOVÝ.

Funkcia TYPE

Vyžaduje iba jeden parameter - názov primitívneho typu ( ČIARA, NUMBER, DÁTUM, BOOLEAN), alebo názov tabuľky, ktorej typ prepojenia chcete získať.

Výsledkom tejto konštrukcie bude hodnota typu Typ pre zadaný typ.

Znie to nejasne, však?

Pozrime sa na aplikáciu tohto dizajnu a všetko okamžite padne na svoje miesto.

Predpokladajme, že musíme vybrať všetky položky adresára Mestá, ktoré majú kompozitné rekvizity Výrazná vlastnosť má hodnotu typu ČIARA:

Teraz vyberme všetky záznamy, ktoré majú hodnoty atribútov Výrazná vlastnosť sú odkazy na prvky adresára Farby(tabuľka Adresár.Farby):

Ustúpiť

Ako si pamätáte, niektoré prvky adresára Mestá nemať rekvizity Výrazná vlastnosť. Funkcia HODNOTY TYPU pre takéto prvky vyrába NULOVÝ.

Ako môžete vybrať takéto prvky v dotaze? Na tento účel je k dispozícii špeciálny logický operátor JE NULL(nezamieňať s funkciou ISNULL, na ktoré sa pozrieme nižšie). Čítate skúšobnú verziu lekcie, k dispozícii sú celé lekcie.

Tu je príklad jeho použitia:

Skvelé. Ale všimli ste si, že tu nie je žiadny prvok typu Sao Paulo, rekvizity Výrazná vlastnosť ktorý aj vydal NULOVÝ. Prečo sa to stalo?

Ide však o to, že situácia pre skupiny (Rusko, India, Brazília), pre ktoré sa vypĺňajú podrobnosti Výrazná vlastnosť v zásade nemožné, keďže ho vôbec nemajú, sa líši od situácie pre prvok Sao Paulo, pre ktorý je vyplnenie rekvizít možné, ale jednoducho sa nevyplní a rovná sa, ako si pamätáme, osobitnú hodnotu NEDEFINOVANÝ.

Ak chcete vybrať všetky záznamy, ktoré majú požadované Výrazná vlastnosť prítomný, ale nevyplnený, mala by sa použiť iná konštrukcia:

Ale porovnanie s UNDEFINED na určenie prázdnych (nevyplnených) atribútov bude fungovať len pre zložené typy.

Mimochodom, logický operátor IS NULL má formu negácie, ktorá vyzerá takto:

Logický operátor LINK

Vyberme si napríklad z adresára Mestá len tie záznamy, ktoré majú hodnotu zloženého atribútu Výrazná vlastnosť sú odkazom na prvok adresára Príchute:

Ako si pamätáte, rovnaký problém by sme mohli vyriešiť pomocou HODNOTY TYPU A TYP:

Funkcia ISNULL

Funkcia je navrhnutá tak, aby nahradila hodnotu NULOVÝ na iný význam.

Pamätáme si ten význam NULOVÝ vráti, ak požadovaný atribút (pole, vlastnosť) neexistuje.

Napríklad rekvizity Výrazná vlastnosť pre skupiny adresárov Mestá:

Funkcia ISNULL pomôže nám vypísať inú hodnotu, ak sa táto hodnota rovná NULOVÝ. Čítate skúšobnú verziu lekcie, k dispozícii sú celé lekcie. Nech je v tomto prípade riadok „Takáto rekvizita neexistuje!“:

Ukazuje sa, že ak prvý parameter funkcie ISNULL nerovná sa NULOVÝ, potom sa vráti. Ak je NULL, vráti sa druhý parameter.

Funkcia EXPRESS

Táto funkcia je len pre polia, ktoré majú zložený typ. Výborným príkladom takéhoto poľa je nehnuteľnosť Výrazná vlastnosť pre prvky adresára Mestá.

Ako si pamätáme, zložené polia môžu byť jedným z niekoľkých typov špecifikovaných v konfigurátore.

Pre pole Výrazná vlastnosť takéto platné typy sú ČIARA, Adresár.Farby A Adresár.Chute.

Niekedy je potrebné preniesť hodnoty zloženého poľa na konkrétny typ.

Uveďme zoznam všetkých hodnôt polí Výrazná vlastnosť písať Referencie.Farby:

Výsledkom je, že všetky hodnoty prvkov, ktoré boli typu Directory.Colors, zostali naplnené a boli prevedené na určený typ. Všetky hodnoty iných typov ( ČIARA, Adresár.Chute) sú teraz rovnaké NULOVÝ. Toto je zvláštnosť pretypovania pomocou funkcie EXPRESNÉ.

Typ môžete pretypovať buď na primitívny typ ( BOOLEAN, NUMBER, ČIARA, DÁTUM) alebo na referenčný typ. Čítate skúšobnú verziu lekcie, k dispozícii sú celé lekcie. Ale typ, na ktorý sa robí odliatok, musí byť uvedený v zozname typov pre toto zložené pole, inak systém vyhodí chybu.

Urobte si test

Spustiť test

1. Vyberte najsprávnejšie tvrdenie

2. Podrobnosti, ktoré môžu nadobúdať hodnoty jedného z niekoľkých typov, sa nazývajú

3. Na určenie typu hodnoty atribútu použite funkciu

4. Dôležité sú prázdne detaily zloženého typu

Pozrime sa teraz na zvyšok.

Funkcie pre prácu s reťazcami v 1C dotazoch

Existuje málo funkcií a operátorov na prácu s údajmi reťazca v dotazoch 1C.

Po prvé, reťazce v dopytoch môžu byť pridané. Ak to chcete urobiť, použite operátor „+“:

Žiadosť. Text = "VYBRAŤ
""Riadok: " " + Zdroj. Názov
;

Po druhé, môžete vybrať časť riadku. Ak to chcete urobiť, použite funkciu SUBSTRUCTION. Funkcia je podobná vstavanému jazyku 1C. Má tri parametre:

  1. Zdrojový reťazec.
  2. Číslo znaku, ktorým má začínať vybraný riadok.
  3. Postavy.

Žiadosť. Text= "VYBERTE si
SUBSTRING("
"Riadka: " ", 4, 3) ako výsledok"; // Výsledok: dobre

Funkcia ISNULL

NULL je špeciálny dátový typ na platforme 1C:Enterprise. Je to zároveň jediná možná hodnota tohto typu. NULL sa môže objaviť v dotazoch v niekoľkých prípadoch: pri pripájaní zdrojov dotazov, ak sa v jednej z tabuliek nenašla zodpovedajúca hodnota; pri prístupe k detailom neexistujúceho objektu; ak bola v zozname polí dotazu zadaná hodnota NULL (napríklad pri kombinovaní výsledkov výberu z viacerých tabuliek) atď.

Pretože NULL nie je ani null, ani prázdny reťazec, dokonca ani hodnota Nedefinované,často je užitočné nahradiť ho nejakým užitočnejším typom údajov. Na to je funkcia určená. ISNULL.

Má dva parametre:

  1. Hodnota, ktorá sa kontroluje.
  2. Hodnota, ktorou sa má nahradiť prvý parameter, ak sa ukáže, že je NULL.

Žiadosť. Text= "VYBERTE si
ISNULL(Source.Remainder, 0) AS Remainder"
; // Ak je výsledkom požiadavky pole zvyšok = NULL,
// potom bude nahradená 0 ​​a môžete s ňou vykonávať matematické operácie

Funkcie VÝKON A ODKAZY NA ÚVOD

Tieto funkcie sú navrhnuté tak, aby získali reťazcové reprezentácie rôznych hodnôt. To znamená, že konvertujú odkazy, čísla, booleany atď. do obyčajného textu. Rozdiel medzi nimi je vo funkcii VÝKON skonvertuje všetky typy údajov na text (reťazec) a funkciu ODKAZY NA ÚVOD- iba odkazy a vráti zostávajúce hodnoty tak, ako sú, neprevedené.

Žiadosť. Text= "VYBERTE si
REPREZENTÁCIA (PRAVDA) AKO boolovská,
REPREZENTÁCIA (4) AKO číslo,
REPREZENTÁCIA (Source.Link) AKO odkaz,
REPRESENTATION(DATETIME(2016,10,07)) AS Date"
;
// Boolean = "Yes", Number = "4", Link = "Document Cash order order No... from..."
// Dátum="07.10.2016 0:00:00"

Žiadosť. Text= "VYBERTE si
REPREZENTAČNÁ REFERENCIA (PRAVDA) AKO boolovská,
REPREZENTAČNÁ REFERENCIA(4) AKO ČÍSLO
PRESENTINGLINK(Source.Link) AS Link,
REPRESENTATIONREFERENCE(DATETIME(2016,10,07)) AS Date“
;
// Boolean = TRUE, Number = 4, Link = "Document Cash order order No... from..."
// Dátum=07.10.2016 0:00:00

Funkcie TYP A HODNOTY TYPU

Funkcia TYP vráti dátový typ platformy 1C:Enterprise.

Žiadosť. Text= "VYBERTE si
TYPE (číslo)
TYPE (reťazec),
TYP (Dokument. Výdavkový hotovostný príkaz)“
;

Funkcia HODNOTY TYPU vráti typ hodnoty, ktorá mu bola odovzdaná.

Žiadosť. Text= "VYBERTE si
VALUES TYPE (5) AS Číslo,
TYPE ("
"čiara" ") AS reťazec,
TYPE (Source.Link) AS Reference
Zo zdroja Directory.Source ako zdroja"
;
//Číslo=Číslo, Reťazec=Reťazec, Adresár = DirectoryLink.Source

Tieto funkcie je vhodné použiť napríklad vtedy, keď potrebujete zistiť, či pole prijaté v požiadavke je hodnotou nejakého typu. Napríklad, získajme kontaktné informácie protistrán z informačného registra ContactInformation (sú tam uložené kontakty nielen protistrán, ale aj organizácií, jednotlivcov atď.):

Žiadosť. Text= "VYBERTE si

OD

KDE
VALUES TYPE(ContactInformation.Object) = TYPE(Adresár.Protistrany)“
;

Funkcia VÝZNAM

Funkcia Význam umožňuje použiť konfiguračné objekty 1C priamo v požiadavke bez použitia .

K predchádzajúcemu príkladu pridajme ešte jednu podmienku. Potrebujete získať iba telefónne čísla svojich protistrán.

Žiadosť. Text= "VYBERTE si
Kontaktné informácie.Úvod
OD
Register informácií Kontaktné informácie AKO Kontaktné informácie
KDE
VALUES TYPE(ContactInformation.Object) = TYPE(Adresár.Protistrany)
AND ContactInfo.Type = VALUE(Enum.ContactInfoTypes.Phone)"
;

Treba si uvedomiť, že túto funkciu je možné použiť len s preddefinovanými hodnotami, t.j. s hodnotami, ktoré sú prístupné priamo z konfigurátora. Teda funkcia VÝZNAM nemožno použiť s prvkami adresára vytvorenými používateľmi, ale môže pracovať s enumeráciami, s preddefinovanými prvkami adresára, s hodnotami EmptyLink.

Operátor LINK

Operátor LINK je navrhnutý tak, aby kontroloval hodnoty vrátené požiadavkou, či patria ku konkrétnemu typu odkazu. Rovnakú úlohu je možné vykonať pomocou funkcií TYP A HODNOTY TYPU(ktoré majú širší rozsah a boli diskutované vyššie).

Napríklad úloha výberu kontaktných informácií pre protistrany by sa dala vyriešiť takto:

Žiadosť. Text= "VYBERTE si
Kontaktné informácie.Úvod
OD
Register informácií Kontaktné informácie AKO Kontaktné informácie
KDE
ContactInformation.Object LINK Adresár.Protistrany"
;

Operátor EXPRESNÉ

Operátor EXPRESNÉ použité v dopytoch 1C v dvoch prípadoch:

  • keď potrebujete zmeniť vlastnosti primitívneho typu;
  • keď potrebujete zmeniť pole so zloženým typom údajov na pole s jedným typom.

Primitívne typy údajov zahŕňajú: číslo, reťazec, dátum, boolean. Niektoré z týchto typov údajov majú ďalšie charakteristiky. Typ číslo má dĺžku a presnosť, typ Riadok - dĺžka alebo neobmedzená.

Operátor EXPRESNÉ umožňuje zmeniť nie typ údajov, ale ďalšie charakteristiky. Napríklad dokáže premeniť šnúrku s neobmedzenou dĺžkou na šnúrku s obmedzenou dĺžkou. To môže byť užitočné, ak potrebujete zoskupiť výsledky dotazu podľa takéhoto poľa. Nemôžete zoskupovať podľa polí s neobmedzenou dĺžkou, preto to prevedieme na reťazec s dĺžkou 200 znakov.

Žiadosť. Text= "VYBERTE si
MNOŽSTVO (ODLIŠNÝ príchod tovaru a služieb. Odkaz) AKO Odkaz
OD
Dokument Príjem tovaru a služieb AKO príjem tovaru a služieb
GROUP BY
EXPRES (Prijatie tovaru a služieb. Komentár AKO RIADOK (200))“
;

V niektorých prípadoch nemusia byť dotazy na polia s typom zložených údajov platformou 1C spracované optimálne. To má za následok dlhší čas dopytu, takže môže byť užitočné vopred skonvertovať zložený typ na jeden typ.

Žiadosť. Text= "VYBERTE si
EXPRESS(Pohyb tovaruObrat. Objednávka AKO doklad. Objednávka zákazníka). Dátum AKO Dátum objednávky,
Pohyb tovaruObrat.Nomenklatúra
OD
RegisterAkumulácia.Pohyb tovaru.Obrat AS Pohyb tovaruObrat
KDE
Pohyb tovaruObrat.Odkaz na objednávku Dokument.Objednávka klienta"
;

Operátori VOĽBA A JE NULL

Operátor VOĽBA podobne ako operátor AK v zabudovanom jazyku 1C, ale má trochu obmedzenú funkčnosť.

Povedzme, že chceme dostávať kontaktné informácie z informačného registra ContactInformation a zároveň v samostatnom poli žiadosti uviesť, či patria protistrane alebo jednotlivcovi.

Žiadosť. Text= "VYBERTE si
ContactInformation.Úvod,
VOĽBA
WHEN VALUES TYPE(ContactInformation.Object) = TYPE(Adresár.Protistrany)
POTOM "
Protistrana "
INÝ VÝBER
WHEN VALUES TYPE(ContactInformation.Object) = TYPE(Directory.Individuals)
POTOM "
jednotlivec"
ELSE "Niekto iný" "
KONIEC
KONIEC AKO VLASTNÍK
OD
Register informácií. Kontaktné informácie AS Kontaktné informácie"
;

Ako je zrejmé z príkladu, v dizajne VOĽBA za slovom je vždy podmienka KEDY; hodnota použitá, ak je podmienka pravdivá za slovom POTOM a hodnota, ktorá sa použije, ak podmienka nie je splnená, za slovom INAK. Všetky tri dizajnové prvky VOĽBA sú povinné. Vynechať prvok INAK, rovnakým spôsobom ako pri použití operátora AK v zabudovanom jazyku 1C je to nemožné. Aj od operátora VOĽBA neexistuje žiadny analógový dizajn INÁČ AK, ale môžete jeden investovať VOĽBA v inom, ako to bolo urobené v našom príklade.

Operátor JE NULL používané v dizajne VOĽBA na porovnanie poľa dotazu s typom NULL.

Žiadosť. Text= "VYBERTE si
VOĽBA
KEĎ JE HODNOTA NULL, POTOM 0
ELSE Význam
KONIEC"
;

Okrem toho operátor JE NULL možno použiť v podmienkach dopytu, napríklad vo vete KDE.