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