Предлагаю вашему вниманию внешнюю печатную форму трудового договора, формируемого из произвольно настраиваемого шаблона на основе файла Word. Вы сможете скачать собственно файл внешней обработки и пример шаблона договора.
Шаблон из себя представляет обыкновенный документ Word с привычными уже параметрическими вставками вида: [НаименованиеПараметраПодстановки]
Добавляете внешнюю обработку в систему "Дополнительные отчеты и обработки". Подсистема "Печать" добавит у документа "ПриемНаРаботу" дополнительную печатную форму "Трудовой договор (Word Шаблон)", все стандартно.
Вызывая эту печатную форму у конкретного документа, откроется следующее окно
Добавление строки, после ввода наименования шаблона предложит выбрать собственно файл шаблона, после загрузки которого в поле с "Состояние" пропишется "Шаблон загружен" (в противном случае "Загрузите шаблон"). Собственно, после того как шаблон загружен, двойной клик по состоянию "Шаблон загружен" вызывает процедуру формирования файла трудового договора.
Можно воспользоваться так же кнопками: - открыть загруженный шаблон как он есть, - загрузить в текущую строку таблицы шаблонов новый шаблон (перезалить исправленную версию, например), - сохранить текущий шаблон в файл, - сформировать трудовой договор на основе текущего шаблона.
Галочка "Выделять для проверки" по умолчанию стоит - действие ее таково, что те места сформированного документа, в которых параметры шаблона были заменены конкретными значениями будут выделены желтым цветом. Сделано для удобства, чтобы кадровик смог бегло просмотреть критичные места в договоре, а потом распечатать "на чистовую" сняв галочку проверки.
После формирования документа, производится его проверка на оставшиеся в тексте конструкции [ПараметрПодстановки] - они выделяются красным цветом
и на стороне 1С появляются сообщения
В этом примере, как-то так случилось, что в шаблоне документа есть параметр [ТрудовойДоговорНомер], но в списке параметров для подстановки в обработке такой параметр отсутствует.
Так же обрабатывается ситуация, когда параметр для подстановки есть и в шаблоне, и в обработке, но само значение, которое должно быть подставлено пустое (например не до конца заполнен сам документ ПриемНаРаботу, и некоторые параметры подстановки оказались пустыми).
Теперь собственно про список параметров подстановки. Параметры и уже вычисленные значения можно посмотреть раскрыв свертываемую группу "Больше информации" (наверно как-то по другому потом ее назову).
слева наименования параметров, которые в тексте word шаблона вы при его подготовке обрамляете в квадратные скобочки: [ТрудовойДоговорНомер].
За формирования списка этих параметров отвечает функция в модуле формы: ДанныеДляПечатиТрудовогоДоговора. Вы можете ее переписать с нуля и создать свой список параметров. Я же ее честно украл в типовой конфигурации 1С ЗУП 3.1 и добавил пару параметров.
ВНИМАНИЕ. Сохранение списка шаблонов происходит при закрытии окна обработки (см. вопрос ниже).
При первом использовании, когда список шаблонов пользователя пуст, подтягивается из макета пример Word шаблона, чтобы можно было протестировать.
P.S.
Объявляется благодарность автору статьи //infostart.ru/public/675307/ - это волшебник, у которого я просто стырил (с его разрешения, о чем указано в тексте его статьи) механизм работы с .docx на сервере. Вообще предыстория такова, что возникла задача печати кадровых документов, решаю по максимуму переложить создание шаблонов договоров на кадровика, по привычке открываю COM объект Word, радостно и быстро корректирую word документ с помощью вызовов VBA, потом замечаю - в веб-клиенте многие функции и процедуры не работают, заморачиваюсь, чтобы вызовы выбора файла и прочего работали на веб-клиенте и опа - главное то я упустил - в веб-клиенте с COM Объектами не поработаешь. И вот во время поисков решения натыкаюсь на этого волшебника. Пришлось понять как все это работает, и подпилить (изменения в использованном коде помечены // ТрудовойДоговор_WordШаблон) добавление выделения цветом текста, попутно прикоснувшись к тому что же такое xml схема .docx документа ))
В итоге, в обработке сделано так, что если отрытие COM Объекта Word возможно, то все делается через него, если нет - то волшебным образом процедурами и функциями на сервере ковыряемся в формате .docx и получаем тот же самый результат. Через COM Объект удобнее то, что, например, когда открывается сформированный документ, то это новый еще не сохраненный документ и вы можете распечатать и не сохранить его на диск, тогда как через парсинг XML файлов .docx формата обязательно результат сохраняется на диск, а уж потом открывается (если конечно Word установлен), с помощью ЗапуститьПриложение (которое и на веб клиенте работает).
В скриншоте этого нет - добавлена галочка "Формировать на сервере в любом случае (парсинг .docx)" - которая прогоняет подстановку значений параметров шаблона не через COM Объект, а как описано выше, через парсинг *.docx формата, даже если открытие COM Объекта возможно.
P.P.S.
Сохранение списка шаблонов (со сути сохранение настроек обработки) у меня происходит в элементе справочника "ДополнительныеОтчетыИОбработки" (в подсистеме дополнительных отчетов и обработок эта возможность предусмотрена, см. код), а значит нужно обладать правами на добавление и изменение этого справочника. Это наверно не очень хорошо. Поэтому подскажите где почитать - как грамотно организовать сохранение шаблонов у пользователя (явно это будет какое-то ХранилищеНастроек) - нужно хранить соответствие- где ключ - наименование шаблона, а значение - структура, в которой одно из свойств это двоичные данные из word файла шаблона. Может где написано про это простым и понятным языком и с конкретными примерами. Заранее спасибо.
P.P.P.S.
Если на Win компе не установлен Word, то можно сопоставить файл .docx с WordPad, который входит в стандартные приложения windows, и хоть мы обрабатываем .docx парсингом, процедура ЗапуститьПриложение откроет .docx файл в WordPad-е и даже сработает выделение текста цветом. Не знаю какие ограничения есть в этом варианте, но с простыми шаблонами точно все на ура.
26-05-2019 Добавлена внешняя печатная форма печати дополнительного соглашения для документа "КадровыйПеревод" !!!!
Все аналогично, небольшая адаптация для печати дополнительных соглашений в очень ограниченных случаях - никакой универсальности и т.д.
По сути, она создана для того, чтобы облегчить создания печатных ДС для случаев, когда изменен оклад, изменены или должность или подразделение, изменены и оклад и должность или подразделение. Добавлен лишь параметр [ДСДата] (дата дополнительного соглашения, с которого начинаются кадровые изменения), параметры связанные с окладом, подразделением и должностью берутся конечно же из кадрового перевода.
"Внутри" обработки пример шаблона, когда изменен только оклад.
28-06-2019 ИНСТРУКЦИЯ, ЧТО ДЕЛАТЬ, ЕСЛИ ВЫ ОБНОВИЛИ ЗУП НА РЕЛИЗ 3.1.10. (И ФОРМЫ ПЕРЕСТАЛИ РАБОТАТЬ)
Нужно, в модуле формы обработки скорректировать код процедур ЗагрузитьФайлСДискаВХранилищеНаКлиенте и ЗагрузитьИзФайлаПослеВыбораФайла следующим образом (просто удалите эти процедуры и замените на то что видите ниже):
&НаКлиенте
Процедура ЗагрузитьФайлСДискаВХранилищеНаКлиенте()
ОписаниеОповещения = Новый ОписаниеОповещения("ЗагрузитьИзФайлаПослеВыбораФайла", ЭтотОбъект);
ПараметрыЗагрузки = ФайловаяСистемаКлиент.ПараметрыЗагрузкиФайла();
ПараметрыЗагрузки.Диалог.Фильтр = НСтр("ru = '(*.docx) |*.docx'");
ПараметрыЗагрузки.ИдентификаторФормы = УникальныйИдентификатор;
ФайловаяСистемаКлиент.ЗагрузитьФайл(ОписаниеОповещения, ПараметрыЗагрузки);
КонецПроцедуры
&НаКлиенте
Процедура ЗагрузитьИзФайлаПослеВыбораФайла(ПомещенныеФайлы, ПустойПараметр) Экспорт
Если ПомещенныеФайлы = Неопределено Или ПомещенныеФайлы.Количество() = 0 Тогда
Возврат;
КонецЕсли;
ОчиститьСообщения();
ЭтаФорма.Элементы.WordШаблоны.ТекущиеДанные.АдресВоВременномХранилище = ПомещенныеФайлы.Хранение;
Если ЗначениеЗаполнено(ЭтаФорма.Элементы.WordШаблоны.ТекущиеДанные.АдресВоВременномХранилище) Тогда
ЭтаФорма.Элементы.WordШаблоны.ТекущиеДанные.Состояние = "Шаблон загружен";
Иначе
ЭтаФорма.Элементы.WordШаблоны.ТекущиеДанные.Состояние = "Загрузите шаблон";
КонецЕсли;
КонецПроцедуры
02-09-2022 В трудовом договоре добавлена возможность воспринимать дополнительные сведения документа "ПриемНаРаботу", если идентификатор для формул начинается на "WordШаблон_", как переменные шаблона.
В качестве типа дополнительного сведения вы чаще всего будете выбирать "строка", но можно выбрать и дополнительное значение:
05-09-2022 В трудовом договоре добавлена возможность получать параметры заполнения шаблона из запроса к документу "Прием на работу".
В запросе должен быть единственный параметр "&ДокументСсылка", а из таблицы полученного результата берется первая строка, затем циклом проходим по полям результата запроса, заполняя таблицу параметров word шаблона. Для колонок типа "Дата" предусмотрено форматирование (до трех вариантов, см. скриншот ниже).
Так же из скриншота видно, что визуально упорядочены по закладкам источники данных для печати (из кода обработки, из дополнительных сведений, из запроса).