В процессе разработки часто возникает задача автоматического формирования печатных форм, например, договоров, на основе макетов, хранящихся в конфигурации 1С. Рассмотрим, как организовать процесс заполнения шаблона данными, его сохранение в нужную папку, а также как автоматизировать присвоение номеров договорам.
Для работы с MS Word из 1С мы используем COM-объект. Сначала необходимо получить макет, а затем через методы объекта Word.Application заполнить именованные закладки в документе. После того как все данные (дата, реквизиты, суммы) вставлены, перед нами встает задача сохранения документа на диск.
Для сохранения используем метод SaveAs. Важно помнить, что путь к файлу должен быть корректным, а права доступа к папке — настроенными. Если вы работаете в сетевой среде, лучше использовать UNC-пути (например, \\Server\Share\Folder\) вместо привязки к локальным буквам дисков.
Рассмотрим пример кода для сохранения:
// Предположим, что Word - это запущенный COM-объект приложения
// Формируем имя файла динамически
ПутьКФайлу = "F:\Dogovora\IP\" + ИмяДоговора + ".docx";
Word.SaveAs(ПутьКФайлу, 0);
Обратите внимание: параметр 0 указывает на сохранение в формате по умолчанию. Если возникают ошибки несовместимости типов файлов, убедитесь, что расширение файла в строке пути соответствует формату, который вы пытаетесь сохранить.
Одной из частых задач является сквозная нумерация. Если вы формируете договор из формы контрагента, вы можете столкнуться с тем, что стандартные механизмы нумерации документов здесь не работают. Рассмотрим альтернативные подходы:
232-08, где 232 — код контрагента, а 08 — код шаблона.Часто номер объекта содержит префиксы или буквенные обозначения (например, УТ0000447), которые необходимо убрать, чтобы получить «чистый» номер. Для этого проанализируем каждый символ строки и оставим только цифры.
Разберем готовое решение для очистки строки:
ОбработаннаяСтрокаСтр = СокрЛП(НомерДоговора);
Результат = ОбработаннаяСтрокаСтр;
Для н = 1 По СтрДлина(ОбработаннаяСтрокаСтр) Цикл
ТекСимвол = Сред(ОбработаннаяСтрокаСтр, н, 1);
Если Найти("0123456789", ТекСимвол) = 0 Тогда
Результат = СтрЗаменить(Результат, ТекСимвол, "");
КонецЕсли;
КонецЦикла;
При использовании OLE-автоматизации для работы с MS Office крайне важно учитывать следующие нюансы:
Document.Close() и Application.Quit(). В противном случае процессы winword.exe будут «зависать» в памяти сервера или компьютера пользователя, что со временем приведет к нехватке ресурсов.Неопределено.SaveAs или как обратиться к специфическому свойству документа.OpenXML, которые позволяют манипулировать .docx напрямую, без запуска тяжеловесного приложения Word.Соблюдение этих простых правил поможет вам сделать процесс автоматизации документооборота в 1С надежным, быстрым и удобным для конечных пользователей.