Имя: Пароль:
1C
1С v8
Переменная существует
,
0 extrim-style
 
19.09.11
10:38
Понедельник - день тяжелый). Как правильно проверить переменную на существование?
1 guitar_player
 
19.09.11
10:39
в смысле? ЗначениеЗаполнено() не?
2 PR
 
19.09.11
10:39
LOL
3 PR
 
19.09.11
10:40
Попытка?
4 Ненавижу 1С
 
гуру
19.09.11
10:40
(0) да...
это вам даже не Неопределено
5 butterbean
 
19.09.11
10:40
не переживай, за тебя 1С проверит
6 Нуф-Нуф
 
19.09.11
10:40
.ОнаСуществует()
7 extrim-style
 
19.09.11
10:40
(1) ЗначениеЗаполнено(<Значение>)
Параметры:
...
Источники данных не проверяются, значение считается заполненным всегда.

(3) не хотелось через попытку, поэтому спрашиваю
8 Wobland
 
19.09.11
10:40
какой-то философский вопрос. я ctrl+f7 делаю...
9 Поручик
 
19.09.11
10:41
(0)

Если ПеременнаяНеСуществует(Переменная) Тогда

КонецЕсли;
10 Defender aka LINN
 
19.09.11
10:43
(7) И что? Чем тебя ЗначениеЗаполнено() не устраивает?
11 Stepa86
 
19.09.11
10:46
(4) Как думаешь, что будет?

   Если Ложь Тогда
       
       НоваяПеременная = "некоторое значение";
       
   КонецЕсли;
   
   Если НоваяПеременная = Неопределено Тогда
       
       Сообщить( "НоваяПеременная=Неопределено" );
       
   КонецЕсли;
12 extrim-style
 
19.09.11
10:46
(10) епт, прочитал сп, а там вот это "Источники данных не проверяются, значение считается заполненным всегда."
Попробовал - действительно фурыкает. Спс.
13 extrim-style
 
19.09.11
10:49
(12) а сейчас еще раз прочитал, оказывается тут можно двояко понять
14 Ненавижу 1С
 
гуру
19.09.11
10:52
(11) Неопределено будет, это же быдло язык ))
15 rutony
 
19.09.11
10:59
(14) Почему сразу быдло...

Все логично. Переменные описанные в тексте, автоматически объявляются самим компилятором.
То есть он воткнет вначале всего текста:
Перем НоваяПеременная;
16 Ненавижу 1С
 
гуру
19.09.11
11:00
(15) потому что второе условие в зависимости от контекста может не выполниться, в общем случае
17 Stepa86
 
19.09.11
11:05
(15) нормальный язык должен был упасть с нехеровой ошибкой и на этапе проверки сообщить, что пытаетесь работать с необъявленной переменной.
Я как то очень долго искал ошибку из за такого молчаливого объявления переменных
18 extrim-style
 
19.09.11
11:06
(10) не работает. Пишет, что переменная не определена. А мне как раз это и нужно проверить.
19 extrim-style
 
19.09.11
11:06
получается только попыткой?
20 ДемонМаксвелла
 
19.09.11
11:08
(18) ну определи её сам в области переменных.
21 ZanderZ
 
19.09.11
11:08
(0) смысл какой ?
22 extrim-style
 
19.09.11
11:12
(21) смысл в том, чтобы не плодить лишние переменные для использования лишь в одном участке кода. А глобальный смысл заключается в использовании рекурсивной функции, результат которой должен записываться в эту переменную. Не хотелось постоянно передавать переменную в качестве параметра (рекурсивная функция), а лишь однажды создать при первом входе.
23 extrim-style
 
19.09.11
11:16
Так верно будет?

Попытка
Если ТЗ = Неопределено Тогда
  ТЗ = Новый ТаблицаЗначений;
  ТЗ.Колонки.Добавить(...);
  ...
КонецЕсли;
Исключение
  ТЗ = Новый ТаблицаЗначений;
  ТЗ.Колонки.Добавить(...);
  ...
КонецПопытки;
24 ZanderZ
 
19.09.11
11:17
(22) в каком модуле ты хочешь написать "рекурсивная функция" ?
25 extrim-style
 
19.09.11
11:18
(23) так тоже ругается. то есть полюбому переменную объявлять?
(24) модуль объекта внешнего отчета. не хочу написать - уже написано)
26 Axel2009
 
19.09.11
11:19
использование глобальных переменных для рекурсивной функции есть зло..
27 extrim-style
 
19.09.11
11:21
(26) нет не глобальная, локальная, модуля. не хочу объявлять переменную в блоке объявления переменных, т.к. используется в одном единственном месте. Хочу создать её при первом входе в рекурсивную функцию. Как мне это сделать. Флаг первого входа по рекурсии тоже таскать не хочется...
28 Stepa86
 
19.09.11
11:22
(27) ты точно знаешь про области видимости переменных?
29 extrim-style
 
19.09.11
11:23
(28) думаю, что знаю. Или как правильно "думал, что знал"? ))
30 Axel2009
 
19.09.11
11:26
(29) как бе объявление переменной до вызова рекурсивной функции в самой функции не будет видеть переменную..
31 extrim-style
 
19.09.11
11:26
(28) я понял.
32 extrim-style
 
19.09.11
11:27
избавился от реквизита. теперь придется таскать переменную.
(30) понял ошибку. спасибо.