|
ошибка перебора соответствия на платформе 8.3.17.1851 | ☑ | ||
---|---|---|---|---|
0
kauksi
11.02.21
✎
15:19
|
Если выполнить следующий код на платформе 8.3.17.1851
СведенияПоСерии = Новый Соответствие; НомерСтроки=1; Для Н=1 По 100 Цикл СведенияПоСтроке = Новый Структура; СведенияПоСтроке.Вставить("НомерСтроки",НомерСтроки); СведенияПоСерии.Вставить(НомерСтроки,СведенияПоСтроке); НомерСтроки = НомерСтроки + 1; КонецЦикла; Для Каждого Стр Из СведенияПоСерии Цикл Выборка = Стр.Значение; Сообщить(Выборка.НомерСтроки); КонецЦикла; То результатом будет 9 65 1 2 3 4 5 6 7 8 10 11 Т.е. перебор элементов соответствия идет не в том порядке, с цифры 9 На платформах 8.3.10.2699 и 8.3.18.1208 поведение ожидаемо 10 9 8 7 6 5 4 3 2 1 проблема проявляется, когда размер соответствия больше 9ти |
|||
1
Престарелый Заяц
11.02.21
✎
15:21
|
А че он должен быть в каких то порядках ?
|
|||
2
d4rkmesa
11.02.21
✎
15:22
|
(0) Порядок элементов же не гарантирован? Да, для каких-то простых ключей порядок сохранялся, в отдельных случаях, но он не был никогда гарантирован.
|
|||
3
kauksi
11.02.21
✎
15:23
|
Ну если это массив в памяти, то первым ожидается элемент, добавленный последним.
|
|||
4
kauksi
11.02.21
✎
15:24
|
короче это фича... но в некоторых конфигурациях приводит к тому что первой печатается строка 9 а не 1
|
|||
5
Ненавижу 1С
гуру
11.02.21
✎
15:25
|
(0) даже в СП написано, что порядок перебора не гарантирован
|
|||
6
Почему 1С
11.02.21
✎
15:26
|
(4) Используй Массив вместо соответствия
|
|||
7
kauksi
11.02.21
✎
15:32
|
(6)Да эт понятно, я так не пишу, просто у клиента вылезло именно на этой платформе...
К элементам некоторым коллекций в 1С:Предприятии 8 можно обращаться с помощью числового индекса. Для таких коллекций перебор элементов может осуществляться и итератором, и с помощью индекса. Примером такой коллекции является Массив. Однако для некоторых коллекций обращение по индексу недоступно, так как коллекция не имеет определенной последовательности. В этих случаях итератор "Для каждого..." позволяет обойти коллекцию. Однако это не значит, что порядок выдачи элементов при обходе коллекции будет являться порядком элементов в коллекции. Если коллекция неупорядочена, то порядок обхода итератором "Для каждого..." в общем виде не определен, то есть может быть любым. Соответственно, для таких коллекций нельзя опираться на этот порядок в алгоритмах использующих коллекцию. Примером такой коллекции является Соответствие. |
|||
8
Ненавижу 1С
гуру
11.02.21
✎
16:20
|
(7) ну и? для таких коллекций просто нет понятия порядка
|
|||
9
Cyberhawk
11.02.21
✎
16:37
|
(8) Чем "в порядке добавления" не порядок?
|
|||
10
Вафель
11.02.21
✎
16:42
|
порядок есть, но это порядок индексов от хэшей,
но никак не порядок добавления |
|||
11
Ненавижу 1С
гуру
11.02.21
✎
18:39
|
(9) тем, что Структура его не хранит, а так придумать разных порядков можно
|
|||
12
ДенисЧ
11.02.21
✎
19:27
|
Перечисление это не массив. В нём нет порядка.
|
|||
13
Сияющий в темноте
11.02.21
✎
22:28
|
если в соответствие добавлять строковые ключи,то они очень забавно пляшут в порядке следования.
ну,и то,что в разных платформах разный порядок говорит,что они используют разную оптимизацию при хранении. |
|||
14
Cyberhawk
12.02.21
✎
11:22
|
(11) Я "не хранит порядок" и "нет понятия порядка" трактую по-разному
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |