Имя: Пароль:
1C
1C 7.7
v7: Подскажите быстрый алгоритм...
0 mg-samara
 
09.11.11
15:25
Нужно "свернуть" ТЗ, но без потери значащих колонок.
ТЗ изначальная
Колонка 1 Колонка 2 Колонка 3 Сумма
значение1 значение2 значение3 10
значение2 значение2 значение3 20
значение1 значение3 значение3 30
значение4 значение3 значение3 30

сворачиаемм по второй и первой колонке
После "свертки"
Колонка 1              Колонка 2 Колонка 3 Сумма
значение1,значение2    значение2 значение3 30
значение1,значение4    значение2 значение3 60

Идея - свернуть по двум колонкам - и из полученного ТЗ сформировать ключ для поиска. Затем используя ключ искать нужные строки и формировать колонку1.
На больших объемах долго работать будет.

Может кто поделится идеей как сделать побыстрее.
1 filh
 
09.11.11
15:27
Индексированая таблица тебя спасет
2 1Сергей
 
09.11.11
15:27
(0) Если по колонке 3 будут разные значения в разных строках при равных первых двух колонок. Какое должно приниматься значение?
3 Ёпрст
 
гуру
09.11.11
15:27
ИндексированнаяТ ТЗ и привет из 1cpp
Бегай по любому индексц и привет, даже сворачивать не надо
4 Сияющий Асинхраль
 
09.11.11
15:29
Ничего не понял, нарисуй в цифрах, что хочешь...
5 1Сергей
 
09.11.11
15:36
(4) я тоже не понял как он в первую колонку собирается по 2 значения запихивать
6 filh
 
09.11.11
15:37
(5) главное, ТС, знает!
7 ado
 
09.11.11
15:39
Всё не читал, про индексированную таблицу уже говорили? :-)
8 mg-samara
 
09.11.11
15:44
(5) Для упрощения скажу - Колонка 1 - текстовая
"значение1,значение2" - Текст.
9 mg-samara
 
09.11.11
15:46
(7) Про индексированную таблицу понятно. Но в конце концов узкое место будет - банальный поиск. по индексированной ТЗ.
10 mg-samara
 
09.11.11
15:47
к (9)
понятно, что поиск будет не тупым перебором. :-)
11 ado
 
09.11.11
15:47
(9) Поиск индексу -- он быстрый.
12 ado
 
09.11.11
15:48
А вообще, странная какая-то свертка ...
13 mg-samara
 
09.11.11
15:49
Спасибо всем откликнувшимся, ответы в принципе те, что я и сам ожидал.
14 mg-samara
 
09.11.11
15:50
(12) Неисповедимы запросы пользователей. :-)
15 mg-samara
 
09.11.11
15:51
(12) Отчет один извращенный планируется. :-)
16 Сияющий Асинхраль
 
09.11.11
15:53
Загадочный товарищ, вместо того чтобы рассказать чего же он хочет на самом деле, поговорил сам с собой и ушел...
17 orefkov
 
09.11.11
15:54
Выгрузить в таблицу sqlite, и
select Колонка2, Колонка3, sum(Сумма), group_concat(Колонка1) from tab group by Колонка2, Колонка3
18 ado
 
09.11.11
15:56
(17) О, блин, а я и не знал про такую агрегатную функцию, как group_concat.
19 mg-samara
 
09.11.11
16:00
(17) Во!!! Сразу понял то, что нужно!
Мне действительно можно использовать и SQL!!!
20 mg-samara
 
09.11.11
16:00
(16) А ты так и не понял задачу?
21 Ёпрст
 
гуру
09.11.11
16:00
(17) врят ли именно это ему нужно, нафига ему значения группировки в строках ?
22 mg-samara
 
09.11.11
16:01
(21) Именно это и нужно.
Попробую заставить поработать за меня SQL.
23 mg-samara
 
09.11.11
16:02
(17) Спасибо за отличную идею!
24 Ёпрст
 
гуру
09.11.11
16:02
(22) сомневаюсь, ибо потом, как ты искать будешь по значению в такой колонке ?
25 Ёпрст
 
гуру
09.11.11
16:03
у тебя в табличке, значения каких типов ? Строки ?
26 mg-samara
 
09.11.11
16:04
(25) Я понимю, то, что я спрашиваю - необычно.. :-)

Мне не нужно искать там ничего.
27 mg-samara
 
09.11.11
16:08
(25) Ага, будут строки... :-)
28 Ёпрст
 
гуру
09.11.11
16:08
(26) ладно, значения каких типов у тебя ?
group_concat подойдет для строк\чисел\дат разве что, если че.
29 mg-samara
 
09.11.11
16:09
Я таким образом формирую форму отчета для вывода на экран.
Просто данных много - долго формируется. Хочу оптимизировать.
30 mg-samara
 
09.11.11
16:10
(28) Да, именно это и нужно.
31 orefkov
 
09.11.11
16:16
(18)
group_concat есть только в sqlite.
За это и любим :)
32 Сияющий Асинхраль
 
09.11.11
16:18
Тогда проще добавить одну колонку "ГруппСумма" в обе ТЗ, во второй ТЗ присвоить этой колонке, скажем 1 и объединить ТЗ1 и ТЗ2. После этого достаточно сортировать полученную ТЗ и один раз по ней пробежаться без всякого поиска...
33 ado
 
09.11.11
16:24
(28) Только для строк.

(31) Неа. Люди говорят, в MySQL тоже есть ;-)
34 Ёпрст
 
гуру
09.11.11
16:29
(33) если че, все агрегатные типы в 1с - строки :)
35 orefkov
 
09.11.11
16:30
(33)
Все может быть, откуда-то ведь она должна была в sqlite появиться.
Я-то просто имел ввиду ходовые под семеркой базы - sql, foxpro, sqlite.
36 mg-samara
 
09.11.11
16:46
(32) Новая идея.. Только я не совсем понял. Туплю что-то. :-(
Можно поподробнее на примере?
37 Mikeware
 
09.11.11
16:48
(36) Пользуй индексированнуюТаблицу и не парь мозг людям.
38 ado
 
09.11.11
16:55
(37) Да ну, (17) красивше.
39 Mikeware
 
09.11.11
17:02
(38) "...если б только б не б одно бы..."©
40 mg-samara
 
09.11.11
17:05
(37) А никто и не парит.
Мне уже интересно теоретически что тут (32) придумано
41 mg-samara
 
09.11.11
17:07
(39) Решений два - индексированная таблица и SQL.
А тут (32) что-то новое. Понятно что будет не так оптимально, но интересно.
42 Mikeware
 
09.11.11
17:07
(40) индекс он строит... и группирует по нему. Только "средствами 1с"
43 Mikeware
 
09.11.11
17:08
(41)Решение, собственно, одно. реализаций - несколько.
44 mg-samara
 
09.11.11
17:16
(42) А я и не понял из его описания...
Ну индекс - это уже пройденный этап.  :-(
45 Сияющий Асинхраль
 
09.11.11
18:49
Нет в (32) индекса, просто я в тз1 добавляю сумму по итогам из тз2, и чтобы не путать эти строки со старыми строками помечаю строки итогов единицей, после чего достаточно сделать правильную сортировку тз1
46 Mikeware
 
09.11.11
18:51
(45) Ну вот эта "правильная сортировка" суть индекс. а "сумма по итогам" суть группировка. Смысл один и тот же.
47 Сияющий Асинхраль
 
09.11.11
18:56
(46) Ну, если так рассуждать, то можно сказать и так. Но работает этот алгоритм, кстати, вполне даже ничего - тз на триста тысяч строк обрабатывает за вполне терпимые промежутки времени, причем без внешних компонент...
48 Mikeware
 
09.11.11
18:58
(47) А чем тебе внешние компоненты не угодили-то?. Как-то не парюсь..
49 Сияющий Асинхраль
 
09.11.11
19:00
А не люблю я таскать базы с внешними компонентами от клиентов - для себя да, а клиентам стараюсь не ставить...
50 Mikeware
 
09.11.11
19:01
(49) Ну, у меня нет "клиентов" :-)))
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.