Выгрузка данных в Excel
Часто в ходе работы в 1С требуется выбирать данные одновременно из разных источников (справочников, документов, регистров и т.д.) и сохранять эту сводную информацию в формате Excel (*.xls) или Табличных документов 1С (*.mxl). Затем, с помощью универсальной обработки "Загрузка данных из табличного документа", можно загрузить данные, например, в другую базу. В данной статье представлен метод выгрузки информации во внешнюю таблицу через Табличный Документ с сохранением форматов данных.
- Описание
- Подробнее
Описание
Итак, требуется выгрузить данные из Таблицы Значений, полученной в результате запроса, в таблицу *.xls или *.mxl.
Сделать это можно посредством OLE:
Эксель = СоздатьОбъект("Excel.Application");и затем выводить данные в таблицу по ячейкам. При этом необходимо устанавливать формат представления данных для каждой ячейки.
Второй способ — выводить данные через Табличный Документ, в этом случае при записи этого документа (метод Записать) формат ячеек сохраняется.
В статье представлены 2 процедуры. Первая формирует Табличный Документ, переменная ТабЗначений — Таблица Значений, полученная в результате выполнения запроса. Вторая осуществляет сохранение Табличного Документа в таблицу формата *.xls или *.mxl.
Процедура СформироватьТД(ТабЗначений)
ТабДок = ЭлементыФормы.ПолеТабличногоДокумента;
ОбластьЗаголовка = ТабДок.ПолучитьОбласть(1, , 1, );
ДетальнаяСтрока = ТабДок.ПолучитьОбласть(1, , 1, );
КоличествоКолонок = ТабЗначений.Колонки.Количество();
Для КолонкаТЗ = 0 По КоличествоКолонок - 1 Цикл //Формирование заголовков колонок
Область = ОбластьЗаголовка.Область(1, КолонкаТЗ + 1);
Область.Текст = ТабЗначений.Колонки[КолонкаТЗ].Имя;
Область.ЦветФона = WEBЦвета.СветлоЖелтый;
КонецЦикла;
ТабДок.Вывести(ОбластьЗаголовка);
Для Каждого СтрокаТЗ Из ТабЗначений Цикл //Заполнение Табличного Документа данными из Таблицы Значений
Для ТекущееПоле = 0 По КоличествоКолонок - 1 Цикл
Область = ДетальнаяСтрока.Область(1, ТекущееПоле + 1);
Область.СодержитЗначение = Истина;
КС = Новый КвалификаторыСтроки(20);
Массив = Новый Массив;
Массив.Добавить(ТипЗнч(СтрокаТЗ[ТекущееПоле]));
ОписаниеТиповС = Новый ОписаниеТипов(Массив, , КС);
Область.ТипЗначения = ОписаниеТиповС;
Область.Значение = СтрокаТЗ[ТекущееПоле];
КонецЦикла;
ТабДок.Вывести(ДетальнаяСтрока);
КонецЦикла;
ТабДок.ОтображатьСетку = Истина;
ЗаписатьТабДок(ТабДок);
ТабДок.Показать();
КонецПроцедурыПроцедура ЗаписатьТабДок(ТабличныйДокумент)
ДиалогВыбора = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);
ДиалогВыбора.Заголовок = "Сохранение документа";
ДиалогВыбора.МножественныйВыбор = Ложь;
ДиалогВыбора.ИндексФильтра = 0;
ДиалогВыбора.Фильтр = "Табличный документ (*.mxl)|*.mxl|Лист Excel (*.xls)|*.xls";
ИмяФайла = "\МатериалыВЭксплуатации" + СтрЗаменить(Строка(Подразделение), " ", "");
ДиалогВыбора.ПолноеИмяФайла = ИмяФайла;
Если ДиалогВыбора.Выбрать() Тогда
ФайлНаДиске = Новый Файл(ДиалогВыбора.ПолноеИмяФайла);
Если нРег(ФайлНаДиске.Расширение) = ".mxl" Тогда
ТабличныйДокумент.Записать(ДиалогВыбора.ПолноеИмяФайла,ТипФайлаТабличногоДокумента.MXL);
ИначеЕсли нРег(ФайлНаДиске.Расширение) = ".xls" Тогда
ТабличныйДокумент.Записать(ДиалогВыбора.ПолноеИмяФайла,ТипФайлаТабличногоДокумента.XLS);
ИначеЕсли нРег(ФайлНаДиске.Расширение) = ".txt" Тогда
ТабличныйДокумент.Записать(ДиалогВыбора.ПолноеИмяФайла,ТипФайлаТабличногоДокумента.TXT);
КонецЕсли;
КонецЕсли;
КонецПроцедуры

