Имя: Пароль:
1C
1C 7.7
v7: Прямой запрос: аналог WITH ROLLUP для dbf-базы
0 DCKiller
 
27.07.11
17:49
Существует ли таковой? Т.е. необходимо получить результат запроса в виде таблицы

Склад    Товар    ИтогПоСкладам    ИтогПоТоварам    Количество
       1    1    220
Основной            1    100
Основной    Товар1            60
Основной    Товар2            40
Вспомогательный            1    120
Вспомогательный    Товар1            90
Вспомогательный    Товар2            30

Еще раз: речь о dbf-базе.
1 DCKiller
 
27.07.11
19:03
алё?
2 kiruha
 
27.07.11
19:08
Выгружаешь в Индексированную таблицу,и там группируешь
3 runoff
 
27.07.11
19:09
(2) а если измерения и строки, и колонки, а не только строки как в ROLLUP? -)
4 DCKiller
 
27.07.11
19:14
(2) не айс, долго слишком
5 kiruha
 
27.07.11
19:16
(4)
группировать надо с тэгом * - тогда не происходит обращение к БД
Где то 100 000 - меньше сек
6 Ёпрст
 
гуру
27.07.11
19:19
..или, использовать класс.ИтогиПоГруппировкам от A'dirks & сотоварищи..
7 DCKiller
 
27.07.11
19:19
(5) ОК, попробуем.
8 DCKiller
 
27.07.11
19:20
(6) А мона ссылку?
9 Ёпрст
 
гуру
27.07.11
19:23
10 DCKiller
 
27.07.11
19:30
(9) Благодарствуем-с.
11 DCKiller
 
28.07.11
06:50
(5) Вид строки группировки д.б. таким? К примеру, если таблица группируется по 4 колонкам.
"Покупатель: *Покупатель; Поставщик: *Поставщик; Номенклатура: *&Номенклатура;  Единица: Единица"

Собираю в ИТЗ данные за месяц по одной фирме, записей получается меньше той цифры, что названа вами. Время группировки ИТЗ - 2 мин. 16 сек. Мож я где чего напутал?
12 kiruha
 
28.07.11
07:04
(11)
Замеры
http://www.1cpp.ru/forum/YaBB.pl?num=1196866345/0

в Единицу тоже
"Покупатель: *Покупатель; Поставщик: *Поставщик; Номенклатура: *&Номенклатура;  Единица: *Единица"

а вообще структура группировки весьма странная.
Детальные записи не обязательно группировать - 1 добавить в 3 параметр ИТЗ
13 DCKiller
 
28.07.11
07:08
(12) Добавил к Единице звездочку - скорость та же самая...
Без звездочек, правда, еще медленнее получается - 3 с копейками минуты...
"Детальные записи не обязательно группировать" - т.е. можно единицы в строке группировок не указывать?
14 DCKiller
 
28.07.11
07:16
Ну вот, сделал без единиц - получил выигрыш в скорости. Аж целых 7 секунд :)))
15 kiruha
 
28.07.11
07:24
А без иерархии номенклатуры, типа
"Покупатель: *Покупатель; Поставщик: *Поставщик;"
16 kiruha
 
28.07.11
07:28
>>При группировке возможно также подсчитывать суммы по группам справочников - для этого в списке модификаторов индекса нужно указать '&'. Если в таблице есть колонка с именем '<ИмяКолонкиСправочника>_Родитель', то родитель для элемента будет браться из этой колонки - это уменьшает количество обращений к базе, и заметно увеличивает производительность.

у тебя при каждом Покупателе и поставщике идет обращение к базе , причем полный скан спр Номенклатура
17 DCKiller
 
28.07.11
07:35
(15) Ну, в этом случае время выполнения 4,6 сек. Вместе с запросом...
(16) Тут дело в том, что может (и очень вероятно!) потребоваться группировка номенклатуры по группам. Как-то можно оптимизировать? Какой вид должна будет иметь строка группировки в таком случае?
18 DCKiller
 
28.07.11
07:37
+17 А, все увидел в (16) :) Т.е. надо, чтобы в ИТЗ был еще непосредственный ParentID конкретного элемента номенклатуры?
19 kiruha
 
28.07.11
07:38
Ага

Как Номенклатура_Родитель
20 DCKiller
 
28.07.11
07:57
(19) 1 мин. 40 сек. Быстрее, я так понял, сделать не получится?
21 kiruha
 
28.07.11
08:07
а без иерархии ?

"Покупатель: *Покупатель; Поставщик: *Поставщик; Номенклатура: *Номенклатура"
22 DCKiller
 
28.07.11
08:16
(21) Фигассе... 21,4 сек. всего О_о
23 DCKiller
 
28.07.11
08:20
+22 а без Номенклатура_Родитель вообще за 16 сек. группируется
24 kiruha
 
28.07.11
08:27
Значит проблема в иерархии
Можно или вручную разруливать или поэксперементировать с ИТ

Типа попробовать только  с одним уровнем
"Покупатель: *Покупатель; Поставщик: *Поставщик;Номенклатура_Родитель: *Номенклатура_Родитель; Номенклатура: *Номенклатура"

или  может ей в ТЗ не хватает сведений о всех родителях
и надо группы в ИТ кидать ?
25 kiruha
 
28.07.11
08:40
И кстати(это уже не к иерархии и не к ИТ) - при выводе отчета в ТабДок
надо уже иметь Номенклатура_Наименование и т.п.,
и выводить в отчет Номенклатура_Наименование,
а Номенклатура ставить в расшифровку только
- иначе чтобы отобразить Номенклатуру на каждой строке будет обращение к базе
26 DCKiller
 
29.07.11
08:22
(25) Учтем, спасибо.
27 DCKiller
 
29.07.11
08:24
(24) Если в ИТ кидать все группы, то как быть с названиями колонок? Номенклатура_Родитель1, Номенклатура_Родитель2 и т.д.?
28 DCKiller
 
29.07.11
08:26
Иерархия это вообще ж*па.
В том плане, что при группировке ИТЗ и гемор со скоростью группировки создает, и пользователю без нее в большинстве случаев отчет неинтересно смотреть.
29 Salimbek
 
29.07.11
09:07
(20) А Замер производительности в отладчике не смотрел? Может тормоза уже не в запросе и ИТЗ, а в не оптимальном остальном коде?
30 DCKiller
 
29.07.11
09:10
(29) После выполнения запроса и группировки ИТЗ идет только вывод на печать. Замерялась именно скорость выполнения запроса и скорость группировки ИТЗ на соответствующем участке кода.
31 DCKiller
 
29.07.11
12:09
Ахтунг, проблема! Выяснилос, что если группировки ИТЗ выводятся по порядку

Покупатель
Поставщик
Номенклатура (в иерархии! оч. важно)
Документ

то в этом случае один и тот же документ (да и любой нижестоящий уровень группировки) за период выводится ровно столько раз, сколько было предварительно выведено уровней номенклатуры (иерархия групп+элемент). Если номенклатура выводится без иерархии, то тут все нормально. Как-то можно это исправить?
32 DCKiller
 
29.07.11
12:49
Товарищи, ау? У кого какие идеи? До конца рабочего дня чуть больше часа, поможите, пли-из! :) Смотрю список методов ИТЗ в СП, нутром чую, что истина где-то рядом, но вот где - никак поймать не могу :(
33 Salimbek
 
29.07.11
15:24
(32) Я, обычно, не делаю все в одной группировке.
Т.е. делаю ИТЗ.Группировать(Группировки,Суммы,1);
Далее перебираю верхний уровень групп, а если надо внутри что-то более подробно, то использую:
ТЗПотомки = ИТЗ.ТЗПотомки;
ТЗПотомки.ВыбратьСтроки(); //или группировать, и т.д.

Применительно к твоему случаю - делаешь группировку без документа, далее в обходе из ТЗПотомки вытаскиваешь детализацию по документам.
34 DCKiller
 
31.07.11
12:42
(33) Спасибо, проблема уже решена :)

Кстати, чисто ради интереса, хотелось бы узнать: имеются ли случаи перевода отчетов типовых конфигураций (той же ТиС, к примеру) полностью на прямые запросы?
35 DCKiller
 
31.07.11
12:43
+34 в смысле, перевода ВСЕХ типовых отчетов конфы на прямые запросы. Т.е. по сути, полноценный пакет решений.
36 Mikeware
 
31.07.11
12:48
(35) У Тойпауля нечто такое есть.
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн