Таблица значений как параметр запроса
Перейти к содержимому

Таблица значений как параметр запроса

  • автор:

Таблица значений как параметр запроса

Создала таблицу значений, типизировала колонки, передала таблицу в качестве параметра в запрос. Проблема в том, что в запросе я не могу обратиться к реквизитам таблицы через точку. ТаблицаДанных.ПодразделениеОрганизации — нормально, а ТаблицаДанных.ПодразделениеОрганизации.Родитель — «Поле не найдено». Можно ли как-то с этим бороться? Заранее спасибо.

Можно. Делаем пакет запросов.

1) Запросом ТЗ во временную таблицу оператором ПОМЕСТИТЬ,
2) Обращаемся к полям временной таблицы

ВНИМАНИЕ: поля должны быть типизированы в ТЗ.
Фотку можно прислать на мыло))

Можно. Явно типизируй исходную таблицу, положи в вт и обращайся себе.
В Таблице Значений есть колонка в которой содержится информация о «Родителе» подразделения?
выбрать * из &ПараметрТЗ поместить ПараметрВТ
;
// далее — оперируй с ПараметрВТ
(0) В отладчике «.Родитель» что показывает?

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

ТаблицаДанных = Новый ТаблицаЗначений;
ТаблицаДанных.Колонки.Добавить(«ПодразделениеОрганизации», Новый ОписаниеТипов(«СправочникСсылка.ПодразделенияОрганизаций»));

Таблица значений как параметр запроса

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

(0) ну показывай, что ли, что уже сделал
типизировать нужно
Код в студию и дальше будем думать.
МВТ объявил?
(2) скорее всего, конечно, да, но хочется всё-таки посмотреть, что автор уже наваял

(0) Нет.
Нужно предварительно написать по собственному желанию и не заниматься больше 1С. Никогда.

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

(6) Ты жесток..

(7) Я.
Жесток автор, который занимается 8-ой уже 3 . года и задает вопросы, вот такие
http://www.forum.mista.ru/index.php?user_id=6293

Жесток, бессмысленен и беспощаден.
К пользователям, руководителям и самому себе.

А потом говорят «Ваша 1 гамно».

(6) + 1 адский прогер задаёт постоянно сильнейшие вопросы.
(7) ни чуть, я боюсь за пользователей, которые потом пользуются его наработками.

(9) «которые потом пользуются его наработками» — вот бы посмотреть, что здесь начнется.
набросились окаянные. может человек консультант, а дядька заставляет прогать ещё
(11) 3 года.
Атъ и Израелъ.
(12) 8 лет — уже из Израеля
(11) за 8 лет уж и консультанту как-то не по консультански
на фото ведь видно, как он с пользователями общается.
(2) что нужно типизировать?

Процедура КоманднаяПанель2ВывестиТаблицу(Кнопка)
Запрос = Новый Запрос;
МенеджерВТ = Новый МенеджерВременныхТаблиц;
Запрос.МенеджерВременныхТаблиц = МенеджерВТ;
Запрос.Текст ;
Запрос.УстановитьПараметр(«Данные»,Контрагенты);
Рез = Запрос.Выполнить();
Если Не Рез.Пустой() Тогда
Выборка = Рез.Выбрать();
Пока Выборка.Следующий() Цикл
Сообщить(Выборка.Контрагент);
КонецЦикла;
КонецЕсли;
КонецПроцедуры

ТЗ = ТЗизФормы.Выгрузить();
ЗапросКбазеДанных.УстановитьПараметр(«ТЗ», ТЗ);
(21) то есть так можно делать не используя менеджер временных таблиц?

естественно необходимо использовать временные таблицы

ЗапросКбазеДанных = Новый Запрос;
МенеджерТаблицыДанных = ЗапросКбазеДанных.МенеджерВременныхТаблиц;
ЗапросКбазеДанных.МенеджерВременныхТаблиц = МенеджерТаблицыДанных;
ЗапросКбазеДанных.Текст ;
ТЗ = ТЗизФормы.Выгрузить();
ЗапросКбазеДанных.УстановитьПараметр(«ТЗ», ТЗ);

(23) можно и без них

Запрос = Новый Запрос;
Запрос.Текст ;
Запрос.УстановитьПараметр(«Тз», Контрагенты.ВыгрузитьКолонку(«Контрагент»));
Рез = Запрос.Выполнить();
Если Не Рез.Пустой() Тогда
Выборка = Рез.Выбрать();
Пока Выборка.Следующий() Цикл
Сообщить(«Без использования менеджера временных таблиц: » + Выборка.Ссылка);
КонецЦикла;
КонецЕсли;

(23) а вот это не работает ТЗ = ТЗизФормы.Выгрузить();
нет такого метода у таблицы значений в 1с 8.2, это вы из 7.7 ?

[CODE] Таблица значений в качестве параметра в запрос (Программно 1С)

Иногда нужен запрос по таблице значений. В данном примере код выполняется до записи документа, поэтому список товаров по ссылке еще не существует. Закинем ее во временную таблицу запроса и обработаем.

Важно, если не выразить значение как нужный нам тип, консоль запросов не будет открываться.

Запрос.Текст = "ВЫБРАТЬ | ВЫРАЗИТЬ(ТаблицаТовары.Номенклатура КАК Справочник.Номенклатура) КАК Номенклатура, | ТаблицаТовары.Количество КАК Количество, | ТаблицаТовары.НомерСтроки КАК НомерСтроки |ПОМЕСТИТЬ ВремТаб |ИЗ | &ТаблицаТовары КАК ТаблицаТовары |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | СУММА(ВЫБОР | КОГДА ЗаявкаНаПеревозкуТовары.Номенклатура.Европаллета > 0 | ТОГДА ОКР(1 / ЗаявкаНаПеревозкуТовары.Номенклатура.Европаллета * ЗаявкаНаПеревозкуТовары.Количество + 0.4999, 0) | ИНАЧЕ 0 | КОНЕЦ) КАК РасчетныйЕвропалетСОкруглением, | МАКСИМУМ(ЗаявкаНаПеревозкуТовары.НомерСтроки) КАК Строк |ИЗ | ВремТаб КАК ЗаявкаНаПеревозкуТовары"; Запрос.УстановитьПараметр("ТаблицаТовары", Товары.Выгрузить()); РезультатЗапроса = Запрос.Выполнить(); Выборка = РезультатЗапроса.Выбрать(); Пока Выборка.Следующий() Цикл 

Количество показов: 443
Дата изменения: 05.12.2023 08:20:58

Таблица значений как параметр запроса

Загрузка. Пожалуйста, подождите.

X

Сообщение сайта

(Сообщение закроется через 2 секунды)

alexkhua —> alexkhua

Просмотр профиля

Найти сообщения пользователя

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

 ТЗ = Новый ТаблицаЗначений(); 
ТЗ.Колонки.Добавить("ДокументСсылка" , Новый ОписаниеТипов ("ДокументСсылка.ЗаказВПроизводство"));




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

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

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

//////////////////////////////////////////////////////////////////////////////////////////////////




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

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

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

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

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

ipsclass->input[‘t’] тема —>

alex040269 —> alex040269

Просмотр профиля

Найти сообщения пользователя

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

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

Никогда не бойся делать то, что не умеешь, помни — Ноев ковчег был построен любителем, профессионалы построили Титаник.
ЗиУП

ipsclass->input[‘t’] тема —>

alexkhua —> alexkhua

Просмотр профиля

Найти сообщения пользователя

08.09.13, 20:50
Цитата(alex040269 @ 08.09.13, 21:25)

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

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

ipsclass->input[‘t’] тема —>

Ardi —> Ardi

Просмотр профиля

Найти сообщения пользователя

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *