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