Имя: Пароль:
1C
1C 7.7
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) Да, все работает.
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс