В процессе работы с системой 1С:Документооборот часто возникает необходимость автоматически регистрировать документы и автоматизировать рутинные операции, которые выполняются при регистрации. Две наиболее востребованные задачи — это автоматическое наложение регистрационного штампа на файл (как в формате Word, так и в PDF) и приведение имени файла к корпоративному стандарту — есть автоматическое нанесение штампов на Word и PDF. Рассмотрим подробно, как реализовать эти задачи, используя штатные механизмы системы и возможности программирования в пользовательском режиме.
Для начала проанализируем ситуацию: стоит ли вносить изменения непосредственно в код конфигурации (через расширение или напрямую)? Опытные разработчики рекомендуют использовать механизм бизнес-событий. Это позволяет сохранить конфигурацию на поддержке и гибко управлять логикой автоматизации.
В системе существует справочник ПользовательскиеОбработчикиБизнесСобытий (его можно найти по навигационной ссылке e1cib/list/Справочник.ПользовательскиеОбработчикиБизнесСобытий; также полезно сохранение текстов обработчиков в файлы). Этот механизм работает как «подписка на событие», но настраивается в пользовательском интерфейсе. Мы можем написать код на языке 1С (используя редактор кода для "1С:Документооборот 3"), который будет выполняться автоматически, например, при событии «Регистрация документа».
При создании исходящего письма система часто дает файлу стандартное имя, например, «Исходящий_документ». Если нам нужно изменить его на формат «Номер + Заголовок», мы можем использовать обработчик бизнес-события. Выясним причину, по которой обычное присваивание ИмяБезРасширения в форме может не работать: при записи документа система может повторно инициализировать данные файла или блокировать его.
Разберем пример кода, который можно разместить в обработчике бизнес-события для переименования файла:
// Получаем объект документа-источника события
ИсточникДокумента = Событие.Источник;
// Находим присоединенные файлы к документу
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Файлы.Ссылка КАК ФайлСсылка
|ИЗ
| Справочник.Файлы КАК Файлы
|ГДЕ
| Файлы.ВладелецФайла = &Владелец";
Запрос.УстановитьПараметр("Владелец", ИсточникДокумента);
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
// Работаем с объектом файла
ОбъектФайла = Выборка.ФайлСсылка.ПолучитьОбъект();
// Формируем новое имя на основе реквизитов документа
НовоеИмя = ИсточникДокумента.РегистрационныйНомер + "_" + ИсточникДокумента.Заголовок;
// Очищаем имя от недопустимых символов
НовоеИмя = РаботаСФайлами.ПолучитьДопустимоеИмяФайла(НовоеИмя);
ОбъектФайла.Наименование = НовоеИмя;
ОбъектФайла.Записать();
КонецЦикла;
Важный нюанс: Если вы используете версию 1С:Документооборот 3.0, для этих целей лучше использовать штатный функционал «Правила именования файлов». Там можно настроить маску имени без написания кода.
Для файлов формата .doc и .docx в системе предусмотрен механизм штрихкодирования и вставки регистрационных данных (при необходимости может быть настроена автоматическая конвертация doc в docx) — для этого подойдёт интеграция задач и файлов 1С:ДО. Часто разработчики пытаются вызвать процедуру ШтрихкодированиеКлиент.ВставитьРегистрационныйШтамп(ЭтаФорма), но сталкиваются с проблемой: эта процедура предназначена для работы на клиенте из контекста формы. В фоновых заданиях или серверных обработчиках она работать не будет.
Посмотрим на алгоритм правильной серверной вставки штампа:
ШтрихкодированиеСервер..docx.Наложение штампа на PDF-файлы традиционно считалось сложной задачей, требующей внешних утилит (например, PDFtk). Однако в современных версиях платформы 1С (8.3.16+) появился мощный инструмент — объект ДокументPDF.
Проанализируем ситуацию наложения штампа на PDF с помощью встроенных средств:
// Пример логики наложения текста/штампа на PDF
ДокументПДФ = Новый ДокументPDF();
ДокументПДФ.Прочитать(ПутьКФайлу);
// Выбираем страницу (например, первую)
Страница = ДокументПДФ.ПолучитьСтраницу(1);
// Определяем параметры штампа (координаты зависят от размера страницы)
ДанныеШтампа = "Зарегистрировано: " + РегНомер + " от " + Формат(ДатаРег, "ДФ=dd.MM.yyyy");
// Добавляем текстовый блок в правый верхний угол
Страница.РисоватьТекст(500, 800, ДанныеШтампа);
// Сохраняем результат
ДокументПДФ.Записать(ПутьКНовомуФайлу);
Нужно учитывать, что при автоматическом наложении штампа важно создавать новую версию файла, а не просто перезаписывать текущую. Это позволит сохранить историю изменений и даст возможность вернуться к оригиналу без штампа. Для создания версии используйте методы модуля РаботаСФайлами.
Подведем итог и составим план действий для реализации задачи:
Пользовательские обработчики бизнес-событий и создайте новый элемент.СправочникОбъект.Файлы.ЖурналРегистрации или подключайтесь к серверному процессу через конфигуратор.Важный совет: При работе с бизнес-событиями отсутствует контекстная подсказка и конструктор запросов. Рекомендуется сначала написать и отладить код во внешней обработке или в консоли кода, а затем переносить его в текст обработчика события.
Таким образом, комбинируя штатные механизмы 1С:Документооборота и возможности платформы 1С по работе с PDF и файловыми объектами, можно добиться полной автоматизации регистрации документов без внесения изменений в типовой код программы.