Нашли или выдавили из себя код, который нельзя назвать нормальным,
на который без улыбки не взглянешь?
Не торопитесь его удалять или рефакторить, — запостите его на
говнокод.ру, посмеёмся вместе!
Попытка
ДокументВозврата.Записать(РежимЗаписиДокумента.Проведение,РежимПроведенияДокумента.Неоперативный);
Исключение
Попытка
ДокументВозврата.Записать(РежимЗаписиДокумента.Проведение,РежимПроведенияДокумента.Неоперативный);
Исключение
Сообщить("Не удалось записать/провести документ возврата в ИБ " + ДокументВозврата, СтатусСообщения.ОченьВажное);
КонецПопытки;
ДокументВозврата.Записать(РежимЗаписиДокумента.Запись);
КонецПопытки;
Что делать, если не получилось провести документ? Правильно! Попробовать еще раз!
А потом еще и записать.
Для надежности.
По таблицам базы разбросать?
Легко.
1. Записать изменения в таблицу документов и таблицу табличных частей документов. Проверить по контрольным функциям, можно ли записать данные в таблицы регистров и сделать это, если контроль положительный при установленном параметре ОперативноеПроведение.
2. В случае отказа в п.1, то же самое с параметром Неоперативное проведение.
3. В случае отказа записи просто записать данные в таблицу документов и табличных частей документов.
В 1С есть встроенные жесткие ограничения на классы объектов, методы и свойства. транзакция записи/проведения откатывается если при окончании ее параметр Отказ = Истина. Параметр устанавливается программно.
Если ошибка типа runtime, то общего обработчика нет, только так вот через попытку-исключение.
Хочу добавить, что 1С все-таки не язык программирования в классическом смысле, а язык программирования бизнес-логики, рассчитанный на быструю подстройку под изменяющиеся правила бизнеса. Все остальное здесь вторично. Потому и присутствует некоторая ущербность в реализации некоторых операций.
Все будет еще смешнее, если весь этот код выполняется в транзакции.
Вложенные транзакции в 1С поддерживаются (а запись документа будет во вложенной транзакции), но при любой неудаче родительская транзакция помечается как бэдовая и любая попытка ее зафиксировать провалится. Так что смысла не будет иметь ни вложенная Попытка, ни запись просто без проведения.
А код - треш конечно.
Личное сообщение zfilin'у 🙂 Личка в гк такая личка.
Что не так?
Но к коду он отношения не имеет.
Легко.
1. Записать изменения в таблицу документов и таблицу табличных частей документов. Проверить по контрольным функциям, можно ли записать данные в таблицы регистров и сделать это, если контроль положительный при установленном параметре ОперативноеПроведение.
2. В случае отказа в п.1, то же самое с параметром Неоперативное проведение.
3. В случае отказа записи просто записать данные в таблицу документов и табличных частей документов.
Провести документ оперативно.
Если не получилось, неоперативно.
Как последняя попытка - записать без проведения.
1С под боком нет.
Если ошибка типа runtime, то общего обработчика нет, только так вот через попытку-исключение.
Вложенные транзакции в 1С поддерживаются (а запись документа будет во вложенной транзакции), но при любой неудаче родительская транзакция помечается как бэдовая и любая попытка ее зафиксировать провалится. Так что смысла не будет иметь ни вложенная Попытка, ни запись просто без проведения.