Logické operace (1s podnik). Logické operace (1s podnik) Použití logického OR v podmínkách

Následující logické operace:

NOT logické NOT (negace); A logické AND;

NEBO logické NEBO.

Operandy logických operací musí být logické výrazy. V tabulce. 2.5 ukazuje výsledky logických operací nad logickými výrazy LP1 a LP2, které nabývají hodnot skutečný(já) nebo Nepravdivé(L).

pravdivostní tabulka

Tabulka 2.5

LV1 LV2 LV1 A LV2 LV1 NEBO LV2 NE LV1
A A A A L
A L L A L
L A L A A
L L L L A

Operátor negace je unární operátor umístěný vlevo od operandu. Všechny ostatní uvažované operace jsou binární.

2.6.5. PROVOZNÍ PRIORITA

Všechny operace 1C se provádějí ve výrazu zleva doprava v souladu s jejich prioritou (senioritou), to znamená, že pokud mají dvě po sobě jdoucí operace stejnou prioritu, nejprve se provede levá operace. Jako první jsou vyhodnoceny podvýrazy uzavřené v závorkách. V tabulce. 2.6 Operace 1C jsou uspořádány v sestupném pořadí podle priority.

Operační priorita

Tabulka 2. b

%*,/+, NOT AND OR<, <=, >, >=, =, <>

Komentář. Každá buňka tabulky obsahuje operace se stejnou prioritou.

Příklad:

8 % 2 * 3 // Vrátí 0
8 % (2 * 3) // Vrátí se 2

Protože logické operace jsou starší než relační operace, je následující logický výraz chybný:

3>2 a 4< 5 // Так неверно

protože logický podvýraz 2 a 4 je zpočátku vyhodnocen

operandy, které nejsou přítomny skutečný nebo Nepravdivé. A to není pravda.

Ale logické vyjádření je pravdivé

(3 > 2) a (4< 5) // Это pravdivý příklad. Vypočítejte výsledek booleovského výrazu

(x/a=1) nebo (b/(a+b)< 1) и не (б = а) или (х <>6) v x = 6.0, A= 2,0 a b = 3,0.

Výpočtem výsledku operací podvýrazů uzavřených v závorkách dostaneme:

Nepravdivé nebo skutečný a ne Nepravdivé nebo Nepravdivé.

Nepravdivé nebo skutečný a skutečný nebo Nepravdivé. Po provedení skutečný a pravda: nepravda nebo skutečný nebo Nepravdivé. Konečný výsledek: skutečný.

2.7. POLE

pole je datový objekt obsahující více hodnot, ke kterým přistupuje jejich počet ( index).

Počet prvků v poli se nazývá jeho velikost. Velikost pole může být pouze celočíselná doslovná konstanta.

Proměnný operátor;

deklaruje jednorozměrné pole (vektor) A z pěti prvků. Prvky pole mají následující názvy: a, a, a, a a A. V těchto názvech jsou hodnoty 1-5 indexy prvků pole.

Pole je považováno za definované, pokud jsou uvedeny hodnoty všech jeho prvků. Pro nastavení počátečních hodnot prvků pole (inicializace pole) je možná následující smyčka:

pro in = 1 až 5 cyklů

Úkoly

změňte hodnoty 2. a 5. prvku pole A.

Obecně lze číselné výrazy použít jako indexy pole, tzv indexové výrazy. Například:

a = 9,1; // Změňte hodnotu 3. prvku pole A

Pokud se výraz indexu pole vyhodnotí jako neceločíselná hodnota, pak se jako index použije celá část této hodnoty. Například:

a = 9,1; // Změňte hodnotu 1. prvku pole A

Hodnota indexu nesmí překročit hranice pole. Takže při práci s dříve deklarovaným polem A z pěti prvků jsou chybné operátory

Prvky stejného pole mohou být různých typů. Například:

a = '25.11.01'; // Prvek typu Date Array Prvky mohou být agregovaného typu. Například:

сtr = CreateObject("Adresář.Zaměstnanci");

tabulka = CreateObject("Tabulka");

Pole nemůže obsahovat jiná pole jako prvky.

Pole může být formálním parametrem programové komponenty (procedury nebo funkce). V tomto případě není velikost pole specifikována a hranaté závorky jsou zachovány. K určení velikosti pole předávaného proceduře (funkci) se používá vestavěná funkce Size.

Příklad:

procedura Inicializace proměnné Array(s), velikost;

velikostA = velikost(a); // Vestavěná funkce Size vrátí velikost pole A

pro yin = 1 pomocí cyklu zmA

a[in] = 1; // Nyní jsou všechny prvky pole rovny jednomu konci smyčky;

endProcedures // InitializationArray

procedura Execute() proměnná;

// Volání procedury, která nastavuje počáteční hodnoty prvků pole

// Jeho skutečným parametrem je název pole InitializationArray(a);

endProcedures // Proveď

Podmínky v dotazech se používají, když je nutné vybrat ne všechny záznamy z tabulky infobáze 1C, ale pouze ty, které odpovídají jednomu nebo více kritériím výběru.

Podmínky v dotazech 1C lze specifikovat různými způsoby v závislosti na vlastnostech samotného dotazu a zdroji dat.

Klíčové slovo "KDE"

Klíčové slovo KDE používá se v dotazech 1C, když je podmínka aplikována na záznamy vybrané z infobáze. V tomto případě jsou záznamy filtrovány ve fázi jejich výběru z tabulky infobáze.

Existuje například tabulka Výplaty, obsahující seznam zaměstnanců a plateb jim odvedených.

Pokud potřebujete vybrat platby ve výši alespoň 10 000,-, pak bude žádost vypadat takto

Žádost. Text= "VYBRAT
| Platby.Zaměstnanec,
| Platby
| OD
| Výplaty
| KDE
| Výplaty. Plat >=10 000"

Výsledkem dotazu bude následující tabulka.

Klíčové slovo "HAVING"

Klíčové slovo MÍT v 1C dotazech se používá, když je potřeba provést výběr mezi již vybranými záznamy. Toto klíčové slovo se například používá, když chcete ve výsledku dotazu filtrovat seskupené záznamy.

Vraťme se k výše uvedenému příkladu. Řekněme, že potřebujeme vybrat z tabulky Výplaty zaměstnanci, kteří celkem obdrželi více než 20 000. Chcete-li to provést, musíte nejprve zadat seskupení podle pole Zaměstnanec, vypočítejte součet podle polí Plat pro každého zaměstnance a poté z přijatých záznamů vybrat ty, kteří podmínku splňují.

Text požadavku bude vypadat takto.

Žádost. Text= "VYBRAT
| Platby.Zaměstnanec,
| ČÁSTKA(Platby.Plat) JAKO Mzda
| OD
| Výplaty
| GROUP BY
| Platby. Zaměstnanec
|MÍT
| ČÁSTKA (Platby. Plat) > 20 000"

Výsledek tohoto dotazu bude takový.

Tento příklad jasně ukazuje rozdíl mezi klíčovými slovy KDE a MÍT. Kdybychom použili slovo KDE namísto MÍT, pak by se nejprve provedl výběr záznamů se mzdou nad 20 000,- a následně by se jim rozpočítala částka pro každého zaměstnance. V důsledku toho bychom dostali prázdný výsledek dotazu, protože žádný zaměstnanec neobdržel více než 20 000 v jedné platbě.

Podmínky výběru v tabulkách virtuálních registrů

Všechny registry v systému 1C:Enterprise mají virtuální tabulky: akumulační registry, informační registry, účetní registry. Existují dva způsoby, jak nastavit podmínky pro virtuální tabulky:

  1. přes parametry virtuální tabulky;
  2. přes sekce dotazů KDE nebo MÍT.

Rozdíly mezi sekcemi KDE a MÍT už jsme uvažovali. Abyste pochopili, jak se podmínky v těchto částech dotazu liší od podmínek v parametrech virtuální tabulky, musíte pochopit, co to je virtuální registrační tabulky v 1C. Jejich důležitou vlastností je, že neexistují v infobázi. Jedná se o nástroj, který nám poskytuje platforma 1C: Enterprise pro optimalizaci konfigurace.

Pokud je tedy podmínka uvedena v parametrech virtuální tabulky, pak je aplikována ve fázi jejího vzniku ze záznamů tabulky reálných registrů. A pokud v oddílech KDE nebo MÍT, pak - do záznamů již vytvořené virtuální tabulky.

Zvažte příklad. Uvedena tabulka periodického registru informací Měny.

Pro nejmenší datum je nutné vybrat měny, jejichž směnný kurz je nižší než 30 rublů.

Dotaz s podmínkou v parametrech virtuální tabulky bude vypadat takto:

V tomto případě dostaneme jeden záznam: Dolar 28.3 od 01.02.2007. To bude správné řešení problému.

Umístíme-li podmínku do sekce KDE, pak bude výsledek dotazu prázdný, protože nejprve bude proveden řez prvních pro každou měnu (výsledkem dostaneme dva záznamy od 1.1.2007 30,25 dolaru a 40,5 eura) a poté z nich budou vybrány záznamy, které podmínku splňují. Ale oba obdrželi záznamovou podmínku Studna< 30 neuspokojit.

Na pole dotazu lze použít různé funkce. V této části se budu zabývat nejčastěji používanými (sám) z nich.

ČAS SCHŮZKY- nastaví konstantní pole s typem Datum. Syntax:

ČAS SCHŮZKY(<Год>,<Месяц>,<День>,<Час>,<Минута>,<Секунда>)
Žádost.Text =
"VYBRAT
| DATETIME(2013, 1; 1) AS OMG";// 1. ledna 2013

DATUM ROZDÍL- vrátí rozdíl 2 dat v zadané dimenzi (rok, měsíc, den, hodina, minuta, sekunda). Syntax:

ROZDÍL DATUM(<Дата1>, <Дата2>, <Тип>)
Žádost.Text =
"VYBRAT
| DATEDIFF(DATETIME(2013; 2; 28); DATETIME(2013; 1; 1); DAY)
| JAKO DNY DO KONCE ZIMY“;

VÝZNAM- nastaví konstantní pole s předdefinovaným záznamem jedné z databázových tabulek, můžete také předat nulovou referenci. Syntax:

VÝZNAM(<Имя>)
Žádost.Text =
"VYBRAT
//předdefinovaný prvek adresáře
| HODNOTA (Referenční měny. Rubly) AS Rubl,
// prázdný odkaz na dokument
| VALUE(Document.Customer Invoice.NullReference) JAKO prázdná faktura,
//hodnota výčtu
| VALUE(Enumeration.GenderPersons.Male) JAKO Muž,
//předdefinovaný účet z účtové osnovy
| VALUE(Účtová osnova. Samonosná. Zboží) AS Účet_41";

VÝBĚR- analog konstrukce IF pro dotazovací jazyk 1C. Syntax:

VÝBĚR
KDYŽ<Выражение>PAK<Выражение>
V OPAČNÉM PŘÍPADĚ<Выражение>
KONEC
Žádost.Text =
"VYBRAT
//pokud je cena nižší než 100, pak dotaz stále vrátí 100
// jinak požadavek vrátí skutečnou cenu
| VÝBĚR
| KDYŽ Produkty. Cena > 100
| PAK Zboží.Cena
| JINAK 100
| KONČÍ JAKO CENA
| OD

ODKAZ<Имя таблицы>
Žádost.Text =
"VYBRAT
//pokud je typ hodnoty registrátora Potvrzení dokumentu,
//pak požadavek vrátí "Zboží přijato", jinak "Prodané zboží"
| VÝBĚR
| KDYŽ zůstává. Registrátor LINK Dokument. Potvrzení
| PAK ""Příjem zboží""
| JINÉ ""Prodej zboží""
| KONEC JAKO POHLED NA POHYB
| OD
| Accumulation Register.Remains AS Remains";

MEZI- kontroluje, zda je hodnota v rozsahu. Syntax:

MEZI<Выражение>A<Выражение>
Žádost.Text =
//získáte všechny produkty v cenovém rozpětí od 100 do 1000
"VYBRAT
| Produkty.Produkt
| OD
| KDE
| Zboží.Cena MEZI 100 A 1000";

V a V HIERARCHII- zkontrolovat přítomnost hodnoty v přenášeném seznamu. V HIERARCHII také rozšíří hierarchické prvky dolů a bude hledat hodnotu mezi podřízenými prvky. Syntax:

V(<СписокЗначений>), V HIERARCHII(<СписокЗначений>)
Žádost.Text =
//získáte všechny podúčty 41. a 10. účtu
"VYBRAT
| Samonosné. Reference AS Faktura
| OD
| Účtová osnova Samonosná AS Samonosná
| KDE
| Samonosný. Odkaz V HIERARCHII (HODNOTA (Účtový diagram. Samonosné. Zboží),
| VALUE(Účtová osnova. Samonosná. Materiály))";

JAKO- umožňuje porovnat řetězec se vzorem, který se používá, když hledaný řetězec není pevně zakódován. Stavba šablony:

  • % (procento): sekvence obsahující libovolný počet libovolných znaků
  • _ (podtržítko): jeden libovolný znak
  • [...] (jeden nebo více znaků v hranatých závorkách): jakýkoli jednotlivý znak uvedený v hranatých závorkách. Výčet může obsahovat rozsahy, jako je a-z, což znamená jakýkoli znak v rozsahu, včetně konců rozsahu
  • [^...] (v hranatých závorkách znak záporu následovaný jedním nebo více znaky): jakýkoli jednotlivý znak jiný než ty, které jsou uvedeny za znakem záporu

Syntax:

JAKO"<ТекстШаблона>"
Žádost.Text =
//najděte všechny židle v adresáři nomenklatury
"VYBRAT
| Produkty.Produkt
| OD
| Adresář Zboží AS Zboží
| KDE
| Zboží.Název LIKE ""tool%""";
//tento dotaz vrátí Židle, židle, židle, kancelářská židle atd.,
//Tabulka ale nebude v tomto seznamu

JE NULL- pokud pole není definováno, pak jej definuje v zadaném výrazu. Syntax:

ISNULL(<Выражение>, <Выражение>)
Žádost.Text =
//Pokud pole není definováno (NULL)? pak mu dejte prázdnou referenci
"VYBRAT
| ISNULL(Products.Reference, VALUE(Katalog.Products.EmptyReference)) AS Product
| OD
| Příručka. Zboží JAKO Zboží";

Podotýkám, že NULL je nutné zpracovat, protože jedná se o velmi „rozmarný“ typ (systém 1C:Enterprise 8 definuje speciální typ NULL s jedním prvkem). Pokud se pokusíte s hodnotou tohoto typu porovnat nebo ji přiřadit, určitě narazíte na chybu, proto na tuto konstrukci nezapomínejte. Když se může objevit NULL:

  • po spojení tabulek, kromě interní (další článek o spojení);
  • po výběru atributů definovaných pouze pro skupiny adresářů a naopak;
  • po výběru sloupce deníku dokladů, přičemž aktuální doklad nemá v tomto sloupci zahrnuty detaily.

Toto není úplný seznam funkcí dotazovacího jazyka 1C 8, pokud máte zájem o práci jiných, napište do komentářů.

Studium jakéhokoli programovacího jazyka zpravidla začíná příkladem psaní prvního jednoduchého programu („Ahoj světe!“). To se provádí za účelem vizuální ukázky práce se základními syntaktickými konstrukcemi. Při učení nového vývojového prostředí neuděláme výjimku z tohoto běžného způsobu prezentace materiálu, a proto je třeba náš první článek chápat ve stejném duchu. V něm podrobně rozebereme odpovědi na následující otázky týkající se programování na platformě 1C:Enterprise 8:

  • Kde as jakou pomocí napsat programový kód ve vestavěném jazyce 1C?
  • Co jsou programové moduly, jaká jsou pravidla pro práci s nimi?
  • Co je to proměnná, jak s ní pracovat, jak a kde ji deklarovat?
  • Co jsou operátory porovnání, přiřazení a podmíněné operátory a jak je používáte?
  • Booleovské operace – co to jsou a jak s nimi pracovat?
  • Proč jsou smyčky potřebné a jak je používat?

Článek bude užitečný pro všechny, kteří ještě nejsou obeznámeni s vývojem na platformě 1C:Enterprise 8, ale chtějí se naučit programovat v 1C.

Použitelnost

Materiál je relevantní pro platformu "1C:Enterprise 8" vydání 8.2. a 8.3.

Proměnné a operátory

V tomto článku začneme studovat vestavěný jazyk 1C:Enterprise 8. Spustitelný kód je obsažen v programových modulech.

Existuje poměrně velké množství modulů, které jsou určeny pro zpracování různých událostí.

V jednom modulu se tedy zpracovává přihlášení uživatele a ve zcela jiném zpracování kliknutí uživatele na určité tlačítko.

Každý modul tedy popisuje chování konfigurace v určitém bodě. Modul obsahuje především sekci deklarace proměnné. Tito. můžeme deklarovat některé proměnné v modulu.

V budoucnu je lze použít v postupech a funkcích tohoto modulu. Pokud je proměnná definována pomocí klíčového slova Export, bude dostupná mimo tento modul. Příklad řádku deklarace proměnné:

Rem sklad, divize, skladník Export;

Po deklaraci proměnných následuje sekce procedur a funkcí.

Za nimi je sekce hlavního programu, která bude spuštěna v okamžiku přístupu k tomuto modulu.

Například v hlavní části programu můžete inicializovat proměnné, tzn. dejte jim nějaké počáteční hodnoty:

Stav=1;
NewExpression=2;
výsledek=3;

Modul si lze představit jako kombinaci různých operátorů, které provádějí různé akce, které potřebujeme.

Oddělovač operátorů je znak ";" (středník). Tento znak je znakem konce operátora. Tito. operátor může být zapsán takto:

Výsledek=100X200
+400
-600;

Nezáleží na počtu řádků výpisu.

Mnohdy je samozřejmě pohodlnější a přehlednější umístit operátora na jednu linku, ale někdy jsou operátory poměrně dlouhé (počet linek může rozumně dosahovat několika desítek).

V konečném vyjádření dané konstrukce, např. postupu, lze středník vynechat. Tito. bude fungovat následující kód:

Postup CalculateValue()

PočátečníHodnota = 100;
IntermediateValue = PočátečníHodnota / 5;
FinalValue = PočátečníHodnota+IntermediateValue

EndProcedure

V závěrečném prohlášení je však lepší použít středník. Je možné, že časem se bude ve stavbě pokračovat a konečný provozovatel již nebude konečný. Tuto situaci budeme muset konkrétně sledovat.

Proměnné jsou navrženy tak, aby obsahovaly nějakou hodnotu libovolného datového typu. Používají se pro meziskladování informací pro zpracování.

Téměř v každém softwarovém modulu, který provádí nějakou akci, existují různé proměnné. Psaní proměnných podle hodnot v Platform 1C:Enterprise 8 je měkké.

Proměnná může například obsahovat hodnotu jednoho datového typu a o několik řádků později jiného typu:

Vytvořeno = false;
Vytvořeno = pravda;
Vytvořeno =100;

V prvních dvou příkazech je hodnota proměnných booleovská a ve třetím je změněna na číselnou hodnotu. Tito. typování závisí na hodnotě přiřazené této proměnné.
Proměnné lze deklarovat dvěma způsoby:

  • implicitní metoda (zmínka na levé straně operátoru přiřazení tuto proměnnou popisuje, chybí předběžný popis proměnné slovem Variable, t. j. neexistuje speciální sekce deklarace proměnných);
  • explicitní deklarace proměnných (Variable ControlData;). Explicitní deklarace proměnných se používá například v případě, že se očekává následný převod této proměnné do funkce.

Pro názvy proměnných se používá klasický popis identifikátoru. Identifikátor se skládá z písmen, číslic a podtržítek. Identifikátor musí začínat buď písmenem, nebo podtržítkem.

V tomto případě by název proměnné měl odrážet význam této proměnné. Jednopísmenné názvy proměnných (například A, B, C) jsou špatnými příklady. Neodrážejí podstatu proměnných.

Příklady správných názvů proměnných: Čítač (přírůstková proměnná pro smyčku), Dodavatel. Pokud název proměnné obsahuje několik slov, mělo by každé nové slovo pro přehlednost začínat velkým písmenem.

Vyhrazená slova, jako je Procedure, Function, Loop, EndCycle atd., nelze použít v názvech proměnných. (tyto konstrukce jsou v modulu programu zvýrazněny červeně).

Vyhrazená slova jsou vestavěné jazykové operátory a je jich poměrně dost. Všechny jsou uvedeny v Asistent syntaxe.

Je třeba poznamenat, že datové typy nejsou vyhrazená slova (například Array, Boolean, True, False). Systém bude takové názvy proměnných vnímat správně.

Při psaní programového kódu nezáleží na velikosti písmen. Například slovo Postup lze psát velkými i malými písmeny. Kromě toho lze v rámci slova prokládat velká a malá písmena.

Platformě na tom nezáleží. Podle pravidel slušného chování se však začátek slova musí psát velkým písmenem, všechna ostatní písmena malými.

O jazyku. Můžete použít ruštinu i angličtinu a kombinaci dvou jazyků. Pokud to někomu vyhovuje, můžete k psaní programového kódu bezpečně používat angličtinu a také kombinovat ruštinu a angličtinu. Na platformě nezáleží.

Mnoho jmen v angličtině je docela těžké si zapamatovat. Při použití kombinace dvou jazyků se zhoršuje čitelnost programového kódu.

Booleovské operace

Porovnávací operátory velmi často používají booleovskou logiku, která vrací True nebo False.

Například v podmíněném operátoru můžete porovnat: If Event = Sale Pak algoritmus půjde po jedné větvi (tj. pokud je hodnota True), podle podmínky False se provede další větev algoritmu.

Podmínky mohou být poměrně složité, lze je kombinovat pomocí následujících operátorů: AND, OR a NOT. Takže pro operátor AND:

Pravda A Pravda = Pravda;
True AND False = nepravda;
False AND True = False;
False A False = False.

Pro operátor OR stačí, aby se jeden z operandů rovnal True, pak bude hodnota kombinace True. Hodnota je False, pouze pokud jsou oba operandy False.

Operátor NOT jednoduše převrátí aktuální hodnotu (False to True, True to False).

Pomocí kombinace těchto operátorů můžete vytvořit poměrně složité podmínky. Při sestavování složitých podmíněných příkazů vezměte v úvahu přednost.

Operátor NOT má nejvyšší prioritu, za ním následuje operátor AND a za ním operátor OR. Cokoli v závorkách má nejvyšší prioritu a je provedeno jako první.

Udělejme například prioritu (pořadí provádění) pro operace ve výše uvedeném výrazu:

NE(Podmínka1 NEBO Podmínka2) A Podmínka3 NEBO Podmínka4
1.Výsledek1 = (Podmínka1 NEBO Podmínka2);
2. Výsledek2 = NOT Výsledek1;
3. Výsledek3 = Výsledek2 A Podmínka1;
4. Výsledek = Výsledek3 NEBO Podmínka4;

Existuje pravidlo převodu:

NE (Podmínka1 NEBO Podmínka2) = NEPodmínka1 A NE Podmínka2.

Neměli bychom však vždy usilovat o zjednodušení výrazu, protože často, logicky, je rozšířený výraz lépe čitelný.

operátor přiřazení

Operátor přiřazení by neměl být zaměňován s rovností, i když mají stejný pravopis.

Princip přiřazovacího operátoru je takový, že levé hodnotě (proměnné na levé straně) je přiřazena hodnota, která je napravo od rovnítka. Vezměme si příklad:

Proměnná1 = Proměnná2 = Proměnná3;

Proměnné1 je přiřazena hodnota rovnosti z booleovské logiky, tzn. True, pokud Proměnná2 = Proměnná3, nebo False v opačném případě.

Při testování pozice začínajícího programátora se často používá úkol: prohodit hodnoty dvou proměnných.

Tento problém se řeší pomocí operátoru přiřazení a má dvě řešení.

Řešení #1 pomocí dočasné proměnné:
TempVar = Proměnná1;
Proměnná1 = Proměnná2;
Proměnná2 = TempProměnná;

Řešení č. 2:
Proměnná1 = Proměnná1 + Proměnná2;
Proměnná2 = Proměnná1 – Proměnná2;
Proměnná1 = Proměnná1 – Proměnná2;

Podmíněný operátor

Existuje takový operátor If, po kterém je potřeba popsat nějakou podmínku (samotná podmínka může být dost velká). Za podmínkou následuje slovo Then a příkazy, které se mají provést.

Poté může následovat klíčové slovo Else a řada dalších příkazů. Pokud existuje několik různých podmínek, můžete použít řadu klíčových slov ElseIf(viz příklad níže). Celá struktura musí být doplněna klíčovým slovem EndIf následuje středník.

Kromě jednoduchých a vícenásobných podmínek existuje zkrácený tvar podmíněného operátoru: ?(Podmínka, Výraz1, Výraz2);

Pokud je podmínka pravdivá, pak Výraz1, v opačném případě - Výraz2. Příklad kódu: ExpensiveItem = ?(Item.Price>100000, True, False);

V praxi místo porovnání záznamů s hodnotou Skutečný (Lhát) typ:

If Variable = True Then
a
If Variable = False Then

ve skutečnosti se používá ekvivalentní zápis:

If Variable Then
a
Pokud NENÍ proměnná, pak

Cykličtí operátoři

Pro jakýkoli druh cyklu je vyžadováno explicitní označení konce tohoto cyklu pomocí klíčového slova EndCycle. Existuje několik typů cyklů.

Cyklus po čítači- cyklus s pevným počtem opakování. Podmínkou pro opuštění smyčky je překročení mezní hodnoty. Příklad použití pro výpočet hodnoty A!

A = 5;
Faktoriál = 1;
Pro čítač = 1 by A smyčka
Faktorial = Faktorial * Counter;
EndCycle;

Smyčka podle stavu– se provede, když je podmínka tohoto cyklu pravdivá. Příklad:

RemainderSum = 1000;
Cena dodatečné položky = 243;
množství = 0;
Zatímco RemainingAmount>0 Cyklus
Množství = Množství+1;
Zbývající částka = Zbývající částka - Množství * Cena dalšího zboží;
ExtraItem Price = ExtraItem Price * 0,8;
EndCycle
Množství = množství-1;

Tato smyčka vypočítává, kolik jednotek produktu lze koupit za danou částku (1000 rublů), pokud se po zakoupení každé jednotky produktu jeho předchozí cena vynásobí faktorem 0,8. Počáteční cena zboží je 243 rublů.

Příkladem chyby při používání tohoto typu smyčky začátečníky je věčná smyčka, kdy je podmínka smyčky zpočátku pravdivá, ale v rámci smyčky samotné se nijak nemění.

Procházet kolekcemi (jiný název je Pro každou).

Platforma má poměrně velké množství kolekcí (jedná se o kontejnery, které obsahují prvky určitého typu).

Přes prvky kolekce můžete iterovat pomocí speciálního druhu smyčky.

Například existuje pole čísel, musíte vypočítat součet všech prvků pole:

součet = 0;
Pro Každý Prvek Z Array Smyčky
Součet=součet+položka;
EndCycle;

Pro smyčky existují speciální operátory: Pokračovat a přerušit.

Pokud v určitém bodě smyčky ztratí provádění dalších příkazů této smyčky smysl, pak se operátor vrátí na začátek smyčky a zorganizuje její další smyčku. Pokračovat.

Operátor přerušit umožňuje ukončit smyčku, i když je podmínka smyčky pravdivá.

Tímto končíme naše první seznámení s vývojem v interním jazyce 1C.

A co Hello World? Ještě jsme to nenapsali, že? Ano, ale nic vám nebrání udělat to sami, protože. znalostí už je dost. No, pokud to nefunguje, můžete se podívat sem.

V tomto článku chceme s vámi všemi diskutovat funkce dotazovacího jazyka 1s, stejně jako konstrukty dotazovacího jazyka. Jaký je rozdíl mezi funkcí a strukturou? Funkce se volá se závorkami a možnými parametry v nich a konstrukce se zapisuje bez závorek. Nepochybně všechny konstrukce a funkce dotazovacího jazyka 1s učinit proces sběru dat flexibilní a multifunkční. Tyto funkce a konstrukce platí pro pole dotazu a některé také pro podmínky.

Funkce dotazovacího jazyka 1s

Vzhledem k tomu, jasný popis funkce dotazovacího jazyka 1s je mnohem méně častý než popis struktur, rozhodli jsme se začít se zabývat funkcemi. Nyní analyzujme každý zvlášť a popišme jeho účel, syntaxi a příklad použití, takže:

1. Funkce ČAS SCHŮZKY- tato funkce vytvoří konstantní pole s typem "Datum".

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

Příklad použití:

2. Funkce DATE DIFFERENCE- vrátí rozdíl dvou dat v jedné z dimenzí (rok, měsíc, den, hodina, minuta, sekunda). Měření je předáno jako parametr.

Syntax: ROZDÍL DATUM(<Дата1>, <Дата2>, <Тип>)

Příklad použití:

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

3. Funkce VALUE- nastaví konstantní pole s předdefinovaným záznamem z databáze, můžete také získat nulovou referenci libovolného typu.

Syntaxe: VALUE(<Имя>)

Příklad použití:

Query.Text = "SELECT //předdefinovaný prvek | VALUE(Currency.Dollar.Catalog.Dollar) AS dolar, //prázdná reference | VALUE(Document.IncomingGoodsServices.EmptyReference) AS Příjem, //hodnota převodu | VALUE(Transfer.LegalIndividual . Jednotlivec) AS Jednotlivec, //předdefinovaný účet |

4. funkce SELECT- máme analogii konstrukce IF, která se používá v kódu, pouze tato se používá v dotazech 1C.

Syntax: VOLBA KDY<Выражение>PAK<Выражение>V OPAČNÉM PŘÍPADĚ<Выражение>KONEC

Příklad použití:

Request.Text = //pokud je částka vyšší než 7500, pak by měla být sleva 300 rublů, //proto, pokud je podmínka spuštěna, funkce //vrátí Částku - 300 //jinak požadavek jednoduše vrátí Částku "SELECT | SELECT | WHEN PMIncome.Amount > 7500 | THEN PTReceipt.Amount - 300 | ELSE PTReceipt.Amount | END AS AmountDiscounted |FROM | Document.ReceiptofGoodsServices.Goods AS";PTReceipts

5. Funkce EXPRESS- umožňuje vyjádřit konstantní pole konkrétním typem.

Syntax: EXPRESS(název pole jako název typu)

Příklad použití:

Query.Text = "SELECT VARIOUS | Sales.Registrar.Number, | SELECT | WHEN Sales.Registrar REF Document.Expense | THEN EXPRESS(Sales.Registrar AS Document.Expense) | ELSE SELECT | WHEN Sales.Registrar REF Document.Implementation | THEN EXPRESS(Sales.Registrar AS Document.Release) | END | ... | END AS Number | FROM | Accumulation Register.Purchases AS Purchases";

Existuje ještě varianta použití funkce EXPRESS v polích smíšených typů, kde se stýkají? Nejjednodušším příkladem je „Registrátor“ pro jakýkoli registr. Proč bychom tedy měli kvalifikovat typ v registrátoru? Uvažujme situaci, kdy z registrátoru vybereme pole "Číslo", ze které tabulky bude číslo vybráno? Správná odpověď všech! Proto, aby náš dotaz fungoval rychle, musíme určit explicitní typ pomocí funkce EXPRESS

Příklad použití:

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

6. Funkce ISNULL(alternativní pravopis IS NULL) - pokud je pole typu NULL, pak je nahrazeno druhým parametrem funkce.

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

Příklad použití:

Všimněte si také, že je žádoucí VŽDY nahradit typ NULL nějakou hodnotou, protože porovnání s NULL se vždy vyhodnotí jako FALSE, i když porovnáváte NULL s NULL. Nejčastěji se hodnoty NULL tvoří jako výsledek spojení tabulek (všechny typy spojení kromě vnitřních).

Query.Text = //Vyberte celou položku a její zůstatky //pokud v některé položce není zůstatek, pak zde bude pole //NULL, které bude nahrazeno hodnotou 0 "SELECT | No.Ref, | ISNULL (GoodsInWarehouseRemains.InStockRemain, 0) HOW Zbytek | Z | Adresář. Nomenklatura JM. | LEFT JOIN Registr akumulace. Zboží ve skladech. Zbývá jako Zboží ve skladech

7. funkce REPREZENTACE- umožňuje získat reprezentaci pole požadavku.

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

Příklad použití:

Query.Text = "CHOOSE | REPRESENTATION(Free RemainsRemains.Nomenclature) AS Nomenklatura, | REPRESENTATION(FreeRemainsRemains.Warehouse) AS Warehouse, | FreeRemainsRemains.AvailableRemains |FROM | Accumulation Register.FreeRemains.Remains AS FreeRemains";

Konstrukce v dotazovacím jazyce 1s

Výše jsme s vámi diskutovali funkce dotazovacího jazyka 1s, teď je čas zvážit konstrukce v dotazovacím jazyce 1s, jsou neméně důležité a užitečné, pojďme začít.

1. Stavební LINK- je logický operátor kontroly typu reference. Nejčastěji se vyskytuje při testování pole složeného typu pro konkrétní typ. Syntax: ODKAZ<Имя таблицы>

Příklad použití:

Query.Text = //pokud je typ hodnoty registrátora Příjem dokumentu, //pak dotaz vrátí "Došlé zboží", jinak "Prodej zboží" "SELECT | SELECT | WHEN Remains.Remains.Registrar LINK Document.Incoming GoodsServices | PAK ""Příchozí" | ELSE "Výdaj" | KONEC JAKO Typ pohybu | OD | Registr akumulace. Zbytky zboží ve skladech AS Zbývají ";

2. Konstrukce MEZI- tento operátor kontroluje, zda je hodnota v určeném rozsahu.

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

Příklad použití:

Query.Text = //získání veškeré nomenklatury, jejíž 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. Konstrukce B a B HIERARCHIE- zkontrolovat, zda je hodnota v předávaném seznamu (pole, tabulky hodnot atd. lze předat jako seznam). Operátor IN HIERARCHY umožňuje zobrazit hierarchii (příklad použití PlanAccounts).

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

Příklad použití:

Query.Text = // vyberte všechny podúčty účtu "SELECT | Samonosný. Propojit AS účet | FROM | Plán účtů. Samonosný AS Samonosný | WHERE | Samonosný. Reference IN HIERARCHY VALUE( Rozpis účtů. Samonosné. Zboží)";

4. Stavba LIKE- tato funkce nám umožňuje porovnávat řetězec se vzorem řetězce.

Syntax: JAKO"<ТекстШаблона>"

Možnosti šablony řádků:

% - sekvence obsahující libovolný počet libovolných znaků.

Jedna libovolná postava.

[...] - libovolný jednotlivý znak nebo posloupnost znaků uvedených v hranatých závorkách. Výčet může obsahovat rozsahy, jako je a-z, což znamená jakýkoli znak v rozsahu, včetně konců rozsahu.

[^...] - libovolný jednotlivý znak nebo posloupnost znaků uvedených v hranatých závorkách s výjimkou těch, které jsou uvedeny za znaménkem negace.

Příklad použití:

Query.Text = //najít celou nomenklaturu, která obsahuje kořen TABUR a začíná //buď malým nebo velkým písmenem t "SELECT | Nomenclature.Reference |FROM | Directory.Nomenclature AS Nomenclature |WHERE | Goods.Name LIKE "" [Тт ]abur%""" ;

5. Provedení POVOLENO- tento výpis umožňuje vybrat z databáze pouze ty záznamy, ke kterým má volající právo číst. Tato práva se konfigurují na úrovni záznamu (RLS).

Syntax: Za klíčovým slovem SELECT se píše ALLOWED

Příklad použití:

Query.Text = "VYBRAT POVOLENO | Protistrany. Reference | Z | Adresář. Protistrany JAKO Protistrany";

6. Konstrukce RŮZNÉ- umožňuje vybrat záznamy, ve kterých nejsou žádné opakované záznamy.

Syntax: Za klíčové slovo SELECT se píše DIFFERENT

Příklad použití:

Request.Text = //vybere záznamy, ke kterým má čtenář práva "SELECT DIFFERENT | Counterparties.Name |FROM | Directory.Counterparties AS Counterparties" ;

Konstrukt DIFFERENT lze také použít s operátorem ALLOWED a dalšími operátory.

Příklad použití:

Query.Text = //vybere různé záznamy, ke kterým má čtenář práva "SELECT ALLOWED DIFFERENT | Contractors.Name |FROM | Directory.Contractors AS Contractors";

7. Stavba PRVNÍ- vybere počet záznamů zadaný v parametru z výsledku dotazu.

Syntaxe: FIRST<число>

Příklad použití:

Query.Text = //vyber první 4 GTD čísla z adresáře "SELECT THE FIRST 4 | GTD Numbers.Reference |FROM | Catalog.GTE Numbers AS GTD Numbers";

8. Design PRO ZMĚNU- umožňuje uzamknout tabulku, funguje pouze v transakcích (relevantní pouze pro automatické zámky).

Syntax: PRO ZMĚNU<НаименованиеТаблицы>

Příklad použití:

Query.Text = "SELECT | FreeRemainsRemains.Nomenclature, | FreeRemainsRemains.Warehouse, | FreeRemainsRemains.AvailableRemains |FROM | Accumulation Register.FreeRemains.Remains AS FreeRemainsRemains |PRO ZMĚNU |

9. Struktura OBJEDNAT BY- třídí data podle konkrétního pole. Pokud je pole odkaz, pak při nastavování příznaku AUTO OBJEDNÁVKA budou seřazeny podle reprezentace odkazu, pokud je příznak vypnutý, pak jsou odkazy seřazeny podle seniority adresy odkazu v paměti.

Syntax: SEŘAZENO PODLE<НаименованиеПоля>AUTO OBJEDNÁVKA

Příklad použití:

Query.Text = "SELECT | FreeRemainsRemains.Nomenclature AS Nomenklatura, | FreeRemainsRemains.Warehouse AS sklad, | FreeRemainsRemains.In StockRemaining |FROM |

10. Design GROUP BY- používá se k seskupování řetězců dotazů podle určitých polí. Číselná pole musí být použita s jakoukoli agregační funkcí.

Syntax: SKUPINA VYTVOŘENÁ<НаименованиеПоля1>, .... , <НаименованиеПоляN>

Příklad použití:

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

11. Design HAVING- umožňuje aplikovat na podmínku výběru dat agregační funkci, podobnou konstrukci WHERE.

Syntax: MÍT<агрегатная функция с условием>

Příklad použití:

dotaz |GROUP BY | Zbožíve skladech.Nomenklatura, | Zbožíve skladech.Sklad | |MÁ | ČÁSTKA(Zboží ve skladech.Na skladě) > 3" ;

12. INDEX PODLE konstrukce- používá se k indexování pole dotazu. Dokončení indexovaného dotazu trvá déle, ale urychluje vyhledávání v indexovaných polích. Lze použít pouze ve virtuálních tabulkách.

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

Příklad použití:

Query.Text = "SELECT | Název Tz.OS, | Číslo složky Tz, | Tz.CodeOS, | Tz.Term, | Tz.Type |PUT DataTz | FROM | &Tz JAK Tz | | INDEX PODLE | Název Tz.OS , | Tz .CodeOS";

13. Stavba KDE- umožňuje uložit podmínku na všechna pole výběru. Do výsledku budou zahrnuty pouze záznamy splňující podmínku.

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

Příklad použití:

Query.Text = //vyber všechny záznamy s CompensationRemainder<>0 a //AmountFor Calc.CompBalance > 100 "SELECT | Compensation RPO zůstatky.Účet, | Kompenzační RPO zůstatky.Dítě, | Kompenzační RPO zůstatky. Kompenzační zůstatek, | Kompenzační RPO zůstatky. SumFor Calc. Comp Balance | PLACE DataTz |FROM | Registr akumulace Kompenzace RP Zůstatky AS Kompenzace RPO Zůstatky Kompenzace GPO.<>0 | A kompenzační RPO zůstatky. Částka pro CalcComp Residual > 100" ;

14. VÝSLEDKY designu ... OBECNĚ- používá se k výpočtu součtů, návrh specifikuje pole, podle kterých budou součty počítány, a agregační funkce aplikované na celková pole. Při použití součtů pro každé pole podle konstrukce TOTALS jsou data seskupena. Existuje volitelný konstrukt GENERAL, jeho použití také poskytuje další seskupování. Níže můžete vidět příklad výsledku dotazu.

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

Příklad použití:

Query.Text = "VYBRAT | Vypořádání. Dohoda s protistranou. Typ smlouvy JAKO Typ smlouvy, | Vypořádání. Dohoda s protistranou JAK Smlouva, | Vypořádání. Protistrana, | Vyrovnání. Částka vzájemných vypořádání Zůstatek JAKO Zbývající | OD | | Software | OBECNÉ, OBECNÉ, | Typ smlouvy";

Seskupení, která byla vytvořena během provádění požadavku, jsou na obrázku zakroužkována, horní část odkazuje na sekci OBECNÉ a druhá na pole ContractContractorContractType.



Související články: