Express Boolean в 1C заявка 8.3. Конвертиране на настройки за примитивен тип

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

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

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

1. функция ДАТА ЧАС - тази функциясъздава постоянно поле от тип "Дата".

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

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

2. Функция DATE DIFFERENCE- връща разликата между две дати в едно от измеренията (година, месец, ден, час, минута, секунда). Измерването се предава като параметър.

Синтаксис: DIFFERENCEDATE(<Дата1>, <Дата2>, <Тип>)

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

Query.Text = "ИЗБЕРЕТЕ | DIFFERENCEDATE(DATETIME(2015, 4, 17), DATETIME(2015, 2, 1), DAY) | AS Брой дни";

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

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

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

Request.Text = "SELECT //предварително дефиниран елемент | VALUE(Directory.Currencies.Dollar) AS Dollar, //празна връзка | VALUE(Document.Receipt of Goods and Services.EmptyLink) AS Receipt, //трансферна стойност | VALUE(Transfer . Юридическо лице. Физическо лице) AS Физическо лице, //предварително определен акаунт VALUE(Сметкоплан. Самосчетоводни материали) AS Account_10" ;

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

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

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

Request.Text = //ако сумата е повече от 7500, тогава трябва да има отстъпка от 300 рубли, //така че ако условието е задействано, тогава функцията //връща Сума - 300 //в противен случай заявката ще върне просто Сума "ИЗБЕРЕТЕ | ИЗБЕРЕТЕ | КОГАТО TCReceipts.Amount > 7500 | ТОГАВА TCReceipts.Amount - 300 | ДРУГО TCReceipts.Amount | КРАЙ КАТО AmountWithDiscount | ОТ |

5. Функция EXPRESS- позволява ви да изразите постоянно поле с определен тип.

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

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

Query.Text = "SELECT VARIOUS | Sales.Registrar.Number, | SELECT | WHEN Sales.Registrar LINK Document.Expense | THEN EXPRESS(Sales.Registrar AS Document.Expense) | ДРУГА ИЗБЕРЕТЕ | WHEN Sales.Registrar LINK Document.Implementation | THEN EXPRESS(Sales.Registrar AS Document.Implementation) |. END AS Number |. Натрупващ се регистър AS Purchases";

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

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

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. Функция ISNULL(алтернативно изписване ISNULL) - ако полето е от тип NULL, то се заменя с втория параметър на функцията.

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

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

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

Query.Text = //Изберете целия артикул и неговите баланси //ако няма баланс в някой артикул, тогава ще има поле //NULL, което ще бъде заменено със стойността 0 "SELECT | No. Link, | ISNULL (ProductsInStockRemaining, 0) HOW Remaining | FROM |. LEFT CONNECTION Accumulations.GoodsInWarehousesRemainings | PO (GoodsInWarehousesRemainings = No.Link)";

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

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

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

Query.Text = "SELECT | REPRESENTATION(FreeRemainingRemains.Nomenclature) AS Nomenclature, | REPRESENTATION(FreeRemainingRemaining.Warehouse) AS Warehouse, | FreeRemainingRemaining.InStockRemaining |ОТ |Регистър за натрупване.FreeRemaining.Remaining AS FreeRemainingRemaining ";

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

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

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

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

Request.Text = //ако типът стойност на записващото устройство е Разписка на документа, //тогава заявката ще върне „Получаване на стоки“, в противен случай „Продажби на стоки“ „ИЗБЕРЕТЕ | ИЗБЕРЕТЕ | КОГАТО Remaining.Registrar LINK Document.Receipt of GoodsServices | ТОГАВА ""Потребление" |. КРАЙ НА Движение |. Оставащи продукти в складове" ;

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

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

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

Request.Text = //вземете цялата номенклатура, чийто код е в диапазона от 1 до 100 "SELECT | Nomenclature.Link |FROM | Directory.Nomenclature AS Nomenclature |WHERE | Nomenclature.Code BETWEEN 1 AND 100" ;

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

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

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

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

4. Дизайн ПОДОБЕН- Тази функция ни позволява да сравним низ с модел на низ.

Синтаксис: ХАРЕСВАМ "<ТекстШаблона>"

Опции за модел на редове:

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

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

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

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

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

Query.Text = //намерете цялата номенклатура, която съдържа корена TABUR и започва //или с малка, или с главна буква t "ИЗБЕРЕТЕ | Номенклатура. Връзка | ОТ | Директория. Номенклатура КАТО Номенклатура | КЪДЕ | Продукти. Име КАТО "" [Tt ]abur%""" ;

5. Дизайнът е РАЗРЕШЕН- този оператор ви позволява да изберете само онези записи от базата данни, за които повикващият има разрешение за четене. Тези права се конфигурират на ниво запис (RLS).

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

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

Request.Text = "ИЗБЕРЕТЕ РАЗРЕШЕНИ | Контрагенти. Връзка | ОТ | Директория. Контрагенти КАТО Контрагенти";

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

Синтаксис: VARIOUS се пише след ключовата дума SELECT

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

Request.Text = //избира записи, за които читателят има права "SELECT VARIOUS | Counterparties.Name |FROM | Directory. Counterparties AS Counterparties" ;

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

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

Request.Text = //избира различни записи, за които читателят има права "ИЗБЕРЕТЕ РАЗРЕШЕНИ РАЗЛИЧНИ | Контрагенти.Име |ОТ | Директория. Контрагенти КАТО Контрагенти";

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

Синтаксис: FIRST<число>

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

Request.Text = //изберете първите 4 CCD номера от директорията "SELECT FIRST 4 | CCD Numbers. Link | FROM | Directory. CCD Numbers AS CCD Numbers";

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

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

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

Query.Text = "ИЗБЕРЕТЕ | Безплатни остатъчни остатъци. Номенклатура, | Безплатни остатъчни остатъци. Склад, | Безплатни остатъчни остатъци. В наличност Остатъчни | ОТ | Регистър на натрупвания. Безплатни остатъци. Остатъци КАТО безплатни остатъчни остатъци | ЗА ПРОМЯНА | Регистър на натрупвания .Безплатни остатъци";

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

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

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

Query.Text = "ИЗБЕРЕТЕ | Безплатни остатъчни остатъци. Номенклатура КАТО номенклатура, | Безплатни остатъчни остатъци. Склад КАТО склад, | Безплатни остатъчни остатъци. На склад Оставащи | ОТ | Регистрирайте натрупвания. Безплатни остатъци. Оставащи КАТО безплатни оставащи остатъци | | ПОРЪЧАЙ ПО |. Номенклатура |. АВТОМАТИЧНО ЧЕТЕНЕ НА ПОРЪЧКА";

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

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

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

Query.Text = "SELECT | ProductsInWarehouses.Nomenclature AS Nomenclature, | ProductsInWarehouses.Warehouse, | SUM(GoodsInWarehouses.InStock) AS STOCK |FROM | RegisterAccumulations.ProductsInWarehouses AS ProductsInWarehouses | |GROUP BY | ProductsInWarehouses.Nomenclature, | treasures.Warehouse ";

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

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

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

Query.Text = //избира групирани записи, където полето InStock е по-голямо от 3 "SELECT | ItemsInStocks.Nomenclature AS Nomenclature, | ItemsInWarehouses.Warehouse, | SUM(ItemsInStocks.InStock) AS INSTOCK |FROM | RegisterAccumulations.ItemsInWarehouses AS ItemsInStocks | | ГРУПИРАНЕ ПО |. ProductsInWarehouses.Warehouse |. AMOUNT (ProductsInWarehouses.In Stock) ;

12. Строителство ИНДЕКС ПО- използва се за индексиране на полето за заявка. Изпълнението на заявка с индексиране отнема повече време, но ускорява търсенето в индексираните полета. Може да се използва само във виртуални таблици.

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

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

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. Дизайн КЪДЕ- позволява ви да наложите условие за всякакви полета за избор. Резултатът ще включва само записи, които отговарят на условието.

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

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

Query.Text = //всички записи с CompensationRemaining са избрани<>0 и //AmountForCalcCompRemaining > 100 "SELECT | CompensationRPORemains.Counterparty, |CompensationRPORemains.Child, | CompensationRPORemains.CompensationRemaining, | CompensationRPORemains.AmountForCalcCompRemains |Place DataTz |FROM | Регистър на натрупване.CompensationRP.Remains AS Compens ationRPORemains |WHERE |CompensationRPORemaining.CompensationRemaining<>0 | И CompensationRPORemains.AmountForCalcCompRemaining> 100" ;

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

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

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

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

Фигурата очертава групировките, които са били формирани по време на изпълнение на заявката, като най-горната се отнася за раздела GENERAL, а втората за полето Counterparty AgreementAgreement Type.

Нека да разгледаме останалите сега.

Функции за работа с низове в 1C заявки

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

Първо, могат да се добавят низове в заявките. За да направите това, използвайте оператора "+":

Заявка. Текст = „ИЗБЕРЕТЕ
" "Ред: " " + Source.Name
;

