Имя: Пароль:
1C
1С v8
Запрос. Полное соединение. Не берет все нужные документы.
0 ЗлаяЗая
 
17.06.19
08:53
Запрос=Новый Запрос;
Запрос.Текст="ВЫБРАТЬ
             |    Док1.Сотрудник,
             |    Док1.Ссылка.Подразделение,
             |    Док1.Ссылка.Смена,
             |    Док1.Тариф,
             |    Док1.ВремяПлан,
             |    Док1.ПланФОТ,
             |    Док2.ВремяФакт,
             |    Док2.ФактФОТ
             |ИЗ
             |    Документ.Док1 КАК Док1
             |        ПОЛНОЕ СОЕДИНЕНИЕ Документ.Док2 КАК Док2
             |        ПО Док1.Смена = Док2.Смена
             |            И Док1.Сотрудник = Док2.Сотрудник
             |ГДЕ
             |    Док1.Проведен = ИСТИНА
             |    И Док1.Дата МЕЖДУ &Дата1 И &Дата2
             |    И Док1.Подразделение = &Подразделение
             |    И Док2.Проведен = ИСТИНА
             |    И Док2.Дата МЕЖДУ &Дата1 И &Дата2
             |    И Док2.Подразделение = &Подразделение";
Если нет документа Док2, то данные Док1 тоже не попадают в результат.
1 garantNo4x
 
17.06.19
08:57
Ну зато условие выполняется
2 ЗлаяЗая
 
17.06.19
08:59
а как сделать?
делать 2 запроса и объединять?
3 тарам пам пам
 
17.06.19
09:02
Условие из "где" перенеси в "по" - потому что "где" выполняется условно говоря после соединения. Т. е.

ПО Док1.Смена = Док2.Смена
И Док1.Сотрудник = Док2.Сотрудник
И Док1.Проведен = ИСТИНА

и так далее
4 PuhUfa
 
17.06.19
09:02
(2) Исправить условия
5 ЗлаяЗая
 
17.06.19
09:17
|    Документ.Док1 КАК Док1
             |        ПОЛНОЕ СОЕДИНЕНИЕ Документ.Док2 КАК Док2
             |        ПО Док1.Смена = Док2.Смена
             |            И Док1.Сотрудник = Док2.Сотрудник
             |            И Док1.Подразделение = Док2.Подразделение
             |            И (Док2.Проведен = ИСТИНА)
             |            И (Док1.Проведен = ИСТИНА)
             |            И (Док2.Дата МЕЖДУ &Дата1 И &Дата2)
             |            И (Док1.Дата МЕЖДУ &Дата1 И &Дата2)
             |            И (Док2.Подразделение = &Подразделение)
             |            И (Док1.Подразделение = &Подразделение)";
6 ЗлаяЗая
 
17.06.19
09:17
не помогло
7 Широкий
 
17.06.19
09:57
|    Док1.Проведен = ИСТИНА
             |    И Док1.Дата МЕЖДУ &Дата1 И &Дата2
             |    И Док1.Подразделение = &Подразделение
             |    И Док2.Проведен = ИСТИНА
             |    И Док2.Дата МЕЖДУ &Дата1 И &Дата2
             |    И Док2.Подразделение = &Подразделение";

Ты этим условием во внутреннее соединение превращаешь
8 unf13
 
17.06.19
10:26
на вскидку:

"ГДЕ

ВЫБОР КОГДА Док1.Проведен ЕСТЬ NULL  ТОГДА ИСТИНА ИНАЧЕ Док1.Проведен КОНЕЦ

И ВЫБОР КОГДА Док2.Проведен ЕСТЬ NULL  ТОГДА ИСТИНА ИНАЧЕ Док2.Проведен КОНЕЦ

И ..."
9 Simod
 
17.06.19
10:39
(0) Использование "И" для всех условий в секции "ГДЕ" делает обязательным наличие обоих документов (Док1, Док2), т.е. ПОЛНОЕ СОЕДИНЕНИЕ превращается во ВНУТРЕННЕЕ.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший