|
Хранить файлы в томах на диске в УПП | ☑ | ||
---|---|---|---|---|
0
igorby
20.12.12
✎
12:37
|
Скажите это механизм в УПП 1.3 работает?
Никак не получается хранить только ссылку на файл. Все равно тянет его в базу. Читал все ветки по САБЖу, так и не понял..... |
|||
1
Xsander
20.12.12
✎
14:14
|
Хранение файлов в v8 неизбежно разбомбит базу как дрожжи, особенно если файлы с картинками или сканы документов нужно хранить.
Я полностью отказался от этого способа и обработку "Файлы" модифицировал, - скрыл все вкладки сделал свою (в ней открывается регистр сведений ссылки на файлы, регистратор - документ или эл. справочника, запись заноситься в регистр при прикреплении файла, в этот же момент файл копируется в директорию внешнего хранилища, адрес которого укаказан в константе. Вот процедура при открытии/выбора файла: Диалог = РаботаСФайлами.ПолучитьДиалогВыбораФайлов(Ложь); Если Не Диалог.Выбрать() Тогда Возврат; КонецЕсли; Попытка Если Константы.ФлИспользованиеВнешнегоХранилища.Получить() Тогда // Режим использования внешнего хранилища Если Константы.ДиректорияВнешнегоХранилища.Получить()="" Тогда //Сообщить("Не указана директория внешнего хранилища файлов"); Иначе // поцедура сохранить ВХ = СокрЛП(Константы.ДиректорияВнешнегоХранилища.Получить()); //Адрес внешнего хранилища СФ = СокрЛП(Диалог.ПолноеИмяФайла); //Адрес сохраняемого файла // тк ОФ - основания файла имеет дату из неё нужно убрать время - тк символ ":" не возможен в имени директории ОФ = СокрЛП(ЭлементыФормы.ДополнительныеФайлы.Значение.Отбор.Объект.Значение); Длина=СтрДлина(ОФ); // Сохраняем из события - нужно удалить время Если Найти(ОФ,"Событие")>0 Тогда ОФ=Лев(ОФ, Длина-9); ИначеЕсли Найти(ОФ,"Заказ")>0 Тогда ОФ=Лев(ОФ, Длина-9); Иначе ОФ = СтрЗаменить(ОФ, """", ""); ОФ = СтрЗаменить(ОФ, ":", ""); КонецЕсли; ДВХ= Новый Файл(ВХ); //АдресВХ=Строка("mkdir """+ВХ+""""); Если ДВХ.Существует()= Истина Тогда //Папка ВХ Существует Иначе //Сообщить("Отсутствует директория внешнего хранилища файлов! Директория создана!"); АдресВХ=Строка("mkdir """+ВХ+""""); КомандаСистемы(СокрЛП(АдресВХ)); КонецЕсли; //Проверка существования директории основания ДО=ВХ+"\"+ОФ; ДВХ= Новый Файл(ДО); Если ДВХ.Существует()= Истина Тогда //Папка основания существует Иначе //Сообщить("Папка основания отсутствует! Директория создана!"); АдресВХ=Строка("mkdir """+ДО+""""); КомандаСистемы(СокрЛП(АдресВХ)); КонецЕсли; //Формируем имя файла ИФ=СокрЛП(СФ); Пока Найти(ИФ,"\")<>0 Цикл Длина=СтрДлина(ИФ); ИФ=Прав(ИФ,Длина-Найти(ИФ,"\")); КонецЦикла; НКФ=СокрЛП(ВХ+"\"+ОФ+"\"+ИФ); //Проверка существования файла ДВХ= Новый Файл(НКФ); Если ДВХ.Существует()= Истина Тогда //Сообщить("Данный файл уже существует! В директории внешнего хранилища будет создана копия!"); НомерКопииФайла=0; ФлКопии=0; Пока ФлКопии=0 Цикл НомерКопииФайла=НомерКопииФайла+1; ПИКФ=НКФ+"_"+НомерКопииФайла; ДВХ= Новый Файл(ПИКФ); Если ДВХ.Существует()= Истина Тогда //Фл с таким номером существует Иначе ФлКопии=1; АдресСФ=Строка("ren """+НКФ+""" """+ИФ+"_"+НомерКопииФайла+""""); КомандаСистемы(СокрЛП(АдресСФ)); АдресСФ=Строка("copy """+СФ+""" """+ВХ+"\"+ОФ+""""); КомандаСистемы(СокрЛП(АдресСФ)); КонецЕсли; КонецЦикла; Иначе //Сообщить("Папка основания отсутствует! Директория создана!"); АдресВХ=Строка("mkdir """+ДО+""""); КомандаСистемы(СокрЛП(АдресВХ)); КонецЕсли; //Копирование файла в внешнее хранилище АдресСФ=Строка("copy """+СФ+""" """+ВХ+"\"+ОФ+""""); КомандаСистемы(СокрЛП(АдресСФ)); КонецЕсли; ПИКФ=""+ВХ+"\"+ОФ+"\"+ИФ+""; ДВХ= Новый Файл(ПИКФ); Если ДВХ.Существует()= Истина Тогда ВидДанныхК=ЭлементыФормы.ФайлыТЧ.ТекущаяСтрока.ВидДанных; НаборЗаписей = РегистрыСведений.Файл.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Объект.Установить(мОбъектОтбора); НаборЗаписей.Отбор.ВидДанных.Установить(ВидДанныхК); НаборЗаписей.Отбор.ИмяФайла.Установить(ПИКФ); НоваяЗапись = НаборЗаписей.Добавить(); НоваяЗапись.Объект = мОбъектОтбора; НоваяЗапись.ВидДанных = ВидДанныхК; НоваяЗапись.ИмяФайла = ПИКФ; НаборЗаписей.Записать(); КонецЕсли; ЭлементыФормы.ФайлыТЧ.ТекущаяСтрока.ИмяФайла=СокрЛП(ПИКФ); // к Иначе ТекОбъект = ЭлементыФормы.ДополнительныеФайлы.ТекущиеДанные; ТекОбъект.Хранилище = Новый ХранилищеЗначения(Новый ДвоичныеДанные(Диалог.ПолноеИмяФайла), Новый СжатиеДанных); ТекОбъект.ИмяФайла = Сред(Диалог.ПолноеИмяФайла, СтрДлина(Диалог.Каталог) + 1); КонецЕсли; Исключение Сообщить("" + ОписаниеОшибки()); КонецПопытки; При открытии файла - простая команда открыть |
|||
2
Xsander
20.12.12
✎
14:17
|
Самое плохое что результаты команд на win xp и win s2k8 - отличаются, поэтогму приходилось модифицировать и мой совет, - сделать сначала обработку, которая формирует текст для командной строки - очень сократит время отладки
|
|||
3
shuhard
20.12.12
✎
14:18
|
(0)[Хранение файлов в v8 неизбежно разбомбит базу как дрожжи]
да лан у меня сканы договоров за 5 лет - лишние 0,5 Гбайт или 10% объёма базы |
|||
4
acsent
20.12.12
✎
14:20
|
(1) г0внокод детектед
|
|||
5
zladenuw
20.12.12
✎
14:29
|
(4) а че г0вно ?
|
|||
6
cw014
20.12.12
✎
14:35
|
//Так как ОФ - это не СФ то ВК - это ДО
//Ну и наоборот, если СФ - это ОФ, то ОФ - это ВК, а ДО - это СФ |
|||
7
cw014
20.12.12
✎
14:35
|
(6) Ой, про переменные "АдресОФ" забыл
|
|||
8
cw014
20.12.12
✎
14:36
|
ДВХ= Новый Файл(ДО);
- Создал файл? - ДО! |
|||
9
cw014
20.12.12
✎
14:36
|
ПИКФ
Все, я под столом |
|||
10
palpetrovich
20.12.12
✎
14:37
|
(5) че, из-за этого: Если ДВХ.Существует()= Истина Тогда
:) |
|||
11
Maxus43
20.12.12
✎
14:37
|
БСП
|
|||
12
cw014
20.12.12
✎
14:40
|
ЭлементыФормы.ФайлыТЧ.ТекущаяСтрока.ИмяФайла=СокрЛП(ПИКФ);
// к Содержательный комментарий |
|||
13
zladenuw
20.12.12
✎
14:47
|
(10) ну и че. может человек на 7 писал. и это вошло в привычку :)
|
|||
14
cw014
20.12.12
✎
14:47
|
Ну все, меня понесло...
// поцедура сохранить Поцыки, тут дура // тк ОФ - основания файла имеет дату из неё нужно убрать время - тк символ ":" не возможен в имени директории Не осилил без знаков //Проверка существования директории основания Поэзия пошла //Копирование файла в внешнее хранилище ВО внешнее хранилище - грамотей И напоследок - Набор записей для одной записи? МенеджерЗаписи упорно игнорируем? |
|||
15
cw014
20.12.12
✎
14:49
|
(4) По моему достаточно обоснований
|
|||
16
zladenuw
20.12.12
✎
14:57
|
(15) Полегчало ? думаешь твой весь код идеален.
|
|||
17
vmv
20.12.12
✎
15:03
|
(16)
за это я присуждаю к расстрелу на месте АдресСФ=Строка("copy """+СФ+""" """+ВХ+"\"+ОФ+""""); КомандаСистемы(СокрЛП(АдресСФ)); |
|||
18
vmv
20.12.12
✎
15:05
|
это надо было додуматься использовать команды ОС в шаблонах 1С, еретик
|
|||
19
zladenuw
20.12.12
✎
15:07
|
(17,18) Тогда не расстрел. а на костер. на костер его.
|
|||
20
Xsander
20.12.12
✎
15:17
|
(3) - если хранить макеты для печати изображений, то далеко за 1 год в 2 гб лишнего веса не вылезти
|
|||
21
Xsander
20.12.12
✎
15:20
|
(-) Код работает реально, все отлажено, кто пишет лучше - пишитете, а еще лучше скажите где/какой переменной истину присвоить, чтобы все так как в коде работало!
Согласен, что код можно сгладить и сократить, но за неимением времени, - это делать не собираюсь |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |