Как программно сохранить макет 1С в файл Word и реализовать автоматическую нумерацию договоров?

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

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

Этап 1: Заполнение и сохранение документа Word через OLE

Для работы с MS Word из 1С мы используем COM-объект. Сначала необходимо получить макет, а затем через методы объекта Word.Application заполнить именованные закладки в документе. После того как все данные (дата, реквизиты, суммы) вставлены, перед нами встает задача сохранения документа на диск.

Для сохранения используем метод SaveAs. Важно помнить, что путь к файлу должен быть корректным, а права доступа к папке — настроенными. Если вы работаете в сетевой среде, лучше использовать UNC-пути (например, \\Server\Share\Folder\) вместо привязки к локальным буквам дисков.

Рассмотрим пример кода для сохранения:


// Предположим, что Word - это запущенный COM-объект приложения
// Формируем имя файла динамически
ПутьКФайлу = "F:\Dogovora\IP\" + ИмяДоговора + ".docx";
Word.SaveAs(ПутьКФайлу, 0); 

Обратите внимание: параметр 0 указывает на сохранение в формате по умолчанию. Если возникают ошибки несовместимости типов файлов, убедитесь, что расширение файла в строке пути соответствует формату, который вы пытаетесь сохранить.

Этап 2: Автоматическая нумерация договоров

Одной из частых задач является сквозная нумерация. Если вы формируете договор из формы контрагента, вы можете столкнуться с тем, что стандартные механизмы нумерации документов здесь не работают. Рассмотрим альтернативные подходы:

  1. Привязка к количеству договоров: Можно сделать запрос к базе данных, подсчитать текущее количество договоров и прибавить единицу. Однако, будьте осторожны: если два пользователя одновременно создают документ, они могут получить одинаковый номер.
  2. Использование кода контрагента: Если у контрагента может быть несколько видов договоров, удобно использовать комбинацию кода контрагента и суффикса (вида договора). Например: 232-08, где 232 — код контрагента, а 08 — код шаблона.

Этап 3: Очистка строки номера от лишних символов

Часто номер объекта содержит префиксы или буквенные обозначения (например, УТ0000447), которые необходимо убрать, чтобы получить «чистый» номер. Для этого проанализируем каждый символ строки и оставим только цифры.

Разберем готовое решение для очистки строки:


ОбработаннаяСтрокаСтр = СокрЛП(НомерДоговора);
Результат = ОбработаннаяСтрокаСтр;
Для н = 1 По СтрДлина(ОбработаннаяСтрокаСтр) Цикл
    ТекСимвол = Сред(ОбработаннаяСтрокаСтр, н, 1);
    Если Найти("0123456789", ТекСимвол) = 0 Тогда
        Результат = СтрЗаменить(Результат, ТекСимвол, "");
    КонецЕсли;
КонецЦикла;

Важные рекомендации по стабильности работы

При использовании OLE-автоматизации для работы с MS Office крайне важно учитывать следующие нюансы:

Соблюдение этих простых правил поможет вам сделать процесс автоматизации документооборота в 1С надежным, быстрым и удобным для конечных пользователей.

← На главную