Описание механизмов программных реализаций на платформе 1С:Предприятие 8.1 : «Использование временных таблиц в запросах»

07.06.10

Разработка - Запросы

Этой статьей я начинаю цикл, который будет посвящен описанию механизмов реализации, которые нужно уметь реализовывать при сдаче экзамена 1С:Специалист по платформе 8.1. Начну пожалуй с "Использования временных таблиц в запросах".
Блог автора: http://provlax.livejournal.com/
Дата написания: Октябрь 2007

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

Этой статьей я начинаю цикл, который будет посвящен описанию механизмов реализации, которые нужно уметь реализовывать при сдаче экзамена 1С:Специалист по платформе 8.1

Согласно требованиям фирмы 1С, основной перечень механизмов, которые нужно уметь реализовывать, следующий:

1) организация контроля остатка по регистру остатков;
2) работа с себестоимостью;
3) организация средневзвешенного списания;
4) организация партионного списания;
5) работа с оборотными показателями;
6) запросы по регистрам накопления и регистрам сведений;
7) работа с регистрами сведений;
8) валютные пересчеты через кросс-курс
9) использование характеристик объектов (план видов характеристик)
10) работа с измерениями в регистрах бухгалтерии;
11) работа с небалансовыми измерениями и ресурсами регистра бухгалтерии;
12) средневзвешенное списание себестоимости по данным бух регистра;
13) работа с субконто (включая оборотные);
14) запросы по таблицам бухгалтерских регистров;
15) организация валютного учета;
16) организация количественного учета в бухгалтерии;
17) организация учета авансов;
18) работа с данными графиков по фактическому периоду действия;
19) работа с данными графиков по периоду регистрации;
20) работа с базовыми видами расчета - получение базы;
21) работа с вытесняющими расчетами - получение дополнения;
22) работа с ведущими видами расчетов - использование перерасчетов;
23) построение запросов по регистрам расчетов;
24) работа со сводной таблицей;
25) работа с построителем отчета;
26) работа с системой компоновки данных;
27) работа с механизмом бизнес-процессов;
28) использование временных таблиц в запросах;


Начну, пожалуй, с новых:

Использование временных таблиц в запросах

Как заявляет фирма «1С» в технической документации: «..Использование временных таблиц помогает повысить производительность запросов и сделать текст сложных запросов более легким для восприятия…». Что касается первого утверждения (сравнение скорости выполнения запросов с использованием временных таблиц приводилось мною в статье «Сравнение производительности различных техник проведения документов в 1С:Предприятие 8.1, с выборкой из табличной части и регистра накопления»), то повышение наблюдается только при значительных объемах количества введенных документов одного типа, в остальных случаях быстрее работают все-таки вложенные запросы. Что касается второго утверждения, то не берусь его оспаривать, как говорят - на любителя, мне, например, так не показалось (кроме того, при работе с временными таблицами практически не возможно использовать конструктор запросов, временные таблицы он не понимает и выдает постоянно ошибки, хотя это может относиться только к моей версии платформы - 8.1.8.76).

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

	МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; //создаем новый менеджер временных таблиц
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; //указываем запросу созданный менеджер временных таблиц
Запрос.Текст= "ВЫБРАТЬ
| РасходнаяТовары.Номенклатура,
| РасходнаяТовары.Количество,
| РасходнаяТовары.Сумма
|ПОМЕСТИТЬ ВременнаяТаблица //ключевое слово для помещения нашей выборки во временную таблицу
|ИЗ
| &РасходнаяТовары КАК РасходнаяТовары //используем внешний источник данных"
;


Сделаю небольшое отступление. В качестве исходных данных для временной таблицы, также может быть использован внешний источник данных: табличная часть документа, таблица значений, результат запроса. В этом случае в запросе нельзя использовать объединения и соединения.


Запрос.УстановитьПараметр("РасходнаяТовары",Товары); //внешним источником данных у нас будет табличная часть "Товары документа"


Запрос.Выполнить();

Запрос2 = Новый Запрос; //создаем новый запрос
Запрос2.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; //указываем новому запросу наш менеджер временных таблиц
Запрос2.Текст= "ВЫБРАТЬ
| ВременнаяТаблица.Номенклатура,
| ВременнаяТаблица.Количество,
| ВременнаяТаблица.Сумма
|ИЗ
| ВременнаяТаблица КАК ВременнаяТаблица //используем выборку из временной таблицы"
;
Выборка = Запрос2.Выполнить();

МенеджерВременныхТаблиц.Закрыть(); //удаляем менеджер временных таблиц


Итак, я привел пример использования временных таблиц в запросах. Вроде все должно быть понятно. В примере первым запросом мы создали временную таблицу, а во втором выбирали поля уже из нее. Стоит ли использовать временные таблицы в запросах, покажет только время.

См. также

SALE! 20%

Infostart Toolkit: Инструменты разработчика 1С 8.3 на управляемых формах

