|
v7: "Условие В" в запросе | ☑ | ||
---|---|---|---|---|
0
Makar47
10.09.20
✎
14:26
|
Всем привет!
|
|||
1
Makar47
10.09.20
✎
14:31
|
(0)
ТекстЗапроса = |Период с ВыбНачПериода по ВыбКонПериода; |Контрагент = Документ.Дисконт.Контрагент; |Номенклатура = Документ.Дисконт.Номенклатура; |Бонус = Документ.Дисконт.Бонус; |Функция Минимум = Минимум(Бонус); |Группировка Номенклатура без групп; |Условие(выбКонтрагент в Контрагент); Такое условие нельзя, что ли, делать? У меня в Документ.Дисконт.Контрагент могут указываться группы. Хочу выбрать те документы, которые либо с конкретным контрагентом, либо с группой куда выбранный контрагент входит. |
|||
2
Mikeware
10.09.20
✎
14:32
|
нет.
|
|||
3
Lazy Stranger
10.09.20
✎
14:39
|
можно собрать предварительно всех родителей выбКонтрагента в список
и в запросе написать Контрагент в сзКонтрагенты |
|||
4
Базис
naïve
10.09.20
✎
14:42
|
Типовая конфа есть? Глянь отчёты в ТиС, вроде там ТекстЗапроса строится по условию.
|
|||
5
CaIIIka
10.09.20
✎
14:42
|
Условие(Контрагент в выбКонтрагент)
|
|||
6
Kigo_Kigo
10.09.20
✎
14:43
|
А никого не смутило |Условие(выбКонтрагент в Контрагент);
а по идее должно быть |Условие(Контрагент в выбКонтрагент); |
|||
7
Kigo_Kigo
10.09.20
✎
14:44
|
А вон уже Сашка поправил
|
|||
8
Makar47
10.09.20
✎
14:48
|
(6) (5) Это не ошибка. Это не соответствует условию задачи. Поэтому и спросил.
|
|||
9
Mikeware
10.09.20
✎
14:54
|
(6) не, он наоборот хочет.
|
|||
10
Mikeware
10.09.20
✎
14:56
|
(8) у тебя Контрагент - либо сам ВыбКонтрагент, либо группа. Ну и сформируй СЗ и ищи по вхождению
|
|||
11
Mikeware
10.09.20
✎
14:56
|
+(10) в смысле, сз - конечого размера (не больше глубины справочника), явно определенного перед запросом...
|
|||
12
CaIIIka
10.09.20
✎
15:05
|
(1) Условие((Контрагент в выбКонтрагент) ИЛИ (Контрагент = выбРодительКонтрагента))
|
|||
13
Mikeware
10.09.20
✎
15:09
|
(12) (Контрагент в выбКонтрагент) бессмысленно, тогда уж (Контрагент = выбКонтрагент) ;
ИЛИ (Контрагент = выбРодительКонтрагента)) - ога, или родитель.родитель или родитель.родитель.родитель или родитель.родитель.родитель.родитель :-) |
|||
14
hhhh
10.09.20
✎
15:09
|
(12) не прокатит. У него Контрагент - Группа.
|
|||
15
skafandr
10.09.20
✎
15:11
|
(1)
Как=то так думаю: РодительВыб=ВыбКонтрагент.Родитель; ...... Условие(Контрагент в РодительВыб); |
|||
16
CaIIIka
10.09.20
✎
15:14
|
(12) Я частный случай отобразил. Можно циклом по метаданным достроить запрос как надо.
(15) Если родитель пустой, то "Оператор языка запросов ''Условие (А в Б);'' говорит о том, что условие истинно, когда значение А является подмножеством значения Б. Следует особо отметить, что если значение Б пустое (объект не выбран), то условие является истинным, в отличие от оператора ''='' (равно)." |
|||
17
CaIIIka
10.09.20
✎
15:15
|
(+16) поэтому во второму случае у меня "="
|
|||
18
Mikeware
10.09.20
✎
15:17
|
какой-то фестиваль сегодня...
|
|||
19
skafandr
10.09.20
✎
15:24
|
(15)(16) ну извините, ИЛИ в (12) тогда неуместно,ибо в описанном случае выражение в первой скобке истинно и условие выполняется
(18) разминается народ перед пятницей :) |
|||
20
skafandr
10.09.20
✎
15:29
|
(17) сорри глаз замылился (19) вычеркиваю
|
|||
21
CaIIIka
10.09.20
✎
15:29
|
(19) Как оно истинно, если это реквизит и он заполнен (проверяется при формировании текста запроса). А родителя может не быть. Если иерархия больше 2, то в цикле по метаданным можно проверить и оставить "в". Но толку от "в" во втором случае мало, там конкретное с родителем. А в первом случае может оказаться, что в документе элемент, а фильтр - группа.
|
|||
22
CaIIIka
10.09.20
✎
15:30
|
* конкретное сравнение с родителем
|
|||
23
Ёпрст
10.09.20
✎
15:34
|
(0) пиши прямой запрос и там что угодно,
если в чорном. то своя внешняя функция в запросе могёт ЭТО. Но.. не быстро |
|||
24
Makar47
10.09.20
✎
16:16
|
Вот так работает:
|
|||
25
Makar47
10.09.20
✎
16:17
|
Вот так работает:
|Условие(выбКонтрагент.ПринадлежитГруппе(Контрагент) = 1); |
|||
26
kubik_live
10.09.20
✎
16:20
|
Условие((Контрагент в выбКонтрагент)
Странно... У меня всегда прокатывало - выбКонтрагент (СписокЗначений) там и группы и элементы |
|||
27
Bigbro
11.09.20
✎
04:17
|
пишите в таком случае
Если выбКонтрагент.ЭтоГруппа()=1 Тогда ТекстЗапроса = ТекстЗапроса+" Условие(Контрагент в ВыбКонтрагент);" Иначе ТекстЗапроса = ТекстЗапроса+" Условие(Контрагент=ВыбКонтрагент);" КонецЕсли; и все. |
|||
28
Bigbro
11.09.20
✎
04:21
|
упс, неправильно прочитал задачу
|
|||
29
Mikeware
11.09.20
✎
08:26
|
(25) Если в документе не группа а элемент - работает? (вроде должно, но проверь)
Ну и скорость меньше, чем по вхождению в СЗ |
|||
30
Makar47
20.09.20
✎
22:37
|
(29) Да, все работает.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |