Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Горячая тема (более 10 ответов) Помогите со Скалярным запросом! (число прочтений - 7957 )
DangerWulf
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 21
Зарегистрирован: 26. Июля 2007
Помогите со Скалярным запросом!
03. Апреля 2008 :: 06:13
Печать  
Есть Запрос

Процедура ПриОткрытии()    
     Есть1срр = 1;
     Попытка
         RS = СоздатьОбъект("ODBCRecordset");
     Исключение   
           Есть1срр = 0;
           Возврат;
     КонецПопытки;   
           //Есть1срр = 0;
    ТекстЗапроса = "
     |@Документ = ?
     //|@ВыбранДата = ?
     |SELECT ПартииНаличиеОстатки.КоличествоОстаток
     |      , ПартииНаличиеОстатки.Партия [Партия $Справочник.Партии]
     |FROM $РегистрОстатки.ПартииНаличие(,,
     |            (Партия IN (SELECT $РеализацияСтроки.Партия 
     |            FROM $ДокументСтроки.Реализация AS РеализацияСтроки
     |            WHERE (РеализацияСтроки.IDDOC = @Документ)
     |                  AND ($РеализацияСтроки.Партия <> $ПустойИд)
     |            GROUP BY $РеализацияСтроки.Партия)),
     |            Партия,
     |            Количество) AS ПартииНаличиеОстатки 
     |WHERE (ПартииНаличиеОстатки.КоличествоОстаток < 0)
     |";
     RS.Подготовить(ТекстЗапроса);
     RS.ПостроитьПараметры();   
     RS.Отладка(1);   
КонецПроцедуры

и функция которая срабатывает на текущий документ журнала

Функция ПроверкаРаспределенияПартий()   
     Перем Проверка;
     
     Если (ТекущийДокумент.Вид() <> "Реализация") ИЛИ (ТекущийДокумент.Проведен() = 0) ИЛИ (Есть1срр = 0)  Тогда
           Возврат "";
     КонецЕсли;                                                                              
     //      
     //Позиция = СформироватьПозициюДокумента(ТекущийДокумент,1);
     //Сообщить("Документ - "+Строка(ТекущийДокумент)+" и его позиция "+Строка(Позиция),"!!!");
    RS.УстПараметр(1, ТекущийДокумент);
    //RS.УстПараметр(2, СформироватьПозициюДокумента(ТекущийДокумент,1));
    Проверка =  RS.ВыполнитьСкалярный();
     Если ТипЗначенияСтр(Проверка) = "ТаблицаЗначений" Тогда
           Проверка.ВыбратьСтроку();      
     КонецЕсли;
КонецФункции                        
  
Наверх
 
IP записан
 
DangerWulf
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 21
Зарегистрирован: 26. Июля 2007
Re: Помогите со Скалярным запросом!
Ответ #1 - 03. Апреля 2008 :: 06:15
Печать  
при этом вываливается вот такая ошибка

Проверка =  RS.ВыполнитьСкалярный();
{Журнал.ДокументыПоПокупателям.Форма.ФормаСписка.Модуль(77)}: State 07009, native 0, message [Microsoft][ODBC SQL Server Driver]Недопустимый индекс дескриптора
  
Наверх
 
IP записан
 
sadovnikov
1c++ power user
Отсутствует


I Love YaBB 2!

Сообщений: 420
Зарегистрирован: 06. Марта 2007
Re: Помогите со Скалярным запросом!
Ответ #2 - 03. Апреля 2008 :: 06:26
Печать  
DangerWulf писал(а) 03. Апреля 2008 :: 06:15:
при этом вываливается вот такая ошибка

Проверка =  RS.ВыполнитьСкалярный();
{Журнал.ДокументыПоПокупателям.Форма.ФормаСписка.Модуль(77)}: State 07009, native 0, message [Microsoft][ODBC SQL Server Driver]Недопустимый индекс дескриптора


А в кверюге запрос выполняется на ура? Сегодня с такой же ошибкой столкнулся...
Победил только выполнением запроса не через 1С++, а RiK_SQL Печаль
И тоже весьма сильно интересуюсь, как ее все-таки победить нормально...
  
Наверх
 
IP записан
 
DangerWulf
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 21
Зарегистрирован: 26. Июля 2007
Re: Помогите со Скалярным запросом!
Ответ #3 - 03. Апреля 2008 :: 06:40
Печать  
неа Печаль вот что выдает вкери анализ
Server: Msg 137, Level 15, State 2, Line 1
Must declare the variable '@DocX'.
Server: Msg 137, Level 15, State 1, Line 15
Must declare the variable '@DocX'.
Server: Msg 137, Level 15, State 1, Line 28
Must declare the variable '@DocX'.
  
Наверх
 
IP записан
 
DangerWulf
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 21
Зарегистрирован: 26. Июля 2007
Re: Помогите со Скалярным запросом!
Ответ #4 - 03. Апреля 2008 :: 06:49
Печать  
     |SELECT ПартииНаличиеОстатки.КоличествоОстаток
     |      , ПартииНаличиеОстатки.Партия [Партия $Справочник.Партии]
     |FROM $РегистрОстатки.ПартииНаличие(,,
     |            (Партия IN (SELECT $РеализацияСтроки.Партия 
     |            FROM $ДокументСтроки.Реализация AS РеализацияСтроки
     |            WHERE ($РеализацияСтроки.Партия <> ?)
     |                  AND (РеализацияСтроки.IDDOC = ?)
     |            GROUP BY $РеализацияСтроки.Партия)),
     |            Партия,
     |            Количество) AS ПартииНаличиеОстатки 
     |WHERE (ПартииНаличиеОстатки.КоличествоОстаток < 0)
так пишет что количество параметров 1
  
Наверх
 
IP записан
 
U_zer
Экс-Участник


Re: Помогите со Скалярным запросом!
Ответ #5 - 03. Апреля 2008 :: 08:09
Печать  
У тебя так работать не будет. Почитай в учебнике из доки.
Надо использовать declare  с описанием типов переменных.
  
Наверх
 
IP записан
 
DangerWulf
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 21
Зарегистрирован: 26. Июля 2007
Re: Помогите со Скалярным запросом!
Ответ #6 - 03. Апреля 2008 :: 09:35
Печать  
А можешь подсказать как надо?
  
Наверх
 
IP записан
 
DangerWulf
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 21
Зарегистрирован: 26. Июля 2007
Re: Помогите со Скалярным запросом!
Ответ #7 - 03. Апреля 2008 :: 10:01
Печать  
     |DECLARE @Документ varchar(9)
     |, @ВыбранДата varchar(9)
     |SET @ВыбранДата = ?
     |SET @Документ =  ?
     |SELECT COUNT(ПартииНаличиеОстатки.КоличествоОстаток)
     //|      , ПартииНаличиеОстатки.Партия [Партия $Справочник.Партии]
     |FROM $РегистрОстатки.ПартииНаличие(,,
     |            (Партия IN (SELECT $РеализацияСтроки.Партия 
     |            FROM $ДокументСтроки.Реализация AS РеализацияСтроки
     |            WHERE ($РеализацияСтроки.Партия <> $ПустойИД)
     |                  AND (РеализацияСтроки.IDDOC = @Документ)
     |            GROUP BY $РеализацияСтроки.Партия)),
     |            Партия,
     |            Количество) AS ПартииНаличиеОстатки 
     |WHERE (ПартииНаличиеОстатки.КоличествоОстаток < 0)
     |";   

все ровно пишет что недопустимый индекс дескриптора
  
Наверх
 
IP записан
 
U_zer
Экс-Участник


Re: Помогите со Скалярным запросом!
Ответ #8 - 04. Апреля 2008 :: 04:57
Печать  
1) Зачем varchar? char(9)
2) Где переменная @ВыбранДата? И почему varchar а не DateTime?
3) Попробуй вместо @Документ использовать @Док
4) Как ты устанавливаешь параметры? Используй вместо ПосторитьПараметры() ДобПараметр()
  
Наверх
 
IP записан
 
DangerWulf
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 21
Зарегистрирован: 26. Июля 2007
Re: Помогите со Скалярным запросом!
Ответ #9 - 04. Апреля 2008 :: 11:27
Печать  
Сделал через ДобПараметр(2,14,9,,);
теперь при попытке выполнить скалярно ругается на текст запроса ищет SELECT
  
Наверх
 
IP записан
 
U_zer
Экс-Участник


Re: Помогите со Скалярным запросом!
Ответ #10 - 04. Апреля 2008 :: 11:37
Печать  
А что такое 2 в ДобПараметр() ты читал?
  
Наверх
 
IP записан
 
DangerWulf
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 21
Зарегистрирован: 26. Июля 2007
Re: Помогите со Скалярным запросом!
Ответ #11 - 04. Апреля 2008 :: 11:51
Печать  
Синтаксис:
ДобПараметр(<IOType>,<nSQLType>,<nLen>,<nDec>,<pname>)
Назначение:
добавляет описание параметра для параметризированного запроса.
Параметры:
<IOType> - (Число)  * 1 - SQL_PARAM_INPUT
* 2 - SQL_PARAM_OUTPUT
* 3 - SQL_PARAM_INPUT_OUTPUT
<nSQLType> - (Число)  * 1  - SQL_BIT
* 2  - SQL_TINYINT
* 3  - SQL_SMALLINT
* 4  - SQL_INTEGER
* 5  - SQL_REAL
* 6  - SQL_FLOAT
* 7  - SQL_DOUBLE
* 8  - SQL_TYPE_DATE
* 9  - SQL_TYPE_TIME
* 10 - SQL_TYPE_TIMESTAMP
* 11 - SQL_NUMERIC
* 12 - SQL_DECIMAL
* 13 - SQL_BIGINT
* 14 - SQL_CHAR
* 15 - SQL_VARCHAR
* 16 - SQL_LONGVARCHAR
* 17 - SQL_BINARY
* 18 - SQL_VARBINARY
* 19 - SQL_LONGVARBINARY
<nLen> - (Число)  длина
<nDec> - (Число)  точность
<pname> - (Строка)  Необязательный параметр.   именованный параметр вида Par1, необязательный параметр.

1- пробовал ставить база падает Печаль((((
  
Наверх
 
IP записан
 
U_zer
Экс-Участник


Re: Помогите со Скалярным запросом!
Ответ #12 - 04. Апреля 2008 :: 12:15
Печать  
Тип базы?
Приведи полный текст запроса и его выполнения.
  
Наверх
 
IP записан
 
varelchik
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 788
Зарегистрирован: 22. Мая 2006
Re: Помогите со Скалярным запросом!
Ответ #13 - 04. Апреля 2008 :: 19:11
Печать  
Вообще-то ВыполнитьСкалярный()
штука очен опасная!
я на себе прочувствовал.
особенно когад ее используешь скаже на ворме списка справочника (это было в моем случае) выдавало что-то типа htms или тому подобного.
посему решил отказать и получать ТЗ с одной строкой и обрабатыыать уже ее.
Могу и ошибаться.
  
Наверх
 
IP записан
 
U_zer
Экс-Участник


Re: Помогите со Скалярным запросом!
Ответ #14 - 05. Апреля 2008 :: 08:24
Печать  
Ну, по крайней мере, top 1 спасает в любом случае.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать