Имя: Пароль:
1C
1С v8
(8.2) sql-запрос из 1С - вызов процедуры и селект в одном запросе
0 vechiy
 
06.12.12
12:45
Вот, столкнулся со следующей проблемой:

Выполняю запросец:
                       СтрокаSQL = "DECLARE @RC int
                               |DECLARE @Staff_Id int
                               |DECLARE @dtOut datetime
                               |DECLARE @Text nvarchar(max)
                               |DECLARE @Type_Oper int
                               |DECLARE @dtIn datetime
                               |DECLARE @Res int
                               |
                               |SET @Staff_Id = 'param1'
                               |SET @dtOut = 'param2'
                               |SET @Text = 'param3'
                               |SET @Type_Oper = '2'
                               |SET @dtIn = ''
                               |
                               |EXECUTE @RC = [name]
                               |   @Staff_Id
                               |  ,@dtOut
                               |  ,@Text
                               |  ,@Type_Oper
                               |  ,@dtIn
                               |  ,@Res OUTPUT
                               | select @Res";

                                     
                       Recordset.Open(СтрокаSQL,SQLConnection,2,4);    
                       Recordset.MoveFirst();
                       
                       
//код состояния исполнения запроса
                           Сообщить(Recordset.Fields("@Res").Value);
                           Recordset.MoveNext();
                       
                       
                       SQLConnection.Close();


Проблема в том, что не удается получить Recordset.Fields("@Res").Value при вызове запроса из 1С. В студии все отлично работает. В 1С без обращения к записям тоже все работает (и селект в том числе)

Ошибка следующая:
Ошибка при выполнении обработчика - 'ОбработкаПроведения'
по причине:
{ОбщийМодуль.ОграничениеДоступа.Модуль(484)}: Ошибка при вызове метода контекста (Fields)

по причине:
Произошла исключительная ситуация (ADODB.Recordset): В коллекции не удается найти элемент, соответствующий требуемому имени или порядковому номеру.
1 vechiy
 
06.12.12
12:46
Проблема, мне кажется, в том, что @Res - это параметр. Интересует, возможно ли в принципе его получить? Или что я делаю не так?
2 Maxus43
 
06.12.12
12:48
незнаю в чем проблема, но знаю что это нарушение лицензионного соглашения. в турму!
3 МихаилМ
 
06.12.12
12:53
как минимум обернать в set nocount (читать доки)

и

select @Res as Res
4 vechiy
 
06.12.12
13:17
(3)
Сработало, спасибо
Но на похожем запросе не помогает:

   СтрокаSQL = "DECLARE @RC int
                                   |    DECLARE @Staff_Id int
                                   |    DECLARE @Type_Oper int
                                   |    DECLARE @Res int
                                    |
                                   |    SET @Staff_Id = ''
                                   |    SET @Type_Oper = '2'
                                    |
                                   |    EXECUTE @RC = [name]
                                   |       @Staff_Id
                                   |      ,@Type_Oper
                                   |      ,@Res
                                    |
                                   |    -- Возвращаемые значения
                                   |
                           
                                   | select @Res as Res";

Ошибка та же, Произошла исключительная ситуация (ADODB.Recordset): В коллекции не удается найти элемент, соответствующий требуемому имени или порядковому номеру.
5 Sammo
 
06.12.12
13:24
(4) проверь на пустой рекордсет.
Например
Если RecordSet.EOF() Тогда    
   RecordSet.Close();
   Возврат;
КонецЕсли;
6 vechiy
 
06.12.12
13:29
нет, тут, походу, проблема в запросе который вызывается в процедуре)

а рекордсет тут пустым быть не может вроде как
7 Sammo
 
06.12.12
13:33
+ в 4 на Res нет output - это правильно?
8 vechiy
 
06.12.12
14:44
(7) вот это как раз неправильно, переделывают запросец