Отчет продажи по годам. Вычислить разницу с предыдущим годом.

1. AlexeyPapanov 459 30.06.20 14:22 Сейчас в теме
Коллеги, привет!

На скриншоте я изобразил, какой отчет имеем.
Мне надо в ресурсах вывести еще и разницу с предыдущим годом. Например, рядом с колонкой "Количество" (2020) надо вывести колонку "Разница", т.е. количество 2020 минус количество 2019.

Имеет смысл привести текст запроса. Особенность отчета в том, что год продаж по просьбе клиента начинается не с 1 января, а условно с 1 августа (в общем с середины) календарного года.

ВЫБРАТЬ
	ПродажиОбороты.КоличествоОборот КАК Количество,
	ПродажиОбороты.Смена.КалендарныйПериод КАК КалендарныйПериод,
	ПродажиОбороты.Программа КАК Программа,
	ВЫБОР
		КОГДА ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(ПродажиОбороты.ПериодМесяц, ГОД), МЕСЯЦ, 7) > ПродажиОбороты.ПериодМесяц
			ТОГДА ДОБАВИТЬКДАТЕ(КОНЕЦПЕРИОДА(ПродажиОбороты.ПериодМесяц, ГОД), СЕКУНДА, 1)
		ИНАЧЕ НАЧАЛОПЕРИОДА(ПродажиОбороты.ПериодМесяц, ГОД)
	КОНЕЦ КАК ГодПродаж
ИЗ
	РегистрНакопления.Продажи.Обороты(, , Авто, ) КАК ПродажиОбороты
Показать


Если я нагавнокодил, поправьте меня)
Прикрепленные файлы:
Вознаграждение за ответ
Показать полностью
Найденные решения
11. KVIKS 399 30.06.20 17:12 Сейчас в теме +1 $m
(10)
На скрине идея и цепочка таблиц, читать по номерам табличек слева на право
Прикрепленные файлы:
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. andy_zhav 197 30.06.20 14:57 Сейчас в теме
(1)
Я думаю нужно добавить в источник запроса еще одну таблицу Продажи.Обороты и сделать соединение по периоду хитрое. Тот еще говнокод получается :-) Но есть шанс что заработает.

Примерно так:

ВЫБРАТЬ
    ПродажиОборотыТекущийГод.КоличествоОборот КАК Количество,
    ПродажиОборотыТекущийГод.КоличествоОборот - ПродажиОборотыПредыдущийГод КАК Разница,
    ПродажиОборотыТекущийГод.Смена.КалендарныйПериод КАК КалендарныйПериод,
    ПродажиОборотыТекущийГод.Программа КАК Программа,
    ВЫБОР
        КОГДА ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(ПродажиОборотыТекущийГод.ПериодМесяц, ГОД), МЕСЯЦ, 7) > ПродажиОборотыТекущийГод.ПериодМесяц
            ТОГДА ДОБАВИТЬКДАТЕ(КОНЕЦПЕРИОДА(ПродажиОборотыТекущийГод.ПериодМесяц, ГОД), СЕКУНДА, 1)
        ИНАЧЕ НАЧАЛОПЕРИОДА(ПродажиОборотыТекущийГод.ПериодМесяц, ГОД)
    КОНЕЦ КАК ГодПродаж
ИЗ
    РегистрНакопления.Продажи.Обороты(, , Авто, ) КАК ПродажиОборотыТекущийГод
    ЛЕВОЕ СОЕДИНЕНИЕ
    РегистрНакопления.Продажи.Обороты(, , Авто, ) КАК ПродажиОборотыПредыдущийГод
    ПО     ВЫБОР
        КОГДА ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(ПродажиОборотыТекущийГод.ПериодМесяц, ГОД), МЕСЯЦ, 7) > ПродажиОборотыТекущийГод.ПериодМесяц
            ТОГДА ДОБАВИТЬКДАТЕ(КОНЕЦПЕРИОДА(ПродажиОборотыТекущийГод.ПериодМесяц, ГОД), СЕКУНДА, 1)
        ИНАЧЕ НАЧАЛОПЕРИОДА(ПродажиОборотыТекущийГод.ПериодМесяц, ГОД)
    КОНЕЦ - 1 =     ВЫБОР
        КОГДА ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(ПродажиОборотыПредыдущийГод.ПериодМесяц, ГОД), МЕСЯЦ, 7) > ПродажиОборотыПредыдущийГод.ПериодМесяц
            ТОГДА ДОБАВИТЬКДАТЕ(КОНЕЦПЕРИОДА(ПродажиОборотыПредыдущийГод.ПериодМесяц, ГОД), СЕКУНДА, 1)
        ИНАЧЕ НАЧАЛОПЕРИОДА(ПродажиОборотыПредыдущийГод.ПериодМесяц, ГОД)
    КОНЕЦ 
и ПродажиОборотыТекущийГод.Смена.КалендарныйПериод = ПродажиОборотыПредыдущийГод.Смена.КалендарныйПериод
Показать
7. AlexeyPapanov 459 30.06.20 16:44 Сейчас в теме
(2) Да, у Вас я понял смысл. Сам так делал поначалу, когда период (год) был с 1 января. Да, тогда мы получаем данные текущего года, а потом данные предыдущего года. Клеим таблицы и все.
Но.
Здесь же, когда год начинается с середины, нам проще дать пользователю возможность указать сразу период целиком за произвольное число лет.
Мы же все равно будет резать год на две части.
Поле ГодПродаж я привожу к дате начала какого-то года. А потом группирую данные запроса.

(4) Я на Ваши курсы вряд ли пойду.
Гуглил я свой вопрос, прежде чем тут писать.
Вот например:
http://1cskd.ru/2014/05/poleznye-primery-poschitat-raznicu-s-predydushhej-zapisyu/

Сделав по этому примеру вычисляемое поле:
isNULL((ВЫЧИСЛИТЬВЫРАЖЕНИЕ("Количество", , , "Предыдущая", "Предыдущая") - Количество), 0)

я получил неадекватный результат. см. скрин.

(5)
Посмотрел отчет - параметр группировки "Колонка" можно не указывать

А как тогда без группировок по годам? Мне по условию задачи надо пользователю вывести продажи по колонкам (годам) и прирост.
Прикрепленные файлы:
9. toypaul 63 30.06.20 16:50 Сейчас в теме
(7)
Я на Ваши курсы вряд ли пойду.


так никто и не гонит


(7)
я получил неадекватный результат. см. скрин.


а если на курс сходить, то там есть правильный ответ. с адекватным результатом. у вас в текущем значении разве выражение "Количество" написано? или все-таки "Сумма(Количество)"?

есть еще ошибка. дальше сами
3. andy_zhav 197 30.06.20 15:00 Сейчас в теме
только не совсем уверен что по календарному периоду надо соединять. А вот по программе - надо. тут я накосячил
4. toypaul 63 30.06.20 15:01 Сейчас в теме
на закладке ресурсы

Предыдущее = ВычислитьВыражение("Сумма(Ресурс)","Колонка",,"Предыдущая","Предыдущая")

а так вообще почти полностью аналогичный отчет разбирали в нашем курсе https://learn.programstore.ru/video_kurs_skd
5. toypaul 63 30.06.20 15:04 Сейчас в теме
Посмотрел отчет - параметр группировки "Колонка" можно не указывать
6. toypaul 63 30.06.20 15:06 Сейчас в теме
При подсчете разницы нужно учесть, что для первой колонки выражение будет иметь значение NULL
8. KVIKS 399 30.06.20 16:46 Сейчас в теме
Я бы сделал еще второй запрос но со сдвигом не 7 мес а 7+12 или 7-12 (тут надо просто проверить) присваивал бы ему имя Год продаж+1, потом объединить эти 2 запроса, сделав 2 ресурса, в первой таблице
выбор Сумма как ГодПродаж,
0 КАК ПредыдущийГод
ИЗ ТЗ1 
ОБЪЕДИНИТЬ 
выбор 0 как ГодПродаж,
Сумма  КАК ПредыдущийГод
ИЗ ТЗ2

потом еще это все сгруппировать, чтобы ресурсы сложились и потом в итоговой таблице уже просто формулу ГодПродаж- ПредыдущийГод
10. AlexeyPapanov 459 30.06.20 16:54 Сейчас в теме
(8) Не пойму. Как порезать год на два я понял и сделал. В топике есть мой текст запроса.
Я не могу прирост (разницу) по годам вычислить.

(9) Хорош. Давайте без рекламы. Нет желания помочь, идите мимо.
11. KVIKS 399 30.06.20 17:12 Сейчас в теме +1 $m
(10)
На скрине идея и цепочка таблиц, читать по номерам табличек слева на право
Прикрепленные файлы:
12. AlexeyPapanov 459 30.06.20 17:15 Сейчас в теме
(11) Этот вариант подходит для фиксированного числа периодов. А если произвольное число лет юзер задаст? В этом загвоздка.
13. KVIKS 399 30.06.20 17:19 Сейчас в теме
(12)любой период подойдет с произвольным числом периодов - главное в 1 таблице и во второй правильно рассчитать ГОД и все, хоть 50 лет задавай в отчете
Fox-trot; +1 Ответить
14. KVIKS 399 30.06.20 17:20 Сейчас в теме
К примеру для 1 таблицы дата 01.09.2019 преобразуется в 2020, а для второй 2020-1=2019 и всё, а объединение и группировка идет по 2020г таким образом идет сдвиг, кстати сдвиг можно делать хоть на год, хоть на 2 и тд
15. AlexeyPapanov 459 30.06.20 17:21 Сейчас в теме
(14) Может я сразу не догнал. Спасибо, я попробую как Вы сказали. Кажется понял.
Оставьте свое сообщение

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