Здравствуйте!
Пытаюсь программным способом реализовать выгрузку строк тч документа в Excel. При выгрузке файл Excel создается, но не заполняется. А при открытии вверку документа появляется сообщение: "Защищенный просмотр. Обнаружена проблема с этим файлом. Редактирование может повредить компьютер. Щелкните для получения дополнительных сведений."

Код прилагаю:

```1c
    &НаКлиенте
    Процедура ВыгрузитьСбер(Команда)
    Режим = РежимДиалогаВыбораФайла.Сохранение;
    ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим);
    ДиалогОткрытияФайла.ПолноеИмяФайла = ";
    ДиалогОткрытияФайла.МножественныйВыбор = Ложь;
    Текст = "ru = "Таблица XLS"; en = "XLS table"";
    Фильтр = НСтр(Текст)+"(*.xls)|*.xls";
    ДиалогОткрытияФайла.Фильтр = Фильтр;
    ДиалогОткрытияФайла.Заголовок = "Выберите путь для сохранения";
    Если ДиалогОткрытияФайла.Выбрать() Тогда
    ПутьКФайлу = ДиалогОткрытияФайла.ПолноеИмяФайла;
    Иначе
    Текст = "Путь сохранения не выбран!";
    Предупреждение(Текст);
    Возврат;
    КонецЕсли;

    xlLastCell = 11;

    Excel = Новый COMОбъект("Excel.Application");
    Excel.WorkBooks.Add(); //Имя файла
    Состояние("Создание файла Microsoft Excel...");
    ExcelЛист = Excel.Sheets(1); //Номер листа Excel

    ActiveCell = Excel.ActiveCell.SpecialCells(xlLastCell);
    RowCount = ActiveCell.Row; //Строчек
    ColumnCount = ActiveCell.Column;

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

    Для Каждого Стр Из Объект.Список Цикл

    Для Row = 2 По RowCount Цикл

    //Если Не ЗначениеЗаполнено(Стр.ЛицевойСчетДоп) Тогда

    ExcelЛист.Cells(Row,3).Value = Стр.Сумма;
    ExcelЛист.Cells(Row,2).Value = Стр.ЛицевойСчет;

    //Сообщить(Стр.ЛицевойСчет);
    //КонецЕсли;
    КонецЦикла;

    КонецЦикла;

    ТаблицаСохранение.Записать(ПутьКФайлу, ТипФайлаТабличногоДокумента.XLS);
    Excel.WorkBooks.Close();
    Excel.Quit();

    КонецПроцедуры
```

Как исправить подобную ситуацию?
Помогите, пожалуйста, с реализацией хотелки.
Спасибо.
---
зачем ты вообще подключаешься к экселю, если записываешь табличный документ ?
Убирай всю эту чачу с excel.application

и кури программное заполнение табличного документа. Например вот

который в конце останется только сохранить в формате xls
---
Видимо так:

Если в запросе нельзя проверить условие в ГДЕ, то тогда
в цикле проверить поля на нужное условие

Пока РезультатЗапроса.Следующий() Цикл

  если НЕ ..... тогда
        продолжить;
  конецесли;

Конеццикла;
---
тьфу , скобки лишние

```1c
    СЧ= 2;

    Пока РезультатЗапроса.Следующий() Цикл
    ТабДок.Область("R"+СЧ+"C3").Текст = РезультатЗапроса.ФИОНаименование;
    ТабДок.Область("R"+СЧ+"C7").Текст = РезультатЗапроса.ЛицевойСчет;
    ТабДок.Область("R"+СЧ+"C6").Текст = РезультатЗапроса.Сумма;
    ТабДок.Область("R"+СЧ+"C5").Текст = РезультатЗапроса.Период;
    ТабДок.Область("R"+СЧ+"C8").Текст = РезультатЗапроса.Примечание;
    ТабДок.Область("R"+СЧ+"C9").Текст = РезультатЗапроса.МестоПроведенияРабот;
    СЧ= СЧ+ 1;
    КонецЦикла
```
---
зачем ты вообще подключаешься к экселю, если записываешь табличный документ ?
Убирай всю эту чачу с excel.application

и кури программное заполнение табличного документа. Например вот

который в конце останется только сохранить в формате xls
---
Пробую сделать по примеру из ссылки. Создал запрос. Первое на что начало ругаться, это переменная К, потом, метод показать только на клиенте выполняется.
---
Не городите огород...

```1c
    ТабДок = Новый ТабличныйДокумент;
    Тз = Новый ТаблицаЗначений;
    Построитель = Новый ПостроительОтчета;
    Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТЗ);
    Построитель.Выполнить();
    Построитель.Вывести(ТабДок);
    ТабДок.Записать(ПутьКФайлу,ТипФайлаТабличногоДокумента.XLS);
```

// Поправил :-) (4) (5) Спасибо..
---
Не городите огород...
Объект.Список.Записать(ПутьКФайлу,ТипФайлаТабличногоДокумента.XLS);
не пори горячку, у ТЧ нет метода Записать()
---
Нет метода записать у ТЧ
---
ТабДок = Новый ТабличныйДокумент;
Тз = Новый ТаблицаЗначений;
Построитель = Новый ПостроительОтчета;
Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТЗ);
Построитель.Выполнить();
Построитель.Вывести(ТабДок);
ТабДок.Записать(ПутьКФайлу,ТипФайлаТабличногоДокумента.XLS);

А это все не сервере должно выполняться?
---
таблица значений, конечно только на сервере живет.
твой задача сформировать табдок,
а уж каким способом - тебе решать.

Тут уж по ситуации смотри,
можешь на сервере сформировать и вернуть на клиента,
можешь прямо на клиенте, но другими способами.
---
Зачем вообще все это городить? Вывести ТЧ в табличный документ и сохранить его в Excel средствами платформы (файл- сохранить как...) - и все дела.
---
Зачем вообще все это городить?
Можно конечно и не городить и переложить эту работу на пользователя...но мне кажется, что пользователь рад не очень будет...особенно если нужно обработать сотню доков :-)
---
Ситуация такая, что необходимо разделить сотрудников на разные реестры, потому что у некоторых расчетные счета в одном банке, а у некоторых в другом. Поэтому и необходимо "все это городить", чтобы упростить работу бухгалтеру с отбором и сортировкой.
---
Сделать отбор в списке, вывести список с этим отбором в табличный документ. Далее сохранить этот документ как... xls файл. Или сделать простенький отчетик на СКД, результат которого опять же сохранить как...xls файл.
---
Пробовал такой вариант с отбором в списке. Не получается разделить, поле ЛицевойСчет либо заполнено, либо нет, а разбить на разные банки таким образом не получится. Отчет слишком громоздко для буха в данном случае. Поэтому нужно из документа получать этот список.
---
Тогда печатная форма к документу.
---
Не получается разделить, поле ЛицевойСчет либо заполнено
Я так понял у Вас бухгалтерия 3.0, а что за объект.список?
---
Нет, база самописная на УФ.
Объект.список - это ТЧ текущего документа, табличная часть так называется ("Список").
---
С выводом в табличный документ вроде бы разобрался.
---
```1c
    &НаСервере
    Функция ВыгрузитьВТБНаСервере(ТабДок)

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

    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | ВедомостьПодотчетСписок.ФИО.Код КАК ФИОКод,
    | ВедомостьПодотчетСписок.ФИО.Наименование КАК ФИОНаименование,
    | ВедомостьПодотчетСписок.ФИО.ЛицевойСчет КАК ФИОЛицевойСчет,
    | ВедомостьПодотчетСписок.Период КАК Период,
    | ВедомостьПодотчетСписок.Сумма КАК Сумма,
    | ВедомостьПодотчетСписок.ЛицевойСчет КАК ЛицевойСчет,
    | ВедомостьПодотчетСписок.Примечание КАК Примечание,
    | ВедомостьПодотчетСписок.МестоПроведенияРабот КАК МестоПроведенияРабот
    |ИЗ
    | Документ.ВедомостьПодотчет.Список КАК ВедомостьПодотчетСписок
    |ГДЕ
    | ВедомостьПодотчетСписок.Ссылка = &Ссылка";
    Запрос.УстановитьПараметр("Ссылка",Объект.Ссылка);
    РезультатЗапроса = Запрос.Выполнить().Выбрать();
    К = 1;

    Пока РезультатЗапроса.Следующий() Цикл
    ТабДок.Область("R"+(К+1)+"C3").Текст = РезультатЗапроса.ФИОНаименование;
    ТабДок.Область("R"+(К+1)+"C7").Текст = РезультатЗапроса.ЛицевойСчет;
    ТабДок.Область("R"+(К+1)+"C6").Текст = РезультатЗапроса.Сумма;
    ТабДок.Область("R"+(К+1)+"C5").Текст = РезультатЗапроса.Период;
    ТабДок.Область("R"+(К+1)+"C8").Текст = РезультатЗапроса.Примечание;
    ТабДок.Область("R"+(К+1)+"C9").Текст = РезультатЗапроса.МестоПроведенияРабот;
    //K = K + 1;
    КонецЦикла;
    Рамка = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.Сплошная, 1);
    Возврат ТабДок;
    КонецФункции

    &НаКлиенте
    Процедура ВыгрузитьВТБ(Команда)

    ТабДок = Новый ТабличныйДокумент;
    ВыгрузитьВТБНаСервере(ТабДок);
    ТабДок.ОтображатьСетку = Истина;
    ТабДок.Показать();

    КонецПроцедуры
```
---
Но выводит только последнюю строчку из списка, добавив строчку К = К +1, появляется ошибка "Преобразование значения к типу Число не может быть выполнено".
---
а "Преобразование значения к типу Число не может быть выполнено".
а так

```1c
    К = 2;

    Пока РезультатЗапроса.Следующий() Цикл
    ТабДок.Область("R"+(К)+"C3").Текст = РезультатЗапроса.ФИОНаименование;
    ТабДок.Область("R"+(К)+"C7").Текст = РезультатЗапроса.ЛицевойСчет;
    ТабДок.Область("R"+(К)+"C6").Текст = РезультатЗапроса.Сумма;
    ТабДок.Область("R"+(К)+"C5").Текст = РезультатЗапроса.Период;
    ТабДок.Область("R"+(К)+"C8").Текст = РезультатЗапроса.Примечание;
    ТабДок.Область("R"+(К)+"C9").Текст = РезультатЗапроса.МестоПроведенияРабот;
    K = K + 1;
    КонецЦикла;
```
---
И так тоже ошибка
---
тьфу , скобки лишние

```1c
    СЧ= 2;

    Пока РезультатЗапроса.Следующий() Цикл
    ТабДок.Область("R"+СЧ+"C3").Текст = РезультатЗапроса.ФИОНаименование;
    ТабДок.Область("R"+СЧ+"C7").Текст = РезультатЗапроса.ЛицевойСчет;
    ТабДок.Область("R"+СЧ+"C6").Текст = РезультатЗапроса.Сумма;
    ТабДок.Область("R"+СЧ+"C5").Текст = РезультатЗапроса.Период;
    ТабДок.Область("R"+СЧ+"C8").Текст = РезультатЗапроса.Примечание;
    ТабДок.Область("R"+СЧ+"C9").Текст = РезультатЗапроса.МестоПроведенияРабот;
    СЧ= СЧ+ 1;
    КонецЦикла
```
---
Добрый вечер а как теперь это все дело сохранить в эксель? после вывода выбрать место куда и сохранить
---
Вообще такие вещи через макет лучше делать
---
Получилось. Спасибо.
А можете подсказать, есть еще одна дополнительная колонка "ЛицевойСчетДоп", у которой отключена видимость. Программно, если счет не удовлетворяет условию дублируется в эту колонку. Можно ли отобрать только те строки, в которых данное поле заполнено?
---
Видимо так:

Если в запросе нельзя проверить условие в ГДЕ, то тогда
в цикле проверить поля на нужное условие

Пока РезультатЗапроса.Следующий() Цикл

  если НЕ ..... тогда
        продолжить;
  конецесли;

Конеццикла;
---
Спасибо, получилось.
---
Всем спасибо за помощь.
---
Еще момент, скажите, пожалуйста, как сделать сортировку как в тч, а не как хочется табличному документу?
---
по номеру строки ТЧ в запросе
---
Спасибо.