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

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.6 1С:Управление нашей фирмой 3.0 Россия Управленческий учет Платные (руб)

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

7200 руб.

02.08.2023    4170    14    1    

32

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

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

29400 руб.

29.06.2023    5994    14    5    

24

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

Расширение позволяет вывести в табличном документе факсимиле печати и подписей и/или вывести произвольную картинку из прикреплённых файлов организации для 1С УТ 11.5, КА 2.5, ERP 2.5, УНФ 3, Розница 3. Вывод факсимиле возможен в табличные документы УПД, УКД, Счёт-фактура, ТОРГ-12 и другие. Возможно настроить вывод для любых типовых макетов (Акт сверки, М-15, ТТН), для этого потребуется отредактировать макет и разместить на нём картинки с установленными именами. Редактирование осуществляется через типовой механизм в пользовательском интерфейсе.

3000 руб.

07.02.2023    6707    73    10    

30

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

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

2 стартмани

22.04.2024    5267    dimanich70    15    

22

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

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

01.03.2024    6826    dimanich70    9    

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