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