Имя: Пароль:
1C
1С v8
СКД. ВычислитьВыражение с отбор по полю текущей записи.
, , , , , ,
0 Classic
 
26.06.20
19:04
В последнее время часто сталкиваюсь с задачей, которую никак в общем виде добить не могу.

В общем виде задача такая - посчитать итоги на уровне группировки, которой в отчете нет :)

Пример:

У нас есть данные в таком виде

Подразделение
Должность
ФизЛицо

Мне для каждого физлица необходимо вывести количество людей, работающих в его подразделении на его должности.

Если в отчете есть группировки Подразделение-+-Должность-+-Физлицо в виде дерева по одному элементу на каждое поле, то задача тривиальная
ВЫЧИСЛИТЬВЫРАЖЕНИЕ("КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ФизЛицо)", "Должность")

Но если мы в отчете убираем из дерева группировок Должность и оставляем только Подразделение-+-ФизЛицо, как сразу возникают проблемы.

Решил ли кто-то подобную задачу именно агрегатными функциями СКД? Потому как модифицировать набор данных под каждую подобную задачу надоело.

Ход моих мыслей, которые зашли в тупик:
1. Каким-то образом передать в ВЫЧИСЛИТЬВЫРАЖЕНИЕ значения текущей строки. Что-то типа ВЫЧИСЛИТЬВЫРАЖЕНИЕ("СУММА(ВЫБОР КОГДА Должность = ТекущиеДанные.Должность ТОГДА 1 ИНАЧЕ 0 КОНЕЦ", "Подразделение"). Но ни ТекущиеДанные, ни НаборДанных, ни что-то другое не отработало. Хотя подозреваю, что что-то обязательно должно быть.
2. Я смог получить таблицу значений с должностями и количеством
ВЫЧИСЛИТЬВЫРАЖЕНИЕ("ВЫЧИСЛИТЬВЫРАЖЕНИЕСГРУППИРОВКОЙТАБЛИЦАЗНАЧЕНИЙ(""Должность КАК Должность, КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ФизЛицо)"", ""Должность"", ""ДолжностьУпр = Должность"")", "Подразделение")
Она хорошо на уровне каждого физлица выводить информацию по текущим должностям с количество работников. Как бы теперь эту таблицу отсортировать по текущей должности? Если ли какие-то возможности отбора по таблице значений?

В целом, если как-то получится передать в вышестоящие расчеты значения из текущей группировки это решило бы целый пласт задач.
Заранее спасибо за идеи
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший