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

15.10.15

Задачи пользователя - Адаптация типовых решений

В данной статье мы рассмотрим, как просто и быстро в любую конфигурацию на базе управляемых форм добавить функционал прикрепления внешних файлов к документам и справочникам.
Я начну описание с нуля, т.е. с создания пустой конфигурации. Так что даже  любой малоопытный разработчик (вроде меня =) ) сможет реализовать данный функционал в своей или уже написанной конфигурации.
Если Вам не хочется разбираться с ниже написанной инструкцией, можете скачать файл*.doc с описанием и скриншотами, либо уже саму готовую конфигурацию.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Конфигурация
.cf 25,64Kb
136
136 Скачать (1 SM) Купить за 1 850 руб.
Статья "Прикрепление файлов" (со скриншетами)
.docx 3,12Mb
60
60 Скачать (1 SM) Купить за 1 850 руб.

1. Создание информационной базы:

 - Запустим 1С и в окне "Список информационных баз" выберем «Добавить»:

 - в открывшемся окне ставим переключатель на «Создание информационной базы без конфигурации…»:

 - далее выбираем «Создание новой информационной базы» и нажимаем «Далее»:

 - Указываем имя информационной базы, нажимаем «Далее»:

 - Указываем папку, где будет храниться информационная база (желательно создать папку заранее), нажимаем «Далее»:

 - В открывшемся окне нажимаем «Готово»:

 Информационная база с указанным именем появится в списке.

 

2. Открытие конфигурации:

 Выбираем данную базу и нажимаем «Конфигуратор»:

- в открывшемся окне для простоты можно нажать в левом верхнем углу кнопку «Открыть конфигурацию»:

 

 3. Создание справочника «Файлы»:

Сразу оговоримся, что рассматриваемый пример упрощен и произвольный файл мы будем хранить в одном из реквизитов самого справочника.

Итак, справочник «Файлы» будет содержать два реквизита: Файл (для хранения двоичных данных),  ИмяФайла (для хранения имени загруженного файла) и СсылкаНаВладельца (для привязки файла к нужному для нас документу).

 - Создадим две подсистемы «Справочники» и «Документы»:

 - Создадим новый справочник и назовем его «Файлы»:

 - Перейдем на закладку «Подсистемы» и добавим данный справочник к подсистеме «Справочники»:

 - Перейдем на закладку «Данные» и добавим новый реквизит, назовем  его «Файл» и укажем Тип «ХранилищеЗначения»:

 - Добавим еще один реквизит, назовем  его «ИмяФайла» и укажем Тип «Строка», поставим галочку «Неограниченная длина»:

 - Добавим еще один реквизит, назовем  его «СсылкаНаВладельца» и укажем Тип «ДокументСсылка»:

- Переходим на закладку «Формы» и в поле Формы элемента нажимаем кнопку «Открыть»:

 - В открывшемся окне можно ничего не менять и нажать кнопку «Готово»:

 - Далее создадим Форму списка, в поле Формы списка нажимаем кнопку «Открыть»:

- В открывшемся окне теперь нажимаем «Далее»:

 - Теперь указываем какие колонки должны отображаться в Форме списка, поставим галочку напротив «СсылкаНаВладельца» и нажимаем «Готово»:

 - В открывшейся форме для красоты столбец «Код» переместим на верх (т.е.в начало таблицы):

 Форма элемента справочника "Файлы", помимо данных самого объекта, будет содержать два дополнительных реквизита: "Имя" и "СсылкаНаФайлВоВременномХранилище"

 - В правой части под "Объектом" добавим реквизит и назовем  его «Имя» и укажем Тип «Строка»:

 - Добавим еще один реквизит, назовем  его «СсылкаНаФайлВоВременномХранилище» и укажем Тип «Строка»:

 

Для загрузки файла с диска в информационную базу и для сохранения его на диск в форме элемента создадим две локальные команды:  "ЗагрузитьСДиска" и "СохранитьНаДиск"

 - Перейдем на вкладку «Команды» и создадим новую локальную команду «ЗагрузитьСДиска»:

 - На вкладке «Команды» создадим еще одну локальную команду «СохранитьНаДиск»:

 - На вкладке «Элементы» добавим группу «Обычная группа»:

 - Теперь перетащим в созданную группу наши локальные команды:

 - Установим горизонтальное положение кнопок на форме и снимем галочку «ОтображатьЗаголовок»:

 - И для красоты создадим еще в этой группе «Декорацию-надпись»:

 - Щелкаем правой мышкой на кнопке «Загрузить с диска» и выбираем «Действие команды»:

 - оставляем «Создать на клиенте», нажимаем «ОК»:

- Вставляем код:

 

&НаКлиенте
Процедура ЗагрузитьСДиска(Команда)      
АдресВХранилище = "";
ВыбранноеИмяФайла = "";
Если ПоместитьФайл(АдресВХранилище, , ВыбранноеИмяФайла, , УникальныйИдентификатор) Тогда
Файл = Новый Файл(ВыбранноеИмяФайла);
Имя = Файл.Имя;
СсылкаНаФайлВоВременномХранилище = АдресВХранилище;
Объект.Наименование = Файл.Имя;
Модифицированность = Истина; 
Объект.ИмяФайла = Имя;
КонецЕсли;                
КонецПроцедуры

 

-  Повторяем ситуацию с кнопкой «Сохранить на диск», только теперь вставляем следующий код:

 

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

 

- В свойствах формы создаем следующие процедуры: "ПередЗаписьюНаСервере", "ПриЗаписиНаСервере" и "ПриОткрытии и подставляем код":

  

&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)       
// Получить файл из хранилища и поместить его в объект.
Если ЭтоАдресВременногоХранилища(СсылкаНаФайлВоВременномХранилище) Тогда
ДвоичныеДанные = ПолучитьИзВременногоХранилища(СсылкаНаФайлВоВременномХранилище);
ТекущийОбъект.Файл = Новый ХранилищеЗначения(ДвоичныеДанные, Новый СжатиеДанных(9));
//ТекущийОбъект.ИмяФайла = ИмяФайлаКонтрагента;
ТекущийОбъект.ИмяФайла = Имя;       
КонецЕсли;       
КонецПроцедуры
 
&НаСервере
Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
//Удалить файл из временного хранилища
Если ЭтоАдресВременногоХранилища(СсылкаНаФайлВоВременномХранилище) Тогда
УдалитьИзВременногоХранилища(СсылкаНаФайлВоВременномХранилище);
КонецЕсли;
КонецПроцедуры
 
&НаКлиенте
Процедура ПриОткрытии(Отказ)      
Имя = Объект.ИмяФайла;          
КонецПроцедуры

 

- теперь запускаем "Предприятие":

- Пытаемся создать элемент справочника, если выскакивает ошибка «Использование модальных окон в данном режиме запрещено!:

Сделаем не очень хорошую вещь:

В конфигураторе правой кнопкой мышки на назвони конфигурации щелкаем и выбираем «Свойства», где в самом низу в строке «Режим использования модальности» ставим «Использовать» и перезапускаем базу.

Теперь все должно заработать!

 

4. Создание Критерия отбор «СвязанныеДокументы»:

В дальнейшем данный критерий отбора нам понадобится, чтобы отобрать в табличную часть документа файлы, которые с ним связаны.

- Создадим новый критерий отбора и назовем его «СвязанныеДокументы»:

- Перейдем на закладку «Подсистемы» и добавим данный критерий отбора к подсистеме «Документы»:

- Перейдем на закладку «Данные» и установим Тип «ДокументСсылка»:

- Перейдем на закладку «Состав» и выберем реквизит справочника «Файлы» «СылкаНаВладельца»:

- Перейдем на закладку «Формы» и создадим Форму списка:

- В форму списка перетаскиваем реквизит Объекта «СсылкаНаименование»:

 

5. Создание документа «Продажи»:

Теперь создадим простенький документ с целью прикрепить к нему файлы.

- Создадим новый документ и назовем его «Продажи»:

- Перейдем на закладку «Подсистемы» и добавим данный документ к подсистеме «Документы»:

- Перейдем на закладку «Данные» и добавим данный какой-нибудь реквизит, к примеру,  «Описание» с Типом «Строка» неограниченной длины и в многострочном режиме:

- На закладке «Данные» добавим табличную часть, назовем ее «СписокДокументов»:

- На закладке «Данные» в табличную часть добавим реквизит и именем «Файл» и Типом «СправочникСсылка.Файлы»:

- На закладке «Данные» в табличную часть добавим реквизит и именем «Документ» и Типом «ДокументСсылка»:

- Перейдем на закладку «Формы» и создадим форму списка:

- В открывшемся окне нажимаем кнопку «Далее»:

 - В открывшемся окне выбираем реквизит «Ссылка» и нажимаем кнопку «Готово»:

- Перейдем на закладку «Формы» и создадим форму документа:

- В открывшемся окне нажимаем кнопку «Готово»:

- В открывшейся форме документа добавляем Группу «Обычная группа» и назовем ее «Документы»:

- И перетаскиваем в нее реквизиты так как показано на картинке ниже. Аналогично создаем еще одну такую группу с названием «Файлы» и перетаскиваем в нее «Список Документов»:

- Добавляем новую Группу «Страницы» и перетаскиваем в нее группы «Документы» и «Файлы»:

- На вкладке «Команды» создадим новую локальную команду с именем «ПолучитьСписок» и перетащим ее в папку Файлы:

- На появившейся кнопке на форме документа кликаем правой кнопкой мышки выбираем «Действие команды»:

- Создаем на клиенте:

- Добавляем следующий код:

 

&НаКлиенте
Процедура ПолучитьСписок(Команда)               
ЭтаФорма.Объект.СписокДокументов.Очистить();      
МасивДокументов = ПолучитьСписокПодчиненныхДокументов(Объект.Ссылка);
Для Каждого Строка Из МасивДокументов Цикл
                   НоваяСтрока = Объект.СписокДокументов.Добавить();
                   НоваяСтрока.Файл = Строка.Файл;
                   НоваяСтрока.Документ = Строка.Документ;
КонецЦикла;     
КонецПроцедуры

 

- Также добавляем функцию:

 

&НаСервере
Функция ПолучитьСписокПодчиненныхДокументов(ДокументОснование)      
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
                   |        СтруктураПодчиненности.Ссылка.Ссылка КАК Файл,
                   |        СтруктураПодчиненности.Ссылка.СсылкаНаВладельца КАК Документ
                   |ИЗ
                   |        КритерийОтбора.СвязанныеДокументы(&ЗначениеКритерияОтбора) КАК СтруктураПодчиненности"; 
    Запрос.УстановитьПараметр("ЗначениеКритерияОтбора", ДокументОснование);
         ТЗ = Запрос.Выполнить().Выгрузить();      
         Массив = Новый Массив();
         СтруктураСтрокой = "";
         НужнаЗапятая = Ложь;
         Для Каждого Колонка Из ТЗ.Колонки Цикл
                   Если НужнаЗапятая Тогда
                            СтруктураСтрокой = СтруктураСтрокой + ",";
                   КонецЕсли;
                   СтруктураСтрокой = СтруктураСтрокой + Колонка.Имя;
                   НужнаЗапятая = Истина;
         КонецЦикла;
         Для Каждого Строка Из ТЗ Цикл
                   НоваяСтрока = Новый Структура(СтруктураСтрокой);
                   ЗаполнитьЗначенияСвойств(НоваяСтрока, Строка);
                   Массив.Добавить(НоваяСтрока);
         КонецЦикла;      
         Возврат Массив;
КонецФункции


- Переходим к справочнику «Файлы» на закладку «Ввод на основании», в верхней части кликаем на карандаш и выбираем Документ «Продажи» и нажимаем «ОК»:

- После этого кликаем «Конструктор ввода на основании»:

- В открывшейся форме напротив Поля «СсылкаНаВладельца» кликаем и выбираем вверху «Ссылка», потом жмем «ОК»:

