Имя: Пароль:
1C
 
2 ТЗ в запросе
0 Дебет
 
20.10.15
05:41
день добрый товарищи! Начинающий и подающий надежды программист 1с, нуждается в помощи. Я получил 2 ТЗ и что бы быстрее их сравнить закидываю обе ТЗ в запрос.

    Запрос = Новый Запрос;
        Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
        Запрос.Текст = "ВЫБРАТЬ
                       |    ТЗ.Наименование
                       |ИЗ
                       |    &ТЗ КАК ТЗ
                       |        ЛЕВОЕ СОЕДИНЕНИЕ &ТЗ2 КАК ТЗ2
                       |        ПО ТЗ.Наименование = ТЗ2.НаименованиеПоиск";
        Запрос.УстановитьПараметр("ТЗ",ТабНоменклатура);
        Запрос.УстановитьПараметр("ТЗ2",Табл);

если указываю |ЛЕВОЕ СОЕДИНЕНИЕ  &ТЗ2 как ТЗ2 выдает ошибку что  Ожидается имя таблицы
ЛЕВОЕ СОЕДИНЕНИЕ <<?>>&ТЗ2 КАК ТЗ2

как решить ?
1 mehfk
 
20.10.15
05:44
Выборка из параметра - Таблицы значений возможна только во временную таблицу
2 Горогуля
 
20.10.15
05:49
выбрать поместить ТЗ1 из &ТЗ1; выбрать поместить ТЗ2 из &ТЗ2; выбрать из ТЗ1 соединение ТЗ2
3 Дебет
 
20.10.15
06:13
(2)  "выбрать
        |* ПОМЕСТИТЬ ТЗ ИЗ &ТЗ КАК ТЗ";
        |ВЫБРАТЬ * ПОМЕСТИТЬ ТЗ2 из &ТЗ2";
        |ВЫБРАТЬ   *  из  
        |    ТЗ1 КАК ТЗ1
        |        ЛЕВОЕ СОЕДИНЕНИЕ ТЗ2 КАК ТЗ2
        |        ПО ТЗ1.Наименование = ТЗ2.НаименованиеПоиск";

не проходит такой запрос
4 Дебет
 
20.10.15
06:16
(3) втупил
5 Дебет
 
20.10.15
06:16
без кавычек надо
6 Дебет
 
20.10.15
06:21
в итоге Запрос.Текст = "выбрать
        |ТЗ1.Наименование ПОМЕСТИТЬ ТЗ1 ИЗ &ТЗ1 КАК ТЗ1;
        |ВЫБРАТЬ ТЗ2.НаименованиеПоиск ПОМЕСТИТЬ ТЗ2 из &ТЗ2 как ТЗ2;
        |ВЫБРАТЬ   Наименование  из  
        |    ТЗ1 КАК ТЗ1
        |        ЛЕВОЕ СОЕДИНЕНИЕ ТЗ2 КАК ТЗ2
        |        ПО ТЗ1.Наименование = ТЗ2.НаименованиеПоиск";
7 Дебет
 
20.10.15
06:22
но теперь выдает Тип не может быть выбран в запросе
ВЫБРАТЬ <<?>>ТЗ2.НаименованиеПоиск ПОМЕСТИТЬ ТЗ2 из &ТЗ2 как ТЗ2;
8 Дебет
 
20.10.15
06:22
тип строка
9 Горогуля
 
20.10.15
06:24
это от того, что ТЗ не типизирована
10 el-gamberro
 
20.10.15
06:41
(7) Типизируй колонки для тз, которая уйдет в запрос.
11 patria0muerte
 
20.10.15
06:44
(7) Либо так:
Запрос.Текст =
|ВЫБРАТЬ ВЫРАЗИТЬ(ТЗ1.Наименование КАК СТРОКА(300)) КАК Наименование ПОМЕСТИТЬ ТЗ1 ИЗ &ТЗ1 КАК ТЗ1;
|ВЫБРАТЬ ВЫРАЗИТЬ(ТЗ2.НаименованиеПоиск КАК СТРОКА(300)) КАК НаименованиеПоиск ПОМЕСТИТЬ ТЗ2 из &ТЗ2 как ТЗ2;
|ВЫБРАТЬ   Наименование  из  
|    ТЗ1 КАК ТЗ1
|        ЛЕВОЕ СОЕДИНЕНИЕ ТЗ2 КАК ТЗ2
|        ПО ТЗ1.Наименование = ТЗ2.НаименованиеПоиск";
12 Дебет
 
20.10.15
06:48
(9) все сделал как ты сказал
13 kosts
 
20.10.15
06:50
(0) > что бы быстрее их сравнить закидываю обе ТЗ в запрос

Вполне возможно, что быстрее то и не будет.
Т.к. запрос выполняется на сервере БД (ну кроме небольшой файловой базы конечно).
Т.е. будут дополнительные расходы.

Откуда у тебя взялись ТЗ? Если получил из других запросов, то правильнее было обработать данные сразу в запросах, не получая промежуточные ТЗ.
14 kosts
 
20.10.15
06:53
(0) В данном случае МенеджерВременныхТаблиц скорее всего не нужен.
15 Горогуля
 
20.10.15
07:03
(12) угу. только не типизировал ТЗ, о чём я злобно умолчал ;)
16 Дебет
 
20.10.15
07:07
(14) действительно не нужен
(13) 1 ТЗ уже была, 2 из запроса, но там по другому нельзя (в запросе получаем данные потом убираем пробелы и ставим верхний регситр)
17 kosts
 
20.10.15
07:10
(16) Если что, то в запросе регистр не важен (большие и маленькие буквы равны).
18 Дебет
 
20.10.15
07:12
(17) а вот это очень интересная информация, считай день прожил не зря
19 kosts
 
20.10.15
07:16
(18) Ну и до кучи конечные пробелы игнорируются. Т.е.

Выбрать Истина Где "А " = "а          "

Вернет Истину
20 Дебет
 
20.10.15
07:17
(19) спс
21 Ildarovich
 
20.10.15
08:38
Об эффективных методах сравнении ТЗ можно почитать здесь:
http://catalog.mista.ru/public/326983/ . Из статьи, в частности, следует, что сравнение ТХ запросом - плохая идея.
22 Ildarovich
 
20.10.15
08:39
+(21) поправка:
что сравнение ТЗ запросом - плохая идея.
23 Горогуля
 
20.10.15
08:40
(21) а можно мне в двух словах рассказать, почему то запросом плохо? скорость выполнения мне побоку
24 Ildarovich
 
20.10.15
09:03
(23)
1) Букв больше придется писать;
2) Универсальность гораздо меньше, потому что запрос под структуру таблиц делается. Если она меняется - запрос переписывать придется или строить динамически.
Впрочем, если скорость выполнения - побоку, то и на все это можно забить.
25 kosts
 
20.10.15
09:09
(24) Эти аргументы как раз наоборот, в пользу запросов.

>1) Букв больше придется писать;

С ТЗ обычно больше кода.

>2) Универсальность гораздо меньше, потому что запрос под структуру таблиц делается. Если она меняется - запрос переписывать придется или строить динамически.
>Впрочем, если скорость выполнения - побоку, то и на все это можно забить.

С ТЗ обычно больше мороки.
26 hhhh
 
20.10.15
10:18
(25) а зачем обсуждать мифические преимущества, если ты сам убил интригу в (17)  ??
27 kosts
 
20.10.15
10:33
(26) Не совсем понял о чем речь. Но я за то, что бы использовать запросы там, где лучше запросы и ТЗ там, где лучше ТЗ.
28 hhhh
 
20.10.15
10:59
(27) ну ТС пишет, что использовал промежуточную таблицу специально, чтобы перевести из нижнего регистра в верхний.
Основная теорема систематики: Новые системы плодят новые проблемы.