Създаване и работа със заявки (за начинаещи). Създаване и работа с заявки (за начинаещи) 1s 8.3 ако е в заявка

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

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

Основната част от отчета е заявката за 1C. В случай на отчет, ACS е най-голямата част от доклада.

Седни. Поеми си дъх. Успокой се. Сега ще ви кажа новината.

За да програмирате в 1C, не е достатъчно да знаете езика за програмиране 1C. Също така трябва да знаете езика за заявки 1C.

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

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

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

Когато потребителят стартира 1C в режим Enterprise, в работещия клиент няма нито един грам данни. Следователно, когато трябва да отворите директория, 1C изисква данни от базата данни, тоест прави 1C заявка.

1C заявките са:

  • Автоматични заявки 1C
    Генерира се автоматично от системата. Създадохте формуляр за списък с документи. Добавена е колона. Това означава, че когато отворите този формуляр в режим Enterprise, ще има заявка и данните за тази колона ще бъдат поискани.
  • Полуавтоматични заявки 1C
    Има много методи (функции) на езика 1C, при достъп до които се прави заявка към базата данни. Например.GetObject()
  • Ръчни 1C заявки (написани от програмиста специално като заявка)
    Можете сами да напишете 1C заявка в код и да я изпълните.

Създаване и изпълнение на 1C заявки

Заявка 1C е действителният текст на заявката на езика на заявката 1C.
Текстът може да бъде написан с химикалки. Тоест вземи и го напиши (ако знаеш този език).

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

След като текстът на заявката 1C е готов, тя трябва да бъде изпълнена. За тази цел в 1C кода Request() има обект. Ето един пример:

Заявка = Нова заявка();
Query.Text = "ИЗБЕРЕТЕ
| Номенклатура.Връзка
| ОТ
| Справочник.Номенклатура AS Номенклатура
|КЪДЕ
| Номенклатура.Обслужване“;
Изберете = Query.Run().Select();

Доклад(Избор.Връзка);
EndCycle;

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

Резултатът може да бъде качен в обикновена таблица:
Fetch = Query.Run().Unload(); //Резултат – таблица със стойности

Или просто обикаляйте ред по ред.
Изберете = Query.Run().Select();
Докато Select.Next() цикъл
//Направете нещо с резултатите от заявката
EndCycle;

Работа с 1C заявки

Основни принципи на 1C заявки

Основни принципи за изграждане на 1C заявка -
ИЗБЕРЕТЕ Списък с полета ОТ Заглавие на таблица WHERE Условия

Пример за конструиране на такава 1C заявка:

ИЗБИРАМ
//списък с полета за избор
връзка,
Име,
Код
ОТ
//име на таблицата, от която избираме данни
//списък с таблици е списък с обекти в прозореца на конфигуратора
Справочник.Номенклатура
КЪДЕТО
//показва избор
Тип продукт = &Услуга //избор по външна стойност
Или услуга // Атрибут „Услуга“ от тип Boolean, избор по стойност True
СОРТИРАНЕ ПО
//Сортиране
Име

Списък на 1C таблици

Можете да видите имената на таблиците в прозореца на конфигуратора. Просто трябва да напишете “Указател” вместо “Указатели”, например “Указател.Номенклатура” или “Документ.Продажби на стоки и услуги” или “Регистър на натрупване.Продажби”.

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

Information Register.RegisterName.Last Slice(&Date) – 1C заявка от информационния регистър, ако е периодична, за определена дата

Accumulation Register.Register Name.Balances(&Date) – 1C заявка от регистъра на балансите за определена дата

Регистър за натрупване.Име на регистър.Оборот (&Начална дата, &Крайна дата) – 1C заявка от оборотния регистър за периода от началната дата до крайната дата.

Допълнителни принципи

Когато поискаме списък с някои данни, основните принципи работят. Но ние също можем да поискаме числа и заявката може да ги преброи вместо нас (да ги добави например).

ИЗБИРАМ
//Quantity(FieldName) – брои количеството
//Field AS OtherName – преименува полето
Количество (връзка) AS Количество публикувани документи
ОТ

КЪДЕТО
Проведено

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

ИЗБИРАМ
//просто поле за документ
организация,
//преброяване на количеството
Количество (връзка) AS QuantityBy Organisations
ОТ
Документ Продажби на стоки и услуги
КЪДЕТО
Проведено
ГРУПИРАЙ ПО

Организация

Тази заявка 1C ще ни върне броя документи за всяка организация (наричана още „по организация“).

Нека допълнително изчислим количеството на тези документи с помощта на 1C заявка:

ИЗБИРАМ
//просто поле за документ
организация,
//преброяване на количеството

//пребройте сумата

ОТ
Документ Продажби на стоки и услуги
КЪДЕТО
Проведено
ГРУПИРАЙ ПО
//трябва да се използва, ако списъкът с полета има функция count() и едно или повече полета едновременно - тогава трябва да групирате по тези полета
Организация

Тази заявка от 1C също ще ни върне количеството документи.

ИЗБИРАМ
//просто поле за документ
организация,
//преброяване на количеството
Количество (връзка) AS QuantityBy организации,
//пребройте сумата
Сума (DocumentAmount) КАТО сума
ОТ
Документ Продажби на стоки и услуги
КЪДЕТО
Проведено
ГРУПИРАЙ ПО
//трябва да се използва, ако списъкът с полета има функция count() и едно или повече полета едновременно - тогава трябва да групирате по тези полета
Организация
ПО РЕЗУЛТАТИ Общи

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

Накратко за допълнителните функции на езика за заявки 1C:

  • Обединяване на данни от множество таблици
  • Вложени заявки
  • Пакетна заявка
  • Създаване на собствени виртуални маси
  • Заявка от таблица със стойности
  • Използване на вградени функции за получаване и манипулиране на стойности.

1C Query Builder

За да не пишете текста на заявката на ръка, има дизайнер на заявки 1C. Просто щракнете с десния бутон навсякъде в модула и изберете 1C Query Designer.

Изберете желаната таблица отляво в дизайнера на заявки 1C и я плъзнете надясно.

Изберете необходимите полета от таблицата в дизайнера на заявки 1C и плъзнете надясно. Ако желаете не само да изберете поле, но и да приложите към него някаква функция за сумиране, след като плъзнете, кликнете върху полето два пъти с мишката. След това в раздела Групиране ще трябва да изберете (плъзнете) необходимите полета за групиране.

В раздела Условия в дизайнера на заявки 1C можете да изберете необходимите селекции по същия начин (чрез плъзгане на полетата, чрез които ще направите избора). Не забравяйте да изберете правилното състояние.

В раздела Поръчка е посочено сортирането. В раздела Резултати – обобщаване на резултатите.

С помощта на дизайнера на заявки 1C можете да изучавате всяка съществуваща заявка. За да направите това, щракнете с десния бутон върху текста на съществуваща заявка и изберете 1C дизайнер на заявки - и заявката ще бъде отворена в 1C дизайнера на заявки.

Езикът за заявки 1C 8 е незаменим инструмент за програмист на 1C; той ви позволява да пишете по-сбит, прост, разбираем код и да използвате по-малко системни ресурси при работа с данни. Тази статия отваря серия от уроци, посветени на езика за заявки 1C 8. В първия урок ще разгледаме структурата на основния оператор на този език - ИЗБИРАМ.С помощта на този оператор можете да създавате селекции от таблици на база данни. Избраните данни от таблица могат да бъдат сортирани, поставени условия върху нея, свързани и комбинирани с данни от други таблици, групирани по различни полета и много повече.

Език за заявки 1C enterprise 8 - Структура на оператора SELECT

Нека да разгледаме структурата на оператора SELECT (незадължителните части на оператора са посочени в квадратни скоби). Езикът за заявки 1C предоставя широк набор от инструменти за създаване на проби от данни.

