Поиск по блогу

среда, 10 августа 2016 г.

Загрузка данных табличного документа в таблицу значений

Возникают ситуации, когда требуется считать данные с табличного документа и обработать их. Читать табличный документ по ячейкам утомительно и медленно, но существует способ чтения области ячеек в таблицу значений.

Способ основывается на использовании объекта ПостроительОтчета - это объект, позволяющий на основе заданного текста запроса или источника данных, а так же настроек, получить результат и вывести его в табличный документ или диаграмму.

Описание способа

1. Получаем область ячеек табличного документа, которую требуется поместить в таблицу значений. Получение области нужно задавать таким образом, что бы в неё входила строка заголовков колонок (см. рисунок 1), особенность работы объекта ПостроительОтчета.

ОбластьЯчеек = ТабДокумент.Область(1, 1, ПоследняяСтрока, ПоследняяКолонка);

Рисунок 1. Область ячеек табличного документа

2. На основе области ячеек табличного документа создаем описание источника данных.

ИсточникДанных = Новый ОписаниеИсточникаДанных(ОбластьЯчеек);

3. Создаем объект ПостроительОтчета, указываем источник данных вместо текста запроса и выполняем построение отчета.

ПостроительОтчета = Новый ПостроительОтчета;
ПостроительОтчета.ИсточникДанных = ИсточникДанных;
ПостроительОтчета.Выполнить();


Результат чтения данных из источника после вызова метода Выполнить() находится в свойстве Результат. Данное свойство содержит объект типа РезультатЗапроса, объект такого же типа возвращается при выполнении запроса.

4. Выгрузим  результат в таблицу значений (см. рисунок 2), вызвав метод Выгрузить() объекта типа РезультатЗапроса.

ТабЗначений = ПостроительОтчета.Результат.Выгрузить();

Рисунок 2. Таблица значений, созданная на основании табличного документа
Из очевидных минусов, значения колонок строкового типа. Так же объект ПостроительОтчета доступен только на сервере, придется гнать табличный документа с клиента на сервер.

Итоговый программный код

Функция ПреобразоватьТабличныйДокументВТаблицуЗначений(ТабДокумент)
ПоследняяСтрока = ТабДокумент.ВысотаТаблицы;
ПоследняяКолонка = ТабДокумент.ШиринаТаблицы;
ОбластьЯчеек = ТабДокумент.Область(1, 1, ПоследняяСтрока, ПоследняяКолонка);
// Создаем описание источника данных на основании области ячеек табличного документа.
ИсточникДанных = Новый ОписаниеИсточникаДанных(ОбластьЯчеек);
// Создаем объект для интеллектуального построения отчетов,
// указываем источник данных и выполняем построение отчета.
ПостроительОтчета = Новый ПостроительОтчета;
ПостроительОтчета.ИсточникДанных = ИсточникДанных;
ПостроительОтчета.Выполнить();
// Результат выгружаем в таблицу значений.
ТабЗначений = ПостроительОтчета.Результат.Выгрузить();
Возврат ТабЗначений
КонецФункции


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

8 комментариев:

  1. Спасибо за информацию!

    ОтветитьУдалить
  2. Анонимный22 июня 2018 г., 12:48

    Шикарно! Спасибо)

    ОтветитьУдалить
  3. Анонимный19 июля 2018 г., 17:47

    Спасибо!!! Полезно!

    ОтветитьУдалить
  4. Отлично!
    А еще возможно из Таблицы значений выгрузить данные в табличный документ через Построитель отчета

    ОтветитьУдалить
  5. ТекстЗапроса = "ВЫБРАТЬ * ИЗ Справочник.Пользователи";
    ЗапросаДанных = Новый Запрос(ТекстЗапроса);
    РезЗапроса = ЗапросаДанных.Выполнить();

    ТабДокумент = Новый ТабличныйДокумент;
    Построитель = Новый ПостроительОтчета;
    Построитель.ИсточникДанных=Новый ОписаниеИсточникаДанных(РезЗапроса);
    Построитель.ВыводитьЗаголовокОтчета = Ложь;
    Построитель.ВыводитьШапкуТаблицы = Ложь;
    Построитель.ВыводитьПодвалОтчета = Ложь;
    Построитель.ЗаполнениеРасшифровки = ВидЗаполненияРасшифровкиПостроителяОтчета.Расшифровка;
    Построитель.Вывести(ТабДокумент);
    ТабДокумент.ТолькоПросмотр = Истина;
    ТабДокумент.Показать("Пользователи");

    ОтветитьУдалить