Разработка и Конфигурация · 13 мин
1С: как получить факсимиле программно и вывести в печатную форму
Как программно получить факсимиле подписи в 1С: хранение картинки в базе, вывод в макет табличного документа, типовые механизмы БСП, примеры кода и типичные ошибки.
Факсимиле — это графическое изображение подписи (и иногда печати), которое автоматически подставляется в печатные формы документов: счета, акты, накладные, доверенности. В 1С задача решается программно: картинка хранится в базе или в файле, а в момент формирования печатной формы вставляется в табличный документ в нужную область.
Типовой «кнопки факсимиле» в платформе нет — механизм либо уже реализован в конфигурации (в решениях на БСП есть подсистема работы с файлами и присоединенными картинками), либо его добавляют доработкой. Поэтому первый шаг — понять, что доступно в вашей конфигурации, и только потом писать код.
Ниже разобраны рабочие способы: хранение изображения подписи, получение его программно, вставка в макет табличного документа, а также ограничения, ошибки и юридические нюансы, о которых нужно помнить до внедрения.
Что понадобится перед началом работы
Для реализации нужны три вещи: само изображение подписи, место его хранения в базе и доработанный макет печатной формы. Изображение готовят заранее: подпись сканируют или фотографируют, удаляют фон и сохраняют в формате PNG с прозрачностью — так картинка корректно ляжет поверх текста и линий табличного документа.
Требования к картинке практические, а не формальные: разрешение порядка 300 DPI, размер в пределах 300–600 пикселей по ширине, фон прозрачный. Слишком большая картинка увеличит размер файла печатной формы и замедлит формирование, слишком маленькая — будет размытой при печати.
Также заранее решите, чьи подписи понадобятся: одна подпись руководителя на всю организацию или разные подписи для сотрудников, организаций и договоров. От этого зависит структура хранения: константа, реквизит справочника «Организации», табличная часть или присоединенные файлы к физическому лицу.
Где хранить изображение подписи в базе
Самый простой вариант — реквизит типа «ХранилищеЗначения» в нужном объекте. Например, в справочнике «Организации» добавляют реквизиты «ФаксимилеДиректора» и «ФаксимилеГлавбуха», а в форму выводят поле картинки для загрузки. Для одной организации достаточно константы с тем же типом.
Если конфигурация построена на Библиотеке стандартных подсистем (УТ 11, ERP, БП 3.0, ЗУП 3.1), рациональнее использовать штатный механизм присоединенных файлов: картинка подписи прикрепляется к элементу справочника «Физические лица» или «Организации», а получить её можно через функции модуля РаботаСФайлами. Это даёт версионирование, хранение в томах и не требует изменения структуры метаданных.
Внешний файл на диске или сетевом ресурсе — третий вариант. Он подходит для тестирования или когда картинки централизованно обновляются извне, но в продуктиве ненадёжен: путь может оказаться недоступен с сервера 1С, а в клиент-серверном режиме файл должен быть доступен именно серверу, а не клиентскому компьютеру.
Сравнение вариантов хранения
Быстро реализовать, картинка всегда в базе. Минус — нужно менять конфигурацию и обновлять структуру БД.
Не требует доработки метаданных, поддерживает тома и версии. Подходит только для конфигураций на БСП.
Просто для отладки. Ненадёжно в клиент-серверном режиме и при переносе базы.
Как программно получить картинку факсимиле
Если картинка лежит в реквизите типа «ХранилищеЗначения», получение сводится к извлечению двоичных данных и созданию объекта «Картинка». Код выполняется на сервере в момент формирования печатной формы.
Функция ПолучитьФаксимиле(Организация) Экспорт
Хранилище = Организация.ФаксимилеДиректора; // реквизит типа ХранилищеЗначения
Если Хранилище = Неопределено Тогда
Возврат Неопределено;
КонецЕсли;
ДвоичныеДанные = Хранилище.Получить();
Если ДвоичныеДанные = Неопределено Тогда
Возврат Неопределено;
КонецЕсли;
Возврат Новый Картинка(ДвоичныеДанные);
КонецФункции
При хранении в присоединенных файлах БСП логика другая: сначала находят присоединенный файл владельца, затем получают его двоичные данные через РаботаСФайлами.ДвоичныеДанныеФайла(). Чтобы отличить файл подписи от прочих вложений, используют служебный признак — например, дополнительный реквизит или соглашение об именовании файла.
Важный приём: обертывайте получение картинки в функцию, возвращающую Неопределено при отсутствии подписи. Тогда печатная форма просто выйдет без факсимиле, а не упадёт с ошибкой — это критично, когда документы печатают пакетно.
// Вариант с присоединенными файлами БСП
Файлы = Новый Массив;
РаботаСФайлами.ЗаполнитьПрисоединенныеФайлыКОбъекту(ФизЛицо, Файлы);
Для Каждого Файл Из Файлы Цикл
Данные = РаботаСФайлами.ДвоичныеДанныеФайла(Файл);
КартинкаПодписи = Новый Картинка(Данные);
Прервать;
КонецЦикла;Как вставить факсимиле в макет печатной формы
Способ 1: параметр макета с типом «Картинка»
В макете табличного документа создайте параметр (например, «ФаксимилеДиректора») в ячейке, где должна быть подпись, и в свойствах параметра установите тип значения «Картинка». После этого картинку можно передать через стандартное заполнение параметров области.
ОбластьПодпись = Макет.ПолучитьОбласть("Подпись");
Факсимиле = ПолучитьФаксимиле(Организация);
Если Факсимиле <> Неопределено Тогда
ОбластьПодпись.Параметры.ФаксимилеДиректора = Факсимиле;
КонецЕсли;
ТабличныйДокумент.Вывести(ОбластьПодпись);
Этот способ самый управляемый: картинка привязана к ячейке, наследует её размеры и не «уезжает» при изменении макета. Ограничение — параметр-картинка масштабируется по ячейке, поэтому размеры ячейки нужно подобрать заранее, включив объединение ячеек при необходимости.
Способ 2: коллекция рисунков табличного документа
Альтернатива — добавить рисунок программно через ТабличныйДокумент.Рисунки.Добавить(). Рисунок позиционируется координатами и размерами в миллиметрах, что удобно, когда подпись должна перекрывать несколько областей или размещаться поверх текста.
Рисунок = ТабличныйДокумент.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
Рисунок.Картинка = Факсимиле;
Рисунок.Верх = 120; // мм от верха документа
Рисунок.Лево = 60; // мм от левого края
Рисунок.Высота = 12; // мм
Рисунок.Ширина = 40; // мм
Рисунок.Линия = Новый Линия(ТипЛинииРисункаТабличногоДокумента.НетЛинии);
Рисунки добавляют после вывода всех областей, когда известны итоговые координаты. Если форма многостраничная, координаты считают от начала документа — проще вычислять позицию через высоту уже выведенных областей.
Способ 3: рисунок в самом макете
Если подпись одна и не меняется (например, подпись руководителя в локальной базе малой фирмы), картинку можно вставить прямо в макет конфигурации как рисунок. Программный код тогда не нужен вовсе, но замена подписи потребует обновления конфигурации или внешней печатной формы — поэтому способ годится только для стабильных реквизитов.
- 1Подготовьте PNG подписи с прозрачным фоном
- 2Выберите хранилище: реквизит-ХранилищеЗначения или присоединенные файлы БСП
- 3Загрузите картинку в базу через форму элемента
- 4Добавьте в макет параметр типа «Картинка» или планируйте вывод через Рисунки
- 5Напишите функцию получения картинки с возвратом Неопределено при отсутствии
- 6Вставьте вызов в процедуру формирования печатной формы
- 7Проверьте печать и сохранение в PDF для документа с подписью и без неё
Факсимиле в типовых конфигурациях без доработки
В конфигурациях на БСП (БП 3.0, УТ 11, ERP, ЗУП) часть задачи уже решена: есть хранение логотипов и изображений организаций, а в ряде форм — штатные места для подписей. Но «из коробки» автоматическая подстановка факсимиле во все печатные формы обычно не реализована — её добавляют через механизм дополнительных печатных форм и внешних обработок, не снимая конфигурацию с поддержки.
Практичный путь: создать внешнюю печатную форму, скопировать в неё типовой макет и код формирования, затем добавить вывод факсимиле. Внешняя форма регистрируется в справочнике «Дополнительные отчеты и обработки» и подменяет типовую печать для выбранных документов. При обновлении конфигурации доработка не теряется, но макет нужно периодически сверять с типовым.
Проверка результата и типичные ошибки
После внедрения проверьте три сценария: документ с заполненной подписью, документ без подписи (форма должна сформироваться без ошибки и без пустой рамки) и пакетная печать нескольких документов. Дополнительно сохраните форму в PDF и убедитесь, что картинка не сместилась и не потеряла прозрачность.
Частые дефекты: подпись растянута или сплющена (несоответствие пропорций ячейки и картинки), чёрный фон вместо прозрачного (картинка сохранена в JPG), подпись обрезана при печати (рисунок вышел за границы области печати), пустое место вместо подписи в клиент-серверной базе (картинка читалась с диска клиента).
Как проверить результат
Факсимиле на своём месте, пропорции сохранены, фон прозрачный
Картинка растянута, с фоном или смещена на текст
Форма формируется, область подписи пустая, ошибок нет
Ошибка выполнения или пустая рамка рисунка
Подпись выглядит так же, как на экране
Картинка потерялась или искажена при экспорте
Все формы с подписями, скорость приемлемая
Ошибки на отдельных документах, заметные задержки
Юридические ограничения и безопасность
Факсимильная подпись не равнозначна собственноручной: по общему правилу её использование допустимо, только если это прямо предусмотрено договором между сторонами или соглашением о документообороте. Для первичных учётных документов, налоговых и кадровых форм ориентируйтесь на требования законодательства и внутренние регламенты — во многих случаях факсимиле недопустимо, и документ нужно подписывать собственноручно или электронной подписью.
С точки зрения безопасности изображение подписи — чувствительный объект: любой, кто получит картинку, сможет подделать подпись. Ограничьте права на изменение реквизитов с факсимиле и на присоединенные файлы, ведите журнал загрузки картинок и не выкладывайте файлы подписей в общие сетевые папки.
Что важно запомнить
Факсимиле в 1С — это картинка в базе плюс код её вывода в макет печатной формы. Храните подпись в ХранилищеЗначения или присоединенных файлах БСП, выводите через параметр-картинку или коллекцию Рисунки, всегда обрабатывайте отсутствие подписи и заранее согласуйте юридическую допустимость факсимиле для каждого типа документов.
Частые вопросы
Можно ли вставить факсимиле без изменения конфигурации?
Да, если конфигурация на БСП: используйте внешнюю печатную форму, зарегистрированную в «Дополнительных отчетах и обработках». Картинку подписи храните как присоединенный файл к организации или физическому лицу — тогда структура метаданных не меняется и поддержка не нарушается.
В каком формате лучше хранить изображение подписи?
Оптимален PNG с прозрачным фоном: он корректно накладывается на линии и текст табличного документа. JPG не поддерживает прозрачность и даёт видимый прямоугольник. Размер файла держите умеренным — достаточно ширины 300–600 пикселей.
Почему подпись видна на экране, но пропадает при печати или в PDF?
Чаще всего рисунок выходит за границы области печати страницы или добавлен с координатами, рассчитанными под другой масштаб. Проверьте поля страницы табличного документа и координаты рисунка, а также убедитесь, что картинка передаётся как объект «Картинка», а не как навигационная ссылка на временное хранилище, которое уже очищено.
Как сделать разные подписи для разных организаций или сотрудников?
Храните картинку в реквизите того объекта, к которому она относится: в элементе справочника «Организации» — для подписей по организации, в «Физических лицах» или пользователях — для персональных. В функции получения факсимиле передавайте владельца параметром и доставайте его картинку.
Работает ли факсимиле в тонком и веб-клиенте?
Да, если картинка получается на сервере из базы. Печатные формы формируются серверным кодом, табличный документ с рисунками корректно отображается и печатается во всех клиентах. Проблемы возникают только при попытке читать файлы с локального диска пользователя.
Можно ли вывести вместе с подписью факсимиле печати организации?
Да, механизм тот же: храните вторую картинку (оттиск печати) и выводите её отдельным рисунком или параметром макета. Обычно печать размещают так, чтобы она частично перекрывала подпись и не закрывала текст, — позицию подбирают координатами рисунка на тестовых документах.