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

Справочники и Данные · 12 мин

Как сохранить файл в базе 1С

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

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

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

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

Как прикрепить файл к документу или справочнику в типовой конфигурации

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

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

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

Порядок действий в типовой конфигурации
  1. 1
    Откройте документ или элемент справочника, к которому нужно прикрепить файл
  2. 2
    Найдите команду «Прикрепить», «Присоединённые файлы» или значок скрепки
  3. 3
    Нажмите «Добавить» и выберите файл на диске
  4. 4
    Дождитесь окончания загрузки и проверьте, что файл появился в списке
  5. 5
    Откройте файл двойным щелчком, чтобы убедиться, что он читается корректно

Где физически хранятся файлы: в базе или в томах на диске

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

Настройка выполняется в разделе администрирования: «Настройки работы с файлами» → «Хранить файлы в томах на диске». Там же задаются пути к томам для Windows и Linux. Хранение в томах разгружает базу и ускоряет резервное копирование SQL-дампа, но требует отдельного резервного копирования самих томов — иначе при восстановлении базы файлы окажутся потерянными.

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

Сравнение вариантов хранения

Хранение в информационной базе

Подходит при небольшом объёме файлов и файловом режиме работы. Ограничение: быстрый рост размера базы, замедление бэкапов и обновлений.

Хранение в томах на диске

Подходит для больших объёмов сканов и вложений в клиент-серверном режиме. Ограничение: нужно отдельно резервировать тома и следить за доступностью сетевого каталога.

Внешнее хранилище (собственное решение)

Подходит при интеграции с ECM или облачными хранилищами. Ограничение: требует разработки и поддержки обмена.

Как сохранить файл программно: ХранилищеЗначения и ДвоичныеДанные

Если конфигурация самописная или нужен собственный механизм, стандартный подход — реквизит объекта типа «ХранилищеЗначения». В него можно поместить двоичные данные файла, и они будут записаны в базу вместе с объектом. Типовой код выглядит так: сначала файл читается с диска в объект «ДвоичныеДанные», затем упаковывается в хранилище значения.

ДвоичныеДанные = Новый ДвоичныеДанные("C:\Docs\dogovor.pdf");

Объект.ФайлДанные = Новый ХранилищеЗначения(ДвоичныеДанные, Новый СжатиеДанных(9));

Объект.Записать();

Извлечение выполняется в обратном порядке: метод Получить() у хранилища возвращает двоичные данные, которые записываются во временный файл методом Записать(). Сжатие данных в конструкторе хранилища уменьшает объём для текстовых и офисных файлов, но почти бесполезно для уже сжатых форматов — jpg, zip, pdf со сжатием.

Для экономии места не храните файл целиком в реквизите документа, если он нужен редко: вынесите двоичные данные в отдельный регистр сведений с измерением «Объект» и ресурсом «Данные». Тогда основная таблица документов не раздувается, а чтение файла происходит только по требованию.

bsl
// Сохранение файла в реквизит типа ХранилищеЗначения
ДД = Новый ДвоичныеДанные(ПутьКФайлу);
Объект.ХранилищеФайла = Новый ХранилищеЗначения(ДД, Новый СжатиеДанных(9));
Объект.ИмяФайла = "dogovor.pdf";
Объект.Записать();

// Извлечение
ДД = Объект.ХранилищеФайла.Получить();
ДД.Записать(ПолучитьИмяВременногоФайла("pdf"));

Загрузка файла через механизм БСП программно

Если конфигурация построена на БСП, не нужно изобретать собственные таблицы — используйте программный интерфейс модуля «РаботаСФайлами». Метод ДобавитьФайл (в новых версиях — ПрисоединитьФайл) принимает владельца, двоичные данные или адрес во временном хранилище, имя и расширение файла и создаёт полноценный присоединённый файл, видимый пользователям в стандартном интерфейсе.

ПараметрыФайла = Новый Структура;

ПараметрыФайла.Вставить("ВладелецФайлов", ДокументСсылка);

ПараметрыФайла.Вставить("ИмяБезРасширения", "Скан договора");

ПараметрыФайла.Вставить("РасширениеБезТочки", "pdf");

ПараметрыФайла.Вставить("ВремяИзмененияУниверсальное", ТекущаяУниверсальнаяДата());

ПрисоединенныйФайл = РаботаСФайлами.ДобавитьФайл(ПараметрыФайла, АдресВоВременномХранилище);

Точная сигнатура методов зависит от версии БСП, поэтому перед написанием кода откройте модуль «РаботаСФайлами» в конфигураторе и сверьтесь с областью «ПрограммныйИнтерфейс». Это надёжнее, чем копировать примеры из старых публикаций: параметры и названия процедур между версиями менялись.

Ограничения, риски и контроль результата

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

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

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

Контрольные точки

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

Файл в списке присоединённых
Норма

Файл виден, открывается и отображается корректно

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

Запись есть, но при открытии ошибка или пустой файл

Размер данных
Норма

Размер в базе сопоставим с исходным файлом

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

Размер нулевой или сильно меньше исходного — загрузка оборвалась

Доступ других пользователей
Норма

Пользователь с нужными правами открывает файл

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

Ошибка доступа — проверьте роли на присоединённые файлы

Размер базы после загрузки
Норма

Прирост соответствует суммарному объёму файлов

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

Резкий аномальный рост — возможны дубли загрузки

Типичные ошибки при сохранении файлов в 1С

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

У разработчиков типичны три промаха: хранение двоичных данных в строковом реквизите неограниченной длины вместо ХранилищеЗначения (данные портятся из-за кодировок), чтение файла на клиенте там, где доступен только серверный контекст, и отсутствие сжатия при массовом хранении офисных документов. Каждая из этих ошибок проявляется не сразу, а под нагрузкой.

Типичные ошибки
01
Прикрепление файла к незаписанному объекту — файл не привязывается, операция завершается ошибкой
02
Массовая загрузка без контроля дублей — один и тот же скан сохраняется несколько раз и раздувает базу
03
Хранение больших файлов внутри файловой базы — замедление работы и риск повреждения данных
04
Забытое резервное копирование томов — при восстановлении базы из бэкапа файлы оказываются потеряны
05
Использование устаревших сигнатур методов БСП — код перестаёт работать после обновления конфигурации

FAQ: частые вопросы о сохранении файлов в 1С

Можно ли сохранить файл в базу 1С, если нет кнопки «Прикрепить»?

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

Куда попадает файл после прикрепления — можно ли найти его на диске?

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

Увеличится ли размер базы при хранении файлов внутри неё?

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

Как сохранить файл в базу из внешней обработки или при обмене?

Используйте тот же программный приём: прочитайте файл в объект «ДвоичныеДанные», при обмене передайте его в Base64-строке или двоичном виде, а на стороне приёмника сохраните через ХранилищеЗначения или метод РаботаСФайлами.ДобавитьФайл. При передаче через веб-сервисы учитывайте, что Base64 увеличивает объём примерно на треть — для больших файлов используйте потоковую передачу или разбивку на части.

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

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

Можно ли ограничить, какие типы файлов разрешено сохранять?

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

Итог

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

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