Здравствуйте, мне необходимо внешний отчёт сохранялся в формате excel . Подскажите как происходит считывание данных с 1С ?
---
Отчет выводится в табличный документ. А у табличного документа есть метод Записать(ПутьСохранения,Расширение)
---
Где-то на просторах Инфостарта взял такую функцию, где - не помню:

Процедура СохранитьВЭксельЧерезТабличныйДокумент(ИмяФайлаЭксель,Таблица) ЭКСПОРТ

 ТабДок = Новый ТабличныйДокумент;

 КоличествоКолонок = Таблица.Колонки.Количество();

 //Формируем строку с заголовками
 Для Счетчик = 1 По КоличествоКолонок Цикл

  ТекущаяКолонка = Таблица.Колонки[Счетчик - 1];
  ТабДок.Область("R1C" + Счетчик).Текст = ТекущаяКолонка.Имя;

 КонецЦикла;

 //Добавляем строки из таблицы
 НомерСтроки = 2;
 Для каждого СтрокаТаблицы Из Таблица Цикл

  Для НомерКолонки = 1 По КоличествоКолонок Цикл

   ТабДок.Область("R" + стрЗаменить(строка(НомерСтроки),Символы.НПП,"") + "C" + стрЗаменить(строка(НомерКолонки),Символы.НПП,"") ).Текст = СтрЗаменить(Стрзаменить(Строка(СтрокаТаблицы[НомерКолонки - 1]), Символы.НПП,""),",",".");

   Если Строка(ТипЗнч(СтрокаТаблицы[4]))="Число" тогда
    ТабДок.Область("R" + стрЗаменить(строка(НомерСтроки),Символы.НПП,"") + "C" + стрЗаменить(строка(НомерКолонки),Символы.НПП,"") ).Формат = "ЧЦ=15; ЧДЦ=2; ЧРД=.; ЧРГ=' '; ЧГ=0";
   ИначеЕсли Строка(ТипЗнч(СтрокаТаблицы[4]))="Дата" тогда
    ТабДок.Область("R" + стрЗаменить(строка(НомерСтроки),Символы.НПП,"") + "C" + стрЗаменить(строка(НомерКолонки),Символы.НПП,"") ).Формат = "ДФ=dd.MM.yyyy; ДЛФ=D; ДП=-";
   КонецЕсли;

  КонецЦикла;
  НомерСтроки = НомерСтроки + 1;

 КонецЦикла;

 //Записываем табличный документ в файл Excel
 ТабДок.Записать(ИмяФайлаЭксель, ТипФайлаТабличногоДокумента.XLSX);

Конецпроцедуры
---
В клиентском общем модуле

```1c
    Процедура ТабДокОткрытьВЭкселе(ТабДок,ПрефиксИмени,СостояниеНа='00010101',Заказ=Неопределено) Экспорт
    Диалог=Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);
    Диалог.Заголовок="Открыть в Экселе";
    ПолноеИмяФайла=ПрефиксИмени;
    Если Заказ<>Неопределено Тогда
    ПолноеИмяФайла=ПолноеИмяФайла+"_"+Заказ;
    КонецЕсли;
    Если СостояниеНа<>'00010101' Тогда
    ПолноеИмяФайла=ПолноеИмяФайла+"_"+Формат(СостояниеНа,"ДФ=yyMMdd");
    КонецЕсли;
    ПолноеИмяФайла=ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыВИмениФайла(ПолноеИмяФайла,");
    Диалог.ПолноеИмяФайла=ПолноеИмяФайла;
    Диалог.ПредварительныйПросмотр=Ложь;
    Диалог.Фильтр="Документ Microsoft Excel (*.xls)|*.xls|";
    Если Диалог.Выбрать() Тогда
    ИмяФайла=Диалог.ПолноеИмяФайла;
    Попытка
    ТабДок.Записать(ИмяФайла,ТипФайлаТабличногоДокумента.XLS);
    Исключение
    Ошибка=ИнформацияОбОшибке();
    ПоказатьПредупреждение(,"Файл не записан. "+КраткоеПредставлениеОшибки(Ошибка));
    Возврат;
    КонецПопытки;
    Иначе
    Возврат;
    КонецЕсли;
    Попытка
    //получаем свежевыгруженный файл через COM
    xlLastCell=11;
    Excel=ПолучитьCOMОбъект(","Excel.Application");
    Книга=Excel.Workbooks.Open(ИмяФайла);
    //меняем стиль ссылок на более привычный (колонки буквами)
    //Excel.Application.ReferenceStyle = 1;
    Лист=Книга.WorkSheets(1);
    //устанавливаем адекватные отступы, 1С выгружает с очень большими отступами
    //Лист.PageSetup.LeftMargin=Excel.CentimetersToPoints(1);
    //Лист.PageSetup.RightMargin=Excel.CentimetersToPoints(0.2);
    //Лист.PageSetup.TopMargin=Excel.CentimetersToPoints(0.7);
    //Лист.PageSetup.BottomMargin=Excel.CentimetersToPoints(0.5);
    ////устанавливаем ориентацию страницы, стандартная выгрузка выгружает всегда в "портрете"
    //Если Ландшафт Тогда
    // Лист.PageSetup.Orientation=2;
    //Иначе
    // Лист.PageSetup.Orientation=1;
    //КонецЕсли;
    //получаем количество строк и колонок в файле
    ActiveCell=Excel.ActiveCell.SpecialCells(xlLastCell);
    КоличествоСтрок=ActiveCell.Row;
    КоличествоКолонок=ActiveCell.Column;
    //Excel.DisplayAlerts = 0;
    Лист.Cells.Replace("=","=");

    Лист.Columns(3).NumberFormat="# ##0,00";
    Лист.Columns(4).NumberFormat="# ##0,00";
    Лист.Columns(5).NumberFormat="# ##0,00";
    Лист.Columns(6).NumberFormat="# ##0,00";
    Лист.Columns(7).NumberFormat="# ##0,00";
    Лист.Columns(8).NumberFormat="# ##0,00";
    Лист.Columns(9).NumberFormat="# ##0,00";
    Лист.Columns(10).NumberFormat="# ##0,00";

    //аа = "+Лист.Cells(14,3).Value;
    //Убираем числовой формат в заголовке таблицы
    СтрНомеровКолонок=0;
    Для Стр=1 По КоличествоСтрок Цикл
    Если Лист.Cells(Стр,2).Value="№ п/п" Тогда
    Если ПрефиксИмени="ОтчКалькПоНЗ" Тогда
    СтрНомеровКолонок=Стр+2;
    КонецЕсли;
    Лист.Cells(Стр,3).NumberFormat=";
    Лист.Cells(Стр,4).NumberFormat=";
    Лист.Cells(Стр,5).NumberFormat=";
    Лист.Cells(Стр,6).NumberFormat=";
    Лист.Cells(Стр,7).NumberFormat=";
    Лист.Cells(Стр,8).NumberFormat=";
    Лист.Cells(Стр,9).NumberFormat=";
    Лист.Cells(Стр,10).NumberFormat=";
    Для Кол=3 По 10 Цикл
    Если Лист.Cells(Стр,Кол).Value="Итого" Тогда
    // Заменяем абсолютные адреса на относительные
    Стр1=Стр+1;
    Ф=Лист.Cells(Стр1,Кол).FormulaR1C1;
    К=Найти(Ф,"SUM");
    Если К=0 Тогда
    К=Найти(Ф,"=R");
    КонецЕсли;
    Пока К>0 Цикл
    Если Найти(Ф,"[")>0 Тогда
    Стр1=Стр1+1;
    Ф=Лист.Cells(Стр1,Кол).FormulaR1C1;
    К=Найти(Ф,"SUM");
    Продолжить;
    КонецЕсли;
    Ф1=";
    Л=1;
    Пока Л<=СтрДлина(ф) Цикл
    С=Сред(Ф,Л,1);
    Ф1=Ф1+С;
    Л=Л+1;
    Если С="R" Тогда
    СЧ=";
    С=Сред(Ф,Л,1);
    Пока С<>"C" Цикл
    СЧ=СЧ+С;
    Л=Л+1;
    С=Сред(Ф,Л,1);
    КонецЦикла;
    Ч=0+СЧ;
    Ч=Ч-Стр1;
    СЧ=Формат(Ч,"ЧДЦ=0");
    Если СЧ<>" Тогда
    Ф1=Ф1+"["+СЧ+"]";
    КонецЕсли;
    ИначеЕсли С="C" Тогда
    СЧ=";
    С=Сред(Ф,Л,1);
    Пока С<>":" И С<>")" Цикл
    СЧ=СЧ+С;
    Л=Л+1;
    С=Сред(Ф,Л,1);
    КонецЦикла;
    Ч=0+СЧ;
    Ч=Ч-Кол;
    СЧ=Формат(Ч,"ЧДЦ=0");
    Если СЧ<>" Тогда
    Ф1=Ф1+"["+СЧ+"]";
    КонецЕсли;
    КонецЕсли;
    КонецЦикла;
    Лист.Cells(Стр1,Кол).FormulaR1C1=Ф1;
    Стр1=Стр1+1;
    Ф=Лист.Cells(Стр1,Кол).FormulaR1C1;
    К=Найти(Ф,"SUM");
    Если К=0 Тогда
    К=Найти(Ф,"=R");
    КонецЕсли;
    КонецЦикла;
    КонецЕсли;
    КонецЦикла;
    КонецЕсли;
    КонецЦикла;
    //сс = Лист.Cells(49,5);
    //ф11=сс.Formula;
    //ф12=сс.FormulaR1C1;

    Если СтрНомеровКолонок>0 Тогда
    Лист.Cells(СтрНомеровКолонок,3).NumberFormat=";
    Лист.Cells(СтрНомеровКолонок,4).NumberFormat=";
    Лист.Cells(СтрНомеровКолонок,5).NumberFormat=";
    Лист.Cells(СтрНомеровКолонок,6).NumberFormat=";
    Лист.Cells(СтрНомеровКолонок,7).NumberFormat=";
    Лист.Cells(СтрНомеровКолонок,8).NumberFormat=";
    Лист.Cells(СтрНомеровКолонок,9).NumberFormat=";
    Лист.Cells(СтрНомеровКолонок,10).NumberFormat=";
    КонецЕсли;

    //стандартная выгрузка также "убивает" закладки, т.е. листы. Показываем их:
    Excel.ActiveWindow.DisplayWorkbookTabs=-1;
    Excel.ActiveWindow.TabRatio=0.25;
    Открывать=Истина;
    Если Открывать Тогда
    Excel.Visible=1;
    Книга.Save();
    Иначе
    Excel.Visible = 0;
    Книга.Save();
    Книга.Close();
    Excel.Quit();
    КонецЕсли;
    Исключение
    Ошибка=ИнформацияОбОшибке();
    ПоказатьПредупреждение(,"Ошибка обработки файла. "+КраткоеПредставлениеОшибки(Ошибка));
    Возврат;
    КонецПопытки;
    КонецПроцедуры
```
---
Меню: Файл - сохранить копию - выбираете тип файла Эксель
---
отчёт должен программно создавать файл excel и сохраняться в него
---
А отчет тоже формируется программно или его формирует оператор?
---
Файл - Сохранить - Эксель
---
отчёт должен программно создавать файл excel и сохраняться в него
---
Файл - Сохранить - Эксель
---
Думаю, можете отметить (6) как решение )
---
выдаёт ошибку
---
Потому что надо прописать полный путь с именем файла и расширением.
D:\users\ввв\Рабочий стол\ФайлЭксель.xlsx
---
А оно тогда не в каталог пользователя пыталось бы?
---
Это просто пример пути. Вы же указали просто какую то папку, не понятно где расположенную и прочее.
Путь сохранения файла надо указывать полностью. А так же, такой путь должен существовать, то есть, если нет какой то папки, то выдаст ошибку.
---
Нет, 1С не понимает сокращенных путей. Нужно указать полностью.

```1c
    //Возвращает что-то типо: C:\Documents and Settings\E.S.Migachev\Мои документы\
    Функция КаталогМоиДокументы() Экспорт

    App = Новый COMОбъект("Shell.Application");
    Folder = App.Namespace(5);
    Результат = ";
    Попытка
    Результат = Folder.Self.Path;
    Исключение
    Результат = ";
    КонецПопытки;
    Если Результат = " Тогда
    Результат = КаталогВременныхФайлов();
    КонецЕсли;
    Возврат Результат+"\";

    КонецФункции
```
---
Есть глобальный метод КаталогДокументов().
---
Да, выше ответили по нему как раз
---
Ясно, думал он в любом случае в каталог временных попытается сначала
---
Не, если нужно в каталог временных фалов, тогда надо получить путь к этому каталогу: КаталогВременныхФайлов (TempFilesDir)
:-)
Как и в любом (почти любом) языке программирования. Компилятор/интерпритатор не будет за программиста разбираться, что он имел ввиду под сокращением, если таково не предусмотрено синтаксисом.
---
Отчет выводится в табличный документ. А у табличного документа есть метод Записать(ПутьСохранения,Расширение)