Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема ВыполнитьИнструкцию (число прочтений - 4813 )
sml
Full Member
***
Отсутствует


I Love 1С++!

Сообщений: 186
Зарегистрирован: 28. Февраля 2008
ВыполнитьИнструкцию
28. Марта 2008 :: 06:49
Печать  
Код
Выбрать все
ТЗ = СоздатьОбъект("ТаблицаЗначений");
ТЗ.НоваяКолонка("Товар",  "Справочник");
ТЗ.НоваяКолонка("Склад",  "Справочник");
ТЗ.НоваяКолонка("Цена", "Число", 7, 2);

...

ТЗ = ВыполнитьИнструкцию(ТекстЗапр); 



У меня 2 вопроса к знатокам:
1) Функция ВыполнитьИнструкцию удалит и создаст колонки ТЗ или же будет использовать существующие, если имена колонок ТЗ совпадают с псевдонимами возвращаемых полей?

2) Можно ли использовать ф-ию ВыполнитьСкалярный, если надо вернуть не 1 строку, а ТЗ?
« Последняя редакция: 28. Марта 2008 :: 13:01 - sml »  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: ВыполнитьИнструкцию
Ответ #1 - 28. Марта 2008 :: 07:02
Печать  
На самом деле ВыполнитьИнструкцию имеет три параметра
ВыполнитьИнструкцию(ТекстЗапроса, ТЗ, ФлагОчищитьТЗ);

ТЗ - Таблица значений или ее наследник.
ФлагОчищитьТЗ по умолчанию 1 очистит и создаст заново ТЗ по запросу.
0 не очищать.

ТЗ = ВыполнитьИнструкцию(ТекстЗапроса);     краткая более удобная форма
при этом ТЗ всегда создается.
  
Наверх
 
IP записан
 
sml
Full Member
***
Отсутствует


I Love 1С++!

Сообщений: 186
Зарегистрирован: 28. Февраля 2008
Re: ВыполнитьИнструкцию
Ответ #2 - 28. Марта 2008 :: 09:26
Печать  
Z1 писал(а) 28. Марта 2008 :: 07:02:
На самом деле ВыполнитьИнструкцию имеет три параметра
ВыполнитьИнструкцию(ТекстЗапроса, ТЗ, ФлагОчищитьТЗ);

ТЗ - Таблица значений или ее наследник.
ФлагОчищитьТЗ по умолчанию 1 очистит и создаст заново ТЗ по запросу.
0 не очищать.

ТЗ = ВыполнитьИнструкцию(ТекстЗапроса);     краткая более удобная форма
при этом ТЗ всегда создается.


Спасибо. С первым вопросом теперь понятно. Кстати, заметил, что при заполнении ТЗ на форме нельзя использовать синтаксис:
Код
Выбрать все
ТЗ = ВыполнитьИнструкцию(ТекстЗапр) 


поскольку 1С выдает ошибку: Попытка присвоить значение недоступной для записи переменной (ТЗ)

А по 2-му вопросу никто не просветит?
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: ВыполнитьИнструкцию
Ответ #3 - 28. Марта 2008 :: 10:29
Печать  
sml писал(а) 28. Марта 2008 :: 09:26:
[quote author=Z1 link=1206686989/0#1 date=1206687732]
А по 2-му вопросу никто не просветит?

Не совсем понятен второй вопрос если уж совсем точно.
Я использую выполнить скалярный когда мне вообще ничего не нужно получать обратно
от sql сервера ( например оператор insert ). В этом случае возвращается код ошибки операции.
Во всех остальных случаях использую ВыполнитьИнструкцию()
  
Наверх
 
IP записан
 
sml
Full Member
***
Отсутствует


I Love 1С++!

Сообщений: 186
Зарегистрирован: 28. Февраля 2008
Re: ВыполнитьИнструкцию
Ответ #4 - 28. Марта 2008 :: 11:10
Печать  
Z1 писал(а) 28. Марта 2008 :: 10:29:
Во всех остальных случаях использую ВыполнитьИнструкцию()


Даже когда выполняешь параметризованный запрос?
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: ВыполнитьИнструкцию
Ответ #5 - 28. Марта 2008 :: 11:25
Печать  
sml писал(а) 28. Марта 2008 :: 11:10:
Z1 писал(а) 28. Марта 2008 :: 10:29:
Во всех остальных случаях использую ВыполнитьИнструкцию()


Даже когда выполняешь параметризованный запрос?
Опиши какой запрос параметризированный лучше на примере,
а то возникает несколько вариантов.
  
Наверх
 
IP записан
 
sml
Full Member
***
Отсутствует


I Love 1С++!

Сообщений: 186
Зарегистрирован: 28. Февраля 2008
Re: ВыполнитьИнструкцию
Ответ #6 - 28. Марта 2008 :: 12:55
Печать  
у меня уже все заработало  Очень довольный

В форме списка номенклатуры есть Табличное поле ФормТабДопИнформации, которое по умолчанию заполняется ценами для каждого элемента, но можно выбирать тип отображаемой информации, например на остатки по складам. Я создал 2 параметризированных запроса (один - для Цен, другой - для Остатков), которые подготавливаются при выборе типа отображения. Вот пример для Цен:
Код
Выбрать все
Если НазваниеИнтерфейса()<>"Интерфейс_Сторонний" Тогда
	РДата = Формат(РабочаяДата(),"ДГГГГММДД");
	Зпр = СоздатьОбъект("ODBCRecordset");
	ТекстЗ="
	|set nocount on
	|declare @ИдНоменклатуры char(9)
	|set @ИдНоменклатуры = ?
	|
	|SELECT
	|	rtrim(КЦ.descr) КатегорияЦены,
	|	$ПоследнееЗначение.Цены.Цена(Ц.ID,'"+РДата+"') Цена,
	|	$ПоследнееЗначение.Цены.Валюта(Ц.ID,'"+РДата+"') [Валюта $Справочник.Валюты],
	|	$ПоследнееЗначение.Цены.Единица(Ц.ID,'"+РДата+"') [Единица $Справочник.Единицы],
	|	Ц.ID [Объект $Справочник.Цены]
	|FROM
	|	$Справочник.Цены Ц (nolock)
	|	INNER JOIN
	|		$Справочник.КатегорииЦен КЦ (nolock)
	|		ON КЦ.ID = $Ц.КатегорияЦены
	|WHERE
	|	Ц.PARENTEXT = @ИдНоменклатуры
	|ORDER BY КЦ.descr
	|";

	Если Зпр.Подготовить(ТекстЗ)=0 Тогда
	  Сообщить("Запрос не прошел "+Зпр.ПолучитьОписаниеОшибки());
	КонецЕсли;
	Зпр.ДобПараметр(1,14,9,0);
	//Зпр.Отладка(1);
КонецЕсли; 



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

Код
Выбрать все
Зпр.УстПараметр(1, ТекущийЭлемент());	    
Зпр.ВыполнитьИнструкцию(,ФормТабДопИнформации,0); 



и отрабатывает заметно быстрее, чем я поначалу создал непараметризированный запрос
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: ВыполнитьИнструкцию
Ответ #7 - 28. Марта 2008 :: 13:50
Печать  
Ну раз select откуда ты заранее знаешь сколько строк тебе вернется
Значит надо применять ВыполнитьИНструкцию()
  
Наверх
 
IP записан
 
Вадимко
God Member
*****
Отсутствует


Нам бы чего про ОдноЦэ...

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: ВыполнитьИнструкцию
Ответ #8 - 28. Марта 2008 :: 15:25
Печать  
sml писал(а) 28. Марта 2008 :: 09:26:
поскольку 1С выдает ошибку: Попытка присвоить значение недоступной для записи переменной (ТЗ)


ТЗ = ВыполняемИнструкцию;
ТЗНаФорме.Загрузить(ТЗ);
Подмигивание
  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать