1. AlexeyPapanov 372 30.06.20 14:22 Сейчас в теме

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

Коллеги, привет!

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

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

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


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

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

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


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


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


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

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

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

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

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

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

Вакансии

Автор новостных обзоров на тему 1С и бухучета
Санкт-Петербург
По совместительству

Программист 1С
Санкт-Петербург
зарплата до 150 000 руб.
Полный день

Программист 1С
Екатеринбург
зарплата от 80 000 руб. до 130 000 руб.
Полный день

Ведущий программист 1С
Москва
зарплата от 150 000 руб.
Полный день

Ведущий программист 1С (УТ 11)
Москва
зарплата до 200 000 руб.
Полный день