12 января 2016 г.

Выгрузка данных из 1С:Предприятие в Microsoft Excel

На первый взгляд может показаться, что нет никакой нужды выгружать данные из 1С:Предприятия в MS Excel. Гораздо комфортнее сделать привычный отчёт в формате табличного документа (*.mxl), а затем просто сохранить его в формате MS Excel (*.xls) с помощью встроенного конвертера платформы 1С:Предприятие.

Но не всё так однозначно. Бывают ситуации, когда либо результат преобразования может не соответствовать вашим ожиданиям, либо возможностей встроенного конвертера  недостаточно. Например, представьте, что нужно выгрузить данные в книгу Excel, содержащую возможности, недоступные в табличных документах 1С:Предприятия: многостраничные книги, формулы, макросы и т. д. Не лучше в таком случае сделать выгрузку данных непосредственно в файл *.xls, полностью контролируя процесс, чем довериться встроенному конвертеру, а потом результат "обрабатывать напильником"?

Давайте, я покажу, как можно довольно просто выгрузить данные в книгу MS Excel. Я считаю, нет нужды полностью создавать документ "с нуля" программно. Давайте поступим следующим образом. Сделаем в MS Excel шаблон будущего отчёта, затем поместим файл в макет 1С типа "Двоичные данные".


Форма обработки у меня выглядит следующим образом:


В поле "Имя файла" определим имя файла, в котором будут сохранены данные. Данные, которые будут выгружены в файл, это поля "Номер документа", "Дата документа" и табличная часть с колонками "Наименование", "Цена", "Количество", "Стоимость".

При нажатии на кнопку "Сформировать" управление будет передано процедуре ВыгрузитьВФайл(). И вот, собственно, вся выгрузка:

Функция ВыгрузитьШаблон()
    Макет = ЭтотОбъект.ПолучитьМакет("Шаблон_отчета");
    ХранилищеДанных = Новый ХранилищеЗначения(Макет);
    ДвоичныеДанные = ХранилищеДанных.Получить();
    Попытка
        ДвоичныеДанные.Записать(ИмяФайла);
        Возврат Истина;
    Исключение
        Сообщить(ОписаниеОшибки(), СтатусСообщения.Важное);
        Возврат Ложь;
    КонецПопытки;
КонецФункции

Процедура ВыгрузитьВФайл() Экспорт
    Если ВыгрузитьШаблон() Тогда
        Попытка
            Книга = ПолучитьCOMОбъект(ИмяФайла);
   
            Попытка
                ЛистШапка = Книга.WorkSheets("Шапка");
                Если ЛистШапка <> Неопределено Тогда
                    ЛистШапка.Cells(2, 2).Value = НомерДокумента;
                    ЛистШапка.Cells(3, 2).Value = ДатаДокумента;
                КонецЕсли;
    
                ЛистСпецификация = Книга.WorkSheets("Спецификация");
                Если ЛистСпецификация <> Неопределено Тогда
                    НомерСтроки = 3;
                    Для каждого ТекСтрока Из Спецификация Цикл
                        ЛистСпецификация.Cells(НомерСтроки, 1).Value = ТекСтрока.НомерСтроки;
                        ЛистСпецификация.Cells(НомерСтроки, 2).Value = ТекСтрока.Наименование;
                        ЛистСпецификация.Cells(НомерСтроки, 3).Value = ТекСтрока.Количество;
                        ЛистСпецификация.Cells(НомерСтроки, 4).Value = ТекСтрока.Стоимость;
                        НомерСтроки = НомерСтроки + 1;
                    КонецЦикла;
                    ЛистСпецификация.Cells(НомерСтроки, 2).Value = "ИТОГО:";
                    ЛистСпецификация.Cells(НомерСтроки, 4).Value = Спецификация.Итог("Стоимость");
                КонецЕсли;   
    
                Книга.Save();   
                Книга.Application.Visible = True;
    
                Файл = Новый Файл(ИмяФайла);   
                Книга.Windows(Файл.Имя).Visible = True;
    
                //Сообщить("Выгрузка успешно завершена!", СтатусСообщения.Информация);
            Исключение
                Книга.Application.Quit();
                Сообщить(ОписаниеОшибки(), СтатусСообщения.Важное);
            КонецПопытки;  
        Исключение
            Сообщить("Не удалось запустить MS Excel " + ОписаниеОшибки(), СтатусСообщения.Важное);
        КонецПопытки;   
    КонецЕсли;
КонецПроцедуры

Файл, который мы используем в качестве шаблона, сначала извлекается из макета и сохраняется под именем, определённом пользователем. Затем файл открывается с помощью COM-объекта (MS Excel должен быть установлен на компьютере) и наполняется данными. Скачайте обработку ВыгрузкаДанныхВMicrosoftExcel.epf здесь и посмотрите, как это работает.

Комментировать в ВКонтакте

Комментировать в Facebook

Комментировать в Blogger

2 комментария:

  1. Здравствуйте!
    А закрузка из MS Excel в таб документа в этом гуду уже не будет? В следуещем, да?

    ОтветитьУдалить