Інтернет Windows Android

Опис тимчасової таблиці у запиті 1с.

43
NULL – відсутні значення. 26
Чи не плутати з нульовим значенням! NULL - це не число, не дорівнює пробілу, порожньому засланні, Невизначено. 18
NULL – типообразующее значення, тобто. Існує тип NULL і єдине значення цього типу. 13
NULL...

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

У статті наведено корисні прийоми при роботі з запитами 1С v.8.2, а також відомості, які не так добре відомі мовою запитів. Я не прагну дати повний опис мови запитів, а хочу зупинитися лише на...

ПОДІБНО - Оператор перевірки рядка на зразок шаблону. Аналог LIKE у SQL.
Оператор подібно дозволяє порівняти значення виразу, вказаного зліва від нього, з рядком шаблону, вказаним праворуч. Значення виразу...
Мова запитів 1С:Підприємства 8 дозволяє використовувати тимчасові таблиці у запитах. Використання тимчасових таблиць допомагає підвищити продуктивність запитів та зробити текст складних запитів легшим сприйняття.
Робота з тимчасовими таблицями забезпечується двома складовими:

Об'єктом вбудованої мови Менеджер Тимчасових Таблиць, що зберігає дані тимчасових таблиць;

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

Менеджер тимчасових таблиць

Менеджер тимчасових таблиць можна закрити примусово з допомогою методу Закрити(). При цьому будуть видалені всі створені таблиці. Подальша робота з цим екземпляром менеджера буде неможлива.

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

Зв'язок запиту з менеджером тимчасових таблиць здійснюється за допомогою властивості МенеджерТимчасових Таблиць запиту, в якому вказується той екземпляр менеджера, в якому повинні створюватися тимчасові таблиці. Наприклад:

Менеджер Тимчасових Таблиць = Новий Менеджер Тимчасових Таблиць;
Запит = Новий Запит;
Запрос.МенеджерТимчасовихТаблиць = МенеджерТимчасовихТаблиць;

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

Щоб створити тимчасову таблицю на основі даних бази даних, слід встановити об'єкту Запит менеджер тимчасових таблиць, а потім виконати запит до бази даних, використовуючи ключове слово ПОМІСТИТИ, після якого вказати ім'я створюваної тимчасової таблиці. Ключове слово ПОМІСТИТИ розташовується після списку вибірки запиту. Наприклад:

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

Результат виконання такого запиту міститиме один рядок з однією колонкою з ім'ям "Кількість", в якому буде розміщено кількість записів, поміщених у створену таблицю.

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

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

При необхідності створення індексу для тимчасової таблиці слід у запиті вказати ключове слово ІНДЕКСОВАТИ ПО, після якого перерахувати поля, за якими потрібно побудувати індекс.

Наприклад:

ВИБРАТИ
Код,
Найменування
ПОМІСТИТИ ТимчасоваТаблиця
З Довідник.Номенклатура
ІНДЕКСУВАТИ ПО Код

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

Щоб створити тимчасову таблицю і заблокувати дані таблиць, виходячи з яких створюється тимчасова, слід використовувати конструкцію ДЛЯ ЗМІНИ, слід використовувати конструкцію ДЛЯ ЗМІНИ.

Наприклад:

ВИБРАТИ
ВитратнаНакладна.Посилання,
ВитратнаНакладна.Номер,
ВидатковаНакладна.Дата
ПОМІСТИТИ ТимчасоваТаблиця
З
Документ.ВитратнаНакладна ЯК ВитратнаНакладна
ДЕ
ВитратнаНакладна.Посилання В(&Документи)

ДЛЯ ЗМІНИ

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

Таблиця значень;
таблична частина;
результат запиту.
Нижче наведено приклад створення часової таблиці на основі зовнішнього джерела:

ВИБРАТИ
Код,
Найменування
ПОМІСТИТИ ТимчасоваТаблиця
З &ЗовнішнійДжерело ЯК ЗовнішнійДжерело

У цьому прикладі в тимчасову таблицю "Тимчасова Таблиця" буде поміщено вміст колонок "Код" та "Найменування" із зовнішнього джерела, наприклад, таблиці значень, переданої як параметр "ЗовнішнійДжерело".

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

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

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

ЗНИЩИТИ ТимчасоваТаблиця

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

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

приклад

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

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

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

Тобто. при додаванні колонки необхідно другим параметром вказати типи даних за допомогою конструктора об'єкта «ОписТипів».

Перейдемо до побудови запиту. Таблицю значень можна передати в запит простим параметром.

Обов'язковий нюанс — створену таблицю необхідно помістити результат у тимчасову таблицю, інакше система видасть повідомлення: «Помилка виклику методу контексту (Виконати): Вміст об'єкта даних може бути вибраний лише у тимчасову таблицю».

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

Ось і все проблема вирішена.

При побудові запитів, у мові 1с є можливість отримання результату виконання запиту за допомогою команди: ПОМІСТИТИ<ИмяВременнойТаблицы>", де<ИмяВременнойТаблицы>- ім'я "тимчасової таблиці", яка є властивістю об'єкта "Запит" і являє собою об'єкт типу Менеджер Тимчасових Таблиць, який описує простір імен тимчасових таблиць та відповідає за їх створення та знищення в базі даних. Даний механізм застосовується для отримання проміжних даних запитів для подальшого їх використання в інших запитах, що дозволяє зручніше налагодити їх, оптимізувати код, зробити запити більш читаними.

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

Додаємо до себе в модуль наступну функцію (серверну, якщо це керована програма):

Функція Дані ВТ (Запит, Ім'я ВТ) Дані Таблиці = Новий Запит; ( Дані Таблиці. Текст = "Вибрати * | З "+ Ім'яВТ+" |" ;

Повернення Дані Таблиці. Виконати

). Вивантажити (); КінецьФункціїВикликаємо її після тексту запиту, наприклад: ( Запит = Новий Запит;

Запит. Текст =

"ВИБРАТИ | ТЗІтогова. Найменування | ПОМІСТИТИ Підсумкова | З | & ТЗ Підсумкова ЯК ТЗ Підсумкова |; | ////////////////////////// | ВИБРАТИ | * | ПОМІСТИТИ Ном | З | Довідник. Номенклатура ЯК Номенклатура |; //////////////////////////////////////////////////// // | ВИБРАТИ | * | З | Підсумкова ЯК Підсумкова |

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

При цьому можливо знищити тимчасову таблицю програмним чином, виконавши в одному з пакетів запиту інструкцію "ЗНИЩИТИ<ИмяВременнойТаблицы>Тоді платформа виконує SQL-команду "TRUNCATE" на знищення тимчасової таблиці.

При використанні менеджера тимчасових таблиць, якщо таблиці не були явно знищені розробником (інструкція запиту "ЗНИЩИТИ", скидання менеджера тимчасових таблиць в "Невизначено" або методом "Закрити()"), то платформа знищує їх самостійно після того, як було знищено контекст, у рамках якого вони були сформовані. Іншими словами, об'єкт буде знищений при завершенні процедури або функції, в якій він був створений.

Вплив на продуктивність

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

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

Висновок

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

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

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

Використання об'єкта, що зветься «Менеджер тимчасових таблиць» дозволяє:

  • Значно спростити текст запиту;
  • Розбити його на простіші блоки;
  • Збільшити його читальність та структурованість.

Декілька слів про те, як це працює

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

  1. створення менеджера;
  2. Його наповнення;
  3. Читання даних із таблиць;
  4. Знищення менеджера та очищення таблиць.

Давайте поговоримо про кожен етап докладніше.

Створення менеджера тимчасових таблиць

Щоб визначити цей об'єкт необхідно виконати код, показаний на Рис.1

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

Рис.2

Заповнення менеджера

На тому ж малюнку 1 вказано рядок, який передає вибірку до тимчасової таблиці. Починається вона із оператора «Помістити». Як місце призначення вказується ім'я таблиці-приймача.

Використовуючи «Конструктор запиту», цей рядок можна створити на закладці «Додатково» Рис.3.

Рис.3

Для цього необхідно:

  1. Встановити перемикач "Тип запиту" в положення "Створення тимчасової таблиці";
  2. Вказати ім'я приймача.

Якщо за допомогою наладчика перевірити послідовність заповнення менеджера, можна виявити, що дані в ньому з'являться лише після виконання методу запиту Виконати().

Визначити заповненість менеджера можна за допомогою оператора Кількість (). Приклад рядка: МВТ. Таблиці. Кількість ().

Читання таблиць менеджера

Наступний етап роботи – читання даних із існуючих таблиць в іншому запиті. Тут існує одна проблема: новий запит, що створюється, не знає про існування заповненої таблиці, тому у вікні «База даних» консолі вона не з'явиться.

Її необхідно прописувати та створювати вручну.

Для цього на закладці "Таблиці та поля" (Рис.4) необхідно виконати деяку послідовність дій:

Рис.4

  1. У меню вікна "Таблиці" цієї закладки необхідно натиснути кнопку "Створити опис тимчасової таблиці";
  2. У вікні необхідно вказати найменування поля та його опис (тип поля), як воно задано в існуючій таблиці;
  3. Потрібні поля або функції з ними потрібно перенести до третього вікна закладки.

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

Видалення таблиць

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

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

  • Вказавши у тексті запиту ключове слово Знищити;
  • Використовуючи метод Закрити(), застосований безпосередньо до менеджера.

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

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

Переключивши перемикач у положення «Знищення» та вказавши ім'я об'єкта, який необхідно видалити, Ви без проблем виконаєте цю дію.

Передача (ТЗ) на запит

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

Для цього текст запиту повинен містити рядок виду "Вибрати * Помістити МВТ з &Тз Як Таб" . Передавши як параметр «ТЗ» для запиту існуючу таблицю значень ми отримаємо об'єкт, придатний подальшої обробки інших запитах.

Єдиною умовою, що перешкоджає передачі ТЗ як параметр, є явно оголошені типи її колонок. Тобто при створенні колонок ТЗ необхідно заповнювати другий параметр рядком виду Новий Опис Типів («»)).