Имя: Пароль:
1C
1С v8
Странный баг с массивом.
Ø (Волшебник 18.02.2016 13:42)
0 ammo-sov
 
18.02.16
11:48
Здравствуйте!
Возникла ситуация, при котором необходимо искать в массиве (методом найти(значение), которое возвращает 1, если элемент поиска найден в массиве и наоборот) определенные данные.

*версия платформы 8.3.5.1383

После некоторых тестов свежеиспеченного кода оказалось, что в одном случае наш метод поиска хромает.

Не буду томить огромным кодом, а вставлю только сымитированный код:

Массив = Новый Массив();
Массив.Добавить("Шаблон 1-2");
Массив.Найти("Шаблон 1-2");

Результатом, на первый взгляд правильного кода, должна стать заветная 1, но приходит 0.

Так вот, встречались ли у кого-нибудь подобные ситуации.
Конечно, обойти эту неприятность не составляет труда другими методами, но все же интересно, что вы думаете?
1 Волшебник
 
модератор
18.02.16
11:49
Если элемент найден, возвращается его индекс. Если элемент не найден, возвращается Неопределено.
2 Волшебник
 
модератор
18.02.16
11:50
элементы массива индексируются с 0
3 Волшебник
 
модератор
18.02.16
11:50
Неопределено <> 0
4 Ёпрст
 
18.02.16
11:50
(0) И ? Индекс=0, че не устраивает ?
Индексы коллекций, в снеговике, всегда с 0 начинаются
5 Господин ПЖ
 
18.02.16
11:51
>Конечно, обойти эту неприятность не составляет труда другими методами

или начни читать СП или увольняйся
6 Ёпрст
 
18.02.16
11:51
Чорт, олени не кормлены
7 ks_83
 
18.02.16
11:55
ветку в юмор
8 ammo-sov
 
18.02.16
12:02
Типичный русский форум, да Ёпрст?
Всем остальным спасибо, разобрался.

Дело было в том, что я проверял в цикле на существование (ifelse) строки в массиве.
И когда приходил первый элемент с индексом 0, то он выражался в конструкции, как ложь и не проходил проверку.
9 DDwe
 
18.02.16
12:04
(8) См. (5). Прежде чем писать, нужно почитать.
10 ammo-sov
 
18.02.16
12:09
DDwe, ясно.
11 DDwe
 
18.02.16
12:11
(10) Хорошо. Видимо шанс есть.
12 el7cartel
 
18.02.16
12:18
пожалуй тут все потеряно!!!шансов нет!!!
13 Ёпрст
 
18.02.16
12:21
(8) че ?
если ты про (6) , то это не тебе
14 Ёпрст
 
18.02.16
12:22
Ну и, если не знаешь, что означает выражение в (6) , то см.(5)
15 ObjectRelation Model
 
18.02.16
12:22
(3) кстати да
NULL <> 0
16 ObjectRelation Model
 
18.02.16
12:23
В большинстве языков Find, если не нашла элемент возвращает -1, но 1С пошла своей тропой
17 Господин ПЖ
 
18.02.16
12:26
(16) там тоже принято кодировать не смотря в msdn и прочие мануалы?
18 Господин ПЖ
 
18.02.16
12:27
вопрос не в языке как обычно. а в банальном рукож.пии
19 ObjectRelation Model
 
18.02.16
12:28
(17) а причем тут это? просто есть общая культура, когда поведение предсказуемо, поэтому переход от языка к языку хоть немного легче
20 DDwe
 
18.02.16
12:32
(19) Фигню вот сейчас городишь. (1С не оправдываю :))
21 los_hooliganos
 
18.02.16
12:45
(0) Глюк из-за того что размерность массива не указана. А раз размерность null, то метод Найти ничего и не находит.

Прежде чем добавлять увеличь размер массива.
22 ObjectRelation Model
 
18.02.16
12:47
(21) это сейчас что было?
23 Drac0
 
18.02.16
12:48
(21) Чо? Ты сейчас про 1С?
24 los_hooliganos
 
18.02.16
12:58
(22) (23) Работа с массивом это великое искусство. Не каждому дано.
25 Ёпрст
 
18.02.16
12:59
(24) размерность массива только в клюшках задавать надо было, в снеговике  - не трэба
26 ObjectRelation Model
 
18.02.16
12:59
(24) это ты прямо как в точку )))
27 rs_trade
 
18.02.16
13:08
(0) У меня такая же фигня. Этот странный глюк на всех версиях платформы. Писать в 1С надо.
28 DailyLookingOnA Sunse
 
18.02.16
13:41
Массив.Вставить(2000000) было бы куда лучше.
И сразу индекс бы был известен.