|
Как получить КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ...) с наименьшим расходом памяти? | ☑ | ||
---|---|---|---|---|
0
ptiz
29.10.13
✎
16:23
|
Возьмем простой отчет: кол-во различных позиций номенклатуры.
С разными итогами (общие итоги, отдел, покупатель). Упрощенно: ВЫБРАТЬ Продажи.Отдел КАК Отдел, Продажи.Покупатель КАК Покупатель, Продажи.Номенклатура КАК Номенклатура ИЗ РегистрНакопления.Продажи КАК Продажи ГДЕ Продажи.Период МЕЖДУ &Дата1 И &Дата2 ИТОГИ КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Номенклатура) ПО ОБЩИЕ, Отдел, Покупатель Цифры получаются правильные, но в случае больших таблиц всё это требует жуткого количества памяти, т.к. в детальных записях присутствуют все сочетания "Отдел/Покупатель/Номенклатура". Мне же надо в результате только 1 цифру напротив каждого отдела/покупателя. Даже если всё это посчитается на сервере (отожрав много гигов памяти), то в момент передачи клиенту результата такого запроса 1С вываливается с криком "Мало памяти". Поскольку меня совсем не интересуют детальные записи, то как бы от них избавиться и получить результат только с итоговыми записями? Или может есть другой способ получить КОЛИЧЕСТВО(РАЗЛИЧНЫЕ..) ? |
|||
1
Wobland
29.10.13
✎
16:24
|
группировка это называется
|
|||
2
Ёпрст
29.10.13
✎
16:24
|
сверни табличку до того как
|
|||
3
Wobland
29.10.13
✎
16:25
|
а ещё я верю в то, что в виртуальной таблице уже будет лежать всё как надо
|
|||
4
Bober
29.10.13
✎
16:26
|
(3) хорошая мысль
|
|||
5
ptiz
29.10.13
✎
16:27
|
(2) Как? Пример плиз.
|
|||
6
ptiz
29.10.13
✎
16:29
|
(3) Источник данных не принципиален, просто текст проще было так набрать :)
|
|||
7
vicof
29.10.13
✎
16:31
|
(6) Сгруппировать, Поместить
|
|||
8
H A D G E H O G s
29.10.13
✎
16:31
|
ВЫБРАТЬ
ПродажиОбороты.ЗаказПокупателя КАК ЗаказПокупателя, ПродажиОбороты.Организация КАК Организация, КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ПродажиОбороты.Номенклатура) КАК КоличествоНоменклатур ИЗ РегистрНакопления.Продажи.Обороты КАК ПродажиОбороты СГРУППИРОВАТЬ ПО ПродажиОбороты.ЗаказПокупателя, ПродажиОбороты.Организация ИТОГИ СУММА(КоличествоНоменклатур) ПО Организация, ЗаказПокупателя |
|||
9
H A D G E H O G s
29.10.13
✎
16:32
|
Ну и в параметры - отбор по периоду
|
|||
10
ptiz
29.10.13
✎
16:36
|
(8) А вот и фиг. Если два покупателя продали одинаковый товар, то твой запрос выдаст 2. А надо - 1.
|
|||
11
H A D G E H O G s
29.10.13
✎
16:40
|
(10) Ниче не понял
|
|||
12
Drac0
29.10.13
✎
16:45
|
(11) Хм, а ведь он прав.
|
|||
13
vicof
29.10.13
✎
16:45
|
(10) Покупатели обычно покупают)
|
|||
14
ptiz
29.10.13
✎
16:46
|
(11) Если покупатели купили один и тот же товар, то во всех итогах (в т.ч. ОБЩИХ) должно стоять: "1".
В случае использования "СУММА()", эти "единички" по покупателям будут просуммированы и общий итог будет > 1. |
|||
15
Drac0
29.10.13
✎
16:46
|
А если сначала берем все различные товары, их помещаем в ВТ и птом уже соединением и группируем? Т.е. получается от общего к частному.
|
|||
16
ptiz
29.10.13
✎
16:46
|
(13) Ну да , купили они :)
|
|||
17
ptiz
29.10.13
✎
16:47
|
(15) Самый последний запрос чем будет отличаться от (0)?
|
|||
18
vicof
29.10.13
✎
16:48
|
(14) МАКСУИМУМ(КоличествоНоменклатур) не?
|
|||
19
Drac0
29.10.13
✎
16:52
|
(17) Ну, да ничем. А 3 ВТ с группровками быстрее будет? Сначала соберем тупо различные Товары, потом различные в группировке по Отделу, потом в группировке по Отделу+Покупатель. Но, чую, это будет воспроизведние итогов вручную, но может отработать стабильнее и без пробелм с памятью точно.
|
|||
20
ptiz
29.10.13
✎
16:56
|
(18) Не подойдет, товары разных покупателей могут пересекаться.
(19) "воспроизведние итогов вручную" - этого не хочется, т.к. всё засунуто в построитель. |
|||
21
Drac0
29.10.13
✎
17:03
|
По этим ВТ можно будет построить уже нормальное дерево, если нужно оно. ИТОГИ в этом случае будут уже чистой формальностью по затратам.
|
|||
22
H A D G E H O G s
29.10.13
✎
17:04
|
(14) У меня так и есть
|
|||
23
H A D G E H O G s
29.10.13
✎
17:06
|
А, все поняд
|
|||
24
ptiz
29.10.13
✎
17:09
|
(21) Чтобы верно сработали ИТОГИ ПО, нам приходится принимать от сервера лишние, ненужные в нашем случае детальные записи: Отдел/Покупатель/Номенклатура - что и жрет ресурсы :(
|
|||
25
Drac0
29.10.13
✎
17:47
|
(24) В моем варианте этого не будет. Данные в итоги пойдут уже сгруппированные.
|
|||
26
mistеr
29.10.13
✎
17:52
|
(0) К сожалению, чтобы посчитать количество(различные), действительно нужно много памяти. И тоги заранее не рассчитаешь.
Рассчитать все на сервере можно так ВЫБРАТЬ Продажи.Отдел КАК Отдел, Продажи.Покупатель КАК Покупатель, КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Продажи.Номенклатура) КАК НоменклатураКоличество ИЗ РегистрНакопления.Продажи КАК Продажи ГДЕ Продажи.Период МЕЖДУ &Дата1 И &Дата2 СГРУППИРОВАТЬ ПО Отдел, Покупатель ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ Продажи.Отдел КАК Отдел, NULL КАК КАК Покупатель, КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Продажи.Номенклатура) КАК НоменклатураКоличество ИЗ РегистрНакопления.Продажи КАК Продажи ГДЕ Продажи.Период МЕЖДУ &Дата1 И &Дата2 СГРУППИРОВАТЬ ПО Отдел ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ NULL КАК Отдел, NULL КАК КАК Покупатель, КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Продажи.Номенклатура) КАК НоменклатураКоличество ИЗ РегистрНакопления.Продажи КАК Продажи ГДЕ Продажи.Период МЕЖДУ &Дата1 И &Дата2 Ну и если брать из оборотов (за несколько месяцев), можно еще немного сэкономить. |
|||
27
mistеr
29.10.13
✎
17:54
|
fix^: *И итоги* заранее не рассчитаешь.
|
|||
28
Drac0
29.10.13
✎
18:15
|
Как-то так. Писал с планшета.
ВЫБРАТЬ КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Номенклатура) как Кол ПОМЕСТИТЬ ВТ_Общие ИЗ РегистрНакопления.Продажи ; ВЫБРАТ Продажи.Отдел как отдел, КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Продажи.Номенклатура) как Кол ПОМЕСТИТЬ ВТ_Отделы ИЗ РегистрНакопления.Продажи как Продажи СГРУППИРОВАТЬ ПО Продажи.Отдел ; ВЫБРАТ Продажи.Отдел как отдел, Продажи.покупатель как покупатель, КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Продажи.Номенклатура) как Кол ПОМЕСТИТЬ ВТ_Покупатели ИЗ РегистрНакопления.Продажи как Продажи СГРУППИРОВАТЬ ПО Продажи.Отдел, Продажи.покупатель ; ВЫБРАТЬ покупатели.Отдел, покупатели.покупатель, покупатели.кол как кол, Отделы.кол как кол1, Общие.кол как кол2 ИЗ ВТ_Покупатель как покупатели ВНУТРЕННЕЕ СОЕДИНЕНИЕ Вт_Отдел как Отделы ПО Отделы.Отдел = покупатели.отдел ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_Общие Как Общие ПО Истина ИТОГИ Выбор Когда отдел есть null Тогда кол2 Иначе кол1 Конец как кол ПО Общие, Отдел |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |