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

1с как показать таблицу значений

  • автор:

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 штук

Так как таблица значений недоступна на клиенте, для отображения таблицы на форме необходимо использовать метод ЗначениеВДанныеФормы(ТаблицаСДанными, ТаблицаНаФорме)

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

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