Имя: Пароль:
1C
 
Как в запросе отобрать подобные, если они хранятся в массиве
0 rt2000
 
05.07.16
12:03
Всем привет!
Вот такая конструкция в запросе:
ВЫБОР
    КОГДА ПоступлениеТоваров.Контрагент.Наименование ПОДОБНО "%" + &СписокКонтр + "%"
        ТОГДА "Не Создаем"
    ИНАЧЕ "Создаем"
КОНЕЦ

&СписокКонтр - это массив строк.

Суть такая, что в массиве список наименований и мне нужно отбросить контрагентов с такими наименованиями в запросе
1 rt2000
 
05.07.16
12:04
Я имею ввиду тут ошибка при выполнении запроса. И как написать правильно, в этом вопрос!
2 В тылу врага
 
05.07.16
12:04
передать массив во временную таблицу, например
3 rt2000
 
05.07.16
12:05
(2) А без временной таблице, есть еще варианты?
5 Fragster
 
гуру
05.07.16
12:07
запрос в циклИ
6 Nuobu
 
05.07.16
12:07
(3) нет\
7 Fragster
 
гуру
05.07.16
12:08
программное формирование текста запроса
8 drcrasher
 
05.07.16
12:08
(0) собери из массива строку с разделителем % и передай в параметр
9 Fragster
 
гуру
05.07.16
12:09
небольшая подготовка данных, чтобы избавится от мисдеца в запросе из (0)
10 rt2000
 
05.07.16
12:10
(8) из трех строк "Цех", "Пекарня","Кулинария" сделать одну:
"Цех%Пекарня%Кулинария" Как это будет работать?
11 HardBall
 
05.07.16
12:23
(10) Regexp d запросе?
12 rt2000
 
05.07.16
12:43
Ребята,  я вас не понимаю?
Может пример покажете, так проще будет
13 Зая Бусечка
 
05.07.16
12:46
(10) Работать будет peranalno
14 Fragster
 
гуру
05.07.16
12:46
(12) может, начальную задачу опишешь? например откуда появляется этот "список", что его именно в "подобно" надо пихать?
15 hhhh
 
05.07.16
12:46
(12) ВЫБОР
    КОГДА ПоступлениеТоваров.Контрагент.Наименование ПОДОБНО "%" + &Контр1 + "%"
ИЛИ ПоступлениеТоваров.Контрагент.Наименование ПОДОБНО "%" + &Контр2 + "%"
ИЛИ ПоступлениеТоваров.Контрагент.Наименование ПОДОБНО "%" + &Контр3 + "%"       ТОГДА "Не Создаем"
    ИНАЧЕ "Создаем"
КОНЕЦ
16 HardBall
 
05.07.16
13:11
Походу надо отобрать контрагентов у которых встречается
"лабеаН" в наименовании.
17 rt2000
 
05.07.16
14:48
(14) Дали эксельную таблицу. Сказали, для документов поступления, нужно создать счета фактуры. За исключением тех контрагентов, у которых в наименовании встречается одно из слов в массиве. Как то так.
18 Фрэнки
 
05.07.16
15:09
ну я бы сделал как массив строк и попробовал натравить на него сравнением В
19 Фрэнки
 
05.07.16
15:11
и еще можно ВЫРАЗИТЬ загруженный в запрос массив и ВЫРАЗИТЬ так же Наименование, тогда с использованием В будет работать
20 Fragster
 
гуру
05.07.16
15:11
1. получить список контрагентов
2. передать список в запрос
21 youalex
 
05.07.16
16:04
(0)
1) Масссив - в ТЗ
2) ТЗ - в ВТ
3) С ВТ цепляться по "Контрагент.Наименование ПОДОБНО "%" + ВТ.Наименование + "%"

Непонятно, в списке - точные наименования? Тогда зачем ПОДОБНО ? Сам список как заполняется?

Если точные, тогда в запросе:
ВЫБРАТЬ Справочник.Контрагенты.Ссылка Поместить вт_Контрагенты ГДЕ Наименование В (&Список)
;
ВЫБОР КОГДА вт_Контрагенты.Ссылка IS NULL Тогда "Создаем" ...
22 Азазелло
 
05.07.16
21:01
(21) использование в условии соединения ПОДОБНО - уж точно не стоит. Запрос в цикле эффективней будет.

(0) разверни в обратную сторону

ВЫБРАТЬ
    Контрагенты.Ссылка КАК Ссылка,
    Контрагенты.Наименование КАК Наименование
ИЗ
    Справочник.Контрагенты КАК Контрагенты
ГДЕ
    "%Альтаир%Альфа%" ПОДОБНО "%" + Контрагенты.Наименование + "%"
23 Азазелло
 
05.07.16
21:02
(22) вместо "%" в "%Альтаир%Альфа%" в принципе подойдет другой разделитель. В левой части выражения ПОДОБНО он не интерпретируется как спец. символ.
24 youalex
 
07.07.16
00:35
(22) "использование в условии соединения ПОДОБНО - уж точно не стоит. Запрос в цикле эффективней будет."
Не согласен с тем что "точно не стоит" Точно - не точно. Возможно, роль еще играет само выражение ПОДОБНО, например, если в начале выражения нет спецсимволов - оно может и быстро отработать.
В моем решении, думаю,  более пагубную роль играет не само ПОДОБНО, а операция присваивания.  

Запрос в цикле пагубен не тем, что это запрос в цикле, а тем что, условно, это операция "создать запрос /проверить соединение с базой/преобразовать запрос 1с в запрос sql - отправить запрос в sql (там еще построение плана/даже получение из кэша)- дождаться ответа, преобразовать ответ в термины 1С... Все это в цикле.
25 youalex
 
07.07.16
00:38
(24) + еще вариант - построить динамически запрос, через объединение. Но тут можно упереться в ограничение длины текста запроса.
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.