Пример использования временных таблиц в запросах (8.2)

Публикация № 153851

Разработка - Практика программирования

88
Имея некоторый опыт разработки, не раз приходилось видеть, насколько нерационально и громоздко порой строятся запросы начинающими разработчиками к информационным базам 1С. Существует достаточно простой и удобный механизм временных таблиц, при использовании которого можно разбить большой и плохо читаемый запрос на несколько небольших. Можно так же по некоторому алгоритму сформировать таблицу значений, поместить ее во временную таблицу и выполнить по ней запрос.
В данной публикации на примере процедуры проведения документа Реализация, не вникая в детали алгоритма проведения, описываются некоторые приемы использования временных таблиц в запросах к информационной базе на платформе 8.2. Автор публикации не претендует на полноту освещения вопроса или методическую безупречность.

Рассмотрим пример работы с временными таблицами в конкретном запросе.

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

2. Таблица значений заполняется по некоторому произвольному алгоритму. В данном примере она дублирует движения документа.

3. Копируются отдельные таблицы значений для использования в условиях запроса.

4. Создается объект менеджер временных таблиц. Менеджер временных таблиц предназначен для хранения информации о временных таблицах, которые участвуют в запросе. При уничтожении объекта временные таблицы, находящиеся в нем, удаляются. Для временных таблиц, участвующих в одном запросе, должен использоваться единый менеджер временных таблиц.

5. Свойствам МенеджерВременныхТаблиц всех запросов, где участвуют временные таблицы, присваивается значение созданного ранее менеджера временных таблиц.

6. Формируются временные таблицы. При необходимости можно сформировать требуемое количество временных таблиц путем выполнения запросов к заполненной ранее таблице значений. Важной особенностью является то, что таблица значений непосредственно не может участвовать в запросах, где используются соединения с другими таблицами или агрегатные функции (Сумма, Среднее, Максимум, Минимум и др.). Для этого предварительно следует простым запросом, где в качестве параметра используется ссылка на таблицу значений, поместить ее во временную таблицу.

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

Процедура ПроведениеПоУУ(Отказ, Режим)

	Перем ЗапрОтрОст, РезЗапрОтрОст, ВыбЗапрОтрОст, Гран;
	Перем КонтрольОстатков, ТекстСообщ, НовСтрокаТзНомен, ТзНом, СуммаУсл;
	Перем МенВрТаб, ЗапрНом, ЗапрКач, ИмяНабора, ИмяПоля, ТзКач, ТзНмСтр;
	
	// 1. создается таблица значений с указанием типов колонок
	ТзНомен = Новый ТаблицаЗначений;
	ТзНомен.Колонки.Добавить("Набор", Новый ОписаниеТипов("СправочникСсылка.Номенклатура"));
	ТзНомен.Колонки.Добавить("Номенклатура", Новый ОписаниеТипов("СправочникСсылка.Номенклатура"));
	ТзНомен.Колонки.Добавить("Качество", Новый ОписаниеТипов("СправочникСсылка.КачествоТовара"));
	ТзНомен.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(12,3)));
	ТзНомен.Колонки.Добавить("НомерСтроки", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(5,0)));
	
	// 2. таблица значений заполняется по некоторому алгоритму
	КонтрольОстатков = Истина;
	Для Каждого ТекСтрокаТовары Из Товары Цикл
		
		// регистр ОстаткиТоваров Расход
		Если ТекСтрокаТовары.Номенклатура.ВидНоменклатуры=Перечисления.ВидНоменклатуры.Товар Тогда
			Движение = Движения.ОстаткиТоваров.ДобавитьРасход();
			Движение.Период = Дата;
			Движение.Подразделение = Подразделение;
			Движение.Номенклатура = ТекСтрокаТовары.Номенклатура;
			Движение.Качество = ТекСтрокаТовары.Качество;
			Движение.Количество = ТекСтрокаТовары.Количество * ТекСтрокаТовары.К;
			
			НовСтрокаТзНомен = ТзНомен.Добавить();
			НовСтрокаТзНомен.Набор = Справочники.Номенклатура.ПустаяСсылка();
			НовСтрокаТзНомен.Номенклатура = ТекСтрокаТовары.Номенклатура;
			НовСтрокаТзНомен.Качество = ТекСтрокаТовары.Качество;
			НовСтрокаТзНомен.Количество = ТекСтрокаТовары.Количество * ТекСтрокаТовары.К;
			НовСтрокаТзНомен.НомерСтроки = ТекСтрокаТовары.НомерСтроки;
			
		ИначеЕсли ТекСтрокаТовары.Номенклатура.ВидНоменклатуры=Перечисления.ВидНоменклатуры.Набор Тогда
			
			ТзНабор = РаботаСНаборамиСервер.ПолучитьСоставНабора(ТекСтрокаТовары.Номенклатура);
			Для Каждого ТекСтрокаНабор Из ТзНабор Цикл
				Движение = Движения.ОстаткиТоваров.ДобавитьРасход();
				Движение.Период = Дата;
				Движение.Подразделение = Подразделение;
				Движение.Номенклатура = ТекСтрокаНабор.Номенклатура;
				Движение.Качество = ТекСтрокаТовары.Качество;
				Движение.Количество = ТекСтрокаНабор.Количество * ТекСтрокаТовары.Количество * ТекСтрокаТовары.К;
				
				НовСтрокаТзНомен = ТзНомен.Добавить();
				НовСтрокаТзНомен.Набор = ТекСтрокаТовары.Номенклатура;
				НовСтрокаТзНомен.Номенклатура = ТекСтрокаНабор.Номенклатура;
				НовСтрокаТзНомен.Качество = ТекСтрокаТовары.Качество;
				НовСтрокаТзНомен.Количество = ТекСтрокаНабор.Количество * ТекСтрокаТовары.Количество * ТекСтрокаТовары.К;
				НовСтрокаТзНомен.НомерСтроки = ТекСтрокаТовары.НомерСтроки;
				
			КонецЦикла;
			
		КонецЕсли;
		
	КонецЦикла;
	
	Движения.ОстаткиТоваров.Записать();
	
	ТзНом = Новый ТаблицаЗначений;
	ТзКач = Новый ТаблицаЗначений;
	ТзНмСтр = Новый ТаблицаЗначений;
	
	// 3. копируются отдельные таблицы значений для использования в условиях запроса
	ТзНом = ТзНомен.Скопировать();
	ТзНмСтр = ТзНомен.Скопировать();
	ТзКач = ТзНомен.Скопировать();
	
	ТзНом.Свернуть("Номенклатура");
	ТзКач.Свернуть("Качество");
	
	// 4. создается менеджер временных таблиц
	МенВрТаб = Новый МенеджерВременныхТаблиц;
	
	// временная таблица номенклатуры
	ЗапрНом = Новый Запрос;
	
	// 5. свойству МенеджерВременныхТаблиц запроса присваивается значение 
	// созданного ранее менеджера временных таблиц
	ЗапрНом.МенеджерВременныхТаблиц = МенВрТаб;
	
	// 6. формируются временные таблицы
	ЗапрНом.Текст = "ВЫБРАТЬ
		 | Номен.Номенклатура
		 |ПОМЕСТИТЬ ВыбНомен // результат запроса помещается во временную таблицу ВыбНомен
		 |ИЗ
		 | &ТзНомен КАК Номен";
	
	ЗапрНом.УстановитьПараметр("ТзНомен", ТзНом);
	ЗапрНом.Выполнить();
	
	// временная таблица качества
	ЗапрКач = Новый Запрос;
	ЗапрКач.МенеджерВременныхТаблиц = МенВрТаб;
	ЗапрКач.Текст = "ВЫБРАТЬ
		 | Кач.Качество
		 |ПОМЕСТИТЬ ВыбКач // результат запроса помещается во временную таблицу ВыбКач
		 |ИЗ
		 | &ТзНомен КАК Кач";
	
	ЗапрКач.УстановитьПараметр("ТзНомен", ТзКач);
	ЗапрКач.Выполнить();
	
	// временная таблица номеров строк
	ЗапрНмСтр = Новый Запрос;
	ЗапрНмСтр.МенеджерВременныхТаблиц = МенВрТаб;
	ЗапрНмСтр.Текст = "ВЫБРАТЬ
		 | НмСтр.Номенклатура,
		 | НмСтр.Качество,
		 | НмСтр.НомерСтроки,
		 | НмСтр.Набор
		 |ПОМЕСТИТЬ ВыбНмСтр // результат запроса помещается во временную таблицу ВыбНмСтр
		 |ИЗ
		 | &ТзНомен КАК НмСтр";
	
	ЗапрНмСтр.УстановитьПараметр("ТзНомен", ТзНмСтр);
	ЗапрНмСтр.Выполнить();
	
	// 7. временные таблицы используются в запросе
	ЗапрОтрОст = Новый Запрос;
	ЗапрОтрОст.МенеджерВременныхТаблиц = МенВрТаб;
	ЗапрОтрОст.Текст = "ВЫБРАТЬ
		 | ОстТов.Номенклатура,
		 | ОстТов.Качество,
		 | ОстТов.КоличествоОстаток КАК Нехватка,
		 | ДокРеал.НомерСтроки,
		 | ДокРеал.Набор
		 |ИЗ
		 | РегистрНакопления.ОстаткиТоваров.Остатки(
		 | &Момент,
		 | Номенклатура В
		 | (ВЫБРАТЬ
		 | ВыбНомен.Номенклатура
		 | ИЗ
		 | ВыбНомен КАК ВыбНомен) // временная таблица в условии
		 | И Качество В // виртуальной таблицы регистра
		 | (ВЫБРАТЬ
		 | ВыбКач.Качество
		 | ИЗ
		 | ВыбКач КАК ВыбКач) // временная таблица в условии
		 | И Подразделение = &Подразд) КАК ОстТов // виртуальной таблицы регистра
		 | ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
		 | ДокРеалТовары.Набор КАК Набор,
		 | ДокРеалТовары.Номенклатура КАК Номенклатура,
		 | ДокРеалТовары.Качество КАК Качество,
		 | МАКСИМУМ(ДокРеалТовары.НомерСтроки) КАК НомерСтроки
		 | ИЗ
		 | ВыбНмСтр КАК ДокРеалТовары // временная таблица связана внутренним соединением
		 | // с виртуальной таблицей регистра
		 | СГРУППИРОВАТЬ ПО
		 | ДокРеалТовары.Набор,
		 | ДокРеалТовары.Номенклатура,
		 | ДокРеалТовары.Качество) КАК ДокРеал
		 | ПО ОстТов.Номенклатура = ДокРеал.Номенклатура
		 | И ОстТов.Качество = ДокРеал.Качество
		 |ГДЕ
		 | ОстТов.КоличествоОстаток < 0";
	
	Гран = Новый Граница(МоментВремени(), ВидГраницы.Включая);
	ЗапрОтрОст.УстановитьПараметр("Момент", Гран);
	ЗапрОтрОст.УстановитьПараметр("Подразд", Подразделение);
	
	РезЗапрОтрОст = ЗапрОтрОст.Выполнить();
	Если Не РезЗапрОтрОст.Пустой() Тогда
		
		Если КонтрольОстатков И Режим=РежимПроведенияДокумента.Оперативный Тогда
			Отказ = Истина;
		КонецЕсли;
		
		ВыбЗапрОтрОст = РезЗапрОтрОст.Выбрать();
		Пока ВыбЗапрОтрОст.Следующий() Цикл
			
			Если Не ВыбЗапрОтрОст.Набор.Пустая() Тогда
				ИмяНабора = " в составе набора - "+СокрЛП(ВыбЗапрОтрОст.Набор.Наименование);
				ИмяПоля = "].Номенклатура"
			Иначе	
				ИмяНабора = "";
				ИмяПоля = "].Количество"
			КонецЕсли;
			
			Сообщение = Новый СообщениеПользователю;
			ТекстСообщ = "Упр.учет: нехватка товара - "+СокрЛП(ВыбЗапрОтрОст.Номенклатура.Наименование)+ИмяНабора
			+", качество - "+ВыбЗапрОтрОст.Качество.Наименование
			+" в количестве "+(-ВыбЗапрОтрОст.Нехватка);
			Сообщение.Текст = ТекстСообщ;
			Сообщение.Поле = "Товары["+(ВыбЗапрОтрОст.НомерСтроки-1)+ИмяПоля;
			Сообщение.УстановитьДанные(ЭтотОбъект);
			Сообщение.Сообщить();
			
		КонецЦикла
		
	КонецЕсли;
		
КонецПроцедуры // ПроведениеПоУУ
 
 
88

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо
1. Поручик 4332 28.09.12 00:02 Сейчас в теме
(0) Старо. Пример в статье можно реализовать пакетным запросом с большей эффективностью и наглядностью.
Gotcha; Stety; +2 Ответить
3. mr zafod 22 28.09.12 05:53 Сейчас в теме
Нельзя такие статьи пропускать, ну просто снос крыши. У Вас подход к решению задачи не верный изначально. Верно сказали в (1) - все можно решить пакетным запросом, тем более в вашем случае - Вы в цикле получаете состав комплекта (набора).
Могу вам привести для примера хороший и очень быстрый контроль остатков на ВТ и пакетном запросе, если хотите
44. Gotcha 5 05.08.15 13:16 Сейчас в теме
(1)
После использования пакетных запросов везде, где попало, оптимизатор запросов, который без изменений, фактически, живет еще с Sybase, обламывается на 16 подзапросе и давай, до свидания вся Ваша хваленая производительность, как и читабельность. Привык народ фигачить монструозные запросы. Посидели-бы Вы на старом добром аксессе, во времена windows 95. Ставлю плюс, подход понадобился при соединении по оле к хх базам и сборе данных из них в одну виртуальную таблицу.
45. Поручик 4332 05.08.15 14:35 Сейчас в теме
(44) Ну молодец, вовремя прокудахтал. Ещё трёх лет не прошло после моего поста.
46. Gotcha 5 05.08.15 15:09 Сейчас в теме
(45)
Кудахтают петухи, сохраняйте приличия
Я видел девочек, которых научили писать SQL запросы, вот они любили рисовать полотенца на T-SQL, где пока дочитаешь до конца, уже напрочь забывал, что было вначале. Не учите всех делать некрасиво и нечитабельно, вопрос производительности - спорный, но я думаю, что архитектурные конструкции автора статьи вполне бодро работают.
2. khaoos 239 28.09.12 04:45 Сейчас в теме
Стоит сказать, что огульное использование временных таблиц тоже может быть нерациональным. Все таки они занимают место в оперативной памяти и если перестараться, то СУБД может скинуть промежуточные результаты запроса на жесткий диск и производительность резко просядет.
9. kilokilo 18 28.09.12 10:10 Сейчас в теме
(2) khaoos,
Временные таблицы не хранятся в оперативной памяти. Они создаются и сохраняться в файле tempdb.

(0), минус ставить не буду. Но статье не место здесь, так как она учит как делать не стоит..
Gotcha; khaoos; +2 Ответить
12. khaoos 239 28.09.12 11:19 Сейчас в теме
(9) kilokilo, спасибо за просвещение. Теперь буду еще осторожнее использовать временные таблицы :). Вроде в MSSQL есть еще переменные table, которые в оперативке хранятся. 1С всегда использует именно те временные таблицы, которые в tempdb создаются? Как в остальных используемых СУБД дело обстоит, не знаете?
19. AlexO 128 28.09.12 13:53 Сейчас в теме
(12) khaoos,
Теперь буду еще осторожнее использовать временные таблицы

а название "Временные таблицы" ни о чем вам даже не намекнуло? :)
(15) mr zafod,
в SQL временные таблицы (ВТ) хранятся в отдельной, нетранзакционной базе данных (tempDb)

сами таблицы базы данных либо висят в памяти сервера, либо лежат на диске

откуда столь точные и противоречивые данные?
22. khaoos 239 28.09.12 14:30 Сейчас в теме
(19) AlexO, вы намекаете на слово "временная" или на слово "таблица"? :) Ни то ни то мне не намекает, что этот объект должен обязательно физически записываться на диск. Я думал оптимизатор СУБД решает, где хранить эту таблицу.
15. mr zafod 22 28.09.12 12:52 Сейчас в теме
(9) kilokilo, (12) khaoos, в SQL временные таблицы (ВТ) хранятся в отдельной, нетранзакционной базе данных (tempDb). В зависимости от версии sql сами таблицы базы данных либо висят в памяти сервера, либо лежат на диске (в случае использования МВТ на сервере) или на клиенте (в случае МВТ на клиенте). В файловом варианте все валяется внутри файлов БД
18. khaoos 239 28.09.12 12:58 Сейчас в теме
(15) mr zafod, если знаете подробности насчет версий, в каких что используется, прошу поделиться
21. mr zafod 22 28.09.12 14:21 Сейчас в теме
(18) khaoos, (19) AlexO, По поводу места хранения данных ВТ - я об этом узнал от самих 1С, методично задавая вопросы в поддержку. У меня есть коммерческий продукт "Загрузка данных из StoreHouse", работает он на ура с кешированием, отборами и кучей всяких интересных вещей - для этого активно используются ВТ (и МВТ), поэтому в свое время пришлось окунуться в эту область.
SQL Server 2008 R2 держит в памяти - в этом можно убедиться (и даже посмотреть содержимое таблиц) с помощью штатного монитора ресурсов (вроде так называется). В PG SQL 9.х - тоже в памяти, там даже на БД с ВТ висят какие-то интересные триггеры. За остальные не знаю, в указанных видел сам. Я так думаю, что эти области хранения ограниченны в объеме и работают как стек fifo.
23. khaoos 239 28.09.12 14:34 Сейчас в теме
(21) mr zafod, спасибо. Это хорошо согласовывается с моими скромными теоретическими познаниями в области БД :). Уж слишком накладно было бы при каждом случае производить физическую запись на диск. При желании конечно можно сделать небольшие эксперименты. Правда дома у меня только Postgre стоит.
38. anchovy 14 11.10.12 16:19 Сейчас в теме
(9) kilokilo,
Ага, временные таблицы МВТ хранятся во временном файле, что повышает нагрузку на диск.
Уж лучше бы в они хранились оперативной памяти )))
4. Поручик 4332 28.09.12 08:36 Сейчас в теме
(0) (3) Тем более, что в примере не используются какие-то временные расчеты, которые можно передать в другие процедуры или запросы. Всё решается в одном блоке. Автор запоздал с менеджерами временных таблиц года на четыре, когда ещё не было пакетных запросов.

(3) Статья Чистова, ставшая классикой. http://chistov.spb.ru/publ/5-1-0-13 Именно с неё я и начал использование пакетов.
Gandalf Белый; CagoBHuK; mr zafod; +3 Ответить
5. mr zafod 22 28.09.12 09:18 Сейчас в теме
(4) согласен, ВТ нужны только для передачи данных запроса между процедурами или временно сохранить результат, когда это действительно необходимо и пакетный запрос использовать невозможно, например сравнить данные движений по регистрам до и после проведения - ВТ можно передать через ДополнительныеСвойства документа.
11. AlexO 128 28.09.12 11:10 Сейчас в теме
(4)
Автор запоздал с менеджерами временных таблиц года на четыре

ну уж не на 4 года, а на все 8... когда там 8.1 появилась?
И потом, применение МВТ или пакетого запроса... суть разве в этом?
Применение таких запросов с ВТ и что можно получать - вот где сама суть.
Да только никто не может так глубоко раскопать... проще из типовой взять пример, желательно на 5 разворотов, и расписать, что вот, в примере такие вот инструкции применены - а зачем, почему именно они, какие альтернативы и когда - это уже не важно....
13. Поручик 4332 28.09.12 11:24 Сейчас в теме
(11) Платформу 8.1 в промышленную эксплуатацию ввели во второй половине 2007 года, менеджеры временных таблиц появились году в 2008, пакетные запросы примерно в начале 2009, то есть не так уж давно.
20. AlexO 128 28.09.12 14:01 Сейчас в теме
(13)
Платформу 8.1 в промышленную эксплуатацию ввели во второй половине 2007 года, менеджеры временных таблиц появились году в 2008, пакетные запросы примерно в начале 2009, то есть не так уж давно.

ну значит, я слишком много работал с 8.0, и сразу перешел к использованию МВТ и пакетных запросов.
Вот бету 8.2 осенью 2009 году помню... Почему так хорошо - два года потом плевался от неё, и до сих пор готово ведро помоев на это поделие...
6. DoctorRoza 28.09.12 09:40 Сейчас в теме
+ .. за старание .. работа то какая-товсе равно проделана
8. mr zafod 22 28.09.12 09:49 Сейчас в теме
(6) DoctorRoza, ну видимо вам никогда не приходилось такие старания переписывать за кем-то
7. Поручик 4332 28.09.12 09:45 Сейчас в теме
(0) (6) Не, автору следовало бы направить затраченную энергию на изучение матчасти.
Обоснование минуса в постах (2) (3) (4) (5).
10. wunderland 200 28.09.12 10:45 Сейчас в теме
14. petrov_al 10 28.09.12 12:51 Сейчас в теме
А в чем фишка то? Этими примерами "кишат" все типовые конфигурации.
16. mr zafod 22 28.09.12 12:53 Сейчас в теме
Даешь пример использования ВТ на примере расчета переходящего больничного из типовой ЗУП!
17. khaoos 239 28.09.12 12:56 Сейчас в теме
(16) mr zafod, ЗУП - это рай для любителей пододбных запросов :)
24. mr zafod 22 28.09.12 14:36 Сейчас в теме
Совсем забыл - в случае файлового варианта ВТ храниться в памяти клиента в кеше (копии 1Cv8.1CD) и не вытесняются. В этом виде использование ВТ наиболее опасно!
25. mr zafod 22 28.09.12 14:42 Сейчас в теме
Я думаю что главный смысл ВТ - это чтение данных из предварительно подготовленной ограниченной таблицы ВТ вместо чтения из возможно очень огромной таблицы скажем регистра. А все остальные фокусы с ВТ - просто для удобста разработки.
26. khaoos 239 28.09.12 14:49 Сейчас в теме
(25) mr zafod, несомненный плюс ВТ - в удобочитаемости запроса и повторного использования тяжело извлекаемых данных. Ну или когда считаешь себя умнее СУБД, и отказываешься от Loop Join'ов по индексному доступу в пользу некоторого подобия Hash Join'ов :)
27. mr zafod 22 28.09.12 14:53 Сейчас в теме
(26) khaoos, в PG SQL кстати сейчас глянул для интереса на tempDb висит что-то типа autotruncate on checkpoint - видимо когда ВТ умирает постгре не убивает ее структуру как в обычных таблицах БД. А может 1С чего-то не допилили.
28. khaoos 239 28.09.12 15:01 Сейчас в теме
(27) mr zafod, когда kilokilo мне ответил, то я немного покопал, вроде на форумах писали, что в MSSQL тоже делается truncate. А таблицы умирают, когда умирают все сеансы 1С. Ну это мож в более ранних версиях платформы, я не в курсе.
29. mr zafod 22 28.09.12 15:08 Сейчас в теме
(28) khaoos, ну триггеры и команды для 1Совских БД создаются платформой - в MSSQL такого платформа не делает, может там какой-то встроенных механизм есть?
30. khaoos 239 28.09.12 15:14 Сейчас в теме
(29) mr zafod, могу предположить (но обманывать не буду, надо б в профайлер или тех.журнал смотреть), что при трансляции запросов УНИЧТОЖИТЬ переведется в truncate (не уверен что так может оператор называться) и при закрытии МВТ аналогично
31. alexandr1972_1 28.09.12 19:23 Сейчас в теме
Устаревшая статья. За последние два года менеджер временных таблиц практически не использую.
32. ok0504 03.10.12 09:14 Сейчас в теме
К вышесказанному добавлю еще одну ложку дёгтя. Ни в одной из ВТ не использована индексация.
35. ksai 11.10.12 10:12 Сейчас в теме
(32) ok0504,
Индексация имеет смысл, если временная таблица используется как источник данных несколько раз. В приведенном примере она не нужна.

(33) marku,
Пакетный запрос - это тоже пример с использованием ВТ. В данном случае приведен пример использования не ВТ, а МВТ, причем далеко не в самом выгодном контексте. После появления пакетных запросов, полезность МВТ свелась единственно к переносу временных таблиц между запросами, расположенными в разных частях кода.
33. marku 61 11.10.12 09:10 Сейчас в теме
Тут приведен пример работы с ВТ. А использовать его или нет каждый сам решает.
34. v.l. 11.10.12 10:01 Сейчас в теме
(0) Только бы код еще раскрасить...
36. Vlad_2008 12 11.10.12 14:49 Сейчас в теме
Попал сюда с голосования от "Spec8.RU". Сам смотрел некоторые курсы, очень полезные. Удивлен прочитанным.
Комментарий только один - ни когда так не делайте!
SirYozha; +1 Ответить
37. premierex 11.10.12 15:00 Сейчас в теме
Не буду даже ввязываться в полемику об использовании внешних таблиц в запросах, так как просто не хотелось читать код, написанный автором. Если автор не в курсе, что есть определённая стилистика при написании любого программного кода, могу подсказать, что имена переменных должны нести определённую смысловую нагрузку. Например, переменная, именованная в примере как "ТзНмСтр" при прокрутке страницы просто "теряется"... Точнее, теряется смысл её наименования и становится не понятен тому, кто читает этот код. Приходится возвращаться к тому месту, где эта переменная была определена, чтобы понять её назначение. Однозначный минус за неуважение к коллегам, для которых была предназначена эта статья!
SirYozha; +1 Ответить
47. nofx 17.12.15 14:42 Сейчас в теме
(37) premier,
Поддерживаю, товарищи! На кол срочно, товарищи!
39. FractonKireyev 11.10.12 19:23 Сейчас в теме
Жаль, минус поставить не могу.
40. klel 11.10.12 20:33 Сейчас в теме
41. szv 12.10.12 14:37 Сейчас в теме
Я так понимаю, что автор предназначал свою работу неопытным программистам. И статья им может быть полезна. Начнут изучать ВТ и прочитают про пакеты.
И не стал бы критиковать за ВТ, а вот про написание кода (я промолчу про имена переменных, уже было) скажу.
Зачем копировать и сжимать ТЗНомен
// 3. копируются отдельные таблицы значений для использования в условиях запроса
ТзНом = ТзНомен.Скопировать();
ТзНмСтр = ТзНомен.Скопировать();
ТзКач = ТзНомен.Скопировать();

ТзНом.Свернуть("Номенклатура");
ТзКач.Свернуть("Качество");

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

из ТЗ ТзНомен можно сразу получить ВыбНомен используя слово "Различные".
Светлый ум; +1 Ответить
42. Светлый ум 235 17.12.13 10:58 Сейчас в теме
Согласен свертка - совсем не к чему.
48. endym 194 15.02.16 17:37 Сейчас в теме
Добавлю свое мнение:

пакетные запросы хороши, но есть в менеджере свой плюс.

когда пакетов 5-10 и все выполняется на сервере то бывает иногда что запрос не выполняется и понять какой-же запрос тебя подвел не всегда ясно.
на клиенте этот такой пакетный запрос выполнится, но на сервере бывает нет. Всему виной соединения таблиц и громоздкие условия.

так что менеджер временных таблиц пока еще имеет место быть ;)
rpgshnik; +1 Ответить
49. rpgshnik 1771 31.05.17 10:50 Сейчас в теме
Оставьте свое сообщение

См. также

Полезные процедуры и функции для программиста 160

Статья Программист Нет файла v8 1cv8.cf Россия Бесплатно (free) Практика программирования Универсальные функции

Все мы пишем программный код и часто используем процедуры, облегчающие его написание. Ниже приведена выборка таких полезных процедур и функций.

07.10.2019    11915    HostHost    23       

Перенос данных КА 1.1 => ERP 2 (ЕРП) (обработка переноса документов, остатков и справочной информации из "1С:Комплексная автоматизация, ред. 1.1" в "1С:ERP Управление предприятием, ред 2"). Обновлен до КА 1.1.115.х и ERP 2.4.10.х Промо

Обработка позволяет переносить из КА 1.1 в ERP 2 документы за выбранный период и остатки. Типовая обработка от фирмы 1С документы не переносит. Также исправлены ошибки типовой обработки. При выходе новых релизов обновление высылается бесплатно в течение года. Разработка будет полезна фирмам-франчайзи, которые периодически выполняют такой перенос данных для заказчиков. Вы можете один раз приобрести обработку переноса, и потом бесплатно получать обновления в случае выхода новых релизов конфигураций 1С.

29700 руб.

Подборка программ для взаимодействия с ЕГАИС Промо

ЕГАИС (Единая государственная автоматизированная информационная система) - автоматизированная система, предназначенная для государственного контроля за объёмом производства и оборота этилового спирта, алкогольной и спиртосодержащей продукции. Инфостарт рекомендует подборку проверенных решений для взаимодействия с системой.

Агрегатные функции СКД, о которых мало кто знает 356

Статья Программист Нет файла v8 v8::СКД 1cv8.cf Бесплатно (free) Практика программирования

Пользуетесь ли Вы всеми возможными агрегатными функциями, которые предоставляет система компоновки данных? Если Вы используете только: СУММА, КОЛИЧЕСТВО, МИНИМУМ, МАКСИМУМ, СРЕДНЕЕ, то эта статья для Вас.

05.09.2019    15822    ids79    44       

Три костыля. Сказ про фокусы в коде 124

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования Разработка

Три интересных (или странных) костыля в коде, которые могут помочь в повседневных и не очень задачах.

03.09.2019    10683    YPermitin    69       

Перенос данных УПП 1.3 => ERP 2 (ЕРП) / УТ 11 / КА 2.х (обработка переноса документов, остатков и справочников из "1С:Управление производственным предприятием, ред. 1.3" в ERP / УТ 11 / КА 2). Обновлен до УПП 1.3.127.х, КА 2.4.10.х и ERP 2.4.10.х! Промо

Обработка позволяет переносить из УПП 1.3 в ERP 2 документы за выбранный период и остатки. Типовая обработка от фирмы 1С документы не переносит. Также исправлены ошибки типовой обработки. При выходе новых релизов обновление высылается бесплатно в течение года. Разработка будет полезна фирмам-франчайзи, которые периодически выполняют такой перенос данных для заказчиков. Вы можете один раз приобрести обработку переноса, и потом бесплатно получать обновления при выходе новых релизов конфигураций 1С.

29700 руб.

Отслеживание выполнения фонового задания 143

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Практика программирования Универсальные функции Разработка

Запуск фонового задания из модуля внешней обработки. Отслеживание выполнения задания в виде прогресса, расположенного на форме.

17.08.2019    13058    ids79    16       

Функции СКД: ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив 262

Статья Программист Нет файла v8 v8::СКД 1cv8.cf Бесплатно (free) Практика программирования

Подробное описание и использование внутренних функций системы компоновки данных: Вычислить, ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив, ВычислитьВыражениеСГруппировкойТаблицаЗначений.

08.08.2019    18336    ids79    31       

Готовые переносы данных из различных конфигураций 1C Промо

Рекомендуем готовые решения для переноса данных из различных конфигураций 1C. C техподдержкой от разработчиков и гарантией от Инфостарт.

Фоновое выполнение кода в 1С - это просто 124

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Практика программирования Разработка

Как легко запускать выполнение в фоне, не прибегая к долгому описанию фоновых процедур.

02.08.2019    12858    avalakh    21       

1С:Предприятие через Интернет. 1С:Fresh Промо

Ведение бухгалтерского и налогового учет, сдача отчетности, управление бизнесом из любой точки мира. Привычные программы «1С» через Интернет без приобретения коробочных программ.

СКД - наборы данных и связи между ними, создание собственной иерархии, вложенные отчеты 141

Статья Программист Нет файла v8 v8::СКД 1cv8.cf Бесплатно (free) Практика программирования

Набор данных объект. Использование в схеме компоновки нескольких наборов данных. Различные варианты связи наборов: объединение, соединение. Использование иерархии в отчетах на СКД. Создание собственной иерархии, иерархия детальных записей. Использование вложенных схем в отчетах на СКД.

26.07.2019    16482    ids79    8       

СКД - использование расширений языка запросов, секция ХАРАКТЕРИСТИКИ 156

Статья Программист Нет файла v8 v8::СКД Бесплатно (free) Инструментарий разработчика Практика программирования

Автоматическое и не автоматическое заполнение полей компоновки данных. Использование расширений языка запросов для СКД «{…}», секция ВЫБРАТЬ, секция ГДЕ, параметры виртуальных таблиц. Автоматизированное использование дополнительных данных в запросе: секция ХАРАКТЕРИСТИКИ.

17.07.2019    13718    ids79    27       

Онлайн-интенсив "Бизнес-процессы для подготовки к экзамену 1С:Специалист по платформе" 12 декабря 2019 г. Промо

На интенсиве будут рассмотрены все теоретические вопросы, связанные с устройством механизма бизнес-процессов – это необходимо для успешной сдачи экзамена 1С:Специалист по платформе. Также, в качестве практического примера, будет решена задача, аналогичная экзаменационной.

777 рублей

Регистры сведений. За кулисами 129

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Практика программирования Разработка

Небольшие заметки по внутреннему устройству регистров сведений.

09.07.2019    10926    YPermitin    12       

"Меньше копипаста!", или как Вася универсальную процедуру писал 183

Статья Программист Стажер Нет файла v8 v8::СКД 1cv8.cf Бесплатно (free) Практика программирования Разработка

Программист Вася разбирает подход создания универсальных методов на примере программного вывода СКД.

04.07.2019    9783    SeiOkami    49       

Очный семинар по регулярному менеджменту Александра Фридмана "Вы или Хаос", 12 декабря 2019 г. , Санкт-Петербург Промо

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

от 11000 до 29000 рублей

Создание отчетов с помощью СКД - основные понятия и элементы 217

Статья Программист Нет файла v8 v8::СКД Бесплатно (free) Практика программирования Математика и алгоритмы

Основные принципы работы СКД. Понятия схемы компоновки и макета компоновки. Описание основных элементов схемы компоновки: наборы данных, поля, вычисляемые поля, ресурсы, параметры.

25.06.2019    23979    ids79    17       

Многопоточное ускорение однопользовательских нагрузок в 1С + Microsoft SQL Server 2017 179

Статья Программист Нет файла v8 v8::Запросы Бесплатно (free) Практика программирования Разработка

Взаимодействие с Microsoft SQL Server нередко вызывает трудности у 1С-ников, а потому интересны любые моменты, связанные с его использованием. О своем опыте работы с новым SQL Server 2017 участникам конференции Infostart-2018 рассказал директор ООО «Аналитика софт» Дмитрий Дудин.

11.06.2019    13673    dmurk    134       

Перенос данных БП 3.0 => УТ 11 / КА 2 / ERP 2 (ЕРП) (перенос остатков, документов и справочной информации из "1С:Бухгалтерия предприятия 8", ред.3.0). Обновлено до БП 3.0.73.х, УТ 11.4.10.х, КА 2.4.10.х., ERP 2.4.10.х! Промо

Переносятся документы за выбранный период, справочная информация и остатки по счетам бух. учета в программу УТ 11 / КА 2 / ЕРП 2 (ERP). Переносятся все возможные виды операций ввода остатков на нужную дату. Есть отбор по периоду переноса документов и фильтр по организации, доступен выбор даты ввода остатков. Если нужно переносить что-то дополнительно, то обычно бесплатно добавляем это в перенос . Смотрите видеодемонстрацию со звуком - советами по переносу и рекомендациями настройки программ.

29700 руб.

Регистры накопления. Структура хранения в базе данных 178

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Практика программирования Разработка

Структура хранения регистров накопления в базе данных для платформы 1С:Предприятие 8.x. Первая часть в серии публикаций.

16.05.2019    21451    YPermitin    27       

Выполнение внешней обработки в фоновом задании 149

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Практика программирования Разработка

Подробное описание подхода к созданию длительной операции на основе внешней обработки. Реализация протестирована на 1С 8.3.12.1714 (x64).

11.05.2019    13369    Eret1k    23       

Новый раздел на Инфостарте - Electronic Software Distribution Промо

Инфостарт напоминает: на нашем сайте можно купить не только ПО, связанное с 1С. В нашем арсенале – ESD-лицензии на ПО от ведущих вендоров: Microsoft, Kaspersky, ESET, Dr.Web, Аскон и другие.

  • Низкие цены, без скрытых платежей и наценок
  • Оперативная отгрузка
  • Возможность оплаты с личного счета (кешбек, обмен стартмани на рубли и т.п.)
  • Покупки идут в накопления для получения скидочных карт лояльности Silver (5%) и Gold (10%)

Выгрузка документа по условию 5

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования Разработка

Что делать, если документы нужно выгружать не все подряд, а по какому-то фильтру: статусу, дате, набору условий... А что если он соответствовал этим условиям, а потом перестал? А если потом опять начал? Такие ситуации заставили попотеть не одного программиста.

25.04.2019    7694    m-rv    2       

Как прикрутить ГУИД к регистру сведений 23

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования Перенос данных из 1C8 в 1C8 Разработка

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

16.04.2019    10192    m-rv    16       

С 2020 года сервис «Продление поддержки конфигурации 1С:УПП» подорожает вдвое Промо

Успейте продлить поддержку УПП до повышения цен! Фирма «1С» предупредила об изменении цен на сервис «Продление поддержки конфигурации "1С:Управление производственным предприятием"». С 1 января 2020 года сервис подорожает в два раза.

О расширениях замолвите слово... 195

Статья Программист Стажер Нет файла v8 Бесплатно (free) Практика программирования Разработка

О чём стоит задуматься при принятии решения о создании расширения конфигурации…

07.04.2019    18952    ellavs    125       

Git-репозитории для 1С-кода (опыт использования при небольших проектах) 202

Статья Программист Стажер Нет файла v8 Windows Бесплатно (free) Практика программирования Разработка

Инструкции по взаимодействию с Git-репозиторием, которые писались для тех наших программистов, которые вообще никогда не работали с Git (руководства в духе "Как получить код из git-репозитория?", "Как отправить код в git-репозиторий")...

28.03.2019    15422    ellavs    83       

Перенос данных КА 1.1 / УПП 1.3 => БП 3.0 (перенос остатков, документов и справочников из "1С:Комплексная автоматизация 1.1" / УПП 1.3 в "1С:Бухгалтерия 3.0"). Обновлен до версий КА 1.1.115.х, УПП 1.3.127.х! Промо

Разработка позволяет перенести остатки по всем счетам бух.учета в программу "1С:Бухгалтерия предприятия 8", ред. 3.0 на выбранную дату начала ведения учета. Также переносятся документы за период и вся необходимая справочная информация. Правила оперативно обновляю при выходе новых релизов. Рассылка обновлений правил бесплатно в течение 12 месяцев. Есть видеодемонстрация проведения переноса данных. Конфигурации при использовании обмена остаются полностью типовыми. Перенос данных возможен в Бухгалтерию 3.0 версии ПРОФ, КОРП или базовую.

24700 руб.

Трюки с внешними источниками данных 167

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Практика программирования Разработка

Некоторые трюки для преодоления ограничений внешних источников данных.

14.03.2019    16313    YPermitin    53       

Перенос данных БП 2.0 => УТ 11 / КА 2 / ERP 2 (перенос остатков, документов и справочников из "1С:Бухгалтерия предприятия 8", ред. 2.0 в "1С:Управление торговлей 8", ред.11 / КА 2 / ERP 2). Обновлено до УТ 11.4.10.х, КА 2.4.10.х, ERP 2.4.10.х! Промо

Перенос позволяет загрузить в УТ 11 / КА 2 / ERP 2 документы за выбранный период, справочную информацию и остатки по счетам бух. учета. Переносятся остатки денежных средств, взаиморасчетов, остатки товаров и материалов на складах. Переносятся девятнадцать основных видов документов за выбранный период и вся нормативно-справочная информация. Есть фильтр по организации. Если нужно переносить что-то дополнительно, то обычно бесплатно дорабатываю правила (перед покупкой согласуйте необходимые доработки).

29700 руб.

Возможности типовых шаблонов ограничения доступа на уровне записей (RLS) 173

Статья Программист Нет файла v8 v8::Права Бесплатно (free) Практика программирования БСП (Библиотека стандартных подсистем) Роли и права

Краткий обзор применения типовых шаблонов ограничения доступа на уровне записей в конфигурациях, созданных на базе БСП: #ПоЗначениям, #ПоНаборамЗначений, #ПоЗначениямРасширенный, #ПоЗначениямИНаборамРасширенный

03.02.2019    19357    ids79    9