Вход | Регистрация


Прикрепление файлов к документам (1С 8.2, УТ 10.3 самопередовыписанная)

Прикрепление файлов  к документам (1С 8.2, УТ 10.3 самопередовыписанная)
Я
   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) Лень - двигатель прогресса

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует