Как автоматически добавлять регистрационный штамп и переименовывать файлы в 1С:Документооборот?

Программист 1С v8.3 (Управляемые формы) 1С:Документооборот IT и автоматизация бизнеса
← На главную

В процессе работы с системой 1С:Документооборот часто возникает необходимость автоматически регистрировать документы и автоматизировать рутинные операции, которые выполняются при регистрации. Две наиболее востребованные задачи — это автоматическое наложение регистрационного штампа на файл (как в формате Word, так и в PDF) и приведение имени файла к корпоративному стандарту — есть автоматическое нанесение штампов на Word и PDF. Рассмотрим подробно, как реализовать эти задачи, используя штатные механизмы системы и возможности программирования в пользовательском режиме.

Разбор архитектурного подхода: Бизнес-события против доработки конфигурации

Для начала проанализируем ситуацию: стоит ли вносить изменения непосредственно в код конфигурации (через расширение или напрямую)? Опытные разработчики рекомендуют использовать механизм бизнес-событий. Это позволяет сохранить конфигурацию на поддержке и гибко управлять логикой автоматизации.

В системе существует справочник ПользовательскиеОбработчикиБизнесСобытий (его можно найти по навигационной ссылке e1cib/list/Справочник.ПользовательскиеОбработчикиБизнесСобытий; также полезно сохранение текстов обработчиков в файлы). Этот механизм работает как «подписка на событие», но настраивается в пользовательском интерфейсе. Мы можем написать код на языке 1С (используя редактор кода для "1С:Документооборот 3"), который будет выполняться автоматически, например, при событии «Регистрация документа».

Автоматическое переименование файла при регистрации

При создании исходящего письма система часто дает файлу стандартное имя, например, «Исходящий_документ». Если нам нужно изменить его на формат «Номер + Заголовок», мы можем использовать обработчик бизнес-события. Выясним причину, по которой обычное присваивание ИмяБезРасширения в форме может не работать: при записи документа система может повторно инициализировать данные файла или блокировать его.

Разберем пример кода, который можно разместить в обработчике бизнес-события для переименования файла:


// Получаем объект документа-источника события
ИсточникДокумента = Событие.Источник;

// Находим присоединенные файлы к документу
Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |	Файлы.Ссылка КАК ФайлСсылка
    |ИЗ
    |	Справочник.Файлы КАК Файлы
    |ГДЕ
    |	Файлы.ВладелецФайла = &Владелец";

Запрос.УстановитьПараметр("Владелец", ИсточникДокумента);
РезультатЗапроса = Запрос.Выполнить();

Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
    // Работаем с объектом файла
    ОбъектФайла = Выборка.ФайлСсылка.ПолучитьОбъект();
    
    // Формируем новое имя на основе реквизитов документа
    НовоеИмя = ИсточникДокумента.РегистрационныйНомер + "_" + ИсточникДокумента.Заголовок;
    
    // Очищаем имя от недопустимых символов
    НовоеИмя = РаботаСФайлами.ПолучитьДопустимоеИмяФайла(НовоеИмя);
    
    ОбъектФайла.Наименование = НовоеИмя;
    ОбъектФайла.Записать();
КонецЦикла;

Важный нюанс: Если вы используете версию 1С:Документооборот 3.0, для этих целей лучше использовать штатный функционал «Правила именования файлов». Там можно настроить маску имени без написания кода.

Автоматическое наложение регистрационного штампа в Word

Для файлов формата .doc и .docx в системе предусмотрен механизм штрихкодирования и вставки регистрационных данных (при необходимости может быть настроена автоматическая конвертация doc в docx) — для этого подойдёт интеграция задач и файлов 1С:ДО. Часто разработчики пытаются вызвать процедуру ШтрихкодированиеКлиент.ВставитьРегистрационныйШтамп(ЭтаФорма), но сталкиваются с проблемой: эта процедура предназначена для работы на клиенте из контекста формы. В фоновых заданиях или серверных обработчиках она работать не будет.

Посмотрим на алгоритм правильной серверной вставки штампа:

  1. Используйте функции общего модуля ШтрихкодированиеСервер.
  2. Для Word-документов наиболее стабильный способ — это использование автозаполнения шаблонов файлов — для этого подойдёт заполнение шаблонов Word данными из 1С. В шаблоне документа заранее подготавливается тег (поле), в которое при регистрации система сама вставит данные штампа.
  3. Если нужно программно «вклеить» штамп в уже существующий файл, необходимо использовать COM-объект Word на сервере (если сервер работает под Windows) или специальные библиотеки для парсинга XML-структуры файла .docx.

Работа с PDF: современный подход

Наложение штампа на PDF-файлы традиционно считалось сложной задачей, требующей внешних утилит (например, PDFtk). Однако в современных версиях платформы 1С (8.3.16+) появился мощный инструмент — объект ДокументPDF.

Проанализируем ситуацию наложения штампа на PDF с помощью встроенных средств:


// Пример логики наложения текста/штампа на PDF
ДокументПДФ = Новый ДокументPDF();
ДокументПДФ.Прочитать(ПутьКФайлу);

// Выбираем страницу (например, первую)
Страница = ДокументПДФ.ПолучитьСтраницу(1);

// Определяем параметры штампа (координаты зависят от размера страницы)
ДанныеШтампа = "Зарегистрировано: " + РегНомер + " от " + Формат(ДатаРег, "ДФ=dd.MM.yyyy");

// Добавляем текстовый блок в правый верхний угол
Страница.РисоватьТекст(500, 800, ДанныеШтампа); 

// Сохраняем результат
ДокументПДФ.Записать(ПутьКНовомуФайлу);

Нужно учитывать, что при автоматическом наложении штампа важно создавать новую версию файла, а не просто перезаписывать текущую. Это позволит сохранить историю изменений и даст возможность вернуться к оригиналу без штампа. Для создания версии используйте методы модуля РаботаСФайлами.

Пошаговая инструкция по настройке автоматизации

Подведем итог и составим план действий для реализации задачи:

  1. Создание обработчика: Перейдите в справочник Пользовательские обработчики бизнес-событий и создайте новый элемент.
  2. Настройка события: Выберите событие «Регистрация документа» (или «Запись документа», если регистрация происходит в момент записи).
  3. Написание кода:
    • В коде получите ссылку на основной файл документа.
    • Проверьте, не занят ли файл (не редактируется ли он кем-то в данный момент).
    • Вызовите функции для формирования изображения штампа.
    • Используйте методы платформы для модификации файла (Word или PDF).
    • Обновите имя файла через свойства объекта СправочникОбъект.Файлы.
  4. Отладка: Поскольку код в обработчиках событий выполняется на сервере, для отладки используйте запись в ЖурналРегистрации или подключайтесь к серверному процессу через конфигуратор.

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

Таким образом, комбинируя штатные механизмы 1С:Документооборота и возможности платформы 1С по работе с PDF и файловыми объектами, можно добиться полной автоматизации регистрации документов без внесения изменений в типовой код программы.

← На главную