ИЗБЕРЕТЕ [ПОЗВОЛЕНО] [РАЗЛИЧНО] [ПЪРВО A] [Поле1] [AS Alias1], [Field2] [AS Alias2], ... [FieldM] [AS AliasB] [PUT TemporaryTableName] [FROM Table1 AS AliasTableTable1 [[INNER JOIN ][LEFT JOIN][FULL JOIN] Table2 AS Псевдоним Table2 [[INNER JOIN][LEFT JOIN][FULL JOIN] TableC AS Alias ​​​​TablesC BY Expression1 [And Expression2]...[And ExpressionD]] .. . ... BY Expression1 [И Expression2]...[And ExpressionE]] ... [TableF AS TableF Alias] ... ] [GROUP BY GroupingField1[,] ... [GroupingFieldG]] [WHERE Expression1 [AND Израз2] ... [И ИзразH]] [ОБЕДИНИ ВСИЧКИ...] [; ...] [ИНДЕКС ПО Псевдоним1 ... ПсевдонимB] [ОБЩО [Функция за агрегиране(Поле1)][,] [Функция за агрегиране(Поле2)][,] ... [Функция за агрегиране(ПолеI)] ПО [ОБЩИ] [,] [ GroupingField1][,] ... [GroupingFieldj]]

Ключови думи и блокове за работа с полета

  • ИЗБИРАМ— ключова дума, указваща началото на оператора;
  • ПОЗВОЛЕНпоказва, че изборът трябва да включва записи в таблици, които имат достъп за четене за дадения потребител;
  • РАЗЛИЧНИпоказва, че извадката трябва да включва само различни (във всички полета) потоци. С други думи, дублиращите се редове ще бъдат изключени от извадката;
  • ПЪРВО Аако посочите тази ключова дума, тогава само първият A от редовете, избрани от заявката, ще бъде включен в селекцията, където A е естествено число;
  • Полев блок— този блок показва полетата, които трябва да бъдат включени в селекцията. Тези полета ще бъдат избрани колони. В най-простия случай полето изглежда така: Table Alias.TableFieldName AS Псевдоним на поле

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

Ключови думи и блокове за работа с таблици

  • PUT TemporaryTableName- ключова дума МЯСТОима за цел да създаде временна таблица с конкретно име, която ще се съхранява в RAM в дадена 1C 8 сесия, докато тя приключи или докато временната таблица бъде унищожена. Трябва да се отбележи, че имената на временните таблици в една сесия 1C 8 не трябва да се повтарят;
  • Блок от таблици и релации— блокът показва всички таблици, използвани в тази заявка, както и връзките между тях. Блокът започва с ключова дума ОТ,последвано от името и псевдонима на първата таблица. Ако тази таблица е свързана с други таблици, тогава връзките са посочени. Езикът за заявки 1C съдържа следния набор от типове връзки:
    • ВЪТРЕШНО СЪЕДИНЕНИЕ— запис от лявата таблица ще бъде включен в селекцията само ако е изпълнено условието за връзка, запис от дясната таблица ще бъде включен в селекцията само ако е изпълнено условието за връзка;
    • ЛЯВА ВРЪЗКА— запис от лявата таблица ще бъде включен в селекцията във всеки случай, запис от дясната таблица ще бъде включен в селекцията само ако е изпълнено условието за връзка;
    • ПЪЛНА СВЪРЗВАНЕ— запис от лявата таблица ще бъде включен първи в селекцията при всички случаи, след това само ако е изпълнено условието за свързване, запис от дясната таблица ще бъде включен първи в селекцията при всички случаи, след това само ако условието за връзка е изпълнено е изпълнено. В този случай получените дублиращи се редове се изключват от извадката.

    След типа връзка се посочват името и псевдонимът на втората таблица. Следва ключовата дума ОТ, последвани от комуникационни условия, свързани помежду си чрез логически оператори И, ИЛИ.Всеки израз в условието трябва да върне булева стойност (True, False). Ако първата таблица е свързана с други таблици, различни от втората, тогава отново се посочва типът на връзката и т.н. Всяка от таблиците, участващи във връзката, от своя страна може да бъде свързана с други таблици, това е показано в диаграмата на структурата на заявката. Ако таблицата не е свързана с първата, тогава тя се посочва без тип връзка, тогава нейните връзки могат да следват и т.н.;

Блокове за преобразуване на ключови думи и данни

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

Искате ли да продължите да изучавате езика за заявки 1C 8? След това прочетете следващата статия.

Заявка .Текст = "ИЗБИРАМ | StorageUnits.Link | ОТ | Directory.usStorageUnits КАК да използвате StorageUnits // Пример 1: сравнение с празна булева стойност: |КЪДЕ | StorageUnits.AllowSelectionFromReserveZone = False // Пример 2. но ако това булево значение е дефинирано, тогава е по-добре така: // условие за отрицателно булево значение: |КЪДЕ | НЕ единици за съхранение. Позволете избор от резервна зона // Пример 3. избор въз основа на условието за празно поле, което има тип „директория от определен тип“ |КЪДЕ | StorageUnits.ActiveSelectionArea = VALUE(Directory.usSelectionArea.EmptyRef) // Пример 3а. избор въз основа на условието за празно поле от типа „документ от определен тип“ |КЪДЕ | OurInformationRegister.Document = VALUE(Document.OurDocument.EmptyLink) // Пример 3b. избор въз основа на условието за празно поле от типа „документи от различни видове“ ( съставно поле) |КЪДЕ | (OurInformationRegister.Document = VALUE(Document.OurDocument1.EmptyLink) | ИЛИ OurInformationRegister.Document = VALUE(Document.OurDocument2.EmptyLink) | ИЛИ... (и т.н. - ние последователно изброяваме условията за всички възможни типове на това съставно поле) ) // Пример 4. или обратното, ако трябва да изберете попълнена стойност от типа "низ", тогава условието ще помогне: |КЪДЕ | Име на единица за съхранение > """" // Пример 5. ако трябва да изберете документи от определен тип, със съставен тип данни, например в регистъра "RunningTasks", ресурсът "Задача" има съставен тип, сред стойностите на който възможен е документ "Избор". |КЪДЕ | EXPRESS(Information RegisterExecutedTasks.Task AS Document.Selection) LINK Document.Selection // Пример 5а. Друг подобен пример, когато трябва да изберете документи от определен тип | ИЗБОР | КОГА ДА EXPRESS (ag Съответствие на документи. DocumentBU AS Документ. Получаване на стоки и услуги) ВРЪЗКА Документ. Получаване на стоки и услуги | ТОГАВА ""Получаване на стоки и услуги"" | КОГА ДА EXPRESS (ag Съответствие на документи. DocumentBU AS Документ. Продажби на стоки и услуги) ВРЪЗКА Документ. Продажби на стоки и услуги | ТОГАВА ""Продажби на стоки и услуги"" | ИНАЧЕ """" | КРАЙ КАТО Изглед на документ // Пример 6. избор по условие на недефинирана стойност: |КЪДЕ | SavedSettings.User = НЕДЕФИНИРАН // Пример 7. избор по тип на движение "Входящи" на регистъра за натрупване, "Разходи" - аналогично): |КЪДЕ | RegProductsInRetail.MovementType = VALUE(MovementTypeAccumulation.Incoming) // Пример 8. Как да посочите в заявка, че няма нужда да изпълнявате заявката (например, трябва програмно, в зависимост от някакво условие, да върнете празен резултат от заявка - Request.Text = StrReplace(Request.Text, "WHERE Doc.Link = &DocumentLink" , "КЪДЕ Е ЛЪЖАТА");). За да направите това, просто добавете условието „Where is False“. Между другото, независимо от обема на данните, поискани в извадката, такава заявка ще бъде изпълнена незабавно. |КЪДЕ Е ЛЪЖАТА // Пример 9. Проверка дали резултатът от заявката съдържа данни: Ако неЗаявка.Изпълни().празна() Тогава // Пример 10. избор въз основа на празна дата: |КЪДЕ | tbStrings.CancellationDate = DATETIME(1, 1, 1)

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

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

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

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

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

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

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

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

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

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

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 Account_10" ;

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

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

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

Request.Text = //ако сумата е повече от 7500, тогава трябва да има отстъпка от 300 рубли, //така че ако условието е задействано, тогава функцията //връща Sum - 300 //в противен случай заявката ще върне просто Sum "ИЗБЕРЕТЕ | ИЗБЕРЕТЕ | КОГАТО TCReceipts.Amount > 7500 | ТОГАВА TCReceipts.Amount - 300 | ИНАЧЕ TCReceipts.Amount | END AS AmountWithDiscount |FROM | Document.Receipts of GoodsServices.Goods AS TCreceipts";

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 | ... | END AS Number | FROM | RegisterAccumulations.Purchases 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 (ProductsInStockRemains.InStockRemaining, 0) AS Remainder | ОТ | Директория.Номенклатура AS No. | ЛЯВА ВРЪЗКА Регистрирайте натрупвания. GoodsInWarehouses. Remainings AS GoodsInWarehousesRemains | ON (GoodsInWarehousesRemains. Nomenclature = No. Link)";

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

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

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

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

Конструкции в езика за заявки 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, | ProductsIn 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 | | ГРУПИРАНЕ ПО | ПродуктиВСкладове.Номенклатура, |ПродуктиВСкладове.Склад | |НАЛИЧНИ | СУМА(ПродуктиВСкладове.В наличност) > 3" ;

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 |Поставяне на данниTz |ОТ | Регистър на натрупване.CompensationRP.Remains AS Comp ensationRPOstat ki | WHERE | CompensationRPORemaining.CompensationRemaining<>0 | И CompensationRPORemains.AmountForCalcCompRemaining> 100" ;

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

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

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

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

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

В тази статия ще разгледаме темата за вложените таблици в езика на заявките 1C.

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

В моята база данни за обучение ще стартирам конзолата за заявки, ще отворя дизайнера на заявки и ще избера таблицата „Предоставяне на услуги“.

Нека разширим тази таблица

И в него виждаме табличната част „Услуги“.

Нека изберем цялата тази част от масата.

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

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

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

Нека щракнете върху OK в дизайнера и да видим как ще изглежда нашата заявка.

Както можете да видите, в заявката има точка след полето „Услуги“, а избраните полета са изброени в скоби след нея.

Нека изпълним молбата.

На фигурата виждаме, че всички избрани полета в табличната част на документа са изброени разделени със запетаи в полето „Услуги“. Не всички конзоли за заявки имат дисплей като този на фигурата по-горе; понякога може просто да пише „ “.

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

Да видим как ще бъде изпълнена такава заявка.

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

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

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

По-долу е даден малък пример за код, който работи с вложена таблица:


&На сървъра
Процедура FillOnServer()
Заявка = Нова заявка;
Заявка. Текст = "ИЗБИРАМ
| Продажба на продукт. Линк,
| Продажба на продукт.Продукти.(
| продукт,
| Количество
| ОТ
| Документ. Продажба на продукти КАК ДА ПРОДАВАТЕ Продукти"
;
Fetch = Заявка. Изпълни(). Избирам();
Чао Избор. Цикъл Next().
Горна линия на дървото = продажба на продукти. GetItems();
НовРед = Горен РедДърво. Добавяне();
Нова линия. Връзка = Избор. връзка;
TableProducts = Избор. Стоки;
SelectionProducts = TableProducts. Избирам();
Докато избор на продукти. Цикъл Next().
TreeChildRow = Нов ред. GetItems();
ProductRow = ChildTreeRow. Добавяне();
ProductString. Връзка = Избор на продукт. продукт;
ProductString. Количество = Примерни артикули. Количество ;
EndCycle;
EndCycle;
Край на процедурата

Нека обясня горния код.

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

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

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

Това е резултатът, който този код ще върне

Все още имате въпроси?

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

Промо код за 20% отстъпка: hrW0rl9Nnx

Подкрепете проекта ми, като дарите всяка сума

Присъединете се към моите групи.