Макеты печатных форм в руках пользователей (обычные формы)

01.11.18

Задачи пользователя - Адаптация типовых решений

Как частично избавить себя от низкопрофильного труда по правке печатных форм. Для конфигураций на основе БСП, конечно, не актуально, но для нетиповых вполне. Ну и как в помощь начинающим. У меня реализовано для печати различных "согласие на обработку персональных данных","согласие на медицинские вмешательства", различных анкет. Удобно для печатных форм, которые часто по тем или иным причинам меняются. Чтоб не дергать программиста, пусть пользователи рисуют макеты самостоятельно.

Опишу, как реализовано у меня.

1. Создаем справочник примерно следующего содержания:

реквизит ХранилищеШаблон имеет тип ХранилищеЗначений, в него будем сохранять макет, созданный пользователями.

2. Форма справочника

на форме я добавил две странички и на первой разместил элемент "ТабличныйДокумент", на второй вывели реквизиты по настройке печати.

3. Модуль формы справочника:

процедура при открытии элемента справочника будет получать из хранилища значений макет табличного документа и вставлять в элемент формы, а при записи сохранять макет  в реквизит элемента справочника.


Процедура ПередЗаписью(Отказ)
	ТабДокумент=НОвый ТабличныйДокумент;
	ТабДокумент.Вывести(ЭтаФОрма.ЭлементыФормы.тхтШаблон);
	ХранилищеШаблон=НОвый ХранилищеЗначения(ТабДокумент);
	
КонецПроцедуры

Процедура ПриОткрытии()
	Попытка
	ТабДок=ХранилищеШаблон.Получить();
	Если Не ЭтоНовый() Тогда
		ЭтаФорма.ЭлементыФормы.тхтШаблон.Вывести(ТабДок);
	ИНаче
		ПолеСлева=5;
		ПолеСправа=5;
		ПолеСверху=5;
		ПолеСнизу=5;
		АвтоМасштаб=Истина;   
		Ориентация=Перечисления.ОриентацияСтраницы.Портрет;
	КонецЕсли;
	ИСключение
	сообщить(ОписаниеОшибки());
	КонецПопытки;
КонецПроцедуры

Процедура ОбновлениеОтображения()
	Автомасштаб=(МасштабПечати=0);
КонецПроцедуры

4. Создаем документ

Для удобства указываем ввод на основании, у меня вводится на основании справочника "пациенты"

В табличной части документа добавим реквизит с типом справочника макета печатных форм

 

5. Модуль формы документа

По кнопке печать происходит перебор табличной части документа, для каждого элемента табличной части создается свой табличный документ, в который выводится макет с замененными параметрами. Заменяемые параметры в макете имеют вид [ИмяПараметра].


Процедура ОсновныеДействияФормыПечать(Кнопка)
	ДЛя каждого Стр Из СпискиФорм Цикл  						//Переберем ТЧ документа
		ТабДокумент=Новый ТабличныйДОкумент;
		Макет=Стр.СсылкаНаМакет.ХранилищеШаблон.Получить();   	//получим макет каждой строки
		ПреобразоватьПараметры(Макет);							//заменим параметры реальными данными	
		ТабДокумент.Вывести(Макет);
		ПрименитьНастройкиПечати(Стр.СсылкаНаМакет,ТабДокумент);//настройка печати
		ТабДокумент.Показать();
	КонецЦикла;
КонецПроцедуры
Процедура ПрименитьНастройкиПечати(СсылкаСпр,ТабДокумент)
		ТаБДокумент.МасштабПечати=СсылкаСпр.МасштабПечати;
		ТаБДокумент.АвтоМасштаб=СсылкаСпр.АвтоМасштаб;
		ТаБДокумент.ПолеСверху=СсылкаСпр.ПолеСверху;
		ТаБДокумент.ПолеСлева=СсылкаСпр.ПолеСлева;
		ТаБДокумент.ПолеСнизу=СсылкаСпр.ПолеСнизу;
		ТаБДокумент.ПолеСправа=СсылкаСпр.ПолеСправа;
		ТаБДокумент.ОриентацияСтраницы=?(СсылкаСпр.Ориентация=Перечисления.ОриентацияСтраницы.Ландшавт,ОриентацияСтраницы.Ландшафт,ОриентацияСтраницы.Портрет);
