СКД ВычислитьВыражение - Остаток на начало/конец

1. tuprikov 08.02.17 08:57 Сейчас в теме
Есть выборка: Склад, Регистратор, Количество.
Склад не является измерением регистра, по которому делается выборка, поэтому нельзя получить остаток на начало и конец в разрезе него из виртуальной таблицы.
В СКД добавлены два вычисляемых поля: СальдоНаНачалоКоличество, СальдоНаКонецКоличество. Они добавлены в ресурсы.
Выражение для СальдоНаНачалоКоличество: ВычислитьВыражение("Сумма(Количество)", , , "Первая", "Предыдущая").
Выражение для СальдоНаКонецКоличество: ВычислитьВыражение("Сумма(Количество)", , , "Первая", "Текущая").
Таким образом для детальных записей отчёта получаются красивые колонки с нарастающим итогом.
Проблема в вычислении итога по складу для этих вычисляемых полей.
Получается, для СальдоНаНачалоКоличество итогом должно быть значение первой записи СальдоНаНачалоКоличество внутри группировки, а для СальдоНаКонецКоличество -- значение последней записи внутри группировки.
Как я ни игрался с параметрами ВычислитьВыражение() для ресурсов, не удалось получить нужный результат.
Например:
Просто СальдоНаНачалоКоличество и СальдоНаКонецКоличество даёт правильный результат для первого склада, но потом конечное сальдо первого склада становится входящим сальдо для второго склада, и т.д. нарастающим итогом.
ВычислитьВыражение("СальдоНаКонецКоличество", , , "Последняя", "Последняя") и
ВычислитьВыражение("СальдоНаКонецКоличество", "Склад", "Группировка", "Последняя", "Последняя") даёт последнюю запись не внутри группировки, а для всей выборки.
Прикладываю скриншот для варианта, в котором выражениями ресурсов указаны просто СальдоНаНачалоКоличество и СальдоНаКонецКоличество.
В форуме уже были подобные вопросы, но никто так и не нашёл решения на СКД, все в результате выкручивались на уровне запроса.
Интересует именно принципиальная возможность реализации на уровне СКД.
Прикрепленные файлы:
По теме из базы знаний
Найденные решения
15. tuprikov 08.02.17 11:48 Сейчас в теме
Спасибо за ценные идеи! Проблема решена!
Изначальная проблема была немного шире, я её намеренно сузил, чтобы не перегружать деталями.
Сережа прав, в такой постановке вопроса начальное сальдо всегда будет 0, потому что, если мы не можем взять из регистра остаток на дату, то откуда его брать? Поэтому второй проблемой было вычисление стартового СальдоНаНачалоКоличество.
Что у меня получилось в итоге.
1. В запросе отбираем Склад, Регистратор, Количество по условию Период <= &ДатаОкончания.
2. Выражение для ресурса СальдоНаНачалоКоличество:
Сумма(ВЫБОР КОГДА Период < &ДатаНачала ТОГДА Количество ИНАЧЕ 0 КОНЕЦ)
3. Выражение для ресурса Количество:
Сумма(ВЫБОР КОГДА Период >= &ДатаНачала ТОГДА Количество ИНАЧЕ 0 КОНЕЦ)
4. Выражение для ресурса СальдоНаКонецКоличество:
Сумма(Количество).
Осталось макетом для строк с периодом < &ДатаНачала скрыть эти строки, и отчёт готов!
Спасибо огромное!
philya; SP17081992; +2 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. SP17081992 5 08.02.17 09:38 Сейчас в теме
Как я понял итог по складу для СалдоНаНачалоКоличество всегда 0, а СальдоНаКонецКоличество просто Сумма(Количество)
3. tuprikov 08.02.17 09:48 Сейчас в теме
(2) Не факт. СальдоНаНачалоКоличество запросто может быть ненулевым.
СальдоНаКонецКоличество можно представить как Сумма(Количество) - СальдоНаНачалоКоличество.
4. SP17081992 5 08.02.17 10:01 Сейчас в теме
(3) Тогда для СальдоНаНачалоКоличество выражение будет
ВычислитьВыражение("Сумма(Количество)", "Склад", , "Первая")

а СальдоНаКонецКоличество
Сумма(Количество) - ВычислитьВыражение("Сумма(Количество)", "Склад", , "Первая")
5. tuprikov 08.02.17 10:12 Сейчас в теме
(4)
ВычислитьВыражение("Сумма(Количество)", "Склад", , "Первая")

Так получается сальдо на начало равным суммарному обороту по складу, да ещё и нарастающим итогом для каждого следующего склада.
Прикрепленные файлы:
6. SP17081992 5 08.02.17 10:21 Сейчас в теме
(5) попробуй место 'Сумма(Количество)' пиши просто 'Количество'
8. tuprikov 08.02.17 11:02 Сейчас в теме
(6) ВычислитьВыражение("Количество", "Склад", , "Первая") даёт первую запись на всю выборку, игнорируя группировку.
9. spacecraft 08.02.17 11:04 Сейчас в теме
(8) а так?
ВычислитьВыражение("Количество", "Склад","Группировка" , "Текущая")
tuprikov; +1 Ответить
11. tuprikov 08.02.17 11:19 Сейчас в теме
(9)
ВычислитьВыражение("Количество", "Склад","Группировка" , "Текущая")

Возвращает первое количество в рамках группировки! Уже ближе к делу!
10. SP17081992 5 08.02.17 11:10 Сейчас в теме
(8) Нет! Место 'ВычислитьВыражение("Количество", "Склад", , "Первая")' пиши просто 'Количество'
tuprikov; +1 Ответить
12. tuprikov 08.02.17 11:22 Сейчас в теме
(10)
пиши просто 'Количество'

Тоже возвращает первое количество в рамках группировки! Уже интереснее!
14. SP17081992 5 08.02.17 11:29 Сейчас в теме
(12) Первое количество в рамках группировки - это же и есть СальдоНаНачалоКоличество по складу, ни так ли?
13. tuprikov 08.02.17 11:28 Сейчас в теме
(3)
СальдоНаКонецКоличество можно представить как Сумма(Количество) - СальдоНаНачалоКоличество.

Ошибся. Конечно же, Сумма(Количество) + СальдоНаНачалоКоличество.
7. japopov 68 08.02.17 10:28 Сейчас в теме
Много бился с похожей проблемой. Решил вычислением сальдо через виртуальные таблицы, в запросе... Через ВычислитьВыражение работает, но не для группировок (результат непредсказуемый, особенно при сочетании отборов и NULL).
15. tuprikov 08.02.17 11:48 Сейчас в теме
Спасибо за ценные идеи! Проблема решена!
Изначальная проблема была немного шире, я её намеренно сузил, чтобы не перегружать деталями.
Сережа прав, в такой постановке вопроса начальное сальдо всегда будет 0, потому что, если мы не можем взять из регистра остаток на дату, то откуда его брать? Поэтому второй проблемой было вычисление стартового СальдоНаНачалоКоличество.
Что у меня получилось в итоге.
1. В запросе отбираем Склад, Регистратор, Количество по условию Период <= &ДатаОкончания.
2. Выражение для ресурса СальдоНаНачалоКоличество:
Сумма(ВЫБОР КОГДА Период < &ДатаНачала ТОГДА Количество ИНАЧЕ 0 КОНЕЦ)
3. Выражение для ресурса Количество:
Сумма(ВЫБОР КОГДА Период >= &ДатаНачала ТОГДА Количество ИНАЧЕ 0 КОНЕЦ)
4. Выражение для ресурса СальдоНаКонецКоличество:
Сумма(Количество).
Осталось макетом для строк с периодом < &ДатаНачала скрыть эти строки, и отчёт готов!
Спасибо огромное!
philya; SP17081992; +2 Ответить
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот