Прикрепление и хранение PDF-файлов в базе 1С
Содержание
Прикрепить PDF к документу или элементу справочника в 1С 8.3 быстрее всего вручную: откройте карточку объекта, нажмите на значок скрепки (команда Присоединённые файлы), затем Добавить → Файл с диска и выберите нужный PDF. Файл сохранится прямо в базе и будет открываться из карточки в один клик.
Так загружают сканы договоров, счетов, актов и входящих писем. Но «добавить PDF в 1С» — это не только скрепка. Печатную форму можно сразу сохранить в PDF, скан — подтянуть программно встроенным языком, а внешний документ — получить из стороннего сервиса по HTTP. Разберём все рабочие способы и то, как хранить PDF, чтобы база не распухала.
Куда вообще грузится PDF и что настроить заранее
PDF в 1С хранится через механизм присоединённых файлов из Библиотеки стандартных подсистем (БСП). Он есть в типовых конфигурациях — Бухгалтерия предприятия 3.0, ЗУП 3.1, Управление торговлей 11 — и включается для конкретных документов и справочников на уровне конфигурации.
Перед первой загрузкой проверьте настройки в разделе Администрирование → Настройки работы с файлами:
- 📎 Максимальный размер файла — по умолчанию стоит ограничение (обычно несколько десятков МБ). Тяжёлый скан не прикрепится, пока не поднимете лимит.
- 📂 Допустимые расширения — если список заполнен, а
pdfв нём нет, загрузка оборвётся с ошибкой расширения. - 💾 Место хранения — в базе или в томах на диске (об этом в разделе про хранение).
Если скрепки на карточке нет — значит, для этого вида документа присоединённые файлы не включены. Это решается в конфигураторе (или расширением), а не настройкой в режиме предприятия.
Ручная загрузка через скрепку
Это основной способ для бухгалтера и оператора — без кода и обработок.
- Откройте нужный документ или элемент справочника (например,
Поступление (акт, накладная)или карточку контрагента). - Нажмите на значок скрепки в командной панели формы либо выберите команду
Присоединённые файлыв панели навигации. - В открывшемся списке нажмите
Добавить→Файл с диска. - Выберите PDF в диалоге выбора файла и подтвердите.
Файл загрузится и привяжется к объекту. Теперь по двойному клику он откроется во внешней программе просмотра PDF, а в самом списке будут видны автор, дата и размер.
Собственного просмотрщика PDF внутри формы у 1С нет: файл всегда открывается ассоциированным приложением Windows. Поэтому на рабочем месте должна стоять программа для чтения PDF.
Ещё два удобных приёма ручной загрузки:
- Перетаскивание (drag-and-drop) — просто бросьте PDF из проводника в список присоединённых файлов.
- Сканирование — кнопка
Сканироватьв том же списке подтянет документ прямо со сканера, если он настроен; результат можно сохранить в PDF.
Механизм присоединённых файлов умеет не только хранить документ, но и вести его жизненный цикл. Это пригождается, когда с одним PDF работают несколько сотрудников:
- 🔒 Занять для редактирования / освободить — файл блокируется на время правки, чтобы коллега случайно не перезаписал вашу версию.
- 🕓 Хранение версий — при повторной загрузке того же файла предыдущая не затирается, а остаётся в истории версий; к ней всегда можно вернуться.
- ✍️ Подписание электронной подписью — если в базе настроена работа с ЭП, PDF можно подписать прямо из списка присоединённых файлов.
Всё это доступно из того же списка по скрепке — отдельных настроек не требует, кроме включённого в конфигурации механизма.
Сохранение печатной формы сразу в PDF
Второй частый сценарий — не загрузить готовый PDF, а получить его из самой 1С: распечатать документ в файл и приложить или отправить контрагенту.
Откройте печать документа (кнопка Печать и нужная форма). В окне предпросмотра есть команда Сохранить, где в списке форматов выбирается PDF-документ. Рядом обычно стоит команда Отправить, которая формирует письмо и вкладывает печатную форму файлом — формат вложения тоже можно задать PDF.
Если печатную форму нужно сохранять в PDF программно, табличный документ пишется в файл одним методом:
// ТабДок — сформированный ТабличныйДокумент печатной формы
ИмяФайла = ПолучитьИмяВременногоФайла("pdf");
ТабДок.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.PDF);
Полученный файл дальше можно приложить к документу или отправить по почте. Так удобно массово выгружать, например, пачку актов за период.
PDF здесь выбирают не случайно: в отличие от выгрузки в Excel, он сохраняет вид печатной формы ровно таким, каким его видит пользователь, и открывается у получателя одинаково на любом устройстве. Для отправки контрагенту или в архив это предпочтительный формат.
Загрузка PDF средствами встроенного языка
Когда PDF приходит из папки обмена или его нужно разложить по объектам автоматически, задачу решает встроенный язык.
Чтение файла с диска в двоичные данные:
// Путь — на той стороне, где исполняется код.
// На сервере это серверный путь, а не папка пользователя.
ДвоичныеДанные = Новый ДвоичныеДанные("D:\Обмен\Акт_154.pdf");
Дальше данные кладут либо в присоединённые файлы через API БСП, либо в собственный реквизит типа ХранилищеЗначения:
Объект = Документы.РеализацияТоваровУслуг.НайтиПоНомеру("00-0000154").ПолучитьОбъект();
Объект.СканДокумента = Новый ХранилищеЗначения(ДвоичныеДанные);
Объект.Записать();
Чтобы потом выгрузить PDF обратно на диск или открыть у пользователя:
ДвоичныеДанные = Объект.СканДокумента.Получить();
ИмяФайла = ПолучитьИмяВременногоФайла("pdf");
ДвоичныеДанные.Записать(ИмяФайла);
// открыть ИмяФайла на клиенте во внешней программе просмотра
Самая частая ловушка — путь к файлу. Если процедура выполняется &НаСервере, конструктор Новый ДвоичныеДанные(...) читает файл с диска сервера, а не с компьютера пользователя. Для клиентских папок читайте файл в клиентской процедуре и передавайте данные на сервер.
Когда PDF лежит на компьютере пользователя, а код работает в клиент-серверной базе, прямой путь не подойдёт. Файл сначала помещают во временное хранилище на клиенте, а потом разбирают на сервере — для этого в платформе есть асинхронные методы помещения файла и адрес временного хранилища. По этому адресу сервер получает двоичные данные уже независимо от того, где физически был исходный файл. Для разовой загрузки это избыточно — проще скрепка, — но в собственных обработках с выбором файла пользователем приём обязателен.
Если же PDF нужно не прочитать, а собрать из нескольких страниц или объединить с печатной формой, помните: склеивать PDF средствами встроенного языка 1С не умеет. Для этого либо используют внешнюю компоненту, либо формируют единый табличный документ и уже его сохраняют в PDF одним файлом.
Прикрепление PDF внешней обработкой
Если дорабатывать конфигурацию нельзя (чтобы не слетать с поддержки), массовую загрузку PDF оформляют внешней обработкой — файлом .epf, который подключается без изменения типовой базы.
Порядок такой:
- Создайте или возьмите готовую обработку с формой выбора папки и таблицей сопоставления «файл → объект».
- Подключите её через
Файл→Открыть(разовый запуск) либо зарегистрируйте в справочнике дополнительных обработок:Администрирование→Печатные формы, отчёты и обработки→Дополнительные отчёты и обработки. - Укажите папку с PDF и правило привязки — обычно по номеру документа или ИНН контрагента в имени файла.
- Запустите — обработка сама прочитает каждый PDF и прикрепит к нужному объекту кодом из предыдущего раздела.
Этот способ окупается, когда файлов десятки и сотни: руками через скрепку такой объём не загрузить.
Чтобы обработку можно было подключать как дополнительную, в её модуле должна быть описана функция СведенияОВнешнейОбработке() с типом ДополнительнаяОбработка. Без неё 1С не примет файл в справочник.
Получение PDF из внешних систем по HTTP
Нередко PDF лежит не на диске, а в стороннем сервисе — у оператора ЭДО, в CRM, в веб-хранилище. Тогда файл забирают по HTTP прямо из 1С.
Соединение = Новый HTTPСоединение("api.example.com", 443, , , , , Новый ЗащищенноеСоединениеOpenSSL);
Запрос = Новый HTTPЗапрос("/documents/154/pdf");
Ответ = Соединение.Получить(Запрос);
Если Ответ.КодСостояния = 200 Тогда
ДвоичныеДанные = Ответ.ПолучитьТелоКакДвоичныеДанные();
// дальше — в присоединённые файлы или в реквизит
Иначе
Сообщить("Сервис вернул код " + Ответ.КодСостояния);
КонецЕсли;
Если сервис требует авторизацию, токен или ключ передают заголовком запроса:
Запрос = Новый HTTPЗапрос("/documents/154/pdf");
Запрос.Заголовки.Вставить("Authorization", "Bearer " + Токен);
Ответ = Соединение.Получить(Запрос);
Обратная задача — отдать PDF наружу — решается HTTP-сервисом самой 1С: публикуете его на веб-сервере и в обработчике запроса возвращаете тело ответа двоичными данными файла. Так внешняя система может скачивать печатные формы из базы по ссылке.
Для обмена с оператором ЭДО отдельный код обычно не нужен: типовой модуль ЭДО сам принимает входящие документы и складывает их, в том числе в PDF-представлении, в карточку документооборота.
Где хранить PDF, чтобы база не распухала
По умолчанию присоединённые файлы попадают внутрь информационной базы. Для файловой базы это означает рост файла 1Cv8.1CD, для клиент-серверной — рост таблиц СУБД. Сотни сканов быстро утяжеляют базу, замедляют выгрузку в .dt и резервное копирование
.
Решение — хранение файлов в томах на диске. Включается в Администрирование → Настройки работы с файлами → переключатель хранения в томах. После этого настраиваются сами тома (каталоги на диске сервера) с указанием максимального размера.
| Где хранить | Плюсы | Минусы |
|---|---|---|
| В информационной базе | Всё в одном месте, проще бэкап целиком | База быстро растёт, тяжелеет .dt |
| В томах на диске | База остаётся лёгкой, легко добавить место | Нужен бэкап томов отдельно от базы |
Томов может быть несколько — например, по одному на каждый физический диск. У каждого задаётся максимальный размер; когда том заполняется, новые файлы автоматически уходят в следующий по порядку. Так место наращивается без перестройки базы: добавили диск, подключили ещё один том — и загрузка PDF продолжается.
Практичный подход: мелкие и редкие файлы оставить в базе, а потоковые сканы (поступления, акты) вынести в тома. Тома нужно включать в резервное копирование наравне с базой — иначе после восстановления файлы в карточках откроются с ошибкой «файл не найден».
Отдельно уменьшить вес помогает качество самих PDF: сканы в оттенках серого с разрешением 200–300 dpi весят в разы меньше цветных на 600 dpi, а читаются так же.
Частые ошибки при загрузке PDF
Администрирование → Настройки работы с файлами либо пересохраните PDF с меньшим разрешением сканирования.pdf в него не входит — добавьте его или очистите список.Новый ДвоичныеДанные(Путь) ищет файл на диске сервера. Для файла с компьютера пользователя читайте его в клиентской процедуре.Частые вопросы
Можно ли посмотреть PDF прямо внутри 1С, не открывая внешнюю программу?
Чем ХранилищеЗначения отличается от присоединённых файлов?
ХранилищеЗначения — это просто реквизит объекта, куда вы сами кладёте двоичные данные и сами управляете открытием. Присоединённые файлы из БСП — готовый механизм со списком, версиями, авторами и настройками хранения. Для типовых задач берите присоединённые файлы.Как загрузить сразу много PDF из папки?
Будет ли PDF в томе на диске попадать в резервную копию?
.dt сами файлы из томов не забирает — она сохраняет лишь ссылки на них. Настройте копирование каталогов томов вместе с базой.