Содержание
Механизм создания табличных документов и печатных форм в 1С достаточно продуман и хорошо проработан, однако, до функциональных возможностей, реализованных в Microsoft Excel, ему, конечно же, далеко. Поэтому многие пользователи предпочитают действовать по следующему алгоритму:
- Сформировать печатную форму в 1С;
- Сохранить данные как лист Excel (Рис.1)или скопировать таблицу;
- Продолжить работу с информацией в другой программе.
Рис.1
И, нередко, у них возникает вопрос: как осуществить непосредственную выгрузку информации из 1С в Excel, минуя дополнительные шаги?
Два главных требования, которые должны быть выполнены
Для безошибочного функционирования нашей обработки, необходимо:
- Чтобы на компьютере пользователя был установлен Microsoft Office и, в частности, Excel (мы будем подключаться к приложению посредством создания COM-объекта);
- Представлять себе структуру хранения данных в Excel (понимать, как формируются имена ячеек, знать, что такое лист, книга и т.д.).
Только убедившись, что два этих пункта выполнены, следует приступать к дальнейшей разработке.
Алгоритм при выгрузке и его реализация в 1С
Последовательность действий при выгрузке из 1С в Excel можно представить следующей последовательностью шагов:
- Формируем набор данных, которые необходимо сохранить в Excel;
- Создаем подключение к приложению (запускаем его);
- Заполняем файл выгружаемыми данными;
- Сохраняем файл;
- Закрываем открытое приложение.
Теперь по этому списку подробнее.
Формирование набора данных
В качестве источника данных может выступать результат выполнения запроса, печатная форма табличного документа, любая выборка элементов. В нашем случае мы будем выгружать реестр документов «Поступление товаров и услуг» за текущий месяц (Рис.2)
Рис.2
Осуществляем программный запуск приложения
Как было сказано выше, для того, чтобы запуститься, мы будем использовать режим Com-соединения. Код на Рис.3 показывает, как это можно осуществить.
Рис.3
Процедуру создания нового объекта мы сознательно вставили в конструкцию Попытка — Исключение-КонецПопытки, для того, чтобы исключить всевозможные нестандартные ситуации в дальнейшем ходе обработки.
Заполнение файла, его сохранение и завершение работы приложения
В первую очередь следует определиться, что мы хотим сделать: выгрузить данные в существующий файл или создать новый:
- В первом случае нам необходимо запустить диалог выбора файла и получить полное имя существующего хранилища информации;
- Во втором случае мы должны самостоятельно придумать имя создаваемого файла и определиться с его местоположением (именно из этих двух слагаемых будет создано имя файла).
Решив, где мы будем хранить наши данные, приступим к непосредственному заполнению файла , для этого создадим процедуру и передадим в нее в качестве параметра нашу выборку документов за текущий месяц. (Рис.4)
Рис.4
Как видно из кода, в первую очередь мы создали книгу, в которой будет храниться наша таблица. По умолчанию программа Excel при первом запуске создает в книге три листа. Для внесения данных мы можем выбрать любой из них, просто указав номер листа в качестве параметра для метода WorkSheets(). Если же нам понадобилось бы добавить новый лист в книгу, мы должны бы были записать строку вида:
НовыйЛист=НоваяКнига.Sheets.Add();
На этом мы закончили формировать общую структуру документа и приступаем к его заполнению.
Циклом со счетчиком перебираем строки и колонки нашей таблицы значений, для получения данных конкретной ячейки и их переноса в конечную таблицу.
Здесь важно иметь ввиду, что индексы строк и колонок таблицы значения в 1С начинаются с 0 и заканчиваются на числе на 1 меньшем, чем количество этих строк и колонок, а нумерация строк и колонок ячеек в Exel начинается с 1.
Перебрав нашу таблицу и перенеся её в новое место, мы должны сохранить созданный файл. Параметр ПутьКФайлу, указанный в процедуре SaveAs, должен содержать полный путь к файлу, включая его имя.
Если на компьютере установлен Microsoft Office версии 2007 года или более поздний, у Вас, вероятно, может возникнуть необходимость в сохранении табличного документа в формате Excel 2003, программно это можно сделать, если указать в качестве второго параметра процедуры SaveAs значение (-4143). Именно это число указывает на формат сохраняемого файла, соответсвующий расширению xls.
В случае ошибки (допустим сохраняемый файл уже открыт), наша обработка должна предупредить пользователя о нестандартной ситуации, что и прописано в процедуре Сообщить().
Так как мы не планируем дальше продолжать работу с Excel, мы должны закрыть приложение. Здесь следует отметить, что визуально отследить выполнение нашей обработки можно только воспользовавшись диспетчером задач, в списке открытых окон его видно не будет. Опять же, если не прописать закрытие приложения, оно будет занимать место в оперативной памяти и может привести к конфликтам запуска дополнительных копий Excel.
Дополнительный способ сохранения табличного документа из 1С в Excel
Еще один способ выгрузки — непосредственное сохранение табличного документа на диск без его вывода на экран или перед выводом, код соответствующей процедуры показан на (Рис.5).
Рис.5
Одно очень важное замечание: в программах 1С и Excel различаются разделители целой и дробной части в числовых значениях, этот момент следует учитывать при выгрузке во избежание перекоса в данных.
- Главная
- О сайте
- Главная
- Содержание
Категории
—>
рубрики: Excel | Дата: 15 июня, 2017
Если провести опрос среди программистов 1С на тему «Как сохранить информацию из 1С в файл ексель», то большинство голосов, как мне кажется займет вариант с созданием объекта Excel.Application с последующим заполнением листа с помощью методов и свойств встроенного в Excel языка VBA. Но многие ли из вас помнят вышеупомянутые методы и свойства? А ведь между тем есть способ который позволяет сделать это гораздо проще, только с использованием языка программирования 1С.
Для этого достаточно сформировать ТабличныйДокумент (сделать это можно как с использованием макета табличного документа, так и программно), а потом просто записать его с помощью метода Записать() сразу в файл Excel, благо платформа без проблем позволяет это сделать. Напомню, что синтаксис этого метода выглядит следующим образом
Записать(ИмяФайла, ТипФайлаТаблицы)
ИмяФайла — строка в которой указан путь к файлу;
ТипФайлаТаблицы — тип файла в который мы будем записывать табличный документ.
Платформа 1С предоставляет следующие типы файлов:
- ANSITXT (ANSITXT)
- DOCX (DOCX)
- HTML (HTML)
- HTML3 (HTML3)
- HTML4 (HTML4)
- HTML5 (HTML5)
- MXL (MXL)
- MXL7 (MXL7)
- ODS (ODS)
- PDF (PDF)
- TXT (TXT)
- XLS (XLS)
- XLS95 (XLS95)
- XLS97 (XLS97)
- XLSX (XLSX)
Пример использования
В качестве примера создадим процедуру в которую в качестве параметра будет передаваться таблица значений, которую будем выводить в табличный документ, который в свою очередь будем сохранять в ексель.
Вот код этой процедуры
&НаСервере
Процедура ЗаписатьТаблицуЗначенийВФайлЕксель(Таблица)
ТабДок = Новый ТабличныйДокумент;
КоличествоКолонок = Таблица.Колонки.Количество();
//Формируем строку с заголовками
Для Счетчик = 1 По КоличествоКолонок Цикл
ТекущаяКолонка = Таблица.Колонки[Счетчик - 1];
ТабДок.Область("R1C" + Счетчик).Текст = ТекущаяКолонка.Имя;
КонецЦикла;
//Добавляем строки из таблицы
НомерСтроки = 2;
Для каждого СтрокаТаблицы Из Таблица Цикл
Для НомерКолонки = 1 По КоличествоКолонок Цикл
ТабДок.Область("R" + НомерСтроки + "C" + НомерКолонки).Текст = Строка(СтрокаТаблицы[НомерКолонки - 1]);
КонецЦикла;
НомерСтроки = НомерСтроки + 1;
КонецЦикла;
//Записываем табличный документ в файл Excel
ТабДок.Записать("D:musorTest.xlsx", ТипФайлаТабличногоДокумента.XLSX);
КонецПроцедуры
В общем то все элементарно. Пусть у нас есть вот такая таблица значений:
Товар | Количество |
---|---|
Яблоки | 5 |
Груши | 10 |
После того как прогнал ее через процедуру выше, получил вот такой результат в ексель
Достоинства метода
- Простота. Не требуется знаний VBA. Доступны синтаксический контроль и отладка кода в процессе написания.
- Не требуется наличия установленного Excel.
Недостатки метода
- Если макет достаточно сложный, есть вероятность, что он может сохраниться недостаточно корректно. Плюс могут возникать проблемы с форматом данных.
+4
Процедура сохраняет табличный документ в файл excel и открывает его
Код 1C v 8.х
Процедура ОткрытьТабличныйДокументВExcel(ТабДокумент,ИмяФайла) Экспорт
ИмяФайла = Строка(ИмяФайла) + ".xls";
Каталог = КаталогВременныхФайлов();
ПолныйПутьКФайлу = Каталог + ИмяФайла;
Попытка
ТабДокумент.Записать(ПолныйПутьКФайлу,ТипФайлаТабличногоДокумента.XLS);
Сообщить("Записан новый файл " + ПолныйПутьКФайлу);
ЗапуститьПриложение(ПолныйПутьКФайлу);
Исключение
СообщитьОбОшибке(ОписаниеОшибки());
КонецПопытки;
КонецПроцедуры
Сохранить документ 1С в формате excel можно, если он имеет печатную форму.
Сначала нужно вывести печатную форму на экран, нажав на кнопку Печать:
Далее надо нажать на кнопку с дискеткой:
Выбрать папку на компьютере, куда нужно сохранить файл. А также нужный формат файла. Нажать на кнопку Сохранить:
Таким же образом можно сохранять отчеты (например, ОСВ):
В таком случае кнопка с дискетой будет находиться в правом верхнем углу:
Нужно будет заполнить имя файла, а также выбрать нужный формат в следующей форме:
Сохранять в формате Excel можно также списки документов. Для этого любой список надо вывести на экране в табличный документ:
При этом можно отметить галками нужные колонки:
Далее сохранить в нужном формате, нажав на кнопку с дискетой в правом верхнем углу (также, как отчет):
Для удобства использования я создам процедуру в общем глобальном модуле.
Для ее вызова нам необходимо знать только название табличного документа, т.е. имя элемета.
Процедура имеет 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; КонецЕсли; КонецЕсли; КонецПроцедуры