Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема получить исключение из запроса... (число прочтений - 2925 )
ScareCrow
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 32
Зарегистрирован: 10. Июля 2006
получить исключение из запроса...
04. Октября 2006 :: 10:12
Печать  
Процедура ВыполнитьЗапрос(Запрос,Текст = "")
    Перем Рез;
    Если ПустаяСтрока(Текст)=1 Тогда
       Рез=Запрос.Выполнить();
    Иначе
       Рез=Запрос.Выполнить(Текст);
    КонецЕсли;
    Если Рез=0 Тогда
       ВыполняемыйМодуль=СоздатьОбъект("ВыполняемыйМодуль");
       ВыполняемыйМодуль.СформироватьОшибку(Запрос.ПолучитьОписаниеОшибки());
    КонецЕсли;
КонецПроцедуры

Попытка
                       ВыполнитьЗапрос(Запрос,"begin tran");      
                       ТекстЗапроса = "
                       |if exists(SELECT ID FROM sc104 AS Вал WHERE Вал.CODE = :КодВалюты)
                           |raiserror('Не найдена валюта для анкода',20, 1)
                       |else
               |INSERT INTO $Справочник.farmАнкоды (
                       |ID,
                       |CODE,
                       |DESCR,
                       |$Справочник.farmАнкоды.Валюта,
                       |$Справочник.farmАнкоды.ЖВП,
                       |VERSTAMP,
                       |ISMARK,
                       |$Справочник.farmАнкоды.ID
                       |)
                       |SELECT  :ID,:Код,:Наименование,
                       |CASE WHEN ( SELECT TOP 1 ID FROM $Справочник.Валюты AS Вал WHERE Вал.CODE = :КодВалюты  )  IS NULL THEN $ПустойИД 
                       |ELSE ( SELECT TOP 1 ID FROM $Справочник.Валюты  AS Вал WHERE Вал.CODE = :КодВалюты )
                       |END,
                       |:ЖВП,1,0,:ID2
                       |
                       |";
                       
                       Запрос.УстановитьТекстовыйПараметр("ID",Лок.НовыйИД());
                       Запрос.УстановитьТекстовыйПараметр("Код",ИЛТЗ.Код);
                       );
                       
                       Запрос.УстановитьТекстовыйПараметр("КодВалюты",ИЛТЗ.ВалютаКод);
                       Запрос.УстановитьТекстовыйПараметр("ЖВП",ИЛТЗ.ЖВП);
                       Запрос.УстановитьТекстовыйПараметр("ID2",ИЛТЗ.Элемент);
                 
                       
                       Запрос.Отладка(1);
                       ВыполнитьЗапрос(Запрос,ТекстЗапроса);
                       
                       
                       ВыполнитьЗапрос(Запрос,"if @@trancount > 0 commit tran");
                       ТекстЗапроса="";
                 
                 Исключение
                       //откат транзакции
                       Запрос.Выполнить("if @@trancount > 0 rollback tran");
                       ВызватьИсключение;

и нифига не получаю исключение... из QA получаю.. как получиьт в 1С?
  
Наверх
 
IP записан
 
ScareCrow
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 32
Зарегистрирован: 10. Июля 2006
Re: получить исключение из запроса...
Ответ #1 - 04. Октября 2006 :: 10:48
Печать  
Вот так работает:
Процедура Сформировать()
Запрос = СоздатьОбъект("ODBCRecordset");
     ТекстЗапроса = "      
     |raiserror('КУКУ',16, 1)";
     Попытка
           
           Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
           Запрос.Закрыть();
     Исключение
           Сообщить("Попался!");
     КонецПопытки;      


КонецПроцедуры
  
Наверх
 
IP записан
 
ScareCrow
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 32
Зарегистрирован: 10. Июля 2006
Re: получить исключение из запроса...
Ответ #2 - 04. Октября 2006 :: 12:06
Печать  
а вот как теперь для полного счастья получить сообщение ошибки которое указыаешь в raiserror?
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: получить исключение из запроса...
Ответ #3 - 04. Октября 2006 :: 13:04
Печать  
ScareCrow писал(а) 04. Октября 2006 :: 12:06:
а вот как теперь для полного счастья получить сообщение ошибки которое указыаешь в raiserror?

Запрос.ПолучитьОписаниеОшибки()
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: получить исключение из запроса...
Ответ #4 - 04. Октября 2006 :: 14:30
Печать  
ScareCrow писал(а) 04. Октября 2006 :: 12:06:
а вот как теперь для полного счастья получить сообщение ошибки которое указыаешь в raiserror?

Как и при любом другом исключении в 1С - штатная глобальная функция ОписаниеОшибки().
  
Наверх
ICQ  
IP записан
 
ScareCrow
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 32
Зарегистрирован: 10. Июля 2006
Re: получить исключение из запроса...
Ответ #5 - 05. Октября 2006 :: 05:18
Печать  
begin tran

if  exists(SELECT ID FROM sc104 AS Вал WHERE Вал.CODE = '810')
raiserror('Не найдена валюта для анкода',16, 1)
else
INSERT INTO sc47217 (
ID,
CODE,
DESCR,
sp47218,
sp49272,
VERSTAMP,
ISMARK,
sp53019
)
SELECT  '     L   ','000040','Адаптовит фл 100мл',
(SELECT TOP 1 ID FROM sc104  AS Вал WHERE Вал.CODE = '810')as Валюта ,
2,1,0,810000040


State HY007, native 0, message [Microsoft][ODBC SQL Server Driver]Associated statement is not prepared
if @@trancount > 0 rollback tran



     Попытка
                       Запрос.ВыполнитьИнструкцию("begin tran");
                       ТекстЗапроса = "
                       |if  exists(SELECT ID FROM sc104 AS Вал WHERE Вал.CODE = :КодВалюты)
                           |raiserror('Не найдена валюта для анкода',16, 1)
                       |else
               |INSERT INTO $Справочник.farmАнкоды (
                       |ID,
                       |CODE,
                       |DESCR,
                       |$Справочник.farmАнкоды.Валюта,
                       |$Справочник.farmАнкоды.ЖВП,
                       |VERSTAMP,
                       |ISMARK,
                       |$Справочник.farmАнкоды.ID
                       |)
                       |SELECT  :ID,:Код,:Наименование,
                       |(SELECT TOP 1 ID FROM $Справочник.Валюты  AS Вал WHERE Вал.CODE = :КодВалюты)as Валюта ,
                       |:ЖВП,1,0,:ID2
                       |
                       |";
                       
                       Запрос.УстановитьТекстовыйПараметр("ID",Лок.НовыйИД());
                       Запрос.УстановитьТекстовыйПараметр("Код",ИЛТЗ.Код);
                       );
                       
                       Запрос.УстановитьТекстовыйПараметр("КодВалюты",ИЛТЗ.ВалютаКод);
                       Запрос.УстановитьТекстовыйПараметр("ЖВП",ИЛТЗ.ЖВП);
                       Запрос.УстановитьТекстовыйПараметр("ID2",ИЛТЗ.Элемент);
                 
                       
                       Запрос.Отладка(1);
                       Запрос.ВыполнитьИнструкцию(ТекстЗапроса,ЛТЗ,1);
                       
                       
                       Запрос.ВыполнитьИнструкцию("if @@trancount > 0 commit tran");
                       ТекстЗапроса="";
                 
                 Исключение
                       //откат транзакции   
                       Сообщить(Запрос.ПолучитьОписаниеОшибки());;
                       Запрос.Выполнить("if @@trancount > 0 rollback tran");
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать