THE BELL

Є ті, хто прочитав цю новину раніше за вас.
Підпишіться, щоб отримувати статті свіжими.
Email
Ім'я
Прізвище
Як ви хочете читати The Bell
Без спаму

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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 "ВИБРАТИ | Номенклатура. Посилання | З | Довідник. Номенклатура ЯК Номенклатура | ДЕ | Номенклатура. Код МІЖ 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 і // SummaDlyaRaschKompOstatok> 100 «ВИБРАТИ | KompensatsiyaRPOstatki.Kontragent, | KompensatsiyaRPOstatki.Rebenok, | KompensatsiyaRPOstatki.KompensatsiyaOstatok, | KompensatsiyaRPOstatki.SummaDlyaRaschKompOstatok | PUT DannyeTz | З | RegistrNakopleniya.KompensatsiyaRP.Ostatki KompensatsiyaRPOstatki ЯК | ДЕ | KompensatsiyaRPOstatki.KompensatsiyaOstatok<>0 | І КомпенсаціяРПОстатки.СуммаДляРозчКомпОстаток > 100" ;

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

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

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

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

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

43
NULL – відсутні значення. Чи не плутати з нульовим значенням! NULL - це не число, не дорівнює пробілу, порожнім посиланням, НЕ визначено. NULL – типообразующее значення, тобто. є тип NULL і єдине значення цього. NULL... 26
Для формування та виконання запитів до таблиць бази даних у платформі 1С використовується спеціальний об'єкт мови програмування. Створюється об'єкт викликом конструкції Новий Запит. Запит зручно... 18
У статті наведено корисні прийоми при роботі з запитами 1С v.8.2, а також відомості, які не так добре відомі мовою запитів. Я не прагну дати повний описмови запитів, а хочу зупинитися лише на... 12
Зіткнувся із завданням, потрібно було вибрати всі документи з виплати та згрупувати їх за типом документа! Перегорнувши всі ЖКК та інтернет, зрозумів що простого способуотримати Вид документа в запиті немає:(Довелося...

Оператор подібно до запиту перевіряє рядкові значення з таблиць на зразок шаблону.
Використовується наступним чином зліва від цього оператора поміщається рядок, що перевіряється, а справа шаблон.

Після перевірки повертає Істина або Брехня, що відповідно активно використовується в умовах.
Для створення шаблону використовуються наступні службові символи:

  • % (відсоток) – послідовність, що містить будь-яку кількість довільних символів
  • _ (підкреслення) – один довільний символ
  • […] (у квадратних дужкаходин або кілька символів) - будь-який одиночний символ із перерахованих усередині квадратних дужок
    Також крім різних символів можна використовувати діапазони, наприклад, a-z(A-z), що означає наявність довільного символу, що входить в діапазон, включаючи кінці діапазону.
  • [^…] (у квадратних дужках значок заперечення, за яким слідує один або кілька символів) - будь-який одиночний символ, крім тих, які перераховані слідом за значком заперечення

Інші символи використовуються за своїм прямим призначенням.
Якщо як символ необхідно передати один із вищезгаданих службових символів, то йому повинен передувати<Спецсимвол>. Сам<Спецсимвол>(будь-який відповідний символ) визначається в цьому ж операторі після ключового слова СПЕЦСИМВОЛ.
Наприклад, шаблон "%АБВ[абвг]\_абв%" СПЕЦСИМВОЛ "\" означає підрядок, що складається з послідовності символів:
літери А; літери Б; літери У; однієї цифри; однією з букв а, б, або г; символ підкреслення; літери а; літери б; літери ст.
Причому перед цією послідовністю може бути довільний набір символів.

Процедура ВибратиДоговірУтримуєВНайменуванніТекст(мТекст)
//У запиті будемо використовувати шаблон виду "%" + мТекст + "%" Запит = Новий Запит; Запит.ВстановитиПараметр("Найменування", "%" + Текст + "%"); Запрос.Текст = "ВИБРАТИ | Договори. Посилання, | Договори. Власник | З | Довідник. Договори Контрагентів ЯК Договори | | ДЕ | Договори. Результат = Запрос.Выполнить(); Вибірка = Результат.Вибрати(); Повідомити("Договори, що містять в найменування: " + мТекст + " мають наступні Контрагенти"); Поки Вибірка.Наступний() Цикл Повідомити("Контрагент: " + Вибірка.Власник + "; Договір: " + Вибірка.Посилання КінецьЯкщо; КінецьПроцедури

Іноді виникає ситуація, коли в 1С 8.3 або 8.2 потрібно зробити вибірку, наприклад, з довідника всіх елементів, у яких найменування є слово «глазур». Або з довідника вибрати всіх контрагентів, у прізвищі яких трапляється слово «Іван». Загалом, перевірити якесь рядкове значення.

Для цього існує оператор у запитах 1С 8.3 та 8.2 – «Подібно». Використовується він, відповідно, в умовах:

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

Як користуватись шаблонами у запитах 1С?

Щоб сформувати умову відбору, як параметр потрібно передати якийсь шаблон. Для створення шаблону є так звані службові символи.

Наприклад, символ «%» припускає будь-яку послідовність довільних символів:

Існують інші спеціальні символи:

  • % (відсоток) – допускає будь-яку послідовність довільних символів;
  • _ (нижнє підкреслення) – будь-який один символ;
  • […] – один довільний символ із перелічених усередині дужок. Крім переліку символів, можна використовувати діапазони. Приклад: а-про;
  • [^…] – те саме, що й попереднє, але навпаки. Знак «^» означає заперечення.

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

Використання оператора «ПОДІБНО»

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

  • У блоці умов, зазначеному ключовим словом«ДЕ»;
  • У конструкції Вибір Коли Тоді Інакше Кінець;
  • Безпосередньо у полях вибірки, як наслідок порівняння полів.

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

  1. "%" - Послідовність будь-яких символів довільної довжини. Використовується для пошуку окремих слів чи цифр у рядку;
  2. "_" - будь-який одиничний символ. Призначений позначення наявності одного знака;
  3. «[…]» – послідовність символів для порівняння зі знаком у рядку. За допомогою подібного шаблону перевіряється відповідність будь-якому з перерахованих у дужках знаків. Також можна встановити діапазон цифр або літер ([а-г], );
  4. "[^…]" - протилежний попередньому шаблон. Перевіряється відмінність зазначеного у рядку символу від перерахованих у дужках.

Щоб краще засвоїти і зрозуміти принципи складання вірних шаблонів, розглянемо деякі приклади, що часто зустрічаються в житті розробників. Перше, коли нам необхідно вибрати з довідника номенклатури всі позиції, у найменуваннях яких зустрічається слово «РЕЗЕЦЬ». У цьому випадку нам необхідно використовувати подібно до умов запиту:

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

Якщо ми приберемо обидва символи «%», запит покаже номенклатуру, у якої найменування повністю збігається із зазначеним у лапках. Якщо залишимо шаблон «РЕЗЕЦЬ%» або «%РЕЗЕЦЬ», результатом буде список номенклатури, що закінчується або починається, відповідно, на задану комбінацію символів.


Розберемо завдання, яке може поставити в безвихідь програмістів-початківців, які не знають синтаксис запитів. Допустимо, вам потрібно знайти всю номенклатуру, у найменуванні якої є символ %. Спеціально для випадків, коли потрібно вести пошук зарезервованих символів, існує оператор спецсимвол. Як спецсимвол можна використовувати #,\,/,~ та інші знаки, після яких будь-які зарезервовані символи позначатимуть просто знак.

ВИБРАТИ Номенклатура.Найменування ЯК Найменування З Довідник.Номенклатура ЯК Номенклатура ДЕ Номенклатура.Найменування ПОДІБНО "%#%" СПЕЦСИМВОЛ "#"

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

ВИБРАТИ Номенклатура.Найменування ЯК Найменування З Довідник.Номенклатура ЯК Номенклатура ДЕ Номенклатура.Найменування ПОДІБНО "%" + &найменування + "%"

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

THE BELL

Є ті, хто прочитав цю новину раніше за вас.
Підпишіться, щоб отримувати статті свіжими.
Email
Ім'я
Прізвище
Як ви хочете читати The Bell
Без спаму