Исключение в общем модуле

1. user607306_jamescrous 22.12.21 10:15 Сейчас в теме
Коллеги, добрый день. В общем модуле есть процедура с попыткой и исключением. Подскажите, можно ли сделать так, чтобы при вызове этой процедуры, например, в документе, действия при исключении были прописаны в самом документе, а не в общем модуле? Меняю в конфигурации одинаковые процедуры на вызов из общего модуля и столкнулся с тем, что исключения везде прописаны со значительной разницей.
По теме из базы знаний
Найденные решения
12. starjevschik 22.12.21 14:56 Сейчас в теме
Можно конечно.
В документа
Ответ = ФункцияОбщегоМодуля();
Если Ответ = ДА Тогда
Сообщить("Ураааа");
Иначе
ВыполнитьДействияПриИсключении();
КонецЕсли;

В общем модуле
Результат = ДА;
Попытка
СделатьВсеДела();
Исключение
Результат = НЕТ;
КонецПопытки;

Возврат Результат;
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
4. spacecraft 22.12.21 10:46 Сейчас в теме
(1) из какого модуля вызываете метод общего модуля?
Для вызова из модуля формы документа, можно передавать форму этого документа. В модуле формы создать экспортный метод, который и вызывать из метода общего модуля через передаваемую форму документа. И уже в этом методе модуля формы выполнять нужные действия. Соответственно этот метод придется делать для каждого используемого типа документа.
9. user607306_jamescrous 22.12.21 13:20 Сейчас в теме
(4) В разных местах из других общих модулей, из модулей объекта и менеджера документов, из форм документов.
Таких вызовов будет очень много,более 100. Так что какой-то конкретный экспортный метод в общем модуле, наверное нельзя сделать
6. CrazyBee 5 22.12.21 10:48 Сейчас в теме
(1)
Исключение
Возврат;
КонецПопытки


Так же можно поставить условие, что вызывается из этой формы.
7. SaschaL 22.12.21 10:49 Сейчас в теме
А в расширение не пробовали модуль забросить и там под себя поправить?
8. glek 119 22.12.21 11:26 Сейчас в теме
(1) А если в исключении прописать по некоторому условию ВызватьИсключение?
2. herfis 515 22.12.21 10:33 Сейчас в теме
Без изменения общего модуля? Нельзя.
3. user607306_jamescrous 22.12.21 10:37 Сейчас в теме
(2) Нет, общий модуль можно менять как угодно
5. herfis 515 22.12.21 10:47 Сейчас в теме
(3) Я так понимаю, нужно обработать исключение определенным образом и продолжить выполнение функции общего модуля? Т.е. другими словами передать ссылку на свой обработчик?
Интересный кейс. Ни разу подобная потребность именно при обработке исключений не возникала.
Но в 1С можно эмулировать функции высшего порядка таким образом: создаешь ОписаниеОповещения со ссылкой на свой обработчик и передаешь его через параметры в функцию общего модуля. А там в нужном месте вызываешь ВыполнитьОбработкуОповещения, передав туда все нужные параметры.
ЗЫ. Если же вдруг продолжать выполнение функции общего модуля при возникновении исключения не нужно, тогда не нужно в общем модуле ловить это исключение. Просто обрамлять попыткой сам вызов функции общего модуля. Если там разные исключения могут прилетать, то для удобства можно в общем модуле ловить исключение и тут же выбрасывать свое специфическое, которое будет удобно обрабатывать.
10. user607306_jamescrous 22.12.21 13:31 Сейчас в теме
(5) Я не уверен, что понятно объяснил,на всякий случай опишу подробнее: в модуле формы есть некоторый код с попыткой, который нужно вынести в общий модуль. Аналогичные куски кода есть во многих местах в конфигурации, и различаются они только исключениями. Кусков кода таких очень много, и для каждого конкретного случая прописывать исключение в общем модуле не получится.
Наверное, через обработчик оповещения наиболее логичная идея. Пока не очень понимаю,как его здесь применить, но буду разрабатывать. Спасибо.
11. user607306_jamescrous 22.12.21 14:41 Сейчас в теме
(5) Хотя не уверен что взлетит, при условии что ВыполнитьОбработкуОповещения, как я вижу,доступен только на клиенте.
12. starjevschik 22.12.21 14:56 Сейчас в теме
Можно конечно.
В документа
Ответ = ФункцияОбщегоМодуля();
Если Ответ = ДА Тогда
Сообщить("Ураааа");
Иначе
ВыполнитьДействияПриИсключении();
КонецЕсли;

В общем модуле
Результат = ДА;
Попытка
СделатьВсеДела();
Исключение
Результат = НЕТ;
КонецПопытки;

Возврат Результат;
Оставьте свое сообщение

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