Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема V7:SQL.Как отменить транзакцию и вернуть в 1С ошибку так, чтоб не завалить? (число прочтений - 2482 )
Cat
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 2
Зарегистрирован: 11. Августа 2009
V7:SQL.Как отменить транзакцию и вернуть в 1С ошибку так, чтоб не завалить?
11. Августа 2009 :: 08:59
Печать  
Задача:
Есть Н баз. В базах есть Док, который гарантированно должен иметь уникальный номер.

1. Присваивать уникальные доп. номер документа, если номер не задан вручную.

2. Пользователь ожет задавать номер вручную. Тогда нужно при записи проверять уникальность доп. номера и возвращать сообщение об ошибке.

Решение:
Хочу сделать это через тригер и хранимую процедуру. С пунктом 1 проблем нет.

Есть проблема с пунктом 2: Как отменить транзакцию и вернуть в 1С ошибку так, чтоб 1С при этом не валилась?

RAISERROR ('Проба...',18,1) тупо валить 1С с невосстановимой ошибкой базы.
ROLLBACK TRANSACTION та же ошибка.
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: V7:SQL.Как отменить транзакцию и вернуть в 1С ошибку так, чтоб не завалить?
Ответ #1 - 11. Августа 2009 :: 09:30
Печать  
Зачем тригер.
Используй ПриЗаписи()
и в случае ошибки сообщение об ошибке +
СтатусВозврата(0);
  
Наверх
 
IP записан
 
mrgreen
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 32
Зарегистрирован: 01. Августа 2009
Re: V7:SQL.Как отменить транзакцию и вернуть в 1С ошибку так, чтоб не завалить?
Ответ #2 - 11. Августа 2009 :: 09:46
Печать  
читай мой ответ на скл.ру с использованием попытки

Цитата:
вставь в исключение поиск по тому номеру что хочешь присвоить и если он уже есть пиши в БД новый номер и его ищи пока не найдёшь не занятый (назодишь - пишешь в БД что уже мол есть такой) после чего записывай документ и выходи из попытки
  
Наверх
 
IP записан
 
Cat
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 2
Зарегистрирован: 11. Августа 2009
Re: V7:SQL.Как отменить транзакцию и вернуть в 1С ошибку так, чтоб не завалить?
Ответ #3 - 11. Августа 2009 :: 13:15
Печать  
Z1 писал(а) 11. Августа 2009 :: 09:30:
Зачем тригер.
Используй ПриЗаписи()
и в случае ошибки сообщение об ошибке +
СтатусВозврата(0);


Убъю.
  
Наверх
 
IP записан
 
mrgreen
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 32
Зарегистрирован: 01. Августа 2009
Re: V7:SQL.Как отменить транзакцию и вернуть в 1С ошибку так, чтоб не завалить?
Ответ #4 - 11. Августа 2009 :: 16:06
Печать  
Улыбка переформулируй вопрос чтоб народ понял проблему
  
Наверх
 
IP записан
 
alexdd
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 347
Зарегистрирован: 25. Июня 2007
Re: V7:SQL.Как отменить транзакцию и вернуть в 1С ошибку так, чтоб не завалить?
Ответ #5 - 11. Августа 2009 :: 21:37
Печать  
Cat писал(а) 11. Августа 2009 :: 08:59:
Задача:
Есть Н баз. В базах есть Док, который гарантированно должен иметь уникальный номер.

1. Присваивать уникальные доп. номер документа, если номер не задан вручную.

2. Пользователь ожет задавать номер вручную. Тогда нужно при записи проверять уникальность доп. номера и возвращать сообщение об ошибке.

Решение:
Хочу сделать это через тригер и хранимую процедуру. С пунктом 1 проблем нет.

Есть проблема с пунктом 2: Как отменить транзакцию и вернуть в 1С ошибку так, чтоб 1С при этом не валилась?

Не понял при чем тут триггер, уникальность номера в разных базах решается при помощи префикса(или seed'a и т.п.). Ну или другой вариант, использовать распределенные транзакции и получать/блокировать номер из центральной БД.
Cat писал(а) 11. Августа 2009 :: 08:59:
RAISERROR ('Проба...',18,1) тупо валить 1С с невосстановимой ошибкой базы.
ROLLBACK TRANSACTION та же ошибка.

а если так?
RAISERROR ('Проба...',16,1) ?Улыбка
  
Наверх
 
IP записан
 
Вадимко
God Member
*****
Отсутствует


Нам бы чего про ОдноЦэ...

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: V7:SQL.Как отменить транзакцию и вернуть в 1С ошибку так, чтоб не завалить?
Ответ #6 - 12. Августа 2009 :: 15:56
Печать  
О Пресвятая дева!
Уже и на номера аж триггер и процедуру вешають!
Предлагаю записывать доп. номер в таблицу локов пока документ не записан + записывать максимальный номер уже из записанных документов
Или вообще сделать identity если плевать на возможные пропуски в нумерации
  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать