|
v7: Как определить успешность выполнения внешнего отчета...? | ☑ | ||
---|---|---|---|---|
0
Злопчинский
28.02.17
✎
12:07
|
допустим что-то типа
. Параметры = СоздатьОбъект("СписокЗначений"); Параметры.ДобавитьЗначение(..); ОткрытьФормуМодально("Отчет", Параметры, ИмяФормы); . допустим даже форма открывается и начинается выполнение, но, например, ломается по синтаксической ошибке или алгоритмической ошибке. вопрос 1: можно как-то красиво и просто отловить что вызванный отчет "сломался"? вопрос 2: можно ну на крайняк подавить вывод сообщения об ошибке в окно сообщений? |
|||
1
VladZ
28.02.17
✎
12:10
|
Отчет в случае успеха должен "отсчитаться" об успехе. Т.е. вернуть результат выполнения.
|
|||
2
Builder
28.02.17
✎
12:11
|
Попытка
ОткрытьФормуМодально() Исключение не работает? |
|||
3
Это_mike
28.02.17
✎
12:11
|
1. возвратом результата
2. зачем? |
|||
4
Азазель
28.02.17
✎
12:23
|
Вывод сообщения об ошибке полезен для разраба, поскольку сразу показывает сбойное место в коде.
Или тебе нужно замаскировать ошибку? зачем подавлять вывод? |
|||
5
Ёпрст
28.02.17
✎
12:30
|
(0) можно. Ставь блокировку на элемент. Будешь в любой сессии видеть результат работы обработки
Ну и обработка должна вернуть флаг успешной работы куда-то. |
|||
6
Злопчинский
28.02.17
✎
12:31
|
(1) это я и сам умею, более красиво нннада!
|
|||
7
Это_mike
28.02.17
✎
12:32
|
(5) не понял
|
|||
8
Ёпрст
28.02.17
✎
12:32
|
(6) в поделке своей
Попытка ВыполнитьПоделку(); Исключение ЗаписатьФлагНеудачиКудаТо(); КонецПопытки полечит всё, вплоть до любых ошибок исполненния |
|||
9
Злопчинский
28.02.17
✎
12:33
|
(3) 2. Потому что. есть печатные формы, которые получают контекст формы документа. При вызове из формы журнала отчет ломается. Переписать отчеты - я и сам могу и вернуть что надо тоже могу. но это надож программить лезть
|
|||
10
Злопчинский
28.02.17
✎
12:34
|
(4) потому что это не влияет на стабильность системы/работы.
|
|||
11
Ёпрст
28.02.17
✎
12:34
|
(7)
ну, я так обычно делаю, что в клюшках, что в снеговике, чтоб поделку мог запускать кто-то один на выполнение - блокируешь определенный элемент любого справочника и привет. Если заблокировать не можешь, значит, эту поделку кто-то еще выполняет, смог. значит ты. |
|||
12
Ёпрст
28.02.17
✎
12:36
|
(9) ну, не хочешь кодить - перехватчиком перехватывай и "следи"
:) |
|||
13
Это_mike
28.02.17
✎
12:37
|
(11) хм. ну, в принципе, легко реализуемо..
|
|||
14
Это_mike
28.02.17
✎
12:38
|
(12) эх, как жалею, что во времена клюшек перехватчик не осилил...
|
|||
15
Злопчинский
28.02.17
✎
12:43
|
(8) вот вам фиг, обрамлять попыткой ОткрытьФорму не приносит нужного результата.
|
|||
16
Злопчинский
28.02.17
✎
12:43
|
(12) это как?
|
|||
17
Ёпрст
28.02.17
✎
12:48
|
(15) зачем форму ? Это надо писать унутри открываемой обработки
|
|||
18
Злопчинский
28.02.17
✎
12:49
|
опять же - ладно, допустим я возверну результат выполнения флаг успешности, нет флага - значит бяка.
но как подавить вывод сообщения про слом в табло? |
|||
19
Ёпрст
28.02.17
✎
12:49
|
У тебя чего, внешние печатные формы не могут отличить унутри себя ссылку на документ от контекста открытой формы или что ?
|
|||
20
Злопчинский
28.02.17
✎
12:50
|
(17) не, так неинтересно
|
|||
21
Ёпрст
28.02.17
✎
12:50
|
(18) как в (8) не будет сообщений
|
|||
22
Злопчинский
28.02.17
✎
12:52
|
(21) не, так неинтересно, хочу снаружи
|
|||
23
Злопчинский
28.02.17
✎
12:52
|
(19) могу я все отличить, но мну лениво. хочу тупо вызвать впф, если сломалась то просто сказать "не, так низя, вызывай не отсюда, а из документа"
|
|||
24
varelchik
28.02.17
✎
12:54
|
А зачем такие сложности?
Берем 1spy.dll и ловим все что надо об ошибках. |
|||
25
Ёпрст
28.02.17
✎
12:55
|
(23)хрень какая-то.
Пиши впф так, чтоб пофигу было, откуда они вызваны - из контекста открытой формы или в них ссылку на документ передали, например, из групповой обработки печати или из журнала документов или из формы списка справочника. У нас так было. |
|||
26
Злопчинский
28.02.17
✎
12:56
|
(25) ну, так неинтересно...
|
|||
27
Это_mike
28.02.17
✎
12:58
|
(25) это философский вопрос -
1.использовать ли печформу, которая примет документ в параметре в любой форме, либо 2.использовать документ, которому говоришь "напкечатай себя вот так вот и вон туда" |
|||
28
Вафель
28.02.17
✎
13:07
|
может проще глобальну функцию запилить
ПолучитьКонтекст(СсылкаИлиКонтекст) |
|||
29
Вафель
28.02.17
✎
13:07
|
и в начале каждой формы добавлять
|
|||
30
Злопчинский
28.02.17
✎
13:16
|
сделать так чтобы не ломалось - не проблема. а вот не переделыавая на ВПФ ничего - понять сломалась она или нет...
|
|||
31
Это_mike
28.02.17
✎
13:32
|
(30) а что значит "сломалась"?
|
|||
32
vcv
28.02.17
✎
14:14
|
А если в глобальнике описать Событие_НеобработаннаяОшибка и/или Событие_ЗаписьСобытияЖурналаРегистрации (1С++) ?
При возникновении ошибки сохраняем кудыть-нибудь признак того, что она произошла, текст ошибки и прочее нужное. После ОткрытьФормуМодально проверяем чего и как она отработала. |
|||
33
Злопчинский
28.02.17
✎
14:24
|
(32) "проверяем чего и как она отработала."
- что именно проверяем? |
|||
34
Злопчинский
28.02.17
✎
14:31
|
(31) например вывалилась по ошибке времени исполнения
|
|||
35
vcv
28.02.17
✎
14:41
|
(33) Ну где-то так
В глобальнике Перем глТрассировкаОшибок, глСписокНеобработанныхОшибок; Процедура ПриНачалеРаботыСистемы() ЗагрузитьВнешнююКомпоненту("1cpp.dll"); Перехватчик = СоздатьОбъект("Перехватчик"); Перехватчик.ПодключитьСобытие_НеобработаннаяОшибка(); глСписокНеобработанныхОшибок = СоздатьОбъект("СписокЗначений"); глТрассировкаОшибок = 0; КонецПроцедуры Функция Событие_НеобработаннаяОшибка(СообщениеОбОшибке, Маркер, ИмяФайла, Парам4, НомерСтрокиОшибки, Парам6) Если глТрассировкаОшибок = 1 Тогда глСписокНеобработанныхОшибок.ДобавитьЗначение(СообщениеОбОшибке); КонецЕсли; КонецФункции Вызов внешнего отчета глСписокНеобработанныхОшибок = СоздатьОбъект("СписокЗначений"); глТрассировкаОшибок = 1; Параметры = СоздатьОбъект("СписокЗначений"); Параметры.ДобавитьЗначение(..); ОткрытьФормуМодально("Отчет", Параметры, ИмяФормы); глТрассировкаОшибок = 0; Если глСписокНеобработанныхОшибок.РазмерСписка() > 0 Тогда ... тут делаешь всё, что надо, когда есть ошибки во внешней обработке КонецЕсли; Или я всё совсем не так понял? |
|||
36
vcv
28.02.17
✎
14:42
|
(34) А если совсем-совсем вывалилась и выполнение после ОткрытьФормуМодально не попало, то взведи ОбработкаОжидания. Можно из FormEx, там время в миллисекундах задать можно.
|
|||
37
Злопчинский
28.02.17
✎
20:29
|
(35) не, правильно все понял, примерно так.. попробую...
|
|||
38
Злопчинский
28.02.17
✎
22:02
|
(35) а где почитать подробнее про параметры функции Событие_НеобработаннаяОшибка
? |
|||
39
Злопчинский
28.02.17
✎
22:04
|
(35) не катит, ругается:
Необходимо включить перехват событий с помощью встроенного класса 1С++ - УправлениеНастройками |
|||
40
Злопчинский
28.02.17
✎
22:13
|
(39) написал так (вроде не ругается)
оНастр = СоздатьОбъект("УправлениеНастройками"); оНастр.Включить("TurboBL"); оНастр.Включить("ПерехватитьСобытияГК"); Перехватчик = СоздатьОбъект("Перехватчик"); Перехватчик.ПодключитьСобытие_НеобработаннаяОшибка(); глСписокНеобработанныхОшибок = СоздатьОбъект("СписокЗначений"); глТрассировкаОшибок = 0; |
|||
41
Злопчинский
28.02.17
✎
22:41
|
(35) Получилось как представлялось! https://www.screencast.com/t/hZ0PkEl41gJJ
этот перехватчик отлавливает ошибки и подавляет вывод в табло |
|||
42
Злопчинский
28.02.17
✎
22:47
|
однако...
|
|||
43
Злопчинский
28.02.17
✎
23:11
|
теперь непонятно как отключить событие нобработанной ошибки...
|
|||
44
Злопчинский
28.02.17
✎
23:19
|
Почитал про перехватчик, понял мало :-(
|
|||
45
vcv
01.03.17
✎
05:41
|
(43) Попробуй оНастр.Сбросить("ПерехватитьСобытияГК");
или Возврат 1; в функции Событие_НеобработаннаяОшибка, тогда должна работать штатная обработка ошибок. |
|||
46
Злопчинский
01.03.17
✎
10:42
|
(45) угу, спсб.
переписал все отчеты на анализ передаваемого параметра (благо отчетов немного). но обработка ошибок перехват - пригодится. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |