Есть расширение, в нем я загружаю данные из Excel но встретился с ошибкой когда файл расположен на
клиентской "тачке", а 1С на сервере...

```1c
    {ЗагрузкаЗаказов Документ.ЗаказКлиента.Форма.ФормаСпискаДокументов.Форма(7)}: Ошибка при вызове метода контекста (Прочитать): Каталог не обнаружен 'C:\Users\Gordeev\Desktop\Новая папка\ОтчетОРТ.xlsx'
```

```1c
    &НаСервере
    Процедура MAD_ВыбратьПослеНаСервере(ИмяФайла)

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

    x = 2; //начальная строка

    Пока ТабДок.Область("R" + Строка(x) + "C1").Текст <> " Цикл //будем читать строки пока есть данные в первой колонке
    Строка = Новый Структура;

    Попытка
    Количество = Число(СокрЛП(ТабДок.Область("R" + Строка(x) + "C2").Текст));
    Исключение
    Количество = 0;
    КонецПопытки;
    Если Количество>0 Тогда

    ПерваяКолонка = СокрЛП(ТабДок.Область("R" + Строка(x) + "C1").Текст);

    НоваяСтрока = Таблица.Добавить();
    НоваяСтрока.НоменклатураН =ПерваяКолонка;
    НоваяСтрока.Количество = Количество;

    КонецЕсли;

    //читаем строку

    //работаем со строкой
    x = x + 1;
    КонецЦикла;

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

    &НаКлиенте
    Процедура MAD_ВыбратьПосле(Команда)

    Режим = РежимДиалогаВыбораФайла.Открытие;
    ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим);
    ДиалогОткрытияФайла.ПолноеИмяФайла = ";
    //Фильтр = НСтр("ru = 'Ексель'; en = 'Excel'")
    //+ "(*.xlsx)|*.xlsx" + "(*.xls)|*.xls";
    //ДиалогОткрытияФайла.Фильтр = Фильтр;
    ДиалогОткрытияФайла.МножественныйВыбор = Ложь;
    ДиалогОткрытияФайла.Заголовок = "Выберите файл";
    Если ДиалогОткрытияФайла.Выбрать() Тогда
    МассивФайлов = ДиалогОткрытияФайла.ВыбранныеФайлы;
    Для Каждого ИмяФайла Из МассивФайлов Цикл
    //Элементы.Декорация3.Видимость = Истина;
    ВыбФайл = Новый Файл(ИмяФайла);
    Сообщить(ИмяФайла
    + НСтр("ru = '; Размер = '; en = '; Size = '")
    + ВыбФайл.Размер());
    Таблица.Очистить();
    Адрес = ";
    //ПоместитьФайлВВремХранилище(Адрес, ИмяФайла);

    MAD_ВыбратьПослеНаСервере(ИмяФайла);

    КонецЦикла;
    Иначе
    Предупреждение(НСтр("ru = 'Файл(ы) не выбран!'; en = 'File(s) not selected!'"));
    КонецЕсли;

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

как пофиксить эту тему ваще не понимаю, буду признателен за помощь в решении вопроса.
---
А папка расшаренная на сервере должна быть
---
КопироватьФайл(Путь+ВыбранныйФайл, РасшареннаяПапка+"ВыбранныйФайл");
---
```1c
    &НаКлиенте
    Процедура ИмяФайлаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;

    Описание = Новый ОписаниеОповещения("ЗакончитьВыборФайла", ЭтотОбъект);
    НачатьПомещениеФайла(Описание,,,Истина, УникальныйИдентификатор);
    КонецПроцедуры

    &НаКлиенте
    Процедура ЗакончитьВыборФайла(Результат, Адрес, Имя, ДопПараметры) Экспорт
    Если Результат Тогда

    ИмяФайла = Имя;
    АдресХранения = Адрес;

    КонецЕсли;
    КонецПроцедуры

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

    Оповещение = Новый ОписаниеОповещения("НачатьВыполнениеЗагрузки", ЭтаФорма);
    ПоказатьВопрос(Оповещение, "Выполнить загрузку данных из файла "" + ИмяФайла + "" ?", РежимДиалогаВопрос.ДаНет, , , "Начало загрузки");

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

    &НаКлиенте
    Процедура НачатьВыполнениеЗагрузки(Результат, Параметры) Экспорт

    Если НЕ Результат = КодВозвратаДиалога.Да Тогда
    Возврат;
    КонецЕсли;

    РезультатЗагрузки = ВыполнитьЗагрузкуНаСервере(АдресХранения);

    Если ТипЗнч(РезультатЗагрузки) = Тип("Строка") Тогда
    Сообщение = Новый СообщениеПользователю;
    Сообщение.Текст = РезультатЗагрузки;
    Сообщение.Поле = "ИмяФайла";
    Сообщение.Сообщить();
    КонецЕсли;

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

    &НаСервереБезКонтекста
    Функция ВыполнитьЗагрузкуНаСервере(АдресХранения)

    Если Не ЭтоАдресВременногоХранилища(АдресХранения) Тогда
    Возврат "Ошибка чтения файла";
    КонецЕсли;

    ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресХранения);
    ИмяФайла = ПолучитьИмяВременногоФайла(".xls");

    ДвоичныеДанные.Записать(ИмяФайла);

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

    УдалитьФайлы(ИмяФайла);

    Если ТабличныйДокумент.Области.Количество() = 1 Тогда
    ОбластьЛиста = ТабличныйДокумент.ПолучитьОбласть(ТабличныйДокумент.Области[0].Имя);
    Иначе
    Возврат "Ошибка чтения файла";
    КонецЕсли;

    ///// ну дальше сами
    КонецФункции
```
---
А если скопировать файл на сервер?
---
да это самый просто способ, но если юзеры ноют, что им приходится скачивать и потом перекидывать еще в папку на сервере...
---
Так можно его самому скопировать в сетевую расшаренную папку после диалога выбора
---
а вот это не совсем понятно. Вы предлагаете программно копировать файл в расшареный каталог?
Можно по подробнее, что и как сделать?
---
Теоретически можно прочитать на клиенте и загрузить данные в массив структур, а массив структур передается на сервер.
---
Статья https://forum.infostart.ru/forum9/topic132619/
Пункт 26
---
эти настройки выполнены, не помогает)))
---
Сервер локальный каталог не видит
'C:\Users\Gordeev\Desktop\Новая папка\'
---
да, это я понимаю, потому и спрашиваю, что не знаю как программно реализовать...
---
КопироватьФайл(Путь+ВыбранныйФайл, РасшареннаяПапка+"ВыбранныйФайл");
---
Лучше использовать с оповещением, чтобы сервер уже после загрузки начал работатть с файлом
НачатьКопированиеФайла(<ОписаниеОповещения>, <ИмяФайлаИсточника>, <ИмяФайлаПриемника>)
---
я по синтакспомощнику прочитал, но выдает ошибку при копировании...
Ведь при копировании нужно указать путь до файла, но Сервер не видит этот путь, т.к. он на локальной тачке)))
---
```1c
    &НаКлиенте
    Процедура ВыполнитьЗагрузку(Команда)

    Оповещение = Новый ОписаниеОповещения("НачатьВыполнениеЗагрузки", ЭтаФорма);
    ПоказатьВопрос(Оповещение, "Выполнить загрузку данных из файла "" + ИмяФайла + "" ?", РежимДиалогаВопрос.ДаНет, , , "Начало загрузки");

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

    &НаКлиенте
    Процедура НачатьВыполнениеЗагрузки(Результат, Параметры) Экспорт

    Если НЕ Результат = КодВозвратаДиалога.Да Тогда
    Возврат;
    КонецЕсли;

    РезультатЗагрузки = ВыполнитьЗагрузкуНаСервере(АдресХранения);

    Если ТипЗнч(РезультатЗагрузки) = Тип("Строка") Тогда
    Сообщение = Новый СообщениеПользователю;
    Сообщение.Текст = РезультатЗагрузки;
    Сообщение.Поле = "ИмяФайла";
    Сообщение.Сообщить();
    КонецЕсли;

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

```1c
    Функция ВыполнитьЗагрузкуНаСервере(Файл)

    Если Не ЭтоАдресВременногоХранилища(АдресХранения) Тогда
    Возврат "Ошибка чтения файла";
    КонецЕсли;

    ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресХранения);
    ИмяФайла = ПолучитьИмяВременногоФайла(".xls");

    ДвоичныеДанные.Записать(ИмяФайла);

    ТабличныйДокумент = Новый ТабличныйДокумент;
    ТабличныйДокумент.Прочитать(ИмяФайла, СпособЧтенияЗначенийТабличногоДокумента.Значение);
```
---
По поводу п.14 из ссылки (4) многие админы заводят новых пользователей и не заходят от их имени на сервер (и никакого десктопа не создается). Мне показывали создавать пользователей с десктопом сразу, даже если они им не будут пользоваться. Но это уже мелочи.
А в чем разница между" временное хранилище" и копирование в расширенную папку?
---
Прочитай на клиенте в ТабличныйДокумент, который передай на сервер для разбора.
Если xls дюже сложен: разбери xls на клиенте (например, в массив структур) - кинь массивом в сервер.
Смысла тащить файл на сервер нету: его ещё удалять потом придётся.
---
Ты от клиента копируй
---
А папка расшаренная на сервере должна быть
---
вы правы, выбрал не ту папку, уже мозг плывет)))
Сработало!)))
---
Я ищу для бухгалтерии обработку, чтобы на основании списка счетов с датой, ИНН, наименованием и суммой в exls, создавались сразу несколько счетов от поставщика в 1с, групповое создание документов. Номенклатурная позиция одна. И то же но чтобы можно было создать накладные реализации на основании реестра.
---
Гораздо правильнее, не кидать файлы по сети и на шарить папки а использовать хранилище, для передачи данных между клиентом и сервером. Понятное дело вас не парят такие штуки как безопасность(файлы доступны всем а не только тем кто загружает), надежность(сисадмину(даже если это вы) не очевидно зачем нужна эта папка и шара может пропасть через полгода или при изменении настроек безопасноти или просто после обновления), но может сразу учиться делать правильно?
---
я не отрицаю, что то что вы говорите, ТОЖЕ, верное решение, на текущий момент, да бы не переписывать бОльшую часть расширения, я делаю копипаст и затем удаление файла.
А с ПоместитьВоВременноеХранилище, я обязательно разберусь, просто вчера, мне не хватило мозгов понять как это написать и использовать....