Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: ТЗ в параметр запроса
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.2 > Программирование обычных форм 1С 8.2 и не интерфейсной логики
alexkhua
Не могу передать в параметр запроса Таблицу значений. Что тут не так?
 ТЗ = Новый ТаблицаЗначений();
         ТЗ.Колонки.Добавить("ДокументСсылка"  , Новый ОписаниеТипов ("ДокументСсылка.ЗаказВПроизводство"));
        
        
        
        
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    НарядЗаказ.Основание.Ссылка КАК ДокументСсылка
        |ИЗ
        |    Документ.НарядЗаказ КАК НарядЗаказ
        |ГДЕ
        |    НарядЗаказ.Основание.Ссылка <> &Пустая
        |
        |ОБЪЕДИНИТЬ ВСЕ
        |
        |ВЫБРАТЬ
        |    НарядЗаказДвери.Основание.Ссылка
        |ИЗ
        |    Документ.НарядЗаказДвери КАК НарядЗаказДвери
        |ГДЕ
        |    НарядЗаказДвери.Основание.Ссылка = &Пустая";
        
        Запрос.УстановитьПараметр("Пустая","");

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



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

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

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

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

    Пока Выборка.Следующий() Цикл
    Сообщить(Выборка.Ссылка);
    КонецЦикла;
alex040269
Цитата(alexkhua @ 08.09.13, 19:39) необходимо зарегистрироваться для просмотра ссылки
ЗаказВПроизводство.Ссылка <> &ТЗ

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

Спасибо, попробую. Но я не пойму почему типы в сравн. значениях не соответствуют???
Ardi
потому что массив или список значений.
alexkhua
Цитата(Ardi @ 09.09.13, 0:41) необходимо зарегистрироваться для просмотра ссылки
потому что массив или список значений.

С массивом тоже не работает. Или что?
Vofka
Цитата(alexkhua @ 09.09.13, 9:33) необходимо зарегистрироваться для просмотра ссылки
Или что?

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

|ГДЕ
|    ЗаказВПроизводство.Ссылка НЕ В (&МассивСсылок)
alexkhua
Цитата(Vofka @ 09.09.13, 9:59) необходимо зарегистрироваться для просмотра ссылки
Как раз с массивом и работает. Как-то так должно быть:

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

Спасибо попробую. Хотя я думал, что ТЗ - тоже массив.
Vofka
Цитата(alexkhua @ 09.09.13, 10:24) необходимо зарегистрироваться для просмотра ссылки
Хотя я думал, что ТЗ - тоже массив.

faceoff.gif
alexkhua
Цитата(Vofka @ 09.09.13, 10:34) необходимо зарегистрироваться для просмотра ссылки
faceoff.gif

Не буду дальше спорить, просто читал тут:
Цитата
Таблица значений - это двумерный массив в 1С, который предназначен для хранения и обработки промежуточных данных, возникающих в процессе работы программы. Таблица значений часто применяется при программировании на 1С, потому что имеет множество полезных возможностей и работает очень быстро. Таблица значений создается в памяти и не сохраняется в базе данных, т.е. это временный набор данных.
необходимо зарегистрироваться для просмотра ссылки
Vofka
Цитата(alexkhua @ 09.09.13, 10:55) необходимо зарегистрироваться для просмотра ссылки
просто читал тут

Ключевая фраза двумерный.
alexkhua
Цитата(Vofka @ 09.09.13, 11:04) необходимо зарегистрироваться для просмотра ссылки
Ключевая фраза двумерный.

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


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

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

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

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

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

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

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

alexkhua, в общем, если надо проверить на вхождение (не вхождение) в список ссылок - то используйте массив. Таблица значений для других целей предназначена.
alexkhua
Цитата(Vofka @ 09.09.13, 17:43) необходимо зарегистрироваться для просмотра ссылки
Человек учится, поэтому многих вещей ещё не знает wink.gif

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

Хорошо, спасибо.
alexkhua
Vofka, объясните, пожалуйста, что плохого в том что б использовать ТЗ в параметре (просто для моего понимания). Я порылся на просторах интернета и нашел много таких примеров (например, тут необходимо зарегистрироваться для просмотра ссылки. К тому же в ТЗ есть возможность типизировать колонки. Т.к. в моем случае при использовании массива выдало ошибку про несоответствие типов в сравниваемых значениях, я решил использовать именно ТЗ.
Vofka
Как минимум в сложности использования, в данном случае. Насчет производительности ничего говорить не буду, т.к. не проверял. Как отрабатывает условие ЗаказВПроизводство.Ссылка <> &ТЗ - я затрудняюсь сказать и, сомневаюсь в работоспособности такого варианта вообще. Спорить не буду, возможно, каким-то чудом оно и отрабатывает, но мне проверять не охота. Так вот вариант с массивом - это, я бы сказал, стандарт что ли. Если надо првоверить на условие вхождения в какой-то список - надо использовать массив либо список значений. Надо это взять за правило и с этим жить smile.gif
alexkhua
Цитата(Vofka @ 10.09.13, 9:07) необходимо зарегистрироваться для просмотра ссылки
.........Надо это взять за правило и с этим жить smile.gif

Ясно. Спасибо.
logist
Цитата(alexkhua @ 09.09.13, 22:03) необходимо зарегистрироваться для просмотра ссылки
Т.к. в моем случае при использовании массива выдало ошибку про несоответствие типов

Значит у вас код не правильно составлен, раз позволяет для проверки однотипных значений допускать в массив другие типы. Я уже выше написал, возможно в вашей задаче можно обойтись вообще одним запросом.

Цитата(alexkhua @ 09.09.13, 22:03) необходимо зарегистрироваться для просмотра ссылки
и нашел много таких примеров

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