Имя: Пароль:
1C
Админ
Хранить файлы в томах на диске в УПП
,
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
(-) Код работает реально, все отлажено, кто пишет лучше - пишитете, а еще лучше скажите где/какой переменной истину присвоить, чтобы все так как в коде работало!
Согласен, что код можно сгладить и сократить, но за неимением времени, - это делать не собираюсь