Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 7.7 и ранее

v7: Ругается "Недопустимое значение индекса параметра"

v7: Ругается "Недопустимое значение индекса параметра"
Я
   zenon46
 
28.09.21 - 16:27
Доброго дня!
Почему ругается при выполнении скалярного : сам запрос
|@Товар = ?
|SELECT
|    Рег.КоличествоОстаток AS Резервы
|FROM
|    $РегистрОстатки.РезервыТМЦ(:ВыбДата~,,Фирма = :ВбрФирма AND Номенклатура = @Товар,(Номенклатура),(Количество)) AS Рег
|";    
RS_1.УстановитьТекстовыйПараметр("ВбрФирма",глКонстанта("ФирмаОсновногоСклада"));    
RS_1.УстановитьТекстовыйПараметр("ДатаТА",ПолучитьДатуТА());    
RS_1.Подготовить(ТекстЗапроса);
RS_1.ПостроитьПараметры();

Далее в функции вызываю :
Товар - ссылка на элемент справочника "Номенклатура"

RS_1.УстПараметр(1,Товар);    
КолРез = RS_1.ВыполнитьСкалярный();
   ДенисЧ
 
1 - 28.09.21 - 16:36
   zenon46
 
2 - 28.09.21 - 16:43
(1)     так тоже не стартует
        |SET NoCount ON
    |DECLARE @Товар Char(9)
    |Set @Товар = ?
    |SELECT
    |    Рег.КоличествоОстаток AS Резервы
    |FROM
    |    $РегистрОстатки.РезервыТМЦ(:ВыбДата~,,Фирма = :ВбрФирма AND Номенклатура = @Товар,(Номенклатура),(Количество)) AS Рег
    |";    
    RS_1.Подготовить(ТекстЗапроса);    
    RS_1.ПостроитьПараметры();
    RS_1.УстановитьТекстовыйПараметр("ВбрФирма",глКонстанта("ФирмаОсновногоСклада"));    
    RS_1.УстановитьТекстовыйПараметр("ВыбДата",ПолучитьДатуТА());
   Chai Nic
 
3 - 28.09.21 - 16:46
Не выеживайся и делай через текстовый параметр.
   zenon46
 
4 - 28.09.21 - 16:46
Раньше был такой, он работал, а вот с ВТ что-то не получается запустить

|SELECT
|    SUM($Рег.Количество) as Количество
|FROM
|   $РегистрИтоги.РезервыТМЦ as Рег
|WHERE
|  Рег.PERIOD = cast($НачалоПериода.Месяц(:ДатаТА,Строка) as datetime) AND
|  $Рег.Номенклатура = ? AND
|  $Рег.Фирма = :ВбрФирма
|";
   trad
 
5 - 28.09.21 - 18:02
вместо ПостроитьПараметры() попробуй явно ДобПараметр(1, 14, 9, 0)
   zenon46
 
6 - 28.09.21 - 18:10
(5) как понимать эту запись ? "ДобПараметр(1, 14, 9, 0)"
   Mikeware
 
7 - 28.09.21 - 18:21
(6) ДобПараметр / AddParam
Синтаксис: ДобПараметр(IOType, DBType, Len, Prec)

Параметры:
IOType - тип: Число. Направления параметра:

1 - DBPARAMIO_INPUT;
2 - DBPARAMIO_OUTPUT;
3 - DBPARAMIO_INPUT | DBPARAMIO_OUTPUT.
DBType - тип: Число. DBTYPE-тип параметра.

Len - тип: Число. Длина параметра.

Prec - тип: Число. Точность параметра.

Описание: добавляет описание параметра для параметризированного запроса.
   trad
 
8 - 28.09.21 - 18:33
миста - внештатная справка
   Ёпрст
 
9 - 28.09.21 - 18:51
нахрена только ТС параметизированный запрос - загадка..
Или он это чудо в цикле выполнять собрался ?
)))
   zenon46
 
10 - 28.09.21 - 18:53
(9) да отображение резерва в ТЧ документа
   Ёпрст
 
11 - 28.09.21 - 19:00
(10) получай для всех строк тч один раз останки и потом ищи их в итз
   Ёпрст
 
12 - 28.09.21 - 19:01
+ или по кнопке или по таймеру обновление итз
   zenon46
 
13 - 28.09.21 - 19:17
Запрос запустился, вот только на выходе 0, что не правильно ?


    |Set NOCOUNT ON
        |Declare @Товар VarChar(9)    
    |Set @Товар = ?
    |SELECT
    |    Рег.КоличествоОстаток AS Резервы
    |FROM
    |    $РегистрОстатки.РезервыТМЦ(:ВыбДата~,,Фирма = :ВбрФирма AND Номенклатура = @Товар,(Номенклатура),(Количество)) AS Рег
    |";
    RS_1.УстановитьТекстовыйПараметр("ВыбДата",ПолучитьДатуТА());
    RS_1.УстановитьТекстовыйПараметр("ВбрФирма",глКонстанта("ФирмаОсновногоСклада"));    
    RS_1.ДобПараметр(1,10,17,0);
        RS_1.ДобПараметр(1,14,9,0);
    RS_1.ДобПараметр(1,14,9,0);
    RS_1.Подготовить(ТекстЗапроса);    
       RS_1.УстПараметр(1,ПолучитьДатуТА());
       RS_1.УстПараметр(2,глКонстанта("ФирмаОсновногоСклада"));
        RS_1.УстПараметр(3,Товар);     
        КолРез = RS_1.ВыполнитьСкалярный();
   zenon46
 
14 - 28.09.21 - 19:26
Последние 2 строки, вызываются через функцию, я для удобства чтения объединил.
   zenon46
 
15 - 28.09.21 - 19:46
Все ребзо, разобрался, спасибо за наводку!

Список тем форума
 
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.