Прикрепление внешних файлов (ссылка на файл) к документам и справочникам 1С 8.х.

1. user797918 13.12.17 01:43 Сейчас в теме
Всем здравствуйте.
Возникла потребность прикрепления файлов к документам и справочникам (конфа созданная с нуля).
Есть ссылка на публикацию https://infostart.ru/public/408860/ это все хорошо, я как бы ее использовал, но все же хранение произвольных данных в конфигурации типа сканов, фотографий, документов и тп. не самый хороший вариант. Хранение документов в реквизит объекта не удобно и база начинает тормозить.
Есть ли где информация или описание как создать в конфе ссылку на вложение файла - нужно для учета заявок и к каждой заявке прикреплять несколько документов - точнее хочу что бы была ссылка/гиперссылке на прикрепленный файл в расшаренной папке ссылалось на сервер отдельно от самой базы. Также вариант если возможно по данной ссылке/гиперссылке скачать или просмотреть вложенный файл.

Всем откликнувшимся заранее спасибо. ;-)
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Xershi 1484 13.12.17 01:56 Сейчас в теме
(1) в БСП есть тома хранения файлов.
3. user797918 13.12.17 02:06 Сейчас в теме
(2)
БСП есть тома хранения файлов
в том то и дела что БСП ее нет - я хотел бы все с нуля сделать своей конфе. ну и плюс аля зеленый и начинающий в этом - только помощь гугл с обучение 1с конфы)))))
5. Xershi 1484 13.12.17 02:38 Сейчас в теме
(3) ну если охота тратить время, на то что уже давно сделано изучайте интернет. А если нет, то ставь БСП, а там решай как её использовать!
4. madonov 201 13.12.17 02:31 Сейчас в теме
(2) "Каждый должен написать свой перенумератор и прочие велосипеды" - © Кто-то из опытных одинэсников.

Создать регистр сведений "ПрикрепленныеФайлы".
Измерения: Ссылка (Любая ссылка), ИмяФайла(Строка100)
Ресурс: ПутьДоФайла(Строка Неогр)

Если предполагается, что один и тот же файл может иметь несколько редакций, то регистр можно сделать периодическим, иначе нет смысла.

Далее создаешь общую форму, на которой размещаешь табличное поле "Файлы" с реквизитами ИмяФайла(Строка100) и ПутьДоФайла(Строка Неогр).
Поле "ПутьДоФайла" скрываешь, оставляешь только "ИмяФайла". Добавляешь форме реквизит Ссылка (Любая ссылка).

Перед открытием формы (из документа или справочника) передаешь в нее ссылку на объект из которого она вызвана в реквизит "Ссылка".

При открытии формы выполняешь запрос к регистру "ПрикрепленныеФайлы" и заполняешь табличное поле "Файлы".

А что касается самого механизма прикрепления, то ниже немного кода:

Процедура ФайлыПередНачаломДобавления(Элемент, Отказ, Копирование)

Если Копирование Тогда 
		Отказ = Истина; //Или придумай сам как обработать копирование, я бы вообще убрал его из меню таблицы
Иначе
		
Режим = РежимДиалогаВыбораФайла.Открытие;
ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим);
ДиалогОткрытияФайла.ПолноеИмяФайла = "";

Фильтр = "MS Word 2003(*.doc)|*.doc"; //Можно прописать форматы файлов (один или несколько), доступные для приклепления
ДиалогОткрытияФайла.Фильтр = Фильтр;
ДиалогОткрытияФайла.МножественныйВыбор = ложь;
ДиалогОткрытияФайла.Заголовок = "Выберите файл:";

Если ДиалогОткрытияФайла.Выбрать() Тогда
	ИмяФайла = Прав(СтрЗаменить(ДиалогОткрытияФайла.ПолноеИмяФайла, ДиалогОткрытияФайла.Каталог, ""), 100); //Усекаем до 100 символов, с сохранением расширения
	КаталогКФ = "\\Server\Files$\"; //Лучше конечно хранить это значение где-нибудь в константах, на случай перемещения папки с файлами
	ПутьДляКопирования = КаталогКФ + Ссылка.УникальныйИдентификатор() +"\";
	
	Попытка
		СоздатьКаталог(ПутьДляКопирования);
        КопироватьФайл(ДиалогОткрытияФайла.ПолноеИмяФайла, ПутьДляКопирования+ИмяФайла);
		МЗ = РегистрыСведений.ПрикрепленныеФайлы.СоздатьМенеджерЗаписи();
		МЗ.Ссылка = Ссылка;
		МЗ.ИмяФайла = ИмяФайла;
		МЗ.ПутьДоФайла = Ссылка.УникальныйИдентификатор();
		МЗ.Записать(Истина);
		ОбновитьТаблицуФайлов(); //Перезаполняем таблицу "Файлы" аналогично как "ПриОткрытии" формы
        Отказ = Истина;

	Исключение
		Сообщить("Недостаточно прав для редактирования!");
		Отказ = Истина;
	КонецПопытки;
Иначе
    Предупреждение("Файл не выбран!");
	Отказ = Истина;
КонецЕсли;

КонецЕсли;	

КонецПроцедуры


//Для колонки "Имя файла" добавить кнопку "Открытие", но запретить редактирование текста
Процедура ФайлыИмяФайлаОткрытие(Элемент, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	КаталогКФ = "\\Server\Files$\"; //Лучше конечно хранить это значение где-нибудь в константах, на случай перемещения папки с файлами
	ПутьДоФайла = КаталогКФ + ЭлементыФормы.Файлы.ТекущаяСтрока.ПутьДоФайла +"\"+ ЭлементыФормы.Файлы.ТекущаяСтрока.ИмяФайла;
	ЗапуститьПриложение(ПутьДоФайла);
		
КонецПроцедуры

//Обработка удаления файла
Процедура ФайлыПередУдалением(Элемент, Отказ)	
	
	Режим = РежимДиалогаВопрос.ДаНет;
	Ответ = Вопрос("УДАЛИТЬ файл?", Режим, 0);
	Если Ответ = КодВозвратаДиалога.Нет Тогда
		Отказ = Истина;
		Возврат;
	КонецЕсли;
	
	Попытка
//Очищается только регистр, если нужно, то допиши тут и удаление самого файла с сервера
	МЗ = РегистрыСведений.ПрикрепленныеФайлы.СоздатьМенеджерЗаписи();
	МЗ.ИмяФайла = ЭлементыФормы.Файлы.ТекущаяСтрока.ИмяФайла;
	МЗ.Ссылка = Ссылка;
	МЗ.Удалить();	
	Исключение
	Сообщить("Недостаточно прав для редактирования!");
	Отказ = Истина;
	КонецПопытки;
КонецПроцедуры
Показать


Хотя, если в качестве папки для храненения использовать "УникальныйИдентификатор", то поле "Ссылка" в регистре избыточно. Можно обойтись только "ПутьДоФайла" и "ИмяФайла" (Но тогда оба они должны быть измерениями). Ну и "ПутьДоФайла" можно ограничить 36 символами, тк GUID имеет фиксированную длину.

Некоторые недостатки:
1. К одному документу/справочнику не получится прикрепить два файла с одним именем (ну или добавляй регистру периодичность)
2. У пользователей должен быть доступ на запись в общую сетевую папку, и если кто-то из них поймает вирус-шифровальщик, то "Шеф, все пропало!"

Помни, что эту папку нужно бэкапить так же как и саму базу данных
user1671936; acanta; user633533_encantado; user797918; +4 Ответить
6. user797918 13.12.17 02:49 Сейчас в теме
(4) Вооо... спасибо большое за инфу, по пробую сделать - позже отпишусь.
спасибо еще раз за ответ))))
7. user797918 13.12.17 22:56 Сейчас в теме
(4)
Далее создаешь общую форму, на которой размещаешь табличное поле "Файлы" с реквизитами ИмяФайла(Строка100) и ПутьДоФайла(Строка Неогр).
Поле "ПутьДоФайла" скрываешь, оставляешь только "ИмяФайла". Добавляешь форме реквизит Ссылка (Любая ссылка).
если не сложно поясните для тех "кто в танке", общею форму создаем (скрин1) или в регистре сведений. (скрин2).
Прикрепленные файлы:
31. NatashaSK 7 08.08.19 15:33 Сейчас в теме
(7) у меня тоже здесь ступор. Подскажите пожалуйста, как реализовали эту задачу?
10. user633533_encantado 11 15.12.17 09:56 Сейчас в теме
(4) Сейчас , по моему знание БСП и умение ее использовать более востребовано, чем навыки по изобретению велосипедов.
15. user797918 03.01.18 23:37 Сейчас в теме
(4)
мучился и не черта не получилось ((((
выдает ошибку:

{РегистрСведений.ПрикрепленныеФайлы.Форма.ФормаЗаписи.Форма(8,29)}: Тип не определен (ДиалогВыбораФайла)
ДиалогОткрытияФайла = Новый <<?>>ДиалогВыбораФайла(Режим);
13. schweigen 15.12.17 21:51 Сейчас в теме
14. user797918 15.12.17 22:23 Сейчас в теме
(13)
см. личку

ок спасибо ;-)
17. YanTsys 12 18.01.18 14:43 Сейчас в теме
(16)
TIM TIM (khabibullin.tu) 09.01.18 11:30 Готов помочь за небольшую сумму вознаграждения

(1) не верьте ему :) Он обманщик :)
18. user797918 18.01.18 22:08 Сейчас в теме
(17) да я сразу понял что он мошенник))))
19. khabibullin.tu 95 26.01.18 15:44 Сейчас в теме
(17)
(1) не верьте ему :) Он обманщик :)


С чего это ? О.о
20. YanTsys 12 26.01.18 17:29 Сейчас в теме
(19)
https://forum.infostart.ru/forum68/topic180392/
TIM TIM (khabibullin.tu):
Среднесписочная численность, прогулы [ХЕЛП !!!]
Вы выиграли ))) пиши куда отправить вознаграждение )
25. khabibullin.tu 95 29.01.18 08:30 Сейчас в теме
(20)
(19)
https://forum.infostart.ru/forum68/topic180392/
TIM TIM (khabibullin.tu):
Среднесписочная численность, прогулы [ХЕЛП !!!]
Вы выиграли ))) пиши куда отправить вознаграждение )


Пардон, обычная забывчивость ))) Ваши данные по карте актуальны ?
26. YanTsys 12 29.01.18 08:54 Сейчас в теме
(25) Данные то актуальны, но уже как-то не верится... :)
28. khabibullin.tu 95 30.01.18 10:44 Сейчас в теме
29. YanTsys 12 30.01.18 12:33 Сейчас в теме
(28) Офигеть!!! TIM TIM я снова начинаю верить в человечество :)
Побольше бы в мире таких порядочных людей как Вы!
Спасибо большое, извините что вредничал :)
30. khabibullin.tu 95 30.01.18 14:17 Сейчас в теме
(29)
Офигеть!!! TIM TIM я снова начинаю верить в человечество :)
Побольше бы в мире таких порядочных людей как Вы!
Спасибо большое, извините что вредничал :)
(29)

Да я и сам забыл совсем ! Поэтому если что -

напоминайте ! :)
8. Dnki 4 15.12.17 00:10 Сейчас в теме
* Намного легче, чем регистр, реализовать, создав у объекта ТЧ.
У нее пару реквизитов строковых: наименование док-та и физическое имя файла.

* А в моей конф-ии файлы хранятся в базе. И нич-че! Да и у тебя, похоже, база не для космоса, а больше для документооборота. Обращения к документам, как правило, делаются к их шапкам. А доки лежат в ТЧ, и не мешают. Кроме редактирования самих доков.

* Есть и компромиссный вариант: в подчиненных справочниках.
9. user797918 15.12.17 02:04 Сейчас в теме
(8)
* А в моей конф-ии файлы хранятся в базе. И нич-че! Да и у тебя, похоже, база не для космоса, а больше для документооборота. Обращения к документам, как правило, делаются к их шапкам. А доки лежат в ТЧ, и не мешают. Кроме редактирования самих доков.


Ну я бы не сказал что для космоса но все же - четыре специалиста которые будут заводить доки и прикреплять к ним файлы размером не менее 2 Мб. в среднем в месяц один специалист заводит по 300 заявок к которым он будет цеплять дополнительные файлы сканов - а их четверо и это только по одному объекту - объектов пять и вообщем проект на два года. Я думаю что объем за три месяц приличный будет.
11. Dnki 4 15.12.17 12:44 Сейчас в теме
Считаю: 2М х 300 х 4чела х 5 объектов = 12 000. Действительно 12Г за месяц.
Многовато.
Возникает философский вопрос: а будь они в файлах, их будете хранить все?
Или же старые удалять?

Для меня этот вопрос роста базы, естественно, актуален. У меня он относится к вложениям в э/письма.
Поэтому сделал обработку, которая очищает файлы в документах 2-3 месячной давности.
Но у меня эти вложения не так важны, т.к. это печатные формы Счетов, договоров. Их потеря никому не страшна - сами Счета и договора
есть в базе.

Так что, думайте. Есть плюсы и минусы в одном и другом.
12. user797918 15.12.17 20:45 Сейчас в теме
(11)
Считаю: 2М х 300 х 4чела х 5 объектов = 12 000. Действительно 12Г за месяц.
Многовато.
Возникает философский вопрос: а будь они в файлах, их будете хранить все?
Или же старые удалять?


Да конечно будут хранить (это сканы с подписями и печатями) - потому я и хочу сделать прикрепляемые файлы отдельно - эти сканы файлов нужны для сдачи объекта заказчику.
Вот такие пироги...
21. lefthander 26.01.18 17:39 Сейчас в теме
(12)Сделайте тестовый реквизит куда будете записывать полный путь хранения файла, легче будет восстанавливать если все отвалится.
16. пользователь 09.01.18 11:30
Сообщение было скрыто модератором.
...
22. user797918 28.01.18 23:23 Сейчас в теме
гиблое походу дело, ни кто толком и не помог ((((
23. lefthander 29.01.18 00:02 Сейчас в теме
(22)Вы ждали от форума решение Вашей проблемы? Так посмотрите как это реализовано в БСП.
24. user797918 29.01.18 00:25 Сейчас в теме
(23) Если мог бы наверное не спрашивал решение на форуме, просто так с БСП не разберешься...
одни и те же ответы "смотри как это реализовано в БСП"
27. lefthander 29.01.18 10:02 Сейчас в теме
(24)Тому кто пишет конфу с нуля разобраться в коде БСП не должно быть трудно. А советуют потому что в БСП данный механизм реализован. Вам советуют подключить подсистему БСП и использовать ее.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот