Версия для печати темы (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)
Хотя я думал, что ТЗ - тоже массив.
Автор: 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: а еще, если у вас первый результат ТЗ все таки возвращает колонку ссылок, то почему не сделать это все одним запросом, с временными таблицами?
Человек учится, поэтому многих вещей ещё не знает
alexkhua, в общем, если надо проверить на вхождение (не вхождение) в список ссылок - то используйте массив. Таблица значений для других целей предназначена.
Автор: alexkhua 09.09.13, 16:52
Цитата(Vofka @ 09.09.13, 17:43)
Человек учится, поэтому многих вещей ещё не знает
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
Как минимум в сложности использования, в данном случае. Насчет производительности ничего говорить не буду, т.к. не проверял. Как отрабатывает условие ЗаказВПроизводство.Ссылка <> &ТЗ - я затрудняюсь сказать и, сомневаюсь в работоспособности такого варианта вообще. Спорить не буду, возможно, каким-то чудом оно и отрабатывает, но мне проверять не охота. Так вот вариант с массивом - это, я бы сказал, стандарт что ли. Если надо првоверить на условие вхождения в какой-то список - надо использовать массив либо список значений. Надо это взять за правило и с этим жить
Автор: alexkhua 10.09.13, 8:12
Цитата(Vofka @ 10.09.13, 9:07)
.........Надо это взять за правило и с этим жить
Ясно. Спасибо.
Автор: 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