Имя: Пароль:
1C
1С v8
не понимаю как написать запрос.
,
0 zippygrill
 
29.09.11
10:35
Хочу получать все ДоговорыКонтрагентов где свойство(ЗначениеСвойстОбъектов) = "Ответственный" а её значение НЕ заполнено. Значение свойство "Ответственный" ссылается на Справочники._ОтветственныеПоДоговорам, как-то так.

ВЫБРАТЬ
   ДоговорыКонтрагентов.Владелец,
   ДоговорыКонтрагентов.Ссылка,
   ДоговорыКонтрагентов.Код КАК Код,
   ЗначенияСвойствОбъектов.Свойство,
   ЗначенияСвойствОбъектов.Значение
ИЗ
   Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
       ПО ДоговорыКонтрагентов.Ссылка = ЗначенияСвойствОбъектов.Объект
ГДЕ
   ЗначенияСвойствОбъектов.Свойство = &Свойство
   

УПОРЯДОЧИТЬ ПО
   Код


Ответственный = ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию("Ответственный по договору");              
Запрос.УстановитьПараметр("Свойство", Ответственный);
1 zippygrill
 
29.09.11
10:41
уп
2 guitar_player
 
29.09.11
10:41
по ДоговорыКонтрагентов.Ссылка = ЗначенияСвойствОбъектов.Объект

и ЗначенияСвойствОбъектов.Значение = Значение(Справочник._ОтветственныеПоДоговорам.ПустаяСсылка)
3 Ненавижу 1С
 
гуру
29.09.11
10:42
ВНУТРЕНЕЕ СОЕДИНЕНИЕ
4 guitar_player
 
29.09.11
10:46
(3) +1. Я смотрю это не первый раз за седня - нужно картинку делать типа Будь мужиком, используй ВНУТРЕНЕЕ СОЕДИНЕНИЕ ....
5 SeraFim
 
29.09.11
10:50
хз, как в других конфах, в ЗИКБУ регистр сведений "ЗначенияСвойствОбъектов" работает так:
если значение заполнено, то появляется запись со значением свойства
если не заполнена - то такой записи вообще нет.

Соответственно, ВНУТРЕННЕЕ СОЕДИНЕНИЕ сделает с точностью наоборот - вернет те, где заполнено. а ТС просит, где НЕ заполнено.

Я бы ЛЕВОЕ соединение сделал + ГДЕ ЗначенияСвойствОбъектов.Свойство ЕСТЬ NULL
6 zippygrill
 
29.09.11
10:51
ВЫБРАТЬ
   ДоговорыКонтрагентов.Владелец,
   ДоговорыКонтрагентов.Ссылка,
   ДоговорыКонтрагентов.Код КАК Код,
   ЗначенияСвойствОбъектов.Свойство,
   ЗначенияСвойствОбъектов.Значение
ИЗ
   Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
       ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
       ПО ДоговорыКонтрагентов.Ссылка = ЗначенияСвойствОбъектов.Объект
ГДЕ
   ЗначенияСвойствОбъектов.Свойство = &Свойство
   И ЗначенияСвойствОбъектов.Значение = ЗНАЧЕНИЕ(Справочник._ОтветственныеПоДоговорам.ПустаяСсылка)

УПОРЯДОЧИТЬ ПО
   Код

Результат пустой. это новое совйство добавил сегодня и по идее у всех договоров она не заполнено. Все договора должны появится((
7 zippygrill
 
29.09.11
10:55
Итак еще раз ТС: мне нужны все договора где у свойство "Ответственный" значение не заполнено. Значение выбирается из Справочник._ОтветственныеПоДоговорам
8 SeraFim
 
29.09.11
10:55
+(5)только еще отсеить нужно от записей с другими свойствами
9 Mort
 
29.09.11
10:56
"Пустой" довольно широкое значение для 1С, в данном случае в регистре может не быть соответствующей записи, либо есть и содержит неопределено, либо пустую ссылку одного из очень широкого набора типов, так что тут надо подумать (очко в копилку Ненавижу 1С.
10 zippygrill
 
29.09.11
10:59
(9)ну ... в этом случае ПустаяСсылка() или Неопределено :)
11 SeraFim
 
29.09.11
11:01
мой вариант:
ВЫБРАТЬ
   ДоговорыКонтрагентов.Владелец,
   ДоговорыКонтрагентов.Ссылка,
   ДоговорыКонтрагентов.Код КАК Код,
   ЗначенияСвойствОбъектов.Свойство,
   ЗначенияСвойствОбъектов.Значение
ИЗ
   Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
       ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ * ИЗ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
   ГДЕ
       ЗначенияСвойствОбъектов.Свойство = &Свойство) КАК ЗначенияСвойствОбъектов
       ПО ДоговорыКонтрагентов.Ссылка = ЗначенияСвойствОбъектов.Объект
   ГДЕ
       ЗначенияСвойствОбъектов.Значение ЕСТЬ NULL

УПОРЯДОЧИТЬ ПО
   Код
12 zippygrill
 
29.09.11
11:07
(11) вот твой пример да выдал все договора со значением NULL. думаю всегда надо проверить на значение NULL а не на ПустуюСсылку. А вот толко Свойство не видна какая.
13 Mort
 
29.09.11
11:13
Чтобы исключить пустые ссылки можно написать:

ЗначенияСвойствОбъектов.Значение.Ссылка ЕСТЬ NULL
14 Mort
 
29.09.11
11:14
+(13) Но это лишнее соединение и отрезает примитивные типы, если они могут быть в составе значения свойства.
15 zippygrill
 
29.09.11
11:21
(11)также значение свойство = NULL что за фигня?
16 SeraFim
 
29.09.11
12:11
(12) внимательно читай (5)
Если значение свойства НЕ ЗАПОЛНЕНО, то ЗАПИСИ в РегистреСведений НЕТ.
А ПустаяСсылка - это когда Запись ЕСТЬ, но значение свойства не указано.
17 zippygrill
 
29.09.11
18:18
ок.
18 Tapo4ek
 
29.09.11
19:13
Ответ проще:

ВЫБРАТЬ
   ДоговорыКонтрагентов.Владелец,
   ДоговорыКонтрагентов.Ссылка,
   ДоговорыКонтрагентов.Код КАК Код,
   ЗначенияСвойствОбъектов.Свойство,
   ЗначенияСвойствОбъектов.Значение
ИЗ
   Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
       ПО ДоговорыКонтрагентов.Ссылка = ЗначенияСвойствОбъектов.Объект
       И ЗначенияСвойствОбъектов.Свойство = &Свойство
ГДЕ
   ЗначенияСвойствОбъектов.Значение ЕСТЬ NULL
   

УПОРЯДОЧИТЬ ПО
   Код
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан