|
Прикрепление файлов к документам (1С 8.2, УТ 10.3 самопередовыписанная) | ☑ | ||
---|---|---|---|---|
0
ils108
14.09.16
✎
06:55
|
Всем добра!
Пользователи захотели прикреплять скрины, фоточки и прочее добро к документам. на данный момент у нас в конфигурации это реализовано так, что все присоединенные файлы покоятся в виде хранилищ значения на просторах безбрежного регистра сведений, либо в ТЧ самих документов. Данная ситуация как я понимаю в будущем может привести к тормозам и раздуть базу донельзя. Отсюда возникло желание хранить сами файлы где-нить на серваке отдельно, а в базе только ссылки. Я сейчас планирую создать ТЧ с "Ссылка" и "ИмяФайла" в документах и.. призадумался =)) Может кто что присоветовать как это лучше организовать, может какие-то моменты важные стоит не пропустить. Заранее спасибо. |
|||
1
ils108
14.09.16
✎
13:54
|
Сделал как-то так. В документе происходит
&НаКлиенте Процедура Файлы(Команда) АдресВХранилище = ""; ВыбранноеИмяФайла = ""; ИмяФайла = ""; Результат = Ложь; Если ПоместитьФайл(АдресВХранилище, , ВыбранноеИмяФайла, , УникальныйИдентификатор) Тогда Пока НЕ Результат Цикл Если ВвестиСтроку(ИмяФайла, "Введите имя файла", 50) И НЕ ИмяФайла = "" Тогда Разделитель = "."; Строки = СтрЗаменить(ВыбранноеИмяФайла, Разделитель, Символы.ПС); Расширение = СтрПолучитьСтроку(Строки, СтрЧислоСтрок(Строки)); Путь = "C:\09.2016\ХранилищеВсеяФайлов\" + Месяц(ТекущаяДата()); ПроверитьСуществованиеКаталога(Путь); Путь = Путь + "\" + УникальныйИдентификатор + "." + Расширение; КопироватьФайл(ВыбранноеИмяФайла, Путь); НовыйФайл = Объект.Файлы.Добавить(); НовыйФайл.ИмяФайла = ИмяФайла; НовыйФайл.ПутьКФайлу = Путь; Результат = Истина; Иначе Ответ = Вопрос("Файл без имени не будет сохранен. Продолжить?", РежимДиалогаВопрос.ДаНет, , , "Предупреждение"); Если КодВозвратаДиалога.Да Тогда Результат = Истина; КонецЕсли; КонецЕсли; КонецЦикла; КонецЕсли; КонецПроцедуры &НаСервере Процедура ПроверитьСуществованиеКаталога(ИмяКаталога) Экспорт КаталогНаДиске = Новый Файл(ИмяКаталога); Если НЕ КаталогНаДиске.Существует() Тогда СоздатьКаталог(ИмяКаталога); КонецЕсли; КонецПроцедуры &НаКлиенте Процедура ОткрытьСписокФайлов(Команда) Отбор = Новый Структура("Документ", Объект.Ссылка); ОткрытьФорму("ОбщаяФорма.ФормаПрисоединенныхФайлов", Отбор) КонецПроцедуры В общей форме параметр Документ с типом любая, ссылка, СписокФайлов типа динамическийсписок получающий имена и адреса файлов по параметру. &НаКлиенте Процедура СписокФайловВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) ЗапуститьПриложение(Элемент.ТекущиеДанные.ПутьКФайлу); КонецПроцедуры &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) СписокФайлов.Параметры.УстановитьЗначениеПараметра("Документ", Параметры.Документ.Ссылка); КонецПроцедуры |
|||
2
vermouth
14.09.16
✎
14:00
|
Хранилище значений в ТЧ самих документов - это уж совсем корявенько.
если база скулевая и объем этих файликов незаоблачен - не вижу проблемы хранить их в базе в ХЗ регистре сведений со ссылкой на док или элемент справочника. ну а если все же хранить снаружи - тогда это будет файловая шара, чтоб иметь доступ и файлам и с сервера и компов пользователей или передавать их на сервер для сохранения и работы? с регистром букв в именах проблем быть не должно, но я б "от греха" подальше не использовал заглавные :) |
|||
3
aka AMIGO
14.09.16
✎
14:01
|
У нас (правда, в 7.7) все эти сведения хранятся в отдельных папках на одном их хардов сервера, а ссылки на папку формируются динамически. Для Товаров имя папки = постоянной части (есть константа) и код товара.
|
|||
4
ils108
14.09.16
✎
14:02
|
трудодень закончился, завтра вернусь к этому)
|
|||
5
aka AMIGO
14.09.16
✎
14:03
|
Давай, ждем с решением завтра :)
|
|||
6
ils108
15.09.16
✎
05:11
|
(2) а когда этих файлов через годик другой станет Гигов 100 тоже будет нормально база ворочаться?
и вот такой момент проявляется. ЗапуститьПриложение(Элемент.ТекущиеДанные.ПутьКФайлу); будет работать когда путь будет к файлу на сервере? сейчас то я в файловой тестирую. |
|||
7
MaxS
15.09.16
✎
07:41
|
Если хранить файлы отдельно от базы, появляется риск потерять все файлы по причинам - "бэкап 1С же есть", а про шару все забыли.
Или сделал кто-нибудь себе тестовую базу и удалил в ней лишние файлы... |
|||
8
vermouth
15.09.16
✎
07:48
|
(6) я поэтому и обратил Ваше внимание на то, как будет обеспечиваться доступ к файлам
|
|||
9
ils108
15.09.16
✎
07:51
|
(8) понял, но вроде нашел такой вариант клиентского доступа к файлам сервера
&НаСервере Функция ПолучитьФайл() Двоичное=Новый ДвоичныеДанные("C:\файл.bmp"); Адрес=ПоместитьВоВременноеХранилище(Двоичное,ЭтаФорма.УникальныйИдентификатор); Возврат Адрес КонецФункции &НаКлиенте Процедура Получить() Адрес=ПолучитьФайл(); Двоичное=ПолучитьИзВременногоХранилища(Адрес); Файл = Двоичное.Записать; ЗапуститьПриложение(Файл); КонецПроцедуры |
|||
10
vermouth
15.09.16
✎
08:41
|
(9) угу. и нечто подобное для записи
|
|||
11
vermouth
15.09.16
✎
08:43
|
(10) либо тупо путь вида \\server\share\attached_files доступный и с клиента и с сервера
|
|||
12
ils108
15.09.16
✎
13:58
|
(11) во, этот простой вариант здесь пожалуй и будет самым эффективным
|
|||
13
vermouth
15.09.16
✎
14:03
|
(12) Лень - двигатель прогресса
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |