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