Имя: Пароль:
1C
1C 7.7
v7: Как правильно сделать условие в запросе (1с77)
0 BalBess
 
02.06.15
07:30
Подскажите, уважаемые.. что-то подзабыл
Как мне правильно сделать запрос или условие в запросе
Задача следующая, есть документ, есть 2 поля контрагентов
Нужно в выборке отобрать документы, чтобы или 1 поле принадлежало определенной группе, либо 2. Т.е.

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

Вот тут вопрос, как сделать правильное условие?
Делал так
    ТекстЗапроса = ТекстЗапроса +
    "Условие (Клиент.ПринадлежитГруппе(ВыбКлиент) = 1);";

В выборку не попадают доки у которых 2 поле принадлежит группе ВыбКлиент
Второе поле Клиент2, не всегда заполнено
т.е. нужно либо (Клиент.ПринадлежитГруппе(ВыбКлиент) = 1) либо (если не пустое Клиент2) Клиент2.ПринадлежитГруппе(ВыбКлиент) = 1
Напомню речь про 1с77
1 Провинциальный 1сник
 
02.06.15
07:33
Правильно - забыть про эти кривые штатные недозапросы и использовать прямые запросы 1c++.
2 Толич
 
02.06.15
07:34
Если ПустоеЗначение(Клиент2)=0 Тогда
ТекстЗапроса = ТекстЗапроса +
    "Условие ((Клиент.ПринадлежитГруппе(ВыбКлиент) = 1) или (Клиент2.ПринадлежитГруппе(ВыбКлиент) = 1));";
Иначе
ТекстЗапроса = ТекстЗапроса +
    "Условие (Клиент.ПринадлежитГруппе(ВыбКлиент) = 1);";
КонецЕсли;
3 BalBess
 
02.06.15
07:38
(2) как я узнаю что Клиент2 не пустое, это поле в документе
т.е. как это условие вставить в запрос
во вторых поле Клиент2 может быть пустым и условие  (Клиент2.ПринадлежитГруппе(ВыбКлиент) = 1) выдает ошибку
4 titan_aleks
 
02.06.15
07:40
1. В запросе свою функцию вставь = и уже в функции проверяй
5 ЧеловекДуши
 
02.06.15
07:41
(0) Состряпай функцию, "МойКонтрагент(Контрагент1,Контрагент2) = 1", и внутри функции делай любые манипуляции.

..Если будет волновать скорость, то "Черные" запросы от 1С тащат практически всю таблицу к тебе на ПК и уже там начинают над ней колдовать...

Хочешь скорости, то пиши на прямых запросах. 1С++ тебе в помощь :)
6 titan_aleks
 
02.06.15
07:42
2
|Клиент = Документ.РасходнаяРеализации.Клиент;
|Клиент1 = Документ.РасходнаяРеализации.Клиент2;
|Условие ((Клиент.ПринадлежитГруппе(ВыбКлиент) = 1) или (Клиент1.ПринадлежитГруппе(ВыбКлиент) = 1))
7 BalBess
 
02.06.15
07:44
(6) я так делал, дело в том что поле клиент1 не всегда заполнено, и на (Клиент1.ПринадлежитГруппе(ВыбКлиент) = 1) выдает ошибку. И не понятно как потом делать группировки
8 BalBess
 
02.06.15
07:46
а можно подробнее на счет функций, чет подзабыл все
9 titan_aleks
 
02.06.15
07:47
|Условие (МояФункция(Контрагент,Контрагент1) = 1)
10 BalBess
 
02.06.15
07:50
(9) спасибо, попробую, отпишусь
11 welwel
 
02.06.15
07:55
Условие (Клиент в ВыбКлиент)
не проще ли?
12 BalBess
 
02.06.15
08:07
(11) в таком случае почему-то не попадают доки в которых Клиент2 принадлежит группе ВыбКлиент
13 AntiBuh
 
02.06.15
08:26
(12) ну дык воткни ИЛИ
14 BalBess
 
02.06.15
08:36
(13) блин, точно. Заработала такая конструкция
    ТекстЗапроса =
    "//{{ЗАПРОС(Сформировать)
    |Период с ВыбНачПериода по ВыбКонПериода;
    |Докум = Документ.РасходнаяРеализации.ТекущийДокумент;
    |Клиент = Документ.РасходнаяРеализации.Клиент;
    |Клиент2 = Документ.РасходнаяРеализации.Клиент2;
    |Группировка Клиент упорядочить по Клиент.Наименование;
    |Группировка Докум;
    |"//}}ЗАПРОС
    ;

    ТекстЗапроса = ТекстЗапроса +
    "Условие ((Клиент в ВыбКлиент) ИЛИ (Клиент2 в ВыбКлиент));";
15 BalBess
 
02.06.15
08:37
а я уже и через функцию сделал, тоже заработало (даже и не знал, что так можно)

всем спасибо большое!
16 vip03
 
02.06.15
12:54
а так не проще?

ТекстЗапроса =
    "//{{ЗАПРОС(Сформировать)

    |Период с ВыбНачПериода по ВыбКонПериода;
    |Докум = Документ.РасходнаяРеализации.ТекущийДокумент;
    |Клиент = Документ.РасходнаяРеализации.Клиент,Документ.РасходнаяРеализации.Клиент2;
    |Группировка Клиент упорядочить по Клиент.Наименование;
    |Группировка Докум;
    |"//}}ЗАПРОС

    ;

    ТекстЗапроса = ТекстЗапроса +
    "Условие (Клиент в ВыбКлиент);";
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.