КонецПроцедуры

Процедура ПреобразоватьПараметры(Макет)
	Соответствия=ПодготовимСоответствие(); 						//Заполним соответствие с параметрами замены
		ДЛя каждого СтрСоот Из Соответствия ЦИкл
			ЯчейкаТекст=Макет.НАйтиТекст(СтрСоот.Ключ);
			Если ЯчейкаТекст<>Неопределено ТОгда 
				ЯчейкаТекст.Текст=СтрЗАменить(ЯчейкаТекст.Текст,СтрСоот.Ключ,СтрСоот.Значение);
			КонецЕсли;
		КонецЦИкла;
КонецПроцедуры
Функция ПодготовимСоответствие()
		Соответствие=НОвый Соответствие();
		Соответствие.Вставить("[ФИОПолностью]",""+Пациент.Фамилия+" "+Пациент.Имя+" "+Пациент.Отчество);
		Соответствие.Вставить("[ДатаРождения]",ФОРмат(ПАциент.ДатаРождения,"ДФ=dd.MM.yyyy"));
		СтруктураПаспорта=ПолучимПАспорт();
		Соответствие.Вставить("[ПаспортНомер]",СтруктураПаспорта.НомерПаспорт);
		Соответствие.Вставить("[ПаспортСерия]",СтруктураПаспорта.СерияПаспорт);
		Соответствие.Вставить("[ПаспортКемВыдан]",СтруктураПаспорта.КемВыданПаспорт);
		Соответствие.Вставить("[ПаспортДатаВыдачи]",СтруктураПаспорта.ДатаВыдачиПаспорт);
		Соответствие.Вставить("[ПаспортПредставление]",СтруктураПаспорта.ПредставлениеПаспорт);
		Соответствие.Вставить("[Адрес]",киПолучитьПредставлениеКИ(Пациент,Справочники.ВидыКонтактнойИнформации.АдресФактический,ложь) );
		ФИОКратко=СтрЗаменить(Соответствие.Получить("[ФИОПолностью]")," ",Символы.ПС);
		Если СтрЧислоСтрок(ФИОКратко)>2 ТОгда
			ФиоКратко=СтрПолучитьСтроку(ФИоКРатко,1)+" "+ЛЕв(СтрПолучитьСтроку(ФИоКРатко,2),1)+"."+ЛЕв(СтрПолучитьСтроку(ФИоКРатко,3),1)+"."
		КонецЕсли;
		Соответствие.Вставить("[ФИОКратко]",ФИОКРатко );
		
		ВОзврат Соответствие;
	КонецФункции
	
	ФУнкция ПолучимПАспорт()
		Структура=Новый СТруктура;
		Структура.Вставить("СерияПаспорт","");
		Структура.Вставить("НомерПаспорт","");
		Структура.Вставить("КемВыданПаспорт","");
		Структура.Вставить("ДатаВыдачиПаспорт","");
		Структура.Вставить("ПредставлениеПаспорт","");
		ЗАпрос=НОвый Запрос("ВЫБРАТЬ ПЕРВЫЕ 1
		                    |	ПодтверждающиеДокументы.Серия,
		                    |	ПодтверждающиеДокументы.Номер,
		                    |	ПодтверждающиеДокументы.ДатаВыдачи,
		                    |	ПодтверждающиеДокументы.КемВыдан,
		                    |	ПодтверждающиеДокументы.Представление
		                    |ИЗ
		                    |	Справочник.ПодтверждающиеДокументы КАК ПодтверждающиеДокументы
		                    |ГДЕ
		                    |	ПодтверждающиеДокументы.Владелец = &Владелец
		                    |	И ПодтверждающиеДокументы.ВидПодтверждающегоДокумента = ЗНАЧЕНИЕ(Справочник.ВидыПОдтверждающихДокументов.Паспорт)
		                    |	И ПодтверждающиеДокументы.Текущий
		                    |	И НЕ ПодтверждающиеДокументы.ПометкаУдаления");
		Запрос.УстановитьПараметр("Владелец",Пациент);
		Результат=Запрос.Выполнить().Выбрать();
		Пока РЕзультат.Следующий() ЦИкл
			Структура.Вставить("СерияПаспорт",Результат.Серия);
			Структура.Вставить("НомерПаспорт",Результат.Номер);
			Структура.Вставить("КемВыданПаспорт",Результат.КемВыдан);
			Структура.Вставить("ДатаВыдачиПаспорт",Формат(Результат.ДатаВыдачи,"ДФ=dd.MM.yyyy"));
			Структура.Вставить("ПредставлениеПаспорт",Результат.Представление);
		КонецЦИкла;
	Возврат Структура;		
КОнецФункции

6. Как это выглядит у пользователя:

 

шаблон макет печатная форма

См. также

Адаптация типовых решений Платформа 1С v8.3 1С:Документооборот Россия Платные (руб)

Расширение конфигурации для «1С:Документооборот КОРП», редакция 3.0. позволяет: 1.использовать произвольные табличные части в качестве дополнительных реквизитов к документу; 2 использовать произвольные табличные части в шаблонах в формате docx для автоматического заполнения таблиц.

29400 руб.

29.06.2023    5696    14    5    

24

Логистика, склад и ТМЦ Адаптация типовых решений Пользователь Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 1С:Управление нашей фирмой 3.0 Россия Управленческий учет Платные (руб)

Чтобы не допустить путаницы с обещаниями клиентам и для четкого контроля исполнения заказов мы используем резервирование товаров. Мы доработали УНФ, чтобы она автоматически отменяла старые резервы и не мешала эффективно продавать.

7200 руб.

02.08.2023    3943    12    0    

30

Адаптация типовых решений Программист Пользователь Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Абонемент ($m)

Каждый из нас сталкивается с ситуацией, когда какой-нибудь менеджер показывает свой Excel и рассказывает, как он что-то из 1С копирует в него, снабжает пояснениями, выделяет цветом и т.д. и т.п. Заканчивается все просьбой сделать вот чтобы также было в 1С. И оказывается такой человек (почти с гарантией) либо лучшим продажником, либо каким-то важным, за все отвечающим, - на ком все держится.

2 стартмани

22.04.2024    5122    dimanich70    15    

21

БСП (Библиотека стандартных подсистем) Адаптация типовых решений Программист Платформа 1С v8.3 1С:ERP Управление предприятием 2 Бесплатно (free)

Понадобилось в подменю "Создать на основании" добавить свою команду, которая открывает обработку. В процессе доработок появилась проблема двух подменю "Создать на основании". В статье о том, как решились проблемы.

01.03.2024    5653    dimanich70    9    

18
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Stim213 416 07.11.18 09:56 Сейчас в теме
Зачем так мучать пользователя в табличном документе? Научите его создавать поля в Ворде и заполняйте ворд при печати
ybatiaev; +1 Ответить
2. fromlion 180 07.11.18 10:11 Сейчас в теме
(1) если брать нашу ситуацию, то работаем в терминальном режиме и ставить офисы на сервер нельзя. Как минимум будут затраты на приобретение лицензий.
Dmitri93; jONES1979; +2 Ответить
3. jONES1979 09.11.18 08:51 Сейчас в теме
Вот спасибо, всё расписано! Мне скоро пригодится!
Оставьте свое сообщение