Създаване и работа със заявки (за начинаещи). Създаване и работа със заявки (за начинаещи) Раздел Пакет заявки

Създаване и работа със заявки (за начинаещи). Създаване и работа със заявки (за начинаещи) Раздел Пакет заявки

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

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

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

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

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

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

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

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

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

Query.Text = "ИЗБЕРЕТЕ | DIFFERENCEDATE(DATETIME(2015, 4, 17), DATETIME(2015, 2, 1), DAY) | AS Qty.Days";

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 = "ИЗБЕРЕТЕ РАЗЛИЧНИ | Sales.Registrar.Number, | ИЗБЕРЕТЕ | КОГАТО Sales.Registrar ВРЪЗКА Document.Consumable | ТОГАВА EXPRESS(Sales.Registrar AS Document.Consumable) | ИНАЧЕ ИЗБЕРЕТЕ | КОГАТО 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) AS Directory.Nomenclature AS No. LEFT CONNECTIONAccumulations.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 = //ако типът стойност на записващото устройство е разписка на документа, //тогава заявката ще върне „Получаване на стоки“, в противен случай „Продажби на стоки“ „ИЗБЕРЕТЕ | ИЗБЕРЕТЕ | КОГАТО Remainings.Registrar LINK Документ.Получаване на стоки и Услуги |. "Потребление" |. ОТ Регистър на натрупване КАТО.

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

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

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

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

Създайте заявка

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

//Създаване на заявка
Заявка = нова Заявка;

//Попълнете текста на заявката
Заявка. Текст= „Тук пишем текста на искането“;

//Предаване на параметри към заявката
Заявка. SetParameter("ParameterName" , ParameterValue) ;

//Изпълнете заявката
Резултат = Заявка. Run() ;

//Качете резултата от заявката към селекцията
Проба = Резултат. Избирам() ;

//Качете резултата от заявката в таблицата със стойности
Таблица = Резултат. Unload() ;

//Последните действия могат да се комбинират
Fetch = Заявка. Run() . Избирам() ;
//или
Таблица = Заявка. Run() . Unload() ;

Основи на езика за заявки 1C

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

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

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

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

Заявка. Текст = "ИЗБИРАМ
| *
| ОТ
| Справочник на контрагентите“.
;

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

Заявка. Текст = "ИЗБИРАМ
| код,
| Име,
| Родител
| ОТ
| Справочник на контрагентите“.
;

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

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

Заявка. Текст = "ИЗБИРАМ
| Клиенти.Код AS Номер,

| 1000 AS FieldWithValue
| ОТ
;

Fetch = Заявка. Run() . Избирам() ;

Чао Избор. Цикъл Next().
ClientNumber = Проба. Брой;
ClientName = Избор. име;
Стойност = Проба. FieldWithValue;
Краен цикъл;

За да зададете псевдоними, използвайте раздела Съюзи/Псевдоними V Създател на заявки.

В раздела ръчно се създава поле с фиксирана или изчислена стойност Таблици и полета, в колона Полета.

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

//Поредете клиентите по име от А до Я и изберете първите 10
Заявка. Текст = „ИЗБЕРЕТЕ ПЪРВИТЕ 10
| Клиенти.Код AS Номер,
| Clients.Name AS Име,
| 1000 AS FieldWithValue
| ОТ

|ПОРЪЧАЙТЕ ПО
| име"
;

//Изберете най-новия клиент по азбучен ред
Заявка. Текст = „ИЗБЕРЕТЕ ТОП 1
| Клиенти.Код AS Номер,
| Clients.Name AS Име,
| 1000 AS FieldWithValue
| ОТ
| Указател Контрагенти AS Клиенти
|ПОРЪЧАЙТЕ ПО
| Име DECLINE"
;

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

//Извадкови данни, разрешени за потребителя
Заявка. Текст = „ИЗБЕРЕТЕ РАЗРЕШЕНО
| Клиенти.Код AS Номер,
| Clients.Name AS Име,
| 1000 AS FieldWithValue
| ОТ
| Указател контрагенти AS Клиенти.
;

//Избор на неповтарящи се елементи
Заявка. Текст = „ИЗБЕРЕТЕ РАЗЛИЧНИ
| Клиенти.Код AS Номер,
| Clients.Name AS Име,
| 1000 AS FieldWithValue
| ОТ
| Указател контрагенти AS Клиенти.
;

Редът се задава в раздела Поръчка V Създател на заявкиброят на избраните елементи, разделителната способност и параметрите за повторяемост са в раздела Допълнително.

Следва продължение…

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

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

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

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

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

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

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

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

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

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

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

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

ЗА СМЯНА

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

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

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

КЪДЕТО

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

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

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

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

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

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

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

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

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

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


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

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

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

Езикът за заявки в 1C 8 е опростен аналог на добре познатия „структуриран език за програмиране“ (както по-често се нарича SQL). Но в 1C се използва само за четене на данни; модел на обектни данни се използва за промяна на данни.

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

Примерна заявка:

ИЗБИРАМ
Банки. Име,
Банки.Кореспондентска сметка
ОТ
Справочник.Банки КАК Банки

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

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

Описание на конструкциите на езика за заявки

Структура на заявката

За да получите данни, е достатъчно да използвате конструкциите "SELECT" и "FROM". Най-простата заявка изглежда така:

ИЗБЕРЕТЕ * ОТ Директории.Номенклатура

Където “*” означава избиране на всички полета от таблицата, а Directories.Nomenclature – името на таблицата в базата данни.

Нека да разгледаме по-сложен и общ пример:

ИЗБИРАМ
<ИмяПоля1>КАК<ПредставлениеПоля1>,
Сума(<ИмяПоля2>) КАК<ПредставлениеПоля2>
ОТ
<ИмяТаблицы1>КАК<ПредставлениеТаблицы1>
<ТипСоединения>СЪЕДИНЕНИЕ<ИмяТаблицы2>КАК<ПредставлениеТаблицы2>
ОТ<УсловиеСоединениеТаблиц>

КЪДЕТО
<УсловиеОтбораДанных>

ГРУПИРАЙ ПО
<ИмяПоля1>

СОРТИРАНЕ ПО
<ИмяПоля1>

РЕЗУЛТАТИ
<ИмяПоля2>
ОТ
<ИмяПоля1>

В тази заявка избираме данните от полетата „FieldName1“ и „FieldName1“ от таблиците „TableName1“ и „TableName“, присвояваме синоними на полетата с помощта на оператора „HOW“ и ги свързваме с помощта на определено условие „TableConnectionCondition ”.

От получените данни избираме само данни, които отговарят на условието от “WHERE” “Условие за избор на данни”. След това групираме заявката по полето “Field Name1”, докато сумираме “Field Name2”. „Име на поле1“ и последното поле „Име на поле2“.

Последната стъпка е да сортирате заявката с помощта на конструкцията ORDER BY.

Общи проекти

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

ПЪРВОн

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

ИЗБЕРЕТЕ ПЪРВИТЕ 100
Банки. Име,
Банки. Код AS BIC
ОТ
Справочник.Банки КАК Банки
СОРТИРАНЕ ПО
Банки. Име

Заявката ще получи първите 100 записа от директорията „Банки“, сортирани по азбучен ред.

ПОЗВОЛЕН

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

Ако потребител се опита да използва заявка за четене на записи, които са недостъпни за него, той ще получи съобщение за грешка. За да избегнете това, трябва да използвате конструкцията „ALLOWED“, т.е. заявката ще чете само записи, които са разрешени за нея.

ИЗБЕРЕТЕ РАЗРЕШЕНО
Хранилище на допълнителна информация
ОТ
Директория. Хранилище на допълнителна информация

РАЗЛИЧНИ

Използването на „DIFFERENT“ ще предотврати въвеждането на дублирани редове в резултата от заявката на 1C. Дублирането означава, че всички полета на заявката съвпадат.

ИЗБЕРЕТЕ ПЪРВИТЕ 100
Банки. Име,
Банки. Код AS BIC
ОТ
Справочник.Банки КАК Банки

EmptyTable

Тази конструкция се използва много рядко за комбиниране на заявки. Когато се присъединявате, може да се наложи да посочите празна вложена таблица в една от таблиците. Операторът “EmptyTable” е точно за това.

Пример от помощта на 1C 8:

ИЗБЕРЕТЕ Връзка.Номер, ПРАЗНА ТАБЛИЦА.(№, артикул, количество) КАТО състав
ОТ Документ. Разходна фактура
КОМБИНИРАЙТЕ ВСИЧКО
ИЗБЕРЕТЕ Link.Number, Contents.(LineNumber, Product, Quantity)
ОТ Документ.Фактура Документ.Фактура.Състав.*

ISNULL

Много полезна функция, която ви позволява да избегнете много грешки. YesNULL() ви позволява да замените NULL стойността с желаната. Много често се използва при проверка за наличие на стойност в обединени таблици, например:

ИЗБИРАМ
Връзка към номенклатурата,
IsNULL(Item Remaining.QuantityRemaining,0) AS QuantityRemaining
ОТ


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

ISNULL(InvoiceReceived.Date, InvoiceIssued.Date)

HOW е оператор, който ни позволява да присвоим име (синоним) на таблица или поле. Видяхме пример за използване по-горе.

Тези конструкции са много сходни - те ви позволяват да получите низово представяне на желаната стойност. Единствената разлика е, че REPRESENTATION преобразува всякакви стойности в тип низ, докато REPRESENTATIONREF преобразува само референтни стойности. РЕФЕРЕНТНО ПРЕДСТАВЯНЕ се препоръчва да се използва в заявки за система за композиране на данни за оптимизация, освен ако, разбира се, полето за референтни данни не е планирано да се използва в селекции.

ИЗБИРАМ
View(Link), //низ, например „Авансов отчет № 123 от 10.10.2015 г.
View(DeletionMark) AS DeleteMarkText, //низ, „Да“ или „Не“
ViewReferences(DeletionMark) AS DeleteMarkBoolean //boolean, True или False
ОТ
Документ. Предварителен отчет

ЕКСПРЕСНО

Express ви позволява да преобразувате стойностите на полетата в желания тип данни. Можете да конвертирате стойност или в примитивен тип, или в референтен тип.

Express за референтен тип се използва за ограничаване на исканите типове данни в полета от сложен тип, често използвани за оптимизиране на производителността на системата. Пример:

EXPRESS(TableCost.Subconto1 AS Directory.Cost Items).Тип на ActivityForTaxAccountingCosts

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

EXPRESS(Коментар AS ред(150))

ДАТА НА РАЗЛИКА

Вземете безплатно 267 видео урока за 1C:

Пример за използване на IS NULL в 1C заявка:

ИЗБИРАМ ОТ
Реф
ЛЯВА ВРЪЗКА RegisterAccumulations.ProductsInWarehouses.Remaining AS Product Remaining
Софтуерна номенклатураRef.Link = Продадени стокиCommitteesRemains.Номенклатура
WHERE NOT Remaining Products QuantityRemaining Е NULL

Типът данни в заявка може да се определи чрез използване на функциите TYPE() и VALUETYPE() или чрез използване на логическия оператор REFERENCE. Двете функции са сходни.

Предварително зададени стойности

В допълнение към използването на предадени параметри в заявки на езика за заявки 1C, можете да използвате предварително зададени стойности или . Например, трансфери, предварително дефинирани директории, сметкоплани и т.н. За това се използва конструкцията „Value()“.

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

WHERE Номенклатура.Тип номенклатура = Стойност(Директория.Видове номенклатура.Продукт)

WHERE Контрагенти.Тип информация за контакт = Стойност(Изброяване.Типове информация за контакт.Телефон)

WHERE Салда по сметки. Счетоводна сметка = Стойност (Сметкоплан. Печалба. Печалба Загуба)

Връзки

Има 4 вида връзки: НАЛЯВО, ДЯСНО, ПЪЛЕН, ВЪТРЕШЕН.

ЛЯВА и ДЯСНА ВРЪЗКА

Съединенията се използват за свързване на две таблици въз основа на конкретно условие. Характеристика, когато ЛЯВО ПРИСЪЕДИНЯВАНЕе, че вземаме първата посочена таблица в нейната цялост и условно свързваме втората таблица. Полетата на втората таблица, които не могат да бъдат обвързани с условие, се попълват със стойността НУЛА.

Например:

Той ще върне цялата таблица с контрагенти и ще попълни полето „Банка“ само там, където ще бъде изпълнено условието „Име на контрагенти = Име на банки“. Ако условието не е изпълнено, полето Банка ще бъде настроено на НУЛА.

RIGHT JOIN на езика 1Cабсолютно подобни ЛЯВА връзка, с изключение на една разлика - в ПРАВО НА СВЪРЗВАНЕ„Основната“ маса е втората, а не първата.

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

ПЪЛНА СВЪРЗВАНЕсе различава от ляво и дясно по това, че показва всички записи от две таблици и свързва само тези, които може да свърже по условие.

Например:

ОТ

ПЪЛНА СВЪРЗВАНЕ
Справочник.Банки КАК Банки

ОТ

Езикът за заявки ще върне и двете таблици напълно само ако е изпълнено условието за обединяване на записите. За разлика от ляво/дясно свързване, възможно е NULL да се появи в две полета.

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

ВЪТРЕШНО СЪЕДИНЕНИЕсе различава от пълния по това, че показва само онези записи, които могат да бъдат свързани според дадено условие.

Например:

ОТ
Указател Контрагенти AS Клиенти

ВЪТРЕШНО СЪЕДИНЕНИЕ
Справочник.Банки КАК Банки

ОТ
Клиенти.Име = Банки.Име

Тази заявка ще върне само редове, в които банката и контрагентът имат едно и също име.

Асоциации

Конструкциите JOIN и JOIN ALL комбинират два резултата в един. Тези. резултатът от извършването на две ще бъде „слят“ в един, общ.

Тоест системата работи точно както обикновените, само за временна маса.

Как да използвате INDEX BY

Трябва обаче да се вземе предвид една точка. Изграждането на индекс върху временна таблица също отнема време за завършване. Ето защо е препоръчително да използвате конструкцията „ “ само ако е известно със сигурност, че във временната таблица ще има повече от 1-2 записа. В противен случай ефектът може да е обратен - производителността на индексираните полета не компенсира времето, необходимо за изграждане на индекса.

ИЗБИРАМ
Валутни курсове Последно напречно сечение Валута AS Валута,
Валутни курсове Последно напречно сечение.
PUT Валутни курсове
ОТ
Информационен регистър.Валутни курсове.Последен отрязък(&период,) AS Валутни курсовеПоследен отрязък
ИНДЕКС ПО
Валута
;
ИЗБИРАМ
ЦениНоменклатура.Номенклатура,
ЦениНоменклатури.Цена,
Цени Номенклатури. Валута,
Валутни курсове
ОТ
Информационен регистър. Номенклатурни цени. Последен отрязък (&период,
Номенклатура B (&номенклатура) И PriceType = &PriceType) AS PriceNomenclature
LEFT JOIN Валутни курсове КАТО Валутни курсове
Номенклатури на цените на софтуера.Валута = Валутни курсове.Валута

Групиране

Езикът за заявки 1C ви позволява да използвате специални агрегатни функции, когато групирате резултатите от заявките. Групирането може да се използва и без агрегатни функции за „елиминиране“ на дубликати.

Съществуват следните функции:

Сума, Количество, Брой различни, Максимум, Минимум, Средно.

Пример #1:

ИЗБИРАМ
Продажби на стоки и услуги Номенклатура на стоките.
SUM(Продажби на СтокиУслугиСтоки.Количество) КАТО Количество,
SUM(Продажби на СтокиУслугиСтоки.Сума) КАТО Сума
ОТ

ГРУПИРАЙ ПО
Продажби на стоки и услуги Номенклатура на стоките

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

Пример №2

ИЗБИРАМ
Банки.Код,
QUANTITY(DIFFERENT Banks.Link) КАТО брой дубликати
ОТ
Справочник.Банки КАК Банки
ГРУПИРАЙ ПО
Банки.Код

Този пример ще покаже списък с BIC кодове в директорията „Банки“ и ще покаже колко дубликати съществуват за всеки от тях.

Резултати

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

Един от най-популярните начини за използване на резултатите на практика е груповото отписване на стоки.

ИЗБИРАМ




ОТ
Документ. Продажба на стоки и услуги. Стоки КАК да се продават стоки и услуги
СОРТИРАНЕ ПО

РЕЗУЛТАТИ
SUM (Количество),
SUM(сума)
ОТ
Номенклатура

Резултатът от заявката ще бъде следната йерархия:

Общи резултати

Ако трябва да получите общи суми за всички „общи суми“, използвайте оператора „ОБЩИ“.

ИЗБИРАМ
Продажби на стоки и услуги Стоки Номенклатура AS Номенклатура,.
Продажби на стоки и услуги Стоки Връзка AS Документ,
Продажби на стоки и услуги Стоки количество КАТО количество,.
Продажби на стоки и услуги Стоки Сума КАТО Сума
ОТ
Документ. Продажба на стоки и услуги. Стоки КАК да се продават стоки и услуги
СОРТИРАНЕ ПО
Дата на продажба на стоки и услуги
РЕЗУЛТАТИ
SUM (Количество),
SUM(сума)
ОТ
СА ЧЕСТИ,
Номенклатура

В резултат на изпълнение на заявката получаваме следния резултат:

В което 1 ниво на групиране е агрегирането на всички необходими полета.

Аранжиране

Операторът ORDER BY се използва за сортиране на резултата от заявка.

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

ИЗБИРАМ

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

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

Автоматична поръчка

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

Ако трябва да покажете записите на таблицата в постоянен ред, трябва да използвате конструкцията Auto-Order.

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

Виртуални маси

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

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

  • разрез на първия;
  • изрязване на последното.
  • остатъци;
  • революции;
  • салда и оборот.
  • движения от субконто;
  • революции;
  • скорост Dt Kt;
  • остатъци;
  • салда и оборот
  • подконто.
  • база;
  • графични данни;
  • действителен срок на валидност.

За разработчика на решение данните се вземат от една (виртуална) таблица, но всъщност платформата 1C взема от много таблици, преобразувайки ги в необходимата форма.

ИЗБИРАМ
Продукти в складови остатъци и номенклатура.
ProductsInWarehousesRemainingAndTurnover.QuantityInitialRemaining,
ProductsInWarehousesRemainsAndTurnover.QuantityTurnover,
СтокиВСкладовеОстатъциИОборот.КоличествоВходящи,
Продукти В СкладовеОстатъциИОборот.КоличествоПотребление,
ProductsInWarehousesRemainingsAndTurnover.QuantityFinalRemaining
ОТ
RegisterAccumulations.GoodsInWarehouses.RemainsAndTurnover AS СтокиВСкладовеRemainsAndTurnover

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

Опции за виртуална маса

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

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

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

Регистър на натрупванията в складовете и оборотите (& Начало на периода, & Край на периода, Движения и граници на периода, Номенклатура = & Задължителна номенклатура).

Алгоритъм за виртуални маси

Например най-използваната виртуална таблица от типа „Остатъци” съхранява данни от две физически таблици – баланси и движения.

Когато използвате виртуална таблица, системата извършва следните манипулации:

  1. Получаваме изчислената стойност, най-близка по дата и измервания в таблицата с общите суми.
  2. „Добавяме“ сумата от таблицата за движение към сумата от таблицата с общите суми.


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

Използване на Query Builder

Създател на заявки– инструмент, вграден в системата 1C Enterprise, който значително улеснява разработването на заявки към бази данни.

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

Текстовият конструктор на заявката се стартира от контекстното меню (десен бутон на мишката) на желаното място в програмния код.

Описание на конструктора на заявки 1C

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

Раздел Таблици и полета

Този раздел определя източника на данни и полетата, които трябва да бъдат показани в отчета. По същество тук са описани конструкциите SELECT.. FROM.

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

В контекстното меню на виртуални таблици можете да зададете параметри на виртуална таблица:

Раздел Връзки

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

Раздел Групиране

В този раздел системата ви позволява да групирате и обобщавате задължителните полета на резултата от таблицата. Описва използването на конструкциите ГРУПИРАНЕ ПО, СУМА, МИНИМУМ, СРЕДНО, МАКСИМУМ, КОЛИЧЕСТВО, БРОЙ РАЗЛИЧНИ.

Раздел Условия

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

Раздел Разширени

Раздел Допълнителнопълен с всякакви параметри, които са много важни. Нека разгледаме всеки от свойствата.

Групиране Избиране на записи:

  • Първо Н– параметър, който връща само N записа към заявката (оператор FIRST)
  • Без дубликати– гарантира уникалността на получените записи (оператор DIFFERENT)
  • Позволен– позволява ви да изберете само онези записи, които системата ви позволява да изберете, като вземете предвид (ПОЗВОЛЕНА конструкция)

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

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

Раздел Присъединявания/Псевдоними

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

Раздел за поръчка

Това определя реда, в който се сортират стойностите (ORDER BY) - низходящ (DESC) или възходящ (ASC).

Има и едно интересно знаме - Автоматична поръчка(в заявката - АВТОМАТИЧНА ПОРЪЧКА). По подразбиране системата 1C показва данни в „хаотичен“ ред. Ако зададете този флаг, системата ще сортира данните по вътрешни данни.

Раздел Пакет на заявка

В раздела дизайнер на заявки можете да създавате нови и също да го използвате като навигация. В текста на заявката пакетите са разделени със символа “;” (запетая).

Бутон „Заявка“ в дизайнера на заявки

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

В този прозорец можете да направите корекции на заявката и да я изпълните.


Използване на конзолата за заявки

Конзолата за заявки е прост и удобен начин за отстраняване на грешки в сложни заявки и бързо получаване на информация. В тази статия ще се опитам да опиша как да използвам Query Console и ще дам връзка за изтегляне на Query Console.

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

Изтеглете 1C конзола за заявки

Първо, за да започнете да работите с конзолата за заявки, трябва да я изтеглите от някъде. Лечението обикновено се разделя на два вида - контролирани форми и конвенционални (или понякога се наричат ​​8.1 и 8.2/8.3).

Опитах се да комбинирам тези два изгледа в една обработка - желаната форма се отваря в желания режим на работа (в управляван режим конзолата работи само в дебел режим).

Описание на конзолата за заявки 1C

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

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

Първата група бутони в командната лента е отговорна за запазването на текущите заявки във външен файл. Това е много удобно; винаги можете да се върнете към писане на сложна заявка. Или, например, съхранявайте списък с типични примери за определени дизайни.

Вляво, в полето „Заявка“, можете да създавате нови заявки и да ги запазвате в дървовидна структура. Втората група бутони отговаря за управлението на списъка със заявки. С него можете да създавате, копирате, изтривате, премествате заявка.

  • Изпълниискане– просто изпълнение и резултати
  • Изпълнение на пакет– позволява ви да видите всички междинни заявки в пакет от заявки
  • Преглед на временни таблици– позволява ви да видите резултатите, които временните заявки връщат в таблица

Параметри на заявката:

Позволява ви да зададете текущите параметри за заявката.

В прозореца с параметри на заявката е интересно следното:

  • Бутон Вземете от заявкаавтоматично намира всички параметри в заявката за удобство на програмиста.
  • Флаг Общи параметри за всички заявки– когато е инсталиран, обработката му не изчиства параметрите при преминаване от заявка към заявка в общия списък със заявки.

Задайте параметър със списък от стойностиМного е просто, просто когато избирате стойност на параметър, щракнете върху бутона за изчистване на стойността (кръст), системата ще ви подкани да изберете типа данни, където трябва да изберете „Списък със стойности“:

Също така в горния панел има бутон за извикване на настройките на конзолата за заявки:

Тук можете да зададете параметри за автоматично запазване на заявки и параметри за изпълнение на заявки.

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

Дизайнерът на заявки 1C 8 се извиква от контекстното меню (десен бутон на мишката), когато щракнете върху полето за въвеждане:

Това меню също има такива полезни функции като изчистване или добавяне на нови редове („|“) към заявката или получаване на кода на заявката в тази удобна форма:

Заявка = Нова заявка;
Request.Text = ”
|ИЗБЕРЕТЕ
| Валути.Връзка
| ОТ
| Справочник.Валути AS Валути”;
RequestResult = Request.Execute();

Долното поле на конзолата за заявки показва полето за резултат от заявката, поради което е създадена тази обработка:



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

Оптимизация на заявките

Една от най-важните точки за увеличаване на производителността на 1C предприятие 8.3 е оптимизациязаявки. Тази точка също е много важна, когато преминаване на сертифицирането. По-долу ще говорим за типични причини за неоптимална производителност на заявките и методи за оптимизация.

Селекции във виртуална таблица с помощта на конструкцията WHERE

Необходимо е да се прилагат филтри към детайлите на виртуалната таблица само чрез VT параметрите. При никакви обстоятелства не трябва да използвате конструкцията WHERE за избор във виртуална таблица; това е сериозна грешка от гледна точка на оптимизация. В случай на избор чрез WHERE, всъщност системата ще получи ВСИЧКИ записи и едва след това ще избере необходимите.

ДЯСНО:

ИЗБИРАМ

ОТ
Регистър на натрупванията. Взаимни разчети с участниците в организациите.
,
Организация = &Организация
И Индивидуално = &Индивидуално) КАК Взаимни разплащания с Участници в Организации Салда

ГРЕШНО:

ИЗБИРАМ
Взаимни разчети с Участници на Салда на организациите
ОТ
Регистър на натрупванията. Взаимни разчети с участници в организации (,) КАК Взаимни разчети с участници в организации
КЪДЕТО
Взаимни разчети с участниците в организациите. Организация = & Организация
И Взаимни разчети с Участници на организации Индивидуални = &Индивидуални

Получаване на стойността на поле от сложен тип с помощта на точка

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

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

ГРЕШНО:

ИЗБИРАМ
Запис Set.Recorder.Date,
RecordSet.Quantity
ОТ
RegisterAccumulations.ProductsOrganizations AS SetRecords

Тоест, всъщност такава заявка ще има достъп не до една таблица, а до 22 таблици на база данни (този регистър има 21 типа регистратори).

ДЯСНО:

ИЗБИРАМ
ИЗБОР
WHEN ProductsOrg.Registrar LINK Документ. Продажби на продукти и услуги
THEN EXPRESS(ProductsOrg.Registrar AS Document.Sale of GoodsServices).Дата
WHEN GoodsOrg.Registrar LINK Document.Receipt of GoodsServices
THEN EXPRESS(GoodsOrg.Registrar AS Document.Receipt of GoodsServices).Дата
КРАЙ НА ДАТА,
ProductsOrg.Quantity
ОТ
RegisterAccumulations.ProductsOrganizations AS ProductsOrganization

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

ДЯСНО:

ИЗБИРАМ
ПродуктиОрганизации.Дата,
ПродуктиОрганизации.Количество
ОТ
Регистър на натрупванията на стоки на организации AS Стоки на организации

Подзаявки в условие за присъединяване

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

ГРЕШНО:

ИЗБИРАМ …

ЛЯВО ПРИСЪЕДИНЯВАНЕ (
ИЗБЕРЕТЕ ОТ RegisterInformation.Limits
КЪДЕТО …
ГРУПИРАЙ ПО...
) ОТ …

ДЯСНО:

ИЗБИРАМ …
PUT Ограничения
ОТ Информационен регистър.Ограничения
КЪДЕТО …
ГРУПИРАЙ ПО...
ИНДЕКС ПО...;

ИЗБИРАМ …
ОТ Документ за стоки и услуги
LEFT JOIN Граници
ОТ …;

Обединяване на записи с виртуални таблици

Има ситуации, когато при свързване на виртуална маса с други, системата не работи оптимално. В този случай, за да оптимизирате производителността на заявката, можете да опитате да поставите виртуалната таблица във временна таблица, като не забравяте да индексирате обединените полета в заявката за временна таблица. Това се дължи на факта, че VT често се съдържат в няколко физически СУБД таблици; в резултат на това се компилира подзаявка за избора им и проблемът се оказва подобен на предишната точка.

Използване на селекции въз основа на неиндексирани полета

Една от най-честите грешки при писане на заявки е използването на условия за неиндексирани полета, това противоречи правила за оптимизиране на заявки.СУБД не може да изпълни оптимално заявка, ако заявката включва избор на неиндексируеми полета. Ако вземете временна таблица, трябва също да индексирате полетата за връзка.

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

  1. Индексът съдържа всички полета, изброени в условието.
  2. Тези полета са в самото начало на индекса.
  3. Тези селекции са последователни, т.е. стойностите, които не са включени в условието на заявката, не са „заклещени“ между тях.

Ако СУБД не избере правилните индекси, цялата таблица ще бъде сканирана - това ще има много негативно влияние върху производителността и може да доведе до продължително блокиране на целия набор от записи.

Използване на логическо ИЛИ в условия

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

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

Клюев В.В.

http://prof1c.kklab.ru

Създаване иработа с заявки. Най-простите операцииза начинаещи(Редовно приложение)

Добър ден

Днес искам да ви разкажа как да започнете да работите със заявки и да научите (постепенно, разбира се) как да работите със заявки в 1C. За запознатите с MS заявките
SQL разбира се ще бъде много по-опростен.

Така че нека отворим конфигуратора и да създадем нова външна обработка.

След което ще получим прозорец с нашата обработка. Нека да продължим директно към експерименти върху заявки, за това ще създадем нов формуляр в нашата обработка - и за това в списъка (бяло поле) изберете Формуляри - и щракнете върху (+) Добавяне, съгласете се с всички предложени параметри на формуляра по подразбиране и щракнете върху готово.

Затова създадохме празна форма за вас с бутони и. В прозореца с формуляра изберете разделите и преминете директно към писане на кода, който ще бъде изпълнен, когато щракнете върху бутона за изпълнение. За да направите това, намерете процедурата ButtonExecutePress(Button)

и напишете следния код:

Процедура ButtonExecutePress(Button) Заявка = Нова заявка() ; Заявка. Текст = "ИЗБЕРЕТЕ | * | ОТ| Документ . Фактура за плащане към купувача" ; Резултат = Заявка. Изпълнение (). Разтоварване (); Край на процедурата

Нека коментираме написаното тук. Избрахме всички документи „Фактура за плащане към купувача“ със заявката. Бих искал веднага да отбележа, че в зависимост от конфигурацията, в която експериментирате, погледнете състава на документите във вашата конфигурация и вместо „Фактура за плащане към купувача“, която посочих, заменете който и да е обект на Документ от списък с документи във вашата конфигурация, за предпочитане документите от този тип да се създават в информационната база, за да се избегне получаването на празен резултат от заявката. Искам също да отбележа важен момент - ако има твърде много такива документи, тогава изпълнението на заявката може да отнеме известно време - поради факта, че не ограничаваме заявката до условия и избираме всички полета - които звездичката ( *) кажи ни.

Използвайки ключовата дума „Избор“, нареждаме нашата заявка да избере всички полета (*) (данни за документа) от документа „Фактура за плащане към купувача“.

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

Получаваме резултата от заявката под формата на таблица със стойности, както се вижда от използвания от нас метод (параметър) - Качване, тоест първо изпълнихме
заявка (Run) и едва след това качи резултата от заявката в таблицата със стойности и таблицата със стойности се намира в променливата Result.

След това запазваме нашата обработка във файл, за да направите това, щракнете върху Файл-> Запиши като и напишете името на файла, за моята обработка задавам името „ExternalProcessing1Demo“, за да не търся обработката дълго време, можете да го запазите на работния плот, след което ще трябва да го отворим)).

Сега нека научим малко основите на отстраняването на грешки. За да направите това, сега в полето до текста Резултат = ... щракнете двукратно с левия бутон на мишката, така че да се появи червен кръг, трябва да получите нещо като следното:

И така, сега сме задали точка на прекъсване на реда с резултата, сега нека стартираме конфигурацията за отстраняване на грешки, като натиснете клавиша (F 5) или бутона
на лентата с инструменти:

Сега, в режима 1C:Enterprise, който стартирахме, нека отворим нашата запазена обработка File->Open и намерете мястото, където сте запазили файла за обработка, изберете го и щракнете върху отваряне. Щракнете върху бутона „Изпълни“ в нашата обработка. Ако сте направили всичко правилно, автоматично ще превключите в режим на конфигуратор и ще видите следното на мястото, където е инсталирана нашата точка на прекъсване:

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

За да визуализирате заявката, направете следното: В горното меню на конфигуратора намерете менюто Debugging и изберете командата Tableau.

Празен прозорец -> Tableau - ще се отвори в долната част на прозореца на конфигуратора. В този прозорец има празни редове. Щракнете двукратно върху празния маркиран ред и напишете думата Резултат. Трябва да получите следното:

И така, в прозореца, който посочихме, трябва да получим резултата от изпълнението на нашия код, а именно сега - променливата „Резултат“, тъй като все още не сме изпълнили този ред код - имаме празна стойност и типа на данните на променливата е „Недефиниран“.

Нека направим стъпка - да изпълним указания ред код. За да направите това, натиснете клавиша или в менюто Debug->Step through... (F 10).

И какво виждаме в нашата таблица:

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

Получаваме прозорец с избраните от нас документи, които се намират в променливата Result

Да обобщим:

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

изгледи