Имя: Пароль:
1C
1С v8
сложный ключ для соответствия
0 lucifer
 
23.10.12
10:36
Подскажите как можно сделать ключ для соответствия а-ля какая-нить структура, делаю так, не работает:
Ключ = Новый Структура;
// заполнение структуры

т.е. при попытки получить что-нибудь по такому ключу, всегда возвращается неопределено
1 Armando
 
23.10.12
10:40
как вариант - преобразуй структуру в строку
2 1Страх
 
23.10.12
10:43
каждая структура это объект, они все различны, кроме самого себя
используй ТЗ
3 Reset
 
23.10.12
10:43
Рекомендуется, чтобы в качестве ключа выступало значение примитивного типа или другого типа, значение которого может только присваиваться, но не может менять свое содержимое.
4 Reset
 
23.10.12
10:44
(с) СП
5 Reset
 
23.10.12
10:45
Да и странно писать Соотв[НекаяСтруктура] для получения значения, можно же это значени хранить прямо в структуре
6 grigo
 
23.10.12
10:45
Просто интересно, в какой задаче это понадобилось?
7 1Страх
 
23.10.12
10:46
(6) человек изобретает НайтиСтроки для ТЗ
8 Ayvengo
 
23.10.12
10:48
(7) ну на самом деле это хорошо, т.к. НайтиСтроки работает значительно медленнее чем соответствие. Так что подход отличный. Попробуй вложенные соответствия делать, как вариант. Искать сперва по одному ключу, находить соответствие и т.д.
9 1Страх
 
23.10.12
10:49
(8) индексировать колонки поиска можно
10 Ayvengo
 
23.10.12
10:50
(9) работает для ТЗ, которое ТЗ = Новый ТаблицаЗначений? Или только в запросе?
11 1Страх
 
23.10.12
10:51
(10) который Новый ТаблицаЗначений, скорости соответствия конечно не будет, но все же
12 Ayvengo
 
23.10.12
10:51
(9) т.е мне для таблицы еще нужно создать таблицу индексов, и ты хочешь сказать, что в итоге это будет быстрее чем Соответствие?
13 1Страх
 
23.10.12
10:52
(12) не будет быстрее, но скорость возрастет
таблицу индексов? индексы это встроенное средство ТЗ
14 Ayvengo
 
23.10.12
10:52
(11) ну ок :) просто в некоторых случаях, у меня таких куча была (загрузка данных, к примеру) нужна большая скорость поиска.
15 Ayvengo
 
23.10.12
10:53
ИндексКоллекции , добавить, удалить .. ну массив .. хз что там :)
16 Ayvengo
 
23.10.12
10:54
(13) хотя спасибо, заодно изучил эту фигульку :))
17 Ayvengo
 
23.10.12
10:54
(13) просто тупо имена колонок добавляешь и оно само индексируется? :)
18 lucifer
 
23.10.12
10:56
(6) и ниже
нужно это для того что бы закэшировать данные и обращаться из цикла к соответствию, а не вызывать запрос из цикла каждый раз с новыми параметрами
19 1Страх
 
23.10.12
10:56
(17) ага
ТЗ.Индексы.Добавить(ТупоИменаКолонок);
20 lucifer
 
23.10.12
10:57
(7) ляпнул про ТЗ и понеслось, кто вообще про ТЗ говорил
21 1Страх
 
23.10.12
10:58
(20) а что плохого в ТЗ.НайтиСтроки?
22 Ayvengo
 
23.10.12
10:58
(20) ну так что решил делать?:)
23 lucifer
 
23.10.12
11:00
(22) не знаю, мб воспользуюсь советом (1)
24 Reset
 
23.10.12
11:02
Если Ключей не очень много, можешь попробовать использовать соответсвие соответствий.
Т.е. создать соответствие по 1 ключу, элементами которого будут соответсвия по другому ключу, элементами которого и тп
Поиск: Соответсвие[Ключ1][Ключ2][Ключ3]
25 1Страх
 
23.10.12
11:03
Можно попробовать еще Сответствие со значекнием Соответствие со значекнием Соответствие ... {число полей в структуре}
26 1Страх
 
23.10.12
11:03
(24) опередил
27 Reset
 
23.10.12
11:03
a la "многомерный" массив с индексом произвольного типа
28 Reset
 
23.10.12
11:03
(26) :)
29 Ayvengo
 
23.10.12
11:05
(24), (26) смотрите (8) :Р
30 1Страх
 
23.10.12
11:06
(29) точно
31 Reset
 
23.10.12
11:07
(29) Не читал :) ок я второй
32 Ayvengo
 
23.10.12
11:08
В одной фирме так был построен пересчет партионки :) Раньше работало 24 часа (документов где-то 500-700 в день), после соответствий стало работать 1 час :)
33 Ayvengo
 
23.10.12
11:09
+(32) имеется ввиду вложенные соответствия :)
34 GANR
 
23.10.12
11:09
(0) В качестве ключа, вероятно, следует использовать хеш-функцию, имеющую для каждого набора аргументов уникальное значение. http://infostart.ru/public/70030/
35 1Страх
 
23.10.12
11:09
(32) а на чистом SQL наверное могло и минуты ))
36 lucifer
 
23.10.12
11:10
(34) попробую, спасибо
37 lucifer
 
23.10.12
11:11
с вложенным соответствием тоже попробую
38 GANR
 
23.10.12
11:12
(36) Главный критерий которому должна удовлетворять функция: для любой пары наборов её аргументов не должно быть одинакового значения.
39 Reset
 
23.10.12
11:16
(12) Создание индексированной таблицы быстрее кстати, т.к. индексирование происходит единовременно, а при добавлении в соответвие его "индекс" правится каждый раз. Но поиск в соответвии(ях) все же несколько быстрее
40 Ayvengo
 
23.10.12
11:41
(35) минуты делаться и пару лет на разработку :D
41 lucifer
 
23.10.12
17:01
нет господа, с вложенными соответствиями не получится, например
Соответсвие[Ключ1][Ключ2][Ключ3]
по ключу "Ключ1" у нас ничего не нашлось, и все упадет т.к. Соответсвие[Ключ1] = Неопределено
42 lucifer
 
23.10.12
17:28
так что там с индексацией ТЗ ?
мне для ее включения нужно дополнительно что-то делать?
43 GANR
 
23.10.12
17:29
(42) ХЕШ пробовал?
44 Всеяд
 
23.10.12
17:34
(42) Дополнительно надо читать ответы в своей ветке. Например, (19).
45 lucifer
 
23.10.12
17:39
(43) у меня ключ может повторяться, в соответствии затрется одно значение другим, буду ТЗ использовать, там массив найденых строк возвращается
46 Ayvengo
 
23.10.12
18:15
(45) используй хэш и соответствие :)
47 Reset
 
23.10.12
19:21
(41) Ты программист или где? ;)

а=Соответсвие1[Ключ1];
Если а<>Неопределено тогда
 а=а[Ключ2];
 Если а<>Неопределено тогда
    а=а[Ключ3];
 КонецЕсли;
КонецЕсли;
// а - результат
48 Reset
 
23.10.12
19:22
А вообще я за ТЗ - проще и наглядней. Имхо.
49 Reset
 
23.10.12
19:24
Прочитал (45). Тогда только тз :\
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн