Есть массив, который содержит в себе логины сотрудников в формате "ivanov_ii" По этим логинам мне нужно найти физ лиц. У физ.лица в контактной информации есть адрес эл.почты, который соответствует как раз этим логинам, но формат "ivanov_ii@mail.ru".

Как мне запросом найти физ.лиц, у которых адрес почты соответствует логину, еще раз подчеркну, цчитывая, что в параметр я передаю массив всех логинов разу??

И логин и почта, соответственно, строкового типа.

Изначально Логины хрянятся в ТЧ обработки, т.е. если для реализации не нужен массив, то можно использовать таблицу.

```1c
    МассивЛогинов = Объект.Пользователи.Выгрузить(, "Логин");
```
---
Можно подготовить таблицу значений и использовать ее в качестве временной таблицы в запросе:
```1c
    ТЗ = Объект.Пользователи.Выгрузить(, "Логин");

    Для Каждого Стр Из ТЗ Цикл
    Стр.Логин = Стр.Логин + "@%";
    КонецЦикла;

    Запрос = Новый Запрос(
    "ВЫБРАТЬ
    | ТЗ.Логин КАК Логин
    |ПОМЕСТИТЬ ВТ
    |ИЗ
    | &ТЗ КАК ТЗ
    |;
    |
    |////////////////////////////////////////////////////////////­////////////////////
    |ВЫБРАТЬ РАЗЛИЧНЫЕ
    | ФизическиеЛицаКонтактнаяИнформация.Ссылка КАК Ссылка
    |ИЗ
    | Справочник.ФизическиеЛица.КонтактнаяИнформация КАК ФизическиеЛицаКонтактнаяИнформация
    | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ КАК ВТ
    | ПО (ФизическиеЛицаКонтактнаяИнформация.ЭлектроннаяПочта ПОДОБНО ВТ.Логин)");

    Запрос.УстановитьПараметр("ТЗ", ТЗ);
```
---
Сделать запрос к табличной части справочника с контактной информацией, с условием типо такого:

```1c
    ГДЕ
    Почта ПОДОБНО &Логин1+"@%"
    ИЛИ Почта ПОДОБНО &Логин2+"@%"
    ИЛИ Почта ПОДОБНО &Логин3+"@%"
```

и тд.
Столько условий, сколько логинов в таблице.
---
давно ли в запросах работает конкатенация строк?
---
а что с ними не так? конкатенация строк работает. Это же не приведение типов.
---
Хм. Я всегда считал, что использование в запросе &ПараметраЗапроса - это всегда неявное приведение типов (что в запросе недопустимо).
Проверил - и правда работает... Был неправ )

Этот же ответ и для (7)
---
Я всегда считал, что использование в запросе &ПараметраЗапроса - это всегда неявное приведение типов
Вместо параметра в запрос подставится уже конкретное значение с нужным типом при передаче запроса в sql сервер. В данном случае тип Строка. Так что никакого приведения типов тут не будет. Все отработает штатно.
---
Ну да, если в массив логинов случайно не передать какое-нибудь значение другого типа...
---
а вот на это уже 1С отреагирует и выдаст ошибку.
---
Ответил в (10)
---
Я так понимаю, что приходит массив логинов, и в цикле задаются параметры запроса из массива и добавляется строка условия для этого параметра.
Так не лучше ли тогда сразу при установке параметров прибавлять к логину строку "@%", чем фигачить её в запросе???
Тогда будет возможность и значение массива заранее проверить на корректность заодно, чтобы запрос не ломался...
---
Конечно лучше. Мне просто лень было писать. Это же был просто пример.
---
Всегда работала же, если не учитывать представление.
---
Такой вариант точно не подойдет, т.к. логины периодчески будут меняться, да и вообще, их более 700 штук)
---
если это одноразовый запрос, то можно и через Подобно.
Если это постоянный, то желательно рассмотреть создания РС, где и хранить нужные данные.
Для получения логинов из почтового адреса можно так, если релиз платформы позволяет:

```1c
    ВЫРАЗИТЬ(ЛЕВ(Почта, СТРНАЙТИ(Почта, "@") - 1) КАК СТРОКА(40)) КАК Логин
```

Так можно заполнить РС данными и обращаться через него.

В крайнем случае это выражение можно использовать и в отборе:

```1c
    ГДЕ
    ВЫРАЗИТЬ(ЛЕВ(Почта, СТРНАЙТИ(Почта, "@") - 1) КАК СТРОКА(40)) В (&Логины)
```
---
Можно подготовить таблицу значений и использовать ее в качестве временной таблицы в запросе:
```1c
    ТЗ = Объект.Пользователи.Выгрузить(, "Логин");

    Для Каждого Стр Из ТЗ Цикл
    Стр.Логин = Стр.Логин + "@%";
    КонецЦикла;

    Запрос = Новый Запрос(
    "ВЫБРАТЬ
    | ТЗ.Логин КАК Логин
    |ПОМЕСТИТЬ ВТ
    |ИЗ
    | &ТЗ КАК ТЗ
    |;
    |
    |////////////////////////////////////////////////////////////­////////////////////
    |ВЫБРАТЬ РАЗЛИЧНЫЕ
    | ФизическиеЛицаКонтактнаяИнформация.Ссылка КАК Ссылка
    |ИЗ
    | Справочник.ФизическиеЛица.КонтактнаяИнформация КАК ФизическиеЛицаКонтактнаяИнформация
    | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ КАК ВТ
    | ПО (ФизическиеЛицаКонтактнаяИнформация.ЭлектроннаяПочта ПОДОБНО ВТ.Логин)");

    Запрос.УстановитьПараметр("ТЗ", ТЗ);
```
---
Спасибо) Именно так и сделала, почему-то сразу в глову не пришло) Нужно было написать тему, чтобы тут же в голову постучался инсайт))
---
Посмотрите примеры выражения языка запросов "ПОДОБНО", это то что вам нужно.
---
По мне так правильнее добавить новый вид контактной информации "Логин" и заполнить его именем из электронной почты. И уже по нему искать, а не по адресу электронной почты. Тогда не будет никаких динамически собираемых запросов с ПОДОБНО, а будет просто
```1c
    |ГДЕ КонтактнаяИнформация.Вид = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.Логин)
    | И КонтактнаяИнформация.Значение В (&МассивЛогинов)
```