На первый взгляд может показаться, что нет никакой нужды выгружать данные из 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 в таб документа в этом гуду уже не будет? В следуещем, да?
То же самое, только наоборот.
Удалить