Приветствую, форумчане!
"Управление торговлей 10.3", (Моби-С 5.5). "ABBYY Ukraine", 2003-2014 (2.3.20.1)
Имеется некий отчет, который должен выводить результат числовых значений по двум значениям в диапазоне (=>; <=)
Причем, можно выбрать выборку по одному значению, по двум или вообще игнорировать отбор
|{ГДЕ
| ВложенныйЗапрос.Остаток >= &ОстатокОт И ВложенныйЗапрос.Стоимость >= &СтоимостьОт
| И ВложенныйЗапрос.Остаток <= &ОстатокДо И ВложенныйЗапрос.Стоимость <= &СтоимостьДо}
Если ДиапазонОстатка Тогда
Запрос.УстановитьПараметр("ОстатокОт", СуммаОстаткаОт);
Запрос.УстановитьПараметр("ОстатокДо", СуммаОстаткаДо);
КонецЕсли;
Если ДиапазонСумм Тогда
Запрос.УстановитьПараметр("СтоимостьОт", СуммаПродажОт);
Запрос.УстановитьПараметр("СтоимостьДо", СуммаПродажДо);
КонецЕсли;
Такой диапазон определяется МЕЖДУ
Условия лучше формировать динамически, типа%
Если ДиапазонОстатка ИЛИ ДиапазонСумм Тогда
Если ДиапазонОстатка Тогда
УсловиеЗапроса = "ГДЕ ДиапазонОстатка МЕЖДУ &ОстатокОт И &ОстатокДо";
Запрос.УстановитьПараметр("ОстатокОт", СуммаОстаткаОт);
Запрос.УстановитьПараметр("ОстатокДо", СуммаОстаткаДо);
КонецЕсли;
Если ДиапазонСумм Тогда
УсловиеЗапроса = УсловиеЗапроса + ?(ДиапазонОстатка, " И ", "ГДЕ ") +" ДиапазонСумм МЕЖДУ &СтоимостьОт И &СтоимостьДо";
Запрос.УстановитьПараметр("СтоимостьОт", СуммаПродажОт);
Запрос.УстановитьПараметр("СтоимостьДо", СуммаПродажДо);
КонецЕсли;
КонецЕсли;
текстзапроса = "
|....
|"+ УсловиеЗапроса+"
......
|";
sava1 @ Сегодня, 14:56
,
Благодарю... Но возникла другая ситуация. Дело в том, что у меня поле "Остаток" является расчетной, т.е. разницей между "Стоимость" и "Подарок"
Вот текст запроса:
Запрос.Текст =
"ВЫБРАТЬ
| ВложенныйЗапрос.Контрагент КАК Контрагент,
| СУММА(ВложенныйЗапрос.Стоимость) КАК Стоимость,
| СУММА(ВложенныйЗапрос.Подарок) КАК Подарок,
| СУММА(ВложенныйЗапрос.Остаток) КАК Остаток
|ИЗ
| (ВЫБРАТЬ
| Продажи.Контрагент КАК Контрагент,
| СУММА(Продажи.Стоимость) КАК Стоимость,
| 0 КАК Подарок,
| СУММА(Продажи.Стоимость) КАК Остаток
| ИЗ
| РегистрНакопления.Продажи КАК Продажи
| ГДЕ
| Продажи.Период МЕЖДУ НАЧАЛОПЕРИОДА(&Дата1, ДЕНЬ) И КОНЕЦПЕРИОДА(&Дата2, ДЕНЬ)
| И Продажи.Номенклатура В(&НоменклатураПродаж)
|
| СГРУППИРОВАТЬ ПО
| Продажи.Контрагент
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| Продажи.Контрагент,
| 0,
| СУММА(Продажи.СтоимостьБезСкидок),
| СУММА(-Продажи.СтоимостьБезСкидок)
| ИЗ
| РегистрНакопления.Продажи КАК Продажи
| ГДЕ
| Продажи.Номенклатура В(&НоменклатураПодарков)
| И Продажи.Период МЕЖДУ НАЧАЛОПЕРИОДА(&Дата1, ДЕНЬ) И КОНЕЦПЕРИОДА(&Дата2, ДЕНЬ)
|
| СГРУППИРОВАТЬ ПО
| Продажи.Контрагент) КАК ВложенныйЗапрос
|
|"+ УсловиеЗапроса+"
|
|
|
|СГРУППИРОВАТЬ ПО
| ВложенныйЗапрос.Контрагент
|
|УПОРЯДОЧИТЬ ПО
| Контрагент
|АВТОУПОРЯДОЧИВАНИЕ";
Обернуть запрос еще раз без агрегатов и на него условие
sava1 @ Сегодня, 16:32
,
А можно по-подробнее... Как это в данном тексте запроса избавиться от агрегатных функций, т.е. обернуть?
ВЫБРАТЬ
| Контрагент КАК Контрагент,
| Стоимость,
| Подарок,
| Остаток
|ИЗ
// тут Ваш запрос
|"+ УсловиеЗапроса+"
sava1 @ Сегодня, 16:45
,
Попробовал, но безрезультатно...
ТекстЗапросаХ =
"ВЫБРАТЬ
| ВложенныйЗапрос.Контрагент КАК Контрагент,
| СУММА(ВложенныйЗапрос.Стоимость) КАК Стоимость,
| СУММА(ВложенныйЗапрос.Подарок) КАК Подарок,
| СУММА(ВложенныйЗапрос.Остаток) КАК Остаток
|ИЗ
| (ВЫБРАТЬ
| Продажи.Контрагент КАК Контрагент,
|***********************************************************
|
|СГРУППИРОВАТЬ ПО
| ВложенныйЗапрос.Контрагент
|
|УПОРЯДОЧИТЬ ПО
| Контрагент
|АВТОУПОРЯДОЧИВАНИЕ";
Запрос.Текст =
"ВЫБРАТЬ
| Контрагент КАК Контрагент,
| Стоимость,
| Подарок,
| Остаток
|ИЗ
| " + ТекстЗапросаХ +"
|"+ УсловиеЗапроса;
Запрос = Новый Запрос;
УсловиеЗапроса = "";
Если ДиапазонОстатка ИЛИ ДиапазонСумм Тогда
Если ДиапазонОстатка Тогда
УсловиеЗапроса = "ГДЕ Остаток МЕЖДУ &ОстатокОт И &ОстатокДо";
Запрос.УстановитьПараметр("ОстатокОт", СуммаОстаткаОт);
Запрос.УстановитьПараметр("ОстатокДо", СуммаОстаткаДо);
КонецЕсли;
Если ДиапазонСумм Тогда
УсловиеЗапроса = УсловиеЗапроса + ?(ДиапазонОстатка, " И ", "ГДЕ ") +" Стоимость МЕЖДУ &СтоимостьОт И &СтоимостьДо";
Запрос.УстановитьПараметр("СтоимостьОт", СуммаПродажОт);
Запрос.УстановитьПараметр("СтоимостьДо", СуммаПродажДо);
КонецЕсли;
КонецЕсли;
//*****************
Запрос.Текст =
"ВЫБРАТЬ
| ВложенныйЗапрос.Контрагент КАК Контрагент,
| СУММА(ВложенныйЗапрос.Стоимость) КАК Стоимость,
| СУММА(ВложенныйЗапрос.Подарок) КАК Подарок,
| СУММА(ВложенныйЗапрос.Остаток) КАК Остаток
|ИЗ
| (ВЫБРАТЬ
| Продажи.Контрагент КАК Контрагент,
| СУММА(Продажи.Стоимость) КАК Стоимость,
| 0 КАК Подарок,
| СУММА(Продажи.Стоимость) КАК Остаток
| ИЗ
| РегистрНакопления.Продажи КАК Продажи
| ГДЕ
| Продажи.Период МЕЖДУ НАЧАЛОПЕРИОДА(&Дата1, ДЕНЬ) И КОНЕЦПЕРИОДА(&Дата2, ДЕНЬ)
| И Продажи.Номенклатура В(&НоменклатураПродаж)
|
| СГРУППИРОВАТЬ ПО
| Продажи.Контрагент
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| Продажи.Контрагент,
| 0,
| СУММА(Продажи.СтоимостьБезСкидок),
| СУММА(-Продажи.СтоимостьБезСкидок)
| ИЗ
| РегистрНакопления.Продажи КАК Продажи
| ГДЕ
| Продажи.Номенклатура В(&НоменклатураПодарков)
| И Продажи.Период МЕЖДУ НАЧАЛОПЕРИОДА(&Дата1, ДЕНЬ) И КОНЕЦПЕРИОДА(&Дата2, ДЕНЬ)
|
| СГРУППИРОВАТЬ ПО
| Продажи.Контрагент) КАК ВложенныйЗапрос
|
|"+ УсловиеЗапроса+"
|
|
|
|СГРУППИРОВАТЬ ПО
| ВложенныйЗапрос.Контрагент
|
|УПОРЯДОЧИТЬ ПО
| Контрагент
|АВТОУПОРЯДОЧИВАНИЕ";
Запрос.УстановитьПараметр("Дата1", ДатаНачала);
Запрос.УстановитьПараметр("Дата2", ДатаОкончания);
Запрос.УстановитьПараметр("НоменклатураПродаж", Товары);
Запрос.УстановитьПараметр("НоменклатураПодарков", Бонусы);
покажите запрос с установкой условий
добавьте в агрегаты IsNull
СУММА(IsNULL(ВложенныйЗапрос.Стоимость,0)) КАК Стоимость,
тимВивер в ЛС - посмотрю
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua