Логически операции (1s предприятие). Логически операции (1s предприятие) Използване на логическо ИЛИ в условия

Следното логически операции:

НЕ логично НЕ (отрицание); И логично И;

ИЛИ логично ИЛИ.

Операндите на логическите операции трябва да бъдат логически изрази. В табл. 2.5 показва резултатите от логическите операции върху логическите изрази LP1 и LP2, които приемат стойностите вярно(I) или Невярно(L).

таблица на истината

Таблица 2.5

LV1 LV2 LV1 И LV2 LV1 ИЛИ LV2 НЕ LV1
И И И И Л
И Л Л И Л
Л И Л И И
Л Л Л Л И

Операторът за отрицание е унарен оператор, поставен отляво на операнда. Всички други разглеждани операции са двоични.

2.6.5. ПРИОРИТЕТ НА ОПЕРАЦИЯ

Всички 1C операции се изпълняват в израза отляво надясно в съответствие с техния приоритет (старшинство), тоест ако две последователни операции имат равен приоритет, първоначално се изпълнява лявата операция. Първо се оценяват подизразите, затворени в скоби. В табл. 2.6 1C операциите са подредени в низходящ ред на техния приоритет.

Приоритет на операцията

Таблица 2. b

%*,/+, НЕ И ИЛИ<, <=, >, >=, =, <>

Коментирайте.Всяка клетка на таблицата съдържа операции с еднакъв приоритет.

пример:

8 % 2 * 3 // Ще върне 0
8 % (2 * 3) // Ще се върне 2

Тъй като логическите операции са по-стари от релационните, следният логически израз е грешен:

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

тъй като логическият подизраз на 2 и 4 първоначално се оценява

операнди, които не присъстват вярноили Невярно.И това не е вярно.

Но логическият израз е верен

(3 > 2) и (4< 5) // Это истински пример.Изчислете резултата от булев израз

(x/a=1) или (b/(a+b)< 1) и не (б = а) или (х <>6) при х = 6.0, а= 2.0 и b=3.0.

Изчислявайки резултата от операциите на подизразите, затворени в скоби, получаваме:

Невярноили вярнои не Невярноили Невярно.

Невярноили вярнои вярноили Невярно.След като направи вярнои вярно невярноили вярноили Невярно.Краен резултат: вярно.

2.7. МАССИВИ

масиве обект с данни, съдържащ множество стойности, достъпни от техния брой ( индекс).

Броят на елементите в масива се нарича негов размер.Размерът на масива може да бъде само целочислена литерална константа.

Оператор на променлива;

декларира едномерен масив (вектор) аот пет елемента. Елементите на масива имат следните имена: а, а, а, аи а.В тези имена стойностите 1-5 са индексите на елементите на масива.

Масивът се счита за дефиниран, ако са дадени стойностите на всички негови елементи. За да зададете началните стойности на елементите на масива (инициализация на масива), е възможен следният цикъл:

за in = 1 до 5 цикъл

Задачи

променете стойностите на 2-рия и 5-ия елемент на масива, съответно а.

Като цяло, числовите изрази могат да се използват като индекси на масиви, наречени индексни изрази.Например:

а = 9,1; // Променете стойността на 3-ия елемент от масива а

Ако индексният израз на масив се оценява на нецялочислена стойност, тогава цялата част от тази стойност се приема като индекс. Например:

а = 9,1; // Променете стойността на 1-вия елемент от масива а

Стойността на индекса не трябва да излиза извън границите на масива. Така че, когато работите с предварително деклариран масив аот петте елемента са грешни оператори

Елементите от един и същ масив могат да бъдат от различни типове. Например:

a = '25.11.01'; // Елемент от тип Дата Елементите на масива могат да бъдат от агрегатен тип. Например:

стр = CreateObject("Directory.Employees");

table = CreateObject("Таблица");

Един масив не може да съдържа други масиви като елементи.

Масивът може да бъде формален параметър на програмен компонент (процедура или функция). В този случай размерът на масива не е посочен и квадратните скоби се запазват. За определяне на размера на масива, предаван на процедурата (функцията), се използва вградената функция Size.

пример:

процедура Инициализация на променливата(ите), размер;

sizeA = Размер(a); // Вградената функция Size ще върне размера на масива а

за yin = 1 чрез цикъл zmA

a[in] = 1; // Сега всички елементи на масива са равни на единия край на Loop;

endProcedures // InitializationArray

процедура Изпълни() променлива;

// Извикване на процедурата, която задава първоначалните стойности на елементите на масива

// Действителният му параметър е името на масива InitializationArray(a);

endProcedures // Изпълни

Условията в заявките се използват, когато е необходимо да се изберат не всички записи от таблицата на информационната база 1C, а само тези, отговарящи на един или повече критерии за избор.

Условията в заявките на 1C могат да бъдат посочени по различни начини, в зависимост от характеристиките на самата заявка и източника на данни.

ключова дума "КЪДЕ"

Ключова дума КЪДЕТОизползва се в 1C заявки, когато се прилага условие към записи, избрани от информационната база. В този случай записите се филтрират на етапа на избора им от таблицата на информационната база.

Например, има маса Изплащания, съдържаща списък на служителите и извършените към тях плащания.

Ако трябва да изберете плащания в размер на най-малко 10 000, тогава заявката ще изглежда така

Заявка. Текст= "ИЗБИРАМ
| Плащания.Служител,
| Плащания Заплата
| ОТ
| Изплащания
|КЪДЕ
| Изплащания. Заплата >=10000"

Резултатът от заявката ще бъде следната таблица.

Ключова дума "HAVING"

Ключова дума ИМАЩАв 1C заявки се използва, когато е необходимо да се направи селекция между вече избрани записи. Например, тази ключова дума се използва, когато искате да филтрирате групирани записи в резултат от заявка.

Нека се върнем към примера по-горе. Да кажем, че трябва да изберем от таблица Изплащанияслужители, получили общо повече от 20 000. За да направите това, първо трябва да въведете групиране по поле Служител, изчислете сумата по поле Заплататаза всеки служител, а след това от получените записи изберете тези, които отговарят на условието.

Текстът на заявката ще изглежда така.

Заявка. Текст= "ИЗБИРАМ
| Плащания.Служител,
| AMOUNT(Плащания.Заплата) КАТО заплата
| ОТ
| Изплащания
|ГРУПА ПО
| Плащания.Служител
|ИМАМ
| AMOUNT(Плащания.Заплата) > 20000"

Резултатът от тази заявка ще бъде такъв.

Този пример ясно показва разликата между ключовите думи КЪДЕТОи ИМАЩА.Ако използваме думата КЪДЕТОвместо ИМАЩА, тогава първо щеше да се направи подбор на записи със заплата над 20 000, а след това да се калкулира сумата за всеки служител за тях. В резултат на това ще получим празен резултат от заявка, т.к нито един служител не е получил повече от 20 000 на едно плащане.

Условия за избор във виртуални регистрови таблици

Всички регистри в системата 1C:Enterprise имат виртуални таблици: натрупващи регистри, информационни регистри, счетоводни регистри.Има два начина за задаване на условия за виртуални таблици:

  1. чрез параметрите на виртуалната таблица;
  2. чрез секции за заявки КЪДЕТОили ИМАЩА.

Разлики между разделите КЪДЕТОи ИМАЩАвече разгледахме. За да разберете как условията в тези секции на заявка се различават от условията в параметрите на виртуалната таблица, трябва да разберете какво е виртуални регистрови таблицив 1С. Важната им характеристика е, че те не съществуват в информационната база. Това е инструмент, предоставен ни от платформата 1C: Enterprise за оптимизиране на конфигурацията.

По този начин, ако условието е посочено в параметрите на виртуалната таблица, то се прилага на етапа на нейното формиране от записите на реалната регистрова таблица. И ако в секции КЪДЕТОили ИМАЩА, след това - към записите на вече формираната виртуална таблица.

Помислете за пример. Дадена е таблица на периодичния регистър на информацията Валути.

Необходимо е да изберете валути за най-малката дата, чийто обменен курс е по-малък от 30 рубли.

Заявка с условие в параметрите на виртуалната таблица ще изглежда така:

В този случай ще получим един запис: Долар 28.3от 01.02.2007г. Това ще бъде правилното решение на проблема.

Ако поставим условието в секцията КЪДЕТО,тогава резултатът от заявката ще бъде празен, тъй като първо ще бъде направено изрязване на първите за всяка валута (в резултат ще получим два записа от 01.01.2007 г. 30,25 долараи 40,5 евро), а след това от тях ще бъдат избрани записи, които отговарят на условието. Но и двамата получиха записите в състояние добре< 30 не удовлетворяват.

Към полета на заявка могат да се прилагат различни функции. В този раздел ще разгледам най-често използваните (от мен самия) от тях.

ВРЕМЕ ЗА СРЕЩА- задава постоянно поле с тип Дата. Синтаксис:

ВРЕМЕ ЗА СРЕЩА(<Год>,<Месяц>,<День>,<Час>,<Минута>,<Секунда>)
Заявка.Текст =
"ИЗБИРАМ
| DATETIME(2013, 1, 1) КАТО OMG";// 1 януари 2013 г.

РАЗЛИКА В ДАТАТА- връща разликата от 2 дати в посоченото измерение (година, месец, ден, час, минута, секунда). Синтаксис:

РАЗЛИЧНА ДАТА(<Дата1>, <Дата2>, <Тип>)
Заявка.Текст =
"ИЗБИРАМ
| DATEDIFF(DATETIME(2013, 2, 28), DATETIME(2013, 1, 1), DAY)
| КАТО ДНИ ДО КРАЯ НА ЗИМАТА“;

ЗНАЧЕНИЕ- задава константно поле с предварително дефиниран запис на една от таблиците на базата данни, можете също да подадете нулева препратка. Синтаксис:

ЗНАЧЕНИЕ(<Имя>)
Заявка.Текст =
"ИЗБИРАМ
//предварително дефиниран елемент на директория
| VALUE (Справка. Валути. Рубли) КАТО рубли,
// празна връзка към документа
| VALUE(Document.Customer Invoice.NullReference) КАТО EmptyInvoice,
// стойност на изброяване
| VALUE(Enumeration.GenderPersons.Male) КАТО мъжки,
//предварително дефинирана сметка от сметкоплан
| VALUE(Сметкоплан. Самоиздържащи се. Стоки) AS Account_41";

ИЗБОР- аналог на конструкцията IF за езика за заявки 1C. Синтаксис:

ИЗБОР
КОГА<Выражение>ТОГАВА<Выражение>
В ПРОТИВЕН СЛУЧАЙ<Выражение>
КРАЙ
Заявка.Текст =
"ИЗБИРАМ
//ако цената е по-малка от 100, тогава заявката пак ще върне 100
// в противен случай заявката ще върне реалната цена
| ИЗБОР
| КОГА Продукти.Цена > 100
| ТОГАВА Стоки.Цена
| ОЩЕ 100
| КРАЙ КАТО ЦЕНА
| ОТ

ВРЪЗКА<Имя таблицы>
Заявка.Текст =
"ИЗБИРАМ
//ако типът стойност на регистратора е документ Разписка,
//тогава заявката ще върне "Стоката е получена", в противен случай "Стоката е продадена"
| ИЗБОР
| КОГА остава Регистратор ВРЪЗКА Документ Разписка
| ТОГАВА ""Получаване на стока""
| ОЩЕ ""Продажба на стоки""
| КРАЙ КАТО ГЛЕД НА ДВИЖЕНИЕТО
| ОТ
| Регистър на натрупването. Остава КАТО Остава";

МЕЖДУ- проверява дали стойността е в диапазона. Синтаксис:

МЕЖДУ<Выражение>И<Выражение>
Заявка.Текст =
//получете всички продукти в ценовия диапазон от 100 до 1000
"ИЗБИРАМ
| Продукти.Продукт
| ОТ
|КЪДЕ
| Стоки.Цена МЕЖДУ 100 И 1000";

ATи В ЙЕРАРХИЯТА- проверете наличието на стойност в предадения списък. IN HIERARCHY също ще разшири йерархичните елементи надолу и ще търси стойността сред подчинените елементи. Синтаксис:

AT(<СписокЗначений>), В ЙЕРАРХИЯТА(<СписокЗначений>)
Заявка.Текст =
//получаване на всички подсметки на 41-ви и 10-ти акаунт
"ИЗБИРАМ
| Самоиздържаща се. Референтна фактура като AS
| ОТ
| Сметкоплан Самоиздържащ се AS Самоиздържащ се
|КЪДЕ
| Самоиздържащи се. Справка В ЙЕРАРХИЯ (СТОЙНОСТ (Сметноплан. Самоиздържащи се. Стоки),
| VALUE(Сметкоплан. Самоиздръжка. Материали))";

КАТО- позволява да сравните низ с шаблон, използван, когато низът за търсене не е твърдо кодиран. Изграждане на шаблони:

  • % (процент): последователност, съдържаща произволен брой произволни знаци
  • _ (долно черта): един произволен знак
  • [...] (един или повече знака в квадратни скоби): всеки единичен знак, посочен в квадратни скоби. Изброяването може да съдържа диапазони, като a-z, което означава всеки знак в диапазона, включително краищата на диапазона
  • [^...] (в квадратни скоби знак за отрицание, последван от един или повече знака): всеки единичен знак, различен от изброените след знака за отрицание

Синтаксис:

КАТО"<ТекстШаблона>"
Заявка.Текст =
//намерете всички столове в директорията на номенклатурата
"ИЗБИРАМ
| Продукти.Продукт
| ОТ
| Справочник Стоки AS Стоки
|КЪДЕ
| Стоки.Име LIKE ""инструмент%""";
// тази заявка ще върне стол, стол, стол, офис стол и т.н.,
// но таблицата няма да бъде в този списък

Е NULL- ако полето не е дефинирано, тогава го дефинира в посочения израз. Синтаксис:

ISNULL(<Выражение>, <Выражение>)
Заявка.Текст =
//Ако полето не е дефинирано (NULL)? след това му дайте празна препратка
"ИЗБИРАМ
| ISNULL(Products.Reference, VALUE(Catalog.Products.EmptyReference)) КАТО продукт
| ОТ
| Наръчник. Стоки като стоки";

Отбелязвам, че NULL трябва да се обработва, т.к това е много "причудлив" тип (системата 1C:Enterprise 8 дефинира специален NULL тип с един елемент). Ако се опитате да сравните със стойност от този тип или да я присвоите, определено ще срещнете грешка, така че не забравяйте за тази конструкция. Когато NULL може да се появи:

  • след обединяване на таблици, с изключение на вътрешната (следваща статия за присъединяването);
  • след избор на атрибути, дефинирани само за групи от директории и обратно;
  • след избиране на колоната на дневника на документите, докато текущият документ няма подробности, включени в тази колона.

Това не е пълен списък с функциите на езика за заявки 1C 8, ако се интересувате от работата на други - пишете в коментарите.

По правило изучаването на всеки език за програмиране започва с пример за писане на първата проста програма („Здравей, свят!“). Това се прави, за да се покаже нагледно работата с основни синтактични конструкции. Няма да правим изключение от този често срещан начин на представяне на материала при изучаване на нова среда за разработка и затова първата ни статия трябва да се разглежда в същия дух. В него ще анализираме подробно отговорите на следните въпроси относно програмирането на платформата 1C:Enterprise 8:

  • Къде и с каква помощ да напишете програмен код на вградения 1C език?
  • Какво представляват програмните модули, какви са правилата за работа с тях?
  • Какво е променлива, как да работим с нея, как и къде да я декларираме?
  • Какви са операторите за сравнение, присвояване и условни оператори и как ги използвате?
  • Булеви операции - какво представляват и как да работим с тях?
  • Защо са необходими цикли и как да ги използвате?

Статията ще бъде полезна за всички, които все още не са запознати с разработката на платформата 1C:Enterprise 8, но искат да научат как да програмират в 1C.

Приложимост

Материалът е подходящ за платформата "1C:Enterprise 8" издания 8.2. и 8.3.

Променливи и оператори

В тази статия започваме да изучаваме вградения език 1C:Enterprise 8. Изпълнимият код се съдържа в програмните модули.

Има доста голям брой модули, които са предназначени да обработват различни събития.

Така че влизането на потребителя се обработва в един модул, а обработката на потребителя, който щракне върху определен бутон, се обработва в съвсем различен.

По този начин всеки модул описва поведението на конфигурацията в определен момент. Модулът съдържа преди всичко раздел за декларация на променлива. Тези. можем да декларираме някои променливи в модул.

В бъдеще те могат да се използват в процедурите и функциите на този модул. Ако променливата е дефинирана с ключовата дума Export, тогава тя ще бъде достъпна извън този модул. Пример за ред за деклариране на променлива:

Рем Склад, Дивизия, Износ на складовъд;

След декларацията на променливите има раздел с процедури и функции.

Зад тях е секцията на основната програма, която ще се изпълнява в момента на достъп до този модул.

Например, в основния раздел на програмата можете да инициализирате променливи, т.е. дайте им някои начални стойности:

Състояние=1;
NewExpression=2;
резултат=3;

Модулът може да се разглежда като комбинация от различни оператори, които изпълняват различни действия, от които се нуждаем.

Разделителят на оператора е знакът ";" (точка и запетая). Този знак е знак за края на оператора. Тези. операторът може да се запише така:

Резултат=100X200
+400
-600;

Няма значение на колко реда е изявлението.

Разбира се, често е по-удобно и по-ясно операторът да се постави на една линия, но понякога операторите са доста дълги (броят на редовете може разумно да достигне няколко десетки).

Точката и запетаята може да бъде пропусната в крайния оператор на дадена конструкция, например процедура. Тези. следният код ще работи:

Процедура CalculateValue()

Начална стойност = 100;
Междинна стойност = Начална стойност / 5;
Крайна стойност = Начална стойност + междинна стойност

EndProcedure

Въпреки това е по-добре да използвате точка и запетая в крайното изявление. Възможно е след време строителството да бъде продължено, а крайният оператор вече да не е окончателен. Ще трябва специално да следим тази ситуация.

Променливите са проектирани да задържат някаква стойност от всеки тип данни. Използват се за междинно съхранение на информация за обработка.

В почти всеки софтуерен модул, който извършва някакво действие, има различни променливи. Въвеждането на променлива по стойности в Платформа 1C:Enterprise 8 е меко.

Например променлива може да съдържа стойност от един тип данни и няколко реда по-късно от друг тип:

Създаден = фалшив;
Създаден = вярно;
Създаден =100;

В първите два израза стойността на променливите е булева, а в третия се променя на числова стойност. Тези. въвеждането зависи от стойността, която е присвоена на тази променлива.
Променливите могат да бъдат декларирани по два начина:

  • имплицитен метод (споменаването от лявата страна на оператора за присвояване описва тази променлива, няма предварително описание на променливата с думата Променлива, т.е. няма специален раздел от декларацията на променливи);
  • изрична декларация на променливи (Variable ControlData;). Използва се изрична декларация на променливи, например, ако се очаква последващото прехвърляне на тази променлива към функция.

За имената на променливите се използва класическото описание на идентификатора. Идентификаторът се състои от букви, цифри и долни черти. Идентификаторът трябва да започва с буква или долна черта.

В този случай името на променливата трябва да отразява значението на тази променлива. Имената на променливи с една буква (като A, B, C) са лоши примери. Те не отразяват същността на променливите.

Примери за правилни имена на променливи: Counter (нарастваща променлива за цикъла), Contractor. Ако името на променливата съдържа няколко думи, тогава всяка нова дума, за по-голяма яснота, трябва да започва с главна буква.

Запазени думи, като процедура, функция, цикъл, краен цикъл и т.н., не могат да се използват в имена на променливи. (тези конструкции са маркирани в червено в програмния модул).

Резервираните думи са вградени езикови оператори и има доста от тях. Всички те са представени в Помощник за синтаксис.

Трябва да се отбележи, че типовете данни не са запазени думи (например Array, Boolean, True, False). Системата ще възприеме правилно такива имена на променливи.

За писане на програмен код регистрът няма значение. Например думата Процедура може да бъде написана както с главни, така и с малки букви. Освен това, главни и малки букви могат да се преплитат в рамките на една дума.

Няма значение за Платформата. Въпреки това, според правилата на доброто възпитание, началото на думата трябва да се пише с главна буква, всички останали букви с малки букви.

Относно езика. Можете да използвате както руски, така и английски, както и комбинация от два езика. Ако е удобно за някого, можете спокойно да използвате английски за писане на програмен код, както и да комбинирате руски и английски. Няма значение за платформата.

Много имена на английски са доста трудни за запомняне. При използване на комбинация от два езика четимостта на програмния код се влошава.

Булеви операции

Операторите за сравнение много често използват булева логика, която връща True или False.

Например, в условен оператор можете да сравните: Ако Събитие = Продажба Тогава алгоритъмът ще върви по един клон (т.е., ако стойността е True), според условието False се изпълнява друг клон на алгоритъма.

Условията могат да бъдат доста сложни, могат да се комбинират, като се използват следните оператори: И, ИЛИ и НЕ. И така, за оператора AND:

Истината И Истината = Вярно;
Вярно И Невярно = Невярно;
False AND True = False;
False И False = False.

За оператора ИЛИ е достатъчно един от операндите да е равен на True, тогава стойността на комбинацията ще бъде True. Стойността е False само ако и двата операнда са False.

Операторът NOT просто инвертира текущата стойност (False to True, True to False).

Използвайки комбинация от тези оператори, можете да изградите доста сложни условия. Когато съставяте сложни условни изрази, вземете предвид предимството.

Операторът NOT има най-висок приоритет, следван от оператора AND, следван от оператора OR. Всичко, оградено в скоби, има най-висок приоритет и се изпълнява първо.

Например, нека да приоритизираме (последователност на изпълнение) за операциите в горния израз:

НЕ(Условие1 ИЛИ Условие2) И Условие3 ИЛИ Условие4
1.Резултат1 = (Условие1 ИЛИ Условие2);
2. Резултат2 = НЕ Резултат1;
3. Резултат3 = Резултат2 И Условие1;
4. Резултат = Резултат3 ИЛИ Условие4;

Има правило за трансформация:

НЕ (Условие1 ИЛИ Условие2) = НЕ Условие1 И НЕ Условие2.

Въпреки това, не винаги трябва да се стремите да опростите израза, тъй като често, логично, разширеният израз е по-лесен за четене.

оператор на присвояване

Операторът на присвояване не трябва да се бърка с равенство, въпреки че имат същия правопис.

Принципът на оператора за присвояване е такъв, че на лявата стойност (променливата от лявата страна) се присвоява стойността, която е вдясно от знака за равенство. Да вземем пример:

Променлива1 = Променлива2 = Променлива3;

На променлива 1 се приписва стойността на равенството от булева логика, т.е. Вярно, ако Променлива2 = Променлива3, или False в противен случай.

При тестване за позицията на начинаещ програмист често се използва задачата: да се разменят стойностите на две променливи на места.

Този проблем се решава с помощта на оператора за присвояване и има две решения.

Решение №1, използващо временна променлива:
TempVar = Променлива1;
Променлива1 = Променлива2;
Променлива2 = Темппроменлива;

Решение №2:
Променлива1 = Променлива1 + Променлива2;
Променлива2 = Променлива1 – Променлива2;
Променлива1 = Променлива1 – Променлива2;

Условен оператор

Има такъв оператор If, след който е необходимо да се опише някакво условие (самото условие може да бъде доста голямо). Условието е последвано от думата Тогава и операторите, които трябва да бъдат изпълнени.

Това може да бъде последвано от ключовата дума Else и поредица от други твърдения. Ако има няколко различни условия, можете да използвате поредица от ключови думи ElseIf(виж примера по-долу). Цялата структура трябва да бъде завършена с ключовата дума EndIfпоследвано от точка и запетая.

В допълнение към простите и множество условия, има съкратена форма на условния оператор: ?(Условие, Израз1, Израз2);

Ако условието е вярно, тогава Израз1, в противен случай - Израз 2. Пример за код: ExpensiveItem = ?(Item.Price>100000, True, False);

На практика вместо сравнение записва със стойността Вярно (лъжа) Тип:

Ако Променлива = Вярно Тогава
и
Ако Променлива = Невярно Тогава

всъщност се използва еквивалентната нотация:

Ако Променлива Тогава
и
Ако НЕ Променлива Тогава

Циклични оператори

За всякакъв вид цикъл се изисква изрична индикация за края на този цикъл с помощта на ключовата дума EndCycle. Има няколко вида цикли.

Цикъл по брояч- цикъл с фиксиран брой повторения. Условието за излизане от цикъла е да е надвишена граничната стойност. Пример за използване за изчисляване на стойността на A!

А = 5;
Факториал = 1;
За Counter = 1 By A Loop
Факториален = Факториален * Брояч;
EndCycle;

Цикъл по условие– се изпълнява, докато условието на този цикъл е вярно. пример:

RemainderSum = 1000;
Цена на допълнителен артикул = 243;
Количество = 0;
Докато RemainingAmount>0 Цикъл
Количество = Количество+1;
Оставаща сума = Оставаща сума - Количество * Цена на допълнителни стоки;
Цена на допълнителен артикул = Цена на допълнителен артикул * 0,8;
EndCycle
Количество = Количество-1;

Този цикъл изчислява колко единици продукт могат да бъдат закупени за дадена сума (1000 рубли), ако след закупуване на всяка единица от продукт, предишната му цена се умножи по коефициент 0,8. Първоначалната цена на стоките е 243 рубли.

Пример за грешка при използване на този тип цикъл от начинаещи е вечен цикъл, когато условието на цикъла е първоначално вярно, но в самия цикъл не се променя по никакъв начин.

Преминаване през колекции (друго име е За всяка).

Платформата има доста голям брой колекции (това са контейнери, които съдържат елементи от определен тип).

Можете да преглеждате елементите на колекция, като използвате специален вид цикъл.

Например, има масив от числа, трябва да изчислите сумата от всички елементи на масива:

Сума = 0;
За всеки елемент от цикъл на масив
Сума=Сбор+Елемент;
EndCycle;

Има специални оператори за цикли: Продължетеи прекъсване.

Ако в даден момент от цикъла изпълнението на по-нататъшни оператори на този цикъл стане безсмислено, тогава операторът се използва за връщане в началото на цикъла и организиране на следващия му цикъл. Продължете.

Оператор прекъсванепозволява на цикъла да приключи дори ако условието на цикъла е вярно.

Това приключва първото ни запознаване с развитието на вътрешния език на 1C.

Ами Hello World? Все още не сме го написали, нали? Да, но нищо не ви пречи да го направите сами, т.к. знанията вече са достатъчни. Е, ако това не работи, можете да погледнете тук.

В тази статия искаме да обсъдим с всички вас езикови функции за заявки 1s, както и конструкции на езика на заявките. Каква е разликата между функция и структура? Функцията се извиква със скоби и възможни параметри в тях, а конструкцията се записва без скоби. Несъмнено всички конструкции и функции на езика за заявки 1sнаправи процеса на събиране на данни гъвкав и многофункционален. Тези функции и конструкции се прилагат към полета на заявка, а някои се прилагат и към условия.

Функции на езика на заявките 1s

Тъй като ясно описание езикови функции за заявки 1sе много по-рядко срещано от описанието на структурите, решихме да започнем да разглеждаме функциите. Сега нека анализираме всеки един поотделно, описвайки неговата цел, синтаксис и пример за употреба, така че:

1. Функция ВРЕМЕ ЗА СРЕЩА- тази функция създава постоянно поле с тип "Дата".

Синтаксис: ВРЕМЕ ЗА СРЕЩА(<Год>,<Месяц>,<День>,<Час>,<Минута>,<Секунда>)

Пример за употреба:

2. Функция РАЗЛИКА В ДАТАТА- връща разликата от две дати в едно от измеренията (година, месец, ден, час, минута, секунда). Измерването се предава като параметър.

Синтаксис: РАЗЛИЧНА ДАТА(<Дата1>, <Дата2>, <Тип>)

Пример за употреба:

Query.Text = "ИЗБЕРЕТЕ | РАЗЛИКА В ДАТАТА(ДАТА ВРЕМЕ(2015, 4, 17), ДАТА ВРЕМЕ(2015, 2, 1), ДЕН) | КАТО Брой дни";

3. Функция VALUE- задава константно поле с предварително дефиниран запис от базата данни, можете също да получите нулева препратка от всякакъв тип.

Синтаксис: VALUE(<Имя>)

Пример за употреба:

Query.Text = "SELECT //предварително дефиниран елемент | VALUE(Currency.Dollar.Catalog.Dollar) КАТО долар, //празна справка | VALUE(Document.IncomingGoodsServices.EmptyReference) КАТО разписка, //трансферна стойност | VALUE(Transfer.LegalIndividual . Физическо лице) КАТО индивидуално, //предварително дефинирана сметка | VALUE(Сметкоплан.Самоиздържащи се.Материали) КАТО Сметка_10" ;

4. SELECT функция- имаме аналог на конструкцията IF, която се използва в кода, само тази се използва в 1C заявки.

Синтаксис: ИЗБОР КОГА<Выражение>ТОГАВА<Выражение>В ПРОТИВЕН СЛУЧАЙ<Выражение>КРАЙ

Пример за употреба:

Request.Text = //ако сумата е повече от 7500, тогава трябва да има отстъпка от 300 рубли, //следователно, ако условието се задейства, тогава функцията //връща сумата - 300 //в противен случай заявката просто ще върне сумата "SELECT | SELECT | WHEN PMIncome.Amount > 7500 | THEN PTReceipt.Amount - 300 | ELSE PTReceipt.Amount | END AS AmountDiscounted |FROM | Document.ReceiptofGoodsServices.Goods ASTRe";

5. ЕКСПРЕС функция- ви позволява да изразявате постоянно поле с определен тип.

Синтаксис: EXPRESS(Име на поле като име на тип)

Пример за употреба:

Query.Text = "ИЗБЕРЕТЕ РАЗЛИЧНО | Продажби.Регистратор.Номер, | ИЗБЕРЕТЕ | КОГА Продажби.Регистратор REF документ.Разход | THEN EXPRESS(Продажби.Регистратор КАТО документ.Разход) | ELSE SELECT | КОГА Продажби.Регистратор REF Документ. THEN EXPRESS(Продажби.Регистратор КАТО документ.Освобождаване) | КРАЙ | ... | КРАЙ КАТО номер | ОТ | Регистър за натрупване.Покупки КАТО Покупки";

Все още има вариант за използване на функцията EXPRESS в полета от смесени типове, където се срещат такива? Най-простият пример е "Регистратор" за всеки регистър. И така, защо трябва да квалифицираме типа в регистратора? Нека разгледаме ситуацията, когато изберем полето "Номер" от регистратора, от коя таблица ще бъде избран номерът? Правилният отговор на всички! Следователно, за да може нашата заявка да работи бързо, трябва да посочим изричен тип, използвайки функцията EXPRESS

Пример за употреба:

Query.Text = "ИЗБЕРЕТЕ | EXPRESS(Номенклатура.Коментар КАТО низ(300)) КАТО коментар, | EXPRESS(Номенклатура.Сума КАТО номер(15,2)) КАТО Сума |ОТ | Референтна.Номенклатура КАТО номенклатура";

6. ISNULL функция(алтернативно изписване IS NULL) - ако полето е от тип NULL, то се заменя с втория параметър на функцията.

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

Пример за употреба:

Също така имайте предвид, че е желателно ВИНАГИ да замените типа NULL с някаква стойност, т.к сравнението с NULL винаги се оценява на FALSE, дори ако сравнявате NULL с NULL. Най-често NULL стойностите се формират в резултат на присъединяване на таблици (всички видове обединения с изключение на вътрешни).

Query.Text = //Изберете целия артикул и неговите баланси //ако няма баланс в някой артикул, тогава ще има поле //NULL, което ще бъде заменено със стойността 0 "SELECT | No.Ref, | ISNULL (GoodsInWarehouseRemains.InStockRemain, 0) КАК Остатък | ОТ | Указател. Номенклатура КАТО Nom | LEFT JOIN Регистър за натрупване.

7. функция ПРЕДСТАВЛЕНИЕ- ви позволява да получите представяне на полето за заявка.

Синтаксис: ПРОИЗВОДИТЕЛНОСТ(<НаименованиеПоля>)

Пример за употреба:

Query.Text = "SELECT | REPRESENTATION(Free RemainsRemains.Nomenclature) КАТО номенклатура, | REPRESENTATION(FreeRemainsRemains.Warehouse) AS Warehouse, | FreeRemainsRemains.AvailableRemains |FROM | Регистър за натрупване.FreeinsRemainsRemains FreeRemainsRemains"

Конструкции в езика на заявките 1s

По-горе обсъдихме с вас езикови функции за заявки 1s, сега е време да помислим конструкции в език за заявки 1s, те са не по-малко важни и полезни, нека започваме.

1. Строителство ЛИНК- е оператор за проверка на логически референтен тип. Най-често се среща при тестване на поле от съставен тип за конкретен тип. Синтаксис: ВРЪЗКА<Имя таблицы>

Пример за употреба:

Query.Text = //ако типът стойност на регистратора е документ Разписка, //тогава заявката ще върне "Входящи стоки", в противен случай "Продажба на стоки" "ИЗБЕРЕТЕ | ИЗБЕРЕТЕ | КОГА остава.Регистратор ВРЪЗКА Документ.Входящи стокиУслуги | ТОГАВА ""Входящи" | ОЩЕ "Разход" | КРАЙ КАТО Вид на движение | ОТ | Регистър на натрупването. Останки от стоки в складове КАТО Останки ";

2. Строителство МЕЖДУ- този оператор проверява дали стойността е в посочения диапазон.

Синтаксис: МЕЖДУ<Выражение>И<Выражение>

Пример за употреба:

Query.Text = //получаваме цялата номенклатура, чийто код е в диапазона от 1 до 100 "SELECT | Номенклатура.Справка |ОТ | Каталог.Номенклатура КАТО Номенклатура |КЪДЕ | Номенклатура.Код МЕЖДУ 1 И 100" ;

3. Конструкция Б и Б на ЙЕРАРХИЯТА- проверете дали стойността е в предадения списък (масиви, таблици със стойности и т.н. могат да се предават като списък). Операторът IN HIERARCHY ви позволява да видите йерархията (пример за използване на PlanAccounts).

Синтаксис: AT(<СписокЗначений>), В ЙЕРАРХИЯТА(<СписокЗначений>)

Пример за употреба:

Query.Text = // изберете всички подсметки на акаунта "ИЗБЕРЕТЕ | Самоиздържащ се. Свържете КАТО акаунт | ОТ | План на сметки. Самоиздържащ се КАТО Самоиздържащ се | КЪДЕ | Самоиздържащ се. Справка В ЙЕРАРХИЯ СТОЙНОСТ( График на сметки. Самоиздръжка. Стоки)";

4. Строителство LIKE- тази функция ни позволява да сравним низ с модел на низ.

Синтаксис: КАТО"<ТекстШаблона>"

Опции за шаблон за линия:

% - последователност, съдържаща произволен брой произволни знаци.

Един произволен знак.

[...] - всеки единичен знак или поредица от знаци, изброени в квадратни скоби. Изброяването може да съдържа диапазони, като a-z, което означава всеки знак в диапазона, включително краищата на диапазона.

[^...] - всеки единичен знак или поредица от знаци, изброени в квадратни скоби, с изключение на тези, изброени след знака за отрицание.

Пример за употреба:

Query.Text = //намерете цялата номенклатура, която съдържа основния TABUR и започва //с малка или главна буква t "SELECT | Nomenclature.Reference |FROM | Directory.Nomenclature AS Номенклатура |WHERE | Goods.Name LIKE "" [Тт ]abur%""" ;

5. Разрешено проектиране- това изявление ви позволява да изберете само онези записи от базата данни, за които обаждащият се има право да прочете. Тези права се конфигурират на ниво запис (RLS).

Синтаксис: РАЗРЕШЕНО се изписва след ключовата дума SELECT

Пример за употреба:

Query.Text = "ИЗБЕРЕТЕ РАЗРЕШЕНО | Counterparties.Reference |FROM | Directory.Counterparties AS Counterparties";

6. Строителство РАЗЛИЧНО- ви позволява да изберете записи, в които няма повтарящи се записи.

Синтаксис: РАЗЛИЧНО се изписва след ключовата дума SELECT

Пример за употреба:

Request.Text = //избира записи, за които читателят има права "ИЗБЕРЕТЕ РАЗЛИЧНО | Counterparties.Name |FROM | Directory.Counterparties AS Counterparties" ;

Конструкцията DIFFERENT може също да се използва с оператора ALLOWED и други оператори.

Пример за употреба:

Query.Text = //избира различни записи, за които читателят има права "ИЗБЕРЕТЕ РАЗРЕШЕНО РАЗЛИЧНО | Contractors.Name |FROM | Directory.Contractors AS Contractors";

7. Строителство ПЪРВО- избира броя на записите, посочени в параметъра от резултата от заявката.

Синтаксис: ПЪРВО<число>

Пример за употреба:

Query.Text = //изберете първите 4 GTD номера от директорията "ИЗБЕРЕТЕ ПЪРВИТЕ 4 | GTD Numbers.Reference |FROM | Catalog.GTE Numbers AS GTD Numbers";

8. Дизайн ЗА ПРОМЯНА- позволява да заключите таблицата, работи само при транзакции (отнася се само за автоматични заключвания).

Синтаксис: ЗА СМЯНА<НаименованиеТаблицы>

Пример за употреба:

Query.Text = "ИЗБЕРЕТЕ | FreeRemainsRemains.Nomenclature, | FreeRemainsRemains.Warehouse, | FreeRemainsRemains.AvailableRemains |FROM | Регистър за натрупване.FreeRemains.Remains AS FreeRemainsRemains |ЗА ПРОМЯНА |

9. Структура ORDER BY- сортира данните по конкретно поле. Ако полето е връзка, тогава при задаване на флага АВТОМАТИЧНА ПОРЪЧКАще бъдат сортирани според представянето на връзката, ако флагът е изключен, тогава връзките се сортират по старшинство на адреса на връзката в паметта.

Синтаксис: СОРТИРАНЕ ПО<НаименованиеПоля>АВТОМАТИЧНА ПОРЪЧКА

Пример за употреба:

Query.Text = "SELECT | FreeRemainsRemains.Номенклатура КАТО номенклатура, | FreeRemainsRemains.Warehouse КАТО склад, | FreeRemainsRemains.In StockRemaining |От |

10. Дизайн GROUP BY- използва се за групиране на низове на заявка по определени полета. Числовите полета трябва да се използват с всяка агрегатна функция.

Синтаксис: ГРУПИРАЙ ПО<НаименованиеПоля1>, .... , <НаименованиеПоляN>

Пример за употреба:

Query.Text = "SELECT | ItemsInWarehouse.Nomenclature КАТО Номенклатура, | ItemsInWarehouse.Warehouse, | SUM(ItemsInWarehouse.InStock) КАТО Наличност |ОТ |

11. Дизайн ИМАЩ- позволява да приложите агрегатна функция към условието за избор на данни, подобно на конструкцията WHERE.

Синтаксис: ИМАЩА<агрегатная функция с условием>

Пример за употреба:

Query.Text = //избира групирани записи, в които полето InStock е по-голямо от 3 "SELECT | GoodsInStock.Nomenclature AS Номенклатура, | GoodsInWarehouse.Warehouse, | SUM(ItemsInWarehouse.InStock) AS InStock |ОТ | AccumulationRegister.Goodshouse ASInWarehouses | |ГРУПА ПО | Стоки в складове. Номенклатура, | Стоки в складове. Склад | | ИМАЩА | СУМА (Стоки в складове. На склад) > 3" ;

12. INDEX BY конструкция- използва се за индексиране на полето на заявката. Завършването на индексирана заявка отнема повече време, но ускорява търсенията в индексирани полета. Може да се използва само във виртуални таблици.

Синтаксис: ИНДЕКС ПО<Поле1, ... , ПолеN>

Пример за употреба:

Query.Text = "SELECT | Tz.OS Име, | Tz.Folder Number, | Tz.CodeOS, | Tz.Term, | Tz.Type |PUT DataTz |FROM | &Tz HOW Tz | | INDEX BY | Tz.OS Име , | Tz .CodeOS";

13. Строителство КЪДЕ- ви позволява да наложите условие на всякакви полета на селекцията. Само записи, които отговарят на условието, ще бъдат включени в резултата.

Синтаксис: КЪДЕТО<Условие1 ОператорЛогСоединения УсловиеN>

Пример за употреба:

Query.Text = //изберете всички записи с CompensationRemainder<>0 и //AmountFor Calc.CompBalance > 100 "SELECT | Compensation RPO баланса.Account, | Compensation RPO баланса.Child, | Compensation RPO баланса. Compensation Balance, | Compensation RPO баланса. SumFor Calc. Comp Balance | PLACE DataTz |FROM | Регистър за натрупване Компенсация RP Баланси AS Компенсация RPO Баланси | Компенсация на GPO.<>0 | И баланси за компенсация на RPO. Сума за остатък от CalcComp > 100" ;

14. РЕЗУЛТАТИ ОТ ПРОЕКТА ... ОБЩО- използва се за изчисляване на общите суми, дизайнът определя полетата, чрез които ще бъдат изчислени сумите, и агрегатните функции, приложени към общите полета. Когато се използват суми за всяко поле след конструкцията TOTALS, данните се групират. Има опционална конструкция GENERAL, използването му също така осигурява допълнително групиране. Можете да видите пример за резултата от заявката по-долу.

Синтаксис: РЕЗУЛТАТИ<АгрегатнаяФункция1, ... , АгрегатнаяФункцияN>НА<ОБЩИЕ> <Поле1, ... , ПолеN>

Пример за употреба:

Query.Text = "ИЗБЕРЕТЕ | Сетълменти.Споразумение с контрагента.Тип на споразумение КАТО Тип споразумение, | Сетълменти.Споразумение със страна КАТО Споразумение, | Сетълменти.Противоположна страна, | Сетълменти.Сума на взаимните разплащания Баланс КАТО Салдо |ОТ, | Софтуер | ОБЩИ | Вид на договора";

Групировките, които са били формирани по време на изпълнението на заявката, са обградени на фигурата, горната се отнася за секция GENERAL, а втората за полето ContractContractorTypeContract.



Свързани статии: