Имя: Пароль:
1C
1C 7.7
v7: Глюк синтакс-контроля?
0 andrewks
 
19.04.12
23:44
//*******************************************
Процедура Сформировать()

   СЗ=СоздатьОбъект("СписокЗначений");
   СЗ.ДобавитьЗначение("1");
   
   Знач1=СЗ.ПолучитьЗначение(Знач1);
КонецПроцедуры


кушает, молчит, выполняет
1 Попытка1С
 
19.04.12
23:45
А на что должен ругаться..
2 andrewks
 
19.04.12
23:45
(1) Переменная Знач1 не определена
3 Попытка1С
 
19.04.12
23:47
Ну так Знач1=
4 andrewks
 
19.04.12
23:48
(3) и чо? нет её ещё при подстановке параметров в функцию
5 Попытка1С
 
19.04.12
23:49
(4) А как по твоему синтаксис контроль работает?
6 andrewks
 
19.04.12
23:50
(5) строится дерево разбора, потом дерево обходится
7 Злопчинский
 
19.04.12
23:50
ну так это запросто!
конструкция
а=а/0; - не вызывает исключения
8 ildary
 
19.04.12
23:53
(2) Знач1 уже не просто определена, но и значение в нее положено -СЗ.ПолучитьЗначение(Знач1). Вот синтакс контроль и молчит.
9 andrewks
 
19.04.12
23:54
(8) чушь
10 andrewks
 
19.04.12
23:54
о, да тут дела даже хуже, чем я полагал


   А=А+1;
   Сообщить("<"+А+">");

молчит, выполняет, выдаёт пустоту
11 andrewks
 
19.04.12
23:57
ТипЗначения(А) = 0

вот, вот оно - Неопределено в 7-ке!

осталось только NULL найти
12 andrewks
 
20.04.12
00:01
вот самый простой способ получения Неопределено:


   Nothing=Nothing;
   Сообщить(ТипЗначенияСтр(Nothing));
   Сообщить(ТипЗначения(Nothing));
   Сообщить("<"+Nothing+">");
13 Попытка1С
 
20.04.12
00:02
Вот тебе делать нечего..
14 andrewks
 
20.04.12
00:03
(13) я ни при чём. случайно наткнулся
15 zxcvb
 
20.04.12
00:03
(13) Тихо ты... пусть еще пишет.
16 Злопчинский
 
20.04.12
00:06
(12) ты меня удивляешь...
Назинг = ПолучитьПустоеЗначение();
17 andrewalexk
 
20.04.12
00:07
:) ...."она всех вечно удивляла такая уж она была"
18 andrewks
 
20.04.12
00:10
(16) ну вот... так неинтересно. куда как интересней получить что-то через недокументированную фичу
19 dklushin
 
20.04.12
00:10
топикстартеру респект, я уже начал думать, что не осталось таких людей, которые ещё делают новые открытия в 7.7)
20 CepeLLlka
 
20.04.12
00:21
(19) Новые? лол даже такой неопытный сала как я это знал.
21 orefkov
 
20.04.12
00:23
(19)
Открытию сто лет в обед.
http://infostart.ru/public/16943/
На 8ке кстати тоже работает:

неттакой = неттакой;

Это не глюк, а "by design". Парсер уже после "Имя =" заводит переменную "Имя", изначально пустую.
22 andrewalexk
 
20.04.12
00:24
(0):) "спс кэп"
23 CepeLLlka
 
20.04.12
00:28
(21) Так я и говорю.. я в каком-то курсе читал про это или слушал..
Ещё в одном курсе говорят что ";" ставится для разделения, то есть в процедуре после последнего выражения можно и не ставить ";" и всё будет ок..
24 orefkov
 
20.04.12
01:43
(23)
Не только в процедуре после последнего выражения можно и не ставить ";".
Запяточку можно не ставить перед любым закрывающим ключевым словом -
Конец/Если/Цикла/Процедуры/Функции/Попытки
Исключение, Иначе, ИначеЕсли, либо просто последний оператор в теле модуля.
Вот как-то так.

В 7ке и 8ке до определенной версии объявление переменной модуля/функции обязательно требовало наличия запяточки в конце объявления:
Перем Тест;
Даже если в модуле/процедуре кроме объявления переменных ничего не было, все равно надо было ее ставить.
Однако документации это не соответствовало, и с некоторой версии 8ки (сейчас не помню точно с какой), в части переменных запяточка требуется только для разделения.
25 GROOVY
 
20.04.12
01:57
(23) Вот я так обычно говорю новичкам которые стараются везде ";" поставить, особенно после КонецПроцедуры, что бы мозг включали :)
26 Тихий омут
 
20.04.12
05:42
может и давно известно, но мы только вчера впервые наткнулись - сообщить(+)
27 andrewks
 
20.04.12
08:15
(23) про разделитель операторов чётко написано в документации. про эту хрень там ни слова. поскольку после паскаля и си я был приучен довольно тщательно относиться к переменным, наткнулся на это только сейчас, совершенно случайно
(21) спасибо за ссылку, значит, баян
28 spock
 
20.04.12
08:26
(21)забавно же.
29 orefkov
 
20.04.12
08:47
(6)
И скажу по секрету, в движке 1С дерево разбора не строится :)
30 andrewks
 
20.04.12
08:55
(29) чё, тупо автоматом анализируется?
Закон Брукера: Даже маленькая практика стоит большой теории.