Как рассчитать итоги в отчете СКД, если в ресурсах есть поля с вычислением выражения

1. user1619761 24.01.24 16:26 Сейчас в теме
Добрый день. Есть отчет СКД, в нем куча запросов с соединениями, в итоговом запросе есть поле Заявка, по нему вычисляется выражение для нескольких ресурсов. Подскажите, пожалуйста, как рассчитать итоги для ресурсов, которые никак не относятся к заявке, но при этом если я для них ставлю выражение Сумма(Ресурс1), то они суммируются по количеству заявок в запросе?
По теме из базы знаний
Найденные решения
17. user1619761 29.01.24 13:50 Сейчас в теме
Вопрос закрыт. Разобрался.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
4. Said-We 24.01.24 16:57 Сейчас в теме
(1)
как рассчитать итоги для ресурсов, которые никак не относятся к заявке
А к чему они относятся?
5. user1619761 24.01.24 17:04 Сейчас в теме
(4)
ВЫБРАТЬ
	ВТ_ЗпВодителей.СуммаКВыплате2 КАК СуммаКВыплате2,
	ВТ_ЗпВодителей.Заявка КАК Заявка,
	ВТ_ЗпВодителей.Исполнитель КАК Исполнитель,
	ВТ_ЗпВодителей.КомпенсацияЗаТопливо КАК КомпенсацияЗаТопливо,
	ВТ_ЗпВодителей.Штрафы КАК Штрафы,
	ВТ_ЗпВодителей.ДопВыезды КАК ДопВыезды,
	ВТ_ЗпВодителей.Премии КАК Премии,
	ВТ_ЗпВодителей.Депозит КАК Депозит,
	ВТ_ЗпВодителей.ЗПНаКарту КАК ЗПНаКарту,
	ВТ_ЗпВодителей.Дата КАК Дата,
	ВТ_ЗпВодителей.ТС КАК ТС,
	ВТ_ОборотыПоЗаявкам.МаксимумПоТССумма КАК Выручка,
	ВТ_ЗпВодителей.РасходНаТопливо КАК РасходНаТопливо,
	ВТ_Лизинг.Лизинг КАК Лизинг,
	ВТ_ЗпВодителей.ТС.Тип КАК ТипТС,
	НАЧАЛОПЕРИОДА(ВТ_ЗпВодителей.Дата, МЕСЯЦ) КАК ПериодРасходов
ПОМЕСТИТЬ ВТ_Общ
ИЗ
	ВТ_ЗпВодителей КАК ВТ_ЗпВодителей
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_МакТС КАК ВТ_ОборотыПоЗаявкам
		ПО (ВТ_ОборотыПоЗаявкам.ТС = ВТ_ЗпВодителей.ТС)
			И (ВТ_ОборотыПоЗаявкам.ТС.Тип = ВТ_ЗпВодителей.ТС.Тип)
			И (НАЧАЛОПЕРИОДА(ВТ_ОборотыПоЗаявкам.Период, МЕСЯЦ) = НАЧАЛОПЕРИОДА(ВТ_ЗпВодителей.Дата, МЕСЯЦ))
		ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Лизинг КАК ВТ_Лизинг
		ПО (ВТ_Лизинг.ТС = ВТ_ЗпВодителей.ТС)
			И (ВТ_Лизинг.ТС.Тип = ВТ_ЗпВодителей.ТС.Тип)
			И (ВТ_Лизинг.ДатаДок = НАЧАЛОПЕРИОДА(ВТ_ЗпВодителей.Дата, МЕСЯЦ))
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ВТ_Общ.СуммаКВыплате2 КАК СуммаКВыплате2,
	ВТ_Общ.Исполнитель КАК Исполнитель,
	ВТ_Общ.Заявка КАК Заявка,
	ВТ_Общ.КомпенсацияЗаТопливо КАК КомпенсацияЗаТопливо,
	ВТ_Общ.Штрафы КАК Штрафы,
	ВТ_Общ.ДопВыезды КАК ДопВыезды,
	ВТ_Общ.Премии КАК Премии,
	ВТ_Общ.Депозит КАК Депозит,
	ВТ_Общ.ЗПНаКарту КАК ЗПНаКарту,
	ВТ_Общ.Дата КАК Дата,
	ВТ_Общ.ТС КАК ТС,
	ВТ_Общ.Выручка КАК Выручка,
	ВТ_Общ.РасходНаТопливо КАК РасходНаТопливо,
	ВТ_Общ.Лизинг КАК Лизинг,
	ВТ_Общ.ТипТС КАК ТипТС,
	ВТ_Общ.ПериодРасходов КАК ПериодРасходов
ИЗ
	ВТ_Общ КАК ВТ_Общ
Показать
Вот поля лизинг и выручка не относятся к полям заявка, там уже посчитана правильная сумма (во временных таблицах ВТ_Лизинг и ВТ_ОборотыПоЗаявкам). Если в ресурсах ставлю сумма для этих полей, то там нелепая цифра выходит, если ставлю просто ЕСТЬNULL(Лизинг, 0) И ЕСТЬNULL(Выручка, 0), то цифры выходят верные, но в итогах они не суммируются, а просто выводятся из первой строки отчета.
Прикрепленные файлы:
2. VmvLer 24.01.24 16:32 Сейчас в теме
пользовательские поля?
3. user1619761 24.01.24 16:44 Сейчас в теме
6. Said-We 24.01.24 17:14 Сейчас в теме
(5) В ресурсы ваше вычисляемое поле добавили?
Агрегатную функцию к ресурсу прописали?
7. user1619761 24.01.24 17:28 Сейчас в теме
(6)добавил. Какую именно функцию? Сумма(выручка) прописывал
8. user1619761 24.01.24 18:14 Сейчас в теме
(6)или Вы про другую агрегатную функцию?
9. user1619761 25.01.24 13:05 Сейчас в теме
Попробовал в ресурсах выставить Рассчитывать по Период расходов, не помогло.
10. user1619761 25.01.24 13:08 Сейчас в теме
Подскажите, пожалуйста, как перенести данную конструкцию
ЕСТЬNULL(Сумма(СуммаКВыплате2) 
+ 
ВЫБОР КОГДА ВычислитьВыражение("(Дата)", "Дата", , "Предыдущая", "Текущая") = Дата
	И ВычислитьВыражение("(РасходНаТопливо)", "Дата", , "Предыдущая", "Текущая") = Сумма(ВычислитьВыражениеСГруппировкойМассив("Максимум(РасходНаТопливо)", "Дата, Исполнитель"))
	И ВычислитьВыражение("(Заявка)", "Дата", , "Предыдущая", "Текущая") <> Заявка ТОГДА 0
	ИНАЧЕ Сумма(ВычислитьВыражениеСГруппировкойМассив("КомпенсацияЗаТопливо", "Дата, Исполнитель"))
КОНЕЦ
в сам запрос? Пробовал вот так
ВЫБРАТЬ Сумма(ВТ_Общ.СуммаКВыплате2) +  ВЫБОР КОГДА ВычислитьВыражение(ВТ_Общ.Дата, ВТ_Общ.Дата, ДобавитьКДате(ВТ_Общ.Дата, День, - 1), &Текущая) = Дата
	И ВычислитьВыражение(ВТ_Общ.РасходНаТопливо, ВТ_Общ.Дата, ДобавитьКДате(ВТ_Общ.Дата, День, - 1), &Текущая) = Сумма(ВычислитьВыражениеСГруппировкойМассив(ВТ_Общ.РасходНаТопливо, ВТ_Общ.Дата, ВТ_Общ.Исполнитель))
	И ВычислитьВыражение(ВТ_Общ.Заявка, ВТ_Общ.Дата, ДобавитьКДате(ВТ_Общ.Дата, День, - 1), &Текущая) <> ВТ_Общ.Заявка ТОГДА 0
	ИНАЧЕ Сумма(ВычислитьВыражениеСГруппировкойМассив(ВТ_Общ.КомпенсацияЗаТопливо, ВТ_Общ.Дата, ВТ_Общ.Исполнитель))
КОНЕЦ КАК СуммаКВыплате2,
	ВТ_Общ.Исполнитель КАК Исполнитель,
	ВТ_Общ.Заявка КАК Заявка,
	ВТ_Общ.КомпенсацияЗаТопливо КАК КомпенсацияЗаТопливо,
	ВТ_Общ.Штрафы КАК Штрафы,
	ВТ_Общ.ДопВыезды КАК ДопВыезды,
	ВТ_Общ.Премии КАК Премии,
	ВТ_Общ.Депозит КАК Депозит,
	ВТ_Общ.ЗПНаКарту КАК ЗПНаКарту,
	ВТ_Общ.Дата КАК Дата,
	ВТ_Общ.ТС КАК ТС,
	ВТ_Общ.Выручка КАК Выручка,
	ВТ_Общ.РасходНаТопливо КАК РасходНаТопливо,
	ВТ_Общ.Лизинг КАК Лизинг,
	ВТ_Общ.ТипТС КАК ТипТС,
	ВТ_Общ.ПериодРасходов КАК ПериодРасходов
ИЗ
	ВТ_Общ КАК ВТ_Общ
Показать
выдает ошибку "Синтаксическая ошибка".
11. Said-We 25.01.24 13:38 Сейчас в теме
(10) Вы пытаетесь оконную функцию по сути (не по факту) прицепить к результату.
Если используются агрегатные функции в select, то по остальные полям без агрегатных функций в select должна быть группировка. Исключение константы, и некоторые SQL в некоторых версиях допускают не указывать все поля при наличии в группировке первичного ключа таблицы при выборке только из этой одной таблицы (MySQL).
Если по простому то, если уже указанная группировка однозначно определяет уникальность записей.
Прикрепленные файлы:
user1619761; +1 Ответить
12. user1619761 25.01.24 14:12 Сейчас в теме
(11)
то по остальные полям в select должна быть группировка.
спасибо, упустил этот момент. Поправил, но все равно ошибка "Синтаксическая ошибка"
ВЫБРАТЬ
    Сумма(ВТ_Общ.СуммаКВыплате2) +  ВЫБОР КОГДА ВычислитьВыражение(ВТ_Общ.Дата, ВТ_Общ.Дата, ДобавитьКДате(ВТ_Общ.Дата, День, - 1), &Текущая) = Дата
	И ВычислитьВыражение(ВТ_Общ.РасходНаТопливо, ВТ_Общ.Дата, ДобавитьКДате(ВТ_Общ.Дата, День, - 1), &Текущая) = Сумма(ВычислитьВыражениеСГруппировкойМассив(ВТ_Общ.РасходНаТопливо, ВТ_Общ.Дата, ВТ_Общ.Исполнитель))
	И ВычислитьВыражение(ВТ_Общ.Заявка, ВТ_Общ.Дата, ДобавитьКДате(ВТ_Общ.Дата, День, - 1), &Текущая) <> ВТ_Общ.Заявка ТОГДА 0
	ИНАЧЕ Сумма(ВычислитьВыражениеСГруппировкойМассив(ВТ_Общ.КомпенсацияЗаТопливо, ВТ_Общ.Дата, ВТ_Общ.Исполнитель))
	КОНЕЦ КАК СуммаКВыплате2,
	ВТ_Общ.Исполнитель КАК Исполнитель,
	ВТ_Общ.Заявка КАК Заявка,
	ВТ_Общ.КомпенсацияЗаТопливо КАК КомпенсацияЗаТопливо,
	ВТ_Общ.Штрафы КАК Штрафы,
	ВТ_Общ.ДопВыезды КАК ДопВыезды,
	ВТ_Общ.Премии КАК Премии,
	ВТ_Общ.Депозит КАК Депозит,
	ВТ_Общ.ЗПНаКарту КАК ЗПНаКарту,
	ВТ_Общ.Дата КАК Дата,
	ВТ_Общ.ТС КАК ТС,
	ВТ_Общ.Выручка КАК Выручка,
	ВТ_Общ.РасходНаТопливо КАК РасходНаТопливо,
	ВТ_Общ.Лизинг КАК Лизинг,
	ВТ_Общ.ТипТС КАК ТипТС,
	ВТ_Общ.ПериодРасходов КАК ПериодРасходов,
	ВТ_Общ.ДатаУпорядочивания КАК ДатаУпорядочивания
ИЗ
	ВТ_Общ КАК ВТ_Общ

Сгруппировать по
	ВТ_Общ.Исполнитель,
	ВТ_Общ.Заявка,
	ВТ_Общ.Штрафы,
	ВТ_Общ.ДопВыезды,
	ВТ_Общ.Премии,
	ВТ_Общ.Депозит,
	ВТ_Общ.ЗПНаКарту,
	ВТ_Общ.Дата,
	ВТ_Общ.ТС,
	ВТ_Общ.Лизинг,
	ВТ_Общ.ТипТС,
	ВТ_Общ.ПериодРасходов,
	ВТ_Общ.ДатаУпорядочивания,
	&Текущая
Показать
13. Said-We 25.01.24 14:17 Сейчас в теме
(12) "ВычислитьВыражение()" для языка запросов 1С это что?
14. user1619761 25.01.24 14:47 Сейчас в теме
(13)
"ВычислитьВыражение()" для языка запросов 1С это что?
так я и не нашел информации, нашел только кучу статей о ВычислитьВыражение() в СКД, поэтому и спросил, как можно перенести конструкцию
Сумма(СуммаКВыплате2) 
+ 
ВЫБОР КОГДА ВычислитьВыражение("(Дата)", "Дата", , "Предыдущая", "Текущая") = Дата
	И ВычислитьВыражение("(РасходНаТопливо)", "Дата", , "Предыдущая", "Текущая") = Сумма(ВычислитьВыражениеСГруппировкойМассив("Максимум(РасходНаТопливо)", "Дата, Исполнитель"))
	И ВычислитьВыражение("(Заявка)", "Дата", , "Предыдущая", "Текущая") <> Заявка ТОГДА 0
	ИНАЧЕ Сумма(ВычислитьВыражениеСГруппировкойМассив("КомпенсацияЗаТопливо", "Дата, Исполнитель"))
КОНЕЦ 
+
ВЫБОР КОГДА ВычислитьВыражение("(Дата)", "Дата", , "Предыдущая", "Текущая") = Дата
	И ВычислитьВыражение("(Штрафы)", "Дата", , "Предыдущая", "Текущая") = Сумма(ВычислитьВыражениеСГруппировкойМассив("Максимум(Штрафы)", "Дата, Исполнитель"))
	И ВычислитьВыражение("(Заявка)", "Дата", , "Предыдущая", "Текущая") <> Заявка ТОГДА 0
	ИНАЧЕ Сумма(ВычислитьВыражениеСГруппировкойМассив("Максимум(Штрафы)", "Дата, Исполнитель"))
КОНЕЦ
+
ВЫБОР КОГДА ВычислитьВыражение("(Дата)", "Дата", , "Предыдущая", "Текущая") = Дата
	И ВычислитьВыражение("(Премии)", "Дата", , "Предыдущая", "Текущая") = Сумма(ВычислитьВыражениеСГруппировкойМассив("Максимум(Премии)", "Дата, Исполнитель"))
	И ВычислитьВыражение("(Заявка)", "Дата", , "Предыдущая", "Текущая") <> Заявка ТОГДА 0
	ИНАЧЕ Сумма(ВычислитьВыражениеСГруппировкойМассив("Максимум(Премии)", "Дата, Исполнитель"))
КОНЕЦ
+
ВЫБОР КОГДА ВычислитьВыражение("(Дата)", "Дата", , "Предыдущая", "Текущая") = Дата
	И ВычислитьВыражение("(ДопВыезды)", "Дата", , "Предыдущая", "Текущая") = Сумма(ВычислитьВыражениеСГруппировкойМассив("Максимум(ДопВыезды)", "Дата, Исполнитель"))
	И ВычислитьВыражение("(Заявка)", "Дата", , "Предыдущая", "Текущая") <> Заявка ТОГДА 0
	ИНАЧЕ Сумма(ВычислитьВыражениеСГруппировкойМассив("Максимум(ДопВыезды)", "Дата, Исполнитель"))
КОНЕЦ
+
ВЫБОР КОГДА ВычислитьВыражение("(Дата)", "Дата", , "Предыдущая", "Текущая") = Дата
	И ВычислитьВыражение("(Депозит)", "Дата", , "Предыдущая", "Текущая") = Сумма(ВычислитьВыражениеСГруппировкойМассив("Максимум(Депозит)", "Дата, Исполнитель"))
	И ВычислитьВыражение("(Заявка)", "Дата", , "Предыдущая", "Текущая") <> Заявка ТОГДА 0
	ИНАЧЕ Сумма(ВычислитьВыражениеСГруппировкойМассив("Максимум(Депозит)", "Дата, Исполнитель"))
КОНЕЦ
+
ВЫБОР КОГДА ВычислитьВыражение("(Дата)", "Дата", , "Предыдущая", "Текущая") = Дата
	И ВычислитьВыражение("(ЗПНаКарту)", "Дата", , "Предыдущая", "Текущая") = Сумма(ВычислитьВыражениеСГруппировкойМассив("Максимум(ЗПНаКарту)", "Дата, Исполнитель"))
	И ВычислитьВыражение("(Заявка)", "Дата", , "Предыдущая", "Текущая") <> Заявка ТОГДА 0
	ИНАЧЕ Сумма(ВычислитьВыражениеСГруппировкойМассив("Максимум(ЗПНаКарту)", "Дата, Исполнитель"))
КОНЕЦ
Показать
в запрос
15. Said-We 25.01.24 17:47 Сейчас в теме
(14) Отдельно посчитать в запросе в отдельной таблице и прицепить левым соединением к исходной.
16. user1619761 27.01.24 09:48 Сейчас в теме
(15)пробую, и не получается. Нашел статью, с описанием всех выражений (на стороннем ресурсе), пробую просто на одном выражении
ВЫБРАТЬ

ВЫБОР КОГДА ВычислитьВыражение("(ВТ_Итоговая.Дата)", "ВТ_Итоговая.Дата", "", "Предыдущая", "Текущая") = ВТ_Итоговая.Дата
	Тогда 0 
	Иначе
	1
КОНЕЦ КАК ЗП 
Поместить ВТ_Зп
ИЗ
	ВТ_Итоговая КАК ВТ_Итоговая
Показать
и выдает ошибку "Синтаксическая ошибка". Подскажите, пожалуйста, в чем именно ошибка? Что пропустил?
17. user1619761 29.01.24 13:50 Сейчас в теме
Вопрос закрыт. Разобрался.
Оставьте свое сообщение

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