Недокументированный синтаксис оператора проверки совпадений
Оператор В(IN) - проверки совпадений, позволяет проверить, совпадает ли значение выражения, указанного справа от него, с одним из значений, описанных слева. Если совпадает хотя бы с одним – результатом оператора будет ИСТИНА, иначе – ЛОЖЬ. Применение НЕ изменяет действие оператора на обратное.
В документация описаны 3! способа применения оператора В(IN):
<Выражение> [НЕ] В ( <Список значений> | <Массив значений> )<Выражение> [НЕ] В ИЕРАРХИИ ( <Выражение> | <Список значений> | <Массив значений> )<Выражение> [НЕ] В [ИЕРАРХИИ] ( <Описание запроса> )
однако есть и четвертый
(<Выражение>[, <Выражение> [, …]]) [НЕ] В ( <Описание запроса> )
Оператор проверят совпадение для каждого выражения(операнда) описанного слева, с соответствующим полем запроса описанного справа. Количество операндов слева должно соответствовать количеству полей запроса справа.
Пример:
ВЫБРАТЬ
Номенклатура.Ссылка
ИЗ
Справочник.Номенклатура КАК Номенклатура
ГДЕ (Ссылка.Код,Ссылка.Наименование,1) НЕ В (ВЫБРАТЬ
Номенклатура.Код,
Номенклатура.Наименование,
СУММА(1) КАК Флаг
ИЗ
Справочник.Номенклатура КАК Номенклатура
СГРУППИРОВАТЬ ПО
Номенклатура.Наименование,
Номенклатура.Код)
Хочется еще отметить что данная конструкция поддерживается SQL, однако в документации например по MSSQL явно указано, " ....Вложенный запрос с результирующим набором из одного столбца.". Вот транслируемый запрос к СУБД(MSSQL)
Q_000_T_001.ID
FROM
Reference95 Q_000_T_001
WHERE
(NOT(( CAST(Q_000_T_001.ID AS REF(Reference95)).Code,
CAST(Q_000_T_001.ID AS REF(Reference95)).Description,
1) IN ( SELECT
Q_001_T_001.Code Q_001_F_000,
Q_001_T_001.Description Q_001_F_001,
SUM(1) Q_001_F_002
FROM
Reference95 Q_001_T_001
GROUP BY
Q_001_T_001.Description,
Q_001_T_001.Code
)
))
Выдержка из документации по 1С:Предприятие 8.1
Форма оператора В для проверки совпадения с одним из перечисленных
Примером применения данного оператора может послужить следующее:
Пример:
Справочник.Номенклатура.Наименование
Где
Справочник.Номенклатура.Родитель.Наименование
В ("Бытовая техника", "Оргтехника")
Форма оператора В для проверки принадлежности по иерархии
Для справочников проверка может осуществляться и на принадлежность по иерархии. Результатом оператора В ИЕРАРХИИ будет ИСТИНА, если значение выражения слева является ссылкой на элемент справочника и входит во множество значений справа или иерархически принадлежит какой-нибудь группе, содержащейся в этом множестве:
Пример:
// на какую-либо группу справочника Номенклатура.
Выбрать
Справочник.Номенклатура.Наименование
Где
Справочник.Номенклатура.Ссылка В ИЕРАРХИИ (&Группа)
В качестве множества значений, на совпадение с которыми выполняется проверка, может фигурировать и результат запроса. В этом случае справа от оператора В необходимо указать описание запроса.
Пример:
Справочник.Номенклатура.Наименование
Где
Справочник.Номенклатура.Ссылка В ИЕРАРХИИ
(
ВЫБРАТЬ
Справочник.Номенклатура.Ссылка
ГДЕ
Справочник.Номенклатура.Наименование = "Одежда"
)
Форма оператора В для проверки совпадения значения с одним из результата запроса
Примером применения данного оператора может послужить следующее:
Пример:
ВЫБРАТЬ
Товары.Наименование
ИЗ
Справочник.Товары КАК Товары
ГДЕ
Товары.Ссылка В
(
ВЫБРАТЬ
РасхНаклСостав.Товар
ИЗ
Документ.РасхНакл.Состав КАК РасхНаклСостав
)
Результат запроса:
| Товары |
|---|
| Кран |
| Вантус |
| Стол |
| Стул |
Для получения противоположного результата, то есть, если нужно определить, что значение не совпадает ни с одним из результата запроса, запрос выглядит следующим образом:
Пример:
ВЫБРАТЬ
Товары.Наименование
ИЗ
Справочник.Товары КАК Товары
ГДЕ
Товары.Ссылка НЕ В
(
ВЫБРАТЬ
РасхНаклСостав.Товар
ИЗ
Документ.РасхНакл.Состав КАК РасхНаклСостав
)
Результат запроса:
| Товар |
|---|
| Сантехника |
| Мебель |
Заметим, что из запроса операции В возможно обращение к полям таблиц, которые встречались во внешнем запросе до появления операции.
Пример:
ВЫБРАТЬ
Товары.Наименование
ИЗ
Справочник.Товары КАК Товары
ГДЕ
Товары.Ссылка В
(
ВЫБРАТЬ
РасхНаклСостав.Товар
ИЗ
Документ.РасхНакл.Состав КАК РасхНаклСостав
ГДЕ
РасхНаклСостав.Товар = Товары.Ссылка
)
Результат запроса:
| Товары |
|---|
| Кран |
| Вантус |
| Стол |
| Стул |
Источник статьи: http://blog.1c-ei.ru/2010/03/blog-post_13.html.

