Имя: Пароль:
1C
1С v8
Проблемы с отладкой в 8.3
,
0 Калиостро
 
02.07.14
12:32
Довожу до ума простенькую обработку. В коде есть ошибка. Ставлю точку останова - не срабатывает.
При выполнении в списке сообщений появляется сообщение об ошибке с номером строки в модуле обработки. Но я не могу по двойному клику перейти в конфигуратор, выскакивает модальное окно
http://gyazo.com/d318e46658e2710af46eecfcd8085422
При любом действии 1с Предприятие закрывается.

В меню "сервис" "параметры" флажок "Отладка в текущем сеансе разрешена" стоит.

Как сделать, чтобы при ошибке программа не закрывалась, а только прерывалось выполнение обработки?
1 Segate
 
02.07.14
12:34
остановка по оштбке? пробовал?
2 Maxus43
 
02.07.14
12:34
попыьтку вставь?
3 Franchiser
 
гуру
02.07.14
12:35
Клиент-серверный режим работы, модуль серверный? Если да, нужно запускать службу кластера в режиме Debug
4 РенеДекарт
 
02.07.14
12:36
(2) бесполезно
Ошибка не в обработке.
Это обработка "вклинилась" в какую-то 1с-транзакцию.
(0) включите отладку на сервере, и найдите, где происходит ошибка в конфигурации при работе обработки.
5 Калиостро
 
02.07.14
12:36
(1) С остановкой по ошибке все равно доходит до модального окна, после которого при любом варианте программа закрывается.
(2) Попытка стоит. В исключении и выходит сообщение в окне сообщений.
6 Калиостро
 
02.07.14
12:38
(3) БП 3.0 Режим запуска толстый клиент.
7 Franchiser
 
гуру
02.07.14
12:39
"При выполнении в списке сообщений появляется сообщение об ошибке с номером строки в модуле обработки" если номер строки есть - запомни его и найди в модуле обработки вручную.
8 Franchiser
 
гуру
02.07.14
12:39
(6) запусти сервер в режиме отладки тогда
9 РенеДекарт
 
02.07.14
12:40
(7)>запомни его и найди в модуле обработки вручную
бесполезно.
Ошибка произошла раньше, а здесь в этой строке - лишь 1с среагиовала сообщением.
Хотя, да, однозначно - ошибка произошла ДО ЭТОЙ СТРОКИ обработки )))
10 Калиостро
 
02.07.14
12:41
(7) Ошибка возникает в процедуре, обращение к которой идет из многих мест в обработке. Мне надо поймать стек вызовов, а точка останова не срабатывает.
11 Franchiser
 
гуру
02.07.14
12:42
через "сообщить" можно понять откуда был последний вызов
12 РенеДекарт
 
02.07.14
12:45
(10)>а точка останова не срабатывает
дебаг и отладка
(11) это каким образом 1с самостоятельно сообщит стек вызова!?
13 Александр_
Тверь
 
02.07.14
12:47
(0) еще попробуй в отладчике поставить запуск толстого клиента (управляемого приложения).
"Сервис-Параметры-Запуск 1С Предприятие".
и перезапусти из конфигуратора 1С.
14 Калиостро
 
02.07.14
12:53
(13) Да, точка останова сработала. Место возникновения по стеку сразу нашлось.

Но как сделать, чтобы 1с не закрывалась при ошибке в обработке, как это было раньше в 7.7, 8.2?

Или это еще один кактус для мышей?
15 Александр_
Тверь
 
02.07.14
12:59
(14) не стоит сразу так негативно относиться.
Попытка
Исключение
КонецПопытки

Тогда не закроется.
16 Калиостро
 
02.07.14
13:02
(15) Так и сделано. Сообщение "В данной транзакции уже происходили ошибки" и модальное окно
http://gyazo.com/d318e46658e2710af46eecfcd8085422
без кнопки "Отмена".
17 Александр_
Тверь
 
02.07.14
13:04
(16) это значит, что ошибка происходит в транзакции, в которой ранее произошла уже ошибка :)
18 Александр_
Тверь
 
02.07.14
13:07
скорее всего у тебя где-то раньше твоего кода произошла ошибка при работе с БД, которая была подавлена попыткой/исключением, а транзакция отменена не была.
Это обычно приводит к такой ошибке.
19 Калиостро
 
02.07.14
13:12
(17), (18) Я в курсе:) Хрен с ними с ошибками в этой обработке. Это обработка загрузки, ошибки могут быть в выгруженных данных. Это пройдено уже 100500 раз. В данной ситуации проще всего их искать через отладчик.
Вопрос в другом, почему 1с при возникновении ошибки закрывает программу без возможности просто прервать обработку, как в предыдущих версиях?
20 Arxangel06
 
02.07.14
13:21
(19) Просто это фатальная ошибка. Такие ошибки, именно с таким текстом и такими симптомами, были еще в 8.1. Если это обработка загрузки, то нужно записывать изменяемые объекты в транзакции. Тогда БД сама разрулит эту проблему. Проблема у тебя в данном случае выглядит так:
1. юзер открыл объект и запустил процедуру записи (например, проводит документ реализации)
2. твоя обработка меняет объект, связанный с пользовательским, например карточку контрагента, и записывает его.
3. платформа понимает, что возникло нарушение целостности базы и принимает меры к исправлению - откатывает транзакцию. причем в зависимости от продолжительности транзакций и их взаимного значения возможна отмена как одной из транзакций, так и обеих.
21 Александр_
Тверь
 
02.07.14
13:22
(19) наверное тут вопрос технологический.
Не забывай, что 1С как платформа становится все сложнее и сложнее.

По сути ведь - это ошибка прикладного кода (а не платформы), которую платформа старается локализовать. Но не может гарантировать, что это получится.

Можешь попробовать в попытке написать что-нибудь типа ОтменитьТранзакцию(). возможно это сможет помочь.
22 РенеДекарт
 
02.07.14
13:24
(18)>которая была подавлена попыткой/исключением
неверно. Верно в ( 20)
При Попытке все прошло бы гладко.
(19)>без возможности просто прервать обработку, как в предыдущих версиях?
в отладчике включить "Останавливаться по ошибке".
(21)>Не забывай, что 1С как платформа становится все сложнее и сложнее.
когда разговаривать начнет? ))
23 РенеДекарт
 
02.07.14
13:26
+ "в отладчике включить "Останавливаться по ошибке"."
но опять же, платформа остановится не в реальном месте возникновения ошибки, а "где среагиовала", т.е. в обработке.
Это к вопросу "все сложнее и сложнее".
24 РенеДекарт
 
02.07.14
13:26
*среагировала
25 Александр_
Тверь
 
02.07.14
13:26
(22) если ошибка происходит при записи и при этом нет подавления попыткой/исключением то ошибка возникнет тут же и будет звучать типа: ошибка записи бла бла бла.
26 РенеДекарт
 
02.07.14
13:29
(25)>и при этом нет подавления попыткой/исключением то ошибка возникнет тут же
Вы удивитесь, но в 1С все свое:
Попытки нет и не было, ошибка происходит в какой-то транзакции, 1с выполняет все до конца, а потом - по завершению/откату транзакции (уже в другом совершенно месте, но по ходу выполнения кода, т.е. дальше) сообщает об "ошибке".
27 РенеДекарт
 
02.07.14
13:29
(25)>тут же и будет звучать типа: ошибка записи бла бла бла.
вы честно предполагали за 10 рублей получить СУБД? ))
28 Александр_
Тверь
 
02.07.14
13:32
(26) все случаи с которыми я сталкивался были именно такими как я описал. Правда в основном это касается 8.1
(27) не понял вопроса и юмора с ним связанного.
29 Arxangel06
 
02.07.14
13:52
(28) в толстом клиенте 8.2 ничего не изменилось.
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой