|
Обработка ошибки проведения |
☑ |
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) заказчик не может определять технические детали. используй платформенную историю данных
|
|
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший