Имя: Пароль:
1C
 
Соответствие не работает
0 koketka
 
10.07.15
09:12
Вообщам был отчет в 8.0 мы его перенесли в 8.3 и внем не работает соответст. Тонее оно работает но не првильно. При занесении в соответсвие оно его пересортирует внутри себя не понятно по какому признаку. Я нашла функцию ФиксированноеСоответствие а как ей пользоваться не пойму может кто кинет в меня рыбой.
1 1Сергей
 
10.07.15
09:12
Зачем Вам в соответствии порядок?
2 Ёпрст
 
10.07.15
09:13
(0) да у вас там гнездо.
3 zva
 
10.07.15
09:16
РЫБА
4 Torquader
 
10.07.15
09:27
Насколько я помню, ни структура ни соответствие не обещают сохранение порядка элементов.

Фиксированные аналоги отличаются тем, что в них ничего нельзя добавить и из них ничего нельзя удалить. Сортировка там будет выполняться точно также.
5 fisher
 
10.07.15
09:38
(0) Оно работает правильно. Порядка там никто не обещал. Сохранение порядка в базовых алгоритмах почти всегда требует дополнительных накладных расходов. Этого функционала там нет.
Фиксированное соответствие - это тоже самое. Просто для специальных случаев, типа параметров сеанса.
Рыба: ФС = Новый ФиксированноеСоответствие(Новый Соответствие());
6 Rebelx
 
10.07.15
09:55
(5) ты не прав. наоборот - сохранение порядка не требует доп. алгоритмов. Однако с некоторых пор для оптимизации добавлена сортировка ключей соответствия.
7 zva
 
10.07.15
10:07
// Пересоздает фиксированное соответствие, вставляя в него указанное значение.
//
Процедура ВставитьВФиксированноеСоответствие(ФиксированноеСоответствие, Ключ, Значение) Экспорт
    
    Соответствие = Новый Соответствие(ФиксированноеСоответствие);
    Соответствие.Вставить(Ключ, Значение);
    ФиксированноеСоответствие = Новый ФиксированноеСоответствие(Соответствие);
    
КонецПроцедуры

// Удаляет из фиксированного соответствия значение по указанному ключу.
//
Процедура УдалитьИзФиксированногоСоответствия(ФиксированноеСоответствие, Ключ) Экспорт
    
    Соответствие = Новый Соответствие(ФиксированноеСоответствие);
    Соответствие.Удалить(Ключ);
    ФиксированноеСоответствие = Новый ФиксированноеСоответствие(Соответствие);
    
КонецПроцедуры
8 fisher
 
10.07.15
10:11
(6) Я в базовых алгоритмах не нестоящий сварщик, и уж тем более не знаю конкретную реализацию словаря в 1С.
Но вроде обычно для этого сортированные хеши объектов используются, не? Тогда о каком порядке "из коробки" речь?
9 H A D G E H O G s
 
10.07.15
11:36
Вот хоть убейте - не понимаю, почему у той же структуру порядок не сохраняется. Это же тупо список.
10 Гёдза
 
10.07.15
11:39
(9) наверно потому что они упорядочены
11 fisher
 
10.07.15
11:51
(9) Ну, во-первых это не тупо список, а список с уникальностью элементов. А во-вторых, пробую простой тест - и пока эта гадина выдает элементы исключительно в порядке вставки...
12 Лефмихалыч
 
10.07.15
11:54
(0) соответствие по определению порядка не имеет
13 H A D G E H O G s
 
10.07.15
11:55
(10) Были бы упорядочены - Структура бы не тупила при чтении, при количестве over 10000 элементов.
14 Лефмихалыч
 
10.07.15
11:55
(9) потому, что это не тупо список, а какая-то ухлебанская таблица
15 H A D G E H O G s
 
10.07.15
11:56
(14) Которую можно реализовать через "тупо список", что я и делал в Дельфях.
16 Гёдза
 
10.07.15
12:00
(12) Имеет. Иначе как поиск по ключу происходит?
17 H A D G E H O G s
 
10.07.15
12:05
(16) Отдельная хэш таблица.
Как ты упорядочишь

"абырвалгабырвалгабырвалгабырвалгабырвалг"
10
истина
?

Если побайтово - то тебе нужно будет приводить все значения к самому длинному.
18 Гёдза
 
10.07.15
12:06
(17) Собственно эта хэш таблица и упорядочена и наверно там ничего другого и нет
19 Гёдза
 
10.07.15
12:07
А в 8.0 наверно была отдельно
20 H A D G E H O G s
 
10.07.15
12:08
(18) Ну как же.
Хеш таблица с хешами и RID и собственно таблица данных с ключом и значением. Все канонично.
21 H A D G E H O G s
 
10.07.15
12:08
(19) А что было в 8.0 ?
22 Гёдза
 
10.07.15
12:10
(21) Читай (0). В 8.0 порядок сохранялся.
Скорее всего (точно мы не знаем) это означает, что хэши хранились отдельно от данных
23 Лефмихалыч
 
10.07.15
12:12
(16) порядок этот вообще ни чего общего не имеет с порядком, в которым ты элементы в соответствие засовываешь. Получить этот порядок снаружи вариантов нет.
24 Лефмихалыч
 
10.07.15
12:14
(22) значит товарищи из (0) использовали недокументированный баг 8.0, за что и поплатились
25 Гёдза
 
10.07.15
12:15
(24) Эти товарищи писали типовые конфы в 1С )))
26 Лефмихалыч
 
10.07.15
12:17
(25) бывает
27 H A D G E H O G s
 
10.07.15
12:18
(22) Ок.

А в 8.2 хеши хранятся вместе с данными.
Тоесть, табличка
"Ключ" "Значение" "Хеш"

При вставке нового значения - сразу прописывается хеш.
И главный вопрос - когда производится сортировка по колонке "Хеш"
1) При первом обращении (через итератор, когда она не нужна, по ключу, когда она нужна)
2) При первом обращении по ключу
3) При каждой вставке.

Если вариант 2 (а он оптимальный) - то понятно, почему порядок иногда сохраняется, а иногда нет.