1з8 менеджер тимчасових таблиць.

1з8 менеджер тимчасових таблиць.

Не пам'ятаю вже з якого релізу в запитах можна використовувати тимчасові таблиці. Для цього використовується об'єкт "Менеджер тимчасових таблиць". Фактично менеджер тимчасових таблиць визначає простір імен тимчасових таблиць та відповідає за їх створення та знищення у базі даних.

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

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

Процедура ОбробкаПроведення(Відмова, РежимПроведення)

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

Запит = Новий Запит;

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

| Номенклатура, СУМА(Кількість) ЯК Кількість

|ПОМІСТИТИ ДокТЧ

|ЗГРУПУВАТИ ПО Номенклатурі ";

РезультатЗапиту = Запит.Виконати(); //Прим. 1

Запит = Новий Запит;

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

Запит.Текст = "ВИБРАТИ РІЗНІ

| Номенклатура

|ПОМІСТИТИ СписокТоварів |

РезультатЗапиту = Запит.Виконати(); //Прим. 2

Запит = Новий Запит;

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

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

| Док.Номенклатура,

| Док.Кількість ЯК Док_Кількість,

| ЄNULL(Рег.КількістьЗалишок,0) ЯК Рег_Кількість

| ДокТЧ ЯК Док

| ЛІВОЕ З'ЄДНАННЯ

| РегістрНакопичення. Залишки Товарів. Залишки (,

| Номенклатура В(ВИБРАТИ РІЗНІ

| Номенклатура

| СписокТоварів ЯК СписокТоваров)) ЯК Реєстр

| Док.Номенклатура = Реєстр.Номенклатура";

РезультатЗапиту = Запит.Виконати();

Вибірка = Результат Запиту. Вибрати ();

Поки Вибірка.Наступний() Цикл

//Перевірка негативних залишків

//Проведення з регістру

КінецьЦикл;

КінецьПроцедури

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

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

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

Як перевірити у відладчику?

// Функція перегляду Тимчасових Таблиць у відладчику
Функція ЛукВТ(Запит, Ім'я Внутрішньої Таблиці) Експорт
Перем ЗапитТМП, Р;
//Отримуємо таблицю з менеджера тимчасових таблиць запиту
ЗапитТМП=Новий Запит("ВИБРАТИ * З "+Ім'яВнутрішньоїТаблиці);
ЗапросТМП.МенеджерТимчасовихТаблиць=Запрос.МенеджерТимчасовихТаблиць;
Р=ЗапросТМП.Выполнить().Выгрузить();
Повернення Р;
КінецьФункції

Як видалити часові таблиці?

// Як видалити Тимчасову Таблицю
Запит = Новий Запит;
Запрос.МенеджерТимчасовихТаблиць = МенеджерВТ;
// (Менеджер ВТ створено, у ньому вже є тимчасова таблиця Ім'я Тимчасової Таблиці)
ТекстЗапpoca = "
| ЗНИЩИТИ Ім'я Тимчасової Таблиці
|";
Запит. Текст = Текст Запиту;
Запрос.Выполнить();

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

43
NULL – відсутні значення. Чи не плутати з нульовим значенням! NULL - це не число, не дорівнює пробілу, порожньому засланні, Невизначено. NULL – типообразующее значення, тобто. Існує тип NULL і єдине значення цього типу. NULL... 26
Для формування та виконання запитів до таблиць бази даних у платформі 1С використовується спеціальний об'єкт мови програмування. Створюється об'єкт викликом конструкції Новий Запит. Запит зручно... 18
У статті наведено корисні прийоми при роботі з запитами 1С v.8.2, а також відомості, які не так добре відомі мовою запитів. Я не прагну дати повний опис мови запитів, а хочу зупинитися лише на... 13
ПОДІБНО - Оператор перевірки рядка на зразок шаблону. Аналог LIKE у SQL. Оператор подібно дозволяє порівняти значення виразу, вказаного зліва від нього, з рядком шаблону, вказаним праворуч. Значення виразу...

Розглянемо кілька ситуацій.

Як помістити результат запиту до тимчасової таблиці

Створимо за допомогою конструктора ось такий найпростіший запит:

Відповідно текст запиту буде виглядати так:

Але ми хочемо помістити результат запиту до тимчасової таблиці, яку назвемо ВТ_Товаритобто привести наш запит ось до такого виду

Для цього нам потрібно перейти на закладку Додаткововстановити тип запиту в положення Створення тимчасової таблиціта заповнити поле з ім'ям таблиці

Як прочитати тимчасову таблицю з іншого запиту

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

Менеджер ВТ = Новий Менеджер Тимчасових Таблиць; Запит = Новий Запит; Запит. Текст = "ВИБРАТИ | Товари.Посилання |ПОМІСТИТИ ВТ_Товари || Довідник.Товари ЯК Товари"; Запит. Менеджер Тимчасових Таблиць = Менеджер ВТ; Запит. Виконати (); . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Запит ВТ = Новий Запит; Запит ВТ. Текст = "ВИБРАТИ | ВТ_Товари.Посилання| ВТ_Товари ЯК ВТ_Товари"; Запит ВТ. Менеджер Тимчасових Таблиць = Менеджер ВТ; Запит ВТ. Виконати (); . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Щоб вибрати дані з тимчасової таблиці, потрібно на закладці Таблиці та полянатиснути на кнопку Створити опис тимчасової таблиціі у формі заповнити найменування таблиці та її поля:

Як створити тимчасову таблицю із параметра запиту

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

В цьому випадку нам потрібно спочатку створити опис тимчасової таблиці. А потім прописати її ім'я на закладці Додатково.

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

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

Робота з тимчасовими таблицями забезпечується двома складовими:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Наприклад:

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

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

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

Наприклад:

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

ДЛЯ ЗМІНИ

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

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

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

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

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

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

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

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

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

Всім привіт! А точніше тим, хто все ж таки іноді заглядає в цей блог 🙂

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

Нещодавно дізнався, що деякі не знають, що в платформу 1С 8.3 є вбудований інструмент з налагодження тимчасових таблиць. З'явився він нещодавно, в одному з релізів редакції 1С 8.3.8 — «ОтриматиДані»() стосовно до Менеджеру Тимчасових Таблиць.

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

Все досить просто.

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

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

2. Отримуємо тимчасову таблицю для налагодження

Потім ми звертаємося до потрібної нам для налагодження тимчасової таблиці, додаючи Отримати(<Индекс таблицы>)

3. Отримуємо безпосередньо дані

Використання методу ОтриматиДані() дозволяє отримати колекцію РезультатЗапиту безпосередньо для вибраної тимчасової таблиці.

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

Запит.МенеджерТимчасовихТаблиць.Таблиці.Отримати(0).ОтриматиДані().Вивантажити()

Відлагодження таким чином займе менше часу, ніж використовуючи різні «милиці» 😀

На цьому все, добрих Вам розробок і з минулими святами!

PS. А для тих, хто займається підтримкою розрахунку зарплати на підприємстві (не тільки програмісти), нагадую, що з цієї тематики виділено окремий ресурс Pro-Zup.info.

Якщо у Вас виникають на цю тему питання, Ви зацікавлені у розширенні можливостей типової програми або є побажання щодо усунення проблем — ласкаво просимо на ресурс https://pro-zup.info/

 

 

Це цікаво: