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