gifts2017

Печать шаблонов WORD из ЗУП

Опубликовал Александр Волков (kasperiks) в раздел Печать - Универсальные печатные формы

Печать шаблонов word формата (doc, docx) из "Зарплаты и управления персоналом".
Позволяет настраивать шаблоны и создавать свои, используя имеющиеся параметры

Данная обработка может использоваться как внешняя, так и с возможностью встраивания в дополнительные внешние печатные формы. Я её делал для второго варианта и встраивал как печатную форму для сотрудников организации.

данные контактной информации получаю запросом:

Запрос = Новый Запрос;
	Запрос.Текст = 
	"ВЫБРАТЬ
	|	ЕСТЬNULL("" Серия:"" + ПОДСТРОКА(ПаспортныеДанныеФизЛицСрезПоследних.ДокументСерия, 1, 4) + "" №:"" + ПОДСТРОКА(ПаспортныеДанныеФизЛицСрезПоследних.ДокументНомер, 1, 6), """") КАК Паспорт,
	|	ЕСТЬNULL(ВложенныйЗапрос.ОбъектСсылка.ИНН, """") КАК ИНН,
	|	ЕСТЬNULL(ВложенныйЗапрос.ОбъектСсылка.СтраховойНомерПФР, """") КАК СНИЛС,
	|	ВложенныйЗапрос.Представление КАК Адрес
	|ИЗ
	|	(ВЫБРАТЬ
	|		КонтактнаяИнформация.Объект.Ссылка КАК ОбъектСсылка,
	|		КонтактнаяИнформация.Представление КАК Представление
	|	ИЗ
	|		РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
	|	ГДЕ
	|		КонтактнаяИнформация.Объект.Ссылка = &Сотрудник
	|		И КонтактнаяИнформация.Тип = &Тип) КАК ВложенныйЗапрос
	|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПаспортныеДанныеФизЛиц.СрезПоследних(, ФизЛицо = &Сотрудник) КАК ПаспортныеДанныеФизЛицСрезПоследних
	|		ПО ВложенныйЗапрос.ОбъектСсылка = ПаспортныеДанныеФизЛицСрезПоследних.ФизЛицо";
	Если Объект = "Телефон" Тогда
		Запрос.УстановитьПараметр("Тип", Перечисления.ТипыКонтактнойИнформации.Телефон);
		Запрос.УстановитьПараметр("Сотрудник", СсылкаНаОбъект.Физлицо);
		РезультатЗапроса = Запрос.Выполнить().Выбрать();
		Пока РезультатЗапроса.Следующий() Цикл
			Телефон = РезультатЗапроса.Адрес;
		КонецЦикла;   
		Возврат Телефон;
	Иначе
		Запрос.УстановитьПараметр("Тип", Перечисления.ТипыКонтактнойИнформации.Адрес);
		Запрос.УстановитьПараметр("Сотрудник", СсылкаНаОбъект.Физлицо);
		РезультатЗапроса = Запрос.Выполнить();
		
		ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
		//МасивИнфа = Новый Массив();
		Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
			Адрес =  ВыборкаДетальныеЗаписи.Адрес;
			Паспорт = ВыборкаДетальныеЗаписи.Паспорт;
			Снилс = ВыборкаДетальныеЗаписи.СНИЛС;
			ИНН = ВыборкаДетальныеЗаписи.ИНН;
		КонецЦикла;
		Если Объект = "Адрес" Тогда
			Возврат Адрес;
		ИначеЕсли Объект = "Паспорт" Тогда
			Возврат Паспорт;
		ИначеЕсли Объект = "Снилс" Тогда
			Возврат Снилс;
		ИначеЕсли Объект = "ИНН" Тогда
			Возврат ИНН;
		КонецЕсли; 
	КонецЕсли;

Склоняю фамилии стандартной обработкой:

УниверсальныеМеханизмы.Просклонять(глЗначениеПеременной("глКомпонентаСклоненияФИО"),СсылкаНаОбъект.Наименование, 2, СсылкаНаОбъект.Физлицо.Пол, ТекФИО);
	Возврат ТекФИО;


Ну собственно самое интересное: организован парсер word документа в глоб переменных задан символ по которому определяем что данное слово есть параметр, для себя взял фигурные скобки

Скачать файлы

Наименование Файл Версия Размер
Обработка и документ с параметрами 18
.zip 40,48Kb
08.03.14
18
.zip 40,48Kb Скачать

См. также

Вознаграждение за ответ
Сумма: 0 $m
Добавили:
Евгений Дегтярев (DEG156) (1.00 $m)
Подписаться Добавить вознаграждение
Комментарии
1. Александр Крынецкий (echo77) 12.03.14 08:23
Обычно не файл парсят, а вставляют поле или закладки :-/
Почему выбран именно такой подход - парсить файл?
2. Вячеслав Сергеев (SergArmy) 12.03.14 08:29
(1) echo77, Наверное из-за простоты создания новых шаблонов, использую такой же метод, только для формата RTF, что позволяет работать и без установленного MS Word.
3. Александр Волков (kasperiks) 16.03.14 16:56
Все правильно, это сделано для удобства создания новых шаблонов.
Параметр в тексте word документа править проще чем в коде обращаться.
4. Евгений Дегтярев (DEG156) 28.03.14 11:08
Обнаружил недоработку - подставляется только один параметр в строке word.
Нужно изменить цикл !

>Пока НачПоз > 0 Цикл
>............
>ТекТекст = Д.Paragraphs(Пар).Range.Text;
>НачПоз = Найти(ТекТекст,НачКоманды);
>КонецЦикла;
5. Александр Волков (kasperiks) 30.03.14 19:53
(4) DEG156,
Спасибо что указали недочет, в след раз буду над этим работать когда снова понадобится обратиться к шаблонам)
6. Anton Chikov (Fr1eNd_Tver) 31.03.14 10:41
А чем отличается от методики используемой в БСП,
использовал несколько раз все устраивает.
7. Just (Just) 20.08.14 23:11
(6) Fr1eNd_Tver,
А что это? БСП? нельзя подробнее?