Имя: Пароль:
1C
1С v8
Как сделать отбор регистратора в запросе по нескольким видам документов?
,
0 Prog111
 
29.12.15
06:16
Гуглю - везде разъясняется отбор по одному виду регистратора, а мне нужно по нескольким видам документов сделать. Вот отрывок из запроса:

|    ЕСТЬNULL(РасчетыСКонтрагентамиОбороты.СуммаВзаиморасчетовПриход, 0) КАК СуммаВзаиморасчетовПриход,
    |    ЕСТЬNULL(РасчетыСКонтрагентамиОбороты.СуммаВзаиморасчетовРасход, 0) КАК СуммаВзаиморасчетовРасход,
    |    ЕСТЬNULL(РасчетыСКонтрагентамиОборотыДо.СуммаВзаиморасчетовПриход, 0) КАК СуммаВзаиморасчетовПриходДо,
    |    ЕСТЬNULL(РасчетыСКонтрагентамиОборотыДо.СуммаВзаиморасчетовРасход, 0) КАК СуммаВзаиморасчетовРасходДо
    |ИЗ
    |    Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
    |    ПОЛНОЕ СОЕДИНЕНИЕ РегистрНакопления.РасчетыСКонтрагентами.Обороты(&НачПериода, &КонПериода, Регистратор) КАК РасчетыСКонтрагентамиОбороты
    |        ПО ДоговорыКонтрагентов.Ссылка = РасчетыСКонтрагентамиОбороты.ДоговорКонтрагента
    |    ПОЛНОЕ СОЕДИНЕНИЕ РегистрНакопления.РасчетыСКонтрагентами.Обороты(&НачПериодаДо, &КонПериодаДо, Регистратор) КАК РасчетыСКонтрагентамиОборотыДо
    |        ПО ДоговорыКонтрагентов.Ссылка = РасчетыСКонтрагентамиОборотыДо.ДоговорКонтрагента
    |ГДЕ
    |    ДоговорыКонтрагентов.ВидДоговора = &ВидДоговора
    |    И ДоговорыКонтрагентов.ЭтоГруппа = ЛОЖЬ
    |   И (РасчетыСКонтрагентамиОбороты.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг
    |        ИЛИ РасчетыСКонтрагентамиОбороты.Регистратор ССЫЛКА Документ.ПлатежноеПоручениеВходящее
    |        ИЛИ РасчетыСКонтрагентамиОбороты.Регистратор ССЫЛКА Документ.ПлатежноеПоручениеИсходящее)
    |   И (РасчетыСКонтрагентамиОборотыДо.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг
    |        ИЛИ РасчетыСКонтрагентамиОборотыДо.Регистратор ССЫЛКА Документ.ПлатежноеПоручениеВходящее
    |        ИЛИ РасчетыСКонтрагентамиОборотыДо.Регистратор ССЫЛКА Документ.ПлатежноеПоручениеИсходящее)


Когда ставлю это условие - то запрос пустой...
1 los_hooliganos
 
29.12.15
06:19
(0) А если условие закомментить, то запрос будет работать?
2 SeraFim
 
29.12.15
06:21
Ошибка - полное условие и "И"
то есть у тебя получается:
РасчетыСКонтрагентамиОбороты.Регистратор = КакойТоДокумент, а РасчетыСКонтрагентамиОборотыДо.Регистратор = NULL
и наоборот
3 SeraFim
 
29.12.15
06:22
Перемести условие на тип документа в условие соединения
4 Prog111
 
29.12.15
06:23
(1) Да, работает.
5 Рэйв
 
29.12.15
06:24
Слишком много "И" Гдето спотыкается походу
6 Prog111
 
29.12.15
06:24
(3) Это как?
7 Prog111
 
29.12.15
06:25
После добавления этого условия запрос становится пустым:

|   И (РасчетыСКонтрагентамиОбороты.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг
    |        ИЛИ РасчетыСКонтрагентамиОбороты.Регистратор ССЫЛКА Документ.ПлатежноеПоручениеВходящее
    |        ИЛИ РасчетыСКонтрагентамиОбороты.Регистратор ССЫЛКА Документ.ПлатежноеПоручениеИсходящее)
    |   И (РасчетыСКонтрагентамиОборотыДо.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг
    |        ИЛИ РасчетыСКонтрагентамиОборотыДо.Регистратор ССЫЛКА Документ.ПлатежноеПоручениеВходящее
    |        ИЛИ РасчетыСКонтрагентамиОборотыДо.Регистратор ССЫЛКА Документ.ПлатежноеПоручениеИсходящее)
8 Prog111
 
29.12.15
06:26
Если условие не ставить - то в выборку попадают движения по прочим документам, например, по документу "Заказ покупателей". Вот хочу отобрать только по определенным документам...
9 Рэйв
 
29.12.15
06:28
(8)Убери все И , оставь только ИЛИ.
Должно сработать
10 los_hooliganos
 
29.12.15
07:01
(7) Ставя условие в такой запрос, ты ПОЛНОЕ соединение превращаешь во внутреннее

Ставь условие в моменте СОЕДИНЕНИЕ, а не ГДЕ
11 ЧеловекДуши
 
29.12.15
08:59
(0)Добавить Поле "ТипЗначения()", посмотри, какие типы у тебя получаются. В консоли запросов.
А уже после играйся ссылками. :)
Хотя можно и с типами
12 ЧеловекДуши
 
29.12.15
08:59
+(11) Условие при этом убери
13 ЧеловекДуши
 
29.12.15
09:01
+ Сдается мне ,что у вас там нет какого то регистратора :)
14 Fedor-1971
 
29.12.15
09:06
(7) Вот так попробуй:
|   И ((РасчетыСКонтрагентамиОбороты.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг
    |        ИЛИ РасчетыСКонтрагентамиОбороты.Регистратор ССЫЛКА Документ.ПлатежноеПоручениеВходящее
    |        ИЛИ РасчетыСКонтрагентамиОбороты.Регистратор ССЫЛКА Документ.ПлатежноеПоручениеИсходящее)
    |   или (РасчетыСКонтрагентамиОборотыДо.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг
    |        ИЛИ РасчетыСКонтрагентамиОборотыДо.Регистратор ССЫЛКА Документ.ПлатежноеПоручениеВходящее
    |        ИЛИ РасчетыСКонтрагентамиОборотыДо.Регистратор ССЫЛКА Документ.ПлатежноеПоручениеИсходящее))

т.е. И ((регистратор1) или (Регистратор2)), только не понятно зачем ты проверяешь заполненность регистраторов?
15 Fedor-1971
 
29.12.15
09:08
14+ Двойные скобки просто для наглядности можно всё через ИЛИ проверить
16 elisabet
 
29.12.15
10:57
Через объединение двух запросов все работает. Отдельно "Приход" и объединяем "ПриходДо" и условие     |    И ДоговорыКонтрагентов.ЭтоГруппа = ЛОЖЬ - абсолютно лишнее, поскольку группа не имеет поля "Вид договора".
17 PR третий
 
29.12.15
10:58
(0) А что, ТИПЗНАЧЕНИЯ не работает что ли уже?
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.