Общее·количество·просмотров·страницы

четверг, 10 октября 2013 г.

Передача в запрос таблицы значений, табличной части

В качестве параметров запроса 1С может выступать таблица значений и табличные части документа, очень полезный инструмент на мой взгляд. Итак таблица значений будет выступать в роли внешнего источника данных, сразу проясним несколько моментов все колонки в таблие значений должны быть строго типизированы иначе на выходе получим сообщение об ошибке "Тип не может быть выбран в запросе!". Типизируем колонки нашей ТЗ,
 можно в коде:
ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("Номенклатура",ОписаниеТиповС);
ТЗ.Колонки.Добавить("Количество",ОписаниеТиповЧ);
Можно добавить на форму реквизит с типом "ТаблицаЗначений", добавить колонки  и там же их типизировать.
 
Для понимания сути сделал небольшую обработку пример:
&НаКлиенте
Процедура ПередатьВЗапрос(Команда)
 ПередатьВЗапросНаСервере(ТЗ);
КонецПроцедуры
 

&НаСервереБезКонтекста
Процедура ПередатьВЗапросНаСервере(ТабДок)

 ТЗВЗапрос = ДанныеФормыВЗначение(ТабДок,Тип("ТаблицаЗначений"));
 МенеджерВТ = Новый МенеджерВременныхТаблиц;
 Запрос = Новый Запрос;
 Запрос.МенеджерВременныхТаблиц = МенеджерВТ;
 Запрос.Текст = "ВЫБРАТЬ
                | Источник.Номенклатура КАК Номенклатура,
                | Источник.Количество КАК Остаток
                |ПОМЕСТИТЬ Товары
                |ИЗ
                | &ВнешнийИсточник КАК Источник";
 Запрос.УстановитьПараметр("ВнешнийИсточник",ТЗВЗапрос);
 Запрос.Выполнить();
 Запрос2 = Новый Запрос;
 Запрос2.МенеджерВременныхТаблиц = МенеджерВТ;
 Запрос2.Текст = "ВЫБРАТЬ
                 | Товары.Номенклатура,
                 | Товары.Остаток
                 |ИЗ
                 | Товары КАК Товары";
 ВыборкаЗапроса = Запрос2.Выполнить().Выбрать();
 Пока ВыборкаЗапроса.Следующий() Цикл
  Сообщить(ВыборкаЗапроса.Номенклатура);
  Сообщить(ВыборкаЗапроса.Остаток);
 КонецЦикла;
КонецПроцедуры
 
Здесь в качестве таблицы значений использовал размещенный на форме реквизит. Процедурой ДанныеФормыВЗначение приводим нашу таблицу к типу "ТаблицаЗначений". Обязательно указываем в запросе менеджер временных таблиц т.к. планирую использовать ее в другом запросе, поскольку 1С устанавливает некоторые ограничения на внешние источники данных, нельзя использовать операции группировки, объединения и соединения и др. В теле первого запроса вывожу поля из внешнего источника и помещаю их в виртуальную таблицу "Товары". Второму запросу присваиваем менеджер таблиц и в запросе выбираем из него поля. Вот так обработали всю таблицу.

Комментариев нет:

Отправить комментарий