К статье
Практический материал

Разработка и Конфигурация · 11 мин

Как добавить кнопку файла в 1С

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

Под «кнопкой файла» в 1С обычно понимают элемент формы, который позволяет пользователю прикрепить к объекту (документу, элементу справочника) внешний файл — скан договора, фото товара, акт выполненных работ. В типовых конфигурациях на базе Библиотеки стандартных подсистем (БСП) такой механизм уже встроен и называется «присоединённые файлы», а в самописных решениях кнопку приходится добавлять вручную через конфигуратор.

Способ реализации зависит от того, что у вас за конфигурация. Если это «1С:Бухгалтерия», «Управление торговлей» или «Зарплата и управление персоналом», скорее всего, кнопка уже существует — её нужно лишь включить или вывести на форму. Если конфигурация собственная, потребуется создать реквизит или регистр для хранения файлов, добавить команду на форму и написать обработчик на встроенном языке.

Ниже разобраны оба сценария: использование типового механизма и самостоятельная разработка. Отдельно рассмотрены программная загрузка файла, проверка результата и типичные ошибки, из-за которых кнопка не появляется или файл не сохраняется.

Определите, какой сценарий подходит вашей конфигурации

Первый шаг — понять, построена ли конфигурация на БСП. Признаки: в меню «Администрирование» есть раздел «Общие настройки» с пунктом про работу с файлами, а на формах документов и справочников встречается кнопка с изображением скрепки. В этом случае дорабатывать ничего не нужно — достаточно настройки.

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

Маршрут решения

Как выбрать способ

Типовая конфигурация на БСП, кнопка со скрепкой видна на формахПросто включите работу с файлами в настройках и пользуйтесь типовой кнопкой
Типовая конфигурация, но кнопки на конкретной форме нетПроверьте настройки и права, при необходимости добавьте команду через расширение конфигурации
Собственная конфигурация без механизма файловСоздайте реквизит с типом ХранилищеЗначения или справочник файлов и добавьте команду на форму в конфигураторе

Включите типовую кнопку присоединённых файлов

В конфигурациях на БСП откройте раздел «Администрирование» → «Общие настройки» (в некоторых версиях — «Настройка работы с файлами»). Установите флажок, отвечающий за хранение присоединённых файлов. После этого на формах документов и элементов справочников появится кнопка со скрепкой — обычно в командной панели формы или в меню «Ещё».

Нажатие на скрепку открывает список присоединённых файлов объекта. Через кнопку «Добавить» файл выбирается с диска и сохраняется в базе или в настроенном томе. Файл привязывается именно к текущему объекту: открыв тот же документ позже, вы увидите прикреплённый файл в списке.

Если флажок включён, а кнопки нет, проверьте права пользователя. Роль должна включать право на добавление и чтение присоединённых файлов. Также убедитесь, что смотрите форму объекта, а не форму списка — скрепка обычно доступна только в карточке конкретного документа или элемента.

Добавьте кнопку файла в собственной конфигурации

Для самописной конфигурации работа ведётся в конфигураторе. Минимальный вариант — реквизит объекта с типом «ХранилищеЗначения», в который помещаются двоичные данные файла, плюс строковый реквизит для имени файла. Откройте нужный справочник или документ, добавьте реквизиты, например «ДанныеФайла» (ХранилищеЗначения) и «ИмяФайла» (Строка).

Затем откройте форму объекта. В дереве команд формы создайте новую команду, например «ПрикрепитьФайл», задайте ей заголовок и картинку. Перетащите команду в дерево элементов формы — в командную панель или рядом с нужным полем. Конфигуратор автоматически создаст кнопку. После этого в модуле формы создайте обработчик команды.

Порядок действий в конфигураторе
  1. 1
    Добавьте в объект реквизиты: ХранилищеЗначения для данных и Строка для имени файла
  2. 2
    Откройте форму объекта и создайте команду «ПрикрепитьФайл»
  3. 3
    Перетащите команду в командную панель формы — появится кнопка
  4. 4
    В модуле формы напишите обработчик команды с вызовом диалога выбора файла
  5. 5
    Обновите конфигурацию базы данных (F7) и проверьте кнопку в режиме предприятия

Напишите код обработчика кнопки

В управляемой форме работа с файлами выполняется асинхронно, потому что тонкий и веб-клиенты не позволяют синхронные вызовы. Обработчик команды вызывает диалог выбора файла, а затем помещает файл во временное хранилище и переносит данные в реквизит объекта.

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

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

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

Обратите внимание на ключевые моменты кода. Метод НачатьПомещениеФайла работает асинхронно и сам показывает диалог выбора файла, если параметр интерактивности установлен в Истина. Двоичные данные сохраняются в хранилище значений со сжатием — это уменьшает объём базы. Имя файла хранится отдельно, чтобы при выгрузке восстановить исходное название и расширение.

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

Учтите особенности хранения и объёма базы

Хранение файлов внутри информационной базы — самый простой вариант, но у него есть предел. Каждый прикреплённый скан увеличивает размер базы, что сказывается на скорости резервного копирования и выгрузки. Для файловой базы данных рост размера особенно критичен: при приближении к ограничениям файловой СУБД возможны ошибки и замедление работы.

Альтернатива — хранение файлов в каталоге на диске или в томах (в типовых конфигурациях). В базе тогда остаются только ссылки и служебная информация: имя файла, путь, размер, автор, дата. Такой подход требует организации общего сетевого каталога с корректными правами доступа и отдельного резервного копирования этого каталога.

Где хранить файлы

В базе (ХранилищеЗначения)

Просто и надёжно, файлы попадают в резервную копию базы. Минус — быстрый рост размера базы при большом количестве файлов

В томах на диске (типовой механизм)

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

Внешнее файловое хранилище или СУБД

Подходит при больших объёмах и интеграциях, но требует разработки и администрирования дополнительного сервиса

Проверьте результат и устраните типичные ошибки

После обновления конфигурации откройте объект в режиме предприятия. Кнопка должна отображаться в том месте формы, куда вы её поместили. Нажмите её, выберите файл, запишите объект. Затем закройте и снова откройте объект — имя файла должно сохраниться, а кнопка выгрузки должна возвращать файл с исходным содержимым.

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

Типичные ошибки
01
Команда создана, но не добавлена в элементы формы — кнопка не отображается
02
Забыто обновление конфигурации базы данных (F7) — изменения не видны пользователям
03
Использование синхронных методов работы с файлами — ошибка в тонком и веб-клиенте
04
Файл помещён в реквизит, но объект не записан — данные теряются при закрытии формы
05
Не сохранено имя и расширение файла — при выгрузке файл открывается неправильной программой
06
Хранение больших файлов в файловой базе без контроля — рост базы и замедление работы
Контрольные точки

Как проверить результат

Кнопка на форме объекта
Норма

Кнопка видна, при нажатии открывается диалог выбора файла

Тревожный признак

Кнопки нет или нажатие вызывает ошибку

Сохранение файла
Норма

После записи и повторного открытия объекта имя файла на месте

Тревожный признак

Имя файла пустое — данные не записались

Выгрузка файла
Норма

Файл сохраняется на диск и открывается корректной программой

Тревожный признак

Файл пустой, повреждён или без расширения

Размер базы
Норма

Рост базы соответствует объёму прикрепляемых файлов и контролируется

Тревожный признак

База растёт неконтролируемо, копирование замедляется

Ограничения и безопасные границы доработки

Любая доработка типовой конфигурации затрудняет последующие обновления. Если конфигурация на поддержке, безопасный путь — использовать расширение конфигурации: команда, кнопка и обработчики добавляются в расширении, не изменяя основную конфигурацию. При обновлении типового релиза расширение сохранится, хотя его совместимость нужно проверять.

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

Частые вопросы

Можно ли прикрепить несколько файлов к одному объекту?

Да. Для этого вместо одного реквизита используют табличную часть объекта или отдельный справочник/регистр сведений, где каждая строка — один файл с именем и данными. В типовых конфигурациях механизм присоединённых файлов изначально поддерживает неограниченное количество файлов на объект.

Почему кнопка со скрепкой есть у одних документов и нет у других?

В типовых конфигурациях механизм присоединённых файлов подключается к каждому виду объектов отдельно на уровне метаданных. Если для нужного вида документов скрепки нет, её добавление требует доработки — обычно через расширение конфигурации.

Работает ли прикрепление файлов через веб-клиент?

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

Как ограничить типы прикрепляемых файлов?

При вызове диалога выбора файла можно задать фильтр по расширениям, например только PDF и изображения. Дополнительно в серверной части обработчика проверяйте расширение и размер файла перед сохранением и отклоняйте неподходящие.

Что делать, если база сильно выросла из-за прикреплённых файлов?

В типовых конфигурациях перенастройте хранение на тома на диске — новые файлы будут сохраняться вне базы. Уже накопленные файлы можно перенести в тома штатными средствами или обработкой, после чего выполнить сжатие базы через тестирование и исправление.

Можно ли добавить кнопку файла без изменения конфигурации?

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

Итог

Что важно запомнить

В типовых конфигурациях кнопка прикрепления файла включается настройкой и не требует доработки. В собственных решениях кнопку добавляют в конфигураторе: команда формы, асинхронный обработчик помещения файла и реквизит для хранения данных. Контролируйте рост базы, сохраняйте имя и расширение файла, а доработки типовых конфигураций выполняйте через расширение после резервного копирования.