Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Параметризированный запрос Поставщика данных (число прочтений - 2888 )
gildebrand
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 56
Зарегистрирован: 01. Сентября 2006
Пол: Мужской
Параметризированный запрос Поставщика данных
07. Сентября 2006 :: 07:14
Печать  
Пытаюсь построить параметризованный запрос в табличном поле поставщика данных:

ТекстЗапросаСтрок = "select
     |t.nprn      as nprn,/*заголовок*/
     |t.nnomen      as nrn_nomen,/* номенклатура*/
     |t.snomen_name as Товар,
     |t.nquant as Количество,/* количество*/
     |t.nprice as Цена, /*цена*/
     |t.nsum_wo_tax as Сумма, /*сумма*/
     |t.nrate_nds as СтавкаНДС, /*ставка НДС*/
     |t.nsum_tax as НДС, /*НДС*/
     |t.nsum_w_tax as Всего /*сумма всего*/
     |from
     | vr_snab_ininvoicesspecs_1c t
     |where t.nprn = ?";
     
     
     ПоставщикДанных.УстТекстЗапроса(ТекстЗапросаСтрок);

Но при этом получаю сообщение об ошибке:
ПоставщикДанных.УстТекстЗапроса(ТекстЗапросаСтрок);
{D:\СЛУЖЕБНЫЕ ОБРАБОТКИ\ТЕСТЖУРНАЛ.ERT(563)}: Meta name parser: Не указан тип параметра ""

Если бы я работал с ODBCRecordSet, я бы тогда использовал методы Подготовить, ПостроитьПараметры и УстПараметр. Но у Поставщика данных нет таких методов.

Вопрос: как мне указать этот тип параметра в Поставщике данных (не устанавливать текстовый параметр, а именно построить откомпилированный запрос)?
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3050
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Параметризированный запрос Поставщика данных
Ответ #1 - 07. Сентября 2006 :: 07:35
Печать  
хоть многие и ругают документацию, но там же все есть:
Цитата:
В тексте запроса допустимо использование SQL параметров. Формат определения SQL параметра в тексте запроса:

?<ИмяПараметра>(Тип[, Длина[, Точность]])

После установки текста запроса, доступ значениям параметров обеспечивается коллекцией параметров поставщика данных.


Цитата:
ПараметрыЗапроса

Коллекция значений SQL параметров запроса. Состав коллекции определяется при установке текста запроса.
  

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


I Love YaBB 2!

Сообщений: 56
Зарегистрирован: 01. Сентября 2006
Пол: Мужской
Re: Параметризированный запрос Поставщика данных
Ответ #2 - 07. Сентября 2006 :: 08:20
Печать  
Спасибо! Вроде помогло, но...
Делаю теперь так:
     ТекстЗапросаСтрок = "select
     |t.nprn      as nprn,/*заголовок*/
     |t.nnomen      as nrn_nomen,/* номенклатура*/
     |t.snomen_name as Товар,
     |t.nquant as Количество,/* количество*/
     |t.nprice as Цена, /*цена*/
     |t.nsum_wo_tax as Сумма, /*сумма*/
     |t.nrate_nds as СтавкаНДС, /*ставка НДС*/
     |t.nsum_tax as НДС, /*НДС*/
     |t.nsum_w_tax as Всего /*сумма всего*/
     |from
     | vr_snab_ininvoicesspecs_1c t
     |where t.nprn = ?nprn(6,17,0)";


но сам запрос к базе теперь не выполняется, т.е., в процедуре (которая вызывается - проверял):
Процедура ТабЖурналПриАктивизацииСтроки(ТП)      
     ТП_Строки.ПоставщикДанных.Параметры.Установить("nprn",ТП.ТекущиеДанные.nrn_doc);
     ТП_Строки.ПоставщикДанных.Обновить();
     ТП_Строки.ОбновитьСтроки();
КонецПроцедуры      // ТП_ШапкаПриАктивизацииСтроки

т.е. я устанавливаю параметр, НО ЗАПРОСА к БД не происходит. Что я делаю не так?
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3050
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Параметризированный запрос Поставщика данных
Ответ #3 - 07. Сентября 2006 :: 08:59
Печать  
вообще этого должно быть достаточно:
Код
Выбрать все
ТП_Строки.ПоставщикДанных.Параметры.nprn = ТП.ТекущиеДанные.nrn_doc;
ТП_Строки.ПоставщикДанных.Обновить();  


не понятно почему не работает.

Цитата:
НО ЗАПРОСА к БД не происходит.
профайлером смотрел?
  

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


I Love YaBB 2!

Сообщений: 56
Зарегистрирован: 01. Сентября 2006
Пол: Мужской
Re: Параметризированный запрос Поставщика данных
Ответ #4 - 07. Сентября 2006 :: 09:20
Печать  
Да смотрел - запроса к Oracle не происходит. Но если я делаю не параметризованный запрос, т.е. устанавливаю параметр nprn, через УстановитьТекстовыйПараметр - то запрос происходит.
  
Наверх
 
IP записан
 
gildebrand
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 56
Зарегистрирован: 01. Сентября 2006
Пол: Мужской
Re: Параметризированный запрос Поставщика данных
Ответ #5 - 07. Сентября 2006 :: 12:04
Печать  
Всё получилось!
Дело было в типизации значения параметра, т.е.  вот так все заработало:

Процедура ТабЖурналПриАктивизацииСтроки(ТП)      
     ТП_Строки.ПоставщикДанных.Параметры.nprn =      Число(ТП.ТекущиеДанные.nrn_doc);
     ТП_Строки.ПоставщикДанных.Обновить();
КонецПроцедуры      // ТП_ШапкаПриАктивизацииСтроки
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать