Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
21 июн 2021, 20:33

Распределение договоров в отчёте по видам

Автор gamograff, 12 янв 2017, 09:55

0 Пользователей и 1 гость просматривают эту тему.

gamograff

Добрый день. Есть справочник "ДоговорыКонтрагентов", у элементов которого есть реквизит "Вид работ". Это значение берётся из соответствующего справочника. Нужно создать отчёт, распределяющий суммы договоров по видам. Т.е.:
Наименование     | Вид1 | Вид2 | Вид3 ...
Дог. 123              |    0   |   1000    |     0    ...
Дог. 321              |  200   |     0     |     0    ...
...
Как это можно реализовать? "В лоб": отобрать все договоры с суммами из регистра накопления за заданный период, а дальше через объединение соединять запросы с отбором по каждому виду отдельно:
    ВЫБРАТЬ
    НезавершенноеПроизводствоОбороты.Контрагент,
    НезавершенноеПроизводствоОбороты.ДоговорКонтрагента,
    НезавершенноеПроизводствоОбороты.Этап,
    НезавершенноеПроизводствоОбороты.СуммаПриход
    ПОМЕСТИТЬ ВТ_Общая
    ИЗ
    РегистрНакопления.НезавершенноеПроизводство.Обороты(&НачалоПериода, &КонецПериода, , ) КАК НезавершенноеПроизводствоОбороты
    ;
   
    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
    ВТ_Общая.Контрагент,
    ВТ_Общая.ДоговорКонтрагента,
    ВТ_Общая.Этап,
    ВТ_Общая.СуммаПриход КАК СуммаАттестация,
    0 КАК СуммаИзготовление,
    0 КАК СуммаПрочее
    ИЗ
    ВТ_Общая КАК ВТ_Общая
    ГДЕ
    ВТ_Общая.ДоговорКонтрагента.ВидРаботПоДоговору = &Вид_Аттестация
   
    ОБЪЕДИНИТЬ ВСЕ
   
    ВЫБРАТЬ
    ВТ_Общая.Контрагент,
    ВТ_Общая.ДоговорКонтрагента,
    ВТ_Общая.Этап,
    0,
    ВТ_Общая.СуммаПриход,
    0
    ИЗ
    ВТ_Общая КАК ВТ_Общая
    ГДЕ
    ВТ_Общая.ДоговорКонтрагента.ВидРаботПоДоговору = &Вид_Изготовление
   
    ОБЪЕДИНИТЬ ВСЕ
   
    ВЫБРАТЬ
    ВТ_Общая.Контрагент,
    ВТ_Общая.ДоговорКонтрагента,
    ВТ_Общая.Этап,
    0,
    0,
    ВТ_Общая.СуммаПриход
    ИЗ
    ВТ_Общая КАК ВТ_Общая
    ГДЕ
    ВТ_Общая.ДоговорКонтрагента.ВидРаботПоДоговору = &Вид_Прочее


Но таких видов много, таких объединений потребуется несколько десятков. Есть ли варианты более красивого решения? Если это важно, отчёт делается с помощью СКД.
Заранее спасибо!

alex0402

можно проще

ВЫБРАТЬ     
ВТ_Общая.Контрагент,     
ВТ_Общая.ДоговорКонтрагента.ВидРаботПоДоговору КАК ВидРаботПоДоговору ,     
ВТ_Общая.Этап,     
СУММА(СуммаПриход) КАК СуммаАттестация,     
СУММА(СуммаИзготовление),     
СУММА(СуммаПрочее)
ИЗ     ВТ_Общая КАК ВТ_Общая

СНРУППИРОВАТЬ ПО
ВТ_Общая.Контрагент,     
ВТ_Общая.ДоговорКонтрагента.ВидРаботПоДоговору КАК ВидРаботПоДоговору ,     
ВТ_Общая.Этап


Добавлено: 12 янв 2017, 11:12


Если Суммы суммируются не все, а в зависимости от вида работ или еще по какому то условию, то можно использовать конструкцию
СУММА(Выбор когда ВидРабот = Что-то ТОГДА СуммаПриход Иначе 0 КОНЕЦ)
Спасибо за Сказать спасибо

gamograff

Цитата: alex0402 от 12 янв 2017, 11:07
можно проще

Спасибо, такое в голову не пришло :) Жаль, что всё равно придётся 40 пунктов прописывать. Впрочем, похоже, иначе и никак.

Теги: 8.2 Запрос 

Похожие темы (5)

Рейтинг@Mail.ru Rambler's Top100

Поиск