HelpF.pro

Сохранить файл на диске полученный из реквизита типа хранилище значения

Код 1C v 8.х
 // Параметры
// Хранилище – ХранилищеЗначения, которое содержит объект типа
// ДвоичныеДанные с файлом для записи на диск.
// ИмяФайла – Строка, содержащая полное имя файла.
// ТолькоЧтение – Булево, признак установки записываемому файлу атрибута ТолькоЧтение.
// СпособПерезаписи – Строка. Параметр определеляет способ перезаписи существующих
// файлов на диске. В зависимости от пришедшего параметра выдается или
// не выдается запрос на перезапись файлов. Может устанавливаться в теле
// функции, если это необходимо. Принимаемые значения:
// "" (пустая строка) - это означает, что диалог еще ни разу не задавался
// и при наличии существующего файла будет выдан диалог запроса перезаписи.
// ДА - предыдущий файл был перезаписан, но перезапись текущего надо
// запросить снова
// НЕТ - предыдущий файл не был перезаписан, но перезапись текущего надо
// запросить снова
// ДАДЛЯВСЕХ - предыдущий файл был перезаписан, и все последующие тоже
// надо перезаписывать.
// НЕТДЛЯВСЕХ - предыдущий файл не был перезаписан, и все последующие тоже
// не надо перезаписывать.
//
// Возвращаемое значение:
// Булево – Истина, если каталог выбран, Ложь, если нет.
//
Функция СохранитьФайлНаДиске(Хранилище, ИмяФайла, ТолькоЧтение, СпособПерезаписи, ВопросОПерезаписи = Истина, ИмяСправочника = "удХранилище") Экспорт

Попытка

ФайлНаДиске = Новый Файл(ИмяФайла);
КаталогНаДиске = Новый Файл(ФайлНаДиске.Путь);

Если Не КаталогНаДиске.Существует() Тогда
СоздатьКаталог(ФайлНаДиске.Путь);
КонецЕсли;

Если ФайлНаДиске.Существует() И ВопросОПерезаписи = Истина Тогда

Если СпособПерезаписи = ""
ИЛИ Врег(СпособПерезаписи) = "ДА"
ИЛИ Врег(СпособПерезаписи) = "НЕТ" Тогда

ФормаЗапросаПерезаписиФайлов = Справочники[ИмяСправочника].ПолучитьФорму("ФормаЗапросаПерезаписиФайлов");
ФормаЗапросаПерезаписиФайлов.ТекстПредупреждения =
"На локальном диске уже существует файл:
|" + ИмяФайла + "
|Перезаписать имеющийся файл?";
СпособПерезаписи = ФормаЗапросаПерезаписиФайлов.ОткрытьМодально();

Если СпособПерезаписи = Неопределено
ИЛИ Врег(СпособПерезаписи) = "НЕТ"
ИЛИ Врег(СпособПерезаписи) = "НЕТДЛЯВСЕХ" Тогда
Возврат Ложь;
КонецЕсли;

ИначеЕсли Врег(СпособПерезаписи) = "НЕТДЛЯВСЕХ" Тогда

Возврат Ложь;

КонецЕсли;

// Если существующему файлу установлено ТолькоЧтение, отменим эту установку.
Если ФайлНаДиске.ПолучитьТолькоЧтение() Тогда
ФайлНаДиске.УстановитьТолькоЧтение(Ложь);
КонецЕсли;

КонецЕсли;

// Остались случаи когда:
// - пользователь ответил Да или ДаДляВсех в текущем диалоге
// - способ перезаписи уже пришел со значением ДаДляВсех
Если ТипЗнч(Хранилище) <> Тип("ДвоичныеДанные") Тогда
ДвоичныеДанные = Хранилище.Получить();
Иначе
ДвоичныеДанные = Хранилище;
КонецЕсли;
ДвоичныеДанные.Записать(ИмяФайла);
ФайлНаДиске.УстановитьТолькоЧтение(ТолькоЧтение);

Исключение

Предупреждение(ОписаниеОшибки());
Возврат Ложь;

КонецПопытки;

Возврат Истина;

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

Опубликовано на сайте: https://HelpF.pro
Прямая ссылка: https://HelpF.pro/faq8/view/400.html