Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Помогите загнать запрос в функцию (число прочтений - 2096 )
Kapet
Senior Member
****
Отсутствует


Ламер - вансист

Сообщений: 262
Местоположение: Ukraine, Kyiv
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Помогите загнать запрос в функцию
23. Февраля 2007 :: 11:57
Печать  
Есть парам. запрос:
Код
Выбрать все
_RSU=создатьОбъект("ODBCRecordset");
_RSU.SetTextParam("Приход",Перечисление.Режимы.Приход);
_RSU.SetTextParam("Период",_RSU.MD.GetBegOfPeriod());
Если _RSU.Prepare(ТекстЗапросаСводныйОстаток)=0 Тогда
	Предупреждение("Не подготовился запрос ТекстЗапросаСводныйОстаток!"+РазделительСтрок+_RSU.GetLastError());
	Возврат;
КонецЕсли;
_RSU.AddParam(1,14,9,0);
_RSU.AddParam(1,14,9,0);
_RSU.AddParam(1,14,9,0);
...
_RSU.SetParam(1,ТД.Фирма);
_RSU.SetParam(2,ТД.Склад);
_RSU.SetParam(3,ТД.Товар);
Рез=Рез+Мин(_RSU.ExecuteScalar(),ТД.Количество);

ТекстЗапросаСводныйОстаток="
|set nocount on
|declare @Фирма char(9)
|declare @Склад char(9)
|declare @Товар char(9)
|set @Фирма = ?
|set @Склад = ?
|set @Товар = ?
|select sum($p.Количество)
|from $РегистрИтоги.Партии p(nolock)
|where
|	p.period = :Период~~ and $p.Режим = :Приход and $p.Фирма = @Фирма and $p.Склад = @Склад and $p.Товар = @Товар"; 



Пытаюсь запихнуть запрос в польз. функцию:
     
Код
Выбрать все
TextOfFunction="create function dbo.fn_svost
	|(
	|@perio	 datetime,
	|@prihod char(9),
	|@firm	 char(9),
	|@sklad	 char(9),
	|@tovar	 char(9)
	|)
	|returns decimal(17,3)
	|as
	|begin
	|declare @Aol53 decimal(17,3)
	|set @Aol53 =
	|	(
	|	select
	|		sum($p.Количество)
	|	from $РегистрИтоги.Партии p(nolock)
	|	where
	|		p.period = @perio and
	|		$p.Режим = @prihod and
	|		$p.Фирма = @firm and
	|		$p.Склад = @sklad and
	|		$p.Товар = @tovar
	|	)
	|return (@Aol53)
	|end"; 


и вызвать:
Код
Выбрать все
ТекстЗапросаСводныйОстаток="
|set nocount on
|declare @Период datetime
|declare @Приход char(9)
|declare @Фирма char(9)
|declare @Склад char(9)
|declare @Товар char(9)
|set @Период = ?
|set @Приход = ?
|set @Фирма = ?
|set @Склад = ?
|set @Товар = ?
|select dbo.fn_svost(@Период ,@Приход ,@Фирма ,@Склад ,@Товар )";

_RSU.SetParam(1,_RSU.MD.GetBegOfPeriod());
_RSU.SetParam(2,Перечисление.Режимы.Приход);
_RSU.SetParam(3,ТД.Фирма);
_RSU.SetParam(4,ТД.Склад);
_RSU.SetParam(5,ТД.Товар);
Рез=Рез+Мин(_RSU.ExecuteScalar(),ТД.Количество); 


Не работает!
Моя интуиция молчит.
Где я не прав?
  
Наверх
ICQ  
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Помогите загнать запрос в функцию
Ответ #1 - 23. Февраля 2007 :: 13:51
Печать  
Там какая-то засада с передачей даты.
Пробуй так:
Код
Выбрать все
_RSU.AddParam(1,14,8,0);
_RSU.SetParam(1,_RSU.МД.ПолучитьСтрИзДаты(_RSU.MD.GetBegOfPeriod()));
 


  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
Kapet
Senior Member
****
Отсутствует


Ламер - вансист

Сообщений: 262
Местоположение: Ukraine, Kyiv
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Re: Помогите загнать запрос в функцию
Ответ #2 - 26. Февраля 2007 :: 07:49
Печать  
Спасибо большое! Теперь заработало!

И чтобы я делал без оперативной поддержки? Постучался бы лбом в стенку, да плюнул...
Еще раз благодарю!
  
Наверх
ICQ  
IP записан
 
Kapet
Senior Member
****
Отсутствует


Ламер - вансист

Сообщений: 262
Местоположение: Ukraine, Kyiv
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Re: Помогите загнать запрос в функцию
Ответ #3 - 27. Февраля 2007 :: 09:22
Печать  
Вдогонку, может какому ламеру пригодится:
Запрос возвращает остаток товара (для справки) как сводный остаток в табличную часть документа, поэтому для правильного форматирования остатка желательно заменить
Код
Выбрать все
ТекстЗапросаСводныйОстаток="
...

|select dbo.fn_svost(@Период,@Приход,@Фирма,@Склад,@Товар)"; 


на
Код
Выбрать все
|select ltrim(isnull(dbo.fn_svost(@Период,@Приход,@Фирма,@Склад,@Товар),0))"; 


  
Наверх
ICQ  
IP записан
 
Mikeware
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 262
Зарегистрирован: 27. Июля 2006
Пол: Мужской
Re: Помогите загнать запрос в функцию
Ответ #4 - 09. Марта 2007 :: 12:29
Печать  
Судя по всему, занимаюсь тем же, что и Kapet
Но вот задумался - у 1с владелец базы один, следовательно, штатно функция будет все равно принадлежать ДБО.
Кроме того, а чем будет отличаться использование пользовательских функций от использования хранимых процедур? Ведь фактически это все можно сделать через ХП?
ЗЫ. Извините за ламерство, ежели чего...
  
Наверх
ICQ  
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать