Заполнение полей шаблонов документов средствами Word, в том числе и из табличной части.

15 6

Довольно часто возникает вопрос «Можно ли добавить в шаблон Word записи из табличной части документа?». К сожалению, стандартными настройками это сделать нельзя. Но у меня появилась идея реализовать данную возможность прикладным способом. Для решения поставленной задачи воспользовалась материалом Дмитрия Тарасова Заполнение полей шаблонов документов средствами Word и модифицировала его решение. В этой статье опишу как я это сделала.

Компоненты решения

RITWordTemplate - Справочник Шаблоны документов Word.  Данный справочник модифицирован: в табличную часть справочника добавлено поле «Таблица» (признак: Да/Нет). Если в поле «Таблица» установлен признак «Да», то

  • в поле «Вычисление» необходимо вернуть в строковой переменной Result строку в формате: «Номер табличного раздела; Имя реквизита, значение которого переносится в » (например: «Result = '3; INVString'»),

  • в поле «Имя поля» указать наименование закладки Текстового поля, располагающегося в заголовке таблицы .

Карточка записи справочника Шаблоны документов Word:

RITOrgLogo - справочник логотипов "Наших организаций";

RITGenerateEDocFromWordTemplate(EDocument: Вариантный; VersionNumber: Целое число; WTCode: Строка) - Функция заполнения полей в документе Word.

Параметры функции

EDocument - объект типа IEDocument, документ, в котором мы хотим заполнить поля;

VersionNumber - версия электронного документа, в которой необходимо заполнить поля (в том и числе таблицы);

WTCode - код записи справочника Шаблоны документов Word, в котором содержатся имена полей и их вычисления.

RITGetTemplateCode(DocID: Целое число) – Функция предназначена для поиска записи справочника Шаблоны документов Word, в поле «Шаблон электронного документа» которой указан шаблон электронного документа, на основе которого был создан документ с ИД DocID.  Функция возвращает пустое значение, если документ не был создан из шаблона или нет соответствующей записи в справочнике Шаблоны электронных документов, иначе - код найденной записи справочника.

Параметры функции

DocID - ИД документа, для которого осуществляется поиск записи справочника Шаблоны электронных документов.

RITAddingDataTable(NumberTabAndRequesute: Строка; EDocument: Вариантный; WordDoc: Вариантный; Index: Целое число) – Функция предназначена для заполнения/обновления таблиц данными из табличной части карточки документа. Поиск таблицы и ячеек для заполнение (обновления данных) осуществляется по передаваемому индексу текстового поля (параметр Index). Примечание: для корректного заполнения таблицы Текстовое поле должно располагаться в заголовке таблицы.

Параметры функции

NumberTabAndRequesute – строка, состоящая из Номера детального раздела и Имени реквизита, значение которого необходимо перенести в документ, разделенные символом “;”

EDocument - объект типа IEDocument, документ, в котором заполняются поля;

WordDoc – объект Document, представляющий активный документ, в котором заполняются поля;

Index – индекс поля, для которого переносятся данные.

RITGetWordTemplateFieldValue(EDocID: Целое число;  CalculateText: Строка) - функция вычисления значения поля документа.

Параметры функции

EDocID - ИД документа, для которого выполняется вычисление значения полей;

CalculateText - текст вычисления значения поля.

Для заполнения/обновления данных в документах, в Типе карточек электронного документа необходимо добавить действие «Заполнить поля» со следующим кодом:

//  поиск записи справочника Шаблоны документов Word
  CodeTempRef = RITGetTemplateCode(Object.ID)
  if Assigned(CodeTempRef)
    TempRef = References.RITWordTemplate.GetObjectByCode(CodeTempRef)
    // Попытатся обновить инофрмацию об объекте (чтобы проверить, сохранили ли его на сервере)
    ExceptionsOff()
    FreeException()       
    EDocInfo = Object.Info      
    ExceptionsOn()
    if ExceptionExists()
      // Электронный документ не сохранен!
      Message = LoadString('DIRE238DC86_E9C7_463C_BA32_F86015A596E2'; 'RM') 
      ShowMessage(Message)
    else 
      EDocuments.BindTo(TempRef.Info; Object.Info)
      RITGenerateEDocFromWordTemplate(Object; ; CodeTempRef)
    endif   
    TempRef.Close
  endif

Пример использования данного решения.

  1. Создаем шаблон электронного документа «Шаблон для примера».

Из скриншота видно, что для интеграции табличной части в заголовки таблицы Word добавляются Текстовые поля, наименование закладок которых должно соответствовать значению «Имя поля» в табличной части справочника Шаблоны документов Word

  1. В Типе карточек электронных документов «Документы для шаблонов» добавляем действие «Заполнить поля».

  2. Создаем запись справочника Шаблоны документов Word для созданного шаблона и заполняем все необходимые поля.

  3. По кнопке Просмотр в созданной записи справочника Шаблоны документов Wordпосмотрим результат заполнения полей шаблона:

    а) заполняем поля в карточке документа

    б) нажимаем кнопку «Заполнить поля»

    в) открываем созданный документ

Таким образом, данные из карточки документа перенеслись корректно. Для обновления данных в документе достаточно после изменения и сохранения данных в карточке документа нажать кнопку «Заполнить поля» еще раз.

Архив с разработкой Разработка.7z (147,77 Кб)

или в другом формате Заполнение полей шаблона.zip

Структура архива:
DEV - папка с разработкой.
REF - папка с записью справочника Шаблоны документов Word для примера.
Шаблон для примера (147742 v1).DOC - шаблон документа.

Константин Тарасов

Здравствуйте, Елизавета!

Оказывается можно и совсем не сложно вставлять в word информацию из табличной части ТКЭД.  Посмотрите как это делается у нас http://club.directum.ru/award/Sozdanie-soglasovanie-i-registracija-iskhodjashhikh-dokumentov.aspx и попробуйте модифицировать решение ещё одного Тарасова :-). Удачи.

Елизавета Гончарова

Добрый день, Константин.

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

 

Дмитрий Рудко

Коллеги ссылка не открывается. Можно обновить.

заранее спасибо. 

Елена Питомцева

Дмитрий, вот файл заново. Прикреплен файл: Заполнение полей шаблона.zip
 

Анна Добрук

При импорте пакета разработки,при заполнении справочника выходит сообщение "Class TSBReferenceRecordCardForm not found",такая же ошибка появляется при просмотре формы

Дмитрий Тарасов

Анна, у вас какая версия DIRECTUM?

Авторизуйтесь, чтобы написать комментарий