Имя: Пароль:
1C
1С v8
Помогите с условием в запросе
0 Хрюкин
 
04.03.19
15:52
Отбираю запросом сумму договора из справочника Договоры
Делаю левое соединение с регистром накопления, в котором отбираю сумму всех оплат по договору.
Соединение таблиц по договору.
Подскажите как добавить условие, чтобы отбирались только договора, у которых сумма договора <= сумме оплат по этому договору.
То есть нужно отобрать только оплаченные договоры.
1 dezss
 
04.03.19
15:56
Агрегат Сумма по оплатам.
Имеющие(СуммаПоОплатам) >= суммаПоДоговору
2 Дмитрий
 
04.03.19
15:57
(0) Отбирай наоборот. суммируй оплаты по договорам в регистре, фильтруй по сумме
3 Хрюкин
 
04.03.19
16:11
(2) А как добавить фильтр по сумме, если суммы берутся из второй таблицы. Нужно как-то условие задать, в котором сравниваются поля из разных таблиц.
4 novichok79
 
04.03.19
16:16
запрос в студию чо
5 Хрюкин
 
04.03.19
16:32
|    ВЫБРАТЬ
  |        ДоговорыКонтрагентов.СуммаДоговора,
  |        СУММА(ВЫБОР
  |                КОГДА Оплаты.ВидДвижения = &ПРИХОД
  |                    ТОГДА Оплаты.Сумма
  |            КОНЕЦ) КАК ОплатаПриход,
  |        СУММА(ВЫБОР
  |                КОГДА Оплаты.ВидДвижения = &РАСХОД
  |                    ТОГДА Оплаты.Сумма
  |            КОНЕЦ) КАК ОплатаРасход,
  |    ИЗ
  |        Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
  |            ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Оплаты КАК Оплаты



Нужно, чтобы СуммаДоговора была <= (ОплатаПриход - ОплатаРасход)
  |            ПО (Оплаты.Договор = ДоговорыКонтрагентов.Ссылка)
6 Хрюкин
 
04.03.19
16:33
Исправленный предыдущий пост:


|    ВЫБРАТЬ
  |        ДоговорыКонтрагентов.СуммаДоговора,
  |        СУММА(ВЫБОР
  |                КОГДА Оплаты.ВидДвижения = &ПРИХОД
  |                    ТОГДА Оплаты.Сумма
  |            КОНЕЦ) КАК ОплатаПриход,
  |        СУММА(ВЫБОР
  |                КОГДА Оплаты.ВидДвижения = &РАСХОД
  |                    ТОГДА Оплаты.Сумма
  |            КОНЕЦ) КАК ОплатаРасход,
  |    ИЗ
  |        Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
  |            ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Оплаты КАК Оплаты
  |            ПО (Оплаты.Договор = ДоговорыКонтрагентов.Ссылка)





Нужно, чтобы СуммаДоговора была <= (ОплатаПриход - ОплатаРасход)
7 dezss
 
04.03.19
16:43
Имеющие(ОплатаПриход - ОплатаРасход) >= СуммаДоговора

Хотя сам так не пробовал.
Можно пихнуть в ВТ, а следующим запросом уже в ГДЕ наложить условие.
(ОплатаПриход - ОплатаРасход) >= СуммаДоговора
8 dezss
 
04.03.19
16:46
+ кстати. Если необходимо отобрать договоры, то не мешало бы в выборку и ссылку пихнуть)
9 Хрюкин
 
04.03.19
16:48
(7) А я попробовал, у меня ругается, что поле объекта не обнаружено ОплатаПриход
10 dezss
 
04.03.19
16:49
(9) сделай через конструктор? В условиях.
11 Хрюкин
 
04.03.19
16:51
(10) Пробовал через конструктор. Там дает только выбрать поле таблица и сравнить его с параметром, не дает сравнить с полем из другой таблицы.
12 sqr4
 
04.03.19
16:53
(11) а если галочку поставить?
13 novichok79
 
04.03.19
16:54
во первых null в сумме будет, если оплат не было, надо естьnull юзать

ВЫБОР КОГДА Оплаты.ВидДвижения = Значение(ВидДвиженияНакопления.Расход) Тогда ЕСТЬNULL(Оплаты.Сумма, 0) ИНАЧЕ 0 КОНЕЦ

и во вторых, нафуя лепить в имеющиеся вычисляемое поле, по-хорошему обернуть это дело во вложенный запрос и потом отбирать
14 novichok79
 
04.03.19
16:56
ИМЕЮЩИЕ СУММА(ВЫБОР
                КОГДА Оплаты.ВидДвижения = &ПРИХОД
                     ТОГДА Оплаты.Сумма
             КОНЕЦ) КАК ОплатаПриход,
         СУММА(ВЫБОР
                 КОГДА Оплаты.ВидДвижения = &РАСХОД
                     ТОГДА Оплаты.Сумма
             КОНЕЦ) <= ДоговорыКонтрагентов.СуммаДоговора

чо так не дает что-ли. да не верю.
15 Alexandr_U1982
 
04.03.19
16:57
ИМЕЮЩИЕ СУММА(ВЫБОР
                КОГДА Оплаты.ВидДвижения = &ПРИХОД
                     ТОГДА Оплаты.Сумма
             КОНЕЦ) -
         СУММА(ВЫБОР
                 КОГДА Оплаты.ВидДвижения = &РАСХОД
                     ТОГДА Оплаты.Сумма
             КОНЕЦ) <= ДоговорыКонтрагентов.СуммаДоговора
16 novichok79
 
04.03.19
16:57
(14) это если очень хочется. но я считаю что лучше отдельно посчитать все, а потом джойнить уже.
17 singlych
 
04.03.19
17:04
таблица оборотов не спасет?
18 dezss
 
04.03.19
17:07
(17) вот жеж)))
лучший!
19 Shaggy
 
04.03.19
17:46
Почему нельзя засунуть вычисление сумм в подзапрос, а не нужное отбросить через "ГДЕ" в основном запросе?