Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Обработка ошибки проведения

Обработка ошибки проведения
Я
   Родом из детства
 
11.10.21 - 16:26
Добрый день, товарищи. Столкнулся с одной неприятной задачей. В общем, имеется документ. В нем - тч "История изменения реквизитов", в которой, соответствено регистрируется история изменения некоторых его реквизитов. Регистрируется она следующим образом - в модуле объекта, в обработчике события "ПередЗаписью" запросом берутся реквизиты объекта, они перебираются, сравниваются с текущими значениями. И, в случае несоответствия, в эту ТЧ добавляются строки.
Проблема в следующем:
"Попытка
документ.Записать(РежимЗаписи.Проведение)
Исключение
Документ.Записать(РежимЗаписи.Запись)
КонецПопытки"
- это код обработки, который вызывает запись нашего документа. В случае, когда у нас возникает проблема, и документ не проводится(то есть падаем в блок исключения) мы получаем дублирование строк в ТЧ документа история изменения реквизитов(
Мб есть какие-нибудь идеи, как этого избежать?
   ДенисЧ
 
1 - 11.10.21 - 16:28
делай в ПриЗаписи, там транзакция ужо.
   Родом из детства
 
2 - 11.10.21 - 16:29
(1) А в ПриЗаписи ещё не регистрируются данные в бд? Я смогу получить старые значения реквизитов запросом?
   Pro-tone
 
3 - 11.10.21 - 16:35
(2) ПриЗаписи - это фактически ПослеЗаписи, для сравнения реквизитов - выгружай нужные реквизиты (до записи) в таблицу значений или любую другую коллекцию какая нравится. В типовых конфах есть механизм версионирования, он сохраняет значения всех реквизитов по объекту, если это не самописка то лучше использовать его
   Has
 
4 - 11.10.21 - 16:37
(0) а реквизиты документа влияют на его движения?
   Родом из детства
 
5 - 11.10.21 - 16:37
(4) да
   fisher
 
6 - 11.10.21 - 16:38
(0) > В нем - тч "История изменения реквизитов"
Рука-лицо. Так делать нельзя. При любом использовании объекта у тебя всегда будет вычитываться эта табличная часть. То есть тормоза будут расти с ростом истории.
> есть какие-нибудь идеи, как этого избежать
Можно в доп-свойства объекта писать массив строк ТЧ истории, которые добавляются для записи. И перед записью сначала удалять строки из массива, если массив не пуст.
   Has
 
7 - 11.10.21 - 16:39
(5) тогда при исключении - реквизиты поменяются, а движения - нет
   Родом из детства
 
8 - 11.10.21 - 16:40
(6) Да, насчет ТЧ думали. Но заказчик почему-то захотел так. Насчет доп-свойств - попробую, спасибо)
   Дык ё
 
9 - 11.10.21 - 17:23
(0) (2) перед записью в модуле объекта тоже в транзакции, дубли могут быть из-за ошибки в реализации

(8) заказчик не может определять технические детали. используй платформенную историю данных

Список тем форума
 
2 + 2 = 3.9999999999999999999999999999999...
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.