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


I Love YaBB 2!

Сообщений: 180
Зарегистрирован: 21. Декабря 2007
Параметризованные запросы
28. Января 2009 :: 13:20
Печать  
Сделал следующее:

ЗапросНал=СоздатьОбъект("ODBCRecordSet");
ТекстЗапросаНал ="
           |SELECT Жур.DATE_TIME_IDDOC ДатаВремя
           |FROM _1SJOURN AS Жур (NOLOCK)
           |      CROSS JOIN _1SCRDOC AS Отбор (NOLOCK)
           |WHERE
           | Жур.IDDOCDEF=$ВидДокумента.ПриходныйОрдерТБ
           |      AND Жур.ISMARK = 0
           |   AND Отбор.ChildID = Жур.IDDoc
           |   AND Отбор.MDID = 0
           |   AND Отбор.ParentVal = ?*";
Если ЗапросНал.Подготовить(ТекстЗапросаНал) = 0 Тогда
     Сообщить(ЗапросНал.ПолучитьОписаниеОшибки());
     Сообщить("Не удалось подготовить [shighlight]параметризованный[/shighlight] запрос к выполнению: "+ТекстЗапросаНал);
КонецЕсли;
Если ЗапросНал.КолвоПараметров() <> 1 Тогда      
     ЗапросНал.ДобПараметр(1,14,23,0); // док
КонецЕсли;

Но на ?* - терзают смутные сомненья, но вроде работает, или то, что длина указана 23 позволяет оператору
ЗапросНал.УстПараметр(1,ТекущийДокумент)
правильно загрузить документ в параметр?

Кто имеет больший опыт, как правильно применять модификаторы к параметрам запроса?

Не встречал, как правильно передавать в параметр документ произвольного типа, перечисление, документ определенного типа?

  
Наверх
 
IP записан
 
mov68
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 180
Зарегистрирован: 21. Декабря 2007
Re: Параметризованные запросы
Ответ #1 - 28. Января 2009 :: 13:30
Печать  
Есть такой вариант:
ЗапросОплата=СоздатьОбъект("ODBCRecordSet");
ТекстЗапросаОплата = "
           |SELECT ОплатаНаКорнеОстатки.СуммаОстаток Сумма
           |FROM $РегистрОстатки.ОплатаНаКорне(,, (Корень = ?~),,) AS ОплатаНаКорнеОстатки";
Если ЗапросОплата.Подготовить(ТекстЗапросаОплата) = 0 Тогда
     Сообщить(ЗапросОплата.ПолучитьОписаниеОшибки());
     Сообщить("Не удалось подготовить [shighlight]параметризованный[/shighlight] запрос к выполнению: "+ТекстЗапросаОплата);
КонецЕсли;
Если ЗапросОплата.КолвоПараметров() <> 1 Тогда      
     ЗапросОплата.ДобПараметр(1,14,9,0); // док
КонецЕсли;

Методом тыка узнал что с длинной 9 работает, ткните неуча, где можно прочитать подбор параметров для разных ситуаций (в документации нашел только перечень какими они могут быть)
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Параметризованные запросы
Ответ #2 - 28. Января 2009 :: 14:33
Печать  
после ? модификаторы не нужны.
Цитата:
то, что длина указана 23 позволяет оператору
ЗапросНал.УстПараметр(1,ТекущийДокумент)
правильно загрузить документ в параметр?
именно так
  

1&&2&&3
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Параметризованные запросы
Ответ #3 - 28. Января 2009 :: 14:35
Печать  
Цитата:
ткните неуча, где можно прочитать подбор параметров для разных ситуаций
я не встречал Печаль
  

1&&2&&3
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Параметризованные запросы
Ответ #4 - 28. Января 2009 :: 14:40
Печать  
Цитата:
$РегистрОстатки.ОплатаНаКорне(,, (Корень = ?),,)

Непосредственно внутри ВТ использовать ? не безопасно в общем случае.
В твоем случае работает т.к. получаешь актуальные итоги и ? используется в ВТ один раз.
Попробуй получить не актуальные остатки. Тогда ВТ превратится в два подзапроса и будет два ?. И получишь ошибку.
Нужно делать так:
Код
Выбрать все
declare @root char(9)
set @root = ?
...
$РегистрОстатки.ОплатаНаКорне(,, (Корень = @root),,)
... 

  

1&&2&&3
Наверх
 
IP записан
 
mov68
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 180
Зарегистрирован: 21. Декабря 2007
Re: Параметризованные запросы
Ответ #5 - 29. Января 2009 :: 06:06
Печать  
Спасибо всем за отзывы, но вопрос остается:
-Кто из ЗНАЮЩИХ возьмется сделать небольшую памятку по подбору параметров для объектов разного типа?
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать