Имя: Пароль:
1C
 
ХП позвращает нул в параметре
0 vde69
 
03.04.17
13:23
создал хранимку на скуле

ALTER PROCEDURE [dbo].[Get_CRC_Import_Document]
    @IDSession char(200), -- Сеансовый ключ
    @KeyHost char(200),   -- Имя узла в который отправляли данные
    @KeyObject char(200), -- Идентификатор объекта
    @KeyOk int OUTPUT     -- Возвращает 0 если все хорошо и -1 если сеансовый ключ не подошел
WITH EXECUTE AS CALLER
AS
BEGIN

   SELECT @KeyOk=6;

END


из 1с вызываю

        Command = Новый COMОбъект("ADODB.Command");
        Command.CommandTimeout = 100;
        Command.ActiveConnection = ПараметрыСеансаОбмена.COMОбъектSQL;
        
        // Получаем CRC ранее отправленого объекта
        Command.CommandType = 4;
        Command.Parameters.Append(Command.CreateParameter("IDSession",  129, 1, 200, ПараметрыСеансаОбмена.СеансовыйКлюч));                                
        Command.Parameters.Append(Command.CreateParameter("KeyHost",    129, 1, 200, СокрЛП(Объект.Код)));                                
        Command.Parameters.Append(Command.CreateParameter("KeyObject",  129, 1, 200, "e1cib/data/Документ.ПриходныйКассовыйОрдер?ref=aa29001e67078ba411e7025ea8da7e69"));                                
        Command.Parameters.Append(Command.CreateParameter("KeyOk",      3,   2));                                
        
        стрЗапрос = "Get_CRC_Import_Document";
        Command.CommandText = стрЗапрос;
        
        RecordSet = Command.Execute(стрЗапрос);
        а=Command.Parameters("KeyOk").Value;


вроде все должно работать, а "а" всегда null.
где напутал?
1 youalex
 
03.04.17
13:33
Параметры правильно указаны?
вот отсюда https://msdn.microsoft.com/ru-ru/library/ms677209(v=vs.85).aspx

Set
parameter = command.CreateParameter (Name, Type, Direction, Size, Value)

Direction = 3
2 vde69
 
03.04.17
13:42
Direction = 3 - не работает, ошибка вызова ХП

= 2 или 4 ХП работает, но возвращает NULL

хотя аналогичный вызов с текстовым параметром работает (другая ХП)
3 vde69
 
03.04.17
14:39
прочитал

>>>Если уж вы открыли рекордсет, возвращаемый из процедуры, то придется сначала его закрыть. Только после этого станут доступны output/return параметры


хм.... буду думать...
4 youalex
 
03.04.17
19:28
вообще странно, у меня  - этот код  работает, в смысле Command.Parameters("KeyOk").Value -  не NULL
5 vde69
 
04.04.17
08:59
дело в следующей строчке, вот так НЕ работает

RecordSet = Command.Execute(стрЗапрос);


а вот так Работает

Command.Execute(стрЗапрос);


для себя перешел на генерацию ошибок, мне этот вариант больше подходит

ALTER PROCEDURE  [dbo].[Get_CRC_Import_Object]  
    @IDSession char(200), -- Сеансовый ключ
    @KeyHost char(200),   -- Имя узла в который отправляли данные
    @KeyObject char(200)  -- Идентификатор объекта
WITH EXECUTE AS CALLER
AS
BEGIN
    DECLARE    @IDSource int
    SELECT @IDSource = ID_Source FROM CurrentSession WHERE (CurrentSession.IDSesion = @IDSession AND CurrentSession.MSid = @@SPID)
    IF @IDSource IS NULL RAISERROR ('ERROR ID SESSION', 18, 1);
    SELECT Doc1c.CRC_Out, Doc1c.Processed, Doc1c.DataProcessed FROM Doc1c WHERE (Doc1c.ID_Source = @IDSource AND Doc1c.KeyDocSource = @KeyObject)
END
2 + 2 = 3.9999999999999999999999999999999...