Добрый день!
Делаю загрузку из экселя, код обработки типа такой:

```1c
    &НаКлиенте
    Процедура ИмяФайлаДанныхНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)

    СтандартнаяОбработка = ЛОЖЬ;

    ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
    ДиалогОткрытияФайла.Заголовок = "Выберите файл с данными";
    ДиалогОткрытияФайла.Фильтр = "Файлы Excel(*.xls; *.xlsx)|*.xls; *.xlsx";
    ДиалогОткрытияФайла.МножественныйВыбор = ЛОЖЬ;
    ДиалогОткрытияФайла.ПолноеИмяФайла = ";
    ДиалогОткрытияФайла.ПроверятьСуществованиеФайла = Истина;

    Если ДиалогОткрытияФайла.Выбрать() Тогда
    Объект.ИмяФайлаДанных = ДиалогОткрытияФайла.ПолноеИмяФайла;
    КонецЕсли;

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

    &НаКлиенте
    Процедура Прочитать(Команда)

    ЧтениеФайлаНаСервере();
    Сообщить("Загрузка данных завершена!");

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

    &НаСервере
    Процедура ЧтениеФайлаНаСервере()

    Попытка
    Эксель = Новый COMОбъект("Excel.Application");
    Эксель.WorkBooks.Open(Объект.ИмяФайлаДанных);
    Исключение
    Сообщить("Ошибка при загрузке!");
    Возврат;
    КонецПопытки;

    Попытка
    Эксель.Sheets(1).Select();
    Исключение
    Эксель.ActiveWorkBook.Close();
    Эксель = 0;
    Сообщить("Не найден первый лист документа!");
    ОтменитьТранзакцию();
    Возврат;
    КонецПопытки;

    //дальше тут идут всякие действия с файлом

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

Если запускаю внешнюю обработка на серверном компе, все работает и читает.
Если запускаю с компа клиента (там, где расположение базы в настройках - "на веб-сервере") сообщает "Ошибка при загрузке!" (тот текст ошибки, что написал я) и выпадает. Вопрос: что я делаю не так? Через конфигуратор, понятное дело, посмотреть не могу с компа-клиента.
---
если не переделывать получение имени файла, то как-то так:

```1c
    &НаКлиенте
    Процедура Прочитать(Команда)
    ПодключитьРасширениеРаботыСФайлами();
    Файл = Новый Файл(Объект.ИмяФайлаДанных);
    Если Не Файл.Существует() Тогда
    Сообщить("Не выбран файл");
    Возврат;
    КонецЕсли;
    ДвоичныеДанные = Новый ДвоичныеДанные(Объект.ИмяФайлаДанных);
    АдресХранилища = ПоместитьВоВременноеХранилище(ДвоичныеДанные, УникальныйИдентификатор);
    ПрочитатьНаСервере(АдресХранилища);
    КонецПроцедуры

    &НаСервере
    Процедура ПрочитатьНаСервере(Адрес)
    Файл = ПолучитьИзВременногоХранилища(Адрес);
    Если Прав(Объект.ИмяФайлаДанных, 3) = "xls" Тогда
    РасширениеФайла = "xls";
    Иначе
    РасширениеФайла = "xlsx";
    КонецЕсли;

    ИмяФайла = ПолучитьИмяВременногоФайла(РасширениеФайла);
    Файл.Записать(ИмяФайла);

    Попытка
    Эксель = Новый COMОбъект("Excel.Application");
    Эксель.WorkBooks.Open(ИмяФайла);
    Исключение
    Сообщить("Ошибка при загрузке!");
    Возврат;
    КонецПопытки;
    КонецПроцедуры
```

Тут можно несколько оптимизировать получение расширения файла, но необходимо править и обработчик выбора файла.
---
Не смотрел весь код. И этого тоже не нужно. Через табличный документ загружать можно.
---
&НаКлиенте
Объект.ИмяФайлаДанных = ДиалогОткрытияФайла.ПолноеИмяФайла;

&НаСервере
Эксель.WorkBooks.Open(Объект.ИмяФайлаДанных);

Ничто не смущает?

Для начала нужно передать файл с клиента на сервер, и уже из сервера загружать файл.
Мало того, для веб-клиента необходимо еще ПодключитьРасширениеРаботыСФайлами.
---
вот никогда не работал с веб-серверами, поэтому не подскажете, как правильно передать файл с клиента?
---
если не переделывать получение имени файла, то как-то так:

```1c
    &НаКлиенте
    Процедура Прочитать(Команда)
    ПодключитьРасширениеРаботыСФайлами();
    Файл = Новый Файл(Объект.ИмяФайлаДанных);
    Если Не Файл.Существует() Тогда
    Сообщить("Не выбран файл");
    Возврат;
    КонецЕсли;
    ДвоичныеДанные = Новый ДвоичныеДанные(Объект.ИмяФайлаДанных);
    АдресХранилища = ПоместитьВоВременноеХранилище(ДвоичныеДанные, УникальныйИдентификатор);
    ПрочитатьНаСервере(АдресХранилища);
    КонецПроцедуры

    &НаСервере
    Процедура ПрочитатьНаСервере(Адрес)
    Файл = ПолучитьИзВременногоХранилища(Адрес);
    Если Прав(Объект.ИмяФайлаДанных, 3) = "xls" Тогда
    РасширениеФайла = "xls";
    Иначе
    РасширениеФайла = "xlsx";
    КонецЕсли;

    ИмяФайла = ПолучитьИмяВременногоФайла(РасширениеФайла);
    Файл.Записать(ИмяФайла);

    Попытка
    Эксель = Новый COMОбъект("Excel.Application");
    Эксель.WorkBooks.Open(ИмяФайла);
    Исключение
    Сообщить("Ошибка при загрузке!");
    Возврат;
    КонецПопытки;
    КонецПроцедуры
```

Тут можно несколько оптимизировать получение расширения файла, но необходимо править и обработчик выбора файла.
---
Ага, спасибо, попробую и отпишусь!
---
С COM-объектом не заработало, сейчас попробую в табличный документ записать
---
ошибка прежняя?
---
Файл.Существует() на клиенте в современных конфигурациях нельзя делать, тем более на веб.
см. в коде обработки контекстное меню Рефакторинг - Нерекомендуемые синхронные вызовы. Если что-то есть, нужно исправлять.
---
прям таки нельзя делать? И чем обосновано: "тем более на веб"?

То что синхронные операции рекомендуется заменить на асинхронные, не означает что "нельзя делать".
Да и в последних типовых синхронные вызовы пока не запрещены.
---
Если разработка ведётся сейчас, то желательно сразу делать правильно, чтобы потом не переделывать.
Если база на 1С фреш, то такая обработка не пройдёт аудит и её не разрешат использовать.
---
а где видели на Фреш следующий код?
Эксель = Новый COMОбъект("Excel.Application");
---
Не смотрел весь код. И этого тоже не нужно. Через табличный документ загружать можно.
---
при загрузке через ТабличныйДокумент нужно сохранять в хранилище исходный файл в моем случае, или можно сразу?
---
А что с табличным документов делать на клиенте? Если загружать в базу, то нужно создать таблицу значений из табл документа и использовать её в запросах. А это делается на сервере.
И на клиенте ТабличныйДокумент не читается вроде бы.
---
В общем, совместил совет с ПоместитьВоВременноеХранилище, и с ТабличнымДокументом, и заработало.

Спасибо!

```1c
    &НаКлиенте
    Процедура ИмяФайлаДанныхНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)

    СтандартнаяОбработка = ЛОЖЬ;

    ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
    ДиалогОткрытияФайла.Заголовок = "Выберите файл с данными";
    ДиалогОткрытияФайла.Фильтр = "Файлы Excel(*.xls; *.xlsx)|*.xls; *.xlsx";
    ДиалогОткрытияФайла.МножественныйВыбор = ЛОЖЬ;
    ДиалогОткрытияФайла.ПолноеИмяФайла = ";
    ДиалогОткрытияФайла.ПроверятьСуществованиеФайла = Истина;

    Если ДиалогОткрытияФайла.Выбрать() Тогда
    Объект.ИмяФайлаДанных = ДиалогОткрытияФайла.ПолноеИмяФайла;
    КонецЕсли;

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

    &НаКлиенте
    Процедура Прочитать(Команда)

    ПодключитьРасширениеРаботыСФайлами();
    Файл = Новый Файл(Объект.ИмяФайлаДанных);
    Если Не Файл.Существует() Тогда
    Сообщить("Не выбран файл");
    Возврат;
    КонецЕсли;
    ДвоичныеДанные = Новый ДвоичныеДанные(Объект.ИмяФайлаДанных);
    АдресХранилища = ПоместитьВоВременноеХранилище(ДвоичныеДанные, УникальныйИдентификатор);
    ЧтениеФайлаНаСервере(АдресХранилища);
    Сообщить("Загрузка данных завершена!");

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

    &НаСервере
    Процедура ЧтениеФайлаНаСервере(АдресХранилища)

    Файл = ПолучитьИзВременногоХранилища(АдресХранилища);
    Если Прав(Объект.ИмяФайлаДанных, 3) = "xls" Тогда
    РасширениеФайла = "xls";
    Иначе
    РасширениеФайла = "xlsx";
    КонецЕсли;

    ИмяФайла = ПолучитьИмяВременногоФайла(РасширениеФайла);
    Файл.Записать(ИмяФайла);

    ТабличныйДокумент = Новый ТабличныйДокумент;
    Попытка
    ТабличныйДокумент.Прочитать(ИмяФайла, СпособЧтенияЗначенийТабличногоДокумента.Значение);
    Исключение
    Сообщить(ОписаниеОшибки(), СтатусСообщения.Внимание);
    КонецПопытки;

    ОбластьФайла = ТабличныйДокумент;

    //тут идут всякие неинтересные нам действия
    //...
    КонецПроцедуры
```