Добрый день всем.
Есть путь к файлу :
```1c
    Откуда = "C:\Users\Public\Pictures\Sample Pictures\Lighthouse.jpg";
```

Пытаюсь скопировать файла оттуда в другую папку методом "КопироватьФайлы()"

Но ловлю ошибку "Ошибка копирования файлов.Каталог не обнаружен "из-за того что в "Sample Pictures" пробел.

Пытался и кавычки добавлять, и пробел на символы заменять. Ничего не выходит

Как обойти, не меняя названия папки?

1С:Предприятие 8.2 (8.2.19.130) ОФ
---
К этой серверной папке у сервера 1С доступ есть?

Если есть, то:

Кнопка "Копировать" выполняет следующие действия:

```1c
    &наКлиенте

    ДвоичныеДанные = Новый ДвочиныеДанные(ИмяВыбранногоФайла);

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

    СкопироватьФайлы();

    &наСервере
    Процедура СкопироватьФайлы()

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

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

    ПереместитьФайлы(ИмяВременногоФайла, "ПутьККоторомуЕстьДоступСервера1С" + "\ИмяКонечногоФайла" + ".Расширение");

    КонецПроцедуры
```
---
КопироватьФайлы Пробел в пути уже давно не является препятствием для 1С. Может быть, дело в том, что процедура выполняется на сервере?
---
Необходимо на сервере как ни крути. Ибо доступа может не быть к папке.
---
Так сервер ничего не знает про указанный путь, у него может не быть вообще диска C

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

Если есть, то:

Кнопка "Копировать" выполняет следующие действия:

```1c
    &наКлиенте

    ДвоичныеДанные = Новый ДвочиныеДанные(ИмяВыбранногоФайла);

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

    СкопироватьФайлы();

    &наСервере
    Процедура СкопироватьФайлы()

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

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

    ПереместитьФайлы(ИмяВременногоФайла, "ПутьККоторомуЕстьДоступСервера1С" + "\ИмяКонечногоФайла" + ".Расширение");

    КонецПроцедуры
```
---
&наСервере и &наКлиенте

меня смущает
---
При выборе картинки, сделано так, что автоматически
```1c
    ХранилищеКартинки = Новый ХранилищеЗначения(ВыбранноеФото, Новый СжатиеДанных());
```

Где ХранилищеКартинки = тип.ХранилищеЗначения и он как реквизит справочника.

Как мне использовать ХранилищеКартинки процедуре "СкопироватьФайлы()" подскажите пожалуйста!
---
не делать из картинки ХранилищеЗначения, а использовать сам файл картинки для создания ДвоичныеДанные.

В ХранилищеЗначения смысла нет никакого.
---
Ну в моем случае эта картинка отображается при открытии формы

```1c
    ЭлементыФормы.Фотография.Картинка = ХранилищеКартинки.Получить());
```

Но я Вас понял. Спасибо
Буду пробовать

Единственное.ИмяВыбранногоФайла это ДиалогВыбораФайла.ПолноеИмяФайла ?
---
в таком случае создаете из ХранилищеЗначения Двоичные данные и дальше уже сохраняете во временный файл и перемещаете этот временный файл куда вам надо.

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

```1c
    Файл = Новый Файл(ИмяВыбранногоПользователемФайла);

    имяФайла = Файл.Имя;
```
---
ПолучитьИЗВременногоХранилища(АдресВХранилище);

На этом моменте ловлю ошибку,неправильный адрес мол..
---
Каким образом формируется АдресВХранилище и какое он имеет значение при ПолучитьИЗВременногоХранилища(АдресВХранилище)?
---
ДвоичныеДанные = Новый ДвоичныеДанные(ДиалогВыбораФайла.ПолноеИмяФайла);
  АдресВХранилище = ПоместитьВоВременноеХранилище(ДвоичныеДанные,ссылка.УникальныйИдентификатор());

Значение - "ХранилищеЗначения".

И выходит ошибка "Неправильный путь к файлу 'ХранилищеЗначения'"
---
Значение должно быть строкой вида

e1cib/tempstorage/a8f1d1d3-f183-483d-a238-2c2d8f9cd74a?seanceId=02604bd5-2221-49c2-a778-983637c25475

У вас, вероятно, происходит переопределение значения АдресВХранилище по дороге до процедуры общего модуля, где вы пытаетесь по этому адресу получить данные из временного хранилища.
---
Даа, уже нагуглил.. Буду пробовать.

Ещё вопрос появился. Зачем на сервере выносить всё это ?

```1c
    ИмяВременногоФайла = ПолучитьИмяВременногоФайла();
    ДвоичныеДанные = ПолучитьИЗВременногоХранилища(АдресВХранилище);

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

    ПереместитьФайлы(ИмяВременногоФайла, "ПутьККоторомуЕстьДоступСервера1С" + "\ИмяКонечногоФайла" + ".Расширение");
```

Достаточно же на сервер поместить метод "ПереместитьФайл" по идее ?
---
потому что у вас изначальные условия выбора файла пользователем.

если это условие больше не выполняется, а файл формируется где-то в &НаСервере, то да, хватит ПереместитьФайлы().
---
Почему у меня метод "ПоместитьВоВременноеХранилище" возвращает тип хранилище значения а не строку не пойму...
Хотя в СП написано что должен строку возвращать вида 1ceib

upd:
разобрался, помещал в реквизитс типом хранилищезначения....
---
Тогда придется передавать данные с клиента на сервер через временное хранилище, по другому не пролезет.
---
Можно пример..
Сейчас копироватьфайл вынесено в общий модуль только с флажком "Сервер".
---
```1c
    &НаКлиенте
    Процедура ПереместитьФайл(Команда)
    ОбработкаОкончанияПомещения = Новый ОписаниеОповещения
    ("ОбработчикОкончанияПеремещения", ЭтотОбъект);
    НачатьПомещениеФайла(ОбработкаОкончанияПомещения, ,
    "C:\Users\Public\Pictures\Sample Pictures\Lighthouse.jpg", Ложь, ЭтотОбъект.УникальныйИдентификатор);
    КонецПроцедуры

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

    &НаСервере
    Процедура ЗаписатьПолученныйФайл(Адрес, ВыбранноеИмяФайла)
    ИмяФайлаСостав = ОбщегоНазначенияКлиентСервер.РазложитьПолноеИмяФайла(ВыбранноеИмяФайла)
    ИмяФайла = ИмяФайлаСостав.Имя + ИмяФайлаСостав.Расширение;
    ПапкаНазначения = "<Папка назначения на сервере>";
    КопироватьФайл(Адрес, ПапкаНазначения + "\" + ИмяФайла);
    КонецПроцедуры
```
---
База клиент-серверная?
---
клиент сервер на 8.2. да
---
В таком случае см. (10)
---
8.2 - это версия платформы. База файловая (лежит в папке на компьютере) или клиент-серверная (установлена на отдельном компьютере с СКЛ-сервером и сервером 1с)?
---
Окошко по кнопочке "i в кружкЕ" покажите
---
а что за КопироватьФайлы()? Можно подробнее? Стандартный вроде как КопироватьФайл().
---
Сомневаюсь что проблема из-за пробела. Но раз ошибка возникает, то попробуйте выбрать файл интерактивно через ДиалогВыбораФайла
---
Так так и сделано.
Сперва выбираю файла через диалогвыборафайла.
А после уже копироватьфайл()
---
Обратные слэши не проверяли?
---
проверял, не работает.
---
Попробуйте так:

```1c
    Откуда = ""путь с пробелами""
```
;
---
Тоже пробовал. Проблема описана в (17)
---
Тогда вместо диалогвыборафайла следует использовать начатьпомещениефайланасервер, пример можно посмотреть тут https://infostart.ru/1c/articles/1270130/ и в обработке завершения перейти на серверную процедуру как указано в (21)
---
Правда у меня обычные формы
---
Тогда код из 21 то что на клиенте сразу после диалога выбора файла а то что на сервере в общий модуль