|   |   | 
| 
 | Не работает Попытка/Исключение | ☑ | ||
|---|---|---|---|---|
| 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 вызывает ошибку.     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |