|
ошибка перебора соответствия на платформе 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) Я "не хранит порядок" и "нет понятия порядка" трактую по-разному |