Второ, можете да изберете част от линията. За да направите това, използвайте функцията СУБСТРУКЦИЯ.Функцията е подобна на вградения език 1C. Има три параметъра:

  1. Изходен низ.
  2. Номерът на знака, с който трябва да започне избраният ред.
  3. Брой знаци.

Заявка. Текст= „ИЗБЕРЕТЕ
ПОДНИЗ("
"Линия:" ", 4, 3) КАТО Резултат";

// Резултат: добре функция

ISNULL NULL е специален тип данни в платформата 1C:Enterprise. Той е единствениятвъзможно значение

този тип. NULL може да се появи в заявки в няколко случая: при свързване на източници на заявка, ако в една от таблиците не е намерена съответстваща стойност; при достъп до детайлите на несъществуващ обект; ако в списъка с полета на заявката е посочено NULL (например при комбиниране на резултати от избор от няколко таблици) и др. Тъй като NULL не е нито нула, нито празен низ, нито дори стойностнеопределен, често е полезно да го замените с някакъв по-полезен тип данни. За това е предназначена функцията.

ISNULL.

  1. Има два параметъра:
  2. Стойността, която се проверява.

Заявка. Текст= „ИЗБЕРЕТЕ
Стойността, с която да се замени първият параметър, ако се окаже, че е NULL.
; ISNULL(Source.Remainder, 0) AS Remainder"
// Ако резултатът от заявката е остатъкът от полето = NULL,

// тогава ще бъде заменен с 0 и можете да извършвате математически операции с него ФункцииИЗПЪЛНЕНИЕ И

ВЪВЕДЕНИЕ ВРЪЗКИ ФункцииТези функции са предназначени за получаване на низови представяния на различни стойности. Тоест преобразуват препратки, числа, булеви стойности и т.н. в обикновен текст. Разликата между тях е, че функцията Ипреобразува всякакви типове данни в текст (низ) и функцията

Заявка. Текст= „ИЗБЕРЕТЕ
- само връзки и връща останалите стойности такива, каквито са, непреобразувани.
ПРЕДСТАВЯНЕ (ВЯРНО) КАТО булево,
ПРЕДСТАВЯНЕ (4) КАТО число,
ПРЕДСТАВИТЕЛСТВО (Източник.Връзка) AS Връзка,
;
ПРЕДСТАВЯНЕ (ДАТА ЧАС (2016,10,07)) КАТО Дата"
// Boolean = "Да", Number = "4", Link = "Документ Касова разписка ордер №... от..."

Заявка. Текст= „ИЗБЕРЕТЕ
// Дата = "07.10.2016 0:00:00"
REPRESENTATIONREFERENCE(TRUE) AS Boolean,
РЕФЕРЕНЦИЯ ЗА ПРЕДСТАВЯНЕ(4) КАТО НОМЕР
PRESENTINGLINK(Source.Link) AS Link,
;
// Boolean = TRUE, Number = 4, Link = "Документ Касова разписка ордер №... от..."
// Дата=07.10.2016 0:00:00

// тогава ще бъде заменен с 0 и можете да извършвате математически операции с него ТИПИЗПЪЛНЕНИЕ ТИП СТОЙНОСТИ

// Резултат: добре ТИПвръща типа данни на платформата 1C:Enterprise.

Заявка. Текст= „ИЗБЕРЕТЕ
ТИП (число)
TYPE (низ),
ТИП (Документ. Разходен касов ордер)"
;

// Резултат: добре ТИП СТОЙНОСТИвръща типа на предадената му стойност.

Заявка. Текст= „ИЗБЕРЕТЕ
ТИП СТОЙНОСТИ (5) AS Номер,
ТИП ("
"линия" ") AS String,
TYPE (Source.Link) AS Справка
От директорията.Source AS Source"
;
//Number=Номер, String=String, Directory = DirectoryLink.Source

Тези функции са удобни за използване, например, когато трябва да разберете дали дадено поле, получено в заявка, е стойност от някакъв тип. Например, нека вземем информацията за контакт на контрагентите от информационния регистър ContactInformation (там се съхраняват контакти не само на контрагенти, но и на организации, лица и т.н.):

Заявка. Текст= „ИЗБЕРЕТЕ

ОТ

КЪДЕ
СТОЙНОСТИ TYPE(ContactInformation.Object) = TYPE(Directory.Counterparties)"
;

// Резултат: добре ЗНАЧЕНИЕ

// Резултат: добре Значениеви позволява да използвате конфигурационни обекти на 1C директно в заявка, без да използвате .

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

Заявка. Текст= „ИЗБЕРЕТЕ
Информация за контакт. Въведение
ОТ
Регистър на информация за контакт. Информация за контакт
КЪДЕ
СТОЙНОСТИ ТИП(Информация за контакт.Обект) = ТИП(Директория.Контрагенти)
И ContactInfo.Type = VALUE(Enum.ContactInfoTypes.Phone)"
;

Трябва да се отбележи, че тази функция може да се използва само с предварително зададени стойности, т.е. със стойности, които могат да бъдат достъпни директно от конфигуратора. Тоест функцията ЗНАЧЕНИЕне може да се използва с елементи на директория, създадени от потребители, но може да работи с изброявания, с предварително дефинирани елементи на директория, със стойности EmptyLink.

Оператор ВРЪЗКА

Оператор ВРЪЗКАе предназначен да проверява стойностите, върнати от заявка, за да види дали принадлежат към конкретен референтен тип. Същата задача може да бъде изпълнена с помощта на функции ТИПИЗПЪЛНЕНИЕ ТИП СТОЙНОСТИ(които имат по-широк обхват и бяха обсъдени по-горе).

Например задачата за избор информация за контактконтрагентите могат да бъдат разрешени по следния начин:

Заявка. Текст= „ИЗБЕРЕТЕ
Информация за контакт. Въведение
ОТ
Регистър на информация за контакт. Информация за контакт
КЪДЕ
ContactInformation.Object LINK Directory.Counterparties"
;

Оператор ЕКСПРЕСНО

Оператор ЕКСПРЕСНОизползвани в 1C заявки в два случая:

  • когато трябва да промените характеристиките на примитивен тип;
  • когато трябва да превърнете поле със съставен тип данни в поле с един тип.

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

Оператор ЕКСПРЕСНОви позволява да промените не типа данни, а допълнителни характеристики. Например, той може да превърне низ с неограничена дължина в низ с ограничена дължина. Това може да бъде полезно, ако трябва да групирате резултатите от заявката по такова поле. Не можете да групирате по полета с неограничена дължина, затова го преобразуваме в низ с дължина 200 знака.

Заявка. Текст= „ИЗБЕРЕТЕ
КОЛИЧЕСТВО (РАЗЛИЧНО Пристигане на стоки и услуги. Връзка) КАТО Връзка
ОТ
Документ. Получаване на стоки и услуги КАК Получаване на стоки и услуги
ГРУПИРАНЕ ПО
EXPRESS(Получаване на стоки и услуги. Коментар КАТО РЕД (200))"
;

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

Заявка. Текст= „ИЗБЕРЕТЕ
EXPRESS(Движение на стокитеОборот.Поръчка КАТО Документ.Поръчка на клиента).Дата КАТО Дата на поръчка,
Движение на стокооборота. Номенклатура
ОТ
Регистър Натрупвания. Движение на стоки. Оборот AS Движение на стоки Оборот
КЪДЕ
Движение на Стокооборот. Поръчка ВРЪЗКА Документ. Клиентска поръчка"
;

Оператори ИЗБОРИЗПЪЛНЕНИЕ Е НУЛЕВ

Оператор ИЗБОРподобно на оператора АКОна вградения език 1C, но има донякъде намалена функционалност.

Да кажем, че искаме да получим информация за контакт от информационния регистър ContactInformation и в същото време да посочим в отделно поле за заявка дали тя принадлежи на контрагент или физическо лице.

Заявка. Текст= „ИЗБЕРЕТЕ
Информация за контакт. Въведение,
ИЗБОР
WHEN VALUES TYPE(ContactInformation.Object) = TYPE(Directory.Counterparties)
ТОГАВА "
Контрагент "
ДРУГ ИЗБОР
WHEN VALUES TYPE(ContactInformation.Object) = TYPE(Directory.Individuals)
ТОГАВА "
Индивидуално"
ELSE "Някой друг" "
КРАЙ
КРАЙ КАТО СОБСТВЕНИК
ОТ
Регистър на информация за контакт AS Информация за контакт.
;

Както се вижда от примера, в дизайна ИЗБОРслед думата винаги има условие КОГА;приложена стойност, ако условието е вярно след думата ТОГАВАи приложената стойност, ако условието не е изпълнено, след думата ИНАЧЕ.И трите елемента на дизайна ИЗБОРса задължителни. Пропуснете елемент ИНАЧЕ, по същия начин както при използване на оператора АКОна вградения език 1C е невъзможно. И от оператора ИЗБОРняма аналог на дизайна ELSEIF, но можете да инвестирате един ИЗБОРв друг, както беше направено в нашия пример.

Оператор Е НУЛЕВизползвани в дизайна ИЗБОРза сравняване на поле за заявка с тип NULL.

Заявка. Текст= „ИЗБЕРЕТЕ
ИЗБОР
КОГАТО СТОЙНОСТТА Е NULL, ТОГАВА 0
ИНАЧЕ Значение
КРАЙ"
;

Освен това операторът Е НУЛЕВможе да се използва в условия на заявка, като например в изречение КЪДЕ.

Езикът на заявките е един от основните механизми на 1C 8.3 за разработчиците. С помощта на заявки можете бързо да извлечете всички данни, съхранени в базата данни. Синтаксисът му е много подобен на SQL, но има някои разлики.

Основните предимства на езика за заявки 1C 8.3 (8.2) пред SQL:

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

Недостатъци на езика за заявки в 1C:

  • за разлика от SQL, в 1C заявките не позволяват промяна на данни;
  • липса на съхранени процедури;
  • невъзможност за преобразуване на низ в число.

Нека да разгледаме нашия мини урок за основните конструкции на езика за заявки 1C.

Поради факта, че заявките в 1C ви позволяват само да получавате данни, всяка заявка трябва да започва с думата „ИЗБЕРЕТЕ“. След тази команда се посочват полетата, от които трябва да се получат данни. Ако посочите „*“, всички налични полета ще бъдат избрани. След думата „ОТ“ се посочва мястото, от което ще се избират данните (документи, регистри, указатели и др.).

В примера, разгледан по-долу, имената на цялата номенклатура се избират от директорията „Номенклатура“. След думата „КАК“ се посочват псевдоними (имена) за таблици и полета.

ИЗБЕРЕТЕ
Номенклатура AS Име на номенклатурата
ОТ
Справочник.Номенклатура AS Номенклатура

До командата “SELECT” можете да посочите ключови думи:

  • РАЗЛИЧНИ. Заявката ще избере само редове, които се различават в поне едно поле (без дубликати).
  • ПЪРВО п, Къде п– броя на редовете от началото на резултата, които трябва да бъдат избрани. Най-често тази конструкция се използва заедно със сортиране (ORDER BY). Например, когато трябва да изберете определен брой документи, които са скорошни по дата.
  • РАЗРЕШЕНО. Този дизайн ви позволява да изберете от базата данни само онези записи, които са налични към текущия потребител. Въз основа на използването на тази ключова дума, потребителят ще получи съобщение за грешка, когато се опитва да направи заявка за записи, до които няма достъп.

Тези ключови думи могат да се използват заедно или поотделно.

ЗА ПРОМЕНЯНЕ

Това предложение блокира данни, за да предотврати взаимни конфликти. Заключените данни няма да бъдат прочетени от друга връзка, докато транзакцията не приключи. В тази клауза можете да посочите конкретни таблици, които трябва да бъдат заключени. В противен случай всички ще бъдат блокирани. Дизайнът е подходящ само за режим на автоматично заключване.

Най-често клаузата „ЗА ПРОМЯНА“ се използва при получаване на салда. В крайна сметка, когато няколко потребители работят в програмата едновременно, докато един получава баланси, друг може да ги промени. В този случай полученият остатък вече няма да е правилен. Ако блокирате данните с това предложение, тогава докато първият служител не получи правилния баланс и не направи всичко с него необходими манипулации, вторият служител ще трябва да изчака.

ИЗБЕРЕТЕ
Взаимни разчети Служител.
Взаимни разчети Баланс
ОТ
Регистър на натрупвания със служители AS Взаимни разчети
ЗА ПРОМЕНЯНЕ

КЪДЕ

Дизайнът е необходим, за да наложи някакъв вид селекция на качените данни. В някои случаи на получаване на данни от регистри е по-разумно да се уточнят условията за избор в параметрите на виртуалните таблици. При използване на "WHERE" първо се извличат всички записи и едва след това се прилага селекция, което значително забавя заявката.

По-долу е примерна заявка за получаване на лица за контакт за конкретна позиция. Параметърът за избор има формат: &Име на параметър (името на параметъра е произволно).

ИЗБОР (СЛУЧАЙ)

Дизайнът ви позволява да посочите условия директно в тялото на заявката.

В примера по-долу „AdditionalField“ ще съдържа текст в зависимост от това дали документът е публикуван или не:

ИЗБЕРЕТЕ
Прием T&U.Link,
ИЗБОР
КОГА се извършва прием T&U
СЛЕД това „Документът е приет!“
ELSE „Документът не е публикуван...“
КРАЙ КАТО допълнително поле
ОТ
Документ. Получаване на стоки и услуги КАК Получаване T&C

ПРИСЪЕДИНЕТЕ СЕ

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

ВРЪЗКА ЛЯВО/ДЯСНО

Същността на LEFT join се състои в това, че първата посочена таблица се взема изцяло, а втората се свързва с нея според условието на връзката. Ако няма записи, съответстващи на първата таблица във втората, тогава NULL се замества като техните стойности. Казано по-просто, основната таблица е първата посочена таблица и данните от втората таблица (ако има такава) вече са заменени с нейните данни.

Например, необходимо е да получите артикули от документите „Получаване на стоки и услуги” и цени от информационен регистър „Цени на артикули”. В този случай, ако цената за която и да е позиция не бъде намерена, вместо това заменете NULL. Ще бъдат избрани всички артикули от документа, независимо дали имат цена или не.

ИЗБЕРЕТЕ
Разписка и U. Номенклатура,
Цени.Цена
ОТ
Документ. Разписка за стоки и услуги
INTERNAL JOIN RegisterInformation.PricesNomenclature.SliceLast AS Цени
Софтуерна разписка&U.Номенклатура = Цени.Номенклатура

В ДЯСНОТО всичко е точно обратното.

ПЪЛНА СВЪРЗВАНЕ

Този тип връзка се различава от предишните по това, че в резултат ще бъдат върнати всички записи както на първата таблица, така и на втората. Ако не бъдат намерени записи в първата или втората таблица въз основа на указаното условие за връзка, вместо това ще бъде върнато NULL.

Когато използвате пълна връзка в предишния пример, ще бъдат избрани всички артикули от документа „Получаване на стоки и услуги“ и всички последни цени от регистъра „Цени на артикули“. Стойностите на ненамерените записи в първата и втората таблица ще бъдат равни на NULL.

ВЪТРЕШНО СЪЕДИНЕНИЕ

Разликата между INNER JOIN и FULL JOIN е, че ако запис не бъде намерен в поне една от таблиците, заявката изобщо няма да го покаже. В резултат на това ще бъдат избрани само артикулите от документа „Получаване на стоки и услуги“, за които има записи в информационен регистър „Цени на артикули“, ако в предишния пример сменим „ПЪЛЕН“ с „ВЪТРЕШЕН“.

ГРУПИРАНЕ ПО

Групирането в 1C заявки ви позволява да свиете редовете на таблицата (полета за групиране) според определена обща характеристика (полета за групиране). Полетата за групиране могат да се показват само с помощта на агрегатни функции.

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

ИЗБЕРЕТЕ
,
MAX(Цена.Цена) КАТО Цена
ОТ

ГРУПИРАНЕ ПО
Цени. Номенклатура. Вид номенклатура

РЕЗУЛТАТИ

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

Резултатите могат да бъдат обобщени за цялата таблица (с ключовата дума „ОБЩИ“), за няколко полета, за полета с йерархична структура (ключови думи „ЙЕРАРХИЯ“, „САМО ЙЕРАРХИЯ“). При обобщаване на резултатите не е необходимо да се използват агрегатни функции.

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

ИЗБЕРЕТЕ
Цени. Номенклатура. Вид на номенклатурата AS Вид на номенклатурата,
Цени. Цена КАТО Цена
ОТ
Регистър на информацията за номенклатурата на последните AS цени
РЕЗУЛТАТИ
МАКСИМУМ (цена)
ОТ
Тип Номенклатура

ИМАЩ

Този оператор е подобен на оператора WHERE, но се използва само за агрегатни функции. Останалите полета, с изключение на използваните от този оператор, трябва да бъдат групирани. Операторът WHERE не е приложим за агрегатни функции.

В примера по-долу максималните цени на даден артикул са избрани, ако надхвърлят 1000, групирани по тип артикул.

ИЗБЕРЕТЕ

MAX(Цена.Цена) КАТО Цена
ОТ
Регистър на информацията за номенклатурата на последните AS цени
ГРУПИРАНЕ ПО
Цени. Номенклатура. Вид номенклатура
ИМАЩ
МАКСИМУМ(Цени.Цена) > 1000

ПОРЪЧАЙТЕ ПО

Операторът ORDER BY сортира резултата от заявка. За да се гарантира, че записите се показват в на постоянна основа, използва се AUTO ORDER. Примитивните типове се сортират според обичайните правила. Типовете препратки са сортирани по GUID.

Пример за получаване на списък със служители, сортирани по име:

ИЗБЕРЕТЕ
Employees.Name AS Name
ОТ
Справочник.Служители КАК Служители
ПОРЪЧАЙТЕ ПО
Име
АВТОМАТИЧНА ПОРЪЧКА

Други конструкции на 1C език за заявки

  • КОМБИНИРАЙТЕ– резултати от две заявки в една.
  • КОМБИНИРАЙТЕ ВСИЧКО– подобно на COMBINE, но без групиране на еднакви редове.
  • ПРАЗНА МАСА– понякога се използва при свързване на заявки за указване на празна вложена таблица.
  • МЯСТО– създава временна таблица за оптимизиране на сложни 1C заявки. Такива заявки се наричат ​​пакетни заявки.

Функции на езика за заявки

  • ПОДНИЗсъкращава низ от определена позиция до определен брой знаци.
  • ГОДИНА...ВТОРАпозволяват да получите избраната стойност от числов тип. Входният параметър е датата.
  • НАЧАЛО НА ПЕРИОД и КРАЙ НА ПЕРИОДизползва се при работа с дати. Типът период (ДЕН, МЕСЕЦ, ГОДИНА и др.) се посочва като допълнителен параметър.
  • ADDKDATEви позволява да добавяте или изваждате определено време от определен тип от дата (СЕКУНДА, МИНУТА, ДЕН и т.н.).
  • ДАТА НА РАЗЛИКАопределя разликата между две дати, като посочва вида на изходната стойност (ДЕН, ГОДИНА, МЕСЕЦ и т.н.).
  • функциязамества липсващата стойност с посочения израз.
  • ПРЕДСТАВИТЕЛСТВО и ПРЕДСТАВИТЕЛСТВО ВРЪЗКИвземете низово представяне на посоченото поле. Прилагайте съответно към всякакви стойности и само референтни стойности.
  • ТИП, ТИП СТОЙНОСТИсе използват за определяне на типа на входния параметър.
  • ВРЪЗКАе логически операторсравнения за типа стойност на атрибута.
  • ЕКСПРЕСНОизползвани за преобразуване на стойност в желания тип.
  • ДАТА ЧАСполучава стойност от тип "Дата" от числови стойности (година, месец, ден, час, минута, секунда).
  • ЗНАЧЕНИЕв 1C заявка се използва за посочване на предварително зададени стойности - директории, изброявания, планове за типове характеристики. Пример за употреба: " Където юридическо лице = стойност (изброяване. юридическо лице. физическо лице)«.

Създател на заявки

За създаване на заявки с 1C има много удобен вграден механизъм - дизайнер на заявки. Той съдържа следните основни раздели:

  • “Таблици и полета” - съдържа полетата, които трябва да бъдат избрани и техните източници.
  • “Връзки” - описва условията за структурата CONNECTION.
  • „Групиране“—съдържа описание на структурите за групиране и сумираните полета въз основа на тях.
  • “Условия” - отговаря за избора на данни в заявката.
  • "Допълнително" - допълнителни опциизаявка, като например ключови думи на командата “SELECT” и др.
  • “Joins/Aliases” - посочени са възможностите за обединяване на таблици и са посочени псевдоними (конструкцията “HOW”).
  • „Поръчка“ отговаря за сортирането на резултатите от заявките.
  • „Общо“ - подобно на раздела „Групиране“, но се използва за конструкцията „ОБЩО“.

Текстът на самата заявка можете да видите, като кликнете върху бутона "Заявка" в долния ляв ъгъл. В тази форма може да се коригира ръчно или да се копира.


Конзола за заявки

За да видите бързо резултата от заявка в режим Enterprise или да отстраните грешки в сложни заявки, използвайте . Той съдържа текста на заявката, задава параметрите и показва резултата.

Можете да изтеглите конзолата за заявки на ITS диска или чрез .

NULL не е нищо повече от липса на стойност. Много хора го бъркат със стойността „0“ на тип номер, празна препратка към обект или празен низ. Поради това погрешно схващане възникват много грешки.

Стойността NULL ще се появи, ако заявката се отнася до несъществуващо поле, свойство или повредена връзка.

Базиран на SQL, който не позволява нормален тест за равенство за NULL. По-долу са два начина за проверка за NULL в 1C 8.3.

Функцията на езика за заявки 1C 8.3 ISNULL() има два входни параметъра:

  • израз, който трябва да се тества;
  • заместващ израз.

Ако стойността, която се тества, е NULL, тогава тази функция ще върне стойността на заместващия израз. Ако стойността е различна от NULL, изразът, който се тества, ще бъде върнат.

По-долу е даден пример. Той избира всички артикули от табличната част на продукта от документа „Получаване на стоки и услуги“. Използвайки лявото съединение, на всеки артикул се присвоява последната цена от информационния регистър „Цени на артикулите“.

В този случай може да възникне ситуация, че за дадена позиция може просто да няма цена в регистъра. В този случай функцията ISNULL ще ни върне обичайната нула. Ако не го използвате, когато се опитате да извършите аритметични операции в полето „Цена“ с NULL стойност, ще получим грешка.

ИЗБЕРЕТЕ

ISNULL(Цени.Цена, 0) КАТО текуща цена
ОТ



КЪДЕ

ИМА NULL в оператора SELECT

Еквивалентът на ISNULL() е ISNULL, който се използва в оператора SELECT и проверява дали стойността е NULL. „IS“ в този случай предполага равенство и заявката в предишния пример ще изглежда така:

ИЗБЕРЕТЕ
Продукти Номенклатура AS Продукт,
ИЗБОР
КОГАТО Цените Е НУЛЕВ
ТОГАВА 0
ИНАЧЕ Цени.Цена
КРАЙ КАТО CurrentPrice
ОТ
Документ. Получаване на стоки и услуги като стоки
ЛЯВА ВРЪЗКА RegisterInformation.PricesNomenclature.SliceLast AS Цени
Софтуерни продукти.Номенклатура = Цени.Номенклатура
КЪДЕ
Products.Link = &LinkToDocument

Разлики между функцията ISNULL() и IS NULL

Както можете да видите от предишните примери, и в двата случая заявката връща едни и същи данни. Функцията ISNULL() е съкратена версия на SELECTION WHEN... IS NULL... END, но все още е за предпочитане поради следните причини:

  1. Функцията ISNULL() оптимизира заявката. Той се чете веднъж, така че при проверка на сложен израз заявката ще се обработва по-бързо.
  2. Функцията ISNULL() съкращава конструкцията, правейки заявката по-четима.
  3. При изпълнение на функцията ISNULL(), заместващият израз се редуцира до типа на израза, който се тества за типове низ (дължина на низ) и числови типове (битова дълбочина).

Има няколко механизма за работа с низове в 1C заявки. Първо могат да се добавят линиите. Второ, можете да вземете подниз от низ. Трето, низовете могат да се сравняват, включително по модел. Това вероятно е всичко, което може да се направи с низове.

Добавяне на низове

За добавяне на редове в заявка се използва операцията „+“. Можете да добавяте само низове с ограничена дължина.

ИЗБЕРЕТЕ "Име: " + Име на контрагенти 1 от директория КАТО контрагенти WHERE Връзка

Поднизова функция

ПОДНИЗ(<Строка>, <НачальнаяПозиция>, <Длина>)

Аналог на функцията Environment() от обектния модел. Функцията Substring() може да се приложи към низови данни и ви позволява да изберете фрагмент <Строки> , започвайки с номера на знака <НачальнаяПозиция> (знаците в ред се номерират от 1) и дължина <Длина> герои. Резултатът от изчислението на функцията има тип низ с променлива дължина и дължината ще се счита за неограничена, ако <Строка> има неограничена дължина и параметър <Длина> не е константа или по-голямо от 1024.

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

внимание!Не се препоръчва използването на функцията SUBSTRING() за преобразуване на низове с неограничена дължина в низове с ограничена дължина. Вместо това е по-добре да използвате cast оператора EXPRESS().

Функция Подобна

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

ИЗБЕРЕТЕ Контрагенти КАТО Колона 1 ОТ Указател КАТО Контрагенти WHERE Име = "Газпром".

Но какво ще стане, ако имате нужда от по-фино сравнение? Не просто равенство или неравенство, а сходство с определен модел? Точно за това е създадена функцията SIMILAR.

LIKE — Оператор за проверка на низ за сходство с модел. Аналог на LIKE в SQL.

Операторът SIMILAR ви позволява да сравните стойността на израза, посочен вляво от него, с низа на модела, посочен вдясно. Стойността на израза трябва да е от тип низ. Ако стойността на израза съответства на модела, резултатът от оператора ще бъде TRUE, в противен случай ще бъде FALSE.

Следните знаци в низа на шаблона са служебни и имат значение, различно от символа на низа:

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

Всеки друг символ означава себе си и не носи допълнително натоварване. Ако един от изброените знаци трябва да бъде написан като себе си, тогава той трябва да бъде предшестван от<Спецсимвол>. себе си<Спецсимвол>(всеки подходящ знак) се дефинира в същия израз след ключовата дума SPECIAL CHARACTER.

WiFi