Имя: Пароль:
1C
1С v8
Отчет в СКД: Вычисление ресурсов при отборе по группировкам?
0 BigTaur
 
01.09.16
16:29
Добрый день, что-то совсем запутался. В СКД простейший запрос.
ВЫБРАТЬ
    "ИВАНОВ" КАК Поле1,
    225 КАК Поле2,
    25 КАК Поле3,
    ИСТИНА КАК Поле4,
    "БС1" КАК Поле5,
    "Док1" КАК Поле6

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    "ИВАНОВ",
    0,
    45,
    ЛОЖЬ,
    "БС2",
    "Док2"

Группировки Поле1
             Поле5
              Поле6
Ресурсы Сумма(Поле2)
        Сумма(Поле3)
        Максимум(Поле4)

Результат:
Поле1    Поле2    Поле3    Поле4
Поле5            
Поле6            
ИВАНОВ    225    70    Да
БС1    225    25    Да
Док1    225    25    Да
БС2        45    Нет
Док2        45    Нет
Итого    225        Да

Ставлю отбор на группировку  Поле5
Поле4 = ИСТИНА

Результат:
Поле1    Поле2    Поле3    Поле4
Поле5            
Поле6            
ИВАНОВ    225    70    Да
Отбор: Поле4 Равно "Да"            
БС1    225    25    Да
Док1    225    25    Да
Итого    225        Да

Почему он все равно в группировке по Поле1 все равно суммирует все строки - 70? Хотя по идее должно быть 25? И как этого добиться.

Пробовал ресурс считать с условием
ВЫБОР КОГДА Поле4 = ИСТИНА ТОГДА СУММА(Поле3) ИНАЧЕ 0 КОНЕЦ


Поле1    Поле2    Поле3    Поле4
Поле5            
Поле6            
ИВАНОВ    225    70    Да
БС1    225    25    Да
Док1    225    25    Да
БС2            Нет
Док2            Нет
Итого    225        Да

Все равно суммирует все и получается 70. Чувствую что решение на поверхности, а найти не могу, не по моей логике. А нужно, через отбор сделать, т.к. пользователь должен иметь возможность вкл./выкл.
Помогите господа :)
1 vicof
 
01.09.16
16:30
"Хотя по идее должно быть 25"
По чьей идее?
2 Jokero
 
01.09.16
16:39
Ставлю отбор на группировку  Поле5
Так ставь отбор на весь отчет, раз хочешь видеть результат группировки во всем отчете, а не в отдельной группировке.
3 BigTaur
 
01.09.16
17:02
(1) По моей идее конечно, которая не всегда совпадает с идеями 1С
4 BigTaur
 
01.09.16
17:08
(2) Не подходит на весь отчет, пример не до конца раскрывал суть задачи, попробую объяснить подробней, усложнил запрос:


ВЫБРАТЬ
    "ИВАНОВ" КАК Поле1,
    225 КАК Поле2,
    25 КАК Поле3,
    ИСТИНА КАК Поле4,
    "БС1" КАК Поле5,
    "Док1" КАК Поле6

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    "ИВАНОВ",
    0,
    45,
    ЛОЖЬ,
    "БС2",
    "Док2"
ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    "ИВАНОВ",
    0,
    45,
    ЛОЖЬ,
    "БС2",
    "Док3"
    
ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    "ИВАНОВ",
    15,
    0,
    ИСТИНА,
    "БС2",
    "Док4"
    
ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    "ИВАНОВ",
    0,
    65,
    ЛОЖЬ,
    "БС3",
    "Док1"
ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    "ИВАНОВ",
    0,
    33,
    ЛОЖЬ,
    "БС3",
    "Док2"

Вот его результат:
Поле1    Поле2    Поле3    Поле4
Поле5            
Поле6            
ИВАНОВ    240    213    Да
БС1    225    25    Да
Док1    225    25    Да
БС2    15    90    Да
Док2        45    Нет
Док3        45    Нет
Док4    15        Да
БС3        98    Нет
Док1        65    Нет
Док2        33    Нет
Итого    240    213    Да

Наложения отбора на весь отчет уберет все строчки с Нет, т.е. строки БС2-ДоК2, БС2-Док4 посчитаны не будут. А мне нужно, чтобы отсекались только группировки где нет, т.е. БС 3 быть не должно, а БС1 и БС2 должны остаться. Но чтобы для Иванова посчиталась сумма Поля3 только по БС1 и БС2 (90+25), а не по всему отчету.
5 aleks_default
 
01.09.16
17:20
Отбор все равно работает для исходной таблицы, до того как СКД навешивает на нее структуру группировок. Поэтому тебе нужно максимум вычислять в запросе
6 BigTaur
 
02.09.16
11:21
(5) Не понятно, причем тут максимум? Нужно чтобы Поле 4 по строкам Док не "смотрело". А считало по группировкам БС с учетом отбора, если у БС поле4=да, то прибавляем если нет то не учитываем.
7 BigTaur
 
02.09.16
15:41
Подскажите если кто знает, что отбор по группировке применяется после того как уже ресурсы посчитаны что-ли? Почему ресурсы рассчитываются не смотря на этот отбор? Пробовал через ВЫЧИСЛИТЬВЫРАЖЕНИЕ (EVALEXPRESSION)
Описание ИТС:
Функция предназначена для вычисления выражения в контексте некоторой группировки...
Функция учитывает отбор группировок, но не учитывает иерархические отборы...
А фиг там,есть отбор нет отбора, как считало нижний уровень, так и считает... Может я, что не так делаю???