1с как показать таблицу значений
Описание:
Таблица значений — это несохраняемый в базе данных объект, который позволяет строить динамические наборы значений и манипулировать ими (добавлять, редактировать, удалять элементы, сортировать). Он может быть наполнен значениями любого типа, т.е. в одной таблице типы хранимых значений могут быть разными. Одним из примеров использования данного объекта может служить организация представления в форме списка элементов справочника, отобранных по сложному алгоритму.
Необходимо отметить, что таблица значений, связанная с элементом управления ТабличноеПоле, будет иметь все колонки, имеющиеся в табличном поле, с соответствующими именами. Кроме того, таблица значений может иметь также и собственные колонки, не отображаемые в табличном поле, при этом их имена должны отличаться от имен колонок табличного поля.
Элементы коллекции: СтрокаТаблицыЗначений
Для объекта доступен обход коллекции посредством оператора Для каждого … Из … Цикл. При обходе выбираются элементы коллекции.
Возможно обращение к элементу коллекции посредством оператора [. ]. В качестве аргумента передается индекс строки (нумерация с 0).
1С 8.3 Выводим на форму Таблицу значений — Программист 1С Минск. Автоматизация бизнеса.
// Функционал данного механизма служит для программного вывода «Таблицы значений»
// в реквизит управляемой формы с типом «ДанныеФормыКоллекция». Может быть полезен
// в задачах, где состав колонок выгружаемой таблицы значений может меняться.
// Механизм предусматривает работу как с реквизитом объекта, так и с реквизитом формы.
// Также реализована возможность быстрого добавления колонки «Отметка» и настройки доступности кнопок полей.
// Процедура должна быть размещена в модуле формы.
Если ТипЗнч ( ТаблицаЗначенийДляВывода ) = Тип ( «ТаблицаЗначений» ) Тогда
Если ТипЗнч ( ИмяРеквизитаФормы ) = Тип ( «Строка» ) Тогда
// Опрелеляем является заполняемый реквизит, реквизитом объекта или реквизитом формы
Если Объект . Свойство ( ИмяРеквизитаФормы ) И ТипЗнч ( Объект [ ИмяРеквизитаФормы ]) = Тип ( «ДанныеФормыКоллекция» ) Тогда
ПутьКДаннымФормыКоллекция = «Объект.» + ИмяРеквизитаФормы ;
ОбъектДляОтображенияНаФорме = РеквизитФормыВЗначение ( «Объект.» + ИмяРеквизитаФормы );
ЭтоРеквизитОбъекта = Истина;
ИначеЕсли ТипЗнч ( ЭтаФорма [ ИмяРеквизитаФормы ]) = Тип ( «ДанныеФормыКоллекция» ) Тогда
ПутьКДаннымФормыКоллекция = ИмяРеквизитаФормы ;
ОбъектДляОтображенияНаФорме = РеквизитФормыВЗначение ( ИмяРеквизитаФормы , Тип ( «ТаблицаЗначений» ));
ЭтоРеквизитОбъекта = Ложь;
КонецЕсли;
КонецЕсли;
МассивУдаляемыхРеквизитов = Новый Массив ;
МассивДобавляемыхРеквизитов = Новый Массив ;
МассивИсключаемыхРеквизитов = Новый Массив ;
// Формируем массив колонок для удаления
Для Каждого Колонка Из ОбъектДляОтображенияНаФорме . Колонки Цикл
МассивУдаляемыхРеквизитов . Добавить ( ПутьКДаннымФормыКоллекция + «.» + Колонка . Имя );
КонецЦикла;
// Удаляем колонки с формы
Для Каждого Колонка Из ОбъектДляОтображенияНаФорме . Колонки Цикл
ЭлементКолонки = Элементы . Найти ( ИмяРеквизитаФормы + Колонка . Имя );
Если НЕ ЭлементКолонки = Неопределено Тогда
Элементы . Удалить ( ЭлементКолонки );
КонецЕсли;
КонецЦикла;
// Добавляем колонку «Отметка»
Если ИспользованиеКолонкиОтметка Тогда
НоваяКолонка = Новый РеквизитФормы ( «Отметка» , Новый ОписаниеТипов ( «Булево» ), ПутьКДаннымФормыКоллекция );
МассивДобавляемыхРеквизитов . Добавить ( НоваяКолонка );
КонецЕсли;
// Формируем массив колонок из таблицы значений
Для Каждого Колонка Из ТаблицаЗначенийДляВывода . Колонки Цикл
Если Колонка . ТипЗначения . Типы (). Найти ( Тип ( «Тип» )) = Неопределено Тогда
НоваяКолонка = Новый РеквизитФормы ( Колонка . Имя , Новый ОписаниеТипов ( Колонка . ТипЗначения . Типы ()), ПутьКДаннымФормыКоллекция );
МассивДобавляемыхРеквизитов . Добавить ( НоваяКолонка );
Иначе
Сообщить ( «Колонка » + Строка ( Колонка . Имя ) + » с типом: не может быть выгружена» );
МассивИсключаемыхРеквизитов . Добавить ( Колонка );
КонецЕсли;
КонецЦикла;
// Обновляем реквизиты формы
ИзменитьРеквизиты ( МассивДобавляемыхРеквизитов , МассивУдаляемыхРеквизитов );
//Создаем элементы на форме для отображения колонок
ЭлементТЗ = Элементы [ ИмяРеквизитаФормы ];
// Добавляем колонку «Отметка»
Если ИспользованиеКолонкиОтметка Тогда
НовыйЭлементФормы = Элементы . Добавить ( ИмяРеквизитаФормы + «Отметка» , Тип ( «ПолеФормы» ), ЭлементТЗ );
НовыйЭлементФормы . Вид = ВидПоляФормы . ПолеФлажка ;
НовыйЭлементФормы . ПутьКДанным = ПутьКДаннымФормыКоллекция + «.» + «Отметка» ;
НовыйЭлементФормы . РежимРедактирования = РежимРедактированияКолонки . ВходПриВводе ;
КонецЕсли;
// Добавляем колонки из таблицы
Для Каждого Колонка Из ТаблицаЗначенийДляВывода . Колонки Цикл
Если МассивИсключаемыхРеквизитов . Найти ( Колонка ) = Неопределено Тогда
НовыйЭлементФормы = Элементы . Добавить ( ИмяРеквизитаФормы + Колонка . Имя , Тип ( «ПолеФормы» ), ЭлементТЗ );
НовыйЭлементФормы . Вид = ВидПоляФормы . ПолеВвода ;
// Устанавливаем доступность кнопок
Если ТолькоКнопкаОткрытия Тогда
НовыйЭлементФормы . РедактированиеТекста = Ложь;
НовыйЭлементФормы . ВыбиратьТип = Ложь;
НовыйЭлементФормы . КнопкаВыбора = Ложь;
НовыйЭлементФормы . КнопкаВыпадающегоСписка = Ложь;
НовыйЭлементФормы . КнопкаОткрытия = Истина;
НовыйЭлементФормы . КнопкаОчистки = Ложь;
Иначе
НовыйЭлементФормы . РедактированиеТекста = Истина;
НовыйЭлементФормы . ВыбиратьТип = Истина;
НовыйЭлементФормы . КнопкаВыбора = Истина;
НовыйЭлементФормы . КнопкаВыпадающегоСписка = Истина;
НовыйЭлементФормы . КнопкаОткрытия = Истина;
НовыйЭлементФормы . КнопкаОчистки = Истина;
КонецЕсли;
НовыйЭлементФормы . КнопкаРегулирования = Ложь;
НовыйЭлементФормы . КнопкаСоздания = Ложь;
НовыйЭлементФормы . КнопкаСпискаВыбора = Ложь;
НовыйЭлементФормы . ИсторияВыбораПриВводе = ИсторияВыбораПриВводе . НеИспользовать ;
НовыйЭлементФормы . БыстрыйВыбор = Ложь;
НовыйЭлементФормы . ПутьКДанным = ПутьКДаннымФормыКоллекция + «.» + Колонка . Имя ;
КонецЕсли;
КонецЦикла;
// Загружаем таблицу значений в данные формы коллекцию
Если ЭтоРеквизитОбъекта Тогда
Объект [ ИмяРеквизитаФормы ]. Загрузить ( ТаблицаЗначенийДляВывода );
Иначе
ЭтаФорма [ ИмяРеквизитаФормы ]. Загрузить ( ТаблицаЗначенийДляВывода );
КонецЕсли;
Иначе
Сообщить ( «Выводить можно только таблицу значений» );
КонецЕсли;
Исключение
ОбщегоНазначенияКлиентСервер . СообщитьПользователю ( ОписаниеОшибки ());
КонецПопытки;
Вывод таблицы значений в табличный документ
Периодически возникает потребность показать пользователю таблицу значений и в большинстве случаев нет необходимости делать отдельный макет.
Такой вывод можно реализовать с помощью ПостроителяОтчетов быстро и очень просто.
После того, как табличный документ был получен, мы можем показать его пользователю:
Похожие записи
Опубликовано Алексей
2 ответа к «Вывод таблицы значений в табличный документ»
Добрый день.
У Вас указана “Процедура ДанныеТаблицыЗначенийВТабличныйДокумент(ДанныеВТабличныйДокумент)”, но это функция
Таблица значений
Таблица значений это один из самых частых используемых коллекций и одна из самых удобных. Используется для хранения данных разных объемов, как больших так и маленьких.
Внимание. Таблица значений доступна только на сервере.
Таблицу значений можно характеризовать следующими свойствами:
Таблица значений представляет широкий выбор возможностей для обработки ее значений:
Создание и использование
Создание таблицы значений происходит с помощью метода Новый:
Так как колонки таблицы значений это коллекция, для нее доступен не только метод добавить но и остальные методы характерные для коллекций(Найти, Вставить, Удалить).
При определении колонки кроме имени можно указать ее тип, заголовок и ширину колонки. Последние два параметра необходимы для уточнения как будет выглядеть таблица на форме. Тип колонки задается совершенно не очевидно, для этого в качестве параметра, нужно передать значение с типом ОписаниеТипов . Более детальный синтаксис можно посмотреть здесь: Общие объекты->Описание типов значений, но к примеру если просто нужен тип справочник номенклатура то проще его будет указать так:
Добавление строк в Таблицу значений происходит с помощью метода Добавить() или Вставить(), чем они отличаются вы наверняка знаете, добавление происходит следующим образом:
Другие часто используемые операторы при работе с таблицей значений
№ пп | Номенклатура | Количество |
---|---|---|
1 | Лопата | 5 |
2 | Вилы | 6 |
3 | Грабли | 9 |
4 | Лопата | 4 |
5 | Грабли | 2 |
Итого 26 штук |
После метода Свернуть Таблица.Свернуть("Номенклатура", "Количество"); мы получим вот такую таблицу:
№ пп | Номенклатура | Количество |
---|---|---|
1 | Лопата | 9 |
2 | Вилы | 6 |
3 | Грабли | 11 |
Итого 26 штук |
Так как таблица значений недоступна на клиенте, для отображения таблицы на форме необходимо использовать метод ЗначениеВДанныеФормы(ТаблицаСДанными, ТаблицаНаФорме)