Имя: Пароль:
1C
1С v8
Дополнительные сведения в динамическом списке документов
0 Mikhail Volkov
 
20.06.17
10:44
Понадобилось в УТ11 в списке заказов клиентов выводить одно из дополнительных сведений. Обычно ими не пользуются, они в основном заполняются на сайте. Список динамический формируется запросом. В него вставил:

ИЗ
    Документ.ЗаказКлиента КАК ДокументЗаказКлиента
:
:
        ПОЛНОЕ СОЕДИНЕНИЕ РегистрСведений.ДополнительныеСведения КАК ДополнительныеСведения
        ПО ДокументЗаказКлиента.Ссылка = ДополнительныеСведения.Объект
:
:
ГДЕ
    ДополнительныеСведения.Свойство.Наименование = "Заказ оплачен"

и оказалось, что некоторые заказы, которые не сайта пришли, не отображаются в списке!?
Убрал свои доработки - стали отображаться. Открываю их Дополнительные сведения - не заполнены, но есть же. Почему они перестают отображаться в моем списке? Как сделать, чтобы все отображались?
1 Zyka
 
20.06.17
10:49
Вместо полного соединения + условия "ГДЕ" в запросе, используйте левое соединения + условие в связях.
2 sFAQer
 
20.06.17
10:49
(0) Потому что их нет, то что они на форме есть, не значит они на самом деле есть..
3 Mikhail Volkov
 
20.06.17
10:54
(1) ЛЕВОЕ СОЕДИНЕНИЕ - было (после заменил на ПОЛНОЕ - не помогло). А условие в связях - это как?
4 sFAQer
 
20.06.17
10:54
(3) ПО ДополнительныеСведения.Свойство.Наименование = "Заказ оплачен"
5 lodger
 
20.06.17
10:56
(3) "ЛЕВОЕ СОЕДИНЕНИЕ - было (после заменил на ПОЛНОЕ - не помогло)"
вы вообще понимаете различие между видами соединений?
6 polosov
 
20.06.17
10:56
(0) Используй левое соединений, ЕстьNULL, а свойство передавай параметром.

ДополнительныеСведения.Свойство.Наименование = "Заказ оплачен" - это тормоз.
7 sFAQer
 
20.06.17
10:57
(5) Очевидно что нет, чё ты глупые вопросы задаёшь?
8 Zyka
 
20.06.17
10:57
Ты ставишь условие своё " ДополнительныеСведения.Свойство.Наименование = "Заказ оплачен"" в запросе. В этом случае тебе отбираются только записи удовлетворяющие этому условию.
Согласно твоей задаче, тебе необходимо убрать условие из "ГДЕ" и сделать:
  ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДополнительныеСведения КАК ДополнительныеСведения
        ПО (ДокументЗаказКлиента.Ссылка = ДополнительныеСведения.Объект
И ДополнительныеСведения.Свойство.Наименование = "Заказ оплачен") или через ЕСТЬNULL
9 Timon1405
 
20.06.17
10:57
ЛЕВОЕ СОЕДИНЕНИЕ ПО ДокументЗаказКлиента.Ссылка = ДополнительныеСведения.Объект И ДополнительныеСведения.Свойство.Наименование = "Заказ оплачен"
(0) наложение где на поля левой таблицы превратило ваше ЛЕВОЕ соединение во ВНУТРЕННЕЕ
10 polosov
 
20.06.17
11:03
(9) Да. Для избежания ему надо два условия делать в левом соединении
11 Mikhail Volkov
 
20.06.17
11:16
(8),(9) Спс, вроде заработало так:
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДополнительныеСведения КАК ДополнительныеСведения
        ПО (ДокументЗаказКлиента.Ссылка = ДополнительныеСведения.Объект
                И ДополнительныеСведения.Свойство.Наименование = "Заказ оплачен")

А если еще одно свойство понадобится, то еще по ИЛИ добавлять: ДополнительныеСведения.Свойство.Наименование = "еще свойство"?
12 h-sp
 
20.06.17
11:19
(11) нет, второе левое соединение.
13 Zyka
 
20.06.17
11:26
(11)
Если сделать так:
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДополнительныеСведения КАК ДополнительныеСведения
ПО (ДокументЗаказКлиента.Ссылка = ДополнительныеСведения.Объект
И (ДополнительныеСведения.Свойство.Наименование = "Заказ оплачен" ИЛИ ДополнительныеСведения.Свойство.Наименование = "Заказ просран"))

То у вас скорей всего будут дубли ключевого поля "Ссылка" и дин. список сломается, поэтому необходимо будет городить ещё одну связь и тянуть поле из новой таблицы:
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДополнительныеСведения КАК ДополнительныеСведения_Просраны
ПО (ДокументЗаказКлиента.Ссылка = ДополнительныеСведения_Просраны.Объект
И ДополнительныеСведения_Просраны.Свойство.Наименование = "Заказ просран")