Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

ошибка перебора соответствия на платформе 8.3.17.1851

ошибка перебора соответствия на платформе 8.3.17.1851
Я
   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
А че он должен быть в каких то порядках ?
   d4rkmesa
 
2 - 11.02.21 - 15:22
(0) Порядок элементов же не гарантирован? Да, для каких-то простых ключей порядок сохранялся, в отдельных случаях, но он не был никогда гарантирован.
   kauksi
 
3 - 11.02.21 - 15:23
Ну если это массив в памяти, то первым ожидается элемент, добавленный последним.
   kauksi
 
4 - 11.02.21 - 15:24
короче это фича... но в некоторых конфигурациях приводит к тому что первой печатается строка 9 а не 1
   Ненавижу 1С
 
5 - 11.02.21 - 15:25
(0) даже в СП написано, что порядок перебора не гарантирован
   Почему 1С
 
6 - 11.02.21 - 15:26
(4) Используй Массив вместо соответствия
   kauksi
 
7 - 11.02.21 - 15:32
(6)Да эт понятно, я так не пишу, просто у клиента вылезло именно на этой платформе...

К элементам некоторым коллекций в 1С:Предприятии 8 можно обращаться с помощью числового индекса. Для таких коллекций перебор элементов может осуществляться и итератором, и с помощью индекса. Примером такой коллекции является Массив.

Однако для некоторых коллекций обращение по индексу недоступно, так как коллекция не имеет определенной последовательности. В этих случаях итератор "Для каждого..." позволяет обойти коллекцию. Однако это не значит, что порядок выдачи элементов при обходе коллекции будет являться порядком элементов в коллекции. Если коллекция неупорядочена, то порядок обхода итератором "Для каждого..." в общем виде не определен, то есть может быть любым. Соответственно, для таких коллекций нельзя опираться на этот порядок в алгоритмах использующих коллекцию. Примером такой коллекции является Соответствие.
   Ненавижу 1С
 
8 - 11.02.21 - 16:20
(7) ну и? для таких коллекций просто нет понятия порядка
   Cyberhawk
 
9 - 11.02.21 - 16:37
(8) Чем "в порядке добавления" не порядок?
   Вафель
 
10 - 11.02.21 - 16:42
порядок есть, но это порядок индексов от хэшей,
но никак не порядок добавления
   Ненавижу 1С
 
11 - 11.02.21 - 18:39
(9) тем, что Структура его не хранит, а так придумать разных порядков можно
   ДенисЧ
 
12 - 11.02.21 - 19:27
Перечисление это не массив. В нём нет порядка.
   Сияющий в темноте
 
13 - 11.02.21 - 22:28
если в соответствие добавлять строковые ключи,то они очень забавно пляшут в порядке следования.
ну,и то,что в разных платформах разный порядок говорит,что они используют разную оптимизацию при хранении.
   Cyberhawk
 
14 - 12.02.21 - 11:22
(11) Я "не хранит порядок" и "нет понятия порядка" трактую по-разному

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.