Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Помощь по методу ВыполнитьSQL_ИзТЗ() (число прочтений - 4196 )
pavel_tr
Senior Member
****
Отсутствует



Сообщений: 279
Местоположение: Казань
Зарегистрирован: 14. Октября 2006
Пол: Мужской
Помощь по методу ВыполнитьSQL_ИзТЗ()
28. Октября 2006 :: 08:47
Печать  
Пытаюсь сделать запрос - на основании списка наименований товара (Таблица значений) позиционироваться на элементах справочника, а затем выгружать результат в другую тз.

ТЗ - таблица с единственной колонкой "Наименование", содержит наименование необходимого товара

Код
Выбрать все
тз1=СоздатьОбъект("ТаблицаЗначений");
рс1=СоздатьОбъект("ODBCRecordSet");
рс1.УстБД1С();

Первый=1; // при первом проходе создаёт тз1, потом дописывает

Если рс1.Подготовить("
|SELECT
|    Спр.ID [Элемент $Справочник.Товары]
|FROM
|    $Справочник.Товары Спр
|WHERE
|    Спр.Descr = ?")=0 тогда
	предупреждение(рс1.ПолучитьОписаниеОшибки());
		    возврат;
КонецЕсли;

Если рс1.ПостроитьПараметры()=0 тогда
	предупреждение(ОписаниеОшибки());
	возврат;
КонецЕсли;
рс1.ВыполнитьSQL_ИзТЗ(тз); // куда на этом шаге возвращается результат???
рс1.ПолучитьРезультатыВ_ТЗ(тз1,Первый); // тз1 так пустая!
Если Первый=1 тогда
	Первый=0;
КонецЕсли;
тз1.ВыбратьСТроку(); // пусто :-(
 



Как правильно использовать метод ВыполнитьSQL_ИзТЗ()? В справке показана работа метода для модификации таблиц, можно ли использовать его для выполнения выборки? И как получить выборку в новую тз?
  
Наверх
 
IP записан
 
U_zer
Экс-Участник


Re: Помощь по методу ВыполнитьSQL_ИзТЗ()
Ответ #1 - 28. Октября 2006 :: 08:58
Печать  
Используй связку
УложитьСписокОбъектов() + ВыполнитьИнструкцию()
  
Наверх
 
IP записан
 
pavel_tr
Senior Member
****
Отсутствует



Сообщений: 279
Местоположение: Казань
Зарегистрирован: 14. Октября 2006
Пол: Мужской
Re: Помощь по методу ВыполнитьSQL_ИзТЗ()
Ответ #2 - 28. Октября 2006 :: 09:26
Печать  
В принципе заработало, спасибо. Выборка почему-то пустая, буду разбираться....

Хотел уточнить по топику, значит метод ВыполнитьSQL_ИзТЗ() стоит использовать именно в запросах которые можифицируют таблицы? Для выборки он не применим?
  
Наверх
 
IP записан
 
DrACe
1c++ donor
1c++ power user
Отсутствует


1С++ любитель

Сообщений: 447
Местоположение: г. Новосибирск
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Помощь по методу ВыполнитьSQL_ИзТЗ()
Ответ #3 - 28. Октября 2006 :: 10:12
Печать  
pavel_tr писал(а) 28. Октября 2006 :: 09:26:
Хотел уточнить по топику, значит метод ВыполнитьSQL_ИзТЗ() стоит использовать именно в запросах которые можифицируют таблицы? Для выборки он не применим?


интересная постановка вопроса... сам я раньше об этом не задумывался, потому как не нужно было - вижу и здесь отсутствие необходимости именно такого решения, но не буду отговаривать.

1) Судя по описанию метода он
Цитата:
метод выполняет параметрический запрос и в качестве параметров берет значения из переданной таблицы.

другими словами - это почти то же, что и связка Подготовить() -> УстПараметр() -> ВыполнитьИнструкцию(), только в качестве параметров будет твоя ТЗ.
Интересно, что результат тут тебе понадобится только после отработки всех подзапросов с параметрами из таблицы.

2) Что можно сделать в данной ситуации:
а) Создать на сервере временную таблицу "стандартными" средствами с помощью ВыполнитьSQL_ИзТЗ() - такой вариант есть в примере, а потом уже к ней выполнять конечный запрос.

б) Дописать твой вариант с, опять же, временной таблицей, тока уже с результирующими данными:
Код
Выбрать все
тз1=СоздатьОбъект("ТаблицаЗначений");
рс1=СоздатьОбъект("ODBCRecordSet");

//--- временная таблица
ТекстЗапроса = "
	|IF EXISTS (SELECT *
	|	   FROM   tempdb..sysobjects
	|	   WHERE  id = object_id('tempdb..#temp'))
	|	DROP TABLE #temp
	|";
рс1.Выполнить(ТекстЗапроса);

//--- создаем таблицы
рс1.Выполнить("CREATE TABLE #temp(ID CHAR(9))");


Если рс1.Подготовить("
	|INSERT INTO #temp(ID)
	|SELECT
	|    Спр.ID
	|FROM
	|    $Справочник.Товары Спр
	|WHERE
	|    Спр.Descr = ?")=0 тогда
	Предупреждение(рс1.ПолучитьОписаниеОшибки());
		    возврат;
КонецЕсли;

рс1.ВыполнитьSQL_ИзТЗ(тз); // заполняем таблицу результатами

ТекстЗапроса = "
	|SELECT
	|	ID [Элемент $Справочник.Товары]
	|FROM #temp
	|";
тз1 = рс1.ВыполнитьИнструкцию(ТекстЗапроса);


тз1.ВыбратьСТроку(); // надеюсь НЕ пусто :-)
  

  
Наверх
 
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Помощь по методу ВыполнитьSQL_ИзТЗ()
Ответ #4 - 30. Октября 2006 :: 05:29
Печать  
Метод ВыполнитьSQL_ИзТЗ можно применять только с DML запросами. А точнее, запросы не должны возвращать результат типа rowset.
  
Наверх
ICQ  
IP записан
 
pavel_tr
Senior Member
****
Отсутствует



Сообщений: 279
Местоположение: Казань
Зарегистрирован: 14. Октября 2006
Пол: Мужской
Re: Помощь по методу ВыполнитьSQL_ИзТЗ()
Ответ #5 - 30. Октября 2006 :: 10:43
Печать  
Огромное спасибо, стало понятно
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать