|   |   | 
| 
 | Как получить КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ...) с наименьшим расходом памяти? | ☑ | ||
|---|---|---|---|---|
| 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 Конец как кол ПО Общие, Отдел | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |