|
v7: Помогите с запросом | ☑ | ||
---|---|---|---|---|
0
tesei
07.10.12
✎
21:03
|
Давно я не брал в руки клюшки, мозги под снеговика заточены, не могу сообразить. Конфа комплексная. В запросе по контрагентам есть сумма долга, сумма кредита, нужно посчитать СуммаПревышения = Макс(СуммаДолга - СуммаКредита, 0) для каждого клиента и получить итоги по всей иерархии. Ниже текст запрос:
ТекстЗапроса = |Период с ВыбКонПериода по ВыбКонПериода; |Контрагент = Регистр.Покупатели.Договор.Владелец, Регистр.Поставщики.Договор.Владелец; |СуммаКредита = Регистр.Поставщики.Договор.СуммаКредита, Регистр.Покупатели.Договор.СуммаКредита; |СуммаУпр = Регистр.Покупатели.СуммаУпр, Регистр.Поставщики.СуммаУпр; |Функция СуммаКредита1 = Среднее(СуммаКредита); |Функция СуммаДолга = КонОст(СуммаУпр); |Группировка Контрагент; |"; Поможите, коллеги-клюшечники! |
|||
1
DenLaDen
07.10.12
✎
21:18
|
Функция Разница( Перем1, Перем2 )
Возврат Перем1 - Перем2; КонецФункции в запросе |Функция СуммаПревышения = Макс( Разница( СуммаДолга, СуммаКредита ), 0 ); |
|||
2
tesei
07.10.12
✎
21:22
|
(1) спасибо, щас проверю...
|
|||
3
DenLaDen
07.10.12
✎
21:22
|
+(1) прогнал
|Функция СуммаПревышения = Сумма( Разница( СуммаДолга, СуммаКредита ) ); |
|||
4
tesei
07.10.12
✎
21:52
|
(3) не вышло:
Функция Разница(Перем1, Перем2) Возврат Макс(Перем1 - Перем2, 0); КонецФункции |Функция Превышение = Сумма(Разница(СуммаУпр, СуммаКредита)); - результат пустой |Функция Превышение = Сумма(Разница(СуммаДолга, СуммаКредита1)); - синтаксическая ошибка |
|||
5
tesei
07.10.12
✎
22:35
|
В качестве апа предлагаю отредактированный запрос (без синтаксических ошибок, пустой результат в "Превышение"):
|Период с ВыбКонПериода по ВыбКонПериода; |Контрагент = Регистр.Покупатели.Договор.Владелец, Регистр.Поставщики.Договор.Владелец; |СуммаКредита = Регистр.Поставщики.Договор.СуммаКредита, Регистр.Покупатели.Договор.СуммаКредита; |СуммаУпр = Регистр.Покупатели.СуммаУпр, Регистр.Поставщики.СуммаУпр; |Функция СуммаКредита1 = Среднее(СуммаКредита); |Функция СуммаДолга = КонОст(СуммаУпр); |Функция Превышение = Сумма(Разница(СуммаУпр, СуммаКредита)); |Группировка Контрагент; |"; |
|||
6
tesei
08.10.12
✎
08:44
|
добрый ап
|
|||
7
Voronve
08.10.12
✎
08:49
|
(6) Свои функции в запросе работают в конструкциях "условие" и "когда". Сюда и копай:
|Функция Превышение = Сумма(СуммаДолга) Когда (Разница(СуммаУпр, СуммаКредита) > 0); Как то так... |
|||
8
tesei
08.10.12
✎
09:22
|
Сорри, в (5) все работает, спасибо! :)
|
|||
9
tesei
08.10.12
✎
09:28
|
... правда считает неправильно, врет. Может из-за того, что один параметр - сумма, а другой - конечный остаток.
|
|||
10
Patrio_
O_Muerte 08.10.12
✎
09:42
|
Есть мнение, что дополнительно определенные функции в запросе 77 сильно замедляют выполнение оного.
Предлагаю не ебсти себе мозг, а считать следующим образом: |Функция Превышение = Сумма(СуммаУпр - СуммаКредита); Либо в постобработке на основании готовых переменных долга и кредита. Еще совет - не помнишь язык запросов - построй конструктором и определяй все поля по единому порядку, а не в разнобой: |Контрагент = Регистр.Покупатели.Договор.Владелец, Регистр.Поставщики.Договор.Владелец; |СуммаКредита = Регистр.Поставщики.Договор.СуммаКредита, Регистр.Покупатели.Договор.СуммаКредита; НЕ ВЕРНО! |Контрагент = Регистр.Поставщики.Договор.Владелец, Регистр.Покупатели.Договор.Владелец; |СуммаКредита = Регистр.Поставщики.Договор.СуммаКредита, Регистр.Покупатели.Договор.СуммаКредита; ВЕРНО! |
|||
11
tesei
08.10.12
✎
13:10
|
(10) не подходит, тут не просто разница, а неотрицательная разница с итогами по иерархии.
В общем, надоело мне убивать время, решал я задачу через }|{опу экскаватором: посчитал итоги последовательно по всем нисходящим уровням в цикле. В снеговике все делается на раз в одном запросе, клюшки отстой. Пора уже брать за работы по 7ке по двойному тарифу. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |