Имя: Пароль:
1C
1С v8
Найти номер строки в модуле.
, , ,
0 InSoulRock
 
17.07.14
12:11
Здравствуйте! Заранее извиняюсь, только учусь, прошу строго не судить. Возникла мысль\задался вопросом, формировать себе задачу при срабатывании определенного условия, чтобы отследить исключения при выполнении кода, и не только. Задачу формирую, с этим проблем нет, но как мне получить номер строки и название модуля? Что то типа ОписаниеОшибки(), в которой есть эта информация. Спасибо что дочитали хотя бы)
1 Rebelx
 
17.07.14
12:12
ИнформацияОбОшибке()
2 Maxus43
 
17.07.14
12:13
дочитал, пожалуйста.

В ОписанииОшибки эта информация есть, но это когда используешь Попыка-Исключение
3 InSoulRock
 
17.07.14
12:15
(2) Да, а я планирую использовать это не только в попытка - исключение. ИнформацияОбОшибке() я так понимаю тоже будет заполнена если есть ошибка. Но ошибки может и не быть.
4 Maxus43
 
17.07.14
12:19
(3) ИнформацияОбОщибке - показывает только при наличии ошибки
5 InSoulRock
 
17.07.14
12:24
Перефразирую, на примитивном примере.
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
                   |    Пользователи.Ссылка
                   |ИЗ
                   |    Справочник.Пользователи КАК Пользователи
                   |ГДЕ
                   |    Пользователи.Наименование = &Программист";
    Запрос.УстановитьПараметр("Программист", "Иванов Иван Иванович");
    Результат = Запрос.Выполнить().Выгрузить();
    
    Если Результат.Количество() > 1 Тогда
        Сообщить("Произошла ошибка!!!");
//нарезаем задачу, в задаче указываем номер вот этой строки, и название модуля.
        Возврат;
    КонецЕсли;
6 InSoulRock
 
17.07.14
12:25
Возможно ли получить как то? Номер строки, модуль.
7 Maxus43
 
17.07.14
12:28
(6) нет
8 Maxus43
 
17.07.14
12:28
только путём
Попытка
А = 1/0;
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
9 silent person
 
17.07.14
12:29
(5) не понял а где тут ошибка ? может ВызватьИсключение поможет ?
10 Maxus43
 
17.07.14
12:30
(9) деление на 0
11 Maxus43
 
17.07.14
12:31
можно и
Попытка
ВызватьИсключение "Тратата"
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
12 InSoulRock
 
17.07.14
12:31
Вы на сообщение в коде внимание не обращайте, ошибки быть и не может.
13 f_vadim
 
17.07.14
12:32
Я иногда пишу код ошибки, потом поиском можно найти
Скажем так:

Сообщить("Произошла ошибка!!! Код 0х0000001");
14 InSoulRock
 
17.07.14
12:32
то есть можем только через исключение, хм...
15 InSoulRock
 
17.07.14
12:35
Громоздко получится
16 Rebelx
 
17.07.14
12:52
(11) не гуд.

Если Результат.Количество() > 1 Тогда
    ВызватьИсключение("Ошибка логики: результат запроса пустой");
КонецЕсли;

это - гуд
17 Rebelx
 
17.07.14
12:53
+(16) в смысле - "результат запроса не пустой"
18 hhhh
 
17.07.14
12:56
(15) ну а так

      Сообщить("Произошла ошибка!!!");
      Сообщить("МОдуль такой то строка такая-то")
19 InSoulRock
 
17.07.14
13:01
(18) к этому я и пришел, передавать название модуля и номер строки вручную, явно.
Сообщить("Произошла ошибка!!!");
_НарезатьЗадачу(НазваниеМодуля, 12); //к примеру
20 InSoulRock
 
17.07.14
13:02
а в процедуре этой, формирую задачу и отправляю себе.
21 Maxus43
 
17.07.14
13:09
(16) дак твой гуд - прервёт выполнение программы, если исключение не в Попытке.
А оно надо? я вот вангую что нет
22 sirsp
 
17.07.14
13:41
(19) А вставишь строки перед этим, до решения "задачи"?
23 f_vadim
 
17.07.14
13:44
(22) делов-то, пройтись по всему модулю, да исправить.
А уж кто будет после сопровождать, так вообще подивится мастерству и изысканным решениям разработчика.
24 sirsp
 
17.07.14
13:47
(23) Дык нафэйхоа тогда номер строки? :)
25 mikecool
 
17.07.14
13:47
в отладке указать "останавливаться по ошибке"
26 Defender aka LINN
 
17.07.14
13:49
(13) Угу. У Мелкософта, вон, тоже, на каждый чих по коду ошибки. Правда, почему-то, если что и находится - то только "Неизвестная ошибка".
27 InSoulRock
 
17.07.14
13:51
(24) ну а вдруг в модуле несколько вставок _НарезатьЗадачу() :).
Вопрос этот встал потому что пользователи мягко говоря забивают на сообщения\предупреждения.
28 f_vadim
 
17.07.14
13:51
(26) Код ведь не для пользователя, а для разработчика.
29 f_vadim
 
17.07.14
13:52
(27) Дрессируй. Пусть к заявкам скрины прикладывают.
30 РенеДекарт
 
17.07.14
13:54
(0) 1С - это не Бейсик.
Так что - пользуйтесь тем, что есть.
31 InSoulRock
 
17.07.14
13:54
(29) заявки они не формируют. Она автоматически прилетает ко мне когда выполняется условие.
32 sirsp
 
17.07.14
13:56
(27) Я к тому, что в случае активного изменения кода, ты строку по номеру не идентифицируешь!
33 f_vadim
 
17.07.14
13:57
(31) ну отсылай какой-нибудь код, по нему глобальным поиском можно найти.
34 InSoulRock
 
17.07.14
13:57
(32) кстати ты прав
35 f_vadim
 
17.07.14
14:01
(31) Опять же, если ты прогнозируешь появление ситуации, которая предусматривает вмешательство разработчика, что мешает предусмотреть заранее обработку исключений или вообще не допускать их возникновения?
36 InSoulRock
 
17.07.14
14:04
(35) в первом посту я писал что начинающий) я не могу всего предусмотреть в силу не опытности, а пользователи забивают на сообщения часто.
37 f_vadim
 
17.07.14
14:11
(36) По-моему, проблема высосаного яйца не стоит.
Получается, что, несмотря на ошибки, пользователь получает какой-то результат. И на корректность забивает. А ты такой ниндзя втихаря всё поправил.
Может не давать пользователю ничего? Может просто прекращать выполнение и выдавать сообщение "исключительная ситуация. пригласите разработчика"?
38 InSoulRock
 
17.07.14
14:12
(34) тот же модуль могут переименовать, а потом не найдешь. задумка тает(
39 f_vadim
 
17.07.14
14:16
(38) глобальный поиск по "0х00110011" найдёт тебе даже переименованном модуле.
40 InSoulRock
 
17.07.14
14:20
(39) а если у меня не одна такая вставка будет? вести учет? 0х00110011 использовал для такого то, 0х00110101 использовал для такого то.
41 f_vadim
 
17.07.14
14:24
(40) тьху блин, голову включай.
Во-первых, сообщение в любом случае должно содержать максимум информации. Подумай о тех пользователях, кто всё-таки будет читать сообщения, и тех, кто будет сопровождать твою поделку после тебя.
Коды можно сделать уникальными в пределах модуля и добавить префикс с названием модуля, типа "ОбщегоНазначенияКлиентСервер_001"
42 InSoulRock
 
17.07.14
14:29
Ладно, спасибо всем за ответы.
Закон Брукера: Даже маленькая практика стоит большой теории.