- Теперь всё должно заработать!

 

В документе через «Создать на основании» прикрепляем файлы, а список получаем, переходя на страницу «Файлы» и нажав на кнопку «Получить список». После записи документа список сохраняется.

- Все файлы записываются в справочник «Файлы»

Прикрепление прикрепленные внешних внешние файлов файлы документам справочникам 8.3 управляемые формы

См. также

Логистика, склад и ТМЦ Адаптация типовых решений Пользователь Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 1С:Управление нашей фирмой 3.0 Россия Управленческий учет Платные (руб)

Чтобы не допустить путаницы с обещаниями клиентам и для четкого контроля исполнения заказов мы используем резервирование товаров. Мы доработали УНФ, чтобы она автоматически отменяла старые резервы и не мешала эффективно продавать.

7200 руб.

02.08.2023    4170    15    1    

32

Адаптация типовых решений Платформа 1С v8.3 1С:Документооборот Россия Платные (руб)

Расширение конфигурации для «1С:Документооборот КОРП», редакция 3.0. позволяет: 1.использовать произвольные табличные части в качестве дополнительных реквизитов к документу; 2 использовать произвольные табличные части в шаблонах в формате docx для автоматического заполнения таблиц.

29400 руб.

29.06.2023    5995    14    5    

24

Печатные формы Адаптация типовых решений Бухгалтер Пользователь Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Платные (руб)

Расширение позволяет вывести в табличном документе факсимиле печати и подписей и/или вывести произвольную картинку из прикреплённых файлов организации для 1С УТ 11.5, КА 2.5, ERP 2.5, УНФ 3, Розница 3. Вывод факсимиле возможен в табличные документы УПД, УКД, Счёт-фактура, ТОРГ-12 и другие. Возможно настроить вывод для любых типовых макетов (Акт сверки, М-15, ТТН), для этого потребуется отредактировать макет и разместить на нём картинки с установленными именами. Редактирование осуществляется через типовой механизм в пользовательском интерфейсе.

3000 руб.

07.02.2023    6707    73    10    

30

Адаптация типовых решений Программист Пользователь Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Абонемент ($m)

Каждый из нас сталкивается с ситуацией, когда какой-нибудь менеджер показывает свой Excel и рассказывает, как он что-то из 1С копирует в него, снабжает пояснениями, выделяет цветом и т.д. и т.п. Заканчивается все просьбой сделать вот чтобы также было в 1С. И оказывается такой человек (почти с гарантией) либо лучшим продажником, либо каким-то важным, за все отвечающим, - на ком все держится.

2 стартмани

22.04.2024    5267    dimanich70    15    

22

БСП (Библиотека стандартных подсистем) Адаптация типовых решений Программист Платформа 1С v8.3 1С:ERP Управление предприятием 2 Бесплатно (free)

Понадобилось в подменю "Создать на основании" добавить свою команду, которая открывает обработку. В процессе доработок появилась проблема двух подменю "Создать на основании". В статье о том, как решились проблемы.

01.03.2024    6827    dimanich70    9    

18
Вознаграждение за ответ
Показать полностью
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. TODD22 19 15.10.15 18:57 Сейчас в теме
Так что даже любой малоопытный разработчик (вроде меня =) ) сможет реализовать данный функционал в своей или уже написанной конфигурации.

Хранение произвольных данных в конфигурации(сканов, фотографий, документов и тд) не самый хороший вариант.

Я бы сказал что даже очень не хороший. Прихожу как то в одну компанию. А они говорят у нас база тормозит.
Смотрю базу размер 76 Гб. База на SQL сервере. Какой то талантливый парень дописал хранение документов в реквизит объекта.
Начинаю разбираться... в итоге вес учётных данных в базе 1.5 Гб. А всё остальное натолкали пользователи, сканов, фотографий и тд . Пришлось выносить во внешнее хранилище....
Вес некоторых фотографий доходил до 7 Мб. Натолкают 10-15 фотографий в базу... а потом у них тормозит всё....
SagittariusA; Deslime; freeek; ашот; leonidol; blast5; user797918; user778376; sivatorov; Lena272; omenfarsh; zqzq; +12 Ответить
2. omenfarsh 151 16.10.15 12:59 Сейчас в теме
(1) TODD22, согласен с вами полностью! Но я столкнулся с другой ситуацией, когда надо было написать конфигурацию для учета заявок и к каждой заявке прикреплять несколько документов (решения, отчет по выполнению и т.д.). При этом базу часто переносят с компьютера на компьютер и прикрепленные файлы могут просто остаться в другом месте. Т.к. конфа была самописная и весила менее 10Мб, то мое решение оказалось вполне уместным.
10. sermalp 28.10.15 18:01 Сейчас в теме
(1) TODD22, можете сказать оптимальное, на ваш взгляд, решение задачи - хранение файлов в локальном каталоге; и как их потом отдавать (скачать) пользователю при клике по гиперссылке, например?
3. 91197ch 30 16.10.15 15:15 Сейчас в теме
А мы в этих же управляемых формах сделали так: есть закладка "Файлы" в нее добавляешь файл, а он передает этот файл в секретный каталог на сервере и сохраняет внутри программы путь к этому файлу. В итоге в Базе хранятся лишь ссылка на файлы. Сами файлы в каталоге на сервере, который архивируется каждый день. И база не растет и ограничений на файлы нет. Есть правда пока нюанс. Работает только внутри сети. Если кто-то заходит через Web сервер то доступ к файлам не дается.
user1590475; metal59; +2 Ответить
9. sermalp 28.10.15 17:54 Сейчас в теме
(3) 91197ch, А есть ли доступ к секретному каталогу для пользователя от которого агент 1С работает?
4. Franco 83 16.10.15 15:17 Сейчас в теме
1.Скриншот через «о». Но это так, к слову
2.Хорошо было бы не привязывать 1 одному дркументу или справочнику владельцу. Сделать регистр сведений, измерения: «Ссылка на владельца» и «Ссылка на файл».
Тогда можно 1 хранимый файл привязывать к нескольким. Это кажется лишним? Ничего подобного - у меня уже такая необходимость случилась.
Тогда при добавлении справочника, допустим, «Номенклатура» его тип можно добавить в тип измерения.
3.Да, программа будет жутко торможить при считывании об'екта. Но при указании ссылки на справочник файлов или при испролльзовании связывающего регистра - никак. У меня ещё и не такие монстры в наследство достались...
4.И всё же файлы лучше хранить на диске - в справочнике файлы указывать ссылку на местоположение на сетевом диске. (у этого местоположения доступ пользователя, от которого запущен сервер 1С и недоступность пользователей). И - самое интересное - файлы легко архивировать
5.А вот шаблоны, бланки договоров и прочее «редкое и маломеняемое» - это да, самые что ни на есть хранимые файлы
6.Адрес временного хранилища в реквизите хранить не имеет смысла. Файл во временном хранилище живёт пока открыта форма, где он загружен.
5. Franco 83 16.10.15 15:21 Сейчас в теме
Забыл
Откажитесь от «ПолучитьФайлы» и «ПоместитьФайлы» в пользу «НачатьПолучениеФайлов» и «НачатьПомещениеФайлов». Рефакторинг в конфигурации в помощь.
SagittariusA; metal59; user778376; +3 Ответить
6. omenfarsh 151 17.10.15 09:26 Сейчас в теме
Спасибо всем за комментарии! Буду улучшать свой "шаблон" дальше и по возможности им поделюсь!
user778376; +1 Ответить
7. TODD22 19 18.10.15 10:47 Сейчас в теме
&НаСервере
Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
//Удалить файл из временного хранилища
Если ЭтоАдресВременногоХранилища(СсылкаНаФайлВоВременномХранилище) Тогда
УдалитьИзВременногоХранилища(СсылкаНаФайлВоВременномХранилище);
КонецЕсли;
КонецПроцедуры
 

Мне кажется вот эта часть кода не нужна. Если временное хранилище привязано к форме то после закрытия формы оно будет очищено автоматически.
И принудительно при записи объекта его большого смысла очищать нет.
8. wunderland 202 21.10.15 09:31 Сейчас в теме
Все равно коллега - молодец. Сделал, оформил, выложил... Понятно и доступно. А набор напильников у каждого свой :)
kida1; user1839716; metal59; wattot; user933004; +5 Ответить
11. MeatCrash 24.02.16 09:52 Сейчас в теме
А нет ли у Вас случайно такого же примера, в котором ссылки на файлы были помещены в табличную часть документа? И где их можно было выбирать и видеть куда эти ссылки указывают (с указанием пути до файла и его имени)?
12. HamitovaRaisa 18.05.16 08:26 Сейчас в теме
Спасибо за подробную раскладку, а то зависла я с добавлением файла в управляемой форме уже продолжительное время. Попробую реализовать по этому алгоритму. А вместо справочника регистр сведений можно использовать?
13. omenfarsh 151 18.05.16 11:46 Сейчас в теме
(12) HamitovaRaisa, справочник с файлами не обязательно делать доступным для клиента, можно лишь оставить переход по ссылкам из формы документа или справочника. С Регистрами, если честно, не пробывал, но как минимум в Измерения нельзя добавить ХранилищеЗначения.
14. AnryMc 848 07.07.16 09:44 Сейчас в теме
Итак, справочник «Файлы» будет содержать два реквизита: Файл (для хранения двоичных данных), ИмяФайла (для хранения имени загруженного файла) и СсылкаНаВладельца (для привязки файла к нужному для нас документу).


Файл + ИмяФайла + СсылкаНаВладельца <> 2 реквизита
user2038557; user1733490; metal59; +3 Ответить
15. user613332_victor241 09.01.17 13:14 Сейчас в теме
Добрый день, сделал все по примеру, при попытке получить файлы ошибка

{Документ.ТестФайлы.Форма.ФормаДокумента.Форма(22)}: Ошибка при вызове метода контекста (Выполнить)
ТЗ = Запрос.Выполнить().Выгрузить();
по причине:
{(5, 9)}: Таблица не найдена "КритерийОтбора.СвязанныеДокументы"
<<?>>КритерийОтбора.СвязанныеДокументы(&ЗначениеКритерияОтбора) КАК СтруктураПодчиненности
16. user613332_victor241 09.01.17 16:27 Сейчас в теме
Приношу свои извинения, разобрался в чем дело))
17. omenfarsh 151 09.01.17 19:23 Сейчас в теме
18. Rebelwek 23.01.17 16:20 Сейчас в теме
Отличный пример! Все получилось
19. esqado 09.06.17 14:23 Сейчас в теме
И перетаскиваем в нее реквизиты так как показано на картинке ниже.

Видимо что-то сломалось.
20. user778376 24.06.17 17:19 Сейчас в теме
На шаге "5" - И перетаскиваем в нее реквизиты так как показано на картинке ниже. Аналогично создаем еще одну такую группу с названием «Файлы» и перетаскиваем в нее «Список Документов»
Картинки нет ; ) И тут чтот не понятно.
21. user797081 18.07.17 14:20 Сейчас в теме
Со скринами что то нет то, не показываются
22. deutsch2008 10.10.17 16:21 Сейчас в теме
на веб клиенте работает?
23. omenfarsh 151 15.10.17 09:49 Сейчас в теме
(22)День добрый.
К сожалению, ответить на данный вопрос не могу, т.к. сменил сферу деятельности и проверить нет возможности.
24. OksanaSub 54 27.11.17 15:26 Сейчас в теме
Вот я тоже хотела хранить прикрепленные файлы на диске, но база в облаке, сервер чужой. Пришлось хранить в базе, но с ограничение по размеру файла. И думаю скоро придется сжимать справочник Файлов.
25. TyuminIS 24.10.18 15:42 Сейчас в теме
Хорошая статья, только, на мой взгляд, лучше хранить в регистре сведеней, тогда при удалении объекта (документа например) автоматически будут удаляться и файлы...
26. niktory 07.02.19 23:21 Сейчас в теме
Спасибо большое, очень помогли.
27. Jokemas 192 12.03.19 17:03 Сейчас в теме
Модальность на УФ? Зачем? Создайте справочник, киньте в него нужные реквизиты: Имя файла - имя файла с расширением, Наименование - без расширения, объект - составной тип, сюда пихаем все документы, которые будут записывать файл, ну и хранилище - хранилище значения.

В форме самого документа создаем команду, пишем код.

Подобный пример разбирал Павел Чистов. Это кусок из моей конфигурации.

&НаКлиенте
Процедура ПриложитьФайл(Команда)
	ПриложениеФайлаОповещение(ЭтотОбъект);
КонецПроцедуры

&НаКлиенте
Процедура ПриложениеФайлаОповещение(ЭтотОбъект)
	
	Оповещение = Новый ОписаниеОповещения("ОбработатьВыборФайла", ЭтотОбъект);	
	НачатьПомещениеФайла(Оповещение, , , Истина, УникальныйИдентификатор);
	
КонецПроцедуры

&НаКлиенте
Процедура ОбработатьВыборФайла(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры) Экспорт
	
	//Если пользователь отказался от выбора файла, то закрываем форму
	Если Не Результат Тогда
		Возврат;
	КонецЕсли;
	
	ЗаписатьВложениеНаСервере(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры);
		
КонецПроцедуры

&НаСервере
Процедура ЗаписатьВложениеНаСервере(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры)
	
	ВыбранныйФайл = Новый Файл(ВыбранноеИмяФайла);
	
	НовыйФайл = Справочники.ХранилищеФайлов.СоздатьЭлемент();
	НовыйФайл.Наименование = ВыбранныйФайл.ИмяБезРасширения;
	НовыйФайл.ИмяФайла = ВыбранныйФайл.Имя;
	НовыйФайл.Объект = Объект.Ссылка;
	
	//Записываем данные файла из временного хранилища в реквизит формы справочника.
	Если ЭтоАдресВременногоХранилища(Адрес) Тогда
		НовыйФайл.Хранилище = Новый ХранилищеЗначения(ПолучитьИзВременногоХранилища(Адрес));
	КонецЕсли;
	
	НовыйФайл.Записать();
	
КонецПроцедуры
Показать
Светлый ум; +1 Ответить
28. Светлый ум 415 15.04.20 10:50 Сейчас в теме
+1 пригодилось, накатил на свою 1пальцевую конфигу и прикрутил к справочнику.
29. metal59 13.10.20 15:30 Сейчас в теме
Чтобы не делать
не очень хорошую вещь:
предлагаю заменить строку: "Предупреждение("У поставщика нет сохраненного в базе договора");" на: "Сообщить("Вы пытаетесь выгрузить то, чего нет");".
30. user1584890 19.04.21 13:09 Сейчас в теме
Сделал все по алгоритму, выдает ошибку, как решить?
{Справочник.Файл.Форма.ФормаСписка.Форма(10,1)}: Переменная не определена (Объект)
<<?>>Объект.Наименование = Файл.Имя; (Проверка: Тонкий клиент)
{Справочник.Файл.Форма.ФормаСписка.Форма(12,1)}: Переменная не определена (Объект)
<<?>>Объект.ИмяФайла = Имя; (Проверка: Тонкий клиент)
{Справочник.Файл.Форма.ФормаСписка.Форма(19,7)}: Переменная не определена (Объект)
Если <<?>>Объект.ИмяФайла = "" Тогда (Проверка: Тонкий клиент)
{Справочник.Файл.Форма.ФормаСписка.Форма(22,47)}: Переменная не определена (Объект)
СсылкаНаФайлВИБ = ПолучитьНавигационнуюСсылку(<<?>>Объект.Ссылка, "Файл"); (Проверка: Тонкий клиент)
{Справочник.Файл.Форма.ФормаСписка.Форма(23,31)}: Переменная не определена (Объект)
ПолучитьФайл(СсылкаНаФайлВИБ, <<?>>Объект.ИмяФайла); (Проверка: Тонкий клиент)
{Справочник.Файл.Форма.ФормаСписка.Форма(48,9)}: Переменная не определена (Объект)
Имя = <<?>>Объект.ИмяФайла; (Проверка: Тонкий клиент)
31. user1406144 31.03.22 18:03 Сейчас в теме
Поделитесь кто нибудь конфигурацией хочу простой справочник сделать и прикреплять к ниму файл. Не получается нужен пример конфигурации
32. user1957792 19.06.23 23:38 Сейчас в теме
я сделал всё проще, только надо сделать реквизиты "ИмяФайлаДиалог", "ПутьКФайлу", "РасширениеФайлаДиалог",

&НаСервере
Процедура ЗагрузитьФайлНаСервере()
	ДокументОбъект = РеквизитФормыВЗначение("Объект");
	ДанныеФайла = Новый ДвоичныеДанные(ПутьКФайлу);
	КоличествоСтрок = ДокументОбъект.Документация.Количество();
	ДокументОбъект.Документация.Добавить();
	ДокументОбъект.Документация[КоличествоСтрок].Файл = Новый ХранилищеЗначения(ДанныеФайла, Новый СжатиеДанных(9));
	ДокументОбъект.Документация[КоличествоСтрок].ИмяФайла = ИмяФайлаДиалог;
	ДокументОбъект.Документация[КоличествоСтрок].Расширение = РасширениеФайлаДиалога;
	ДокументОбъект.Записать();
	ЗначениеВРеквизитФормы(ДокументОбъект, "Объект");
КонецПроцедуры

&НаКлиенте
Процедура ЗагрузитьФайл(Команда)
	Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
	Диалог.МножественныйВыбор = ЛОЖЬ;
	Если Диалог.Выбрать() Тогда
		ПутьКФайлу = Диалог.ПолноеИмяФайла;
		ПозицияПоследнейТочки = СтрНайти(ПутьКФайлу, ".", НаправлениеПоиска.СКонца,,1);
		ПозицияПоследнегоСлеша = СтрНайти(ПутьКФайлу, "\", НаправлениеПоиска.СКонца,,1);
		РасширениеФайлаДиалога = Прав(ПутьКФайлу, СтрДлина(ПутьКФайлу) - ПозицияПоследнейТочки);
		ИмяФайлаДиалог = Сред(ПутьКФайлу, ПозицияПоследнегоСлеша+1, ПозицияПоследнейТочки+ПозицияПоследнегоСлеша-1);
	КонецЕсли;
	Если НЕ ПутьКФайлу = "" Тогда
		ЗагрузитьФайлНаСервере();
	Иначе
		Сообщить("Файл не выбран");
	КонецЕсли;
КонецПроцедуры

&НаСервере
Процедура ОткрытьФайлНаСервере(НомерСтроки)
	ДокументОбъект = РеквизитФормыВЗначение("Объект");
	Путь = ПолучитьИмяВременногоФайла(ДокументОбъект.Документация[НомерСтроки-1].Расширение);
	Данные = ДокументОбъект.Документация[НомерСтроки-1].Файл.Получить();
	Данные.Записать(Путь);
	ЗапуститьПриложение(Путь);
	ЗначениеВРеквизитФормы(ДокументОбъект, "Объект");КонецПроцедуры

&НаКлиенте
Процедура ОткрытьФайл(Команда)
	НомерТекущейСтроки = Элементы.Документация.ТекущиеДанные.НомерСтроки;
	ОткрытьФайлНаСервере(НомерТекущейСтроки);
КонецПроцедуры
Показать
34. пользователь 19.02.24 20:24
Сообщение было скрыто модератором.
...
35. user2038557 19.02.24 20:38 Сейчас в теме
(32) или скажите какие типы данных у реквизитов "ИмяФайлаДиалог", "ПутьКФайлу", "РасширениеФайлаДиалог"?
33. пользователь 19.02.24 20:03
Сообщение было скрыто модератором.
...
Оставьте свое сообщение