Прикрепление и хранение PDF-файлов в базе 1С

· 9 мин

Содержание

Прикрепить PDF к документу или элементу справочника в 1С 8.3 быстрее всего вручную: откройте карточку объекта, нажмите на значок скрепки (команда Присоединённые файлы), затем Добавить → Файл с диска и выберите нужный PDF. Файл сохранится прямо в базе и будет открываться из карточки в один клик.

Так загружают сканы договоров, счетов, актов и входящих писем. Но «добавить PDF в 1С» — это не только скрепка. Печатную форму можно сразу сохранить в PDF, скан — подтянуть программно встроенным языком, а внешний документ — получить из стороннего сервиса по HTTP. Разберём все рабочие способы и то, как хранить PDF, чтобы база не распухала.

Куда вообще грузится PDF и что настроить заранее

PDF в 1С хранится через механизм присоединённых файлов из Библиотеки стандартных подсистем (БСП). Он есть в типовых конфигурациях — Бухгалтерия предприятия 3.0, ЗУП 3.1, Управление торговлей 11 — и включается для конкретных документов и справочников на уровне конфигурации.

Перед первой загрузкой проверьте настройки в разделе Администрирование → Настройки работы с файлами:

  • 📎 Максимальный размер файла — по умолчанию стоит ограничение (обычно несколько десятков МБ). Тяжёлый скан не прикрепится, пока не поднимете лимит.
  • 📂 Допустимые расширения — если список заполнен, а pdf в нём нет, загрузка оборвётся с ошибкой расширения.
  • 💾 Место хранения — в базе или в томах на диске (об этом в разделе про хранение).
Что проверить перед загрузкой PDF
Выполнено: 0 / 4

Если скрепки на карточке нет — значит, для этого вида документа присоединённые файлы не включены. Это решается в конфигураторе (или расширением), а не настройкой в режиме предприятия.

Ручная загрузка через скрепку

Это основной способ для бухгалтера и оператора — без кода и обработок.

  1. Откройте нужный документ или элемент справочника (например, Поступление (акт, накладная) или карточку контрагента).
  2. Нажмите на значок скрепки в командной панели формы либо выберите команду Присоединённые файлы в панели навигации.
  3. В открывшемся списке нажмите Добавить → Файл с диска.
  4. Выберите 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, который подключается без изменения типовой базы.

Порядок такой:

  1. Создайте или возьмите готовую обработку с формой выбора папки и таблицей сопоставления «файл → объект».
  2. Подключите её через Файл → Открыть (разовый запуск) либо зарегистрируйте в справочнике дополнительных обработок: Администрирование → Печатные формы, отчёты и обработки → Дополнительные отчёты и обработки.
  3. Укажите папку с PDF и правило привязки — обычно по номеру документа или ИНН контрагента в имени файла.
  4. Запустите — обработка сама прочитает каждый 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 прямо внутри 1С, не открывая внешнюю программу?
Штатно — нет, собственного просмотрщика PDF в формах 1С нет. Файл всегда открывается ассоциированной программой чтения PDF. Встроить предпросмотр можно только доработкой с внешней компонентой.
Чем ХранилищеЗначения отличается от присоединённых файлов?
ХранилищеЗначения — это просто реквизит объекта, куда вы сами кладёте двоичные данные и сами управляете открытием. Присоединённые файлы из БСП — готовый механизм со списком, версиями, авторами и настройками хранения. Для типовых задач берите присоединённые файлы.
Как загрузить сразу много PDF из папки?
Через внешнюю обработку: она читает каталог и привязывает каждый файл к объекту по номеру или ИНН из имени файла. Руками через скрепку это делать долго.
Будет ли PDF в томе на диске попадать в резервную копию?
Только если вы бэкапите тома отдельно. Выгрузка базы в .dt сами файлы из томов не забирает — она сохраняет лишь ссылки на них. Настройте копирование каталогов томов вместе с базой.
PDF из тома не открывается после переноса базы на другой сервер — почему?
Сменился физический путь тома, а в настройке осталось старое значение. Поправьте путь тома под новый сервер и проверьте права службы сервера 1С на каталог.