![]() |
|
Как вызывать процедуру,которой может и не быть,не выпадая в остановку по ошибке? | ☑ | ||
---|---|---|---|---|
0
SeiOkami
01.04.15
✎
08:22
|
Здравия всем!
Есть такая вещь. Общий модуль, который вызывается из разных отчетов. В общем модуле универсальные механизмы. В нём вызывается процедура из модуля отчета (на подобии БСП). Но этой процедуры в отчете может не быть, что не должно влиять на работоспособность механизмов. Посему вызов процедуры делается через попытку: Попытка ОтчетОбъект.НастроитьОтчет(НастройкиОтчета); Исключение КонецПопытки; Однако, таким образом, если в отладке стоит остановка по ошибке, то здесь будет при ошибке останавливаться выполнение. Это очень бесит. Можно ли как-то обмануть систему, чтобы она не останавливалась на этом участке кода? Попробовал выполнять тот же код, но через "Выполнить()" - результат тот же. |
|||
1
Ненавижу 1С
гуру
01.04.15
✎
08:27
|
>>Это очень бесит
Валерианки прими |
|||
2
butterbean
01.04.15
✎
08:28
|
убери остановку по ошибке...
а вообще лучше запихни все нужные процедуры в отчеты |
|||
3
SeiOkami
01.04.15
✎
08:28
|
(1), так и думал, что пойдут ответы в духе мисты )
|
|||
4
Записьдампа
01.04.15
✎
09:03
|
Обманывать систему грешновато.
Можно вынести определение флага доступности настройки в тот же отчет, например, использовать прием из той же БСП: Если ОтчетОбъект.Настраиваемый() Тогда
И считать отчет без метода Настраиваемый кривым - путь падает. |
|||
5
SeiOkami
01.04.15
✎
09:06
|
(4), в том то и дело, что хочется универсальности как в БСП
|
|||
6
Записьдампа
01.04.15
✎
09:21
|
(5) Ну дык открой БСП и посмотри.
Там как минимум два подхода - в справочнике _ДемоНоменклатура при интеграции с подсистемами (например, поиск и удаление дублей), там используется переопределяемый модуль, который поставляет список метаданных объектов, для которых функционал включен. Или в обмене данными - в модуле менеджера плана обмена _ДемоОбменСБиблиотекойСтандартныхПодсистем, там используется как раз то, про что я писал - метод ПланОбменаИспользуетсяВМоделиСервиса() плюс дополнительные контроль по вхождению плана обмена в одну из подсистем БСП. |
|||
7
Лефмихалыч
01.04.15
✎
09:25
|
(0) не включай остановку по ошибке без нужды да и всё
|
|||
8
SeiOkami
01.04.15
✎
09:31
|
(6), там через попытку и сделано
|
|||
9
AlexTim03
01.04.15
✎
09:32
|
Остановка по ошибке может быть с указанием конкретной ошибки. Укажи ту,которая тебя смущает
|
|||
10
Записьдампа
01.04.15
✎
09:34
|
||||
11
TormozIT
гуру
01.04.15
✎
09:38
|
Мой вариант
//Для Объект = Неопределено возвращает Ложь, работает только для русского и английского языков платформы Функция МетодРеализован(Объект, ИмяМетода, КоличествоПараметров = 20) Экспорт Если Объект = Неопределено Тогда Возврат Ложь; КонецЕсли; Выражение = "Объект." + ИмяМетода + "(" + ОбщийИис.ПолучитьСтрокуПовторомИис(",", КоличествоПараметров) + ")"; Попытка Выполнить(Выражение); Исключение Инфо = ИнформацияОбОшибке(); Описание = Инфо.Описание; //Сообщить(Описание); КонецПопытки; Результат = Ложь Или Описание = "Слишком много фактических параметров" Или Описание = "Too many actual parameters"; Возврат Результат; КонецФункции |
|||
12
TormozIT
гуру
01.04.15
✎
09:42
|
(11)+
КоличествоПараметров - нужно задать заведомо большее значение, чем может быть у метода. |
|||
13
Лефмихалыч
01.04.15
✎
09:50
|
(11) зачем столько сложностей, если в итоге все равно "Попытка"?..
|
|||
14
SeiOkami
01.04.15
✎
09:52
|
(11) результат будет тот же
|
|||
15
vde69
01.04.15
✎
10:08
|
что-то типа прокатит ???
Действие = Новый Действие("Имя"); Если ЗначениеЗаполнено(Действие) Тогда ,,,,,,,, |
|||
16
Гёдза
01.04.15
✎
10:09
|
(15) это внутри обработки, а если снаружи?
|
|||
17
SeiOkami
01.04.15
✎
10:19
|
(15), идея хорошая, но я нахожусь в контексте общего модуля и таким методом не могу стукнуться в контекст объекта отчета
|
|||
18
vde69
01.04.15
✎
10:26
|
еще можно попробовать
Если ЗначениеЗаполнено(ИмяМодуля[ИмяПроцедуры]) Тогда |
|||
19
SeiOkami
01.04.15
✎
10:30
|
(18), я нахожусь в общем модуле. Есть переменная ОтчетОбъект, содержащая объект отчета. Нужно выполнить процедуру из этого объекта (если она там есть)
|
|||
20
TormozIT
гуру
01.04.15
✎
10:49
|
(13) (14) Согласен, что попытка и ошибка внутри нее все равно будет. Если глубже вдуматься, то станет понятно, что мой метод хитрее, т.к.
1) не будет "проглатывать" любую ошибку внутри вызываемого метода 2) позволяет понять, есть ли метод до его вызова, и только если он есть, подготовить возможно тяжелые с вычислительной точки зрения параметры для его вызова |
|||
21
SeiOkami
01.04.15
✎
10:52
|
(20), да, всё верно. Но только текущую хотелку не решает)
|
|||
22
TormozIT
гуру
01.04.15
✎
10:57
|
(21) Твоя хотелка не решается без доработки интерпретатора. Соответствующие пожелания 1С зарегистрировала еще 8 лет назад. Тут Гений1С уже поднимал тему В то время как ... бороздят, 1с не может сделать нормально исключения.
|
|||
23
dmpl
01.04.15
✎
11:23
|
(0) Заведи РС ПравославныеОтчеты, где и опиши, у какого отчета какие методы есть.
|
|||
24
SeiOkami
01.04.15
✎
11:55
|
(22), вон оно как. Не знал, спасибо
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |