|
|
|
Вызов хранимой процедуры
|
|||
|---|---|---|---|
|
#18+
Всем, здравствуйте!!! Помогите разобраться, пытаюсь из внешней обработки (платформа 1С:Бухгалтерия 8.1) вызвать хранимую процедуру (MS SQL Server 2008). При попытке обратиться к результатам выдает ошибку, что объект закрыт. Пробовал вызывать без параметров (т.к. есть значения по умолчанию) - такая же проблема. Просматривал в дебагере свойства объекта RecordSet - есть поля со значением "Ошибка чтения". Запросы выполняю без проблем, а с хронимкой возникли проблемы. Помогите. Параметры хранимки следующие: ALTER PROCEDURE [dbo].[CR_Buh_Block_Otchet] ( @us int = 1, @login nvarchar(50) = 'SERVER\sasha5', @serviceDate DateTime='01.01.2010', @registerType int = -1, -- "0" - регистр "Рассчитанные услуги", "1" - регистр "Бухгалтерские документы" @dateList varchar(max)='13.05.2010' Вызов хранимки делаю так: RecordSet = Новый COMОбъект("ADODB.RecordSet"); Command.ActiveConnection = Connection; Command.CommandText = "CR_Buh_Block_Otchet"; Command.CommandType = 4; adInteger = 3; adVarChar = 200; adDate = 7; adParamInput = 1; Param1 = Command.CreateParameter("@us", adInteger, adParamInput, 4, 1); Command.Parameters.Append(Param1); Param2 = Command.CreateParameter("@login", adVarChar, adParamInput, 50, "SMOLENSK\polyak_gg"); Command.Parameters.Append(Param2); Param3 = Command.CreateParameter("@serviceDate", adDate, adParamInput, 4, "01.01.2010"); Command.Parameters.Append(Param3); Param4 = Command.CreateParameter("@registerType", adInteger, adParamInput, 4, 1); Command.Parameters.Append(Param4); Param5 = Command.CreateParameter("@dateList", adVarChar, adParamInput, 500, "20100513"); Command.Parameters.Append(Param5); RecordSet = Command.Execute(); Пока RecordSet.EOF() = 0 Цикл счетчик = счетчик + 1; Сообщить(счетчик ); RecordSet.MoveNext(); КонецЦикла; Спасибо за помощь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2010, 12:21 |
|
||
|
Вызов хранимой процедуры
|
|||
|---|---|---|---|
|
#18+
Дополню: параметр хранимки @dateList - одна дата, либо строка дат, разделенных запятыми. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2010, 12:23 |
|
||
|
Вызов хранимой процедуры
|
|||
|---|---|---|---|
|
#18+
Gennadiy83, А из SSMS процедура выдает данные? Если да, то, не видел текста процедуры, но скорее всего, процедура возвращает несколько выходных наборов, первый из которых пустой. Варианты несколько: 1. set nocount on в начало процедуры. Может помочь (убирает служебные сообщения, порождающие выходные наборы). 2. Более универсальный, листаем выходные наборы: Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2010, 19:52 |
|
||
|
Вызов хранимой процедуры
|
|||
|---|---|---|---|
|
#18+
Gennadiy83, кстати RecordSet = Новый COMОбъект("ADODB.RecordSet"); <..> RecordSet = Command.Execute(); это небольшая тупишка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2010, 11:25 |
|
||
|
Вызов хранимой процедуры
|
|||
|---|---|---|---|
|
#18+
VladimirKrGennadiy83, А из SSMS процедура выдает данные? Если да, то, не видел текста процедуры, но скорее всего, процедура возвращает несколько выходных наборов, первый из которых пустой. Варианты несколько: 1. set nocount on в начало процедуры. Может помочь (убирает служебные сообщения, порождающие выходные наборы). 2. Более универсальный, листаем выходные наборы: Код: plaintext 1. 2. 3. Огромное спасибо! Использовал set nocount on и проблема решилась. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2010, 14:53 |
|
||
|
|

start [/forum/topic.php?fid=28&msg=36804611&tid=1522089]: |
0ms |
get settings: |
10ms |
get forum list: |
21ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
212ms |
get topic data: |
11ms |
get forum data: |
6ms |
get page messages: |
61ms |
get tp. blocked users: |
2ms |
| others: | 251ms |
| total: | 582ms |

| 0 / 0 |
