Имя: Пароль:
1C
 
Проверка программного кода в пользовательском режиме
0 Shrek
 
23.12.09
13:45
Всем привет. Есть справочник, в котором пользователь вводит программный код 1С. Как можна проверить этот код на правильность? То есть произвести синтаксический контроль как в Конфигураторе (Ctrl+F7). Заранее спасибо.
1 Rie
 
23.12.09
13:46
(0) Ну, пишешь свой синтаксический анализатор...
Или же с помощью FormEx пытаешься загрузить код как дополнительный модуль и смотришь, ругается или нет.
2 zbv
 
23.12.09
13:51
попробывать выполнить.
3 sam_sam
 
23.12.09
13:52
(0) а зачем этот изврат? Пользователь он на то и пользователь, чтобы в кнопки пальцем тыкать, а не код писать.
4 Shrek
 
23.12.09
13:52
(2) Пробовал Выполнить(), но он возращает ошибку на модуль, в котором вызываю Выполнить().
5 AndOne
 
23.12.09
14:21
Все правильно. Вот и проверяйте, если есть ошибка, значит код не правильно написан.
6 anatoly
 
23.12.09
14:28
(4) проверь на простом заведомо рабочем коде - если опять ошибка, занчит ошибка в самом модуле какая то.

а синтакс-контроль это не гарантия что ошибок не будет при исполнении - не то поле не туда присвоил - вот и ошибка вылезет.

а вообще по моему можно расшифровку ошибки получить, может в "служебные сообщения" что то пишется?
7 anatoly
 
23.12.09
14:37
попробуй такой код:
===
Попытка
   Значение = неопределено;
   Выполнить("Значение = Строка("+ПроизвольныйАлгоритм+")");
   Возврат Значение;
Исключение
   Сообщить("Ошибка " +ОписаниеОшибки()+ " при попытке выполнить следующий код: "+Символы.ПС + "Значение = "+ПроизвольныйАлгоритм, СтатусСообщения.Важное);
   Возврат "";
КонецПопытки;
===
здесь "ПроизвольныйАлгоритм" - строка с выполняемым кодом, вытащил из своей рабочей конфы.
8 PowerBoy
 
23.12.09
14:42
ТекстДляВыполнения = ТекстДляВыполнения + "Если Ложь Тогда " + Символы.ПС + Алгоритм + " КонецЕсли";
Попытка
   Выполнить(ТекстДляВыполнения);
Исключение
   Сообщить("Ошибка синтаксиса");
КонецПопытки;
9 Jolly Roger
 
23.12.09
14:45
10 Jolly Roger
 
23.12.09
14:49
(7) а если "ПроизвольныйАлгоритм" удаляет все данные в базе?
11 anatoly
 
23.12.09
14:59
(10) а если юзеру надо именно удалить все данные в базе?
как я уже писал выше - проверка синтаксиса не гарантирует что код выполнится без ошибок.
12 Stepa86
 
23.12.09
15:16
(8) прикольно =) *записал в блокнотик*

а если

НачатьТранзакцию();
Выполнить( ТекстАлгоритма );
ОтменитьТранзакцию();

можно утверждать, что код отработает без последствий для базы?
13 Jolly Roger
 
23.12.09
16:04
(11) сомневаюсь, что юзер ожидает, что это произойдет в момент проверки синтаксиса...
14 Jolly Roger
 
23.12.09
16:05
(8) одна фигня: с процедурами не работает...
15 Jolly Roger
 
23.12.09
16:06
(12) можно, только если юзер никуда не торопится...