Приветсвую вас, шановні читачі блогу сайт! Сьогодні, за допомогою прикладів, ми розглянемо, як на практиці можна використовувати функцію запитів 1С Підрядки / SUBSTRING. Цю функцію не стане в нагоді не тільки в простих запитах, які ми розглянемо тут, але і при і запитів, а також в запитах.

Завдання полягало в тому, що потрібно було з реквізиту документа сответствие виділити два рядки і зробити сортування по ним. Відповідність рахунку, такого виду: 779000/004599. Як розбити це значення на два?

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

Перейдемо до практики:

ВИБРАТИ Тіповой.Регістратор ЯК Назва, підрядки(Тіповой.Регістратор.Соотв.Наіменованіе, 1, 6) ЯК СчетЗатрат, підрядки(Тіповой.Регістратор.Соотв.Наіменованіе, 8, 11) ЯК Відділ, СУМА (ВИБІР КОЛИ МІСЯЦЬ (Тіповой.Період) \u003d 3 ТОДІ ВИРАЗИТИ (Тіповой.Сумма ЯК ЧИСЛО (15, 2)) ІНАКШЕ 0 КІНЕЦЬ) ЯК березня через РегістрБухгалтеріі .Тіповой ЯК Типовий ДЕ Тіповой.СчетКт \u003d & СчетКт І Тіповой.Період МІЖ & ПеріодНач І & ПеріодКон згруповані за підрядки(Тіповой.Регістратор.Соотв.Наіменованіе, 1, 6), підрядки(Тіповой.Регістратор.Соотв.Наіменованіе, 8, 11), Тіповой.Регістратор УПОРЯДОЧИТЬ ПО Відділ, СчетЗатрат

Результат цього запиту наступний:

Назва СчетЗатрат Відділ Березень
Платіжне доручення вихідне 00000000319 від 01.03.2010 14:42:54 779000 004599 9 000
Платіжне доручення вихідне 00000000320 від 02.03.2010 12:07:34 779000 004599 4 721,6
Платіжне доручення вихідне 00000000203 від 01.03.2010 12:28:52 786500 004599 987 614,51
Платіжне доручення вихідне 00000000227 від 03.03.2010 14:16:00 786500 004599 400 000
Платіжне доручення вихідне 00000000238 від 05.03.2010 12:37:57 732000 004600 5 400
Платіжне доручення вихідне 00000000197 від 01.03.2010 11:53:11 732500 004600 12 100
Платіжне доручення вихідне 00000000198 від 01.03.2010 11:55:39 732500 004600 12 100
Платіжне доручення вихідне 00000000279 від 26.03.2010 0:00:00 734100 004600 19 609
Платіжне доручення вихідне 00000000287 від 29.03.2010 14:15:36 734100 004600 55 300
Платіжне доручення вихідне 00000000291 від 30.03.2010 11:01:10 734100 004600 18 090
Платіжне доручення вихідне 00000000268 від 18.03.2010 10:34:25 738000 004600 10 050
Платіжне доручення вихідне 00000000276 від 18.03.2010 12:20:20 750400 004600 13 060,98
Платіжне доручення вихідне 00000000281 від 29.03.2010 12:33:46 750400 004600 555 645,41
Платіжне доручення вихідне 00000000234 від 04.03.2010 12:21:55 754450 004600 24 120
Платіжне доручення вихідне 00000000290 від 30.03.2010 10:44:39 754450 004600 100 000
Платіжне доручення вихідне 00000000240 від 09.03.2010 10:53:24 786300 004600 20 800
Платіжне доручення вихідне 00000000269 від 18.03.2010 10:58:04 786300 004600 61 012
Платіжне доручення вихідне 00000000289 від 30.03.2010 9:27:14 786300 004600 6 000
Платіжне доручення вихідне 00000000223 від 03.03.2010 12:13:38 786500 004600 36 000
Платіжне доручення вихідне 00000000228 від 04.03.2010 9:52:35 786500 004600 378 138,85
Платіжне доручення вихідне 00000000229 від 04.03.2010 9:57:50 786503 004600 126 117,75
Платіжне доручення вихідне 00000000200 від 01.03.2010 11:58:06 754422 004762 63 000
Платіжне доручення вихідне 00000000286 від 29.03.2010 14:10:18 764422 004762 10 000
Платіжне доручення вихідне 00000000267 від 17.03.2010 0:00:00 764423 004762 464 370
Платіжне доручення вихідне 00000000261 від 15.03.2010 11:16:28 764522 004762 81 357

Отже, якщо ми беремо рядок 779000/004599, то підрядок (Тіповой.Регістратор.Соотв.Наіменованіе, 1, 6) буде виділяти рядок «779000». А Підрядки (Тіповой.Регістратор.Соотв.Наіменованіе, 8, 11) буде виводити «004599».

У цьому ж запиті, використовується вираз:

СУМА (ВИБІР КОЛИ МІСЯЦЬ (Тіповой.Період) \u003d 3 ТОДІ ВИРАЗИТИ (Тіповой.Сумма ЯК ЧИСЛО (15, 2)) ІНАКШЕ 0 КІНЕЦЬ) ЯК Березень

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

СУМА (ВИБІР КОЛИ МІСЯЦЬ (Тіповой.Період) \u003d 1 ТОДІ ВИРАЗИТИ (Тіповой.Сумма ЯК ЧИСЛО (15, 2)) ІНАКШЕ 0 КІНЕЦЬ) ЯК січень

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

ТекстЗапроса \u003d "| ВИБРАТИ | Тіповой.Регістратор ЯК Назва, | Підрядки (Тіповой.Регістратор.Соотв.Наіменованіе, 1, 6) ЯК СчетЗатрат, | Підрядки (Тіповой.Регістратор.Соотв.Наіменованіе, 8, 11) ЯК Відділ,"; Для Сч \u003d 1 За 12 Цикл Якщо Сч< 11 Тогда Мес = Сч + 2; Иначе Мес = Сч - 10; КонецЕсли; ТекстЗапроса = ТекстЗапроса + " |СУММА(ВЫБОР | КОГДА МЕСЯЦ(Типовой.Период) = " + Мес + " | ТОГДА ВЫРАЗИТЬ(Типовой.Сумма КАК ЧИСЛО(15, 2)) | ИНАЧЕ 0 |КОНЕЦ) КАК Поле" + Мес + ?(Сч=12,"",","); КонецЦикла; ТекстЗапроса \u003d ТекстЗапроса + "| З | РегістрБухгалтеріі." + ІмяРегістраБухгалтеріі + ".ДвіженіяССубконто (| & НачПеріода, | & КонПеріода,"; СтрокаОграніченійПоРеквізітам \u003d "(Активність \u003d ІСТИНА) І (Рахунок У ІЄРАРХІЇ (& СчетАналіза))"; ТекстЗапроса \u003d ТекстЗапроса + СтрокаОграніченійПоРеквізітам + "|) ЯК Типовий |"; ТекстЗапроса \u003d ТекстЗапроса + "| ДЕ | Тіповой.СчетКт \u003d & СчетАналіза | І Тіповой.Період МІЖ & НачПеріода І & КонПеріода | згруповані за | Підрядки (Тіповой.Регістратор.Соотв.Наіменованіе, 1, 6), | Підрядки (Тіповой.Регістратор.Соотв. Найменування, 8, 11), | Тіповой.Регістратор | УПОРЯДОЧИТЬ ПО | Відділ, | СчетЗатрат ";

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

Тип «Рядок» зустрічається у всіх мовах програмування. Він є примітивним, і в 1С існує багато функцій для роботи з ним. У даній статті ми докладно розглянемо різні способи роботи із строковими типами в 1С 8.3 та 8.2 на прикладах.

рядок

Для того щоб перетворити змінну будь-якого типу в рядок, існує однойменна функція «Рядок ()». Вхідним параметром буде сама змінна, строкове представлення якої необхідно отримати.

Рядок (Брехня) // повертає «Ні»
Рядок (12345) // повертає «12 345»
Рядок (ТекущаяДата ()) //»21.07.2017 11:55:36 "

Перетворювати до рядка можливо не тільки примітивні типи, а й інші, наприклад елементи довідників, документів.

СокрЛП, СокрЛ, СокрП

В якості вхідних параметрів даних функцій виступає змінна строкового типу. Функції видаляють незначні символи (пробіли, переноси каретки та інші): з лівого і правого боку, тільки з лівого боку, і тільки з правого відповідно.

СокрЛП ( "Будуть видалені прогалини по обидва боки«) // «Будуть видалені прогалини з обох сторін»
СокрЛ ( "Будуть видалені прогалини по обидва боки«) // «Будуть видалені прогалини зліва»
СокрП ( "Будуть видалені прогалини по обидва боки«) // «Будуть видалені прогалини справа»

Лев, Прав, Серед

Дані функції дозволяють обрізати частину рядка. Функція «Лев ()» поверне частину рядка з її лівого боку зазначеної довжини. Функція «Прав ()» аналогічно, але обрізка проводиться справа. Функція «Серед ()» дозволяє вказати номер символу, з якого буде виділена рядок і її довжину.

Лев ( «Строкова змінна», 4) // повертає «Стро»
Прав ( «Строкова змінна», 7) // повертає «еременная»
Середовищ ( «Строкова змінна», 2, 5) // повертає «Троки»

СтрДліна

Функція визначає кількість символів, які містяться в строкової змінної.

СтрДліна ( «Слово«) // результатом виконання буде число 5

знайти

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

Зверніть увагу, що пошук проводиться з урахуванням регістру. Якщо в початковій рядку буде більше одного входження підрядка пошуку, функція поверне початок першого входження.

Знайти ( «раз, два, раз, два, три», «два») // функція поверне число 6

Порожня стрічка

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

ПустаяСтрока ( «Пупкін Василь Іванович») // функція поверне значення Брехня
ПустаяСтрока ( »«) // функція поверне значення Істина

ВРег, НРег, Трег

Дані функції дуже корисні при порівнянні і перетворенні строкових змінних. «Врег ()» поверне вихідну рядок у верхньому регістрі, «НРег ()» в нижньому, а «Трег ()» отформатирует її так, що перший символ кожного окремого слова буде з великої літери, а всі наступні з маленькою.

ВРег ( «Генеральний директор») // повертає значення - «ГЕНЕРАЛЬНИЙ ДИРЕКТОР»
НРег ( «Генеральний директор») // повертає значення - «генеральний директор»
Трег ( «Генеральний директор») // повертає значення - «Генеральний Директор»

СтрЗаменіть

Ця функція є аналогом заміни в текстових редакторах. Вона дозволяє підміняти один символ або набір символів іншим в строкових змінних.

СтрЗаменіть ( «червоний, білий, жовтий», «,», «;») // поверне «червоний; білий; жовтий »

СтрЧіслоСтрок

Функція дозволяє визначити кількість рядків, розділених перенесенням каретці в текстовій змінної.

Цикл, в наведеному нижче прикладі, пройде три кола, так як функція СтрЧіслоСтрок поверне значення 3:

Для інд \u003d 1 по СтрЧіслоСтрок ( «рядок1» + Сімволи.ПС + «рядок2» + Сімволи.ПС + «Строка3») Цикл
<тело цикла>
КонецЦікла;

СтрПолучітьСтроку

Ця функція працює з багаторядковим текстом так само, як і попередня. Вона дозволяє отримати певну рядок з текстової змінної.

СтрПолучітьСтроку ( «рядок1» + Сімволи.ПС + «рядок2» + Сімволи.ПС + «Строка3», 2) // поверне «рядок2»

СтрЧіслоВхожденій

Функція підраховує кількість входжень символу або підрядка в шуканої рядку.

СтрЧіслоВложеній ( «а, б; в; г;«, «;») // функція поверне число 4

Символ і КодСімвола

Ці функції дозволяють отримувати символ по його коду в кодуванні Unicode, а так само визначати цей код по самому символу.

КодСімвола ( «А») // функція поверне число 1 040
КодСімвола (1040) // функція поверне «А»

Часті завдання при роботі з рядками

об'єднання рядків

Щоб об'єднати кілька рядків (зробити конкатенацію) досить використовувати оператор додавання.

«Рядок 1" + "Рядок 2" // результатом складання двох рядків буде «Рядок 1 Рядок 2»

перетворення типів

Для того, щоб перетворити тип в рядок, наприклад, посилання на елемент довідника, число та інше, досить використовувати функцію «Рядок ()». Функції, подібні «СокрЛП ()» так само будуть перетворювати змінні в рядок, але вже відразу з відсіканням незначущих символів.

Рядок (1000) // поверне «1 000»

Зверніть увагу, що при перетворенні числа в рядок, програма автоматично додала пробіл, що відокремлює тисячу. Для того щоб цього уникнути можна скористатися наступними конструкціями:

СтрЗаменіть (Рядок (1000), Сімволи.НПП, »») // поверне «1000»

Рядок (Формат (1000, "ЧГ \u003d»)) // поверне «1000»

Лапки в рядку

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

Тема \u003d Рядок ( «ТОВ« »Роги і копита» »- це ми!») // поверне «ТОВ« Роги і копита »- це ми!»

Багаторядкова, перенесення рядка

Для того, щоб створити багатостроковий текст досить додати в нього символи розриву рядків (Сімволи.ПС).

МногострочнийТекст \u003d «Перший рядок» + Сімволи.ПС + «Другий рядок»

Як прибрати пропуски

Для того, щоб прибрати пробіли справа або зліва можна скористатися функцією «СокрЛП ()» (а так само «СокрЛ ()» і «СокрП ()»):

СтрокаБезПробелов \u003d СокрЛП ( "Багато букв«) // функція поверне значення «Багато букв»

Якщо після перетворення числа в рядок вам потрібно прибрати нерозривні прогалини, скористайтеся наступною конструкцією:

СтрокаБезПробелов \u003d СтрЗаменіть (Рядок (99999), Сімволи.НПП, »») // поверне «99999»

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

СтрокаБезПробелов \u003d СтрЗаменіть ( «п р и в е т», »», »») // поверне «привіт»

Порівняння рядків між собою

Порівняти терміни можна звичайним знаком рівності. При порівнянні враховується регістр.

«Здраствуйте» \u003d «здрастуйте» // поверне Брехня
«Здраствуйте» \u003d «Здрастуйте» // поверне Істина
«Здраствуйте» \u003d «До побачення» // поверне Брехня

У мові запитів 1С: Підприємства функція Підрядки () в форматі Підрядки (<Исходная строка>, <Начало>, <Длина>) може застосовуватися до даних строкового типу і дозволяє виділити фрагмент<Исходной строки>, Що починається з символу номер<Начало> (Символи в рядку нумеруються з 1) і довжиною<Длина> символів. Результат обчислення функції Підрядки () має строковий тип змінної довжини, причому довжина буде вважатися необмеженої, якщо<Исходная строка> має необмежену довжину і параметр<Длина> не є константою або перевищує 1024.

Обчислення функції Підрядки () на SQL сервері:
У клієнт-серверному варіанті роботи функція Підрядки () реалізується за допомогою функції SUBSTRING () відповідного оператора SQL, переданого сервера баз даних SQL Server, який обчислює тип результату функції SUBSTRING () за складними правилами в залежності від типу і значень її параметрів, а так ж в залежності від контексту, в якому вона використовується.

У більшості випадків ці правила не впливають на виконання запиту 1С: Підприємства, проте є випадки, коли для виконання запиту істотна максимальна довжина рядка результату, обчислена SQL Server. Важливо мати на увазі, що в деяких контекстах використання функції Підрядки () максимальна довжина її результату може виявитися рівною максимальній довжині рядка обмеженої довжини, яка в SQL Server дорівнює 4000 символів. Це може привести до несподіваного аварійного завершення виконання запиту.

Наприклад, запит:
Код 1C v 8.х ВИБРАТИ
ВИБІР

ІНАКШЕ NULL
КІНЕЦЬ ЯК Подання,
ВИБІР
КОЛИ Вид \u003d & ЮрАдресФізЛіца
ТОДІ Підрядки (Подання, 0, 200)
ІНАКШЕ NULL
КІНЕЦЬ ЯК Представленіе1
З

ВПОРЯДКУВАТИ ЗА
подання,
Представленіе1
завершується аварійно з повідомленням Помилка СУБД:
Microsoft OLE DB Provider for SQL Server: Warning: The query processor could not produce a query plan from the optimizer because the total length of all the columns in the GROUP BY or ORDER BY clause exceeds 8000 bytes.
HRESULT \u003d 80040E14, SQLSTATE \u003d 42000, native \u003d 8618

Це відбувається тому, що обчислена Microsoft SQL Server максимальна довжина рядка, яка є результатом виразу:
Код 1C v 8.х ВИБІР
КОЛИ Вид \u003d & ЮрАдресФізЛіца
ТОДІ Підрядки (Подання, 0, 200)
ІНАКШЕ NULL
КІНЕЦЬ ЯК Подання,
дорівнює 4000 символів. Тому довжина запису, що складається з двох таких полів перевищує 8000 байт, дозволені для виконання операції сортування.

У зв'язку з описаної особливістю виконання функції SUBSTRING () на SQL Server використання функції Підрядки () з метою приведення рядків необмеженої довжини до рядків обмеженої довжини не рекомендується. Замість неї краще використовувати операцію приведення типу ВИРАЗИТИ (). Зокрема, наведений приклад можна переписати у вигляді:
Код 1C v 8.х ВИБРАТИ
ВИБІР
КОЛИ Вид \u003d & ЮрАдресФізЛіца
ІНАКШЕ NULL
КІНЕЦЬ ЯК Подання,
ВИБІР
КОЛИ Вид \u003d & ЮрАдресФізЛіца
ТОДІ ВИРАЗИТИ (Подання ЯК Рядок (200))
ІНАКШЕ NULL
КІНЕЦЬ ЯК Представленіе1
З
РегістрСведеній.КонтактнаяІнформація ЯК Контактнаінформація
ВПОРЯДКУВАТИ ЗА
подання,
Представленіе1

Рядок - один з примітивних типів даних в системах 1С: Підприємство 8. Змінні з типом рядок містять текст.

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

Пер1 \u003d "Слово 1";
Пер2 \u003d "Слово 2";
Пер3 \u003d Пер1 + "" + Пер2;

В підсумку Пер3 матиме значення « Слово 1 Слово 2 ".

Крім того, в системах 1С: Підприємство 8 передбачені функції для роботи з рядками. Розглянемо основні:

ВвестіСтроку (<Строка>, <Подсказка>, <Длина>, <Многострочность>) — функція призначена для виведення діалогового вікна, в якому користувач може вказати значення змінної типу рядок. параметр <Строка> є обов'язковим і містить ім'я змінної, в яку буде записана введений рядок. параметр <Подсказка> необов'язковий - це заголовок діалогового вікна. параметр <Длина> необов'язковий, показує максимальну довжину введеної рядки. За замовчуванням дорівнює нулю, що означає необмежену довжину. параметр <Многострочность> необов'язковий. Визначає режим введення багаторядкового тексту: Істина - введення багаторядкового тексту з роздільниками рядків; Брехня - введення простий рядки.

Рядок можна ввести і, знаючи код символу в кодуванні Unicode:

символ (<КодСимвола>) — код вводиться у вигляді числа.

Буква \u003d Символ (1103); // Я

Існує і зворотна функція, що дозволяє дізнатися код будь-якого символу.

КодСімвола (<Строка>, <НомерСимвола>) — повертає номер зазначеного символу в кодуванні Unicode у вигляді числа.

Функції перетворення регістру тексту:

ВРег (<Строка>) - перетворює всі символи рядка в верхній регістр.

НРег (<Строка>) - перетворює всі символи рядка в нижній регістр.

Трег (<Строка>) - перетворює всі символи рядка в титульний регістр. Тобто перші літери у всіх словах перетворюється в верхній регістр, а інші літери - в нижній.

Функції пошуку і заміни символів в рядку:

знайти (<Строка>, <ПодстрокаПоиска>) - знаходить номер символу входження підрядка пошуку. наприклад:

Знайти ( "Рядок", "ока"); // 4

СтрНайті (<Строка>, <ПодстрокаПоиска>, <НаправлениеПоиска>, <НачальнаяПозиция>, <НомерВхождения>) - знаходить номер символу входження підрядка пошуку, номер входження вказується у відповідному параметрі. При цьому пошук починається з символу, номер якого вказаний у параметрі НачальнаяПозіція.Пошук можливий з початку або з кінця рядка. наприклад:

Номер4 Входження \u003d СтрНайті ( "Обороноздатність", "О", НаправленіеПоіска. Спочатку, 1, 4); // 7

СтрЗаменіть (<Строка>, <ПодстрокаПоиска>, <ПодстрокаЗамены>) - знаходить в заданій стрічці все входження підрядка пошуку і замінює її на подстроку заміни.

СтрЗаменіть ( "Рядок", "ока", ""); // Стор

Порожня стрічка(<Строка>) - перевіряє рядок на наявність значущих символів. Якщо значущих символів немає, або взагалі ніяких символів немає, то повертається значення істина. В іншому випадку - брехня.

СтрЧіслоВхожденій (<Строка>, <ПодстрокаПоиска>) - обчислює число входжень підрядка пошуку в заданій стрічці.

СтрЧіслоВхожденій ( "Вчитися, вчитися і ще раз вчитися", "Вчитися", ""); // 3

СтрШаблон (<Строка>, <ЗначениеПодстановки1>…<ЗначениеПодстановкиN> — підставляє параметри в рядок за номером. Рядок повинен містити маркери підстановки виду: «% 1 ..% N». Нумерація маркерів починається з 1. Якщо значення параметра Не визначене, Підставляється порожній рядок.

СтрШаблон ( "Параметр 1 \u003d% 1, Параметр 2 \u003d% 2", "1" , "2" ) ; // Параметр 1 \u003d 1, Параметр 2 \u003d 2

Функції перетворення рядків:

Лев (<Строка>, <ЧислоСимволов>) - повертає перші спочатку символи рядка.

прав (<Строка>, <ЧислоСимволов>) - повертає останні символи рядка.

середовищ (<Строка>, <НачальныйНомер>, <ЧислоСимволов>) - повертає рядок довжиною в<ЧислоСимволов>, Починаючи з символу<НачальныйНомер>.

СокрЛ (<Строка>) відсікає незначні символи, які стоять зліва від першого значущого символу в рядку.

СокрП (<Строка>) - відсікає незначні символи, які стоять праворуч від останнього значущого символу в рядку.

СокрЛП (<Строка>) - відсікає незначні символи, які стоять зліва від першого значущого символу в рядку і праворуч від останнього значущого символу в рядку.

СтрПолучітьСтроку (<Строка>, <НомерСтроки>) - отримує рядок многострочной рядки по номеру.

Інші функції:

СтрДліна (<Строка>) - повертає кількість символів в рядку.

СтрЧіслоСтрок (<Строка>) - повертає число рядків в многострочной рядку. Рядок вважається новою, якщо вона відокремлена від попередньої символом переведення рядка.

СтрСравніть (<Строка1>, <Строка2> ) - порівнює два рядки без урахування регістру. Функція працює аналогічно об'єкту СравненіеЗначеній. повертає:

  • 1 - якщо перший рядок більше другий
  • -1 - якщо другий рядок більше першої
  • 0 - якщо рядки рівні

СтрСравніть ( "Перший рядок", "Другий рядок"); // 1

Мова запитів в 1С 8 - це спрощений аналог широко відомого «структурованого мови програмування» (як частіше його називають, SQL). Але в 1С він використовується тільки для читання даних, для зміни даних застосовується об'єктна модель даних.

Ще одна цікава відмінність - російський синтаксис. Хоча насправді Ви можете використовувати і англомовні конструкції.

Приклад запиту:

ВИБРАТИ
Банкі.Наіменованіе,
Банкі.КоррСчет
З
Справочнік.Банкі ЯК Банки

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

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

Опис конструкцій мови запитів

структура запитів

Для отримання даних досить використовувати конструкції «ВИБРАТИ» \u200b\u200b(select) і «З» (from). Найпростіший запит виглядає наступним чином:

ВИБРАТИ * З Справочнікі.Номенклатура

Де «*» означає вибір всіх полів таблиці, а Справочнікі.Номенклатура - ім'я таблиці в базі даних.

Розглянемо більш складний і загальний приклад:

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

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

згруповані за
<ИмяПоля1>

ВПОРЯДКУВАТИ ЗА
<ИмяПоля1>

ПІДСУМКИ
<ИмяПоля2>
ПО
<ИмяПоля1>

В даному запиті ми вибираємо дані полів «ІмяПоля1» і «ІмяПоля1» з таблиць «ІмяТабліци1» і «ІмяТабліци», присвоюємо полях синоніми за допомогою оператора «ЯК», з'єднуємо їх по нікому умові «УсловіеСоедіненіеТабліц».

З отриманих даних ми відбираємо тільки дані, відповідні умові з «ДЕ» «УсловіеОтбораДанних» .Далі ми групуємо запит по полю «ІмяПоля1», при цьому підсумовуючи «ІмяПоля2» .Создаём підсумки по полю «ІмяПоля1» і підсумковим полем «ІмяПоля2».

Останньою дією ми сортуємо запит за допомогою конструкції «УПОРЯДОЧИТЬ ПО».

загальні конструкції

Розглянемо загальні конструкції мови запитів 1С 8.2.

ПЕРШІn

За допомогою даного оператора можна отримати n кількість перших записів. Порядок записів визначається порядком в запиті.

ВИБРАТИ ПЕРШІ 100
Банкі.Наіменованіе,
Банкі.Код ЯК БИК
З
Справочнік.Банкі ЯК Банки
ВПОРЯДКУВАТИ ЗА
Банкі.Наіменованіе

Запитом буде отримано перших 100 записів довідника «Банки», упорядкованих за алфавітом.

ДОЗВОЛЕНІ

Ця конструкція актуальна для роботи з механізмом. Суть механізму в обмеженні читання (і інших дій) користувачам для конкретних записів в таблиці бази даних, а не таблиці в цілому.

Якщо користувач намагається за допомогою запиту прочитати записи недоступні йому, він отримає повідомлення про помилку. Щоб цього уникнути, слід використовувати конструкцію «ДОЗВОЛЕНІ», тобто запит буде читати тільки дозволені йому записи.

ВИБРАТИ ДОЗВОЛЕНІ
ХраніліщеДополнітельнойІнформаціі.Ссилка
З
Справочнік.ХраніліщеДополнітельнойІнформаціі

РІЗНІ

Використання «РІЗНІ» дозволить виключити потрапляння рядків-дублів в результат запиту 1С. Дублювання означає збіг всіх полів запиту.

ВИБРАТИ ПЕРШІ 100
Банкі.Наіменованіе,
Банкі.Код ЯК БИК
З
Справочнік.Банкі ЯК Банки

ПустаяТабліца

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

Приклад з довідки 1С 8:

ВИБРАТИ Ссилка.Номер, ПУСТАЯТАБЛІЦА. (Ном, Тов, Кол) ЯК Склад
З Документ.РасхНакл
ОБ'ЄДНАТИ ВСІ
ВИБРАТИ Ссилка.Номер, Склад. (НомерСтрокі, Товар, Кількість)
З Документ.РасхНакл Документ.РасходнаяНакладная.Состав. *

ЕСТЬNULL

Дуже корисна функція, яка дозволяє уникнути багатьох помилок. ЕстьNULL () дозволяє замінити значення NULL на потрібне. Дуже часто використовується в перевірках на наявність значення в приєднаних таблицях, наприклад:

ВИБРАТИ
НоменклатураСпр.Ссилка,
ЕстьNULL (ОстаткіТовара.КолічествоОстаток, 0) ЯК КолічествоОстаток
З


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

ЕСТЬNULL (СчетФактураПолученний.Дата, СчетФактураВиданний.Дата)

ЯК - оператор, який дозволяє нам присвоїти ім'я (синонім) таблиці або полю. Приклад використання ми бачили вище.

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

ВИБРАТИ
Подання (Посилання), // рядок, наприклад «Авансовий звіт №123 від 10.10.2015
Подання (ПометкаУдаленія) ЯК ПометкаУдаленіяТекст, // рядок, «Так» або «Ні»
ПредставленіеСсилкі (ПометкаУдаленія) ЯК ПометкаУдаленіяБулево // булево, Істина або Брехня
З
Документ.АвансовийОтчет

ВИРАЗИТИ

Висловити дозволяє перетворити значення поля до потрібного типу даних. Можна перетворити значення як до примітивного типу, так і до посилального типу.

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

ВИРАЗИТИ (ТабліцаЗатрат.Субконто1 ЯК Справочнік.СтатьіЗатрат) .ВідДеятельностіДляНалоговогоУчетаЗатрат

Для примітивних типів ця функція часто використовується для обмеження кількості символів в полях необмеженої довжини (з такими полями не можна порівнювати). Щоб уникнути помилки « Неправильні в операції порівняння. Не можна порівнювати поля
необмеженої довжини і поля несумісних типів
», Необхідно висловити такі поля наступним чином:

ВИРАЗИТИ (Коментар ЯК Рядок (150))

РАЗНОСТЬДАТ

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

Приклад використання Є NULL в запиті 1С:

ВИБРАТИ * З
Спр
ЛІВЕ З'ЄДНАННЯ РегістрНакопленія.ТовариНаСкладах.Остаткі ЯК ОстаткіТовара
ПО НоменклатураСпр.Ссилка \u003d РеалізованниеТовариКомітентовОстаткі.Номенклатура
ДЕ НЕ ОстаткіТовара.КолічествоОстаток Є NULL

Тип даних в запиті можна визначити наступним чином: за допомогою функцій ТИП () і ТІПЗНАЧЕНІЯ () або за допомогою логічного оператора ПОСИЛАННЯ. Ці дві функції аналогічні.

зумовлені значення

Крім використання в запитах переданих параметрів в мові запитів 1С можна використовувати зумовлені значення або. Наприклад, перерахування, зумовлені довідники, плани рахунків і так далее.Для цього використовується конструкція «Значення ()».

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

ДЕ Номенклатура.ВідНоменклатури \u003d Значення (Справочнік.ВідиНоменклатури.Товар)

ДЕ Контрагенти.ВідКонтактнойІнформаціі \u003d Значення (Перечісленіе.ВідиКонтактнойІнформаціі.Телефон)

ДЕ ОстаткіПоСчетам.СчетУчета \u003d Значення (ПланСчетов.Хозрасчетний.ПрібиліУбиткі)

з'єднання

З'єднання бувають 4 типів: ЛІВЕ, ПРАВОЕ, ПОВНЕ, ВНУТРІШНЄ.

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

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

наприклад:

Поверне всю таблицю Контрагентів і заповнить поле "Банк" лише в тих місцях, де буде дотримуватися умова "Контрагенти.Наіменованіе \u003d Банкі.Наіменованіе". Якщо умова не дотримується, в поле Банк буде встановлено NULL.

ПРАВОЕ З'ЄДНАННЯ в мові 1С абсолютно аналогічно лівому з'єднанню, За винятком одного відмінності - в правила з'єднання "Головна" таблиця - друга, а не перша.

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

ПОВНЕ З'ЄДНАННЯ відрізняється від лівого і правого тим, що виводить всі записи з двох таблиць, з'єднує лише ті, які може з'єднати за умовою.

наприклад:

З

ПОВНЕ З'ЄДНАННЯ
Справочнік.Банкі ЯК Банки

ПО

Мова запитів поверне обидві таблиці повністю лише за виконаним умові з'єднати записи. На відміну від лівого / правого з'єднання можливо появи NULL в двох полях.

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

ВНУТРІШНЄ З'ЄДНАННЯ відрізняється від повного тим, що виводить тільки ті записи, які змогли з'єднати по заданій умові.

наприклад:

З
Справочнік.Контрагенти ЯК Клієнти

ВНУТРІШНЄ З'ЄДНАННЯ
Справочнік.Банкі ЯК Банки

ПО
Кліенти.Наіменованіе \u003d Банкі.Наіменованіе

Даний запит поверне тільки рядки, в яких у банку і контрагента буде однакове найменування.

об'єднання

Конструкція ОБ'ЄДНАТИ і ОБ'ЄДНАТИ ВСІ об'єднує два результату в один. Тобто результат виконання двох буде «злитий» в один, загальний.

Тобто система працює точно так само, як і звичайні, тільки для тимчасової таблиці.

Як використовувати індексувати за

Однак слід врахувати один момент. Побудова індексу тимчасової таблиці також вимагає часу на виконання. Тому доцільно використовувати конструкцію "", тільки якщо точно відомо, що в тимчасовій таблиці буде не 1-2 записи. В іншому випадку ефект може бути зворотним - швидкодія від індексованих полів не компенсує часу побудови індексу.

ВИБРАТИ
КурсиВалютСрезПоследніх.Валюта ЯК Валюта,
КурсиВалютСрезПоследніх.Курс
помістити КурсиВалют
З
РегістрСведеній.КурсиВалют.СрезПоследніх (& Період,) ЯК КурсиВалютСрезПоследніх
індексувати за
Валюта
;
ВИБРАТИ
ЦениНоменклатури.Номенклатура,
ЦениНоменклатури.Цена,
ЦениНоменклатури.Валюта,
КурсиВалют.Курс
З
РегістрСведеній.ЦениНоменклатури.СрезПоследніх (& Період,
Номенклатура В (& Номенклатура) І ТіпЦен \u003d & ТіпЦен) ЯК ЦениНоменклатури
ЛІВЕ З'ЄДНАННЯ КурсиВалют ЯК КурсиВалют
ПО ЦениНоменклатури.Валюта \u003d КурсиВалют.Валюта

угруповання

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

Існують наступні функції:

Сума, Кількість, Кількість різних, Максимум, Мінімум, Середнє.

Приклад №1:

ВИБРАТИ
РеалізаціяТоваровУслугТовари.Номенклатура,
СУМА (РеалізаціяТоваровУслугТовари.Колічество) ЯК Кількість,
СУМА (РеалізаціяТоваровУслугТовари.Сумма) ЯК Сума
З

згруповані за
РеалізаціяТоваровУслугТовари.Номенклатура

Запит отримує все рядки з товарами і підсумовує їх за кількістю та сумами в розрізі номенклатури.

приклад №2

ВИБРАТИ
Банкі.Код,
КІЛЬКІСТЬ (РІЗНІ Банкі.Ссилка) ЯК КолічествоДублей
З
Справочнік.Банкі ЯК Банки
згруповані за
Банкі.Код

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

підсумки

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

Один з найпопулярніших способів використання підсумків в практиці - партионное списання товарів.

ВИБРАТИ




З
Документ.РеалізаціяТоваровУслуг.Товари ЯК РеалізаціяТоваровУслугТовари
ВПОРЯДКУВАТИ ЗА

ПІДСУМКИ
СУМА (Кількість),
СУМА (Сума)
ПО
номенклатура

В результаті запиту вийде наступне ієрархічне:

загальні підсумки

Якщо необхідно отримати підсумки за всіма «підсумками», використовуйте оператор «ЗАГАЛЬНІ».

ВИБРАТИ
РеалізаціяТоваровУслугТовари.Номенклатура ЯК Номенклатура,
РеалізаціяТоваровУслугТовари.Ссилка ЯК Документ,
РеалізаціяТоваровУслугТовари.Колічество ЯК Кількість,
РеалізаціяТоваровУслугТовари.Сумма ЯК Сума
З
Документ.РеалізаціяТоваровУслуг.Товари ЯК РеалізаціяТоваровУслугТовари
ВПОРЯДКУВАТИ ЗА
РеалізаціяТоваровУслугТовари.Ссилка.Дата
ПІДСУМКИ
СУМА (Кількість),
СУМА (Сума)
ПО
ЗАГАЛЬНІ,
номенклатура

В результаті виконання запиту отримаємо наступний результат:

В якому 1 рівень угруповання - агрегування всіх потрібних полів.

упорядкування

Оператор УПОРЯДОЧИТЬ ПО використовується для сортування результатів запиту.

Сортування для примітивних типів (рядок, число, логічне) відбувається за звичайними правилами. Для полів посилальних типів сортування відбувається за внутрішнім поданням посилання (унікальний ідентифікатор), а не за кодом або за поданням посилання.

ВИБРАТИ

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

Запит виведе список найменувань довідника номенклатури, відсортованого за алфавітом.

Автоупорядочіваніе

Результат запиту без сортування є хаотично представлений набір рядків. Розробники платформи 1С не гарантують висновок рядків в однаковій послідовності при виконанні однакових запитів.

Якщо необхідно виводити записи таблиці в постійному порядку, необхідно використовувати конструкцію «Автоупорядочіваніе».

ВИБРАТИ
Номенклатура.Наіменованіе ЯК Найменування
З
Справочнік.Номенклатура ЯК Номенклатура
АВТОУПОРЯДОЧІВАНІЕ

Віртуальні таблиці

Віртуальні таблиці в 1С - це унікальна особливість мови запитів 1С, якої немає в інших аналогічних синтаксису. Віртуальна таблиця - швидкий спосіб отримання профільної інформації з регістрів.

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

  • зріз перших;
  • зріз останніх.
  • залишки;
  • обороти;
  • залишки і обороти.
  • руху з субконто;
  • обороти;
  • обороти Дт Кт;
  • залишки;
  • залишки і обороти
  • субконто.
  • база;
  • дані графіка;
  • фактичний період дії.

Для розробника рішення дані беруться з однієї (віртуальної) таблиці, але насправді платформа 1С бере з безлічі таблиць, перетворюючи їх в потрібних вид.

ВИБРАТИ
ТовариНаСкладахОстаткіІОбороти.Номенклатура,
ТовариНаСкладахОстаткіІОбороти.КолічествоНачальнийОстаток,
ТовариНаСкладахОстаткіІОбороти.КолічествоОборот,
ТовариНаСкладахОстаткіІОбороти.КолічествоПріход,
ТовариНаСкладахОстаткіІОбороти.КолічествоРасход,
ТовариНаСкладахОстаткіІОбороти.КолічествоКонечнийОстаток
З
РегістрНакопленія.ТовариНаСкладах.ОстаткіІОбороти ЯК ТовариНаСкладахОстаткіІОбороти

Такий запит дозволяє швидко отримати велику кількість даних.

Параметри віртуальних таблиць

Дуже важливий аспект роботи з віртуальними таблицями - використання параметрів. Параметри віртуальних таблиць - спеціалізовані параметри для відбору і настройки.

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

Приклад використання таких параметрів:

РегістрНакопленія.ТовариНаСкладах.ОстаткіІОбороти (& НачалоПеріода, & КонецПеріода, Місяць, ДвіженіяІГраніциПеріода, Номенклатура \u003d & НужнаяНоменклатура)

Алгоритм роботи віртуальних таблиць

Наприклад, найбільш використовувана віртуальна таблиця типу «Залишки» зберігає дані двох фізичних таблиць - залишків і рухів.

При використанні віртуальної таблиці система проробляє наступні маніпуляції:

  1. Отримуємо найближчим за датою та вимірювань розраховане значення в таблиці підсумків.
  2. «Додаємо» суму з таблиці руху до суми з таблиці підсумків.


Такі прості дії можуть істотно підвищити продуктивність системи в цілому.

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

конструктор запитів - інструмент, вбудований в систему 1С підприємство, суттєво полегшує розробку запитів до бази даних.

Конструктор запиту має досить простий, інтуїтивно зрозумілий інтерфейс. Проте розглянемо застосування конструктора запиту докладніше.

Запуск конструктора тексту запиту здійснюється контекстним меню (правою кнопкою миші) в потрібному місці програмного коду.

Опис конструктора запиту 1С

Розглянемо кожну вкладку конструктора докладніше. Виняток - вкладка Будівник, це тема для окремої розмови.

Вкладка Таблиці та поля

На цій вкладці вказується джерело даних і поля, які необхідно виводити в звіт. По суті тут описуються конструкції ВИБРАТИ .. З.

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

У контекстному меню віртуальних таблиць можна задати параметри віртуальної таблиці:

вкладка Зв'язки

Вкладка служить для опису з'єднань декількох таблиць, створює конструкції зі словом З'ЄДНАННЯ.

вкладка Угруповання

На даній вкладці система дозволяє групувати і підсумовувати потрібні поля результату таблиці. Описується використання конструкцій згруповані за, СУМА, МІНІМУМ, СЕРЕДНЯ, МАКСИМУМ, КІЛЬКІСТЬ, КІЛЬКІСТЬ РІЗНИХ.

вкладка Умови

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

вкладка Додатково

вкладка додатково рясніє всілякими параметрами, які є дуже важливими. Розглянемо кожне з властивостей.

угруповання вибірка записів:

  • перші N - параметр, який повертає в запит тільки N записів (оператор ПЕРШІ)
  • без повторюваних - забезпечує унікальність отриманих записів (оператор РІЗНІ)
  • дозволені - дозволяє вибирати тільки ті записи, які дозволяє вибрати система з урахуванням (конструкція ДОЗВОЛЕНІ)

угруповання Тип запитувизначає, якою буде тип запиту: вибірка даних, створення тимчасової таблиці або ж знищення тимчасової таблиці.

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

Вкладка Об'єднання / Псевдоніми

На цій вкладці конструктора запитів встановлюється можливість об'єднання різних таблиць і псевдонімів (конструкція ЯК). У лівій частині вказуються таблиці. Якщо встановити прапори навпаки таблиці, буде використовуватися конструкція ОБ'ЄДНАТИ, інакше - ОБ'ЄДНАТИ ВСІ (відмінності двох способів). У правій частині вказуються відповідності полів в різних таблицях, якщо відповідність не вказано, запит буде повертати NULL.

вкладка Порядок

Тут вказується порядок сортування значень (УПОРЯДОЧИТЬ ПО) - по спадаючій (спадання) або зростанню (за зростанням).

Також є цікавий прапор - Автоупорядочіваніе (В запиті - АВТОУПОРЯДОЧІВАНІЕ). За замовчуванням система 1С виводить дані в "хаотичному" порядку. Якщо встановити цей прапор, система буде сортувати дані по внутрішніх даних.

Вкладка Пакет запитів

На вкладці конструктора запитів можна створювати нові, а також використовувати її в ролі навігації. У тексті запиту пакети поділяються символом ";" (крапка кома).

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

У лівому нижньому кутку конструктора запиту є кнопка Запит, за допомогою якого можна в будь-який момент переглянути текст запиту:

В даному вікні можна внести корективи в запит і виконати його.


Використання консолі запитів

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

Розглянемо цей інструмент докладніше.

Завантажити консоль запитів 1С

Насамперед, щоб почати роботу з консоллю запитів, її потрібно звідкись скачати. Обробки зазвичай діляться на два види - на керованих формах і звичайних (або, іноді, їх називають на 8.1 і на 8.2 / 8.3).

Я постарався об'єднати ці два види в одній обробці - в потрібному режимі роботи відкривається потрібна форма (в керованому режимі консоль працює тільки в товстому режимі).

Опис консолі запитів 1С

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

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

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

Зліва, в поле "Запит", можна створювати нові запити і зберігати їх в структурі дерева. Друга група кнопок якраз відповідає за управління списком запитів. За допомогою неї можна створити, скопіювати, видалити, перемістити запит.

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

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

Дозволяють встановити поточні параметри для запиту.

У вікні параметрів запиту цікаво наступне:

  • кнопка Отримати з запиту автоматично знаходить всі параметри в запиті для зручності розробника.
  • прапор Єдині параметри для всіх запитів - при установці його обробка не очищає параметри при переході від запиту до запиту в загальному списку запитів.

Задати параметр списком значень дуже просто, достатньо при виборі значення параметра натиснути на кнопку очищення значення (хрестик), система запропонує вибрати тип даних, де треба вибрати "Список значення":

Також у верхній панелі дуже є кнопка виклику налаштувань консолі запитів:

Тут можна вказати параметри автозбереження запитів і параметри виконання запиту.

В поле запиту консолі заноситься текст запиту. Зробити це можна простим набором тесту запиту або ж викликом спеціального інструменту - конструктора запитів.

Конструктор запиту 1С 8 викликається з контекстного меню (права кнопка миші) при натисканні на поле введення:

Також в цьому меню є такі корисні функції, як очищення або додавання в запит символів переносу рядка ( "|") або ж отримання коду запиту ось в такому зручному вигляді:

Запит \u003d Новий запит;
Запрос.Текст \u003d "
| ВИБРАТИ
| Валюти.Ссилка
| З
| Справочнік.Валюти ЯК Валюти ";
РезультатЗапроса \u003d Запрос.Виполніть ();

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



Також консоль запитів крім списку вміє відображати дані у вигляді дерева - для запитів, що містять підсумки.

оптимізація запитів

Одним з найважливіших пунктів у підвищенні продуктивності роботи 1С підприємства 8.3 є оптимізаціязапитів. Цей пункт також дуже важливий при здачі атестації . Нижче піде мова про типові причини не оптимальною роботи запитів і способах з оптимізації.

Відбори в віртуальній таблиці за допомогою конструкції ДЕ

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

ПРАВИЛЬНО:

ВИБРАТИ

З
РегістрНакопленія.ВзаіморасчетиСДепонентаміОрганізацій.Остаткі (
,
Організація \u003d & Організація
І Фізособа \u003d & Фізособа) ЯК ВзаіморасчетиСДепонентаміОрганізаційОстаткі

НЕПРАВИЛЬНО:

ВИБРАТИ
ВзаіморасчетиСДепонентаміОрганізаційОстаткі.СуммаОстаток
З
РегістрНакопленія.ВзаіморасчетиСДепонентаміОрганізацій.Остаткі (,) ЯК ВзаіморасчетиСДепонентаміОрганізаційОстаткі
ДЕ
ВзаіморасчетиСДепонентаміОрганізаційОстаткі.Організація \u003d & Організація
І ВзаіморасчетиСДепонентаміОрганізаційОстаткі.Фізліцо \u003d & Фізособа

Отримання значення поля складеного типу через точку

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

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

НЕПРАВИЛЬНО:

ВИБРАТИ
НаборЗапісей.Регістратор.Дата,
НаборЗапісей.Колічество
З
РегістрНакопленія.ТовариОрганізаціі ЯК НаборЗапісей

Тобто за фактом ось такий запит буде звертатися не до однієї таблиці, а до 22 таблицями бази даних (у цього регістра 21 тип реєстратора).

ПРАВИЛЬНО:

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

Або другий варіант - додавання такої інформації в реквізит, наприклад, в нашому випадку - додавання дати.

ПРАВИЛЬНО:

ВИБРАТИ
ТовариОрганізацій.Дата,
ТовариОрганізацій.Колічество
З
РегістрНакопленія.ТовариОрганізацій ЯК ТовариОрганізацій

Підзапити в умови з'єднання

Для оптимізації неприпустимо використовувати підзапити в умовах з'єднання, це істотно сповільнює роботу запиту. Бажано в таких випадках використовувати ОТ. Для з'єднання потрібно використовувати тільки об'єкти метаданих і ВТ, попередньо проиндексировав їх по полях з'єднання.

НЕПРАВИЛЬНО:

ВИБРАТИ ...

ЛІВЕ З'ЄДНАННЯ (
ВИБРАТИ З РегістрСведеній.Ліміти
ДЕ ...
Згруповані за ...
) ПО ...

ПРАВИЛЬНО:

ВИБРАТИ ...
помістити Ліміти
З РегістрСведеній.Ліміти
ДЕ ...
Згруповані за ...
Індексувати за ...;

ВИБРАТИ ...
З Документ.РеалізаціяТоваровУслуг
ЛІВЕ З'ЄДНАННЯ Ліміти
ПО ...;

З'єднання записів з віртуальними таблицями

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

Використання відборів по які індексовані полях

Одна з найпоширеніших помилок при складання запитів - використання умов по які індексовані полях, це суперечить правилам оптимізації запитів. СУБД не може виконати запит оптимально, якщо в запиті накладається відбір по Неіндексований полях. Якщо ж береться тимчасова таблиця - також необхідно індексувати поля з'єднання.

Обов'язково для кожного умови повинен існувати відповідний індекс. Відповідним є індекс, що задовольняє наступним вимогам:

  1. Індекс містить всі поля, перераховані в умови.
  2. Ці поля знаходяться в самому початку індексу.
  3. Ці відбори йдуть підряд, тобто між ними не «вклинюються» значення, які не беруть участі в умови запиту.

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

Використання логічного АБО в умовах

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

Дуже корисний безкоштовний відеокурс по розробці і оптимізації запитів, категорично рекомендую новачкам і не тільки!