|
Хранение docx в хранилище значений | ☑ | ||
---|---|---|---|---|
0
mrParadox
11.07.12
✎
16:16
|
Организовал хранение файлов в хранилище значений.
С большинством файлов проблем нет - загружаются в хранилище, открываются из хранилища нормально. При загрузке файлов формата docx,xlsx возникла проблема. При попытки открыть такой файл выходит сообщение: "Не удалось открыть файл. Файл: v8_4FA4_91.tmp ...". Откуда берется расширение TMP никак в тол взять не могу. Помогите пожалуйста :) 1С 8.2.15.310 |
|||
1
andrewks
11.07.12
✎
16:17
|
как открываешь?
|
|||
2
mrParadox
11.07.12
✎
16:18
|
Процедура ОткрытиеФайла(СтандартнаяОбработка, ИмяФайла, Хранилище)
СтандартнаяОбработка = Ложь; // Получить расширение файла. РасширениеВременногоФайла = Прав(ИмяФайла, 4); Если Лев(РасширениеВременногоФайла, 1) = "." Тогда // Получить имя временного файла. Установить расширение временного файла. РасширениеВременногоФайла = Прав(ИмяФайла, 3); ИмяВременногоФайла = ПолучитьИмяВременногоФайла(РасширениеВременногоФайла); Иначе // Получить имя временного файла с расширением по умолчанию. ИмяВременногоФайла = ПолучитьИмяВременногоФайла(); КонецЕсли; // Сохранить файл на диске. Запустить приложение. СохранитьЗапуститьФайл(ИмяВременногоФайла, Хранилище, Истина); КонецПроцедуры Процедура СохранитьЗапуститьФайл(ИмяВнешнегоФайла, Хранилище, Запустить = Ложь) // Если не указано имя файла прервать выполнение процедуры Если ПустаяСтрока(ИмяВнешнегоФайла) Тогда Предупреждение("Не указано имя файла!"); Возврат; КонецЕсли; // Сохранить файл на диске ВнешнийФайл = Хранилище.Получить(); Попытка ВнешнийФайл.Записать(ИмяВнешнегоФайла); Исключение Сообщить("Ошибка при сохранении файла: " + ОписаниеОшибки(), СтатусСообщения.Важное); Возврат; КонецПопытки; // Запустить ассоциированное с файлом приложение. Открыть файл. Если Запустить Тогда Файл = Новый Файл(ИмяВнешнегоФайла); Если Файл.Существует() Тогда Попытка ЗапуститьПриложение("explorer " + ИмяВнешнегоФайла); Исключение Сообщить("Ошибка при запуске файла: " + ОписаниеОшибки(), СтатусСообщения.Важное); Возврат; КонецПопытки; Иначе Предупреждение("Не удалось найти файл " + ИмяВнешнегоФайла + " на диске!"); КонецЕсли; КонецЕсли; КонецПроцедуры |
|||
3
Reset
11.07.12
✎
16:20
|
(2) указанные расширения имеют длину 4, поэтому строка
Если Лев(РасширениеВременногоФайла, 1) = "." Тогда не срабатывает |
|||
4
andrewks
11.07.12
✎
16:22
|
(2) расширение файла - это не последние три символа. это символы после последней точки в имени файла (или "", если точки нет)
|
|||
5
mrParadox
11.07.12
✎
16:23
|
Спасибо, попробую порыть в данном направлении. Признаюсь, данный код содран с объекта "ХранилищеДополнительнойИнформации" УПП. Похоже там такой же баг
|
|||
6
mrParadox
11.07.12
✎
16:46
|
Если кому интересно, исправленный рабочий вариант:
Процедура ОткрытиеФайла(СтандартнаяОбработка, ИмяФайла, Хранилище) СтандартнаяОбработка = Ложь; // Получить расширение файла. РасширениеВременногоФайла=ИмяФайла; ПозицияТочки=Найти(ИмяФайла,"."); Пока ПозицияТочки>1 Цикл РасширениеВременногоФайла=Сред(РасширениеВременногоФайла,ПозицияТочки); ПозицияТочки=Найти(РасширениеВременногоФайла,"."); КонецЦикла; Если Лев(РасширениеВременногоФайла, 1) = "." Тогда // Получить имя временного файла. Установить расширение временного файла. РасширениеВременногоФайла = Прав(ИмяФайла, СтрДлина(РасширениеВременногоФайла)-1); ИмяВременногоФайла = ПолучитьИмяВременногоФайла(РасширениеВременногоФайла); Иначе // Получить имя временного файла с расширением по умолчанию. ИмяВременногоФайла = ПолучитьИмяВременногоФайла(); КонецЕсли; // Сохранить файл на диске. Запустить приложение. СохранитьЗапуститьФайл(ИмяВременногоФайла, Хранилище, Истина); КонецПроцедуры // Процедура сохраняет значение реквизита Хранилище (двоичные данные) на диск. // При необходимости открывает файл с использованием ассоциированного с ним приложения. // // Параметры: // ИмяВнешнегоФайла - путь, имя файла дле сохранения на диске // Запустить - булево, признак запускать ассоциированное с файлом приложение. // Процедура СохранитьЗапуститьФайл(ИмяВнешнегоФайла, Хранилище, Запустить = Ложь) // Если не указано имя файла прервать выполнение процедуры Если ПустаяСтрока(ИмяВнешнегоФайла) Тогда Предупреждение("Не указано имя файла!"); Возврат; КонецЕсли; // Сохранить файл на диске ВнешнийФайл = Хранилище.Получить(); Попытка ВнешнийФайл.Записать(ИмяВнешнегоФайла); Исключение Сообщить("Ошибка при сохранении файла: " + ОписаниеОшибки(), СтатусСообщения.Важное); Возврат; КонецПопытки; // Запустить ассоциированное с файлом приложение. Открыть файл. Если Запустить Тогда Файл = Новый Файл(ИмяВнешнегоФайла); Если Файл.Существует() Тогда Попытка ЗапуститьПриложение("explorer " + ИмяВнешнегоФайла); Исключение Сообщить("Ошибка при запуске файла: " + ОписаниеОшибки(), СтатусСообщения.Важное); Возврат; КонецПопытки; Иначе Предупреждение("Не удалось найти файл " + ИмяВнешнегоФайла + " на диске!"); КонецЕсли; КонецЕсли; КонецПроцедуры // СохранитьЗапуститьФайл() |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |