Если нет записей в регистре, то не объединять
День добрый. недавно выяснилось что в отчете выводятся неверные данные. После изучения, стало понятно что если нет записей во временной таблице "ТаблицаРасходов" , то он не распределяет доход. Вот нашёл проблемный участок кода запроса:
Вот тут есть участок кода запроса:
Если закомментить, и переписать запрос так:
То работает как надо.
Вопрос: можно ли как-то задать условие, что если допустим записей в врем.таблице нет, то и не соединять
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ""1899"",
| ""Фонды"",
| СметаЗатратФонды.Фонд,
| NULL,
| NULL,
| ЕСТЬNULL(ИтоговаяТаблицаДоходов.Период, ИтоговаяТаблицаРасходов.Период),
| 0,
| 0,
| ВЫРАЗИТЬ(ВЫБОР
| КОГДА ОбщаяРаспределениеЧистогоДохода.ОбщаяДоля = 0
| ТОГДА 0
| ИНАЧЕ СметаЗатратФонды.Доля * (ЕСТЬNULL(ИтоговаяТаблицаДоходов.СуммаДоходов, 0) - ЕСТЬNULL(ИтоговаяТаблицаРасходов.СуммаРасходов, 0)) / ОбщаяРаспределениеЧистогоДохода.ОбщаяДоля
| КОНЕЦ КАК ЧИСЛО(15, 2)),
| 0,
| 0,
| 0
|ИЗ
| Документ.СметаЗатрат.РаспределениеЧистогоДохода КАК СметаЗатратФонды
| ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
| СУММА(ОбщаяРаспределениеЧистогоДохода.Доля) КАК ОбщаяДоля
| ИЗ
| Документ.СметаЗатрат.РаспределениеЧистогоДохода КАК ОбщаяРаспределениеЧистогоДохода
| ГДЕ
| ОбщаяРаспределениеЧистогоДохода.Ссылка = &СметаЗатрат) КАК ОбщаяРаспределениеЧистогоДохода
| ПО (ИСТИНА)
| ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
| ТаблицаРасходов.Период,
| СУММА(ТаблицаРасходов.СуммаФакт) КАК СуммаРасходов
| ИЗ
| ТаблицаРасходов КАК ТаблицаРасходов
| СГРУППИРОВАТЬ ПО
| ТаблицаРасходов.Период) КАК ИтоговаяТаблицаРасходов
| ПО (ИСТИНА)
| ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
| ВЫБОР
| КОГДА НАЧАЛОПЕРИОДА(БюджетированиеДоходыОбороты.Период, МЕСЯЦ) >= &ДатаНачала
| И НАЧАЛОПЕРИОДА(БюджетированиеДоходыОбороты.Период, МЕСЯЦ) <= &ДатаОкончания
| ТОГДА НАЧАЛОПЕРИОДА(БюджетированиеДоходыОбороты.Период, МЕСЯЦ)
| ИНАЧЕ &ДатаПрочие
| КОНЕЦ КАК Период,
| СУММА(БюджетированиеДоходыОбороты.СуммаОборот) КАК СуммаДоходов
| ИЗ
| РегистрНакопления.БюджетированиеДоходы.Обороты(
| ,
| ,
| Регистратор,
| ВидДвиженияДоходов = ЗНАЧЕНИЕ(Перечисление.ВидыДвиженияДанныхПоБюджетированию.Факт)
| И СметаЗатрат = &СметаЗатрат) КАК БюджетированиеДоходыОбороты
| ГДЕ
| НЕ БюджетированиеДоходыОбороты.Регистратор ССЫЛКА Документ.КорректировкаРасходов
|
| СГРУППИРОВАТЬ ПО
| ВЫБОР
| КОГДА НАЧАЛОПЕРИОДА(БюджетированиеДоходыОбороты.Период, МЕСЯЦ) >= &ДатаНачала
| И НАЧАЛОПЕРИОДА(БюджетированиеДоходыОбороты.Период, МЕСЯЦ) <= &ДатаОкончания
| ТОГДА НАЧАЛОПЕРИОДА(БюджетированиеДоходыОбороты.Период, МЕСЯЦ)
| ИНАЧЕ &ДатаПрочие
| КОНЕЦ) КАК ИтоговаяТаблицаДоходов
| ПО ИтоговаяТаблицаРасходов.Период = ИтоговаяТаблицаДоходов.Период
|ГДЕ
| СметаЗатратФонды.Ссылка = &СметаЗатрат
|
|ОБЪЕДИНИТЬ ВСЕ
ПоказатьВот тут есть участок кода запроса:
| ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
| ТаблицаРасходов.Период,
| СУММА(ТаблицаРасходов.СуммаФакт) КАК СуммаРасходов
| ИЗ
| ТаблицаРасходов КАК ТаблицаРасходов
| СГРУППИРОВАТЬ ПО
| ТаблицаРасходов.Период) КАК ИтоговаяТаблицаРасходов
| ПО (ИСТИНА)
Если закомментить, и переписать запрос так:
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ""1899"",
| ""Фонды"",
| СметаЗатратФонды.Фонд,
| NULL,
| NULL,
//| ЕСТЬNULL(ИтоговаяТаблицаДоходов.Период, ИтоговаяТаблицаРасходов.Период),
| ЕСТЬNULL(ИтоговаяТаблицаДоходов.Период, 0),
| 0,
| 0,
| ВЫРАЗИТЬ(ВЫБОР
| КОГДА ОбщаяРаспределениеЧистогоДохода.ОбщаяДоля = 0
| ТОГДА 0
//| ИНАЧЕ СметаЗатратФонды.Доля * (ЕСТЬNULL(ИтоговаяТаблицаДоходов.СуммаДоходов, 0) - ЕСТЬNULL(ИтоговаяТаблицаРасходов.СуммаРасходов, 0)) / ОбщаяРаспределениеЧистогоДохода.ОбщаяДоля
| ИНАЧЕ (ЕСТЬNULL(ИтоговаяТаблицаДоходов.СуммаДоходов, 0))
| КОНЕЦ КАК ЧИСЛО(15, 2)),
| 0,
| 0,
| 0
|ИЗ
| Документ.СметаЗатрат.РаспределениеЧистогоДохода КАК СметаЗатратФонды
| ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
| СУММА(ОбщаяРаспределениеЧистогоДохода.Доля) КАК ОбщаяДоля
| ИЗ
| Документ.СметаЗатрат.РаспределениеЧистогоДохода КАК ОбщаяРаспределениеЧистогоДохода
| ГДЕ
| ОбщаяРаспределениеЧистогоДохода.Ссылка = &СметаЗатрат) КАК ОбщаяРаспределениеЧистогоДохода
| ПО (ИСТИНА)
//| ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
//| ТаблицаРасходов.Период,
//| СУММА(ТаблицаРасходов.СуммаФакт) КАК СуммаРасходов
//| ИЗ
//| ТаблицаРасходов КАК ТаблицаРасходов
//| СГРУППИРОВАТЬ ПО
//| ТаблицаРасходов.Период) КАК ИтоговаяТаблицаРасходов
//| ПО (ИСТИНА)
| ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
| ВЫБОР
| КОГДА НАЧАЛОПЕРИОДА(БюджетированиеДоходыОбороты.Период, МЕСЯЦ) >= &ДатаНачала
| И НАЧАЛОПЕРИОДА(БюджетированиеДоходыОбороты.Период, МЕСЯЦ) <= &ДатаОкончания
| ТОГДА НАЧАЛОПЕРИОДА(БюджетированиеДоходыОбороты.Период, МЕСЯЦ)
| ИНАЧЕ &ДатаПрочие
| КОНЕЦ КАК Период,
| СУММА(БюджетированиеДоходыОбороты.СуммаОборот) КАК СуммаДоходов
| ИЗ
| РегистрНакопления.БюджетированиеДоходы.Обороты(
| ,
| ,
| Регистратор,
| ВидДвиженияДоходов = ЗНАЧЕНИЕ(Перечисление.ВидыДвиженияДанныхПоБюджетированию.Факт)
| И СметаЗатрат = &СметаЗатрат) КАК БюджетированиеДоходыОбороты
| ГДЕ
| НЕ БюджетированиеДоходыОбороты.Регистратор ССЫЛКА Документ.КорректировкаРасходов
|
| СГРУППИРОВАТЬ ПО
| ВЫБОР
| КОГДА НАЧАЛОПЕРИОДА(БюджетированиеДоходыОбороты.Период, МЕСЯЦ) >= &ДатаНачала
| И НАЧАЛОПЕРИОДА(БюджетированиеДоходыОбороты.Период, МЕСЯЦ) <= &ДатаОкончания
| ТОГДА НАЧАЛОПЕРИОДА(БюджетированиеДоходыОбороты.Период, МЕСЯЦ)
| ИНАЧЕ &ДатаПрочие
| КОНЕЦ) КАК ИтоговаяТаблицаДоходов
//| ПО ИтоговаяТаблицаРасходов.Период = ИтоговаяТаблицаДоходов.Период
| ПО ИтоговаяТаблицаДоходов.Период = ИтоговаяТаблицаДоходов.Период
|ГДЕ
| СметаЗатратФонды.Ссылка = &СметаЗатрат
|
|ОБЪЕДИНИТЬ ВСЕ
ПоказатьТо работает как надо.
Вопрос: можно ли как-то задать условие, что если допустим записей в врем.таблице нет, то и не соединять
По теме из базы знаний
- Загрузка документов и номенклатуры из Excel в 1С "одним нажатием": УПД, ТОРГ-12, отчеты маркетплейсов, заказы, счета, прайсы
- Конфигурация Flowcon: Набор инструментов для управления задачами, проектами и бизнесом в 1С
- Распознавание и загрузка сканов в 1С "одним нажатием". УПД, ТОРГ-12, накладные, счета, номенклатура, заказы и т.д.
- Начисление процентов по займам полученным / выданным. Расширение для БП 3.0
- Загрузка чеков в 1С из ФНС в документы БП, УНФ, ERP, КА и УТ
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(3)
Думаю так стоит попробовать
ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
| ТаблицаРасходов.Период,
| СУММА(ТаблицаРасходов.СуммаФакт) КАК СуммаРасходов
| ИЗ
| ТаблицаРасходов КАК ТаблицаРасходов
| СГРУППИРОВАТЬ ПО
| ТаблицаРасходов.Период) КАК ИтоговаяТаблицаРасходов
| ПО ТаблицаРасходов.Период IS NOT NULL
ПоказатьДумаю так стоит попробовать
(5)
и тут раз ничего не изменилось
и тут раз ничего не изменилось
ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
| ТаблицаРасходов.Период,
| СУММА(ТаблицаРасходов.СуммаФакт) КАК СуммаРасходов
| ИЗ
| ТаблицаРасходов КАК ТаблицаРасходов
| СГРУППИРОВАТЬ ПО
| ТаблицаРасходов.Период) КАК ИтоговаяТаблицаРасходов
| ПО ВЫБОР КОГДА ИтоговаяТаблицаРасходов.Период IS NULL ТОГДА ЛОЖЬ ИНАЧЕ ИСТИНА КОНЕЦ.
(8)
Попробовал ваш вариант, выдаёт ошибку что операции доступны только для примитивных типов(булево,число дат и т.д.) Ругается на эту строчку:
Отладчиком посмотрел, тип число имеет "СтрокаПериод.Период" а "СметаЗатрат.ДатаНачала" и "СметаЗатрат.ДатаОкончания" тип даты.
Закомментил. Выдаёт след.ошибку: повторяющийся псевдоним "СуммаФакт", как я понял ругается на вот это:
ЕСТЬNULL(ИтоговаяТаблицаДоходов.Период, ЕСТЬNULL
Попробовал ваш вариант, выдаёт ошибку что операции доступны только для примитивных типов(булево,число дат и т.д.) Ругается на эту строчку:
Если СтрокаПериод.Период >= СметаЗатрат.ДатаНачала И СтрокаПериод.Период <= СметаЗатрат.ДатаОкончания Тогда
Отладчиком посмотрел, тип число имеет "СтрокаПериод.Период" а "СметаЗатрат.ДатаНачала" и "СметаЗатрат.ДатаОкончания" тип даты.
Закомментил. Выдаёт след.ошибку: повторяющийся псевдоним "СуммаФакт", как я понял ругается на вот это:
ПрефиксПериода = Формат(СтрокаПериод.Период, "ДФ=MMyy");
Запрос.УстановитьПараметр("Период" + ПрефиксПериода, СтрокаПериод.Период);
ПоляПоПериодам = ПоляПоПериодам + ",
| СУММА(ВЫБОР КОГДА ИтоговаяТаблица.Период = &Период" + ПрефиксПериода + " ТОГДА ИтоговаяТаблица.СуммаФакт ИНАЧЕ 0 КОНЕЦ) КАК СуммаФакт" + ПрефиксПериода + ",
| СУММА(ВЫБОР КОГДА ИтоговаяТаблица.Период = &Период" + ПрефиксПериода + " ТОГДА ИтоговаяТаблица.ДопСуммаФакт ИНАЧЕ 0 КОНЕЦ) КАК ДопСуммаФакт" + ПрефиксПериода + ",
| СУММА(ВЫБОР КОГДА ИтоговаяТаблица.Период = &Период" + ПрефиксПериода + " ТОГДА ИтоговаяТаблица.СуммаКорректировка ИНАЧЕ 0 КОНЕЦ) КАК СуммаКорректировка" + ПрефиксПериода + ",
| СУММА(ВЫБОР КОГДА ИтоговаяТаблица.Период = &Период" + ПрефиксПериода + " ТОГДА ИтоговаяТаблица.ДопСуммаКорректировка ИНАЧЕ 0 КОНЕЦ) КАК ДопСуммаКорректировка" + ПрефиксПериода;
ИтогиПоПериодам = ИтогиПоПериодам + ",
| СУММА(СуммаФакт" + ПрефиксПериода + "),
| СУММА(ДопСуммаФакт" + ПрефиксПериода + "),
| СУММА(СуммаКорректировка" + ПрефиксПериода + "),
| СУММА(ДопСуммаКорректировка" + ПрефиксПериода + ")";
КоличествоПериодов = КоличествоПериодов + 1;
КонецЦикла;
ТабличныйДокумент.ЗакончитьГруппуКолонок();
Если Не КоличествоПериодов = 0 Тогда
ОбластьМакета = Макет.ПолучитьОбласть("ШапкаТаблицы|Итого");
ТабличныйДокумент.Присоединить(ОбластьМакета);
Область = ТабличныйДокумент.Область(ЧислоОбщихСтрок + 2, 22 + ?(ДлительностьМесяц = 1, 0, 1), ЧислоОбщихСтрок + 2, 22 + ?(ДлительностьМесяц = 1, 0, 1) + КоличествоПериодов * 2);
Область.Объединить();
КонецЕсли;
Запрос.Текст = ТекстЗапроса + "
|ВЫБРАТЬ
| ИтоговаяТаблица.ДляСортировки КАК ДляСортировки,
| ИтоговаяТаблица.Уровень1 КАК Уровень1,
| ИтоговаяТаблица.Уровень2 КАК Уровень2,
| ИтоговаяТаблица.Уровень3 КАК Уровень3,
| ИтоговаяТаблица.Уровень4 КАК Уровень4,
| СУММА(ИтоговаяТаблица.Сумма) КАК Сумма,
| СУММА(ИтоговаяТаблица.ДопСумма) КАК ДопСумма,
| СУММА(ИтоговаяТаблица.СуммаФакт) КАК СуммаФакт,
| СУММА(ИтоговаяТаблица.ДопСуммаФакт) КАК ДопСуммаФакт,
| СУММА(ИтоговаяТаблица.СуммаКорректировка) КАК СуммаКорректировка,
| СУММА(ИтоговаяТаблица.ДопСуммаКорректировка) КАК ДопСуммаКорректировка" + ПоляПоПериодам + "
|ИЗ
| ИтоговаяТаблица КАК ИтоговаяТаблица
|
|СГРУППИРОВАТЬ ПО
| ИтоговаяТаблица.ДляСортировки,
| ИтоговаяТаблица.Уровень1,
| ИтоговаяТаблица.Уровень2,
| ИтоговаяТаблица.Уровень3,
| ИтоговаяТаблица.Уровень4
|
|УПОРЯДОЧИТЬ ПО
| ДляСортировки,
| Уровень1,
| Уровень2,
| Уровень3,
| Уровень4
|
|ИТОГИ
| МАКСИМУМ(ДляСортировки),
| СУММА(Сумма),
| СУММА(ДопСумма),
| СУММА(СуммаФакт),
| СУММА(ДопСуммаФакт),
| СУММА(СуммаКорректировка),
| СУММА(ДопСуммаКорректировка)" + ИтогиПоПериодам + "
|ПО
| Уровень1,
| Уровень2,
| Уровень3";
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот