В процессе работы с системой 1С:Управление производственным предприятием (УПП) часто возникает необходимость автоматизировать передачу документов во внешние системы, такие как Directum. Одной из типовых задач является выгрузка печатной формы в формат Word (DOCX) «по одной кнопке», чтобы пользователю не приходилось использовать стандартное меню «Файл — Сохранить как». Разберем, как реализовать этот функционал программно, обеспечив сохранение файла на рабочий стол пользователя и подготовив базу для интеграции с системой документооборота.
Основным инструментом для решения нашей задачи в платформе 1С является метод Записать() объекта ТабличныйДокумент. Этот метод позволяет сохранить сформированную печатную форму в файл определенного типа. Рассмотрим синтаксис этого метода и доступные форматы.
Для выгрузки в современный формат Word необходимо использовать параметр ТипФайлаТабличногоДокумента.DOCX. Посмотрим на базовый пример кода:
// Предположим, что ТабДок — это уже сформированный табличный документ с данными
ПутьКФайлу = "C:\Temp\Document.docx";
ТабДок.Записать(ПутьКФайлу, ТипФайлаТабличногоДокумента.DOCX);
Помимо DOCX, платформа поддерживает множество других форматов, которые могут быть полезны в зависимости от требований смежной системы (Directum):
Прописывать жесткий путь к диску C:\ — плохая практика, так как у разных пользователей операционной системы пути к папкам профиля различаются. Чтобы кнопка работала корректно у любого сотрудника, мы должны программно определить путь к его Рабочему столу. Проанализируем ситуацию: в операционной системе Windows это проще всего сделать через объект WScript.Shell.
Разберем по шагам, как получить этот путь в коде 1С:
Функция ПолучитьПутьКРабочемуСтолу()
Попытка
ОбъектWSH = Новый COMОбъект("WScript.Shell");
ПутьКСтолу = ОбъектWSH.SpecialFolders().Item("Desktop");
Возврат ПутьКСтолу;
Исключение
Возврат ""; // Обработка ошибки, если COM-объект недоступен
КонецПопытки;
КонецФункции
Использование этого метода гарантирует, что файл попадет именно туда, где пользователь привык его искать, вне зависимости от имени его учетной записи в Windows.
Теперь объединим знания и создадим процедуру, которая будет вызываться при нажатии кнопки «Выгрузить в Word». Выясним причину, почему важно правильно формировать имя файла: оно должно быть уникальным, чтобы новые выгрузки не перезаписывали старые документы без предупреждения. Рекомендуем добавлять в имя файла номер документа и текущую дату.
Рассмотрим пример кода для обработки нажатия кнопки:
Процедура ДействияФормыВыгрузитьВWord(Кнопка)
// 1. Формируем печатную форму (стандартный механизм УПП)
ТабДок = СформироватьПечатнуюФорму();
Если ТабДок = Неопределено Тогда
Предупреждение("Не удалось сформировать печатную форму!");
Возврат;
КонецЕсли;
// 2. Определяем путь сохранения
ПутьНаСтол = ПолучитьПутьКРабочемуСтолу();
ИмяФайла = "Счет_" + СокрЛП(СсылкаНаОбъект.Номер) + "_" + Формат(ТекущаяДата(), "ДФ=yyyyMMddHHmmss") + ".docx";
ПолныйПуть = ПутьНаСтол + "\" + ИмяФайла;
// 3. Записываем файл
Попытка
ТабДок.Записать(ПолныйПуть, ТипФайлаТабличногоДокумента.DOCX);
Сообщить("Файл успешно выгружен на рабочий стол: " + ПолныйПуть);
Исключение
Сообщить("Ошибка при сохранении файла: " + ОписаниеОшибки(), СтатусСообщения.Важное);
КонецПопытки;
// 4. (Опционально) Открываем файл для проверки
// ЗапуститьПриложение(ПолныйПуть);
КонецПроцедуры
Если конечная задача — передача файла в Directum, простого сохранения на рабочий стол может быть недостаточно. Проанализируем способы автоматизации этого процесса, которые часто применяются в связке 1С и Directum:
PDF_A_1, так как он гарантирует, что документ не будет случайно изменен при просмотре и сохранит свой вид спустя годы. Если Directum используется только как архив, рекомендуем использовать именно его.Нужно учитывать, что метод 1С ТабДок.Записать(..., DOCX) создает документ, который визуально идентичен таблице 1С. Внутри Word такой файл будет состоять из множества вложенных таблиц и рамок. Это идеально подходит для хранения и печати, но если пользователю в Directum нужно будет активно редактировать текст (например, менять условия договора), такой формат может быть неудобен.
В случаях, где требуется сложная правка текста в Word, опытные разработчики используют COM-соединение с Word.Application и заполняют данные в заранее подготовленный шаблон .dotx с помощью «закладок». Однако для простой выгрузки печатной формы метод Записать() является самым быстрым и надежным решением.
Чтобы не изменять типовую конфигурацию и не создавать сложностей при обновлениях, мы рекомендуем реализовывать данный функционал через Внешние печатные формы. Это позволит:
Таким образом, мы рассмотрели полный цикл задачи: от определения технической возможности платформы 1С до реализации конкретной бизнес-логики выгрузки документов для последующей интеграции с Directum.