KotMurza писал(а) 12. Июля 2013 :: 09:59:trad писал(а) 12. Июля 2013 :: 05:59:Обычно делаю так:
declare @ТМЦ char(9) set @ТМЦ = ?
...
FROM $РегистрОстатки.Остатки(:НаДату~,,Склад=:Склад AND ТМЦ=@ТМЦ, (ТМЦ),(Кво)) as Рег";
Запрос.ДобПараметр(1,14,9,0);
Сработало! Мистика... До этого я делал точно также, но передавал 2 параметра:
@Склад и
@ТМЦОгромное спасибо. Хоть куда-то продвинулся )
Все работает отлично: и
ВыполнитьСкалярный() и
ВыполнитьИнструкцию() да не мистика - добавив это изменение sql сервер сделал
сделал явное преобразование типов(точнее неявное) до char(9)
( до этого пробразование было скоере всего до char - увидеть это можно развернув виртуальную функцию )
PS запрос из первого поста скорее всего заработает если его поправить так
Запрос=СоздатьОбъект("ODBCRecordSet");
ТекстЗапроса = "
| SELECT Рег.КвоОстаток as Остаток
| FROM $РегистрОстатки.Остатки(:НаДату~,,Склад=:Склад AND ТМЦ=cast(@ТМЦ as char(9)) , (ТМЦ),(Кво)) as Рег";
Запрос.УстановитьТекстовыйПараметр("Склад",Склад);
Запрос.УстановитьТекстовыйПараметр("НаДату",ТекущаяДата());
Ок=Запрос.Подготовить(ТекстЗапроса);
Запрос.ДобПараметр(1,14,9,0,"@ТМЦ");
Запрос.УстПараметр(1, ТМЦ);
Остаток=Запрос.ВыполнитьСкалярный();
PS1 Мое мнение смешивать в одном запросе и параметры sql
и УстановитьТекстовыйПараметр абсолютно неправильно.
Пользуйтесь только чем то одним.
Как бы 0 можно оправдать что это тестовый пример.