Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Двойное условие в запросе (=>; <=)          
Constantus Подменю пользователя
сообщение 08.07.17, 10:42
Сообщение #1

Ветеран
*******
Группа: Пользователи
Сообщений: 962
Спасибо сказали: 8 раз
Рейтинг: 0

Приветствую, форумчане!
"Управление торговлей 10.3", (Моби-С 5.5). "ABBYY Ukraine", 2003-2014 (2.3.20.1)

Имеется некий отчет, который должен выводить результат числовых значений по двум значениям в диапазоне (=>; <=)
Причем, можно выбрать выборку по одному значению, по двум или вообще игнорировать отбор

|{ГДЕ
|    ВложенныйЗапрос.Остаток >= &ОстатокОт И ВложенныйЗапрос.Стоимость >= &СтоимостьОт
|    И ВложенныйЗапрос.Остаток <= &ОстатокДо И ВложенныйЗапрос.Стоимость <= &СтоимостьДо}



    Если ДиапазонОстатка Тогда 
        Запрос.УстановитьПараметр("ОстатокОт", СуммаОстаткаОт);
        Запрос.УстановитьПараметр("ОстатокДо", СуммаОстаткаДо);
    КонецЕсли;        
    
    Если ДиапазонСумм Тогда
        Запрос.УстановитьПараметр("СтоимостьОт", СуммаПродажОт);
        Запрос.УстановитьПараметр("СтоимостьДо", СуммаПродажДо);
    КонецЕсли;


Код не срабатывает, как можно сформировать такой гибкий отчет с выбором диапазона сумм от/до по Остаткам и/или СуммамПродаж?

sava1 Подменю пользователя
сообщение 08.07.17, 11:56
Сообщение #2

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2684
Из: Проскуров
Спасибо сказали: 678 раз
Рейтинг: 656.7

Такой диапазон определяется МЕЖДУ

Условия лучше формировать динамически, типа%

Если ДиапазонОстатка ИЛИ ДиапазонСумм Тогда 
   Если ДиапазонОстатка Тогда
        УсловиеЗапроса = "ГДЕ ДиапазонОстатка МЕЖДУ &ОстатокОт И &ОстатокДо";
        Запрос.УстановитьПараметр("ОстатокОт", СуммаОстаткаОт);
        Запрос.УстановитьПараметр("ОстатокДо", СуммаОстаткаДо);
    КонецЕсли;        

    Если ДиапазонСумм Тогда
        УсловиеЗапроса = УсловиеЗапроса + ?(ДиапазонОстатка, " И ", "ГДЕ ") +" ДиапазонСумм МЕЖДУ &СтоимостьОт И &СтоимостьДо";
        Запрос.УстановитьПараметр("СтоимостьОт", СуммаПродажОт);
        Запрос.УстановитьПараметр("СтоимостьДо", СуммаПродажДо);
    КонецЕсли;    
КонецЕсли;


текстзапроса = "
|....
|"+ УсловиеЗапроса+"    
......
|";


Сообщение отредактировал sava1 - 08.07.17, 11:57

Спасибо сказали: Constantus,

Constantus Подменю пользователя
сообщение 08.07.17, 12:55
Сообщение #3

Ветеран
*******
Группа: Пользователи
Сообщений: 962
Спасибо сказали: 8 раз
Рейтинг: 0

sava1 @ Сегодня, 14:56 * ,


Благодарю... Но возникла другая ситуация. Дело в том, что у меня поле "Остаток" является расчетной, т.е. разницей между "Стоимость" и "Подарок"

Вот текст запроса:

    Запрос.Текст = 
"ВЫБРАТЬ
|    ВложенныйЗапрос.Контрагент КАК Контрагент,
|    СУММА(ВложенныйЗапрос.Стоимость) КАК Стоимость,
|    СУММА(ВложенныйЗапрос.Подарок) КАК Подарок,
|    СУММА(ВложенныйЗапрос.Остаток) КАК Остаток
|ИЗ
|    (ВЫБРАТЬ
|        Продажи.Контрагент КАК Контрагент,
|        СУММА(Продажи.Стоимость) КАК Стоимость,
|        0 КАК Подарок,
|        СУММА(Продажи.Стоимость) КАК Остаток
|    ИЗ
|        РегистрНакопления.Продажи КАК Продажи
|    ГДЕ
|        Продажи.Период МЕЖДУ НАЧАЛОПЕРИОДА(&Дата1, ДЕНЬ) И КОНЕЦПЕРИОДА(&Дата2, ДЕНЬ)
|        И Продажи.Номенклатура В(&НоменклатураПродаж)
|    
|    СГРУППИРОВАТЬ ПО
|        Продажи.Контрагент
|    
|    ОБЪЕДИНИТЬ ВСЕ
|    
|    ВЫБРАТЬ
|        Продажи.Контрагент,
|        0,
|        СУММА(Продажи.СтоимостьБезСкидок),
|        СУММА(-Продажи.СтоимостьБезСкидок)
|    ИЗ
|        РегистрНакопления.Продажи КАК Продажи
|    ГДЕ
|        Продажи.Номенклатура В(&НоменклатураПодарков)
|        И Продажи.Период МЕЖДУ НАЧАЛОПЕРИОДА(&Дата1, ДЕНЬ) И КОНЕЦПЕРИОДА(&Дата2, ДЕНЬ)
|    
|    СГРУППИРОВАТЬ ПО
|        Продажи.Контрагент) КАК ВложенныйЗапрос
|
|"+ УсловиеЗапроса+"
|
|
|
|СГРУППИРОВАТЬ ПО
|    ВложенныйЗапрос.Контрагент
|
|УПОРЯДОЧИТЬ ПО
|    Контрагент
|АВТОУПОРЯДОЧИВАНИЕ";


Т.е., если
1. Стоимость=1000, Подарок=200, Остаток=800
2. Стоимость=1000, Подарок=000, Остаток=1000
2. Стоимость=2000, Подарок=000, Остаток=2000

Если я выбираю по "Остатку" чистые поля, т.е. без подарков, то отбор по "ДиапазонОстатка" осуществляется. Если же пытаюсь отфильтровать поля с "Подарками", то этот результат не увидит.

Например, см приведенные строки, делаю фильтр от "700" до "2500", то первую строку "1. Стоимость=1000, Подарок=200, Остаток=800" не увидит...
Т.е. поля Остатков, которые подверглись воздействию "Подарков" не расчитывает...

Что может быть?

sava1 Подменю пользователя
сообщение 08.07.17, 13:32
Сообщение #4

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2684
Из: Проскуров
Спасибо сказали: 678 раз
Рейтинг: 656.7

Обернуть запрос еще раз без агрегатов и на него условие


Сообщение отредактировал sava1 - 08.07.17, 13:34

Constantus Подменю пользователя
сообщение 08.07.17, 13:43
Сообщение #5

Ветеран
*******
Группа: Пользователи
Сообщений: 962
Спасибо сказали: 8 раз
Рейтинг: 0

sava1 @ Сегодня, 16:32 * ,


А можно по-подробнее... Как это в данном тексте запроса избавиться от агрегатных функций, т.е. обернуть?

sava1 Подменю пользователя
сообщение 08.07.17, 13:50
Сообщение #6

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2684
Из: Проскуров
Спасибо сказали: 678 раз
Рейтинг: 656.7

ВЫБРАТЬ
|    Контрагент КАК Контрагент,
|    Стоимость,
|    Подарок,
|    Остаток
|ИЗ

// тут Ваш запрос

|"+ УсловиеЗапроса+"


Покажите запрос с установкой условий - там с условиями что-то не так.



Сообщение отредактировал sava1 - 08.07.17, 13:45

Constantus Подменю пользователя
сообщение 08.07.17, 13:59
Сообщение #7

Ветеран
*******
Группа: Пользователи
Сообщений: 962
Спасибо сказали: 8 раз
Рейтинг: 0

sava1 @ Сегодня, 16:45 * ,

Попробовал, но безрезультатно...

    ТекстЗапросаХ = 
"ВЫБРАТЬ
|    ВложенныйЗапрос.Контрагент КАК Контрагент,
|    СУММА(ВложенныйЗапрос.Стоимость) КАК Стоимость,
|    СУММА(ВложенныйЗапрос.Подарок) КАК Подарок,
|    СУММА(ВложенныйЗапрос.Остаток) КАК Остаток
|ИЗ
|    (ВЫБРАТЬ
|        Продажи.Контрагент КАК Контрагент,
|***********************************************************
|
|СГРУППИРОВАТЬ ПО
|    ВложенныйЗапрос.Контрагент
|
|УПОРЯДОЧИТЬ ПО
|    Контрагент
|АВТОУПОРЯДОЧИВАНИЕ";




Запрос.Текст = 
"ВЫБРАТЬ
|    Контрагент КАК Контрагент,
|    Стоимость,
|    Подарок,
|    Остаток
|ИЗ
| " + ТекстЗапросаХ +"
|"+ УсловиеЗапроса;



{(7, 2)}: Неверное присоединение
<<?>>ВЫБРАТЬ



Вот полный текст запроса. Работает, но "Остатки" не берет

Запрос = Новый Запрос;
УсловиеЗапроса = "";
Если ДиапазонОстатка ИЛИ ДиапазонСумм Тогда
   Если ДиапазонОстатка Тогда
        УсловиеЗапроса = "ГДЕ Остаток МЕЖДУ &ОстатокОт И &ОстатокДо";
        Запрос.УстановитьПараметр("ОстатокОт", СуммаОстаткаОт);
        Запрос.УстановитьПараметр("ОстатокДо", СуммаОстаткаДо);
    КонецЕсли;        

    Если ДиапазонСумм Тогда
        УсловиеЗапроса = УсловиеЗапроса + ?(ДиапазонОстатка, " И ", "ГДЕ ") +" Стоимость МЕЖДУ &СтоимостьОт И &СтоимостьДо";
        Запрос.УстановитьПараметр("СтоимостьОт", СуммаПродажОт);
        Запрос.УстановитьПараметр("СтоимостьДо", СуммаПродажДо);
    КонецЕсли;    
КонецЕсли;    
    
//*****************    
    Запрос.Текст =
"ВЫБРАТЬ
|    ВложенныйЗапрос.Контрагент КАК Контрагент,
|    СУММА(ВложенныйЗапрос.Стоимость) КАК Стоимость,
|    СУММА(ВложенныйЗапрос.Подарок) КАК Подарок,
|    СУММА(ВложенныйЗапрос.Остаток) КАК Остаток
|ИЗ
|    (ВЫБРАТЬ
|        Продажи.Контрагент КАК Контрагент,
|        СУММА(Продажи.Стоимость) КАК Стоимость,
|        0 КАК Подарок,
|        СУММА(Продажи.Стоимость) КАК Остаток
|    ИЗ
|        РегистрНакопления.Продажи КАК Продажи
|    ГДЕ
|        Продажи.Период МЕЖДУ НАЧАЛОПЕРИОДА(&Дата1, ДЕНЬ) И КОНЕЦПЕРИОДА(&Дата2, ДЕНЬ)
|        И Продажи.Номенклатура В(&НоменклатураПродаж)
|    
|    СГРУППИРОВАТЬ ПО
|        Продажи.Контрагент
|    
|    ОБЪЕДИНИТЬ ВСЕ
|    
|    ВЫБРАТЬ
|        Продажи.Контрагент,
|        0,
|        СУММА(Продажи.СтоимостьБезСкидок),
|        СУММА(-Продажи.СтоимостьБезСкидок)
|    ИЗ
|        РегистрНакопления.Продажи КАК Продажи
|    ГДЕ
|        Продажи.Номенклатура В(&НоменклатураПодарков)
|        И Продажи.Период МЕЖДУ НАЧАЛОПЕРИОДА(&Дата1, ДЕНЬ) И КОНЕЦПЕРИОДА(&Дата2, ДЕНЬ)
|    
|    СГРУППИРОВАТЬ ПО
|        Продажи.Контрагент) КАК ВложенныйЗапрос
|
|"+ УсловиеЗапроса+"
|
|
|
|СГРУППИРОВАТЬ ПО
|    ВложенныйЗапрос.Контрагент
|
|УПОРЯДОЧИТЬ ПО
|    Контрагент
|АВТОУПОРЯДОЧИВАНИЕ";


    Запрос.УстановитьПараметр("Дата1", ДатаНачала);
    Запрос.УстановитьПараметр("Дата2", ДатаОкончания);
    Запрос.УстановитьПараметр("НоменклатураПродаж", Товары);
    Запрос.УстановитьПараметр("НоменклатураПодарков", Бонусы);


sava1 Подменю пользователя
сообщение 08.07.17, 14:03
Сообщение #8

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2684
Из: Проскуров
Спасибо сказали: 678 раз
Рейтинг: 656.7

покажите запрос с установкой условий

добавьте в агрегаты IsNull

СУММА(IsNULL(ВложенныйЗапрос.Стоимость,0)) КАК Стоимость,

Constantus Подменю пользователя
сообщение 08.07.17, 14:08
Сообщение #9

Ветеран
*******
Группа: Пользователи
Сообщений: 962
Спасибо сказали: 8 раз
Рейтинг: 0

sava1 @ Сегодня, 17:03 * ,
Цитата(sava1 @ 08.07.17, 17:03) *
покажите запрос с установкой условий

добавьте в агрегаты IsNull

СУММА(IsNULL(ВложенныйЗапрос.Стоимость,0)) КАК Стоимость,



Нет, не сработало. Результат прежний

sava1 Подменю пользователя
сообщение 08.07.17, 14:31
Сообщение #10

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2684
Из: Проскуров
Спасибо сказали: 678 раз
Рейтинг: 656.7

тимВивер в ЛС - посмотрю

Спасибо сказали: Constantus,

Constantus Подменю пользователя
сообщение 08.07.17, 15:25
Сообщение #11

Ветеран
*******
Группа: Пользователи
Сообщений: 962
Спасибо сказали: 8 раз
Рейтинг: 0

sava1 @ Сегодня, 17:31 * ,

Вроде отправил

Еще раз благодарю, Сава1!!!

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 29.03.24, 16:58
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!