Имя: Пароль:
1C
 
Выполнить() и кривой код
0 Ненавижу 1С
 
гуру
30.04.10
10:52
Имеем быдлокод:

Процедура КнопкаВыполнитьНажатие(Кнопка)
   
   Выполнить("Сообщить(1);  Перейти ~метка; Сообщить(2);");
   
КонецПроцедуры

Так вот выводит только 1 и нет ошибок и исключений.
ВЫВОД: В случае если в Выполнить() есть Перейти на несуществующую метку в данном контексте, то не вызывается исключение, нет ошибки, просто прекращает дальше работать Выполнить. Ошибка деления на ноль, например, ведет себя как обычно - исключение вызывается.
1 nop
 
30.04.10
10:52
ты что сдурел?
2 Господин ПЖ
 
30.04.10
10:53
гы. косяк...
3 Ненавижу 1С
 
гуру
30.04.10
10:53
(1) откуда вывод?
4 nop
 
30.04.10
10:53
(3) Ветку видел вчера?
v8: Выполнить. Весь мозг поломал
5 nop
 
30.04.10
10:54
эпидемия какая то Выполняльщиков
6 Jolly Roger
 
30.04.10
10:54
(0) и чо?
7 Andry888
 
30.04.10
10:58
(0) Вчера все вроде обсудили...
8 Ненавижу 1С
 
гуру
30.04.10
10:58
(4) ясно, не читал, но источник тот же http://dff.sytes.net/906#eod
так что признаю, что баян, просто выжал суть проблемы
9 nop
 
30.04.10
11:00
(8) так вот откуда ноги ... :) Дуб заразил всех птичьим гриппом, штамом белоклювого дятла
10 Andry888
 
30.04.10
11:02
(0) Кстати чем докажешь, что работа именно прекращается, а не срабатывает метод перейти ( и управление просто передается невесть куда )?
11 quest
 
30.04.10
11:04
(9) Не Дуб. Это моя отборная трава.
(10) она прекращается. Точнее не найдя метку куда перейти  вызывается исключение котрого ты не видишь в платформе.
12 Ненавижу 1С
 
гуру
30.04.10
11:04
(10) что значит невесть куда? ну поставь после Выполнить Сообщить
13 Ненавижу 1С
 
гуру
30.04.10
11:05
(11) если ты его не можешь обнаружить, то его и нет, с точки зрения разработчика на платформе
14 quest
 
30.04.10
11:08
оно есть. Вот чувствую что есть. Код только не могу сформулировать и условия при которых будет видно его. Ведь если бы переходил невесть куда - выполнялось бы невесть что.
15 Andry888
 
30.04.10
11:08
(12) и че? сообщить сработает... ты видел в прошлой ветке примеры когда в "выполнить" срабатывает код, который не пропустит синтаксис контроль в обычном коде?
16 Ненавижу 1С
 
гуру
30.04.10
11:09
(14) да передается дальше, а не невесть куда, а исключения нет
17 Ненавижу 1С
 
гуру
30.04.10
11:10
(15) по идеи тут вообще не должно начать работать Выполнить() так как идет парсинг текста
Могу показать конструкцию где именно так
18 quest
 
30.04.10
11:13
(17) покажи
19 Andry888
 
30.04.10
11:13
(17) где тут? не понял что ты имеешь ввиду...
20 Ненавижу 1С
 
гуру
30.04.10
11:17
(19) тут это в (0)
(18) смотри:

Процедура КнопкаВыполнитьНажатие(Кнопка)
   
   А=1;
   Выполнить("Сообщить(А);Сообщить(Б);"); //ошибка при парсинге
   
КонецПроцедуры
21 Andry888
 
30.04.10
11:21
(20) Да правильно, НО переход меток (ошибочный) работает в выполнить и может привести к аварийному завершению 1Ски...
22 quest
 
30.04.10
11:22
не при парсинге. При поиске перменных. Текст корректный. Некоректно окружение в котром выполняться будет
23 Ненавижу 1С
 
гуру
30.04.10
11:40
(21) но не приводит же
24 Ненавижу 1С
 
гуру
30.04.10
11:41
(22) да какая разница, это и есть парсинг и анализ текста - и Выполнить не срабатывает вообще, а с Перейти работает
25 Andry888
 
30.04.10
11:42
(23) В прошлой ветке есть пример когда, via метки переходим в тело цикла и... алес капут, НО переходим!)
26 Ненавижу 1С
 
гуру
30.04.10
11:43
(25) найди этот пример, плиз
27 Andry888
 
30.04.10
11:50
текст = "
|для х = 1 по 0 цикл
|
|~метка:сообщить(""БУМ!"")
|конеццикла;
| х = 1;
|перейти ~метка;
|Сообщить(""1"")";
выполнить(текст);
28 Ненавижу 1С
 
гуру
30.04.10
11:56
(27) клево! 1С пропускает эту ахинею и гибнет
по идеи тоже на момент парсинга ведь должна гибнут
29 Andry888
 
30.04.10
12:03
(28) В общем "выполнить" вещица еще та... соответственно выводы в (0) превращаются в догадки.)
30 Ненавижу 1С
 
гуру
30.04.10
12:27
(29) нда...
а так, не вываливается, а дает ошибку сравнения несравнимого:

Процедура КнопкаВыполнитьНажатие(Кнопка)
   
   текст = "
   |Предупреждение(1);
   |для х = 1 по 0 цикл
   |
   |~метка:Предупреждение(2);сообщить(""БУМ!"")
   |конеццикла;
   |Предупреждение(3);
   | х = 1;
   |Предупреждение(4);
   |перейти ~метка;";

   выполнить(текст);
   
КонецПроцедуры
31 quest
 
30.04.10
12:38
(30) я тебе больше скажу - полд вайном код из 27 валит систему после того как 2 раза нажмешь на выполнить в Торговле. 4 раза на выполнить в бухгалтерии. На зупе не проверял. На моей машине воспроизводимый результат после перезагрузок, перезапусков вайна С чем связано - не понятно.
32 Andry888
 
30.04.10
12:43
(30) а ты поставь ";" после сообщить(""БУМ!"")... и вуаля=)
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн