Имя: Пароль:
1C
1С v8
Почему Неопределено не может быть ключом соответствия?
0 Ненавижу 1С
 
гуру
30.01.12
17:24
1. традиционно 62% (8)
2. баг 15% (2)
3. багофича 15% (2)
4. фича 8% (1)
Всего мнений: 13

С = Новый Соответствие();
С.Вставить(Неопределено);
Сообщить(С.Количество()); //выдает 0
С = Новый Соответствие();
С.Вставить(NULL);
Сообщить(С.Количество()); //выдает 1

вопрос: почему? это фича или баг?
1 Maxus43
 
30.01.12
17:25
нельзя объять необятное, нельзя описать неописуемое и нельзя впихнуть невпих*емое (с)

традиционно
2 IamAlexy
 
30.01.12
17:27
(0) бгыыыыыыыыыыы
3 Ненавижу 1С
 
гуру
30.01.12
17:29
Ну реально ударился лбом об это
4 Maxus43
 
30.01.12
17:36
зачем хоть это надо? или просто любимая тема?)
5 SUA
 
30.01.12
17:49
это 1с...

традиционно
6 rs_trade
 
30.01.12
17:55
(0) тебе надо доступ дать к партнерскому форуму. знатно троллить там разработчиков будешь ))

традиционно
7 H A D G E H O G s
 
30.01.12
18:02
Неопределено - это что то непонятное, неинициализированное. Это даже не NULL.

фича
8 fisher
 
30.01.12
18:04
У меня уже ассоциативный ряд "Неопределено-NULL-Ненавижу 1С" на подкорку записан :)
А если по теме, то такое поведение полностью укладывается в мою модель логики 1С.
В которой "Неопределено" - родное пустое значение 1С (с ньюансами использования), NULL в коде - служебный тип для обработки выборок из БД, а NULL в запросе - субедешный NULL.

традиционно
9 Sammo
 
30.01.12
18:05
Емнип, в коллекциях значений Неопределено - это отсутвие элемента коллекции (например, вернуть соответствие по несуществующему ключу)
10 Rie
 
30.01.12
18:07
(9) Тем не менее, в список значений Неопределено можно добавить (в отличие от 7.х). И в массив можно.

традиционно
11 fisher
 
30.01.12
18:12
(10) Мда... С соответствием как-то кривовато получилось...

багофича
12 Sammo
 
30.01.12
18:13
(11) Не пробовал. Возможно.
А что там с индексированностью соответсвия?
13 Shurjk
 
30.01.12
18:14
(0) У непределенно нет типа.

традиционно
14 Эмбеддер
 
30.01.12
18:15
Насколько я помню, если в SQL написать условие
where NULL<>NULL
оно не выполнится
а если
where NULL IS NULL
то выполнится
так что странно, что NULL добавился
15 Эмбеддер
 
30.01.12
18:16
опечатка
where NULL=NULL
вместо
where NULL<>NULL

хотя не выполнятся оба этих условия
16 fisher
 
30.01.12
18:20
(11) + Полезная ветка. Ситуация вполне реальная, мог бы упереться. Теперь буду знать.
17 Sammo
 
30.01.12
18:21
+12 Емнип, поиск в соотвествии быстрее, чем в списке значений и массиве. Возможно (зуб не дам, сейчас не помню) там неявный индекс по ключу.
И как проиндексировать кНеопределено?
18 fisher
 
30.01.12
18:24
(17) Да никаких проблем. Ты же не думаешь в самом деле, что Неопределено в 1С это абстрактная сущность? Технически это служебный тип.
19 Rie
 
30.01.12
18:25
(13) Есть у него тип.
Сообщить(ТипЗнч(Неопределено));
20 DJ Anthon
 
30.01.12
18:25
я вот в соседней ветке в похожую херню вляпался. пустую строку нельзя добавлять в интерактивный список..
21 DJ Anthon
 
30.01.12
18:25
в 7.7 ;)
22 Shurjk
 
30.01.12
18:26
(18) Какой же это тип - для каждого типа характерно иметь значение по умолчанию.
23 Shurjk
 
30.01.12
18:27
(19) Неопредлено - это он сообщает не тип а то что тип неопределен.
24 DrShad
 
30.01.12
18:29
(0) а реально для чего в соответствии нужен Неопределено?
25 Rie
 
30.01.12
18:41
(23) Это он сообщает именно тип - преобразует в строку значение типа Тип.
Можешь проверить так:
Сообщить(ТипЗнч(Неопределено)=Тип("Неопределено"));
26 Shurjk
 
30.01.12
18:43
(25) А нет ага все таки тип- но всего с единственным значением.
Да уж явно здесь немного перемудрили.
27 Shurjk
 
30.01.12
18:45
+(26) Значит примерно так будет, а то какая то явное "неопределенность" выходит :)

баг
28 Rie
 
30.01.12
18:48
(26) Почему "перемудрили"? Типов с единственным значением - выше крыши. Более того, нечто типа нуля для чисел - для типов тоже требуется. Вот и... Да и используется Неопределено - в случае для составных типов и иже с ними, когда "значение по умолчанию" сколь-нибудь разумным способом не задать.
Дискуссию насчёт NULL и Неопределено ещё можно понять. Но насчёт необходимости Неопределено - IMHO, тут достаточно прозрачно.
29 Shurjk
 
30.01.12
18:50
(28) Ну если используется как тип то почему бы его не вставить в соответствие? Хотя автор в (0) вообще как то странно соответствие использует.
30 Shurjk
 
30.01.12
18:52
(28) не, не все таки традиционно NULL это не значение а скорее признак отсутствия значения, а Неопределенно - это тип о чем черном по белому в СП и написано. При разработке я например буду думать что это тип и поэтому могу сделать ошибки.
31 Shurjk
 
30.01.12
18:53
То есть вопрос не в том нужно непоределено или нет, а в том как оно работает в соответствии.
32 Shurjk
 
30.01.12
18:56
Тьфу блин навел ТС мути все правильно он просто не знает как соответствием пользоваться
33 Rie
 
30.01.12
19:02
(30) И ещё раз удивись :-)
Сообщить(ТипЗнч(Null));
Сообщить(+Строка(ТипЗнч(Null)=Тип("Null")));
34 Ненавижу 1С
 
гуру
31.01.12
06:37
(28) имхо в 1С их всего 2: NULL и Неопределено
35 guitar_player
 
31.01.12
06:53
да все логично в принципе

традиционно
36 Кириллка
 
31.01.12
06:57
Народ неадекватен :)

Неопределено - это примитивный тип данных (ИТС - Документация - Руководство разработчика - Глава 4).

А по забжу: С.Вставить(Неопределено) == С.Вставить(,), отсюда и выводы.

традиционно
37 Rie
 
31.01.12
07:02
(34) СправочникМенеджер.Номенклатура, СправочникМенеджер.Контрагенты, СправочникМенеджер.Валюты и т.д. - у всех этих типов ровно по 1 значению.
38 Рэйв
 
31.01.12
07:04
(0)забацай так тогда

С=Новый Соответствие;
С.Вставить("Это неопределено",Неопределено);

баг
39 FIXXXL
 
31.01.12
07:53
(38) лучше так:

С=Новый Соответствие;
С.Вставить("ЗдесьБылНенавижу1С",Неопределено);
40 Ненавижу 1С
 
гуру
31.01.12
10:38
(37) это не типы вообще, тип один - СправочникМенеджер
41 Reset
 
31.01.12
10:50
(40)
а=Справочники.Валюты;
б=Справочники.Контрагенты;
Сообщить(ТипЗнч(а));
Сообщить(ТипЗнч(б));
Сообщить(а=б);
Сообщить(ТипЗнч(а)=ТипЗнч(б));
....
Справочник менеджер: Валюты
Справочник менеджер: Контрагенты
ложь
ложь


Не?
42 Reset
 
31.01.12
10:54
.

багофича
43 Ненавижу 1С
 
гуру
31.01.12
10:58
(41) согласен
44 Ненавижу 1С
 
гуру
31.01.12
12:34
И еще: а нафига?

С = Новый Соответствие();
С.Вставить("А");
С["А"] = 5; //так можно
Для каждого Эл из С Цикл
   Эл.Значение = 5; //а так нельзя?!
КонецЦикла;
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.