На первый взгляд может показаться, что нет никакой нужды выгружать данные из 1С:Предприятия в MS Excel. Гораздо комфортнее сделать привычный отчёт в формате табличного документа 1С (*.mxl), а затем просто сохранить его в формате MS Excel (*.xls) с помощью встроенного конвертера платформы 1С:Предприятие.
Но не всё так однозначно. Бывают ситуации, когда либо результат преобразования может не соответствовать вашим ожиданиям, либо возможностей встроенного конвертера недостаточно. Например, представьте, что нужно выгрузить данные в книгу Excel, содержащую возможности, недоступные в табличных документах 1С:Предприятия: многостраничные книги, формулы, макросы и т. д. Не лучше в таком случае сделать выгрузку данных непосредственно в файл *.xls, полностью контролируя процесс, чем довериться встроенному конвертеру, а потом результат "обрабатывать напильником"?
Давайте, я покажу, как можно довольно просто выгрузить данные в книгу MS Excel. Я считаю, нет нужды полностью создавать документ "с нуля" программно. Давайте поступим следующим образом. Сделаем в MS Excel шаблон будущего отчёта, затем поместим файл в макет 1С типа "Двоичные данные".
Форма обработки у меня выглядит следующим образом:
В поле "Имя файла" определим имя файла, в котором будут сохранены данные. Данные, которые будут выгружены в файл, это поля "Номер документа", "Дата документа" и табличная часть с колонками "Наименование", "Цена", "Количество", "Стоимость".
При нажатии на кнопку "Сформировать" управление будет передано процедуре ВыгрузитьВФайл(). И вот, собственно, вся выгрузка:
Файл, который мы используем в качестве шаблона, сначала извлекается из макета и сохраняется под именем, определённом пользователем. Затем файл открывается с помощью COM-объекта (MS Excel должен быть установлен на компьютере) и наполняется данными. Скачайте обработку ВыгрузкаДанныхВMicrosoftExcel.epf здесь и посмотрите, как это работает.
Но не всё так однозначно. Бывают ситуации, когда либо результат преобразования может не соответствовать вашим ожиданиям, либо возможностей встроенного конвертера недостаточно. Например, представьте, что нужно выгрузить данные в книгу 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 здесь и посмотрите, как это работает.
Здравствуйте!
ОтветитьУдалитьА закрузка из MS Excel в таб документа в этом гуду уже не будет? В следуещем, да?
То же самое, только наоборот.
Удалить