Разработка и Конфигурация · 11 мин
Как добавить кнопку файла в 1С
Как добавить кнопку прикрепления файла в 1С: типовой механизм присоединённых файлов, настройка в конфигураторе, программный код и типичные ошибки.
Под «кнопкой файла» в 1С обычно понимают элемент формы, который позволяет пользователю прикрепить к объекту (документу, элементу справочника) внешний файл — скан договора, фото товара, акт выполненных работ. В типовых конфигурациях на базе Библиотеки стандартных подсистем (БСП) такой механизм уже встроен и называется «присоединённые файлы», а в самописных решениях кнопку приходится добавлять вручную через конфигуратор.
Способ реализации зависит от того, что у вас за конфигурация. Если это «1С:Бухгалтерия», «Управление торговлей» или «Зарплата и управление персоналом», скорее всего, кнопка уже существует — её нужно лишь включить или вывести на форму. Если конфигурация собственная, потребуется создать реквизит или регистр для хранения файлов, добавить команду на форму и написать обработчик на встроенном языке.
Ниже разобраны оба сценария: использование типового механизма и самостоятельная разработка. Отдельно рассмотрены программная загрузка файла, проверка результата и типичные ошибки, из-за которых кнопка не появляется или файл не сохраняется.
Определите, какой сценарий подходит вашей конфигурации
Первый шаг — понять, построена ли конфигурация на БСП. Признаки: в меню «Администрирование» есть раздел «Общие настройки» с пунктом про работу с файлами, а на формах документов и справочников встречается кнопка с изображением скрепки. В этом случае дорабатывать ничего не нужно — достаточно настройки.
Если конфигурация самописная или сильно переписанная, проверьте в конфигураторе наличие справочников с именами вида «ПрисоединенныеФайлы» или «ХранилищеФайлов». Их отсутствие означает, что механизм хранения нужно создавать с нуля: определить, где будут лежать данные (в базе в хранилище значений или в каталоге на диске), и добавить команду на форму.
Как выбрать способ
Включите типовую кнопку присоединённых файлов
В конфигурациях на БСП откройте раздел «Администрирование» → «Общие настройки» (в некоторых версиях — «Настройка работы с файлами»). Установите флажок, отвечающий за хранение присоединённых файлов. После этого на формах документов и элементов справочников появится кнопка со скрепкой — обычно в командной панели формы или в меню «Ещё».
Нажатие на скрепку открывает список присоединённых файлов объекта. Через кнопку «Добавить» файл выбирается с диска и сохраняется в базе или в настроенном томе. Файл привязывается именно к текущему объекту: открыв тот же документ позже, вы увидите прикреплённый файл в списке.
Если флажок включён, а кнопки нет, проверьте права пользователя. Роль должна включать право на добавление и чтение присоединённых файлов. Также убедитесь, что смотрите форму объекта, а не форму списка — скрепка обычно доступна только в карточке конкретного документа или элемента.
Добавьте кнопку файла в собственной конфигурации
Для самописной конфигурации работа ведётся в конфигураторе. Минимальный вариант — реквизит объекта с типом «ХранилищеЗначения», в который помещаются двоичные данные файла, плюс строковый реквизит для имени файла. Откройте нужный справочник или документ, добавьте реквизиты, например «ДанныеФайла» (ХранилищеЗначения) и «ИмяФайла» (Строка).
Затем откройте форму объекта. В дереве команд формы создайте новую команду, например «ПрикрепитьФайл», задайте ей заголовок и картинку. Перетащите команду в дерево элементов формы — в командную панель или рядом с нужным полем. Конфигуратор автоматически создаст кнопку. После этого в модуле формы создайте обработчик команды.
- 1Добавьте в объект реквизиты: ХранилищеЗначения для данных и Строка для имени файла
- 2Откройте форму объекта и создайте команду «ПрикрепитьФайл»
- 3Перетащите команду в командную панель формы — появится кнопка
- 4В модуле формы напишите обработчик команды с вызовом диалога выбора файла
- 5Обновите конфигурацию базы данных (F7) и проверьте кнопку в режиме предприятия
Напишите код обработчика кнопки
В управляемой форме работа с файлами выполняется асинхронно, потому что тонкий и веб-клиенты не позволяют синхронные вызовы. Обработчик команды вызывает диалог выбора файла, а затем помещает файл во временное хранилище и переносит данные в реквизит объекта.
&НаКлиенте
Процедура ПрикрепитьФайл(Команда)
Оповещение = Новый ОписаниеОповещения("ПослеВыбораФайла", ЭтотОбъект);
НачатьПомещениеФайла(Оповещение, , , Истина, УникальныйИдентификатор);
КонецПроцедуры
&НаКлиенте
Процедура ПослеВыбораФайла(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры) Экспорт
Если Не Результат Тогда
Возврат;
КонецЕсли;
ИмяФайла = ВыбранноеИмяФайла;
ПоместитьФайлВОбъект(Адрес, ВыбранноеИмяФайла);
КонецПроцедуры
&НаСервере
Процедура ПоместитьФайлВОбъект(Адрес, ВыбранноеИмяФайла)
ДвоичныеДанные = ПолучитьИзВременногоХранилища(Адрес);
Объект.ДанныеФайла = Новый ХранилищеЗначения(ДвоичныеДанные, Новый СжатиеДанных(9));
Объект.ИмяФайла = ВыбранноеИмяФайла;
КонецПроцедурыОбратите внимание на ключевые моменты кода. Метод НачатьПомещениеФайла работает асинхронно и сам показывает диалог выбора файла, если параметр интерактивности установлен в Истина. Двоичные данные сохраняются в хранилище значений со сжатием — это уменьшает объём базы. Имя файла хранится отдельно, чтобы при выгрузке восстановить исходное название и расширение.
Для выгрузки файла обратно на диск добавьте вторую кнопку «Сохранить файл», в обработчике которой данные извлекаются из хранилища на сервере, помещаются во временное хранилище, а на клиенте вызывается ПолучитьФайл или НачатьПолучениеФайлов с указанием имени.
Учтите особенности хранения и объёма базы
Хранение файлов внутри информационной базы — самый простой вариант, но у него есть предел. Каждый прикреплённый скан увеличивает размер базы, что сказывается на скорости резервного копирования и выгрузки. Для файловой базы данных рост размера особенно критичен: при приближении к ограничениям файловой СУБД возможны ошибки и замедление работы.
Альтернатива — хранение файлов в каталоге на диске или в томах (в типовых конфигурациях). В базе тогда остаются только ссылки и служебная информация: имя файла, путь, размер, автор, дата. Такой подход требует организации общего сетевого каталога с корректными правами доступа и отдельного резервного копирования этого каталога.
Где хранить файлы
Просто и надёжно, файлы попадают в резервную копию базы. Минус — быстрый рост размера базы при большом количестве файлов
База не раздувается, файлы доступны как обычные документы в каталоге. Требует настройки томов и отдельного резервного копирования
Подходит при больших объёмах и интеграциях, но требует разработки и администрирования дополнительного сервиса
Проверьте результат и устраните типичные ошибки
После обновления конфигурации откройте объект в режиме предприятия. Кнопка должна отображаться в том месте формы, куда вы её поместили. Нажмите её, выберите файл, запишите объект. Затем закройте и снова откройте объект — имя файла должно сохраниться, а кнопка выгрузки должна возвращать файл с исходным содержимым.
Если кнопка не появилась, чаще всего причина в том, что команда создана, но не перетащена в дерево элементов формы, либо конфигурация базы данных не обновлена. Если файл выбирается, но не сохраняется, проверьте, что объект записывается после помещения данных — реквизиты объекта сохраняются только при записи.
Как проверить результат
Кнопка видна, при нажатии открывается диалог выбора файла
Кнопки нет или нажатие вызывает ошибку
После записи и повторного открытия объекта имя файла на месте
Имя файла пустое — данные не записались
Файл сохраняется на диск и открывается корректной программой
Файл пустой, повреждён или без расширения
Рост базы соответствует объёму прикрепляемых файлов и контролируется
База растёт неконтролируемо, копирование замедляется
Ограничения и безопасные границы доработки
Любая доработка типовой конфигурации затрудняет последующие обновления. Если конфигурация на поддержке, безопасный путь — использовать расширение конфигурации: команда, кнопка и обработчики добавляются в расширении, не изменяя основную конфигурацию. При обновлении типового релиза расширение сохранится, хотя его совместимость нужно проверять.
Избегайте хранения в базе исполняемых файлов и файлов с макросами без необходимости — при выгрузке они могут быть запущены пользователем. Если прикрепляются документы с персональными данными, убедитесь, что права доступа к объектам настроены корректно: файл доступен всем, кому доступен сам объект.
Частые вопросы
Можно ли прикрепить несколько файлов к одному объекту?
Да. Для этого вместо одного реквизита используют табличную часть объекта или отдельный справочник/регистр сведений, где каждая строка — один файл с именем и данными. В типовых конфигурациях механизм присоединённых файлов изначально поддерживает неограниченное количество файлов на объект.
Почему кнопка со скрепкой есть у одних документов и нет у других?
В типовых конфигурациях механизм присоединённых файлов подключается к каждому виду объектов отдельно на уровне метаданных. Если для нужного вида документов скрепки нет, её добавление требует доработки — обычно через расширение конфигурации.
Работает ли прикрепление файлов через веб-клиент?
Да, но только через асинхронные методы (НачатьПомещениеФайла и аналогичные). Синхронные диалоги выбора файла в веб-клиенте недоступны, поэтому старый код с методом ПоместитьФайл без оповещения вызовет ошибку.
Как ограничить типы прикрепляемых файлов?
При вызове диалога выбора файла можно задать фильтр по расширениям, например только PDF и изображения. Дополнительно в серверной части обработчика проверяйте расширение и размер файла перед сохранением и отклоняйте неподходящие.
Что делать, если база сильно выросла из-за прикреплённых файлов?
В типовых конфигурациях перенастройте хранение на тома на диске — новые файлы будут сохраняться вне базы. Уже накопленные файлы можно перенести в тома штатными средствами или обработкой, после чего выполнить сжатие базы через тестирование и исправление.
Можно ли добавить кнопку файла без изменения конфигурации?
Да, через расширение конфигурации — оно позволяет добавить команду, кнопку и обработчики, не снимая конфигурацию с поддержки. В типовых решениях часто достаточно включить настройку работы с файлами без какой-либо доработки.
Что важно запомнить
В типовых конфигурациях кнопка прикрепления файла включается настройкой и не требует доработки. В собственных решениях кнопку добавляют в конфигураторе: команда формы, асинхронный обработчик помещения файла и реквизит для хранения данных. Контролируйте рост базы, сохраняйте имя и расширение файла, а доработки типовых конфигураций выполняйте через расширение после резервного копирования.