Обработать шаблон документа Word на сервере это проблема, с которой уверен сталкивались многие. Библиотека стандартных подсистем делает обработку шаблона на клиенте, а это исключает веб интерфейс и рабочие места, где нет MS Office. При попытке в Word открыть шаблон файла под серверным пользователем, возникают проблемы с доступом. Не отрицаю существования таких настроек на сервере, при которых это возможно, но в моем случае речь шла о массовом продукте.
Чтобы избавиться от всех прелестей этой прекрасной пары 1с+Word, решил отказаться от Word, хотя над первым может тоже стоило подумать?
Формат MS Word (docx) - это по сути zip архив с набором xml файлов (Office Open XML). Меняя определенные файлы xml, можно добиться заполнения своего шаблона.
Всю красоту парсинга XML, из 1с уверен, вы сможете или уже смогли оценить в своей работе.
О решении:
Результатом решения стал общий модуль осуществляющий всю работу по заполнению шаблона.
Общий модуль, для простоты скачивания поместил в модуль обработки.
Процедура ответственная за заполнение шаблона:
ОбработатьФайлDocx(ФайлШаблона,ПараметрыЗаполнения, ШаблоныКЗамене)
- ФайлШаблона - (тип: "Строка") Путь к файлу шаблону.
- ПараметрыЗаполнения - (тип: "Структура") содежащую символ начала, окончания шаблона.
- ШаблоныКЗамене - (тип: "Таблица значений") с параметрами, содержащую колонки: ИмяПараметраВWord - строка с именем шаблона который будет заменен. Результат - Содержит значение на которое будет заменен шаблон.
Колонка «Результат» из «ШаблоныКЗамене» может иметь тип: "Строка" или "Массив" (содержащий строки).
- Колонка «Результат» тип "Строка" - заменяет шаблон.
- Колонка «Результат» тип "Массив" (содержащий строки). - заменяет шаблон. перечисляет строки через ";", Но если он использован в word таблице, то добавляет строки (если значений в массиве больше чем одно) и расставляет значения.
Пример 1:
ШаблоныКЗамене имеет строки:
ИмяПараметраВWord = «массив 1» , Результат(массив) содержит два значения: ("Значение 1 массив 1"; "Значение 2 массив 1" ,
ИмяПараметраВWord = «массив 2», Результат(массив) содержит три значения:("Значение 1 массив 2";"Значение 2 массив 2";"Значение 3 массив 2") :
Пример шаблона в таблице word:
<массив 1> |
<массив 2> |
Результат:
Значение 1 массив 1 |
Значение 1 массив 2 |
Значение 2 массив 1 |
Значение 2 массив 2 |
Значение 3 массив 2 |
Пример 2:
ШаблоныКЗамене имеет строку:
ИмяПараметраВWord = «МассивЧленыКомиссии» ; Результат(массив) содержит значения: ("Прохоров Сергей Петрович"; "Петров Адрей Федорович"; "Смирнов Антон Викторович")
Шаблон:
Члены комиссии |
<МассивЧленыКомиссии> |
Результат:
Члены комиссии |
Прохоров Сергей Петрович |
||
Петров Адрей Федорович |
|||
Смирнов Антон Викторович |
Жду ваших комментариев и предложений.
Модуль можете использовать для коммерческого использования, однако прошу не удалять ссылку на мои реквизиты.