Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 7.7 и ранее

v7: "Условие В" в запросе

v7: "Условие В" в запросе
Я
   Makar47
 
10.09.20 - 14:26
Всем привет!
   Makar47
 
1 - 10.09.20 - 14:31
(0)
ТекстЗапроса = 
    |Период с ВыбНачПериода по ВыбКонПериода;
    |Контрагент = Документ.Дисконт.Контрагент;
    |Номенклатура = Документ.Дисконт.Номенклатура;
    |Бонус = Документ.Дисконт.Бонус;
    |Функция Минимум = Минимум(Бонус);
    |Группировка Номенклатура без групп;
    |Условие(выбКонтрагент в Контрагент);

Такое условие нельзя, что ли, делать? У меня в Документ.Дисконт.Контрагент могут указываться группы. Хочу выбрать те документы, которые либо с конкретным контрагентом, либо с группой куда выбранный контрагент входит.
   Mikeware
 
2 - 10.09.20 - 14:32
нет.
   Lazy Stranger
 
3 - 10.09.20 - 14:39
можно собрать предварительно всех родителей выбКонтрагента в список
и в запросе написать Контрагент в сзКонтрагенты
   Базис
 
4 - 10.09.20 - 14:42
Типовая конфа есть? Глянь отчёты в ТиС, вроде там ТекстЗапроса строится по условию.
   CaIIIka
 
5 - 10.09.20 - 14:42
Условие(Контрагент в выбКонтрагент)
   Kigo_Kigo
 
6 - 10.09.20 - 14:43
А никого не смутило |Условие(выбКонтрагент в Контрагент);
а по идее должно быть
|Условие(Контрагент в выбКонтрагент);
   Kigo_Kigo
 
7 - 10.09.20 - 14:44
А вон уже Сашка поправил
   Makar47
 
8 - 10.09.20 - 14:48
(6) (5) Это не ошибка. Это не соответствует условию задачи. Поэтому и спросил.
   Mikeware
 
9 - 10.09.20 - 14:54
(6) не, он наоборот хочет.
   Mikeware
 
10 - 10.09.20 - 14:56
(8) у тебя Контрагент - либо сам ВыбКонтрагент, либо группа. Ну и сформируй СЗ и ищи по вхождению
   Mikeware
 
11 - 10.09.20 - 14:56
+(10)  в смысле, сз - конечого размера (не больше глубины справочника), явно определенного перед запросом...
   CaIIIka
 
12 - 10.09.20 - 15:05
(1) Условие((Контрагент в выбКонтрагент) ИЛИ (Контрагент = выбРодительКонтрагента))
   Mikeware
 
13 - 10.09.20 - 15:09
(12) (Контрагент в выбКонтрагент) бессмысленно, тогда уж (Контрагент = выбКонтрагент) ;

ИЛИ (Контрагент = выбРодительКонтрагента)) - ога,
или родитель.родитель или родитель.родитель.родитель или родитель.родитель.родитель.родитель :-)
   hhhh
 
14 - 10.09.20 - 15:09
(12) не прокатит. У него Контрагент - Группа.
   skafandr
 
15 - 10.09.20 - 15:11
(1)
Как=то так думаю:

 РодительВыб=ВыбКонтрагент.Родитель;

......

Условие(Контрагент в РодительВыб);
   CaIIIka
 
16 - 10.09.20 - 15:14
(12) Я частный случай отобразил. Можно циклом по метаданным достроить запрос как надо.

(15) Если родитель пустой, то
"Оператор языка запросов ''Условие (А в Б);'' говорит о том, что условие истинно, когда значение А является подмножеством значения Б. Следует особо отметить, что если значение Б пустое (объект не выбран), то условие является истинным, в отличие от оператора ''='' (равно)."
   CaIIIka
 
17 - 10.09.20 - 15:15
(+16) поэтому во второму случае у меня "="
   Mikeware
 
18 - 10.09.20 - 15:17
какой-то фестиваль сегодня...
   skafandr
 
19 - 10.09.20 - 15:24
(15)(16) ну извините, ИЛИ в (12) тогда неуместно,ибо в описанном случае выражение в первой скобке истинно и условие выполняется
(18) разминается народ перед пятницей :)
   skafandr
 
20 - 10.09.20 - 15:29
(17) сорри глаз замылился (19) вычеркиваю
   CaIIIka
 
21 - 10.09.20 - 15:29
(19) Как оно истинно, если это реквизит и он заполнен (проверяется при формировании текста запроса). А родителя может не быть. Если иерархия больше 2, то в цикле по метаданным можно проверить и оставить "в". Но толку от "в" во втором случае мало, там конкретное с родителем. А в первом случае может оказаться, что в документе элемент, а фильтр - группа.
   CaIIIka
 
22 - 10.09.20 - 15:30
* конкретное сравнение с родителем
   Ёпрст
 
23 - 10.09.20 - 15:34
(0) пиши прямой запрос и там что угодно,
если в чорном. то своя внешняя функция в запросе могёт ЭТО. Но.. не быстро
   Makar47
 
24 - 10.09.20 - 16:16
Вот так работает:
   Makar47
 
25 - 10.09.20 - 16:17
Вот так работает:
|Условие(выбКонтрагент.ПринадлежитГруппе(Контрагент) = 1);
   kubik_live
 
26 - 10.09.20 - 16:20
Условие((Контрагент в выбКонтрагент)

Странно...
У меня всегда прокатывало - выбКонтрагент (СписокЗначений) там и группы и элементы
   Bigbro
 
27 - 11.09.20 - 04:17
пишите в таком случае
Если выбКонтрагент.ЭтоГруппа()=1 Тогда
  ТекстЗапроса = ТекстЗапроса+"
  Условие(Контрагент в ВыбКонтрагент);"
Иначе
  ТекстЗапроса = ТекстЗапроса+"
  Условие(Контрагент=ВыбКонтрагент);"
КонецЕсли;

и все.
   Bigbro
 
28 - 11.09.20 - 04:21
упс, неправильно прочитал задачу
   Mikeware
 
29 - 11.09.20 - 08:26
(25) Если в документе не группа а элемент - работает?  (вроде должно, но проверь)
Ну и скорость меньше, чем по вхождению в СЗ
   Makar47
 
30 - 20.09.20 - 22:37
(29) Да, все работает.
 
 Рекламное место пустует


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.