Переключение на Главную Страницу Страницы: 1 [2]  ОтправитьПечать
Очень популярная тема (более 25 ответов) Ошибка: "Недопустимое значение индекса параметра". (число прочтений - 12879 )
chicago
Senior Member
****
Отсутствует


1C++, I have nothing to
say more!

Сообщений: 316
Местоположение: Тернополь-Киев
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Ошибка: "Недопустимое значение индекса парамет
Ответ #15 - 24. Июля 2006 :: 11:58
Печать  
Сделал:
1.
Код
Выбрать все
SQLSes.Подготовить(ТекстЗапроса);
SQLSes.ДобПараметр(1, 14, 9, 0);
SQLSes.ДобПараметр(1, 14, 9, 0);  


2.
Код
Выбрать все
SQLSes.Закрыть(); 


Убрал вообще.
Ничего не помогло... Печаль
Где еще рыть?
  
Наверх
ICQ  
IP записан
 
U_zer
Экс-Участник


Re: Ошибка: "Недопустимое значение индекса парамет
Ответ #16 - 24. Июля 2006 :: 13:10
Печать  
В качестве эксперимента, попробуй обозвать эту переменную как-ньть уникально для конфы.
И еще, ТекстЗапроса - переменная, которая, конечно же используется только для данного запроса, и больше нигде в контексте модуля, не так ли?
  
Наверх
 
IP записан
 
chicago
Senior Member
****
Отсутствует


1C++, I have nothing to
say more!

Сообщений: 316
Местоположение: Тернополь-Киев
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Ошибка: "Недопустимое значение индекса парамет
Ответ #17 - 24. Июля 2006 :: 13:22
Печать  
Цитата:
В качестве эксперимента, попробуй обозвать эту переменную как-ньть уникально для конфы.
И еще, ТекстЗапроса - переменная, которая, конечно же используется только для данного запроса, и больше нигде в контексте модуля, не так ли?


1. В качестве переменной имеется ввиду - "SQLSes"? Я правильно понял?
2. Переменная, "ТекстЗапроса" которая есть самим текстом запроса в "этом" модуле используеться только для "этого" запроса. Но в конфигурации переменная "ТекстЗапроса" используэться очень много раз это 100%.
  
Наверх
ICQ  
IP записан
 
U_zer
Экс-Участник


Re: Ошибка: "Недопустимое значение индекса парамет
Ответ #18 - 24. Июля 2006 :: 13:31
Печать  
Да, SqlSess замени на SqlSess125, например.

ТекстЗапроса - локальная в процедуре создания запроса или локальная в модуле или вообще глобальная?
  
Наверх
 
IP записан
 
U_zer
Экс-Участник


Re: Ошибка: "Недопустимое значение индекса парамет
Ответ #19 - 24. Июля 2006 :: 13:46
Печать  
Короче, объяви эти 2 переменные локально в данном модуле и проследи чтобы они использовались только для данного запроса.
  
Наверх
 
IP записан
 
chicago
Senior Member
****
Отсутствует


1C++, I have nothing to
say more!

Сообщений: 316
Местоположение: Тернополь-Киев
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Ошибка: "Недопустимое значение индекса парамет
Ответ #20 - 24. Июля 2006 :: 15:27
Печать  
Цитата:
Короче, объяви эти 2 переменные локально в данном модуле и проследи чтобы они использовались только для данного запроса.


Так и сделал. Буду смотреть...
А следить нечего, эти бве переменные теперь уникальные в конфигурации, соответственно есть только в этом модуле. В модуле используется только этот запрос.
  
Наверх
ICQ  
IP записан
 
DrACe
1c++ donor
1c++ power user
Отсутствует


1С++ любитель

Сообщений: 447
Местоположение: г. Новосибирск
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Ошибка: "Недопустимое значение индекса парамет
Ответ #21 - 25. Июля 2006 :: 02:26
Печать  
пора уже текст запроса смотреть, раз ничего не помогает
  
Наверх
 
IP записан
 
U_zer
Экс-Участник


Re: Ошибка: "Недопустимое значение индекса парамет
Ответ #22 - 25. Июля 2006 :: 05:15
Печать  
Да! Публика требует зрелищ.

Хотя, ИМХО, исчезновение параметров все же не может быть связано с текстом запроса.
У меня была такая беда, но исключительно из-за поспешного закрытия запроса.
В принципе, у меня был глюк такой: Открываешь форму справочника с запросом (единственное что, не с
параметризированным.),
потом открываешь документ, в нем подбор - > еще одна форма того же справочника.
И вот на каком-то этапе переключения окон, умирала то - ли переменная с рекордсетом,
то-ли переменная с запросом. и вываливалась ошибка.
1С приходилось перестартовывать.
Но в последнее время такая беда как-то пропала.
То ли из-за того, что я переписал на параметризированный запрос, то ли в самой 1С++ был баг, фиг его знает ... 
Сейчас использую V. 2.0.3.0 NB 2006-06-17.
Еще, если эта ошибка только у одного юзера, проверь у него сеть.
  
Наверх
 
IP записан
 
chicago
Senior Member
****
Отсутствует


1C++, I have nothing to
say more!

Сообщений: 316
Местоположение: Тернополь-Киев
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Ошибка: "Недопустимое значение индекса парамет
Ответ #23 - 25. Июля 2006 :: 07:07
Печать  
После полной замены указаных переменных на "абсолютно" уникальные в пределах целой конфигурации ничего так и не произошло, о чем и вам хочу сообщитиь.
Раз у ж публика хочет я должен.
Итак:
1.
Код
Выбрать все
// ===============================
Перем SQLRes, СтрКон, ФлГЗаР;

// ===============================
Функция СформуватиІнформаційнуСтрічку(ТекВик)
	Возврат ТекВик + ", " + СтрКон;
КонецФункции // СформуватиІнформаційнуСтрічку()

// ===============================
Процедура ПідготуватиЗапитПоРезервах()

	ТеПЗап = "
	|-- " + СформуватиІнформаційнуСтрічку("ОтриматиЗведенийЗалишокПоРезервах") + "

	|DECLARE @ВибТов CHAR(9), @ВибСкл CHAR(9)

	|SET @ВибТов = ?
	|SET @ВибСкл = ?

	|SELECT

	|КвоОстаток [КіЗКво $Число]

	|FROM $РегистрОстатки.ПланыПотребностейСырья(
	|,
	|,
	|(ВидПотребности = 0) AND (Склад = @ВибСкл) AND (Номенклатура = @ВибТов),
	|Номенклатура,
	|Кво) AS ППСПоР

	|";

	SQLRes.Подготовить(ТеПЗап);

	SQLRes.ДобПараметр(1, 14, 9, 0);
	SQLRes.ДобПараметр(1, 14, 9, 0);

	ФлГЗаР = 1;		// признак готовності запиту по резервах

КонецПроцедуры // ПідготуватиЗапитПоРезервах()

// ===============================
Функция ОтриматиЗведенийЗалишокПоРезервах(ВибТов, ВибСкл)
	Состояние("Роблю запит до бази даних (по резервах)...");

	SQLRes.УстПараметр(1, ВибТов);
	SQLRes.УстПараметр(2, ВибСкл);

	Возврат SQLRes.ВыполнитьСкалярный();
КонецФункции // ОтриматиЗведенийЗалишокПоРезервах() 


2. Процедура "ПідготуватиЗапитПоРезервах()" вызывается при изменение флажка на форме. Функция "ОтриматиЗведенийЗалишокПоРезервах()" расчитывает остаток для одной из колонок на форме.
3. И тут возникает вопрос/разгадка, а может это действительно:
а). Мы кликаем на флажок, который бы должен сначала запустить ПідготуватиЗапитПоРезервах()... Но вероятней всего, что "ОтриматиЗведенийЗалишокПоРезервах()" виполняется (запускается) быстрее типа опережает ПідготуватиЗапитПоРезервах().
б). Почему это произходить не всегда.
в). Как это обойти.
  
Наверх
ICQ  
IP записан
 
DrACe
1c++ donor
1c++ power user
Отсутствует


1С++ любитель

Сообщений: 447
Местоположение: г. Новосибирск
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Ошибка: "Недопустимое значение индекса парамет
Ответ #24 - 25. Июля 2006 :: 08:46
Печать  
используй переменную-флаг готовности запита... эээ... который не дает делать "Отримати" во время "Підготувати" запита на сервере
типа того:
Код
Выбрать все
// ===============================
Перем SQLRes, СтрКон, ФлГЗаР;

// ===============================
Функция СформуватиІнформаційнуСтрічку(ТекВик)
Возврат ТекВик + ", " + СтрКон;
КонецФункции // СформуватиІнформаційнуСтрічку()

// ===============================
Процедура ПідготуватиЗапитПоРезервах()

ТеПЗап = "
|-- " + СформуватиІнформаційнуСтрічку("ОтриматиЗведенийЗалишокПоРезервах") + "

|DECLARE @ВибТов CHAR(9), @ВибСкл CHAR(9)

|SET @ВибТов = ?
|SET @ВибСкл = ?

|SELECT

|КвоОстаток [КіЗКво $Число]

|FROM $РегистрОстатки.ПланыПотребностейСырья(
|,
|,
|(ВидПотребности = 0) AND (Склад = @ВибСкл) AND (Номенклатура = @ВибТов),
|Номенклатура,
|Кво) AS ППСПоР

|";
ФлГЗаР = 0;// признак готовності запиту по резервах
SQLRes.Подготовить(ТеПЗап);

SQLRes.ДобПараметр(1, 14, 9, 0);
SQLRes.ДобПараметр(1, 14, 9, 0);

ФлГЗаР = 1;// признак готовності запиту по резервах

КонецПроцедуры // ПідготуватиЗапитПоРезервах()

// ===============================
Функция ОтриматиЗведенийЗалишокПоРезервах(ВибТов, ВибСкл)
Если ФлГЗаР = 0 Тогда
Вовзрат "";
КонецЕсли;
Состояние("Роблю запит до бази даних (по резервах)...");

SQLRes.УстПараметр(1, ВибТов);
SQLRes.УстПараметр(2, ВибСкл);

Возврат SQLRes.ВыполнитьСкалярный();
КонецФункции // ОтриматиЗведенийЗалишокПоРезервах()  

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


1C++, I have nothing to
say more!

Сообщений: 316
Местоположение: Тернополь-Киев
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Ошибка: "Недопустимое значение индекса парамет
Ответ #25 - 25. Июля 2006 :: 12:30
Печать  
Сделал, кажется, еще проще изменил функцию "ОтриматиЗведенийЗалишокПоРезервах()" так:
Код
Выбрать все
	Состояние("Роблю запит до бази даних (по резервах)...");

	Если SQLRes.КолвоПараметров() <> 2 Тогда
		ПідготуватиЗапитПоРезервах();
	КонецЕсли;

	SQLRes.УстПараметр(1, ВибТов);
	SQLRes.УстПараметр(2, ВибСкл);

	Возврат SQLRes.ВыполнитьСкалярный();
 


Уже пол дня вроде небыло ошибок... Нерешительный
  
Наверх
ICQ  
IP записан
 
Переключение на Главную Страницу Страницы: 1 [2] 
ОтправитьПечать