Вход | Регистрация


1С:Предприятие ::

Метки: 

Передать значение ТЗ в параметры запроса!

Я
   yyyuuu
 
20.08.18 - 11:06
Здравствуйте, есть массив. Заполняю. Передаю значения массива в Таблицу значений. Дальше хочу использовать эти значения в запросе. Но только у меня немного не получается. Уже не много запотался, хочу попросить помощи и немного разобраться со всем.

НашМассив = Новый Массив;
        Для Каждого Элемент Из ЭлементыФормы.ТабличноеПоле1.Значение Цикл
            НашМассив.Добавить(Элемент);
        КонецЦикла;    
        //    

        парамРодитель = ПолеВвода3;
        //

        ТЗ = Новый ТаблицаЗначений;
        ТЗ.Колонки.Добавить("Элемент",Новый ОписаниеТипов("Строка"));
        
        Для Каждого Строка ИЗ НашМассив Цикл
            НоваяСтрока = ТЗ.Добавить();
            НоваяСтрока.Элемент = Строка;
        КонецЦикла;
        //

        
        Запрос = Новый Запрос;
        МенеджерВТ = Новый МенеджерВременныхТаблиц;
        Запрос.МенеджерВременныхТаблиц = МенеджерВТ;
        Запрос.Текст = 
            "ВЫБРАТЬ
            |    ТЗ.Элемент КАК Элемент
            |ПОМЕСТИТЬ ТЗ
            |ИЗ
            |    &ТЗ КАК ТЗ
            |;
            |
            ////////////////////////////////////////////////////////////////////////////////

            |ВЫБРАТЬ
            |    ТЗ.Элемент КАК Элемент,
            |    МТР.Наименование КАК Наименование
            |ИЗ
            |    Справочник.МТР КАК МТР
            |        ЛЕВОЕ СОЕДИНЕНИЕ ТЗ КАК ТЗ
            |        ПО (МТР.Наименование ПОДОБНО ТЗ.Элемент)
            |ГДЕ
            |    ТЗ.Элемент ПОДОБНО &Элемент";
        
        Запрос.УстановитьПараметр("Родитель", ПарамРодитель);
        Запрос.УстановитьПараметр("ТЗ", ТЗ);
        Запрос.УстановитьПараметр("Элемент", "%" + ТЗ + "%");
        РезультатЗапроса = Запрос.Выполнить();
        
        Выборка = РезультатЗапроса.Выбрать();
        
        Пока Выборка.Следующий() Цикл
             Сообщить(Выборка.Элемент);
        КонецЦикла;
 
 
   hhhh
 
1 - 20.08.18 - 11:10
(0) зачем так городить? передавай исходный массив в запрос. без таблицы
   catena
 
2 - 20.08.18 - 11:14
Что это?
"Запрос.УстановитьПараметр("Элемент", "%" + ТЗ + "%");"

Элемент подобен таблице значений?
   yyyuuu
 
3 - 20.08.18 - 11:18
(1), (2) Смотрите ребята, да знаю где то на мракобесил в коде. Просто не могу разобраться, у меня на форме есть какие то элементы которые ввел с руки. Записываю из В ТЗ,  а дальше хочу использовать в запросе с функцией ПОДОБНО.
Запутался уже, где то может быть прям бордак
   RomaH
 
4 - 20.08.18 - 11:21
(0) где конкретно немного  не получается?
   Deon
 
5 - 20.08.18 - 11:21
(3) соединение сделай внутренним, а не левым.
ПО (МТР.Наименование ПОДОБНО "%"+ТЗ.Элемент+"%")
раздел Где убери
В параметрах тебе кроме ТЗ ничего не надо
   yyyuuu
 
6 - 20.08.18 - 11:26
(4) Мне кажется в параметрах что то не то
   yyyuuu
 
7 - 20.08.18 - 11:28
"Преобразование значения к типу Число не может быть выполнено
        Запрос.Текст = "
   yyyuuu
 
8 - 20.08.18 - 11:30
Запрос = Новый Запрос;
        МенеджерВТ = Новый МенеджерВременныхТаблиц;
        Запрос.МенеджерВременныхТаблиц = МенеджерВТ;
        Запрос.Текст = 
            "ВЫБРАТЬ
            |    ТЗ.Элемент КАК Элемент
            |ПОМЕСТИТЬ ТЗ
            |ИЗ
            |    &ТЗ КАК ТЗ
            |;
            |
            ////////////////////////////////////////////////////////////////////////////////

            |ВЫБРАТЬ
            |    ТЗ.Элемент КАК Элемент,
            |    МТР.Наименование КАК Наименование
            |ИЗ
            |    Справочник.МТР КАК МТР
            |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТЗ КАК ТЗ
            |        ПО (МТР.Наименование ПОДОБНО "%"+ТЗ.Элемент+"%")";
        
        //Запрос.УстановитьПараметр("Родитель", ПарамРодитель);

        Запрос.УстановитьПараметр("ТЗ", ТЗ);
        //Запрос.УстановитьПараметр("Элемент", "%" + ТЗ + "%");

        РезультатЗапроса = Запрос.Выполнить();
        
        Выборка = РезультатЗапроса.Выбрать();
        
        Пока Выборка.Следующий() Цикл
             Сообщить(Выборка.Наименование);
        КонецЦикла;
   Deon
 
9 - 20.08.18 - 11:33
(8) Добавь кавычков """"""""""
   hhhh
 
10 - 20.08.18 - 11:35
(8) ну вот это сразу выбросьте
        МенеджерВТ = Новый МенеджерВременныхТаблиц;
        Запрос.МенеджерВременныхТаблиц = МенеджерВТ;

это мусор, для красоты что ли прилепили? А остально вроде должно работать.
 
 Рекламное место пустует
   yyyuuu
 
11 - 20.08.18 - 11:40
(9) а куда добавить если по точнее?
   Deon
 
12 - 20.08.18 - 11:43
ПОДОБНО ""%""+ТЗ.Элемент+""%"" )";
   catena
 
13 - 20.08.18 - 11:44
|        ПО (МТР.Наименование ПОДОБНО "%"+ТЗ.Элемент+"%")";


Какой именно .Элемент? Из какой строки ТЗ? Зачем ты ее путаешь? Убирай кавычки внутри текста.
   yyyuuu
 
14 - 20.08.18 - 11:44
МТР.Наименование ПОДОБНО ""%"" + ТЗ.Элемент + ""%"" именно так у меня и стоит и ошибка все ровно.
Неверные параметры "+"
   catena
 
15 - 20.08.18 - 11:44
(12)Человеку и так стремно, вы его окончательно сейчас запутаете, ага.
   yyyuuu
 
16 - 20.08.18 - 11:45
(13) В ТЗ сейчас две строки, хочу их две и использовать в запросе.
   Deon
 
17 - 20.08.18 - 11:45
(14) Это потому что строка должна быть с длиной
Новый ОписаниеТипов("Строка",,Новый КвалификаторыСтроки(100))
   Deon
 
18 - 20.08.18 - 11:46
(15) Не надо бояться. 1С добрая
   yyyuuu
 
19 - 20.08.18 - 11:46
Если 
 "%" + ТЗ.Элемент + "%")"
Тогда 
Преобразование значения к типу Число не может быть выполнено
        Запрос.Текст =
   catena
 
20 - 20.08.18 - 11:48
(19)Сотри все, напиши заново)))
   hhhh
 
21 - 20.08.18 - 11:48
(15) нормально всё, каждая строка соединение с каждой, он проверит МТР.Наименование на подобие с каждой строкой тз.
   catena
 
22 - 20.08.18 - 11:49
(21)(18) да, увидела, пардон :)
   yyyuuu
 
23 - 20.08.18 - 12:00
Ребята, спасибо. То как вы сказали работает. Но вот есть такая проблема. Я ведь на форме выбираю еще группу справочника из какого делать отбор.
парамРодитель = ПолеВвода3;
В этом поле получаю группу в которой находятся элементы Ну и совпадение элементов.
Получиться ли сделать так 
        Запрос.Текст = 
            "ВЫБРАТЬ
            |    ТЗ.Элемент КАК Элемент
            |ПОМЕСТИТЬ ТЗ
            |ИЗ
            |    &ТЗ КАК ТЗ
            |;
            |
            ////////////////////////////////////////////////////////////////////////////////

            |ВЫБРАТЬ
            |    ТЗ.Элемент КАК Элемент,
            |    МТР.Наименование КАК Наименование
            |ИЗ
            |    Справочник.МТР КАК МТР
            |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТЗ КАК ТЗ
            |        ПО (МТР.Наименование ПОДОБНО ""%"" + ТЗ.Элемент + ""%"")
            |ГДЕ
            |    МТР.Родитель.Наименование = &Родитель";

Где Я указал условие
Запрос.УстановитьПараметр("Родитель", ПарамРодитель);
   yyyuuu
 
24 - 20.08.18 - 12:01
Если сделал как в (23) То находит всего 2 совпадения вместо 7
   FIXXXL
 
25 - 20.08.18 - 12:02
(23) убирай родителя в связь
   Deon
 
26 - 20.08.18 - 12:06
(24) ПарамРодитель у тебя Строка или Ссылка?
   yyyuuu
 
27 - 20.08.18 - 12:07
(25) Я верно понимаю? Мне в мою таблицу знаечения, нужно добавить еще поле где будет хранится "Родитель"
   yyyuuu
 
28 - 20.08.18 - 12:07
(24) Строка
   Deon
 
29 - 20.08.18 - 12:07
(27) Не, не нужно
   FIXXXL
 
30 - 20.08.18 - 12:07
(27) нет
просто условие из ГДЕ переноси в связи таблиц
   Deon
 
31 - 20.08.18 - 12:08
(30) Суть от этого не поменяется
   Deon
 
32 - 20.08.18 - 12:09
(24) Значит у остальных 5 родитель другой
   yyyuuu
 
33 - 20.08.18 - 12:11
(32) Родитель сто процентов один, глянул по справочнику
 
 
   Deon
 
34 - 20.08.18 - 12:12
(33) А если условие ГДЕ из запроса убрать, то потерявшиеся элементы выдаются?
   yyyuuu
 
35 - 20.08.18 - 12:14
(34) Вот, как получается смотрите ребята. Выходит так, что если убираю условие родителя то поиск идет обсолютно по всем родителям, не важно в какой группе состоит элемент
   Deon
 
36 - 20.08.18 - 12:16
(35) Так и получается, да.
   yyyuuu
 
37 - 20.08.18 - 12:17
(36) А Я то хочу чтобы в опредленной группе искалось). Если делаю по условию, то получается фигня какая то. А по связи Я не понял как честно сделать, что с чем связать.
   Deon
 
38 - 20.08.18 - 12:19
(37) А на 34 ты не ответил
   yyyuuu
 
39 - 20.08.18 - 12:23
(34) Да выдаются).Извини пожалуйста, проглядел
   Deon
 
40 - 20.08.18 - 12:24
(39) Тогда ответ в (32) ))))
   yyyuuu
 
41 - 20.08.18 - 12:28
(40) Я захожу в группу, ставлю отбор ровно по этому наименованию нахожу в этой группе точно 7 элементов за ПОДОБНО в наименовании "Лоток". Если в консоле просто выбираю по параметрам, результат тоже такой же 7 элементов
   yyyuuu
 
42 - 20.08.18 - 12:34
(41) А вот и нет, обманул. В консоле тот же результат.
Тогда понять не могу, почему в группе Я их вижу, а в запросе всего 2 элемента относятса к этой группе. Если по расширенному отбору они там все 7
   yyyuuu
 
43 - 20.08.18 - 12:40
Так же Я вижу все эти элеметы только в одной группе
   yyyuuu
 
44 - 20.08.18 - 12:47
Ребята, вы были правы родитель и в правду другой. Тогда вопрос, другой. Как делать поиск по именно в группе какой элемент состоит, Я ведь выбираю группу где этот элемент находится. По наименованию может быть сравнить?
   catena
 
45 - 20.08.18 - 12:53
(44)Ась?
Возможно, вам требуется "В ИЕРАРХИИ", но тогда нужно напрячься и передать в параметры ссылку, а не строку.
   yyyuuu
 
46 - 20.08.18 - 12:53
Друзья извините меня пожалуйста, да все правильно получается. Это Я не верно отбор стандартный понял.
Так рад что все получилось).
Спасибо все за помощь. Все получилось)
   yyyuuu
 
47 - 20.08.18 - 12:54
всем *



Список тем форума
Рекламное место пустует Рекламное место пустует
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует