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

15.10.15

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

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

Скачать файлы

Наименование Файл Версия Размер
Конфигурация
.cf 25,64Kb
129
.cf 25,64Kb 129 Скачать
Статья "Прикрепление файлов" (со скриншетами)
.docx 3,12Mb
58
.docx 3,12Mb 58 Скачать

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

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

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

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

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

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

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

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

 

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

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

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

 

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 

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

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

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

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

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

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

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

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

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

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

 

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

 

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

 

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

 

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

  

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

 

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

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

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

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

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

 

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

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

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

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

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

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

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

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

 

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 

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

 

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

 

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


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

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

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

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

 

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

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

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

См. также

Табличная часть в доп. реквизитах и формирование таблиц в шаблоне docx для 1С:ДО 3.0

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

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

29400 руб.

29.06.2023    4453    9    4    

18

Расширение для 1С:УНФ. Автоматическое снятие резервов в Заказах покупателей

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

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

7200 руб.

02.08.2023    2954    4    0    

19

Создать на основании - своя кнопка (БСП). Проблема двух подменю Создать на основании

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

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

01.03.2024    1282    dimanich70    6    

13

Доработка отчета "Связанные документы" (структура подчиненности) для вывода объектов из любого расширения

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

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

1 стартмани

27.10.2023    1995    13    avmartynov    10    

43

Печать непроведенных документов для УТ, КА, ERP. Настройка печати по пользователям, документам и печатным формам

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

Расширение для программ 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP, которое позволяет распечатывать печатные формы для непроведенных документов. Можно настроить, каким пользователям, какие конкретные формы документов разрешено печатать без проведения документа.

2 стартмани

22.08.2023    2071    21    progmaster    7    

3
Вознаграждение за ответ
Показать полностью
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. TODD22 18 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 29 16.10.15 15:15 Сейчас в теме
А мы в этих же управляемых формах сделали так: есть закладка "Файлы" в нее добавляешь файл, а он передает этот файл в секретный каталог на сервере и сохраняет внутри программы путь к этому файлу. В итоге в Базе хранятся лишь ссылка на файлы. Сами файлы в каталоге на сервере, который архивируется каждый день. И база не растет и ограничений на файлы нет. Есть правда пока нюанс. Работает только внутри сети. Если кто-то заходит через Web сервер то доступ к файлам не дается.
user1590475; metal59; +2 Ответить
9. sermalp 28.10.15 17:54 Сейчас в теме
(3) 91197ch, А есть ли доступ к секретному каталогу для пользователя от которого агент 1С работает?
4. Franco 82 16.10.15 15:17 Сейчас в теме
1.Скриншот через «о». Но это так, к слову
2.Хорошо было бы не привязывать 1 одному дркументу или справочнику владельцу. Сделать регистр сведений, измерения: «Ссылка на владельца» и «Ссылка на файл».
Тогда можно 1 хранимый файл привязывать к нескольким. Это кажется лишним? Ничего подобного - у меня уже такая необходимость случилась.
Тогда при добавлении справочника, допустим, «Номенклатура» его тип можно добавить в тип измерения.
3.Да, программа будет жутко торможить при считывании об'екта. Но при указании ссылки на справочник файлов или при испролльзовании связывающего регистра - никак. У меня ещё и не такие монстры в наследство достались...
4.И всё же файлы лучше хранить на диске - в справочнике файлы указывать ссылку на местоположение на сетевом диске. (у этого местоположения доступ пользователя, от которого запущен сервер 1С и недоступность пользователей). И - самое интересное - файлы легко архивировать
5.А вот шаблоны, бланки договоров и прочее «редкое и маломеняемое» - это да, самые что ни на есть хранимые файлы
6.Адрес временного хранилища в реквизите хранить не имеет смысла. Файл во временном хранилище живёт пока открыта форма, где он загружен.
5. Franco 82 16.10.15 15:21 Сейчас в теме
Забыл
Откажитесь от «ПолучитьФайлы» и «ПоместитьФайлы» в пользу «НачатьПолучениеФайлов» и «НачатьПомещениеФайлов». Рефакторинг в конфигурации в помощь.
SagittariusA; metal59; user778376; +3 Ответить
6. omenfarsh 151 17.10.15 09:26 Сейчас в теме
Спасибо всем за комментарии! Буду улучшать свой "шаблон" дальше и по возможности им поделюсь!
user778376; +1 Ответить
7. TODD22 18 18.10.15 10:47 Сейчас в теме
&НаСервере
Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
//Удалить файл из временного хранилища
Если ЭтоАдресВременногоХранилища(СсылкаНаФайлВоВременномХранилище) Тогда
УдалитьИзВременногоХранилища(СсылкаНаФайлВоВременномХранилище);
КонецЕсли;
КонецПроцедуры
 

Мне кажется вот эта часть кода не нужна. Если временное хранилище привязано к форме то после закрытия формы оно будет очищено автоматически.
И принудительно при записи объекта его большого смысла очищать нет.
8. wunderland 201 21.10.15 09:31 Сейчас в теме
Все равно коллега - молодец. Сделал, оформил, выложил... Понятно и доступно. А набор напильников у каждого свой :)
user1839716; metal59; wattot; user933004; +4 Ответить
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 849 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 53 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. Светлый ум 406 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
Сообщение было скрыто модератором.
...
Оставьте свое сообщение