Имя: Пароль:
1C
1С v8
Запрос. Оператор В. Временная таблица
0 akocur
 
16.02.18
20:06
Доброго времени суток!
Почему следующий запрос ничего не возвращает?
"ВЫБРАТЬ
                   |    Сотрудники.ФизическоеЛицо КАК ФизическоеЛицо
                   |ПОМЕСТИТЬ ФизЛица
                   |ИЗ
                   |    Справочник.Сотрудники КАК Сотрудники
                   |ГДЕ
                   |    Сотрудники.Ссылка В(&МассивОбъектов)
                   |
                   |ИНДЕКСИРОВАТЬ ПО
                   |    ФизическоеЛицо
                   |;
                   |
                   |////////////////////////////////////////////////////////////////////////////////
                   |ВЫБРАТЬ
                   |    ЛицевыеСчетаСотрудниковПоЗарплатнымПроектамСрезПоследних.ФизическоеЛицо.ФИО КАК ФИОРаботника,
                   |    ЛицевыеСчетаСотрудниковПоЗарплатнымПроектамСрезПоследних.ЗарплатныйПроект.Банк.Наименование КАК НаименованиеБанка,
                   |    ЛицевыеСчетаСотрудниковПоЗарплатнымПроектамСрезПоследних.НомерЛицевогоСчета КАК НомерЛицевогоСчета,
                   |    ЛицевыеСчетаСотрудниковПоЗарплатнымПроектамСрезПоследних.Период КАК ДатаОткрытияСчета,
                   |    ЕСТЬNULL(СклоненияПредставленийОбъектов.РодительныйПадеж, """") КАК НаименованиеСотрудникаВРодПадеже,
                   |    ВЫБОР
                   |        КОГДА ЛицевыеСчетаСотрудниковПоЗарплатнымПроектамСрезПоследних.ФизическоеЛицо.Пол = ЗНАЧЕНИЕ(Перечисление.ПолФизическогоЛица.Мужской)
                   |            ТОГДА 1
                   |        ИНАЧЕ 2
                   |    КОНЕЦ КАК Пол
                   |ИЗ
                   |    РегистрСведений.ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам.СрезПоследних(
                   |            ,
                   |            ФизическоеЛицо В (""ВЫБРАТЬ
                   |                                  ФизЛица.ФизическоеЛицо КАК ФизическоеЛицо
                   |                              ИЗ
                   |                                  ФизЛица КАК ФизЛица"")) КАК ЛицевыеСчетаСотрудниковПоЗарплатнымПроектамСрезПоследних
                   |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СклоненияПредставленийОбъектов КАК СклоненияПредставленийОбъектов
                   |        ПО ЛицевыеСчетаСотрудниковПоЗарплатнымПроектамСрезПоследних.ФизическоеЛицо = СклоненияПредставленийОбъектов.Объект";
    Запрос.УстановитьПараметр("МассивОбъектов", МассивОбъектов);

Запрос создаю в типовой ЗУП редакция 3.1. Платформа 8.3.10.2580. Создаю временную таблицу, так как тип переменной МассивОбъектов массив из элементов типа СправочникСсылка.Сотрудники, а регистр содержит измерение типа СправочникСсылка.ФизическиеЛица.

Если в переменную поместить массив из элементов типа СправочникСсылка.ФизическиеЛица, то оператор В срабатывает и запрос возвращает не пустой результат. Конечно в этом случае не использую временную таблицу и вместо
ФизическоеЛицо В (""ВЫБРАТЬ
                   |                                  ФизЛица.ФизическоеЛицо КАК ФизическоеЛицо
                   |                              ИЗ
                   |                                  ФизЛица КАК ФизЛица"")

пишу

ФизическоеЛицо В (&МассивОбъектов)

В консоле запросов при выполнении запроса с временными таблицами, консоль показывает, что во временной таблице есть записи, а конечный результат пустой.

Подскажите, что я не так делаю?
1 Sapiens_bru
 
16.02.18
20:28
""ВЫБРАТЬ
                   |                                  ФизЛица.ФизическоеЛицо КАК ФизическоеЛицо
                   |                              ИЗ
                   |                                  ФизЛица КАК ФизЛица""

Кавычки тут не нужны
"КАК ФизическоеЛицо" тоже лишнее

ХЗ, влияет это или нет
2 akocur
 
16.02.18
20:54
(1) Спасибо! Ступил я. Кавычки поставил, для того чтобы можно было вызвать конструктор запроса. И забыл убрать.
3 Vladal
 
16.02.18
21:40
(1) псевдонимы КАК ФизическоеЛицо все-таки лучше оставить.
4 Chameleon1980
 
16.02.18
21:40
(2) не понял. а без доп кавычек не открывался конструктор*?
5 akocur
 
16.02.18
22:30
(4) Если хочешь открыть конструктор запросов внутри конструктора запросов, например для создания запроса к временной таблице, то ставишь кавычки, между ними пробел, выделяешь пробел, вызываешь контекстное меню, выбираешь команду Конструктор запросов.
6 akocur
 
16.02.18
22:38
(4) (5) Это в том случае, если в поле написания кода уже есть какой-то код. Например, в моём случае, если написать

|ФизическоеЛицо В (<здесь вызвать конструктор запросов>)

то будет ошибка, а если написать вот так

|ФизическоеЛицо В ("<выделить пробел, вызвать конструктор>")

то ошибки не будет. Главное потом не забыть удалить кавычки.
7 Franchiser
 
гуру
17.02.18
00:05
Писать подзапрос а параметрах виртуальной таблицы это жесть. Возможно ошибка в платформе нужно поискать. В некоторых релизах были проблемы при наличии в данных, например, значения NULL
8 Franchiser
 
гуру
17.02.18
00:07
Попробуй так
1 В (выбрать 1 из физлица где физлица.физлицо = физлицо)
9 Franchiser
 
гуру
17.02.18
00:14
В данном случае будет коррелированный подзапрос, а не простой
10 Chameleon1980
 
17.02.18
04:34
(4) (5)
достаточно просто поставить пробел, выделить его и вызвать конструктор запроса - пробуйте.
11 Ненавижу 1С
 
гуру
17.02.18
07:01
(7) это от незнания работы с null
12 Franchiser
 
гуру
17.02.18
15:37
Ошибки в запросах платформы бывают, и они исправляются:

Запрос с операторами В и НЕ
Код ошибки: 10186500
Код(ы) обращения: SW1207545
Статус: Исправлена в тестовой версии Зарегистрирована: 27.10.2017
Исправлена: "Технологическая платформа", версия 8.3.12.1159 (для тестирования)

Описание:
При выполнении запроса с оператором В, используемом совместно с отрицанием (оператор НЕ), может быть получен неправильный результат, если в операторе В для сравнения используется тип ссылки.


Код ошибки: 10168730
Код(ы) обращения: SW1082149
Статус: Исправлена в выпущенной версии Зарегистрирована: 18.10.2016
Исправлена: "Технологическая платформа", версия 8.3.8.2322

Описание:
Результат запроса может быть неверным, если запрос содержит операцию ВЫБОР с большим количеством вариантов, а результат этой операции сравнивается с константой или параметром.