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

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