Довольно часто возникает вопрос «Можно ли добавить в шаблон 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
Создаем шаблон электронного документа «Шаблон для примера».
Из скриншота видно, что для интеграции табличной части в заголовки таблицы Word добавляются Текстовые поля, наименование закладок которых должно соответствовать значению «Имя поля» в табличной части справочника Шаблоны документов Word
В Типе карточек электронных документов «Документы для шаблонов» добавляем действие «Заполнить поля».
Создаем запись справочника Шаблоны документов Word для созданного шаблона и заполняем все необходимые поля.
По кнопке Просмотр в созданной записи справочника Шаблоны документов 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?
Авторизуйтесь, чтобы написать комментарий