Для того чтобы выгрузить табличную часть (документа, справочника, обработки и т.д.) в таблицу значений необходимо использовать метод Выгрузить() . При использовании его будет создана таблица значений с таким же набором колонок (тех же типов данных) и с теми же данными, что и в табличной части . Следует заметить, что данная таблица никак не связана с табличной частью и изменение данных в ней не приведет к изменению данных в ней, по сути она является ее копией, но с несколько другими свойствами и методами.
Также если у вас есть таблица с таким же набором колонок, как и в табличной части, то данные таблицы значений можно загрузить в табличную часть. Для этого применяется метод Загрузить(<Таблица>) , табличной части. Это может потребоваться в случае, если данные для загрузки получаются запросом. И вместо того чтобы обходить результат запроса в цикле, можно просто загрузить его в табличную часть.
Допустим, что в переменной Объект содержится объект документа у которого есть табличная часть Услуги . А в переменной Запрос , содержится запрос собирающий данные для табличной части.
Способ основывается на использовании объекта ПостроительОтчета - это объект, позволяющий на основе заданного текста запроса или источника данных, а так же настроек, получить результат и вывести его в табличный документ или диаграмму.
Описание способа
1. Получаем область ячеек табличного документа, которую требуется поместить в таблицу значений. Получение области нужно задавать таким образом, что бы в неё входила строка заголовков колонок (см. рисунок 1), особенность работы объекта ПостроительОтчета.
ОбластьЯчеек = ТабДокумент.Область(1, 1, ПоследняяСтрока, ПоследняяКолонка);
2. На основе области ячеек табличного документа создаем описание источника данных.
ИсточникДанных = Новый ОписаниеИсточникаДанных(ОбластьЯчеек);
3. Создаем объект ПостроительОтчета, указываем источник данных вместо текста запроса и выполняем построение отчета.
Результат чтения данных из источника после вызова метода Выполнить() находится в свойстве Результат . Данное свойство содержит объект типа РезультатЗапроса, объект такого же типа возвращается при выполнении запроса.
4. Выгрузим результат в таблицу значений (см. рисунок 2), вызвав метод Выгрузить() объекта типа РезультатЗапроса.
ТабЗначений = ПостроительОтчета.Результат.Выгрузить();
Из очевидных минусов, значения колонок строкового типа. Так же объект ПостроительОтчета доступен только на сервере, придется гнать табличный документа с клиента на сервер.
Итоговый программный код
Функция ПреобразоватьТабличныйДокументВТаблицуЗначений(ТабДокумент)
ПоследняяСтрока = ТабДокумент.ВысотаТаблицы;
ПоследняяКолонка = ТабДокумент.ШиринаТаблицы;
ОбластьЯчеек = ТабДокумент.Область(1, 1, ПоследняяСтрока, ПоследняяКолонка);
// Создаем описание источника данных на основании области ячеек табличного документа.
ИсточникДанных = Новый ОписаниеИсточникаДанных(ОбластьЯчеек);
// Создаем объект для интеллектуального построения отчетов,
// указываем источник данных и выполняем построение отчета.
ПостроительОтчета = Новый ПостроительОтчета;
ПостроительОтчета.ИсточникДанных = ИсточникДанных;
ПостроительОтчета.Выполнить();
// Результат выгружаем в таблицу значений.
ТабЗначений = ПостроительОтчета.Результат.Выгрузить();
Возврат ТабЗначений
КонецФункции
Обработку с реализацией данного способа можно скачать
Для того, чтобы учитывать деньги и товары, в бизнесе широко используют разные таблицы. Почти каждый документ – это таблица.
В одной таблице перечислены товары к отгрузке со склада. В другой таблице – обязательства по оплате этих товаров.
Поэтому в 1С видное место занимает работа с таблицами.
Таблицы в 1С также называют «табличные части». Они есть у справочников, документов и других .
Запрос в результате своего выполнения возвращает таблицу, доступ к которой возможно получить двумя разными способами.
Первый – более быстрый – выборка, получение строк из нее возможен только по порядку. Второй – выгрузка результата запроса в таблицу значений и далее произвольный доступ к ней.
//Вариант 1 – последовательный доступ к результатам запроса
//получение таблицы
Выборка = Запрос.Выполнить().Выбрать();
//по порядку обходим все строки результата запроса
Пока Выборка.Следующий() Цикл
Сообщить(Выборка.Наименование);
КонецЦикла;
//Вариант 2 – выгрузка в таблицу значений
Запрос = Новый Запрос(«ВЫБРАТЬ Наименование ИЗ Справочник.Номенклатура»);
//получение таблицы
Таблица = Запрос.Выполнить().Выгрузить().
//далее можем также обойти все строки
Для каждого Строка из Таблица Цикл
Сообщить(Строка.Наименование);
КонецЦикла;
//или произвольно обращаться к строкам
Строка = Таблица.Найти(«Лопата», «Наименование»);
Важная особенность – в таблице, которая получена из результата запроса, все колонки будут строго типизированы. Это значит, что запросив поле Наименование из справочника Номенклатура, Вы получите колонку вида Строка с допустимой длиной не более N символов.
Таблица на форме (толстый клиент)
Пользователь работает с таблицей, когда она размещена на форме.
Базовые принципы работы с формами мы с Вами обсуждали в уроке по и в уроке по
Итак, разместим таблицу на форме. Для этого можно перетащить таблицу с панели элементов управления. Аналогично можно выбрать в меню Форма/Вставить элемент управления.
Данные могут храниться в конфигурации – тогда нужно выбрать существующую (ранее добавленную) табличную часть того объекта конфигурации, форму которого Вы редактируете.
Нажмите кнопку «…» в свойстве Данные. Для того, чтобы увидеть список табличных частей, нужно раскрыть ветку Объект.
При выборе табличной части 1С сама добавит колонки у таблицы на форме. Строки введенные пользователем в такую таблицу будут сохраняться автоматически вместе со справочником/документом.
В этом же свойстве Данные Вы можете ввести произвольное имя и выбрать тип ТаблицаЗначений.
Это значит, что выбрана произвольная таблица значений. Она не добавит автоматически колонки, не будет автоматически сохраняться, но и делать с ней можно все, что угодно.
Нажав правой кнопкой на таблице Вы можете добавить колонку. В свойствах колонки можно указать его имя (для обращения в коде 1С), заголовок колонки на форме, связь с реквизитом табличной части (последнее – если выбрана не произвольная таблица, а табличная часть).
В свойствах таблицы на форме Вы можете указать – доступно ли пользователю добавлять/удалять строки. Более продвинутая форма – галочка ТолькоПросмотр. Эти свойства удобно использовать для организации таблиц предназначенных для вывода информации, но не редактирования.
Чтобы управлять таблицей, нужно вывести на форму командную панель. Выберите пункт меню Форма/Вставить элемент управления/Командная панель.
В свойствах командной панели выберите галочку Автозаполнение, чтобы кнопки на панели появились автоматически.
Таблица на форме (тонкий/управляемый клиент)
На управляемой форме указанные действия выглядят немного по другому. Если Вам нужно разместить на форме табличную часть – раскройте ветку Объект и перетащите одну из табличных частей влево. И все!
Если нужно разместить таблицу значений, добавьте новый реквизит формы и в его свойствах укажите тип – таблица значений.
Чтобы добавить колонки, используйте меню по правой кнопке мыши на этом реквизите формы, пункт Добавить колонку реквизита.
После чего также перетащите таблицу влево.
Чтобы у таблицы появилась командная панель, в свойствах таблицы выберите значения в секции Использование – Положение командной панели.
Выгрузка таблицы в Excel
Любую таблицу 1С, расположенную на форме, можно распечатать или выгрузить в Excel.
Для этого щелкните правой кнопкой мыши на свободном месте в таблице и выберите пункт Вывести список.
В управляемом (тонком) клиент аналогичные действия можно выполнить с помощью пункта меню Все действия/Вывести список.