Имя: Пароль:
1C
Админ
Оптимизация запроса, аналог CASE, но не прямой (не много кода)
0 Холст
 
20.08.12
16:12
к примеру, нужен отчет с фильтром по грузополучателю (ГП) реквизит ВыбКлиенты, причем ГП берется из реквизита Грузополучатель, а если таковой не заполнен, то ГП берется из Контрагента

получаем такой запрос:
   ТекстЗапроса =
   "//{{ЗАПРОС(Сформировать)
   |Период с ВыбНачПериода по ВыбКонПериода;
   |Контрагент = Документ.Реализация.Контрагент;
   |Грузополучатель = Документ.Реализация.Грузополучатель;
   |ТекущийДокумент = Документ.Реализация.ТекущийДокумент;
   |Группировка ТекущийДокумент без упорядочивания;
   |Условие( ((ПустоеЗначение(Грузополучатель) = 1) и (Контрагент = ВыбКлиенты)) или ((ПустоеЗначение(Грузополучатель) = 0) и (Грузополучатель = ВыбКлиенты)) );
   |"//}}ЗАПРОС
   ;

Понятно, что Условие можно вывести в отдельную функцию.

Вопрос: можно ли здесь Грузополучателя по условию получить для фильтра еще в процессе заполнения переменной Грузополучатель, наподобие
Грузополучатель = ?(ПустоеЗначение(Документ.Реализация.Грузополучатель) = 1,Документ.Реализация.Контрагент ,Документ.Реализация.Грузополучатель)

или по аналогии с SQL языком

CASE
     WHEN ПустоеЗначение(Документ.Реализация.Грузополучатель) = 1 THEN Документ.Реализация.Контрагент
ELSE
Грузополучатель = Документ.Реализация.Грузополучатель
END
1 SUA
 
20.08.12
16:20
а чем исходный вариант тем более только для фильтра а не для поля не устраивает?
2 Холст
 
20.08.12
16:22
(1) тем, что в дальнейшем надо использовать группировку по Грузополучатель
3 smaharbA
 
20.08.12
16:24
(Х в Сп) не пойдет ?
4 BiBijke
 
20.08.12
16:25
ВЫБОР КОГДА ТОГДА КОГДА ТОГДА ИНАЧЕ КОНЕЦ      не предалгать?
5 smaharbA
 
20.08.12
16:26
(4) в 77 ?
6 SUA
 
20.08.12
16:28
ну в крайнем случае будет 2 группировки...
7 BiBijke
 
20.08.12
16:28
(5) прощу прощения за невнимательность
8 Ёпрст
 
20.08.12
16:32
(0) переменную и группировку не слепишь
9 Ёпрст
 
20.08.12
16:32
в чорном запросе
10 Холст
 
20.08.12
16:32
(6) вот от велосипеда с 2мя группировками и хочется избавиться
(3) не понял ... принадлежность к списку ? но нужно на стадии получения переменной запроса применить условие
(8) как обходят гуру такое ?
11 Ёпрст
 
20.08.12
16:34
(10) не знаю как гуру, я пишу прямой запрос и не запариваюсь с чорным
12 Ёпрст
 
20.08.12
16:35
либо, вводи 2 переменные и при обходе выбирай из непустых.
13 Холст
 
20.08.12
16:52
(11) почему 1С-овский запрос называешь чорным ? разве так 1Сники называют не прямой ?
14 Злопчинский
 
20.08.12
17:03
(13) потому что он в пофигураторе отображается чорным0прчорным шрифтом
15 ADirks
 
21.08.12
08:46
(11) поначалу прочитал как "не спариваюсь"  :))
16 ЧеловекДуши
 
21.08.12
09:01
(13)Потому, что он до тупизны кривой,порой лишён, какой либо логики, и по сути имеет скрытую не однозначную логику :)

В общем, не мучайся, не все в 1С делается на одном дыхании ;)
Парой бывает нужно написать не один запрос + цикл(ы) для получения результата. :)