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