Версия для печати темы (https://pro1c.org.ua/index.php?s=2ad0377d90e56028d01c705bd38ccbf2&showtopic=14150)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование обычных форм 1С 8.2 и не интерфейсной логики _ ТЗ в параметр запроса

Автор: alexkhua 08.09.13, 18:39

Не могу передать в параметр запроса Таблицу значений. Что тут не так?

 ТЗ = Новый ТаблицаЗначений();
         ТЗ.Колонки.Добавить("ДокументСсылка"  , Новый ОписаниеТипов ("ДокументСсылка.ЗаказВПроизводство"));
        
        
        
        
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    НарядЗаказ.Основание.Ссылка КАК ДокументСсылка
        |ИЗ
        |    Документ.НарядЗаказ КАК НарядЗаказ
        |ГДЕ
        |    НарядЗаказ.Основание.Ссылка <> &Пустая
        |
        |ОБЪЕДИНИТЬ ВСЕ
        |
        |ВЫБРАТЬ
        |    НарядЗаказДвери.Основание.Ссылка
        |ИЗ
        |    Документ.НарядЗаказДвери КАК НарядЗаказДвери
        |ГДЕ
        |    НарядЗаказДвери.Основание.Ссылка = &Пустая";
        
        Запрос.УстановитьПараметр("Пустая","");

    ТЗ = Запрос.Выполнить().Выгрузить();
    
//////////////////////////////////////////////////////////////////////////////////////////////////



    
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ЗаказВПроизводство.Ссылка
        |ИЗ
        |    Документ.ЗаказВПроизводство КАК ЗаказВПроизводство
        |ГДЕ
        |    ЗаказВПроизводство.Ссылка <> &ТЗ";

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

    Результат = Запрос.Выполнить();

    Выборка = Результат.Выбрать();

    Пока Выборка.Следующий() Цикл
    Сообщить(Выборка.Ссылка);
    КонецЦикла;

Автор: alex040269 08.09.13, 20:25

Цитата(alexkhua @ 08.09.13, 19:39) *
ЗаказВПроизводство.Ссылка <> &ТЗ

а вы представляете как это Ссылка = &ТЗ (Таблица значений)?
Наверное нужен список ссылок не вошедших в ТЗ, тогда используйте левое соединение. И запрос лучше сделать один.
ТЗ поместить во временную таблицу или внутренний запрос.

Автор: alexkhua 08.09.13, 20:50

Цитата(alex040269 @ 08.09.13, 21:25) *
а вы представляете как это Ссылка = &ТЗ (Таблица значений)?
Наверное нужен список ссылок не вошедших в ТЗ, тогда используйте левое соединение. И запрос лучше сделать один.
ТЗ поместить во временную таблицу или внутренний запрос.

Спасибо, попробую. Но я не пойму почему типы в сравн. значениях не соответствуют???

Автор: Ardi 08.09.13, 23:41

потому что массив или список значений.

Автор: alexkhua 09.09.13, 8:33

Цитата(Ardi @ 09.09.13, 0:41) *
потому что массив или список значений.

С массивом тоже не работает. Или что?

Автор: Vofka 09.09.13, 8:59

Цитата(alexkhua @ 09.09.13, 9:33) *
Или что?

Как раз с массивом и работает. Как-то так должно быть:

|ГДЕ
|    ЗаказВПроизводство.Ссылка НЕ В (&МассивСсылок)

Автор: alexkhua 09.09.13, 9:24

Цитата(Vofka @ 09.09.13, 9:59) *
Как раз с массивом и работает. Как-то так должно быть:

|ГДЕ
|    ЗаказВПроизводство.Ссылка НЕ В (&МассивСсылок)

Спасибо попробую. Хотя я думал, что ТЗ - тоже массив.

Автор: Vofka 09.09.13, 9:34

Цитата(alexkhua @ 09.09.13, 10:24) *
Хотя я думал, что ТЗ - тоже массив.

faceoff.gif

Автор: alexkhua 09.09.13, 9:55

Цитата(Vofka @ 09.09.13, 10:34) http://pro1c.org.ua/index.php?act=findpost&pid=74238

Автор: Vofka 09.09.13, 10:04

Цитата(alexkhua @ 09.09.13, 10:55) *
просто читал тут

Ключевая фраза двумерный.

Автор: alexkhua 09.09.13, 16:29

Цитата(Vofka @ 09.09.13, 11:04) *
Ключевая фраза двумерный.

Ключевое тут оказалось:
|ГДЕ
|    ЗаказВПроизводство.Ссылка НЕ В (&


Так работает и с ТЗ и со Списком и с Массивом, проверил все варианты.

Автор: logist 09.09.13, 16:36

Само решение задачи совершенно фиговое. Зачем создавать пустую таблицу с типизированной колонкой, что бы сравнивать с пустой ссылкой? Ведь это можно сделать в запросе

| ГДЕ ЗаказВПроизводство.Ссылка <> ЗНАЧЕНИЕ(Документ.ЗаказВПроизводство.ПустаяСсылка)

А если и собираетесь искать ссылку между ссылками, то практичней сделать массив ссылок, но какой сакральный смысл в ТЗ? Только по тому, что по другому не умете?

udp: а еще, если у вас первый результат ТЗ все таки возвращает колонку ссылок, то почему не сделать это все одним запросом, с временными таблицами?

Автор: alexkhua 09.09.13, 16:42

Цитата(logist @ 09.09.13, 17:36) *
Само решение задачи совершенно фиговое. Зачем создавать пустую таблицу с типизированной колонкой, что бы сравнивать с пустой ссылкой? Ведь это можно сделать в запросе
| ГДЕ ЗаказВПроизводство.Ссылка <> ЗНАЧЕНИЕ(Документ.ЗаказВПроизводство.ПустаяСсылка)

А если и собираетесь искать ссылку между ссылками, то практичней сделать массив ссылок, но какой сакральный смысл в ТЗ? Только по тому, что по другому не умете?

udp: а еще, если у вас первый результат ТЗ все таки возвращает колонку ссылок, то почему не сделать это все одним запросом, с временными таблицами?

Из общего списка документов ЗаказВПроизводство мне нужно выбрать только те, на которые нет ссылок в других документах.

Автор: Vofka 09.09.13, 16:43

Цитата(logist @ 09.09.13, 17:36) *
А если и собираетесь искать ссылку между ссылками, то практичней сделать массив ссылок, но какой сакральный смысл в ТЗ? Только по тому, что по другому не умете?
udp: а еще, если у вас первый результат ТЗ все таки возвращает колонку ссылок, то почему не сделать это все одним запросом, с временными таблицами?

Человек учится, поэтому многих вещей ещё не знает wink.gif

alexkhua, в общем, если надо проверить на вхождение (не вхождение) в список ссылок - то используйте массив. Таблица значений для других целей предназначена.

Автор: alexkhua 09.09.13, 16:52

Цитата(Vofka @ 09.09.13, 17:43) *
Человек учится, поэтому многих вещей ещё не знает wink.gif

alexkhua, в общем, если надо проверить на вхождение (не вхождение) в список ссылок - то используйте массив. Таблица значений для других целей предназначена.

Хорошо, спасибо.

Автор: alexkhua 09.09.13, 21:03

Vofka, объясните, пожалуйста, что плохого в том что б использовать ТЗ в параметре (просто для моего понимания). Я порылся на просторах интернета и нашел много таких примеров (например, тут http://pro1c.org.ua/redirect.php?http://zapros-1c-8.ru/9-yazik-zaprosov-1c-8/13-params). К тому же в ТЗ есть возможность типизировать колонки. Т.к. в моем случае при использовании массива выдало ошибку про несоответствие типов в сравниваемых значениях, я решил использовать именно ТЗ.

Автор: Vofka 10.09.13, 8:07

Как минимум в сложности использования, в данном случае. Насчет производительности ничего говорить не буду, т.к. не проверял. Как отрабатывает условие ЗаказВПроизводство.Ссылка <> &ТЗ - я затрудняюсь сказать и, сомневаюсь в работоспособности такого варианта вообще. Спорить не буду, возможно, каким-то чудом оно и отрабатывает, но мне проверять не охота. Так вот вариант с массивом - это, я бы сказал, стандарт что ли. Если надо првоверить на условие вхождения в какой-то список - надо использовать массив либо список значений. Надо это взять за правило и с этим жить smile.gif

Автор: alexkhua 10.09.13, 8:12

Цитата(Vofka @ 10.09.13, 9:07) *
.........Надо это взять за правило и с этим жить smile.gif

Ясно. Спасибо.

Автор: logist 10.09.13, 8:23

Цитата(alexkhua @ 09.09.13, 22:03) http://pro1c.org.ua/index.php?act=findpost&pid=74273
и нашел много таких примеров

Пример использования ТЗ в качестве параметра совершенно не говорит о том, что обязательно надо использовать везде, там описано лишь КАК использовать, а не для чего.

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua