Загрузка данных табличного документа в таблицу значений
Возникают ситуации, когда требуется считать данные с табличного документа и обработать их. Читать табличный документ по ячейкам утомительно и медленно, но существует способ чтения области ячеек в таблицу значений.
Способ основывается на использовании объекта ПостроительОтчета - это объект, позволяющий на основе заданного текста запроса или источника данных, а так же настроек, получить результат и вывести его в табличный документ или диаграмму.
Описание способа
1. Получаем область ячеек табличного документа, которую требуется поместить в таблицу значений. Получение области нужно задавать таким образом, что бы в неё входила строка заголовков колонок (см. рисунок 1), особенность работы объекта ПостроительОтчета.
2. На основе области ячеек табличного документа создаем описание источника данных.
3. Создаем объект ПостроительОтчета, указываем источник данных вместо текста запроса и выполняем построение отчета.
4. Выгрузим результат в таблицу значений (см. рисунок 2), вызвав метод Выгрузить() объекта типа РезультатЗапроса.
Из очевидных минусов, значения колонок строкового типа. Так же объект ПостроительОтчета доступен только на сервере, придется гнать табличный документа с клиента на сервер.
Итоговый программный код
Способ основывается на использовании объекта ПостроительОтчета - это объект, позволяющий на основе заданного текста запроса или источника данных, а так же настроек, получить результат и вывести его в табличный документ или диаграмму.
Описание способа
1. Получаем область ячеек табличного документа, которую требуется поместить в таблицу значений. Получение области нужно задавать таким образом, что бы в неё входила строка заголовков колонок (см. рисунок 1), особенность работы объекта ПостроительОтчета.
ОбластьЯчеек = ТабДокумент.Область(1, 1, ПоследняяСтрока, ПоследняяКолонка);
![]() |
Рисунок 1. Область ячеек табличного документа |
2. На основе области ячеек табличного документа создаем описание источника данных.
ИсточникДанных = Новый ОписаниеИсточникаДанных(ОбластьЯчеек);
3. Создаем объект ПостроительОтчета, указываем источник данных вместо текста запроса и выполняем построение отчета.
ПостроительОтчета = Новый ПостроительОтчета;
ПостроительОтчета.ИсточникДанных = ИсточникДанных;
ПостроительОтчета.Выполнить();
Результат чтения данных из источника после вызова метода Выполнить() находится в свойстве Результат. Данное свойство содержит объект типа РезультатЗапроса, объект такого же типа возвращается при выполнении запроса.4. Выгрузим результат в таблицу значений (см. рисунок 2), вызвав метод Выгрузить() объекта типа РезультатЗапроса.
ТабЗначений = ПостроительОтчета.Результат.Выгрузить();
![]() |
Рисунок 2. Таблица значений, созданная на основании табличного документа |
Из очевидных минусов, значения колонок строкового типа. Так же объект ПостроительОтчета доступен только на сервере, придется гнать табличный документа с клиента на сервер.
Итоговый программный код
Функция ПреобразоватьТабличныйДокументВТаблицуЗначений(ТабДокумент)
ПоследняяСтрока = ТабДокумент.ВысотаТаблицы;
ПоследняяКолонка = ТабДокумент.ШиринаТаблицы;
ОбластьЯчеек = ТабДокумент.Область(1, 1, ПоследняяСтрока, ПоследняяКолонка);
// Создаем описание источника данных на основании области ячеек табличного документа.
ИсточникДанных = Новый ОписаниеИсточникаДанных(ОбластьЯчеек);
// Создаем объект для интеллектуального построения отчетов,
// указываем источник данных и выполняем построение отчета.
ПостроительОтчета = Новый ПостроительОтчета;
ПостроительОтчета.ИсточникДанных = ИсточникДанных;
ПостроительОтчета.Выполнить();
// Результат выгружаем в таблицу значений.
ТабЗначений = ПостроительОтчета.Результат.Выгрузить();
Возврат ТабЗначений
КонецФункции
Обработку с реализацией данного способа можно скачать здесь.
Красота
ОтветитьУдалитьСпасибо за информацию!
ОтветитьУдалитьШикарно! Спасибо)
ОтветитьУдалитьСпасибо!!! Полезно!
ОтветитьУдалитьОтлично!
ОтветитьУдалитьА еще возможно из Таблицы значений выгрузить данные в табличный документ через Построитель отчета
ТекстЗапроса = "ВЫБРАТЬ * ИЗ Справочник.Пользователи";
ОтветитьУдалитьЗапросаДанных = Новый Запрос(ТекстЗапроса);
РезЗапроса = ЗапросаДанных.Выполнить();
ТабДокумент = Новый ТабличныйДокумент;
Построитель = Новый ПостроительОтчета;
Построитель.ИсточникДанных=Новый ОписаниеИсточникаДанных(РезЗапроса);
Построитель.ВыводитьЗаголовокОтчета = Ложь;
Построитель.ВыводитьШапкуТаблицы = Ложь;
Построитель.ВыводитьПодвалОтчета = Ложь;
Построитель.ЗаполнениеРасшифровки = ВидЗаполненияРасшифровкиПостроителяОтчета.Расшифровка;
Построитель.Вывести(ТабДокумент);
ТабДокумент.ТолькоПросмотр = Истина;
ТабДокумент.Показать("Пользователи");
Лучшая Статья Что Я Видел !!!
ОтветитьУдалитьОписал все без пафоса. Все слова по делу. Снимаю перед тобой Шляпу. Молодцом !!!
ОтветитьУдалитьБожественно
ОтветитьУдалитьSUPER
ОтветитьУдалитьthe Best
ОтветитьУдалитьОгромнейшее спасибо!!!
ОтветитьУдалитьГениально и очень полезно.
ОтветитьУдалитьСпасибо.
Большое, прям огроменное спасибо! Сэкономила кучу времени!
ОтветитьУдалитьСпасибо!!!
ОтветитьУдалитьИнтересно, меня удивляет почему до сих пор нет встроенной функции для этого. Хотя нет, знаю - потому что наплевать.
ОтветитьУдалитьвзял на вооружение :)
ОтветитьУдалитьУ меня ругается - Ожидается выражение "ВЫБРАТЬ"... Не могу сообразить, в чем дело? Может, подскажет кто?
ОтветитьУдалитьПервая считываемая строка области должна быть не пустой!
УдалитьБлагодарю. Выручили.
ОтветитьУдалитьКлассно! Спасибо!
ОтветитьУдалитьСпасибо, пользуюсь уже 3 года, этой замечательной функцией!
ОтветитьУдалитьКруто!
ОтветитьУдалитьСпасибо!
Очень помогло в работе!
ОтветитьУдалитьПолученная таким способом ТЗ будет иметь все колонки строкового типа. А есть ли возможность сделать так что бы типы были реальные (число, строка, дата)?
ОтветитьУдалитьЕсли ячейки колонки содержит значение, тогда колонка будет иметь тип значения ячеек этой колонки
УдалитьНевероятно полезный, компактный код. Спасибо огромное
ОтветитьУдалитьСупер! Моментально считывается
ОтветитьУдалитьСпасибо, большой, ОЧЕНЬ помогло!
ОтветитьУдалить