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



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

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

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

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

ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
//МасивИнфа = Новый Массив();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Адрес =  ВыборкаДетальныеЗаписи.Адрес;
Паспорт = ВыборкаДетальныеЗаписи.Паспорт;
Снилс = ВыборкаДетальныеЗаписи.СНИЛС;
ИНН = ВыборкаДетальныеЗаписи.ИНН;
КонецЦикла;
Если Объект = "Адрес" Тогда
Возврат Адрес;
ИначеЕсли Объект = "Паспорт" Тогда
Возврат Паспорт;
ИначеЕсли Объект = "Снилс" Тогда
Возврат Снилс;
ИначеЕсли Объект = "ИНН" Тогда
Возврат ИНН;
КонецЕсли;
КонецЕсли;

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

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


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

7 Comments

  1. echo77

    Обычно не файл парсят, а вставляют поле или закладки :-/

    Почему выбран именно такой подход — парсить файл?

    Reply
  2. SergArmy

    (1) echo77, Наверное из-за простоты создания новых шаблонов, использую такой же метод, только для формата RTF, что позволяет работать и без установленного MS Word.

    Reply
  3. kasperiks

    Все правильно, это сделано для удобства создания новых шаблонов.

    Параметр в тексте word документа править проще чем в коде обращаться.

    Reply
  4. DEG156

    Обнаружил недоработку — подставляется только один параметр в строке word.

    Нужно изменить цикл !

    >Пока НачПоз > 0 Цикл

    >…………

    >ТекТекст = Д.Paragraphs(Пар).Range.Text;

    >НачПоз = Найти(ТекТекст,НачКоманды);

    >КонецЦикла;

    Reply
  5. kasperiks

    (4) DEG156,

    Спасибо что указали недочет, в след раз буду над этим работать когда снова понадобится обратиться к шаблонам)

    Reply
  6. Fr1eNd_Tver

    А чем отличается от методики используемой в БСП,

    использовал несколько раз все устраивает.

    Reply
  7. Just

    (6) Fr1eNd_Tver,

    А что это? БСП? нельзя подробнее?

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *