Печать шаблонов word формата (doc, docx) из "Зарплаты и управления персоналом".
Позволяет настраивать шаблоны и создавать свои, используя имеющиеся параметры
Позволяет настраивать шаблоны и создавать свои, используя имеющиеся параметры
Данная обработка может использоваться как внешняя, так и с возможностью встраивания в дополнительные внешние печатные формы. Я её делал для второго варианта и встраивал как печатную форму для сотрудников организации.
данные контактной информации получаю запросом:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ЕСТЬNULL("" Серия:"" + ПОДСТРОКА(ПаспортныеДанныеФизЛицСрезПоследних.ДокументСерия, 1, 4) + "" №:"" + ПОДСТРОКА(ПаспортныеДанныеФизЛицСрезПоследних.ДокументНомер, 1, 6), """") КАК Паспорт,
| ЕСТЬNULL(ВложенныйЗапрос.ОбъектСсылка.ИНН, """") КАК ИНН,
| ЕСТЬNULL(ВложенныйЗапрос.ОбъектСсылка.СтраховойНомерПФР, """") КАК СНИЛС,
| ВложенныйЗапрос.Представление КАК Адрес
|ИЗ
| (ВЫБРАТЬ
| КонтактнаяИнформация.Объект.Ссылка КАК ОбъектСсылка,
| КонтактнаяИнформация.Представление КАК Представление
| ИЗ
| РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
| ГДЕ
| КонтактнаяИнформация.Объект.Ссылка = &Сотрудник
| И КонтактнаяИнформация.Тип = &Тип) КАК ВложенныйЗапрос
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПаспортныеДанныеФизЛиц.СрезПоследних(, ФизЛицо = &Сотрудник) КАК ПаспортныеДанныеФизЛицСрезПоследних
| ПО ВложенныйЗапрос.ОбъектСсылка = ПаспортныеДанныеФизЛицСрезПоследних.ФизЛицо";
Если Объект = "Телефон" Тогда
Запрос.УстановитьПараметр("Тип", Перечисления.ТипыКонтактнойИнформации.Телефон);
Запрос.УстановитьПараметр("Сотрудник", СсылкаНаОбъект.Физлицо);
РезультатЗапроса = Запрос.Выполнить().Выбрать();
Пока РезультатЗапроса.Следующий() Цикл
Телефон = РезультатЗапроса.Адрес;
КонецЦикла;
Возврат Телефон;
Иначе
Запрос.УстановитьПараметр("Тип", Перечисления.ТипыКонтактнойИнформации.Адрес);
Запрос.УстановитьПараметр("Сотрудник", СсылкаНаОбъект.Физлицо);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
//МасивИнфа = Новый Массив();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Адрес = ВыборкаДетальныеЗаписи.Адрес;
Паспорт = ВыборкаДетальныеЗаписи.Паспорт;
Снилс = ВыборкаДетальныеЗаписи.СНИЛС;
ИНН = ВыборкаДетальныеЗаписи.ИНН;
КонецЦикла;
Если Объект = "Адрес" Тогда
Возврат Адрес;
ИначеЕсли Объект = "Паспорт" Тогда
Возврат Паспорт;
ИначеЕсли Объект = "Снилс" Тогда
Возврат Снилс;
ИначеЕсли Объект = "ИНН" Тогда
Возврат ИНН;
КонецЕсли;
КонецЕсли;
Склоняю фамилии стандартной обработкой:
УниверсальныеМеханизмы.Просклонять(глЗначениеПеременной("глКомпонентаСклоненияФИО"),СсылкаНаОбъект.Наименование, 2, СсылкаНаОбъект.Физлицо.Пол, ТекФИО);
Возврат ТекФИО;
Ну собственно самое интересное: организован парсер word документа в глоб переменных задан символ по которому определяем что данное слово есть параметр, для себя взял фигурные скобки
Обычно не файл парсят, а вставляют поле или закладки :-/
Почему выбран именно такой подход — парсить файл?
(1) echo77, Наверное из-за простоты создания новых шаблонов, использую такой же метод, только для формата RTF, что позволяет работать и без установленного MS Word.
Все правильно, это сделано для удобства создания новых шаблонов.
Параметр в тексте word документа править проще чем в коде обращаться.
Обнаружил недоработку — подставляется только один параметр в строке word.
Нужно изменить цикл !
>Пока НачПоз > 0 Цикл
>…………
>ТекТекст = Д.Paragraphs(Пар).Range.Text;
>НачПоз = Найти(ТекТекст,НачКоманды);
>КонецЦикла;
(4) DEG156,
Спасибо что указали недочет, в след раз буду над этим работать когда снова понадобится обратиться к шаблонам)
А чем отличается от методики используемой в БСП,
использовал несколько раз все устраивает.
(6) Fr1eNd_Tver,
А что это? БСП? нельзя подробнее?