14.03.17 — 07:01
Добрый день
Есть web-сервис, который вызывается и выполняется сразу на сервере (в серверной процедуре).
Есть отчет, написан на СКД. Но я уже всю голову сломал как его сохранить в эксель, выполняя на сервере, ведь нет доступа к ЭлементыФормы.Результат
//Получаем схему из макета
СхемаКомпоновкиДанных = ПолучитьМакет(«ОсновнаяСхемаКомпоновкиДанных»);
//Из схемы возьмем настройки по умолчанию
//Настройки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию;
Настройки = КомпоновщикНастроек.Настройки;
//Помещаем в переменную данные о расшифровке данных
ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
//Формируем макет, с помощью компоновщика макета
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
//Передаем в макет компоновки схему, настройки и данные расшифровки
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,
Настройки, ДанныеРасшифровки);
//Выполним компоновку с помощью процессора компоновки
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки,,
ДанныеРасшифровки);
//Очищаем поле табличного документа
Результат = ЭлементыФормы.Результат;
Результат.Очистить();
//Выводим результат в табличный документ
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(Результат);
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
8 — 14.03.17 — 07:37
Подскажите пож по такому коду.
Есть какая то возможность обойти метод ОткрытьФорму, т.к. она выполняется на клиенте — хочу типовой попробовать впихнуть
Пример для «Карточки счета».
//Имя вызываемого отчета карточка,анализ, ОСВ по счету . Я делал только для этих трех.
ИмяОтчета = «КарточкаСчета»;
//Заполняем реквизиты отчета и обязательные поля (могут отличаться в зависимости от отчета)
ПользовательскиеНастройкиКомпоновкиДанных = Новый ПользовательскиеНастройкиКомпоновкиДанных;
ПользовательскиеНастройкиКомпоновкиДанных.ДополнительныеСвойства.Вставить(«Счет» , Счет);
ПользовательскиеНастройкиКомпоновкиДанных.ДополнительныеСвойства.Вставить(«НачалоПериода» , Объект.ДатаНачало);
ПользовательскиеНастройкиКомпоновкиДанных.ДополнительныеСвойства.Вставить(«КонецПериода» , Объект.ДатаКонец);
ПользовательскиеНастройкиКомпоновкиДанных.ДополнительныеСвойства.Вставить(«Организация» , Объект.Организация);
//Заполняем дополнительные отборы (в примере только для субконто1 и субконто2)
НовыйОтбор = ПользовательскиеНастройкиКомпоновкиДанных.Элементы.Добавить(Тип(«ОтборКомпоновкиДанных»));
НовыйОтбор.ИдентификаторПользовательскойНастройки = «Отбор»;
ЗаполнитьЭлементОтбораКомпоновкиДанных(НовыйОтбор,Истина,ВидСравненияКомпоновкиДанных.Равно,»Субконто1″, Контрагент);
ЗаполнитьЭлементОтбораКомпоновкиДанных(НовыйОтбор,Истина,ВидСравненияКомпоновкиДанных.Равно,»Субконто2″, Договор);
//Обязателньо указываем ключ (Равным параметру «ИДРасшифровки»,я указывал Имя отчета ) НастройкиРасшифровки
НастройкиРасшифровки = Новый Структура;
НастройкиРасшифровки.Вставить(ИмяОтчета, ПользовательскиеНастройкиКомпоновкиДанных);
УсловияОтбора = Новый Структура();
УсловияОтбора.Вставить(«НастройкиРасшифровки», НастройкиРасшифровки);
//Дублируем настройки (у меня в файловой без этого не открывалось)
ОбщиеНастройки = Новый Структура();
ОбщиеНастройки.Вставить(«Объект» , УсловияОтбора);
ОбщиеНастройки.Вставить(«НастройкиРасшифровки», НастройкиРасшифровки);
//Помещаем во временное хранилище (Уид можно случайный)
АлресХранилища = ПоместитьВоВременноеХранилище(ОбщиеНастройки, Новый УникальныйИдентификатор);
//Обращаем внимания на заполнемые настройки, если вы укажете отбор = истина то затрется все выше указанные отборы ( поскольку показатели и группировки я не менял, то оставил их типоыми)
ЗаполнятьТиповыеНастройки = Новый Структура;
ЗаполнятьТиповыеНастройки.Вставить(«Отбор» , Ложь);
ЗаполнятьТиповыеНастройки.Вставить(«Группирова» , Истина);
ЗаполнятьТиповыеНастройки.Вставить(«ВыводимыеДанные», Истина);
ЗаполнятьТиповыеНастройки.Вставить(«Показатели» , Истина);
//Сами параметры для предачи на форму («ИДРасшифровки» — в данном случаи ключ от структуры НастройкиРасшифровки , если «СформироватьПриОткрытии» будет равно Ложь то отчет откроется с ранее сохраненными настройками)
ПараметрыОтчета = Новый Структура;
ПараметрыОтчета.Вставить(«ВидРасшифровки» , 1);
ПараметрыОтчета.Вставить(«АдресНастроек» , АлресХранилища);
ПараметрыОтчета.Вставить(«СформироватьПриОткрытии», Истина);
ПараметрыОтчета.Вставить(«ИДРасшифровки» , ИмяОтчета);
ПараметрыОтчета.Вставить(«РежимРасшифровки» , Истина);
ПараметрыОтчета.Вставить(«ЗаполняемыеНастройки» , ЗаполнятьТиповыеНастройки);
//Ну и открываем саму форму
ОткрытьФорму(«Отчет.» + ИмяОтчета + «.Форма.ФормаОтчета», ПараметрыОтчета,ЭтаФорма);
Excel файл как Внешний источник данных 16
Подключимся и загрузим из файла Excel данные в таблицу значений 1С. Сделать теперь это очень просто.
1. В конфигурации добавляет новый объект метаданных типа » Внешние источники данных» и назовем его просто » Excel» .
https://helpf.pro/uploads/img
Активация открытой книги Excel для корректировки 0
Нужно было получить для изменения уже открытую книгу Excel, а если она закрыта, то открыть и изменять.
Ниже код, который данную задачу решает.
Попытка
Эксель = Неопределено;
Книга = Неопределено;
Лист = Неопределено;
Состояние(» Выполняется
Быстрая загрузка данных большого размера файла Excel в многомерный Массив 0
// OldthiefXXX
Перем СерверExcel;
Процедура КнопкаВыполнитьНажатие(Кнопка)
ФайлХЛС=СерверExcel.Application.Workbooks.Open(ДокументХЛС);
КонечнаяСтрокаДанных=ФайлХЛС.ActiveSheet.UsedRange.Rows.Count;
КоличествоКолонокДанных=ФайлХЛС.ActiveSheet
Быстрая функция чтения данных с листа Excel 10
При чтении файла Excel я использую вариантный массив. Он позволяет быстро получить ВСЮ таблицу листа в память, а также получать данные массива целыми колонками. Тем самым время на чтение области файла Excel в таблицу значений сокращается в десятки ра
Вставить формулу, функцию в ячейку Excel 0
Ячейка = Лист.Cells(1,8);
Ячейка.Formula=» =SUM(R11C:R C)» ;
Процедура Сформировать()
Перем Кат,Шаб;
Ехсел=СоздатьОбъект(» Excel.Application» );
Книга=Ехсел.Workbooks;
Если ФС.ВыбратьФайл(0,Кат,Шаб,» Выбери файл Еxcel» ,,» *.xls» ,)=1 Тогда
Посмотреть все результаты поиска похожих
На чтение 9 мин Просмотров 26.9к. Опубликовано 09.11.2017
MS Excel давно стал стандартом для работы с электронными таблицами. В статье рассматриваются способы программной выгрузки и загрузки из 1С в файлы Excel.
Существует несколько способов программной работы с файлами Excel из 1С. Каждый из них имеет свои преимущества и недостатки.
Содержание
- Обмен через табличный документ
- Обмен через OLE
- Использование COMSafeArray
- Обмен через ADO
- Выгрузка без программирования
Обмен через табличный документ
Данный способ простой. Его суть заключается в том, что объект ТабличныйДокумент имеет методы:
- Записать(<ИмяФайла>, <ТипФайлаТаблицы>) для выгрузки данных в файл;
- Прочитать(<ИмяФайла>, <СпособЧтенияЗначений>) для загрузки данных из файла.
Внимание!
Метод Записать() доступен как на клиенте, так и на сервере. Метод Прочитать() доступен только на стороне сервера. Необходимо помнить об этом
при планировании клиент-серверного взаимодействия.
Рассмотрим пример сохранения табличного документа в файл. Необходимо любым способом создать и заполнить объект ТабличныйДокумент, а выгрузка в файл осуществляется всего лишь одной строкой:
ТабДок.Записать(ПутьКФайлу, ТипФайлаТабличногоДокумента.XLSX);
Здесь ТабДок — сформированный табличный документ, ПутьКФайлу — имя файла для выгрузки, ТипФайлаТабличногоДокумента.XLSX — формат создаваемого файла. Поддерживаются следующие форматы Excel:
- XLS95 — формат Excel 95;
- XLS97 — формат Excel 97;
- XLSX — формат Excel 2007.
Загрузка из файла осуществляется также достаточно просто:
ТабДок = Новый ТабличныйДокумент;
ТабДок.Прочитать(ПутьКФайлу, СпособЧтенияЗначенийТабличногоДокумента.Значение);
Здесь ПутьКФайлу — путь к загружаемому файлу Excel. СпособЧтенияЗначенийТабличногоДокумента.Значение определяет, каким образом нужно интерпретировать данные, считываемые из исходного документа. Доступны варианты:
- Значение;
- Текст.
Обмен через OLE
Обмен через технологию OLE automation, пожалуй, самый распространенный вариант программной работы с файлами Excel. Он позволяет использовать весь функционал, предоставляемый Excel, но отличается медленной скоростью работы по сравнению с другими способами. Для обмена через OLE требуется установка MS Excel:
- На компьютере конечного пользователя, если обмен происходит на стороне клиента;
- На компьютере сервера 1С:Предприятие, если обмен происходит на стороне сервера.
Пример выгрузки:
// Создание COM-объекта
Эксель = Новый COMОбъект(«Excel.Application»);
// Отключение вывода предупреждений и вопросов
Эксель.DisplayAlerts = Ложь;
// Создание новой книги
Книга = Эксель.WorkBooks.Add();
// Позиционирование на первом листе
Лист = Книга.Worksheets(1);// Запись значения в ячейку
Лист.Cells(НомерСтроки, НомерКолонки).Value = ЗначениеЯчейки;// Сохранение файла
Книга.SaveAs(ИмяФайла);// Закрытие Эксель и освобождение памяти
Эксель.Quit();
Эксель = 0;
Примеры чтения:
// —— ВАРИАНТ 1 ——
// Создание COM-объекта
Эксель = Новый COMОбъект(«Excel.Application»);
// Открытие книги
Книга = Эксель.Workbooks.Open(ПутьКФайлу);
// Позиционирование на нужном листе
Лист = Книга.Worksheets(1);// Чтение значения ячейки, обычно здесь располагается цикл обхода ячеек
ЗначениеЯчейки = Лист.Cells(НомерСтроки, НомерКолонки).Value;// Закрытие книги
Книга.Close(0);// Закрытие Эксель и освобождение памяти
Эксель.Quit();
Эксель = 0;// —— ВАРИАНТ 2 ——
// Открытие книги
Книга = ПолучитьCOMОбъект(ПутьКФайлу);
// Позиционирование на нужном листе
Лист = Книга.Worksheets(1);// Чтение значения ячейки, обычно здесь располагается цикл обхода ячеек
ЗначениеЯчейки = Лист.Cells(НомерСтроки, НомерКолонки).Value;// Закрытие книги
Книга.Application.Quit();
Для обхода всех заполненных строк листа Excel можно использовать следующие приемы:
// —— ВАРИАНТ 1 ——
КоличествоСтрок = Лист.Cells(1, 1).SpecialCells(11).Row;
Для НомерСтроки = 1 По КоличествоСтрок Цикл
ЗначениеЯчейки = Лист.Cells(НомерСтроки, НомерКолонки).Value;
КонецЦикла;// —— ВАРИАНТ 2 ——
НомерСтроки = 0;
Пока Истина Цикл
НомерСтроки = НомерСтроки + 1;
ЗначениеЯчейки = Лист.Cells(НомерСтроки, НомерКолонки).Value;
Если НЕ ЗначениеЗаполнено(ЗначениеЯчейки) Тогда
Прервать;
КонецЕсли;
КонецЦикла;
Вместо последовательного обхода всех строк листа можно выгрузить все данные в массив и работать с ним. Такой подход будет быстрее при чтении большого объема данных:
ВсегоКолонок = Лист.Cells(1, 1).SpecialCells(11).Column;
ВсегоСтрок = Лист.Cells(1, 1).SpecialCells(11).Row;Область = Лист.Range(Лист.Cells(1, 1), Лист.Cells(ВсегоСтрок, ВсегоКолонок));
Данные = Область.Value.Выгрузить();
В таблице ниже приведены наиболее востребованные свойства и методы для работы с Excel через OLE:
Действие | Код | Комментарий |
Работа с приложением | ||
Установка видимости окна приложения | Эксель.Visible = Ложь; | |
Установка режима вывода предупреждений (выводить/не выводить) | Эксель.DisplayAlerts = Ложь; | |
Закрытие приложения | Эксель.Quit(); | |
Работа с книгой | ||
Создание новой книги | Книга = Эксель.WorkBooks.Add(); | |
Открытие существующей книги | Книга = Эксель.WorkBooks.Open(ИмяФайла); | |
Сохранение книги | Книга.SaveAs(ИмяФайла); | |
Закрытие книги | Книга.Close(0); | |
Работа с листом | ||
Установка текущего листа | Лист = Книга.WorkSheets(НомерЛиста); | |
Установка имени | Лист.Name = Имя; | |
Установка защиты | Лист.Protect(); | |
Снятие защиты | Лист.UnProtect(); | |
Установка ориентации страницы | Лист.PageSetup.Orientation = 2; | 1 — книжная, 2 — альбомная |
Установка левой границы | Лист.PageSetup.LeftMargin = Эксель.CentimetersToPoints(Сантиметры); | |
Установка верхней границы | Лист.PageSetup.TopMargin = Эксель.CentimetersToPoints(Сантиметры); | |
Установка правой границы | Лист.PageSetup.RightMargin = Эксель.CentimetersToPoints(Сантиметры); | |
Установка нижней границы | Лист.PageSetup.BottomMargin = Эксель.CentimetersToPoints(Сантиметры); | |
Работа со строками, колонками, ячейками | ||
Установка ширины колонки | Лист.Columns(НомерКолонки).ColumnWidth = Ширина; | |
Удаление строки | Лист.Rows(НомерСтроки).Delete(); | |
Удаление колонки | Лист.Columns(НомерКолонки).Delete(); | |
Удаление ячейки | Лист.Cells(НомерСтроки, НомерКолонки).Delete(); | |
Установка значения | Лист.Cells(НомерСтроки, НомерКолонки).Value = Значение; | |
Объединение ячеек | Лист.Range(Лист.Cells(НомерСтроки, НомерКолонки), Лист.Cells(НомерСтроки1, НомерКолонки1)).Merge(); | |
Установка шрифта | Лист.Cells(НомерСтроки, НомерКолонки).Font.Name = ИмяШрифта; | |
Установка размера шрифта | Лист.Cells(НомерСтроки, НомерКолонки).Font.Size = РазмерШрифта; | |
Установка жирного шрифта | Лист.Cells(НомерСтроки, НомерКолонки).Font.Bold = 1; | 1 — жирный шрифт, 0 — нормальный |
Установка курсива | Лист.Cells(НомерСтроки, НомерКолонки).Font.Italic = 1; | 1 — курсив, 0 — нормальный |
Установка подчеркнутого шрифта | Лист.Cells(НомерСтроки, НомерКолонки).Font.Underline = 2; | 2 — подчеркнутый, 1 — нет |
Для того, чтобы узнать какое свойство нужно менять или какой метод вызвать можно воспользоваться макросами Excel. Если записать макрос с требуемыми действиями, то после можно посмотреть программный код на VBA записанного макроса.
Использование COMSafeArray
При выгрузке больших объемов данных из 1С в Excel для ускорения можно использовать объект COMSafeArray. Согласно определению из синтакс-помощника, COMSafeArray — объектная оболочка над многомерным массивом SafeArray из COM. Позволяет создавать и использовать SafeArray для обмена данными между COM-объектами. Проще говоря, это массив значений, который можно использовать для обмена между приложениями по технологии OLE.
// Создание COMSafeArray
МассивКом = Новый COMSafeArray(«VT_Variant», ВсегоКолонок, ВсегоСтрок);
// Заполнение COMSafeArray
Для Стр = 0 По ВсегоСтрок — 1 Цикл
Для Кол = 0 По ВсегоКолонок — 1 Цикл
МассивКом.SetValue(Кол, Стр, Значение);
КонецЦикла;
КонецЦикла;
// Присвоение области листа Excel значений из COMSafeArray
Лист.Range(Лист.Cells(1, 1), Лист.Cells(ВсегоСтрок, ВсегоКолонок)).Value = МассивКом;
Обмен через ADO
Файл Excel при обмене через ADO представляет собой базу данных, к которой можно обращаться при помощи SQL-запросов. Установка MS Excel не требуется, но обязательно наличие драйвера ODBC, при помощи которого будет осуществляться доступ. Используемый драйвер ODBC определяется при указании строки соединения к файлу. Обычно требуемый драйвер уже установлен на компьютере.
Обмен через ADO заметно быстрее обмена через OLE, но при выгрузке нет возможности использовать функционал Excel для оформления ячеек, разметки страниц, задания формул и т.д.
Пример выгрузки:
// Создание COM-объекта для соединения
Соединение = Новый COMОбъект(«ADODB.Connection»);// Установка строки соединения
Соединение.ConnectionString = «
|Provider=Microsoft.ACE.OLEDB.12.0;
|Data Source=»+ИмяФайла+«;
|Extended Properties=»»Excel 12.0 XML;HDR=YES»»;»;
Соединение.Open(); // Открытие соединения// Создание COM-объекта для команды
Команда = Новый COMОбъект(«ADODB.Command»);
Команда.ActiveConnection = Соединение;// Присвоение текста команды для создания таблицы
Команда.CommandText = «CREATE TABLE [Лист1] (Колонка1 char(255), Колонка2 date, Колонка3 int, Колонка4 float)»;
Команда.Execute(); // Выполнение команды// Присвоение текста команды для добавления строки таблицы
Команда.CommandText = «INSERT INTO [Лист1] (Колонка1, Колонка2, Колонка3, Колонка4) values (‘абвгдеё’, ‘8/11/2017’, ‘12345’, ‘12345,6789’)»;
Команда.Execute(); // Выполнение команды// Удаление команды и закрытие соединения
Команда = Неопределено;
Соединение.Close();
Соединение = Неопределено;
Для создания нового листа и формирования его структуры можно воспользоваться объектами ADOX.Catalog и ADOX.Table. В этом случае код примет вид:
// Создание COM-объекта для работы с книгой
Книга = Новый COMОбъект(«ADOX.Catalog»);
Книга.ActiveConnection = Соединение;// Создание COM-объекта для работы со структурой данных на листе
Таблица = Новый COMОбъект(«ADOX.Table»);
Таблица.Name = «Лист1»;
Таблица.Columns.Append(«Колонка1», 202);
Таблица.Columns.Append(«Колонка2», 7);
Таблица.Columns.Append(«Колонка3», 5);
Таблица.Columns.Append(«Колонка4», 5);// Создание в книге листа с описанной структурой
Книга.Tables.Append(Таблица);
Таблица = Неопределено;
Книга = Неопределено;
В приведенном примере в методе
Таблица.Columns.Append(«Колонка1», 202);
во втором параметре указывается тип колонки. Параметр необязательный, вот некоторые значения типа колонки:
- 5 — adDouble;
- 6 — adCurrency;
- 7 — adDate;
- 11 — adBoolean;
- 202 — adVarWChar;
- 203 — adLongVarWChar.
Пример чтения:
// Создание COM-объекта для соединения
Соединение = Новый COMОбъект(«ADODB.Connection»);// Установка строки соединения
Соединение.ConnectionString = «
|Provider=Microsoft.ACE.OLEDB.12.0;
|Data Source=»+ИмяФайла+«;
|Extended Properties=»»Excel 12.0 XML;HDR=YES»»;»;
Соединение.Open(); // Открытие соединения// Создание COM-объекта для получения выборки
Выборка = Новый COMОбъект(«ADODB.Recordset»);
ТекстЗапроса = «SELECT * FROM [Лист1$]»;// Выполнение запроса
Выборка.Open(ТекстЗапроса, Соединение);// Обход результата выборки
Пока НЕ Выборка.EOF() Цикл
ЗначениеКолонки1 = Выборка.Fields.Item(«Колонка1»).Value; // Обращение по имени колонки
ЗначениеКолонки2 = Выборка.Fields.Item(0).Value; // Обращение по индексу колонки
Выборка.MoveNext();
КонецЦикла;Выборка.Close();
Выборка = Неопределено;
Соединение.Close();
Соединение = Неопределено;
В строке соединения параметр HDR определяет как будет восприниматься первая строка на листе. Возможны варианты:
- YES — первая строка воспринимается как названия колонок. К значениям можно обращаться по имени и по индексу колонки.
- NO — первая строка воспринимается как данные. К значениям можно обращаться только по индексу колонки.
В приведенных примерах рассмотрено лишь несколько объектов ADO. Объектная модель ADO состоит из следующих объектов:
- Connection;
- Command;
- Recordset;
- Record;
- Fields;
- Stream;
- Errors;
- Parameters;
- Properties.
Выгрузка без программирования
Для сохранения данных из 1С в Excel не всегда целесообразно прибегать к программированию. Если в режиме Предприятия пользователь может отобразить требуемые для выгрузки данные, то, их возможно сохранить в Excel без программирования.
Для сохранения табличного документа (например, результата отчета) можно вызвать команду Сохранить или Сохранить как… главного меню.
В открывшемся окне требуется выбрать каталог, имя и формат сохраняемого файла.
Для сохранения данных динамических списков (например, списка номенклатуры) необходимо:
- Вывести данные в табличный документ при помощи команды Еще ⇒ Вывести список…;
- Сохранить табличный документ в требуемый формат.
Есть тестовый макрос, выгрузки данных из 1С. Он работает.
Не могу понять как мне выгрузить данные отчета???
В моем понимании получается нужно:
1. Сформировать отчет за текущий день
2. Выгрузить сформированный отчет
Public v7 As Object
Sub ConnectV77_1()
Dim i
i = 4
Set v7 = CreateObject("v82.COMConnector")
Set result = v7.Connect("Srvr=""bit"";Ref=""BitFinans""")
Set res = result.newObject("Запрос")
res.Text = "ВЫБРАТЬ Наименование ИЗ Справочник.Контрагенты"
Set finish = res.Execute()
Set kontragenty = finish.Unload()
For Each k In kontragenty
For Each i In k
Next
Next
Set v7 = Nothing
Set result = Nothing
End Sub
задан 27 июл 2016 в 14:31
user208820user208820
2361 золотой знак2 серебряных знака11 бронзовых знаков
Если нужно выгрузить отчет, а не данные запроса, то кажется проще сформировать в 1С табличный документ и сохранить его в формате Эксель, а уже с ним работать.
Для управления этим из Эксель, можно сделать соответствующую экспортную процедуру.
Если же идти по пути макроса, приведенного в вопросе, то нужно сделать запрос, который выведет поля примитивного типа, и идти как в макросе:
For Each k In kontragenty
k — строка таблицы значений, все еще объект 1С, а k.Наименование уже наименование контрагента, строка. Можно спокойно обрабатывать Excel’ем.
ответ дан 29 июл 2016 в 13:35
Если нужно программно сохранять отчет сформированный по можно так:
МойОтчет = Отчеты.ОтчетПоЗП.Создать();
//ФормаОтчета = МойОтчет.ПолучитьФорму("ФормаОтчета");
СхемаКомпоновкиДанных = МойОтчет.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
//Из схемы возьмем настройки по умолчанию
МойОтчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы[0].Значение = НачалоДня(ТекущаяДата());
МойОтчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы[1].Значение = КонецДня(ТекущаяДата());
МойОтчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы[2].Значение = Справочники.ФизическиеЛица.ПустаяСсылка();
ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
//Формируем макет, с помощью компоновщика макета
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
//Передаем в макет компоновки схему, настройки и данные расшифровки
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,
МойОтчет.КомпоновщикНастроек.Настройки, ДанныеРасшифровки);
//Выполним компоновку с помощью процессора компоновки
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки,,
ДанныеРасшифровки);
//Очищаем поле табличного документа
//Результат = ФормаОтчета.ЭлементыФормы.Результат;
//Результат.Очистить();
табДок = Новый ТабличныйДокумент;
//Выводим результат в табличный документ
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(табДок);
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
Попытка
табДок.Записать(Константы.тиПутьХраненияОтчетовПоЗП.Получить() + "ОтчетПоЗП за " + Строка(Год(ТекущаяДата())) +
"_" + Строка(Месяц(ТекущаяДата())) +
"_" + Строка(День(ТекущаяДата())) +
"-" + Строка(Час(ТекущаяДата())) +
"-" + Строка(Минута(ТекущаяДата())) +
"-" + Строка(Секунда(ТекущаяДата())) +
".xls", ТипФайлаТабличногоДокумента.XLS);
Исключение
КонецПопытки;
ответ дан 8 мая 2018 в 6:40
razearrazear
537 бронзовых знаков
Для удобства использования я создам процедуру в общем глобальном модуле.
Для ее вызова нам необходимо знать только название табличного документа, т.е. имя элемета.
Процедура имеет 3 параметра:
ИмяФайла — строка, содержит имя файла. Имя можно поменять в окне сохранения.
ОткрытьФайл — булево, если Истина то будет открывать автоматически сохраненный документ.
ИмяТабДок — сам табличный документ.
Процедура СохраненитьТабличныйДокументВExcel (ИмяФайла, ОткрытьФайл, ИмяТабДок) Экспорт ИмяФайла = ИмяФайла + ".xls"; ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение); ДиалогОткрытияФайла.ПолноеИмяФайла = ИмяФайла; ДиалогОткрытияФайла.Каталог = ПутьКрабочемуСтолу(); ДиалогОткрытияФайла.Фильтр = "Файлы Microsoft Excel (*.xls)|*.xls|Все файлы (*.*)|*.*"; ДиалогОткрытияФайла.МножественныйВыбор = Ложь; Если ДиалогОткрытияФайла.Выбрать() тогда ИмяТабДок.Записать(ДиалогОткрытияФайла.ПолноеИмяФайла,ТипФайлаТабличногоДокумента.XLS); Если ОткрытьФайл = истина тогда ДокExcel = ПолучитьCOMОбъект("", "Excel.Application"); ДокExcel.Workbooks.Open(ДиалогОткрытияФайла.ПолноеИмяФайла); ДокExcel.Visible = 1; КонецЕсли; КонецЕсли; КонецПроцедуры
Пример:
ТабДок = Новый ТабличныйДокумент;
// формируем документ ТабДок.Показать();
// сохраним в файл Отчет.xls не открывая его СохраненитьТабличныйДокументВExcel ("Отчет", Ложь, ТабДок);
Описание
Создали новый диалог (окно) сохранения
ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);
Указали имя
ДиалогОткрытияФайла.ПолноеИмяФайла = ИмяФайла;
Указали путь, я использую функцию (ссылка на описание)
ДиалогОткрытияФайла.Каталог = ПутьКрабочемуСтолу();
Создаем фильтр расширений
ДиалогОткрытияФайла.Фильтр = "Файлы Microsoft Excel (*.xls)|*.xls|Все файлы (*.*)|*.*"; ДиалогОткрытияФайла.МножественныйВыбор = Ложь;
Если выбрали путь сохраняем
Если ДиалогОткрытияФайла.Выбрать() тогда ИмяТабДок.Записать(ДиалогОткрытияФайла.ПолноеИмяФайла,ТипФайлаТабличногоДокумента.XLS);
Открываем файл если передано истина
Если ОткрытьФайл = истина тогда ДокExcel = ПолучитьCOMОбъект("", "Excel.Application"); ДокExcel.Workbooks.Open(ДиалогОткрытияФайла.ПолноеИмяФайла); ДокExcel.Visible = 1; КонецЕсли; КонецЕсли; КонецПроцедуры