Имя: Пароль:
1C
1С v8
Почему не работает запрос?
0 atis30
 
01.11.13
17:49
Запрос в динамическом списке.

В таком варианте данные есть :

ВЫБРАТЬ
    ЗаказПокупателя.Ссылка,
    ЗаказПокупателя.Номер,
    ЗаказПокупателя.Дата
ИЗ
    Документ.ЗаказПокупателя КАК ЗаказПокупателя
ГДЕ
    ЗаказПокупателя.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания

А в таком пусто :

ВЫБРАТЬ
    ЗаказПокупателя.Ссылка,
    ЗаказПокупателя.Номер,
    ЗаказПокупателя.Дата,
    ОтгрузкаЗаказы.Ссылка КАК Отгрузка
ИЗ
    Документ.ЗаказПокупателя КАК ЗаказПокупателя
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.Отгрузка.Заказы КАК ОтгрузкаЗаказы
        ПО (ЗаказПокупателя.Ссылка = ОтгрузкаЗаказы.Заказ) И (ОтгрузкаЗаказы.Ссылка.ПометкаУдаления = ЛОЖЬ)
ГДЕ
    ЗаказПокупателя.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания

Хотя по идее отличаются одной колонкой. В чем причина?
1 Beduin
 
01.11.13
17:55
(0) У тебя сначала соединение отработало, а потом отбор по этому соединению.
2 atis30
 
01.11.13
17:58
ВЫБРАТЬ
    ЗаказПокупателя.Ссылка,
    ЗаказПокупателя.Номер,
    ЗаказПокупателя.Дата,
    ОтгрузкаЗаказы.Ссылка КАК Отгрузка
ИЗ
    Документ.ЗаказПокупателя КАК ЗаказПокупателя
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.Отгрузка.Заказы КАК ОтгрузкаЗаказы
        ПО (ЗаказПокупателя.Ссылка = ОтгрузкаЗаказы.Заказ) И (ОтгрузкаЗаказы.Ссылка.ПометкаУдаления = ЛОЖЬ) И
    (ЗаказПокупателя.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания)

Ничего не меняет
3 Basilio
 
01.11.13
18:01
проверь в консоли
4 vvp91
 
01.11.13
18:01
>> (1) В чем причина?
Потому что (ОтгрузкаЗаказы.Ссылка.ПометкаУдаления = ЛОЖЬ) - это внутреннее соединение с ведущей таблицей.
После этого заказов, на которые нет ссылок в отгрузке, не будет в результате запросов.

Разыменование в запросе (через две точки) - это плохо, поскольку неявно, неуправляемо и неизвестно как будет отработано платформой.
Надо писать явно:

ВЫБРАТЬ
    Заказы.Ссылка,
    Заказы.Номер,
    Заказы.Дата,
    Отгрузки.Ссылка КАК Отгрузка
ИЗ
    Документ.РеализацияТоваровУслуг КАК Отгрузки
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг.Товары КАК СтрокиОтгрузок
        ПО СтрокиОтгрузок.Ссылка = Отгрузки.Ссылка
        И НЕ Отгрузки.ПометкаУдаления
    ПРАВОЕ СОЕДИНЕНИЕ Документ.ЗаказКлиента КАК Заказы
        ПО СтрокиОтгрузок.ЗаказКлиента = Заказы.Ссылка
ГДЕ
    Заказы.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
5 vvp91
 
01.11.13
18:02
>> (1) У тебя сначала соединение отработало, а потом отбор по этому соединению.
Это неверно.

Сообщение (4) - ответ на (0).
6 Beduin
 
01.11.13
18:04
(5) Да, точно! Наложение условий на таблицу которая получается. В запросах последовательности нет.
7 atis30
 
01.11.13
18:11
Да, вобщем-то так тоже не работает

ВЫБРАТЬ
    ЗаказПокупателя.Ссылка,
    ЗаказПокупателя.Номер,
    ЗаказПокупателя.Дата,
    ОтгрузкаЗаказы.Ссылка КАК Отгрузка
ИЗ
    Документ.ЗаказПокупателя КАК ЗаказПокупателя
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.Отгрузка.Заказы КАК ОтгрузкаЗаказы
        ПО (ЗаказПокупателя.Ссылка = ОтгрузкаЗаказы.Заказ)
ГДЕ
    ЗаказПокупателя.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
8 Мимохожий Однако
 
01.11.13
18:31
Вероятно, текст запроса не полный. Что является источником для второй таблицы?
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший