Цель: Сохранить ТекстовыйДокумент в виде файла.хтх на ХДД.

Среда: Винда 10(64х), 1С:Предприятие 8.3, учебная версия (8.3.17.1549)

Ошибка: Ошибка получения файлов
по причине:
Ошибка при выполнении файловой операции '/e1cib/tempstorage/58d05f98-a952-48c4-be8f-4226142b72cd?seanceId=e248d73b-8123-402d-9baf-187186771299'. Значение данного типа невозможно преобразовать для передачи как файл. (ТекстовыйДокумент)

Код:

```1c
    &НаКлиенте
    Процедура ЗашифроватьФайл(Команда)

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

    ГСЧ = Новый ГенераторСлучайныхЧисел(75);//параметр (75) это наш "ключ" дешифровки
    Шифрованыйтекст = ";

    Для Знак = 1 По СтрДлина(СодержимоеФайла) Цикл
    Ключ = ГСЧ.СлучайноеЧисло();
    КодЗнака = КодСимвола(Знак);
    ШифрЗнака = КодЗнака + Ключ;
    Шифрованыйтекст = Шифрованыйтекст + Формат(ШифрЗнака,"ЧГ=0") + "-";
    КонецЦикла;

    СодержимоеФайла = Шифрованыйтекст;
    ФайлТХТ = Новый ТекстовыйДокумент;
    ФайлТХТ.УстановитьТекст(Шифрованыйтекст);
    АдресВХ = ПоместитьВоВременноеХранилище(ФайлТХТ);
    НачатьПолучениеФайлаССервера(АдресВХ);

    КонецПроцедуры
```
---
Спасибо что уделили время. Но. Меня интересует синтаксис с диалогом.

Попробовал сделать так (метод записать НаСервере), в этом варианте всё работает, все равно не понимаю почему, там мы получаем ДД, тут тоже, один чёрт они же хранятся в ВХ, что из Реквизита, что из Временного файла или ТекстовогоДокумента.
Или фишка в том что если что нужно именно ФайлТХТ.Записать(ИмяФайла) ? Типа без этого мы помещаем в ВХ данные а не сам "файл" ? И поэтому не можем его извлечь и сохранить на диск? Просто в СП опять таки написано про ДД что "получает данные из файла" - я это читаю как "текст из текстового документа", или я чего-то не понимаю....

Вот код:

```1c
    &НаКлиенте
    Процедура ЗашифроватьФайл(Команда)

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

    ГСЧ = Новый ГенераторСлучайныхЧисел(75);//параметр (75) это наш "ключ" дешифровки
    Шифрованыйтекст = ";

    Для Знак = 1 По СтрДлина(СодержимоеФайла) Цикл
    Ключ = ГСЧ.СлучайноеЧисло();
    КодЗнака = КодСимвола(Знак);
    ШифрЗнака = КодЗнака + Ключ;
    Шифрованыйтекст = Шифрованыйтекст + Формат(ШифрЗнака,"ЧГ=0") + "-";
    КонецЦикла;

    СодержимоеФайла = Шифрованыйтекст;
    ФайлТХТ = Новый ТекстовыйДокумент;
    ФайлТХТ.УстановитьТекст(Шифрованыйтекст);
    АдресВХ = СохранитьДанныеВФайлПередОтправкой(ФайлТХТ);
    НачатьПолучениеФайлаССервера(АдресВХ);

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

    &НаСервере
    Функция СохранитьДанныеВФайлПередОтправкой(ФайлТХТ)

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

    Попытка
    ФайлТХТ.Записать(ИмяФайла);
    АдресХранилища = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ИмяФайла));
    Исключение
    ВызватьИсключение;
    КонецПопытки;

    Возврат АдресХранилища;

    КонецФункции
```
---
ФайлТХТ = Новый ТекстовыйДокумент;
    ФайлТХТ.УстановитьТекст(Шифрованыйтекст);
    АдресВХ = ПоместитьВоВременноеХранилище(ФайлТХТ);
В данном случае во временное хранилище помещаете не содержимое текстового документа (двоичные данные текста), а сам текстовый документ.
Можно использовать поток и не обращаться к серверу и не записывать файл.

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

    &НаКлиенте
    Процедура ОповещениеПослеПолученияФайла(ПолученныйФайл, ДополнительныеПараметры) Экспорт

    Состояние("Записан файл " + ПолученныйФайл.ПолноеИмя);

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

почитайте более подробно на сайте Асинхронные методы в 1С
---
Спасибо что уделили время. Но. Меня интересует синтаксис с диалогом.

Попробовал сделать так (метод записать НаСервере), в этом варианте всё работает, все равно не понимаю почему, там мы получаем ДД, тут тоже, один чёрт они же хранятся в ВХ, что из Реквизита, что из Временного файла или ТекстовогоДокумента.
Или фишка в том что если что нужно именно ФайлТХТ.Записать(ИмяФайла) ? Типа без этого мы помещаем в ВХ данные а не сам "файл" ? И поэтому не можем его извлечь и сохранить на диск? Просто в СП опять таки написано про ДД что "получает данные из файла" - я это читаю как "текст из текстового документа", или я чего-то не понимаю....

Вот код:

```1c
    &НаКлиенте
    Процедура ЗашифроватьФайл(Команда)

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

    ГСЧ = Новый ГенераторСлучайныхЧисел(75);//параметр (75) это наш "ключ" дешифровки
    Шифрованыйтекст = ";

    Для Знак = 1 По СтрДлина(СодержимоеФайла) Цикл
    Ключ = ГСЧ.СлучайноеЧисло();
    КодЗнака = КодСимвола(Знак);
    ШифрЗнака = КодЗнака + Ключ;
    Шифрованыйтекст = Шифрованыйтекст + Формат(ШифрЗнака,"ЧГ=0") + "-";
    КонецЦикла;

    СодержимоеФайла = Шифрованыйтекст;
    ФайлТХТ = Новый ТекстовыйДокумент;
    ФайлТХТ.УстановитьТекст(Шифрованыйтекст);
    АдресВХ = СохранитьДанныеВФайлПередОтправкой(ФайлТХТ);
    НачатьПолучениеФайлаССервера(АдресВХ);

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

    &НаСервере
    Функция СохранитьДанныеВФайлПередОтправкой(ФайлТХТ)

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

    Попытка
    ФайлТХТ.Записать(ИмяФайла);
    АдресХранилища = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ИмяФайла));
    Исключение
    ВызватьИсключение;
    КонецПопытки;

    Возврат АдресХранилища;

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