Имя: Пароль:
1C
1С v8
Не работает Попытка/Исключение
0 Ivan093
 
24.01.12
07:47
Всем привет!
Кто-нибудь сталкивался с таким: платформа 8.2.13.219, в обработке используется соединение со сторонней базой sql через ado.
Дак вот если есть ошибка при выполнении запроса, например таймаут, то несмотря на код, обернутый в Попытку/Исключение, все равно 1с выдает ошибку и выполнение кода останавливается. Можно это как-нибудь побороть?
1 DrShad
 
24.01.12
07:48
а код где?
2 Ivan093
 
24.01.12
07:51
Вот код:
Функция ВыполнитьЗапросКМонитору(ТекстЗапроса) Экспорт
   
   RecordSet = Новый COMОбъект("ADODB.RecordSet");
   RecordSet.CursorType = 1; //ctOpenForwardOnly
   RecordSet.CursorLocation = 1; //clUseClient
   
   
   ПодключениеМонитора = Новый COMObject("ADODB.Connection");    
   ПодключениеМонитора.ConnectionString = мПараметрыПодключения.СтрокаПодключения;
   //ПодключениеМонитора.KeepConnection = true;
   ПодключениеМонитора.ConnectionTimeout = 120;
   ПодключениеМонитора.CommandTimeout = 300;
   ПодключениеМонитора.CursorLocation = 3;
   
   Попытка
       ПодключениеМонитора.Open();
       СоединениеУстановлено = Истина;
   Исключение
       #Если Клиент Тогда
           Сообщить("Не удалось подключиться к базе монитора!", СтатусСообщения.Внимание);
           Сообщить(ОписаниеОшибки());
       #КонецЕсли
       СоединениеУстановлено = Ложь;
   КонецПопытки;
   
   Если НЕ СоединениеУстановлено Тогда
       Возврат RecordSet;
   КонецЕсли;
   
   Command = Новый COMОбъект("ADODB.Command");
   Command.ActiveConnection = ПодключениеМонитора;
   Command.CommandText = ТекстЗапроса;
   
   Попытка
       RecordSet = Command.Execute();
   Исключение
       #Если Клиент Тогда
           Сообщить("Не удалось выполнить запрос к базе монитора!", СтатусСообщения.Внимание);
           Сообщить(ОписаниеОшибки());
           RecordSet = Новый COMОбъект("ADODB.RecordSet");
       #КонецЕсли
   КонецПопытки;
       
   Возврат RecordSet;
   
КонецФункции
3 Ivan093
 
24.01.12
07:52
База файловая пока.
4 Ivan093
 
24.01.12
07:53
Несмотря ан то, что RecordSet = Command.Execute(); находится в попытке, 1с выдает ошибку при таймауте, а такие ситуации бывают...
5 Ivan093
 
24.01.12
07:54
По логике, при ошибке выполнения запроса, мне надо вернуть пустой RecordSet.
6 Ivan093
 
24.01.12
07:55
Пробовал обернуть вызов функции в попытку -- такая же ситуация:
Попытка
  ВыполнитьЗапросКМонитору(ТекстЗапроса);
Исключение
КонецПопытки
7 Рэйв
 
24.01.12
08:05
(4)сообщение о таймауте тебе скуль пишет.А 1С видимо это не воспринимает как ошибку. Ну вышло время ожидания да вышло, типа ничего критичного.
8 Ivan093
 
24.01.12
08:27
(7) хм, похоже на то, если так то плохо...
9 Ivan093
 
24.01.12
08:28
Хотя с другой стороны, сообщение то от скуля попадает в 1С не просто же так...
10 Ivan093
 
24.01.12
08:29
У кого есть ado в обработках, попробуйте, у вас так же будет?
11 Alex375
 
24.01.12
08:38
Есть подобная же проблема на платформе 2.14.540... Пока не знаю где копать. :(
12 Alex375
 
24.01.12
08:39
Правда подключаюсь не к SQL, а к другой 1С базе по COM-соединению. Так что думаю суть не в том, что SQL вызывает ошибку.
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс