Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема ПостроитьПараметры() (число прочтений - 2776 )
Sirus_Virus
YaBB Newbies
*
Отсутствует


1C - зло О_о

Сообщений: 13
Местоположение: Нск
Зарегистрирован: 06. Июня 2008
Пол: Мужской
ПостроитьПараметры()
07. Июня 2008 :: 02:54
Печать  
Код
Выбрать все
	ЗапросОстатки = СоздатьОбъект("ODBCRecordSet");
	//========================================================================
	ТекстЗапросаОстатки = "
	|@ВыбСклад = ?
	|@ВыбТовар = ?
	|SELECT
	|   SUM(Рег.ОстатокТовараОстаток)	as ОстатокТовара
	|FROM
	|	$РегистрОстатки.ОстаткиТоваров(:ДатаРасчета~,,Склад = @ВыбСклад AND Товар = @ВыбТовар,, (ОстатокТовара)) as Рег";

	ЗапросОстатки.УстановитьТекстовыйПараметр("ДатаРасчета",ДатаРасчета);
	Если ЗапросОстатки.Подготовить(ТекстЗапросаОстатки)=1 Тогда
		  Сообщить("Запрос подготовлен");
	  КонецЕсли;
	  Если ЗапросОстатки.ПостроитьПараметры()=1 Тогда
		  Сообщить("Параметры запроса построены");
	  КонецЕсли;
 



Запрос не может построить параметры =\
Где покопать подскажите?
  

Владей собой среди толпы смятенной, &&Тебя клянущей за смятенье всех, &&Верь сам в себя, наперекор вселенной, &&И маловерным отпусти их грех... &&&&(с) Редьярд Киплинг&&
Наверх
 
IP записан
 
ev-kov
God Member
*****
Отсутствует



Сообщений: 694
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Re: ПостроитьПараметры()
Ответ #1 - 07. Июня 2008 :: 02:58
Печать  
в доке не рекомендуют использовать построитьпараметры, юзай ДобПараметр и УстПараметр, проверено работает
  

Информация - то, что снижает неопределенность в какой-либо области и очень важно не ошибиться областью в наш информационный век!
Наверх
 
IP записан
 
Sirus_Virus
YaBB Newbies
*
Отсутствует


1C - зло О_о

Сообщений: 13
Местоположение: Нск
Зарегистрирован: 06. Июня 2008
Пол: Мужской
Re: ПостроитьПараметры()
Ответ #2 - 07. Июня 2008 :: 02:58
Печать  
Дата расчета получается так:
Код
Выбрать все
		ДатаРасчета = СформироватьПозициюДокумента(Конт.ТекущийДокумент(),-1);

 

  

Владей собой среди толпы смятенной, &&Тебя клянущей за смятенье всех, &&Верь сам в себя, наперекор вселенной, &&И маловерным отпусти их грех... &&&&(с) Редьярд Киплинг&&
Наверх
 
IP записан
 
Sirus_Virus
YaBB Newbies
*
Отсутствует


1C - зло О_о

Сообщений: 13
Местоположение: Нск
Зарегистрирован: 06. Июня 2008
Пол: Мужской
Re: ПостроитьПараметры()
Ответ #3 - 07. Июня 2008 :: 03:06
Печать  
Sirus_Virus писал(а) 07. Июня 2008 :: 02:58:
Дата расчета получается так:
Код
Выбрать все
		ДатаРасчета = СформироватьПозициюДокумента(Конт.ТекущийДокумент(),-1);

 



Можно пример кода?
  

Владей собой среди толпы смятенной, &&Тебя клянущей за смятенье всех, &&Верь сам в себя, наперекор вселенной, &&И маловерным отпусти их грех... &&&&(с) Редьярд Киплинг&&
Наверх
 
IP записан
 
ev-kov
God Member
*****
Отсутствует



Сообщений: 694
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Re: ПостроитьПараметры()
Ответ #4 - 07. Июня 2008 :: 03:14
Печать  
Код
Выбрать все
	ТекстЗапросаПоДолгам ="
	|select
	|	$Рег.Договор 					[Договор $Справочник.Договоры]
	|	, $Рег.Сумма*(1-2*Рег.debkred)	[Сумма]
	|	, Рег.DATE_TIME_IDDOC 			[ПозицияДокумента]
	|from
	|	$Регистр."+глПокупатели+" as Рег (nolock)
	|where
	|	$Рег.ЮрЛицо = ? AND
	|	$Рег.ВидДеятельности = ? AND
	|	$Рег.Издание = ? AND
	|	$Рег.ЦветПлатежа = ? AND
	|	$Рег.Контрагент = ? AND
	|	$Рег.Менеджер = ? AND
	|	Рег.Date_Time_iddoc <= ? AND
 	|	(Рег.debkred = 1)  AND
 	| 	(($Рег.КодОперации <> $Перечисление.КодОперации.ЗакрытиеДебМинус)AND($Рег.КодОперации <> $Перечисление.КодОперации.ЗакрытиеДебПлюс))";

 	Если ЗапросДолгиПарам.Подготовить(ТекстЗапросаПоДолгам) = 0 Тогда
 		Сообщить(ЗапросДолгиПарам.ПолучитьОписаниеОшибки());
 		Сообщить("Не удалось подготовить параметризованный запрос к выполнению: "+ТекстЗапросаПоДолгам);
 	КонецЕсли;

	Если ЗапросДолгиПарам.КолвоПараметров() <> 7 Тогда	//Сообщить("колво параметров = " +_RS.КолвоПараметров());
 		ЗапросДолгиПарам.ДобПараметр(1,14,9,0); // спр-к ЮрЛицо
 		ЗапросДолгиПарам.ДобПараметр(1,14,9,0); // спр-к ВидДеятельности
 		ЗапросДолгиПарам.ДобПараметр(1,14,9,0); // спр-к Издание
 		ЗапросДолгиПарам.ДобПараметр(1,14,9,0); // переч-е ЦветПлатежа
 		ЗапросДолгиПарам.ДобПараметр(1,14,9,0); // спр-к Контрагент
 		ЗапросДолгиПарам.ДобПараметр(1,14,9,0); // спр-к Менеджер
 		ЗапросДолгиПарам.ДобПараметр(1,14,23,0); //строка Date_Time_iddoc
 		//Сообщить("Параметры повторно построены, колво параметров = " +ЗапросДолгиПарам.КолвоПараметров());
 	КонецЕсли;

 	ЗапросДолгиПарам.УстПараметр(1, ЮрЛицо);
 	ЗапросДолгиПарам.УстПараметр(2, ВидДеятельности);
 	ЗапросДолгиПарам.УстПараметр(3, Издание);
 	ЗапросДолгиПарам.УстПараметр(4, ЦветПлатежа);
 	ЗапросДолгиПарам.УстПараметр(5, Контрагент);
 	ЗапросДолгиПарам.УстПараметр(6, Менеджер);
 	ЗапросДолгиПарам.УстПараметр(7, _MD.ПолучитьДатуВремяИдДок(ДатаПоз));

 	Попытка
 		ТЗ = ЗапросДолгиПарам.ВыполнитьИнструкцию(ТекстЗапросаПоДолгам)
 	Исключение
 		Сообщить("Не удалось выполнить параметризованный запрос "+ТекстЗапросаПоДолгам);
 		Сообщить(ЗапросДолгиПарам.ОписаниеОшибки());
 	КонецПопытки;
 

  

Информация - то, что снижает неопределенность в какой-либо области и очень важно не ошибиться областью в наш информационный век!
Наверх
 
IP записан
 
Sirus_Virus
YaBB Newbies
*
Отсутствует


1C - зло О_о

Сообщений: 13
Местоположение: Нск
Зарегистрирован: 06. Июня 2008
Пол: Мужской
Re: ПостроитьПараметры()
Ответ #5 - 07. Июня 2008 :: 03:49
Печать  
Запрос затыкается на выполнении скалярного.
Ошибка следующая:
State 42000, native 170, message [Microsoft][ODBC SQL Server Driver][SQL Server]Line 2: Incorrect syntax near '@ВыбТовар'.

Хотя я не могу понять что ему там не нравиться.

Код
Выбрать все
	ЗапросОстатки = СоздатьОбъект("ODBCRecordSet");
	//========================================================================
	ТекстЗапросаОстатки = "
	|@ВыбТовар = ?
	|SELECT
	|   SUM(Рег.ОстатокТовараОстаток)	as ОстатокТовара
	|FROM
	|	$РегистрОстатки.ОстаткиТоваров(:ДатаРасчета~,,Склад = :ВыбСклад AND Товар = @ВыбТовар,, (ОстатокТовара)) as Рег";

	ЗапросОстатки.УстановитьТекстовыйПараметр("ДатаРасчета",ДатаРасчета);
	ЗапросОстатки.УстановитьТекстовыйПараметр("ВыбСклад ",Конт.Склад);

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


	  // Получение остатка при обходе строк

	ЗапросОстатки.УстПараметр(1,Конт.Товар);

	ЗапросОстатки.Отладка(1);
	Попытка
		Остаток2 = ЗапросОстатки.ВыполнитьСкалярный();
	Исключение
		Сообщить(ЗапросОстатки.ПолучитьОписаниеОшибки());
	КонецПопытки;


 

  

Владей собой среди толпы смятенной, &&Тебя клянущей за смятенье всех, &&Верь сам в себя, наперекор вселенной, &&И маловерным отпусти их грех... &&&&(с) Редьярд Киплинг&&
Наверх
 
IP записан
 
U_zer
Экс-Участник


Re: ПостроитьПараметры()
Ответ #6 - 07. Июня 2008 :: 05:27
Печать  
Он вам и не построит параметры, так как не знает их типа.
  
Наверх
 
IP записан
 
Sirus_Virus
YaBB Newbies
*
Отсутствует


1C - зло О_о

Сообщений: 13
Местоположение: Нск
Зарегистрирован: 06. Июня 2008
Пол: Мужской
Re: ПостроитьПараметры()
Ответ #7 - 07. Июня 2008 :: 05:41
Печать  
Вот в чем причина ошибки:

Код
Выбрать все
	ТекстЗапросаОстатки = "
	|DECLARE @Товар CHAR(9)
	|SET @Товар = ?
	|SELECT
	|   SUM(Рег.ОстатокТовараОстаток)	as ОстатокТовара
	|FROM
	|	$РегистрОстатки.ОстаткиТоваров(:ДатаРасчета~,,Склад = :ВыбСклад AND Товар = @Товар,, (ОстатокТовара)) as Рег";
 



Необходимое явное определение переменной "Товар" в запросе. Спасибо за помощь SnarkHunter.

ЗЫ: Авторам документации прошу внести данное дополнение в нее, в статье "Эффективное использование MSSQL в 1С при помощи ВК 1С++" ошибка, там пример вида:

Код
Выбрать все
ТекстЗапроса = "
|@Товар = ?
|SELECT
|  Рег.КоличествоОстаток as Количество
|FROM
|  $РегистрОстатки.ОстаткиТоваров(:ВыбДата~,,
|					 Склад = :ВыбСклад AND Товар = @Товар,
|					 (Товар), (Количество)) as Рег";
 

  

Владей собой среди толпы смятенной, &&Тебя клянущей за смятенье всех, &&Верь сам в себя, наперекор вселенной, &&И маловерным отпусти их грех... &&&&(с) Редьярд Киплинг&&
Наверх
 
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ПостроитьПараметры()
Ответ #8 - 10. Июня 2008 :: 20:45
Печать  
Ну вот. Пингвин пошел по рукам Улыбка
Бедный линукс... Улыбка
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ПостроитьПараметры()
Ответ #9 - 11. Июня 2008 :: 06:46
Печать  
Sirus_Virus писал(а) 07. Июня 2008 :: 05:41:
Необходимое явное определение переменной "Товар" в запросе. Спасибо за помощь SnarkHunter.

ЗЫ: Авторам документации прошу внести данное дополнение в нее, в статье "Эффективное использование MSSQL в 1С при помощи ВК 1С++" ошибка, там пример вида:

Исправил в доке для 2.5 и 3.0
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать