Как рассчитать итоги в отчете СКД, если в ресурсах есть поля с вычислением выражения
Добрый день. Есть отчет СКД, в нем куча запросов с соединениями, в итоговом запросе есть поле Заявка, по нему вычисляется выражение для нескольких ресурсов. Подскажите, пожалуйста, как рассчитать итоги для ресурсов, которые никак не относятся к заявке, но при этом если я для них ставлю выражение Сумма(Ресурс1), то они суммируются по количеству заявок в запросе?
По теме из базы знаний
Найденные решения
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(4) Вот поля лизинг и выручка не относятся к полям заявка, там уже посчитана правильная сумма (во временных таблицах ВТ_Лизинг и ВТ_ОборотыПоЗаявкам). Если в ресурсах ставлю сумма для этих полей, то там нелепая цифра выходит, если ставлю просто ЕСТЬNULL(Лизинг, 0) И ЕСТЬNULL(Выручка, 0), то цифры выходят верные, но в итогах они не суммируются, а просто выводятся из первой строки отчета.
ВЫБРАТЬ
ВТ_ЗпВодителей.СуммаКВыплате2 КАК СуммаКВыплате2,
ВТ_ЗпВодителей.Заявка КАК Заявка,
ВТ_ЗпВодителей.Исполнитель КАК Исполнитель,
ВТ_ЗпВодителей.КомпенсацияЗаТопливо КАК КомпенсацияЗаТопливо,
ВТ_ЗпВодителей.Штрафы КАК Штрафы,
ВТ_ЗпВодителей.ДопВыезды КАК ДопВыезды,
ВТ_ЗпВодителей.Премии КАК Премии,
ВТ_ЗпВодителей.Депозит КАК Депозит,
ВТ_ЗпВодителей.ЗПНаКарту КАК ЗПНаКарту,
ВТ_ЗпВодителей.Дата КАК Дата,
ВТ_ЗпВодителей.ТС КАК ТС,
ВТ_ОборотыПоЗаявкам.МаксимумПоТССумма КАК Выручка,
ВТ_ЗпВодителей.РасходНаТопливо КАК РасходНаТопливо,
ВТ_Лизинг.Лизинг КАК Лизинг,
ВТ_ЗпВодителей.ТС.Тип КАК ТипТС,
НАЧАЛОПЕРИОДА(ВТ_ЗпВодителей.Дата, МЕСЯЦ) КАК ПериодРасходов
ПОМЕСТИТЬ ВТ_Общ
ИЗ
ВТ_ЗпВодителей КАК ВТ_ЗпВодителей
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_МакТС КАК ВТ_ОборотыПоЗаявкам
ПО (ВТ_ОборотыПоЗаявкам.ТС = ВТ_ЗпВодителей.ТС)
И (ВТ_ОборотыПоЗаявкам.ТС.Тип = ВТ_ЗпВодителей.ТС.Тип)
И (НАЧАЛОПЕРИОДА(ВТ_ОборотыПоЗаявкам.Период, МЕСЯЦ) = НАЧАЛОПЕРИОДА(ВТ_ЗпВодителей.Дата, МЕСЯЦ))
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Лизинг КАК ВТ_Лизинг
ПО (ВТ_Лизинг.ТС = ВТ_ЗпВодителей.ТС)
И (ВТ_Лизинг.ТС.Тип = ВТ_ЗпВодителей.ТС.Тип)
И (ВТ_Лизинг.ДатаДок = НАЧАЛОПЕРИОДА(ВТ_ЗпВодителей.Дата, МЕСЯЦ))
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ВТ_Общ.СуммаКВыплате2 КАК СуммаКВыплате2,
ВТ_Общ.Исполнитель КАК Исполнитель,
ВТ_Общ.Заявка КАК Заявка,
ВТ_Общ.КомпенсацияЗаТопливо КАК КомпенсацияЗаТопливо,
ВТ_Общ.Штрафы КАК Штрафы,
ВТ_Общ.ДопВыезды КАК ДопВыезды,
ВТ_Общ.Премии КАК Премии,
ВТ_Общ.Депозит КАК Депозит,
ВТ_Общ.ЗПНаКарту КАК ЗПНаКарту,
ВТ_Общ.Дата КАК Дата,
ВТ_Общ.ТС КАК ТС,
ВТ_Общ.Выручка КАК Выручка,
ВТ_Общ.РасходНаТопливо КАК РасходНаТопливо,
ВТ_Общ.Лизинг КАК Лизинг,
ВТ_Общ.ТипТС КАК ТипТС,
ВТ_Общ.ПериодРасходов КАК ПериодРасходов
ИЗ
ВТ_Общ КАК ВТ_Общ
ПоказатьПрикрепленные файлы:
Подскажите, пожалуйста, как перенести данную конструкцию в сам запрос? Пробовал вот так выдает ошибку "Синтаксическая ошибка".
ЕСТЬNULL(Сумма(СуммаКВыплате2)
+
ВЫБОР КОГДА ВычислитьВыражение("(Дата)", "Дата", , "Предыдущая", "Текущая") = Дата
И ВычислитьВыражение("(РасходНаТопливо)", "Дата", , "Предыдущая", "Текущая") = Сумма(ВычислитьВыражениеСГруппировкойМассив("Максимум(РасходНаТопливо)", "Дата, Исполнитель"))
И ВычислитьВыражение("(Заявка)", "Дата", , "Предыдущая", "Текущая") <> Заявка ТОГДА 0
ИНАЧЕ Сумма(ВычислитьВыражениеСГруппировкойМассив("КомпенсацияЗаТопливо", "Дата, Исполнитель"))
КОНЕЦ
ВЫБРАТЬ Сумма(ВТ_Общ.СуммаКВыплате2) + ВЫБОР КОГДА ВычислитьВыражение(ВТ_Общ.Дата, ВТ_Общ.Дата, ДобавитьКДате(ВТ_Общ.Дата, День, - 1), &Текущая) = Дата
И ВычислитьВыражение(ВТ_Общ.РасходНаТопливо, ВТ_Общ.Дата, ДобавитьКДате(ВТ_Общ.Дата, День, - 1), &Текущая) = Сумма(ВычислитьВыражениеСГруппировкойМассив(ВТ_Общ.РасходНаТопливо, ВТ_Общ.Дата, ВТ_Общ.Исполнитель))
И ВычислитьВыражение(ВТ_Общ.Заявка, ВТ_Общ.Дата, ДобавитьКДате(ВТ_Общ.Дата, День, - 1), &Текущая) <> ВТ_Общ.Заявка ТОГДА 0
ИНАЧЕ Сумма(ВычислитьВыражениеСГруппировкойМассив(ВТ_Общ.КомпенсацияЗаТопливо, ВТ_Общ.Дата, ВТ_Общ.Исполнитель))
КОНЕЦ КАК СуммаКВыплате2,
ВТ_Общ.Исполнитель КАК Исполнитель,
ВТ_Общ.Заявка КАК Заявка,
ВТ_Общ.КомпенсацияЗаТопливо КАК КомпенсацияЗаТопливо,
ВТ_Общ.Штрафы КАК Штрафы,
ВТ_Общ.ДопВыезды КАК ДопВыезды,
ВТ_Общ.Премии КАК Премии,
ВТ_Общ.Депозит КАК Депозит,
ВТ_Общ.ЗПНаКарту КАК ЗПНаКарту,
ВТ_Общ.Дата КАК Дата,
ВТ_Общ.ТС КАК ТС,
ВТ_Общ.Выручка КАК Выручка,
ВТ_Общ.РасходНаТопливо КАК РасходНаТопливо,
ВТ_Общ.Лизинг КАК Лизинг,
ВТ_Общ.ТипТС КАК ТипТС,
ВТ_Общ.ПериодРасходов КАК ПериодРасходов
ИЗ
ВТ_Общ КАК ВТ_Общ
Показать
(10) Вы пытаетесь оконную функцию по сути (не по факту) прицепить к результату.
Если используются агрегатные функции в select, то по остальные полям без агрегатных функций в select должна быть группировка. Исключение константы, и некоторые SQL в некоторых версиях допускают не указывать все поля при наличии в группировке первичного ключа таблицы при выборке только из этой одной таблицы (MySQL).
Если по простому то, если уже указанная группировка однозначно определяет уникальность записей.
Если используются агрегатные функции в select, то по остальные полям без агрегатных функций в select должна быть группировка. Исключение константы, и некоторые SQL в некоторых версиях допускают не указывать все поля при наличии в группировке первичного ключа таблицы при выборке только из этой одной таблицы (MySQL).
Если по простому то, если уже указанная группировка однозначно определяет уникальность записей.
Прикрепленные файлы:
(11)
то по остальные полям в select должна быть группировка.
спасибо, упустил этот момент. Поправил, но все равно ошибка "Синтаксическая ошибка" ВЫБРАТЬ
Сумма(ВТ_Общ.СуммаКВыплате2) + ВЫБОР КОГДА ВычислитьВыражение(ВТ_Общ.Дата, ВТ_Общ.Дата, ДобавитьКДате(ВТ_Общ.Дата, День, - 1), &Текущая) = Дата
И ВычислитьВыражение(ВТ_Общ.РасходНаТопливо, ВТ_Общ.Дата, ДобавитьКДате(ВТ_Общ.Дата, День, - 1), &Текущая) = Сумма(ВычислитьВыражениеСГруппировкойМассив(ВТ_Общ.РасходНаТопливо, ВТ_Общ.Дата, ВТ_Общ.Исполнитель))
И ВычислитьВыражение(ВТ_Общ.Заявка, ВТ_Общ.Дата, ДобавитьКДате(ВТ_Общ.Дата, День, - 1), &Текущая) <> ВТ_Общ.Заявка ТОГДА 0
ИНАЧЕ Сумма(ВычислитьВыражениеСГруппировкойМассив(ВТ_Общ.КомпенсацияЗаТопливо, ВТ_Общ.Дата, ВТ_Общ.Исполнитель))
КОНЕЦ КАК СуммаКВыплате2,
ВТ_Общ.Исполнитель КАК Исполнитель,
ВТ_Общ.Заявка КАК Заявка,
ВТ_Общ.КомпенсацияЗаТопливо КАК КомпенсацияЗаТопливо,
ВТ_Общ.Штрафы КАК Штрафы,
ВТ_Общ.ДопВыезды КАК ДопВыезды,
ВТ_Общ.Премии КАК Премии,
ВТ_Общ.Депозит КАК Депозит,
ВТ_Общ.ЗПНаКарту КАК ЗПНаКарту,
ВТ_Общ.Дата КАК Дата,
ВТ_Общ.ТС КАК ТС,
ВТ_Общ.Выручка КАК Выручка,
ВТ_Общ.РасходНаТопливо КАК РасходНаТопливо,
ВТ_Общ.Лизинг КАК Лизинг,
ВТ_Общ.ТипТС КАК ТипТС,
ВТ_Общ.ПериодРасходов КАК ПериодРасходов,
ВТ_Общ.ДатаУпорядочивания КАК ДатаУпорядочивания
ИЗ
ВТ_Общ КАК ВТ_Общ
Сгруппировать по
ВТ_Общ.Исполнитель,
ВТ_Общ.Заявка,
ВТ_Общ.Штрафы,
ВТ_Общ.ДопВыезды,
ВТ_Общ.Премии,
ВТ_Общ.Депозит,
ВТ_Общ.ЗПНаКарту,
ВТ_Общ.Дата,
ВТ_Общ.ТС,
ВТ_Общ.Лизинг,
ВТ_Общ.ТипТС,
ВТ_Общ.ПериодРасходов,
ВТ_Общ.ДатаУпорядочивания,
&Текущая
Показать
(13) в запрос
"ВычислитьВыражение()" для языка запросов 1С это что?
так я и не нашел информации, нашел только кучу статей о ВычислитьВыражение() в СКД, поэтому и спросил, как можно перенести конструкцию Сумма(СуммаКВыплате2)
+
ВЫБОР КОГДА ВычислитьВыражение("(Дата)", "Дата", , "Предыдущая", "Текущая") = Дата
И ВычислитьВыражение("(РасходНаТопливо)", "Дата", , "Предыдущая", "Текущая") = Сумма(ВычислитьВыражениеСГруппировкойМассив("Максимум(РасходНаТопливо)", "Дата, Исполнитель"))
И ВычислитьВыражение("(Заявка)", "Дата", , "Предыдущая", "Текущая") <> Заявка ТОГДА 0
ИНАЧЕ Сумма(ВычислитьВыражениеСГруппировкойМассив("КомпенсацияЗаТопливо", "Дата, Исполнитель"))
КОНЕЦ
+
ВЫБОР КОГДА ВычислитьВыражение("(Дата)", "Дата", , "Предыдущая", "Текущая") = Дата
И ВычислитьВыражение("(Штрафы)", "Дата", , "Предыдущая", "Текущая") = Сумма(ВычислитьВыражениеСГруппировкойМассив("Максимум(Штрафы)", "Дата, Исполнитель"))
И ВычислитьВыражение("(Заявка)", "Дата", , "Предыдущая", "Текущая") <> Заявка ТОГДА 0
ИНАЧЕ Сумма(ВычислитьВыражениеСГруппировкойМассив("Максимум(Штрафы)", "Дата, Исполнитель"))
КОНЕЦ
+
ВЫБОР КОГДА ВычислитьВыражение("(Дата)", "Дата", , "Предыдущая", "Текущая") = Дата
И ВычислитьВыражение("(Премии)", "Дата", , "Предыдущая", "Текущая") = Сумма(ВычислитьВыражениеСГруппировкойМассив("Максимум(Премии)", "Дата, Исполнитель"))
И ВычислитьВыражение("(Заявка)", "Дата", , "Предыдущая", "Текущая") <> Заявка ТОГДА 0
ИНАЧЕ Сумма(ВычислитьВыражениеСГруппировкойМассив("Максимум(Премии)", "Дата, Исполнитель"))
КОНЕЦ
+
ВЫБОР КОГДА ВычислитьВыражение("(Дата)", "Дата", , "Предыдущая", "Текущая") = Дата
И ВычислитьВыражение("(ДопВыезды)", "Дата", , "Предыдущая", "Текущая") = Сумма(ВычислитьВыражениеСГруппировкойМассив("Максимум(ДопВыезды)", "Дата, Исполнитель"))
И ВычислитьВыражение("(Заявка)", "Дата", , "Предыдущая", "Текущая") <> Заявка ТОГДА 0
ИНАЧЕ Сумма(ВычислитьВыражениеСГруппировкойМассив("Максимум(ДопВыезды)", "Дата, Исполнитель"))
КОНЕЦ
+
ВЫБОР КОГДА ВычислитьВыражение("(Дата)", "Дата", , "Предыдущая", "Текущая") = Дата
И ВычислитьВыражение("(Депозит)", "Дата", , "Предыдущая", "Текущая") = Сумма(ВычислитьВыражениеСГруппировкойМассив("Максимум(Депозит)", "Дата, Исполнитель"))
И ВычислитьВыражение("(Заявка)", "Дата", , "Предыдущая", "Текущая") <> Заявка ТОГДА 0
ИНАЧЕ Сумма(ВычислитьВыражениеСГруппировкойМассив("Максимум(Депозит)", "Дата, Исполнитель"))
КОНЕЦ
+
ВЫБОР КОГДА ВычислитьВыражение("(Дата)", "Дата", , "Предыдущая", "Текущая") = Дата
И ВычислитьВыражение("(ЗПНаКарту)", "Дата", , "Предыдущая", "Текущая") = Сумма(ВычислитьВыражениеСГруппировкойМассив("Максимум(ЗПНаКарту)", "Дата, Исполнитель"))
И ВычислитьВыражение("(Заявка)", "Дата", , "Предыдущая", "Текущая") <> Заявка ТОГДА 0
ИНАЧЕ Сумма(ВычислитьВыражениеСГруппировкойМассив("Максимум(ЗПНаКарту)", "Дата, Исполнитель"))
КОНЕЦ
Показать
(15)пробую, и не получается. Нашел статью, с описанием всех выражений (на стороннем ресурсе), пробую просто на одном выражении и выдает ошибку "Синтаксическая ошибка". Подскажите, пожалуйста, в чем именно ошибка? Что пропустил?
ВЫБРАТЬ
ВЫБОР КОГДА ВычислитьВыражение("(ВТ_Итоговая.Дата)", "ВТ_Итоговая.Дата", "", "Предыдущая", "Текущая") = ВТ_Итоговая.Дата
Тогда 0
Иначе
1
КОНЕЦ КАК ЗП
Поместить ВТ_Зп
ИЗ
ВТ_Итоговая КАК ВТ_Итоговая
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот