Виразити як число у запиті 1с 8.3. Документ.Видаткова ЯК Д

Несумісні типи «ВИРАЗИТИ»— таке повідомлення з'являється, коли програміст 1С 8.2 або 8.3 намагається порівняти два різних типу.

Функція Виразити() дозволяє привести значення поля запиту 1С до певного типу. Це може знадобитися у двох випадках:

1. Отримати необхідну розрядність чи кількість потрібну кількість символів рядкового значення. Кількість символів полів необмеженого типу доводиться обмежити через певні особливості.

Отримайте 267 відеоуроків з 1С безкоштовно:

Наприклад:

ВИРАЗИТИ(Номенклатура.Коментар ЯК РЯДКУ(300))
ВИРАЗИТИ(Номенклатура.Ціна ЯК ЧИСЛО(15, 2)) ЯК Сума

2. Перетворити поле складеного типу на поле з одним типом. Це може знадобитися з метою. Якщо в типізоване поле потрапить значення іншого типу, система поверне NULL, тому завжди необхідно додатково встановлювати умову в секції «ДЕ», обмежуючи його оператором ПОСИЛАННЯ.

Наприклад:

ВИБРАТИ

ВИРАЗИТИ(Продажи.Реєстратор ЯК Документ.Реалізація)

З

ДЕ Продажі.Реєстратор ПОСИЛАННЯ Документ.Реалізація

Як уникнути помилок

Помилки типу «Несумісні типи ВИРАЗИТИ …» можуть виникати при неправильному використанні синтаксису.

Наприклад, конструкція «ВИРАЗИТИ(«123» ЯК ЧИСЛО(5, 2)) ЯК Сума» вважається помилковою, оскільки у запиті не можна штатними методами перетворювати з одного типу на інший.

Якщо Ви починаєте вивчати програмування 1С, рекомендуємо наш безкоштовний курс (не забудьте

У цій статті розберемо можливості наведення типів у мові запитів 1С, які надає функція «Виразити».
Розглянемо кілька варіантів застосування цієї функції.
І перший варіант – заокруглення чисел.

Для цього необхідно використати функцію Виразити у наступному форматі:

Виразити(<Число>як Число(<ДлинаЧисла>,<Точность>))

Де:
Число- поле, параметр яке потрібно округлити
ДовжинаЧисла- максимальна довжина числа
Точність- Точність округлення числа

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

Другий варіант застосування – наведення рядків. Найчастіше в конфігураціях використовуються рядки необмеженої довжини, що накладає деякі обмеження. Наприклад, ми не можемо порівнювати рядки необмеженої довжини.
У наведеному нижче запиті поле Повне Найменування має тип рядка необмеженої довжини, і цей запит не буде працювати.

Для того, щоб він працював, необхідно поле необмеженої довжини привести в рядок з певною довжиною, робиться це за допомогою функції Виразити в наступному форматі:

Виразити(<Строка>як Рядок(<ДлинаСтроки>)

Де
ДовжинаРядки– максимальна довжина, до якої буде наведено рядок.
Переробимо запит: будемо в умові наводити необмежений рядок до рядка з певною довжиною. Тоді жодних помилок не буде.

Розглянемо останній і, я сказав би, найголовніший варіант її застосування: під час роботи з полями складового типу.
Нижче наведено два запити, у яких використовуються поля складового типу. Перший неправильний, а другий правильний.

Тобто. коли вам потрібно отримати поле якогось складеного типу, то завжди отримуйте значення цього поля тільки після наведення типу за допомогою функції Виразити. У цьому випадку для документів та довідників буде наступний формат:

Виразити(<Документ>як документ.<ИмяТаблицы>)
Виразити(<Справочник>як Довідник.< ИмяТаблицы >)
.

Де
Ім'яТаблиці- Назва об'єкта в .

Завжди використовуйте функцію висловити, коли працюєте зі складовими типами, це суттєво оптимізує запит.

Якщо Ви все ще плаваєте в конструкціях мови запитів, і у Вас викликають труднощі навіть найпростіші запити, то рекомендую вам мій курс «Запити в 1С від новачка до профі». Де ці та багато інших питань розглядаються докладніше.

У чому особливість цього курсу:
Курс розрахований на тих, хто не знайомий із мовою запитів у 1С;
Навчальний матеріалграмотно скомпонований та простий у освоєнні;
Декілька десятків уроків;
Корисні практичні приклади;
Усі уроки викладені зрозумілою та простою мовою

Для моїх читачів купон на знижку 25%: hrW0rl9Nnx

Я намагаюся якнайчастіше випускати різні цікаві безкоштовні статті та відеоуроки. Тому буду дуже радий, якщо Ви підтримаєте мій проект, перерахувавши будь-яку суму:

Можете перерахувати будь-яку суму безпосередньо:
Яндекс.Гроші — 410012882996301
Web Money - R955262494655

Вступайте до моїх груп.

Мова запитів є одним із основних механізмів 1С 8.3 для розробників. За допомогою запитів можна швидко отримати будь-які дані, що зберігаються у базі. Його синтаксис дуже нагадує SQL, але є й відмінності.

Основні переваги мови запитів 1С 8.3 (8.2) перед SQL:

  • розіменування посилальних полів (звернення черга одну або кілька точок до реквізитів об'єктів);
  • робота з результатами дуже зручна;
  • можливість створювати віртуальні таблиці;
  • запит можна писати як англійською, так і російською мовами;
  • можливість блокувати дані для виключення взаємних блокувань.

Недоліки мови запитів у 1С:

  • на відміну від SQL, 1С запити не дозволяють змінювати дані;
  • відсутність процедур, що зберігаються;
  • неможливість перетворення рядка на число.

Розглянемо наш міні підручник з основних конструкцій мови запитів 1С.

У зв'язку з тим, що запити 1С дозволяють лише отримувати дані, будь-який запит повинен починатися зі слова «ВИБРАТИ». Після цієї команди вказуються поля, дані з яких потрібно отримати. Якщо вказати «*», будуть вибрані всі доступні поля. Місце, звідки вибиратимуться дані (документи, регістри, довідники та інше) зазначається після слова «ІЗ».

У наведеному нижче прикладі вибираються найменування всієї номенклатури з довідника «Номенклатура». Після слова "ЯК" вказуються псевдоніми (імена) для таблиць та полів.

ВИБРАТИ
Номенклатура.Найменування ЯК НайменуванняНоменклатури
З
Довідник Номенклатура ЯК Номенклатура

Поруч із командою «ВИБРАТИ» ​​можна вказати ключові слова:

  • РІЗНІ. Запит буде відбирати тільки рядки, що відрізняються хоча б по одному полю (без дублів).
  • ПЕРШІ n, де n– кількість рядків із початку результату, які необхідно відібрати. Найчастіше така конструкція використовується спільно з сортуванням (ПОРЯДОЧИТИ ПО). Наприклад, коли потрібно відібрати певну кількість останніх за датою документів.
  • ДОЗВОЛЕНІ. Дана конструкція дозволяє вибирати з бази тільки записи, які доступні поточному користувачеві. Баз використання цього ключового словаКористувачеві буде виведено повідомлення про помилку при спробі звернення запиту до тих записів, доступу до яких у нього немає.

Ці ключові слова можуть використовуватися як усі разом, так і окремо.

ДЛЯ ЗМІНИ

Ця пропозиція блокує дані для виключення взаємних конфліктів. Заблоковані дані не будуть зчитуватись з іншого з'єднання до закінчення транзакції. У цій пропозиції можна вказувати конкретні таблиці, які потрібно заблокувати. В іншому випадку будуть заблоковані всі. Конструкція є актуальною лише для режиму автоматичних блокувань.

Найчастіше пропозиція «ДЛЯ ЗМІНИ» використовується при отриманні залишків. Адже при одночасної роботі кількох користувачів у програмі, доки один отримує залишки, інший може їх змінити. У такому разі отриманий залишок буде вже не вірним. Якщо ж заблокувати дані цією пропозицією, поки перший співробітник не отримає коректний залишок і не зробить з ним всі необхідні маніпуляції, другий співробітник буде змушений чекати.

ВИБРАТИ
Взаєморозрахунки. Співробітник,
Взаєморозрахунки.СумаВзаєморозрахунківЗалишок
З
РеєстрНакопичення.ВзаєморозрахункиСотрудниками.Залишки ЯК Взаєморозрахунки
ДЛЯ ЗМІНИ

ДЕ (WHERE)

Конструкція необхідна для накладання будь-якого відбору на дані, що вивантажуються. У деяких випадках отримання даних з регістрів розумніше прописувати умови відборів у параметрах віртуальних таблиць. При використанні «ДЕ» спочатку виходять всі записи, і тільки потім застосовується відбір, що значно уповільнює виконання запиту.

Нижче наведено приклад запиту на отримання контактних осіб з певною посадою. Параметр відбору має формат: &Ім'яПараметра (назва довільне).

ВИБІР (CASE)

Конструкція дозволяє вказувати умови безпосередньо у запиті.

У наведеному нижче прикладі «Додаткове поле» міститиме текст залежно від того, чи проведено документ чи ні:

ВИБРАТИ
НадходженняТіУ.Посилання,
ВИБІР
КОЛИ Вступ ТіУ.
ТОДИ «Документ проведено!»
Інакше «Документ не проведено…»
КІНЕЦЬ ЯК ДодатковеПоле
З
Документ.Надходження ТоварівПослуг ЯК ВступТіУ

З'ЄДНАННЯ (JOIN)

З'єднання пов'язують дві таблиці за умовою зв'язку.

ЛІВОЕ/ПРАВЕ З'ЄДНАННЯ

Суть ЛІВОГО з'єднання у тому, що повністю береться перша зазначена таблиця і до неї за умовою зв'язку прив'язується друга. Якщо записів, відповідних першої таблиці у другій не знайшлося, то їх значеннями підставляється NULL. Простіше кажучи, головною є перша зазначена таблиця і до її даних вже підставляються дані другої таблиці (якщо вони є).

Наприклад, необхідно отримати номенклатурні позиції з документів «Надходження товарів та послуг» та ціни з регістру відомостей «Ціни номенклатури». В даному випадку, якщо ціна в будь-якій позиції не знайдена, замість неї підставитись NULL. З документа всі позиції будуть обрані незалежно від того, чи є на них ціна чи ні.

ВИБРАТИ
НадходженняТіУ.Номенклатура,
Ціни.
З
Документ.НадходженняТоварівПослуг.Товари ЯК ВступТіУ
ВНУТРІШНЯ З'ЄДНАННЯ РеєстрВідомостей.ЦіниНоменклатури.Зріз Останніх ЯК Ціни
ПО Вступ ТіУ.Номенклатура = Ціни.Номенклатура

У ПРАВОМУ все точно і навпаки.

ПОВНЕ З'ЄДНАННЯ

Даний вид з'єднання відрізняється від попередніх тим, що в результаті будуть повернуті всі записи першої таблиці, так і другої. Якщо за заданою умовою зв'язку у першій чи другій таблиці не знайдено записів, замість них буде повернено значення NULL.

При використанні в попередньому прикладі повного з'єднання буде обрано всі позиції номенклатури з документа «Надходження товарів та послуг» та всі останні ціни з регістру «Ціни номенклатури». Значення не знайдених записів, як у першій, і у другій таблиці дорівнюватимуть NULL.

ВНУТРІШНЯ З'ЄДНАННЯ

Відмінністю ВНУТРІШНЬОГО з'єднання від ПОВНОГО є те, що якщо хоча б в одній з таблиць не знайдено запис, запит не виведе її взагалі. У результаті буде обрано лише ті номенклатурні позиції з документа «Надходження товарів та послуг», для яких у регістрі відомостей «Ціни номенклатури» є записи, якщо в попередньому прикладі замінити «ПОВНЕ» на «ВНУТРІШНІЙ».

ЗГРУПУВАТИ ПО (GROUP BY)

Угруповання в запитах 1С дозволяє згортати рядки таблиці (групувальні поля) за певною загальною ознакою (полям, що групуються). Групувальні поля можуть виводитися тільки із застосуванням агрегатних функцій.

Результатом наступного запиту буде перелік видів номенклатури з максимальними цінами за ними.

ВИБРАТИ
,
МАКСИМУМ(Ціни.Ціна) ЯК Ціна
З

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

ПІДСУМКИ

На відміну від угруповання під час використання підсумків виводяться всі записи і до них додаються підсумкові рядки. Угруповання виводить лише узагальнені записи.

Підсумки можна підбивати по всій таблиці цілком (з використанням ключового слова «ЗАГАЛЬНІ»), по кількох полях, по полях з ієрархічною структурою (ключові слова «ІЄРАРХІЯ», «ТІЛЬКИ ІЄРАРХІЯ»). При підбитті підсумків не обов'язково використовувати агрегатні функції.

Розглянемо приклад, аналогічний приклад вище з використанням угруповання. У разі результат запиту поверне як згруповані поля, а й детальні записи.

ВИБРАТИ
Ціни.Номенклатура.ВидНоменклатури ЯК ВидНоменклатури,
Ціни.Ціна ЯК Ціна
З
РеєстрВідомостей.ЦіниНоменклатури.Зріз Останніх ЯК Ціни
ПІДСУМКИ
МАКСИМУМ(Ціна)
ПЗ
ВидНоменклатури

МАЮЧІ (HAVING)

Цей оператор схожий на оператора «ДЕ», але використовується тільки для агрегатних функцій. Інші поля, крім використовуваних цим оператором, мають бути згруповані. Оператор «ДЕ» не застосовується для агрегатних функцій.

У наведеному нижче прикладі відбираються максимальні ціни номенклатури, якщо вони перевищують 1000, згруповані за видом номенклатури.

ВИБРАТИ

МАКСИМУМ(Ціни.Ціна) ЯК Ціна
З
РеєстрВідомостей.ЦіниНоменклатури.Зріз Останніх ЯК Ціни
ЗГРУПУВАТИ ПО
Ціни.Номенклатура.Вид Номенклатури
МАЮЧІ
МАКСИМУМ(Ціни.Ціна) > 1000

ВПОРЯДКУВАТИ ЗА

Оператор «Упорядкувати» сортує результат запиту. Для того, щоб гарантовано виводити записи в постійному порядку, використовується автоупорядкування. Примітивні типи сортуються за звичайним правилам. Типи посилань сортуються за GUID.

Приклад отримання списку співробітників, відсортованого за назвою:

ВИБРАТИ
Співробітники.Найменування ЯК Найменування
З
Довідник. Співробітники ЯК Співробітники
ВПОРЯДКУВАТИ ЗА
Найменування
Автоупорядкування

Інші конструкції мови запитів 1С

  • ОБ'ЄДНАТИ– результати двох запитів на один.
  • ОБ'ЄДНАТИ ВСЕ– аналог ОБ'ЄДНАТИ, але без угруповання однакових рядків.
  • ПОРОЖНЯ ТАБЛИЦЯ– іноді використовується для об'єднання запитів для вказівки порожньої вкладеної таблиці.
  • ПОМІСТИТИ- Створює тимчасову таблицю для оптимізації складних запитів 1С. Такі запити називають пакетними.

Функції мови запитів

  • ПІДСТРОКУобрізає рядок із певної позиції на вказану кількість символів.
  • РІК…СЕКУНДАдозволяють отримати обране значення числового типу. Вхідний параметр - дата.
  • ПОЧАТОК ПЕРІОДУ та КОНЕЦПЕРІОДУвикористовуються під час роботи з датами. Як додатковий параметр вказується тип періоду (ДЕНЬ, МІСЯЦЬ, РІК тощо).
  • ДОДАТИ КДАТИдозволяє додати або відібрати від дати вказаний час певного типу (СЕКУНДА, ХВИЛИНА, ДЕНЬ тощо).
  • РІЗНІСТЬДАТвизначає різницю між двома датами із зазначенням типу вихідного значення (ДЕНЬ, РІК, МІСЯЦЬ тощо).
  • Є NULLзамінює відсутнє значення на вказаний вираз.
  • ПОДАННЯ ТА ПРЕДСТАВКА ПОСИЛАННЯодержують строкове подання зазначеного поля. Застосовуються для будь-яких значень і лише посилальних відповідно.
  • ТИП, ТИЗНАЧЕННЯвикористовуються визначення типу вхідного параметра.
  • ПОСИЛАННЯє логічним оператором порівняння типу значення реквізиту.
  • ВИРАЗИТИвикористовується для перетворення значення потрібного типу.
  • ДАТА ЧАСотримує значення типу "Дата" з числових значень (Рік, Місяць, День, Година, Хвилина, Секунда).
  • ЗНАЧЕННЯу запиті 1С використовується для зазначення визначених значень - довідників, перерахувань, планів видів характеристик. Приклад використання: « Де ЮрФізОсоба = Значення (Перерахування.ЮрФізОсоба.ФізОсоба)«.

Конструктор запитів

Для створення запитів із 1С є дуже зручний вбудований механізм – конструктор запитів. Він містить такі основні вкладки:

  • "Таблиці та поля" - містить поля, які необхідно вибрати та їх джерела.
  • «Зв'язки» - визначає умови для конструкції З'ЄДНАННЯ.
  • «Угруповання» — містить опис конструкцій угруповань і полів, що підсумовуються по них.
  • "Умови" - відповідає за відбори даних у запиті.
  • «Додатково» — додаткові параметри запиту, такі як ключові слова команди «ВИБРАТИ» ​​та ін.
  • "Об'єднання/Псевдоніми" - вказуються можливості об'єднання таблиць і задаються псевдоніми (конструкція "ЯК").
  • "Порядок" - відповідає за сортування результату запитів.
  • "Підсумки" - аналогічна вкладці "Угруповання", але застосовується для конструкції "ПІДСУМКИ".

Текст самого запиту можна переглянути, натиснувши в нижньому лівому кутку на кнопку «Запит». У цій формі його можна скоригувати вручну або скопіювати.


Консоль запитів

Для швидкого перегляду результату запиту в режимі «Підприємство» або налагодження складних запитів використовується . У ній пишеться текст запиту, встановлюються параметри і показується його результат.

Завантажити консоль запитів можна на диску ІТС, або .

NULL – це нічим іншим, як відсутність значення. Багато хто плутає його зі значенням «0» типу число, порожнім посиланням на будь-який об'єкт або з порожнім рядком. Через цю помилку виникає багато помилок.

Значення NULL з'являтиметься у тому випадку, якщо у запиті буде звернення до неіснуючого поля, властивості або до битого посилання.

Заснований на SQL, який дозволяє перевіряти на значення NULL звичайною рівністю. Нижче описані два способи перевірки на NULL 1С 8.3.

Функція мови запитів 1С 8.3 Є NULL() має два вхідні параметри:

  • вираз, що перевіряється;
  • вираз заміни.

Якщо значення, що перевіряється, буде NULL, то ця функція поверне значення виразу заміни. Якщо ж значення буде відмінно від NULL, то повернеться вираз, що саме перевіряється.

Нижче розглянуто приклад. У ньому вибираються всі номенклатурні позиції табличної частини товару із документа «Надходження товарів та послуг». За допомогою лівого з'єднання кожній номенклатурі проставляється остання ціна з регістру відомостей «Ціни номенклатури».

В даному випадку може виникнути така ситуація, що для будь-якої позиції може просто не бути ціни на регістр. У такому разі функція ESTNULL поверне нам звичний нуль. Якщо їй не скористатися, при спробі зробити арифметичні операції над полем «Ціна» зі значенням NULL ми отримаємо помилку.

ВИБРАТИ

ЄNULL(Ціни.Ціна, 0) ЯК АктуальнаЦіна
З



ДЕ

Є NULL в операторі ВИБІР

Аналогом функції Є NULL() є «Є NULL», яка використовується в операторі ВИБІР і перевіряє, чи є значення NULL. «Є» в даному випадку має на увазі рівність і запит попереднього прикладу виглядатиме таким чином:

ВИБРАТИ
Товари.Номенклатура ЯК Товар,
ВИБІР
КОЛИ Ціни.Ціна Є NULL
ТОДІ 0
Інакше Ціни.Ціна
КІНЕЦЬ ЯК АктуальнаЦіна
З
Документ.НадходженняТоварівПослуг.Товари ЯК Товари
ЛІВОЕ З'ЄДНАННЯ РеєстрВідомостей.ЦіниНоменклатури.Зріз Останніх ЯК Ціни
ПО Товари.Номенклатура = Ціни.Номенклатура
ДЕ
Товари.Посилання = ПосиланняНаДокумент

Відмінності функції Є NULL() від Є NULL

Як ви могли побачити з попередніх прикладів, в обох випадках запит повертає ті самі дані. Функція Є NULL () є скороченим варіантом ВИБІР КОЛИ … Є NULL … КІНЕЦЬ, але вона все ж таки буде кращою з наступних причин:

  1. Функція ESTNULL() оптимізує запит. Вона зчитується один раз, тому при перевірці складного вираження запит відпрацює швидше.
  2. Функція EСТЬNULL() скорочує конструкцію, завдяки чому запит стає більш читабельним.
  3. При виконанні функції EСТЬNULL() вираз заміни наводиться до типу виразу, що перевіряється, для типів рядкових типів (до довжини рядка) і числових (до розрядності).

У цій статті ми хочемо обговорити з Вами всі функції мови запитів 1с, а також конструкції мови запитів. Чим відрізняється функція від конструкції? Функція викликається з дужками та можливими параметрами у них, а конструкція пишеться без дужок. Безумовно всі конструкції та функції мови запитів 1сроблять процес отримання даних гнучким та багатофункціональним. Дані функції та конструкції застосовні до полів запиту, а деякі також застосовні за умов.

Функції мови запитів 1с

Оскільки зрозумілий опис функцій мови запитів 1страпляється набагато рідше, ніж опис конструкцій, ми вирішили почати розглядати саме функції. Тепер давайте розберемо кожну окремо, описавши її призначення, синтаксис та приклад використання, отже:

1. Функція ДАТА ЧАС- Ця функція створює константне поле з типом "Дата".

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

Приклад використання:

2. Функція Різноманітність- Повертає різницю двох дат в одному з вимірювань (рік, місяць, день, година, хвилина, секунда). Вимірювання передається у параметрі.

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

Приклад використання:

Запит.Текст = "ВИБРАТИ | РІЗНЕСТЬДАТ(ДАТАВРЕМЯ(2015, 4, 17), ДАТАВРЕМЯ(2015, 2, 1), ДЕНЬ) | ЯК Колводнів";

3. Функція ЗНАЧЕННЯ- задає константне поле з наперед визначеним записом з бази даних, також можна отримати порожнє посилання будь-якого типу.

Синтаксис: ЗНАЧЕННЯ(<Имя>)

Приклад використання:

Запит.Текст = "ВИБРАТИ //зумовлений елемент | ЗНАЧЕННЯ(Довідник.Валюти.Долар) ЯК Долар, //порожнє посилання | ФізОсоба) ЯК ФізОбличчя, / / ​​зумовлений рахунок |

4. Функція ВИБІР- Перед нами аналог конструкції ЯКЩО який використовується в коді, тільки ця використовується в запитах 1С.

Синтаксис: ВИБІР КОЛИ<Выражение>ТОДІ<Выражение>Інакше<Выражение>КІНЕЦЬ

Приклад використання:

Запрос.Текст = //якщо сума більше 7500, тоді має бути знижка 300 рублів, //тому якщо умова спрацьовує то функція //повертає Сума - 300 //інакше запит поверне просто Сума "ВИБРАТИ | ВИБІР | КОЛИ ТЧ Надходження.Сума > 7500 | ТОДІ ТЧНадходження.Сума - 300 | Інакше ТЧНадходження.Сума |

5. Функція ВИРАЗИТИ- дозволяє виразити константне поле певним типом.

Синтаксис: ВИРАЗИТИ(НазваПоля ЯК НазваТипу)

Приклад використання:

Запит.Текст = "ВИБРАТИ РІЗНІ | Продажі.Реєстратор.Номер, | ВИБІР | КОЛИ Продажі.Реєстратор ПОСИЛАННЯ Документ.Видаткова | Реалізація | ТОДИ ВИРАЗИТИ(Продажи.Реєстратор ЯК Документ.Реалізація) | КІНЕЦЬ | ... | КІНЕЦЬ ЯК Номер | З | РеєстрНакопичення.Закупівлі ЯК Закупівлі";

Є ще варіант використання функції ВИРАЗИТИ в полях змішаних типах, де такі зустрічаються? Найпростіший приклад це "Реєстратор" у будь-якого регістру. То навіщо нам може знадобитися уточнювати тип у реєстраторі? Давайте розглянемо ситуацію, коли ми з реєстратора вибираємо поле "Номер", з якої таблиці буде обраний номер? Правильна відповідь із усіх! Тому щоб наш запит працював швидко, слід вказувати явний тип за допомогою функції ВИРАЗИТИ

Приклад використання:

Запит.Текст = "ВИБРАТИ | ВИРАЗИТИ(Номенклатура.Коментар ЯК Рядок(300)) ЯК Коментар, | ВИРАЗИТИ(Номенклатура.Сума ЯК Число(15,2)) ЯК Сума |З | Довідник.Номенклатура ЯК

6. Функція ISNULL(альтернативне написання Є NULL) - якщо поле має тип NULL, воно замінюється на другий параметр функції.

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

Приклад використання:

Також відзначимо що тип NULL бажано ЗАВЖДИ замінювати якесь значення, т.к. порівняння з типом NULL завжди дає брехня навіть якщо ви порівнюєте NULL з NULL. Найчастіше значення NULL утворюються внаслідок з'єднання таблиць (всі види з'єднань крім внутрішнього).

Запит.Текст = //Вибираємо всю номенклатуру і залишки по ній //якщо залишокв але якоїсь номенклатури немає то буде поле //NULL яке заміниться значенням 0 "ВИБРАТИ | Ном.Посилання, | Залишок |З |Довідник.Номенклатура ЯК Ном |Ліве З'єднання РеєстрНакопичення.ТовариНаСкладах.Залишки ЯК ТовариНаСкладахЗалишки |ПЗ (ТовариНаСкладахЗалишки.Номенклатура = Ном.Посилання)";

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

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

Приклад використання:

Запит.Текст = "ВИБРАТИ | ПРЕДСТАВЛЕННЯ(ВільніЗалишкиЗалишки.Номенклатура) ЯК Номенклатура, | ПРЕДСТАВЛЕННЯ(ВільніЗалишкиЗалишки.Склад) ЯК Склад, |

Конструкції у мові запитів 1с

Вище ми розглянули з Вами функції мови запитів 1с, тепер настав час розглянути конструкції у мові запитів 1с, вони не менш важливі та корисні, приступаємо.

1. Конструкція ПОСИЛАННЯ- являє собою логічний оператор перевірки типу посилання. Найчастіше зустрічається під час перевірки поля складеного типу на конкретний тип. Синтаксис: ПОСИЛАННЯ<Имя таблицы>

Приклад використання:

Запит.Текст = //якщо тип значення реєстратора документ Прибуткова, //тоді запит поверне "Надходження товарів", інакше "Реалізація товарів" "ВИБРАТИ | ВИБІР | КОЛИ Залишки.Реєстратор ПОСИЛАННЯ Документ. ""Витрата"" | КІНЕЦЬ ЯК Види руху | З | Реєстр Накопичення.

2. Конструкція МІЖ- Цей оператор перевіряє чи входить значення у вказаний діапазон.

Синтаксис: МІЖ<Выражение>І<Выражение>

Приклад використання:

Запрос.Текст = //отримаємо всю номенклатуру код якої лежить в діапазоні від 1 до 100 "ВИБРАТИ | Номенклатура. Посилання | З | Довідник. Номенклатура ЯК Номенклатура | ДЕ | Номенклатура.

3. Конструкція В та В ІЄРАРХІЇ- перевіряють чи знаходиться значення в списку, що передається (як списку можуть передаватися масиви, таблиці значень і т.д.). Оператор В ІЄРАРХІЇ дозволяє переглядати ієрархію (приклад використання План Рахунків).

Синтаксис: В(<СписокЗначений>), В ІЄРАРХІЇ(<СписокЗначений>)

Приклад використання:

Запрос.Текст = // вибираємо всі субрахунки рахунку "ВИБРАТИ | Госпрозрахунковий. Посилання ЯК Рахунок | З | План Рахунок.Госпрозрахунковий ЯК Хозрозрахунковий | ДЕ | Госпрозрахунковий.

4. Конструкція ПОДІБНО- Ця функція дозволяє нам порівнювати рядок із шаблоном рядка.

Синтаксис: ПОДІБНО "<ТекстШаблона>"

Варіанти шаблону рядка:

% - Послідовність, що містить будь-яку кількість довільних символів.

Один символ довільний.

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

[^...] - будь-який одиночний символ, або послідовність символів з перелічених усередині квадратних дужок крім тих, які перелічені за значком заперечення.

Приклад використання:

Запрос.Текст = //знайдемо всю номенклатуру яка містить корінь ТАБУР і починається //або з маленької або з великої літери т "ВИБРАТИ | Номенклатура.Посилання |З | Довідник.Номенклатура ЯК Номенклатура |ДЕ | Товари.Найменування ПОДІБНО ""[Тт ]абур%""";

5. Конструкція ДОЗВОЛЕНІ- цей оператор дозволяє вибрати лише записи з БД, куди викликає має право читання. Ці права налаштовуються лише на рівні записів (RLS).

Синтаксис: ДОЗВОЛЕНІ пишеться після ключового слова ВИБРАТИ

Приклад використання:

Запит.Текст = "ВИБРАТИ ДОЗВОЛЕНІ | Контрагенти.Посилання |З | Довідник.Контрагенти ЯК Контрагенти";

6. Конструкція РІЗНІ- дозволяє вибрати записи, у яких відсутні повторні записи.

Синтаксис: РІЗНІ пишеться після ключового слова ВИБРАТИ

Приклад використання:

Запрос.Текст = // вибирає записи на які є права у читача "ВИБРАТИ РІЗНІ | Контрагенти. Найменування | З | Довідник. Контрагенти ЯК Контрагенти";

Також Конструкція РІЗНІ може використовуватися з оператором ДОЗВОЛЕНІ та іншими операторами.

Приклад використання:

Запрос.Текст = // вибирає різні записи на які є права у читача "ВИБРАТИ ДОЗВОЛЕНІ РІЗНІ | Контрагенти. Найменування | З | Довідник. Контрагенти ЯК Контрагенти";

7. Конструкція ПЕРШІ- вибирає вказану в параметрі кількість записів із результату запиту.

Синтаксис: ПЕРШІ<число>

Приклад використання:

Запит. Текст = // Вибирають перші 4 номери ВМД з довідника "ВИБРАТИ ПЕРШІ 4 | Номери ВМД. Посилання | З | Довідник.

8. Конструкція ДЛЯ ЗМІНИ- дозволяє заблокувати таблицю, працює лише у транзакціях (актуально лише автоматичних блокувань).

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

Приклад використання:

Запит.Текст = "ОБРАТИ |

9. Конструкція ПОРЯДОЧИТИ ПО- впорядковує дані щодо певного поля. Якщо полем є посилання, то при установці прапора Автоупорядкуваннябуде відбуватися сортування за поданням посилання, якщо прапор вимкнено, то посилання сортуються за старшинством адреси посилання в пам'яті.

Синтаксис: ВПОРЯДКУВАТИ ЗА<НаименованиеПоля>Автоупорядкування

Приклад використання:

Запит.Текст = "ВИБРАТИ | Вільні Залишки Залишки. Номенклатура ЯК Номенклатура, | Вільні Залишки Залишки. отрутування";

10. Конструкція ЗГРУПУВАТИ ПО- використовується для угрупування рядків запиту за певними полями. Числові поля повинні використовуватись із будь-якою агрегатною функцією.

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

Приклад використання:

Запит.Текст = "ВИБРАТИ | ТовариНа Складах.Номенклатура ЯК Номенклатура, | ТовариНаСкладах.Склад, | на складах.

11. Конструкція МАЮЧІ- дозволяє застосувати агрегатну функцію умови вибірки даних, схожа на конструкцію ДДЕ.

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

Приклад використання:

Запит.Текст = // вибирає згруповані записи де поле ВНаявності більше 3 " ВИБРАТИ | ТовариНаСкладах.Номенклатура ЯК Номенклатура, | ТовариНаСкладах.Склад, | ПЗ | ТовариНаСкладах.Номенклатура, | ТовариНаСкладах.Склад | |МІЮЧІ | СУМА(ТовариНаСкладах.ВНаявності) > 3" ;

12. Конструкція ІНДЕКСУВАТИ ПО- Використовується для індексації поле запиту. Запит з індексацією довше виконується, але прискорює пошук індексованих полів. Можна використовувати лише у віртуальних таблицях.

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

Приклад використання:

Запрос.Текст = " ВИБРАТИ | Тз. Найменування ОС, | Тз. Номер Папки, | Тз. КодОС, | Тз. Термін, | Тз. Тип | ПОМІСТИТИ Дані Тз | .КодОС";

13. Конструкція ДЕ- дозволяє накласти умову будь-які поля вибірки. В результаті потраплять записи, що тільки задовольняють умові.

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

Приклад використання:

Запит.Текст = //вибираються всі записи у яких КомпенсаціяЗалишок<>0 і //СуммаДляРозчКомпОстаток > 100 " ВИБРАТИ | КомпенсаціяРПостатки.Контрагент, | КомпенсаціяРПостатки.Дитина, | КомпенсаціяРпостатки.КомпенсаціяЗалишок, | КомпенсаціяРпостач. . Залишки ЯК КомпенсаціяРПОстатки |ДЕ |КомпенсаціяРПОстатки.КомпенсаціяЗалишок<>0 | І КомпенсаціяРПОстатки.СуммаДляРозчКомпОстаток > 100" ;

14. Конструкція ПІДСУМКИ... ЗА ЗАГАЛЬНІ- застосовується для підрахунку результатів, у конструкції вказуються поля якими вважатимуться підсумки і агрегатні функції які застосовуються до підсумковим полям. При використанні підсумків на кожне поле наступне після конструкції ПІДСУМКИ проводиться групування даних. Є необов'язкова конструкція ЗАГАЛЬНІ, її використання також забезпечує додаткове угруповання. Приклад результату запиту ви побачите нижче.

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

Приклад використання:

Запит.Текст = "ВИБРАТИ | Розрахунки.ДоговірКонтрагенту.ВидДоговіру ЯК ВидДоговіру, | Розрахунки.ДоговірКонтрагенту ЯК Договір, | Розрахунки.Контрагент, | ГІ |СУМА(Залишок) |ПО | ЗАГАЛЬНІ, | ВидДоговору ";

На малюнку обведені угруповання які утворилися в ході виконання запиту, найвище відноситься до секції ЗАГАЛЬНІ, а друге до поля ДоговірКонтрагентуВідДоговіру.