Работа с автозаполнением шаблонов файлов в документообороте



При автозаполнении шаблонов файлов средствами MS Word возникает такая проблема — если одно и то же поле используется несколько раз в документе, тогда приходится дублировать закладки, например, если поле «Ответственный» используется 2 раза приходится создавать 2 закладки (Ответственный», «Ответственный2») и дублировать правила заполнения для этих полей. В данной статье я хочу рассказать каким образом можно создавать только 1 закладку и использовать данные из этой закладки в других местах документа.

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

Сначала нужно добавить вкладку "Разработчик" на ленту. На вкладке "Файл" выберите "Параметры" — > "Настроить ленту". В разделе "Настройка ленты" в списке "Основные вкладки" установите флажок "Разработчик":

Затем нужно создать макрос. Для этого перейдите на вкладку "Разработчик" — > "Макросы". В открывшемся окне введите имя макроса и нажмите кнопку "Создать":

Имя макроса должно равняться значению "Autoopen", при таком значении данный макрос будет всегда запускаться при открытии документа.

В открывшемся окне вставьте код макроса и сохраните его:

Код макроса:

Sub Autoopen()

Dim aStory As Range
Dim aField As Field
For Each aStory In ActiveDocument.StoryRanges
For Each aField In aStory.Fields
If aField.Type = 3 Then
aField.Update
End If
Next aField
Next aStory

End Sub

Теперь можно создавать 1 закладку и если данные из этого поля нужны в других местах, тогда можно просто создать перекрестную ссылку на эту закладку и не дублировать данные в правилах автозаполнения шаблона файла (официальная документация по созданию перекрестных ссылок в ворде).

 

2 Comments

  1. baykovsky

    Спасибо за интересный прием. Но это далеко не панацея. Как быть, если политикой безопасности запрещено использование макросов?

    Reply
  2. pavelpribytkin96

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

    Для ворда формата 2007+ это общий модуль «АвтозаполнениеШаблоновФайловКлиентСервер», процедура «ЗаполнитьФайлMSWordВXML».

    Код 1С:

    ПереместитьФайл(ВременныйZIPФайл, НовыйПутьКФайлу);
    УдалитьФайлы(ВременнаяПапкаДляРазархивирования);
    
    //Обновление перекрестных ссылок документа
    Word = New ComObject(«Word.Application»);
    Word.Documents.Open(НовыйПутьКФайлу);
    For Each Field In Word.ActiveDocument.Fields Do
    If Field.Type = 3 Then
    Field.Update();
    EndIf;
    EndDo;
    Word.Documents.Close();
    Word.Quit();
    //Конец обновление перекрестных ссылок
    
    ДвоичныеДанныеЗаполненногоФайла = Новый
    ДвоичныеДанные(НовыйПутьКФайлу);
    УдалитьФайлы(СтарыйПутьКФайлу);
    УдалитьФайлы(НовыйПутьКФайлу);
    
    Возврат ДвоичныеДанныеЗаполненногоФайла;
    

    Показать

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *