Не получается открыть Excel клиентом на сервере. На файле работает. Вот код:

```1c
    &НаСервере
    Процедура ВыгрузитьНаСервере()
    Excel = Новый COMОбъект("Excel.Application");
    Excel.Workbooks.Open(АдресВыгрузки + "\doc.xls");
    ...
```

Пишет ошибку:
{ВнешняяОбработка.ВнешняяОбработка_18_06_27_12.Форма.Форма.Форма(112)}: Ошибка при вызове метода контекста (Open): Произошла исключительная ситуация (Microsoft Excel): Sorry, we couldn't find D:\Выгрузка\doc.xls. Is it possible it was moved, renamed or deleted?
Не могу вспомнить метод для переключения работы с сервера. А может и нет его.
Так как делать?
---
Тогда по Вашим мотивам

```1c
    &НаСервере
    Процедура ПрочитатьЭксельНаСервере(ТД,Файл)
    ТД.Прочитать(Файл,СпособЧтенияЗначенийТабличногоДокумента.Значение);
    КонецПроцедуры

    &НаКлиенте
    Процедура ПрочитатьЭксель(Команда)
    Файл = "\\"+ИмяКомпьютера()+ Сред(Объект.ИмяФайла,3,СтрДлина(Объект.ИмяФайла)-3);
    ТД = Новый ТабличныйДокумент;
    ПрочитатьЭксельНаСервере(ТД,Файл);
    Тд.Показать();
    КонецПроцедуры

    &НаКлиенте
    Процедура ИмяФайлаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    Режим = РежимДиалогаВыбораФайла.Открытие;
    ДиалогСохраненияФайла = Новый ДиалогВыбораФайла(Режим);
    ДиалогСохраненияФайла.ПолноеИмяФайла = ";
    ДиалогСохраненияФайла.Заголовок = НСтр("ru = 'Выберите каталог для сохранения результата'");
    Если ДиалогСохраненияФайла.Выбрать() Тогда
    ФайлВыгрузки = ДиалогСохраненияФайла.ПолноеИмяФайла;
    КонецЕсли;
    Объект.ИмяФайла = ФайлВыгрузки;
    КонецПроцедуры
```
---
Sorry, we couldn't find
Написано ж что файл не найден. Надо его на сервер передать, сохранить во временных файлах, и там открывать
---
Так не хочу. Спасибо.
---
Программно, а не вручную
---
(3)
Интересно, как же вы хотите на сервере открыть то, чего "физически" там нет?
---
а придется.
Какая цель вообще открытия Excel именно на сервере?
Если файл находится на клиентском компьютере, и эксель есть на клиентском компьютере, то и открывайте его на клиенте.
---
Цель тут может быть только одна - завесить сервер ;))
---
(6) На сервере нет Excel. Поэтому не отрабатывает Excel.Workbooks.Open(Файл);
---
Sorry, we couldn't find D:\Выгрузка\doc.xls. Is it possible it was moved, renamed or deleted?
По этому адресу лежит файл на сервере? D:\Выгрузка\doc.xls

 Excel = Новый COMОбъект("Excel.Application"); - нужно ли устанавливать Excel на сервер 1с чтобы его там открывать?
---
Файл экселя можно прочитать 1С-кой и без экселя, есть методы. Они даже быстрее работают.
---
Табличный документ.

```1c
    ТД = Новый ТабличныйДокумент;
    ТД.Прочитать(ФайлEXCEL,СпособЧтенияЗначенийТабличногоДокумента.Значение );
```

 Задачу я уже решил. Мне интересны возможные решения с Экселем.
---
Так?
https://infostart.ru/public/549964/

или приведите примеры, если есть возможность.
---
Например так. На инфостарте несколько статей о методах видел. Опытным путем проверил: некоторые методы значительно быстрее работают, чем с помощью экселя читать.
---
```1c
    &НаСервере
    Процедура ВыгрузитьНаСервере(Файл)
    Excel = Новый COMОбъект("Excel.Application");
    Excel.Workbooks.Open(Файл);
    КонецПроцедуры

    &НаКлиенте
    Процедура Прочитатьэксель()
    СетевоеИмяКомпьютера = ИмяКомпьютера();
    ПутьКФайлу = "\\"+СетевоеИмяКомпьютера +"\Выгрузка\doc.xls"
    ВыгрузитьНаСервере(ПутьКФайлу );
    КонецПроцедуры
```

Шарим паку выгрузки...
---
На сервере нет Excel. Поэтому не отрабатывает "Open" в строке Excel.Workbooks.Open(Файл);
---
```1c
    &НаСервере
    Функция ВыгрузитьНаСервере()
    СетевоеИмяКомпьютера = ИмяКомпьютера();
    ПутьКФайлу = "\\"+СетевоеИмяКомпьютера +"\Выгрузка\doc.xls"
    Возврат ПутьКФайлу;
    КонецФункции

    &НаКлиенте
    Процедура Прочитатьэксель()
    ПутьКФайлу = ВыгрузитьНаСервере();
    Excel = Новый COMОбъект("Excel.Application");
    Excel.Workbooks.Open(ПутьКФайлу);
    КонецПроцедуры
```
---
На клиенте не делал потому, что запрос делается только на сервере.
Тогда вопрос как перенести ТаблицаЗначений из серверной процедуры, чтобы потом обработать на клиенте?
Реквизит формы можно, но очень много колонок заполнять нет желания.
Можно перенести строкой ТаблицуЗначений: СтрокаТЗ= ЗначениеВСтрокуВнутр(ТЗ); , но на клиенте ЗначениеИзСтрокиВнутр(СтрокаТЗ); не работает.
---
Тогда по Вашим мотивам

```1c
    &НаСервере
    Процедура ПрочитатьЭксельНаСервере(ТД,Файл)
    ТД.Прочитать(Файл,СпособЧтенияЗначенийТабличногоДокумента.Значение);
    КонецПроцедуры

    &НаКлиенте
    Процедура ПрочитатьЭксель(Команда)
    Файл = "\\"+ИмяКомпьютера()+ Сред(Объект.ИмяФайла,3,СтрДлина(Объект.ИмяФайла)-3);
    ТД = Новый ТабличныйДокумент;
    ПрочитатьЭксельНаСервере(ТД,Файл);
    Тд.Показать();
    КонецПроцедуры

    &НаКлиенте
    Процедура ИмяФайлаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    Режим = РежимДиалогаВыбораФайла.Открытие;
    ДиалогСохраненияФайла = Новый ДиалогВыбораФайла(Режим);
    ДиалогСохраненияФайла.ПолноеИмяФайла = ";
    ДиалогСохраненияФайла.Заголовок = НСтр("ru = 'Выберите каталог для сохранения результата'");
    Если ДиалогСохраненияФайла.Выбрать() Тогда
    ФайлВыгрузки = ДиалогСохраненияФайла.ПолноеИмяФайла;
    КонецЕсли;
    Объект.ИмяФайла = ФайлВыгрузки;
    КонецПроцедуры
```
---
Я делал через хранилище:

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

    //Если Не ЗначениеЗаполнено(Шаблон) Тогда
    // Сообщить("Укажите шаблон!");
    // возврат;
    //КонецЕсли;

    Если Не ЗначениеЗаполнено(ВыходнойФайл) Тогда
    Сообщить("Укажите имя файла для сохранения!");
    возврат;
    КонецЕсли;

    Если Не ЗначениеЗаполнено(СвойствоКодФИАС) Тогда
    Сообщить("Укажите свойство "Код ФИАС"");
    возврат;
    КонецЕсли;

    Шаблон = ПолучитьШаблон();
    Шаблон.Записать(ВыходнойФайл);

    ОбъектЭксель = Новый COMОбъект("Excel.Application");//Новый COMОбъект(ИмяФайлаШаблона);
    Попытка
    Book = ОбъектЭксель.WorkBooks.Open(ВыходнойФайл,0);
    Исключение
    Предупреждение("Не удалось открыть выходной файл");
    ОбъектЭксель.Quit();
    ОбъектЭксель = 0;
    ВызватьИсключение;
    возврат;
    КонецПопытки;

    Попытка
    ЗаполнитьДанные(Book);
    Исключение
    Book.Close();
    ОбъектЭксель.Quit();
    ОбъектЭксель = 0;
    ВызватьИсключение;
    возврат;
    КонецПопытки;

    Book.Save();
    Book.Close();
    ОбъектЭксель.Quit();
    ОбъектЭксель = 0;

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

    &НаСервере
    Функция ПолучитьМассивЛСДляВыгрузки()

    ТаблицаЛицевыхСчетов = ркОтборЛицевыхСчетовСервер.ПолучитьРезультат(КомпоновщикНастроек, УникальныйИдентификатор, ТекущаяДата());
    возврат ТаблицаЛицевыхСчетов.ВыгрузитьКолонку("ЛицевойСчет");

    КонецФункции

    &НаСервере
    Функция ПодготовитьТаблицыДляВыгрузки()

    ВозвращаемаяСтруктура = Новый Структура("ОсновныеСведения, Адреса");

    МассивЛицевыхСчетов = ПолучитьМассивЛСДляВыгрузки();

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

    Запрос.УстановитьПараметр("мЛицевыеСчета", МассивЛицевыхСчетов);
    Запрос.УстановитьПараметр("СвойствоОбщаяПлощадь", Константы.ркХарактеристикаОбщаяПлощадь.Получить());
    Запрос.УстановитьПараметр("СвойствоЖилаяПлощадь", Константы.ркХарактеристикаЖилаяПлощадь.Получить());
    Запрос.УстановитьПараметр("СтатусПроживающий", Константы.ркСтатусПроживает.Получить());

    тзОсновныеСведения = Запрос.Выполнить().Выгрузить();

    ВозвращаемаяСтруктура.ОсновныеСведения = ПоместитьВоВременноеХранилище(тзОсновныеСведения, УникальныйИдентификатор);

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

    Запрос.УстановитьПараметр("СвойствоКодФИАС", СвойствоКодФИАС);

    тзАдреса = Запрос.Выполнить().Выгрузить();

    ВозвращаемаяСтруктура.Адреса = ПоместитьВоВременноеХранилище(тзАдреса, УникальныйИдентификатор);

    возврат ВозвращаемаяСтруктура;

    КонецФункции

    &НаСервере
    Функция ПолучитьСтрокуТаблицы(АдресВоВременномХранилище, НомерСтрокиТаблицы)

    тзДанные = ПолучитьИзВременногоХранилища(АдресВоВременномХранилище);
    Если НомерСтрокиТаблицы > тзДанные.Количество()-1 Тогда
    возврат Неопределено;
    Иначе
    СтрокаТаблицы = тзДанные[НомерСтрокиТаблицы];
    СтруктураДанных = Новый Структура;
    Для Каждого Колонка Из тзДанные.Колонки Цикл
    СтруктураДанных.Вставить(Колонка.Имя, СтрокаТаблицы[Колонка.Имя]);
    КонецЦикла;

    возврат СтруктураДанных;
    КонецЕсли;

    КонецФункции

    &НаКлиенте
    Процедура ЗаполнитьДанные(Книга)

    Попытка
    ЛистОсновныеСведения = Книга.Sheets(1);
    ЛистПомещения = Книга.Sheets(2);
    Исключение
    Сообщить("Нет листов в книге!");
    возврат;
    КонецПопытки;

    АдресаТаблицДляВыгрузки = ПодготовитьТаблицыДляВыгрузки();

    //1. Основные сведения

    ПерваяСтрокаСДанными = 3;
    НомерСтрокиТаблицы = 0;
    НомерСтрокиExcel = ПерваяСтрокаСДанными - 1;

    АдресВоВременномХранилище = АдресаТаблицДляВыгрузки.ОсновныеСведения;

    Пока Истина Цикл

    СтрокаТаблицы = ПолучитьСтрокуТаблицы(АдресВоВременномХранилище, НомерСтрокиТаблицы);
    Если СтрокаТаблицы = Неопределено Тогда
    Прервать;
    КонецЕсли;

    НомерСтрокиExcel = НомерСтрокиExcel + 1;
    НомерСтрокиТаблицы = НомерСтрокиТаблицы + 1;

    ЛистОсновныеСведения.Cells(НомерСтрокиExcel, 1).Value = СтрокаТаблицы.ЛС_Код;
    ЛистОсновныеСведения.Cells(НомерСтрокиExcel, 3).Value = СтрокаТаблицы.Ответственный_Фамилия;
    ЛистОсновныеСведения.Cells(НомерСтрокиExcel, 4).Value = СтрокаТаблицы.Ответственный_Имя;
    ЛистОсновныеСведения.Cells(НомерСтрокиExcel, 5).Value = СтрокаТаблицы.Ответственный_Отчество;
    ЛистОсновныеСведения.Cells(НомерСтрокиExcel, 6).Value = СтрокаТаблицы.Ответственный_СНИЛС;
    ЛистОсновныеСведения.Cells(НомерСтрокиExcel, 7).Value = СтрокаТаблицы.ВидДокумента;
    ЛистОсновныеСведения.Cells(НомерСтрокиExcel, 8).Value = СтрокаТаблицы.НомерДокумента;
    ЛистОсновныеСведения.Cells(НомерСтрокиExcel, 9).Value = СтрокаТаблицы.СерияДокумента;
    ЛистОсновныеСведения.Cells(НомерСтрокиExcel, 10).Value = Формат(СтрокаТаблицы.ДатаВыдачи, "ДФ=dd.MM.yyyy");

    ЛистОсновныеСведения.Cells(НомерСтрокиExcel, 13).Value = СтрокаТаблицы.ОбщаяПлощадьЛС;
    ЛистОсновныеСведения.Cells(НомерСтрокиExcel, 14).Value = СтрокаТаблицы.ЖилаяПлощадьЛС;
    ЛистОсновныеСведения.Cells(НомерСтрокиExcel, 15).Value = СтрокаТаблицы.ОбщаяПлощадьЛС;
    ЛистОсновныеСведения.Cells(НомерСтрокиExcel, 16).Value = СтрокаТаблицы.КоличествоПроживающих;

    КонецЦикла;

    //2.Помещения

    ПерваяСтрокаСДанными = 3;
    НомерСтрокиТаблицы = 0;
    НомерСтрокиExcel = ПерваяСтрокаСДанными - 1;

    АдресВоВременномХранилище = АдресаТаблицДляВыгрузки.Адреса;

    Пока Истина Цикл

    СтрокаТаблицы = ПолучитьСтрокуТаблицы(АдресВоВременномХранилище, НомерСтрокиТаблицы);
    Если СтрокаТаблицы = Неопределено Тогда
    Прервать;
    КонецЕсли;

    НомерСтрокиExcel = НомерСтрокиExcel + 1;
    НомерСтрокиТаблицы = НомерСтрокиТаблицы + 1;

    ЛистПомещения.Cells(НомерСтрокиExcel, 1).Value = СтрокаТаблицы.ЛС_Код;

    ПредставлениеУлицы = ";
    Если ЗначениеЗаполнено(СтрокаТаблицы.Регион) Тогда
    ПредставлениеУлицы = Строка(СтрокаТаблицы.Регион);
    КонецЕсли;
    Если ЗначениеЗаполнено(СтрокаТаблицы.Район) Тогда
    ПредставлениеУлицы = ПредставлениеУлицы + ?(ПредставлениеУлицы = ", ", ", ") + СтрокаТаблицы.Район;
    КонецЕсли;
    Если ЗначениеЗаполнено(СтрокаТаблицы.Город) Тогда
    ПредставлениеУлицы = ПредставлениеУлицы + ?(ПредставлениеУлицы = ", ", ", ") + СтрокаТаблицы.Город;
    КонецЕсли;
    Если ЗначениеЗаполнено(СтрокаТаблицы.НаселенныйПункт) Тогда
    ПредставлениеУлицы = ПредставлениеУлицы + ?(ПредставлениеУлицы = ", ", ", ") + СтрокаТаблицы.НаселенныйПункт;
    КонецЕсли;
    Если ЗначениеЗаполнено(СтрокаТаблицы.УлицаНаименование) Тогда
    ПредставлениеУлицы = ПредставлениеУлицы + ?(ПредставлениеУлицы = ", ", ", ") + СтрокаТаблицы.УлицаНаименование;
    КонецЕсли;

    АдресПомещения = ПредставлениеУлицы
    + ", дом " + Строка(СтрокаТаблицы.НомерДома)
    + ?(ЗначениеЗаполнено(СтрокаТаблицы.Корпус), " корп. " + СтрокаТаблицы.Корпус, ")
    + ", "
    + СтрокаТаблицы.СокращенноеНаименованиеТипаПомещения+" "+СтрокаТаблицы.НомерПомещения;

    ЛистПомещения.Cells(НомерСтрокиExcel, 2).Value = АдресПомещения;
    ЛистПомещения.Cells(НомерСтрокиExcel, 3).Value = СтрокаТаблицы.КодДомаПоФИАС;
    ЛистПомещения.Cells(НомерСтрокиExcel, 4).Value = СтрокаТаблицы.НомерПомещения;
    ЛистПомещения.Cells(НомерСтрокиExcel, 7).Value = 100;

    КонецЦикла;

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

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

А вообще зачем на клиенте что-то обрабатывать, начал на сервере делать, доделай все на сервере, а на клиент уже дай результат.
---
На клиент какой "транспорт"? Тогда другая тема, но интересная. Я обычно через реквизит формы делаю, но сейчас было неудобно. Достаточно много колонок.