1c7. Com-объекты

Тема в разделе "1C и всё что с ней связано", создана пользователем KiR, 10 ноя 2008.

  1. KiR

    KiR НЕ шибка опытный програмер)
    1C Team

    Регистрация:
    11 сен 2007
    Сообщения:
    1.581
    Симпатии:
    0
    из 1С делаю через COM-объект запрос к базе данных. Подобной конструцией уже пользовался. Сейчас сделал по аналогии - и обломался. Может кто-то что-то подскажет?
    Код (Text):
    Процедура Загрузить()     //получение данных SQL  
    Д = Строка(ДатаГод(ДатаДок));
    Д = ?(ДатаМесяц(ДатаДок)<10,Д +"0" + Строка(ДатаМесяц(ДатаДок)),Д + Строка(ДатаМесяц(ДатаДок)));
    Д = ?(ДатаЧисло(ДатаДок)<10,Д +"0" + Строка(ДатаЧисло(ДатаДок)),Д + Строка(ДатаЧисло(ДатаДок)));
    СтрокаСоединения="Provider=sqloledb;Data Source=db;UID=a;PWD=e4r;Initial Catalog=bp;"
    Соединение=СоздатьОбъект("ADODB.Connection");
    Соединение.Open(СтрокаСоединения);
    Записи=СоздатьОбъект("ADODB.RecordSet");
    Записи.ActiveConnection=Соединение;  
    Записи.Open("exec [dbo].[un_forts4buh] @oper_date='"+ Д "'");
    СпрКонтр = СоздатьОбъект("Справочник.Контрагенты");
    Пока Записи.EOF() = 0 Цикл     
    НоваяСтрока();
    Код = Записи.Fields("client_code").VALUE;
    Контрагент = Записи.Fields("client_name").VALUE;
    Сумма = Записи.Fields("sum_bal").VALUE;
    Операция = Записи.Fields("oper_name").VALUE;
    Записи.MoveNext();
    КонецЦикла;
    Записи.Close();          
    КонецПроцедуры
    ошибка: Пока Записи.EOF() = 0 Цикл
    {Документ.ЗагрузкаФОРТС.Форма.Модуль(14)}: ADODB.Recordset: Operation is not allowed when the object is closed.
     
  2. KiR

    KiR НЕ шибка опытный програмер)
    1C Team

    Регистрация:
    11 сен 2007
    Сообщения:
    1.581
    Симпатии:
    0
    Какое-то прямо наваждение сегодня! Уже переписал чуточку с другими СОМ-объектами:
    Код (Text):
    Процедура Загрузить()
    СпрКонтр = СоздатьОбъект("Справочник.Контрагенты");
    //получение данных SQL  
    Д = Строка(ДатаГод(ДатаДок));
    Д = ?(ДатаМесяц(ДатаДок)<10,Д +"0" + Строка(ДатаМесяц(ДатаДок)),Д + Строка(ДатаМесяц(ДатаДок)));
    Д = ?(ДатаЧисло(ДатаДок)<10,Д +"0" + Строка(ДатаЧисло(ДатаДок)),Д + Строка(ДатаЧисло(ДатаДок)));
    СтрокаСоединения="Provider=sqloledb;Data Source=db;Initial Catalog=bk;Integrated Security=SSPI;";
    Соединение=СоздатьОбъект("ADODB.Connection");
    Соединение.Open(СтрокаСоединения);
    Записи=СоздатьОбъект("ADODB.Command");
    Записи.ActiveConnection=Соединение;
    Записи.CommandTimeout = 180;
    Записи.CommandType = 1;
    Записи.CommandText = "exec [dbo].[un_forts4buh] @oper_date='"+Д+"'";
    recordset = Записи.Execute();
    Пока recordset.EOF() = 0 Цикл    
    НоваяСтрока();
    Код = recordset.Fields("client_code").VALUE;
    Контрагент = recordset.Fields("client_name").VALUE;
    Сумма = recordset.Fields("sum_bal").VALUE;
    Операция = recordset.Fields("oper_name").VALUE;
    recordset.MoveNext();
    КонецЦикла;
    КонецПроцедуры
    И все равно продолжает выдавать все ту же ошибку ADODB.Recordset: Operation is not allowed when the object is closed. ПОМОГИТЕ ПОЖАЛУЙСТА ЛЮДИ ДОБРЫЕ!
     
  3. puh14

    puh14 Well-Known Member
    1C Team

    Регистрация:
    11 июл 2008
    Сообщения:
    1.412
    Симпатии:
    0
    а ежли заместо "exec [dbo].[un_forts4buh] @oper_date='"+Д+"'"

    написать

    "Select * from un_forts4buh where oper_date='"+Д+"'"

    Пардон - что то я с селектами савсем зашился.
     
  4. KiR

    KiR НЕ шибка опытный програмер)
    1C Team

    Регистрация:
    11 сен 2007
    Сообщения:
    1.581
    Симпатии:
    0
    puh14, спасибо за совет конечно... но дело в том что un_forts4buh - это не таблица, а хранимая процедура и к ней через Select низзя обратится к сожалению
     
  5. puh14

    puh14 Well-Known Member
    1C Team

    Регистрация:
    11 июл 2008
    Сообщения:
    1.412
    Симпатии:
    0
    ну это я и имел ввиду под пардоном :(
    вообще похоже что у тебя recordset пустым выходит - потому и ругается.
    на какую точно строчку он ругается?
    на recordset = Записи.Execute();
    или
    Пока recordset.EOF() = 0 Цикл ?
     
  6. KiR

    KiR НЕ шибка опытный програмер)
    1C Team

    Регистрация:
    11 сен 2007
    Сообщения:
    1.581
    Симпатии:
    0
    Пока recordset.EOF() = 0 Цикл
    {Документ.ЗагрузкаФОРТС.Форма.Модуль(17)}: ADODB.Recordset: Operation is not allowed when the object is closed.
    эт ты мысль подкинул.
    тогда вопрос становится другой стороной - почему я выполняют вызов процедуры в каком-нить сиквельном query analazire и мне возвращается таблица со значениями, а при вызове из 1С - возвращается пустая?
     
  7. puh14

    puh14 Well-Known Member
    1C Team

    Регистрация:
    11 июл 2008
    Сообщения:
    1.412
    Симпатии:
    0
    значит либо условие форматируется через Ж - попробуй вообще без него, что выдаст?
    или лучше Записи.Open("exec [dbo].[un_forts4buh] @oper_date<>'"+ Д "'");
    Либо надо текст хранимой процедуры смотреть.
     
  8. KiR

    KiR НЕ шибка опытный програмер)
    1C Team

    Регистрация:
    11 сен 2007
    Сообщения:
    1.581
    Симпатии:
    0
    Точно. В процедуре дело было. Забыл указать SET NOCOUNT ON))
    Тема закрыта и достойна удаления. всем спасибо)
     
Загрузка...

Поделиться этой страницей