Инструментарий разработчика Роли и права Запросы СКД Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

10000 8000 руб.

02.09.2020    122421    673    389    

716

Для чего используют конструкцию запроса "ГДЕ ЛОЖЬ" в СКД на примере конфигурации 1С:ERP

Запросы СКД Платформа 1С v8.3 Запросы Система компоновки данных 1С:ERP Управление предприятием 2 Бесплатно (free)

В типовых конфигурациях разработчики компании 1С иногда используют в отчетах, построенных на СКД, такую конструкцию, как "ГДЕ ЛОЖЬ". Такая конструкция говорит о том, что данные в запросе не будут получены совсем. Для чего же нужен тогда запрос?

13.02.2024    5757    KawaNoNeko    23    

23

Набор-объект для СКД по тексту или запросу

Запросы СКД Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Абонемент ($m)

Есть список полей в виде текста, или запрос - закидываем в набор СКД.

1 стартмани

31.01.2024    2007    2    Yashazz    0    

29

Запрос 1С copilot

Инструментарий разработчика Запросы Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Абонемент ($m)

Пишем на человеческом языке, что нам надо, и получаем текст запроса на языке 1С. Используются большие языковые модели (LLM GPT) от OpenAI или Яндекс на выбор.

5 стартмани

15.01.2024    6301    31    mkalimulin    25    

50

PrintWizard: поддержка представлений ЗУП в конструкторе

Инструментарий разработчика Запросы Платформа 1С v8.3 Бесплатно (free)

Одной из интересных задач, стоящих в процессе разработки, была поддержка механизма представлений в ЗУП. Но не просто возможность исполнения запросов с ними. Основная проблема была в том, чтобы с ними было удобно работать, а именно: создавать, модифицировать и отлаживать. Кратко о том, что в итоге получилось...

14.12.2023    1750    vandalsvq    7    

29

Объектная модель запроса "Схема запроса" 2

Запросы Платформа 1С v8.3 Запросы Конфигурации 1cv8 Бесплатно (free)

Далеко уже не новый тип данных "Схема запроса". Статья о том, как использовать его "попроще". Примеры создания текста запроса с нуля и изменение имеющегося запроса.

06.12.2023    5399    user1923546    26    

43

Начните уже использовать хранилище запросов

HighLoad оптимизация Запросы

Очень немногие из тех, кто занимается поддержкой MS SQL, работают с хранилищем запросов. А ведь хранилище запросов – это очень удобный, мощный и, главное, бесплатный инструмент, позволяющий быстро найти и локализовать проблему производительности и потребления ресурсов запросами. В статье расскажем о том, как использовать хранилище запросов в MS SQL и какие плюсы и минусы у него есть.

11.10.2023    16203    skovpin_sa    14    

98
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. PavelYa 11.12.07 22:28 Сейчас в теме
Только автор забыл сказать о том что Запрос2.Текст= "ВЫБРАТЬ.... конструктором не открыть. Конструктор не понимает временных таблиц и их поля:), что ставит под вопрос целесообразность использования данного механизма. Работа с ним не комфортна. Запрос1 как правло простой набор, одна таблица с условиями а вот вся сложная логика ложится на Запрос2. Если запрос2 достаточно сложный его перебирать в ручную достаточно трудоёмко.... не говоря уже, когда необходимо изменить его логику.
3. logarifm 1118 18.12.07 14:04 Сейчас в теме
ПРо конструктор автор сказал:

"... (кроме того, при работе с временными таблицами практически не возможно использовать конструктор запросов, временные таблицы он не понимает и выдает постоянно ошибки, хотя это может относиться только к моей версии платформы - 8.1.8.76)."
4. Pavel_03 27.02.08 20:27 Сейчас в теме
Интересно .... а без конструктора Вы бы запросы вообще не писали бы? аа?

На самом деле оч полезный механизм............ Который позволяет оптимизировать выполнение сложных запросов.... :)
charushkin; +1 Ответить
5. Andy1981 15.04.08 19:57 Сейчас в теме
Ох...Налетели...Конструктор им подвай... Автор ясно указал, что начинает серию публикаций на тему экзамена на 1С: специалист. А в некоторых заданиях явно просят при составлении запросов использовать временные таблицы. Так что фанаты конструкторов будут не у дел. Автору респект..В отличии от сайта С.Митичкина где предлагается использовать вот такую конструкцию:
Код
 Запрос=Новый Запрос("ВЫБРАТЬ * ИЗ Справочник.Номенклатура ПОМЕСТИТЬ В ВТТовары");
Запрос.Выполнить(); //Создалась таблица ВТТовары
ЗапросТМП=Новый Запрос("ВЫБРАТЬ * ИЗ ВТТовары");
ЗапросТМП.МенеджерВременныхТаблиц=Запрос.МенеджерВременныхТаблиц; //Копируем ссылку на временные таблицы
ТЗ=ЗапросТМП.Выполнить().Выгрузить(); //Получаем временную таблицу в таблице значений 
Показать полностью

которая, к слову сказать не рабочая, автор предлагает корректный пример кода...это раз. Во-вторых, я не знал что в качестве источника данных можно указывать параметр, за что автору огромное спасибо!
6. Andy1981 16.04.08 23:36 Сейчас в теме
Кстати, что правда - то правда, невозможность использования конструктора запроса имеет место в старых версиях платформы. Начиная с версии 8.1.10 в конструкторе появляется кнопочка создания "скелета" временной таблицы...
7. ILNIK 30 23.05.08 11:08 Сейчас в теме
Дополню. Если используется таблица значений, то колонки должны быть типизированы в обязательном порядке!
Например:

[/code]
Если А<>0 Тогда
ТЗ=Новый ТаблицаЗначений();
//Колонки должны быть типизированы
ТЗ.Колонки.Добавить("А", Новый ОписаниеТипов("Строка"));
ТЗ.Колонки.Добавить("Б", Новый ОписаниеТипов("Строка"));
[/code]
8. ILNIK 30 23.05.08 11:09 Сейчас в теме
теги неправильно поставил

Код
Если А<>0 Тогда
ТЗ=Новый ТаблицаЗначений();
//Колонки должны быть типизированы
ТЗ.Колонки.Добавить("А", Новый ОписаниеТипов("Строка"));
ТЗ.Колонки.Добавить("Б", Новый ОписаниеТипов("Строка"));
Показать полностью

9. Татьянка 02.12.08 10:56 Сейчас в теме
Отличная статья, отличный пример. В конструкторе все открывается, все видно, как обычная таблица. Огромное спасибо, мне эта статья очень помогла!!!
10. andyid 09.03.10 21:55 Сейчас в теме
спасибо большое автору!!! Вроде если не в даваться в детали, если говорить вообще про запросы, все понятно, но как только капнешь, сразу туман!!!! Хорошая ячейка знаний и классный пример про временные таблицы))))
11. Трактор 1246 11.06.10 16:11 Сейчас в теме
при работе с временными таблицами практически не возможно использовать конструктор запросов, временные таблицы он не понимает и выдает постоянно ошибки

Офигеть!!! :o
Вот запрос в шестью временными таблицами. Конструктор их прекрасно понимает. Только писАть правильно надо.
ВЫБРАТЬ
 13 КАК Количество
ПОМЕСТИТЬ ВТКоличествоЯблок
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
 "Склад1" КАК Склад
ПОМЕСТИТЬ ВТСклады

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
 "Склад2"

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
 "Склад3"

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
 "Склад4"
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
 КОЛИЧЕСТВО(*) КАК Количество
ПОМЕСТИТЬ ВТКоличествоСкладов
ИЗ
 ВТСклады КАК ВТСклады
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
 ВЫРАЗИТЬ(ВТКоличествоЯблок.Количество / ВТКоличествоСкладов.Количество КАК ЧИСЛО(15, 0)) КАК Количество
ПОМЕСТИТЬ ВТЯблокКаждому
ИЗ
 ВТКоличествоЯблок КАК ВТКоличествоЯблок,
 ВТКоличествоСкладов КАК ВТКоличествоСкладов
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
 ВТЯблокКаждому.Количество * ВТКоличествоСкладов.Количество - ВТКоличествоЯблок.Количество КАК Количество
ПОМЕСТИТЬ ВТПерерасход
ИЗ
 ВТЯблокКаждому КАК ВТЯблокКаждому,
 ВТКоличествоСкладов КАК ВТКоличествоСкладов,
 ВТКоличествоЯблок КАК ВТКоличествоЯблок
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
 ВТСклады1.Склад,
 КОЛИЧЕСТВО(*) КАК НомерСтроки
ПОМЕСТИТЬ ВТПронумерованныеСклады
ИЗ
 ВТСклады КАК ВТСклады1
  ПОЛНОЕ СОЕДИНЕНИЕ ВТСклады КАК ВТСклады2
  ПО ВТСклады1.Склад <= ВТСклады2.Склад
СГРУППИРОВАТЬ ПО
 ВТСклады1.Склад
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
 ВТПронумерованныеСклады.Склад,
 ВТЯблокКаждому.Количество - ВЫБОР
  КОГДА ВТПронумерованныеСклады.НомерСтроки <= ВТПерерасход.Количество
  ТОГДА 1
  ИНАЧЕ 0
 КОНЕЦ КАК Количество
ИЗ
 ВТПронумерованныеСклады КАК ВТПронумерованныеСклады,
 ВТЯблокКаждому КАК ВТЯблокКаждому,
 ВТПерерасход КАК ВТПерерасход
Показать

Запрос не мой. Взял у кого-то с Инфостарта. Он, кстати, неправильно раздаёт яблоки.
Оставьте свое сообщение