Запись документа если был отказ

1. robix 29.04.21 17:24 Сейчас в теме
Здравствуйте. В процедуре ПриЗаписи() документа в модуле объекта нужно записать еще один второй документ. Если во втором документе возникает Отказ, то и первый не запишется.

Попытка Исключение тут не работает . Кстати почему не работает ? Может быть из-за того, что при записи второго устанавливается "Отказ" ?

Как сделать так, чтобы первый документ всегда записался, в независимости от того, был ли отказ при записи второго документа ?
По теме из базы знаний
Найденные решения
8. starik-2005 3036 29.04.21 17:42 Сейчас в теме
(1)
Как сделать так, чтобы первый документ всегда записался, в независимости от того, был ли отказ при записи второго документа ?
Не создавать второй документ при проведении первого, а создавать его с помощью регламентного задания, например, чуть попозжа. Ну или просто запускать фоновое задание на создание документа при проведении первого - отдельный сеанс.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
5. spacecraft 29.04.21 17:39 Сейчас в теме
(1) в данном случае более подходит механизм отложенного проведения.
8. starik-2005 3036 29.04.21 17:42 Сейчас в теме
(1)
Как сделать так, чтобы первый документ всегда записался, в независимости от того, был ли отказ при записи второго документа ?
Не создавать второй документ при проведении первого, а создавать его с помощью регламентного задания, например, чуть попозжа. Ну или просто запускать фоновое задание на создание документа при проведении первого - отдельный сеанс.
2. SlavaKron 29.04.21 17:26 Сейчас в теме
В рамках одного вызова никак.
3. FatPanzer 29.04.21 17:34 Сейчас в теме
(2) Не совсем так, думаю.
Если во втором случае произошло Исключение - тогда да, транзакция поломана, и первый документ тоже не сохранится.
А вот программный Отказ записи второго документа никак не должен отразиться на записи первого. Если грамотно построить вызовы.
4. SlavaKron 29.04.21 17:38 Сейчас в теме
(3) Но ведь Отказ = Истина во втором документе в любом случае вызовет исключение. Какие другие программные способы отказать в записи второму документу без вызова исключения?
6. FatPanzer 29.04.21 17:40 Сейчас в теме
(4) Отказ = Истина это ни разу не исключение. Это просто флаг триггера. При Отказ = Истина транзакция не ломается.
7. SlavaKron 29.04.21 17:42 Сейчас в теме
(6) Сам по себе код Отказ = Истина исключение не вызовет, но исключение будет вызвано в любом случае по окончании вызова. 1С так легче разрулить oткат(опасное слово) всех изменений=)
9. -AI- 29.04.21 23:41 Сейчас в теме
видимо транзакция срабатывает-с.

если надо записать первый в любом случае, то делайте не в событии ПриЗаписи(), а в событии ПослеЗаписи()

ПриЗаписи() идет проверка, и если надо, вложенные проверки записи множества объектов, и если хотя бы одна не прошла, вся транзакция откатывается.
видимо так...

----------------------------------
если очень хочется ПриЗаписи(), то надо возможность записи второго объекта проверить ДО вызова метода Записать() второго объекта.
10. -AI- 29.04.21 23:51 Сейчас в теме
(9)
ПослеЗаписи()
что-то я перегнул... отдыхать видимо надо больше....

PS в любом случае, надо копать талмуд на тему транзакций...
когда она "открывается" и когда "закрывается"

вот например:
Модуль объекта ПриЗаписи(Отказ)
Вызывается после записи объекта в базу данных, но до окончания транзакции записи.
Ссылка уже есть и можно записать в базу данных дополнительные данные на основании текущего объекта, используя эту ссылку.
Например, при записи создавать другой документ, содержащий реквизит ссылку на записываемый.

надо понять что будет если последняя строчка не сработает....

кстати, есть встроенная команда ТранзакцияАктивна()
надо проверить что она говорит во время события ПриЗаписи()

но это всё завтра, ща надо спать...
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот