Альтернатива внешним печатным формам. ЗУП 3.1

Публикация № 992920

Печать - Печатные формы документов

21
Как в ЗУП 3.1.8 отказаться от внешних печатных форм и расширением увеличить количество полей, доступных при редактировании макетов, для изменения печатных форм Т1, Т5, Т8 и аналогичные пользователями.

В ЗУП 3.1.8  КОРП реализовали возможность вносить определённые изменения в макеты печатных форм и отчётов самим пользователем, без изменения конфигурации. В ПРОФ версии этот механизм остался куцым. Т.е. если вам надо поменять название колонки, добавить надпись - это пожалуйста. А если вам надо вывести дополнительные какие то параметры - тут все немного сложнее.

Так как у меня проект по переходу с переписанной 2.5 на 3.1 то печатные формы - это как раз то, чем мне совсем не хочется заниматься - и без них полно проблем.

Первым делом я заглянула что есть на самом инфостарте: для  3.1.8 подходила только публикация отсюда //printforms.ru/public/783619/ , но есть жирное "НО" - она не редактирует саму СКД, т.е. чтобы подлезть к составу выбранных полей, добавить ещё несколько вычисляемых полей или что угодно другое - необходимо либо программно допиливать, либо ещё как то извращаться, при этом рискую попасть впросак с пользовательскими настройками отчета. Было решено искать обходные пути. 

После осмотра списка выбранных полей в СКД обратила внимание, что если воспользоваться теми полями, которых нет на форме - они действительно выводятся, например у нас принято использовать полное наименование организации в Т-1. 

   

 

Эта возможность уже решает часть задач, но мне надо гораздо больше. Дело в том, что у нас привыкли использовать полное наименование подразделения, где родители подразделения указаны в родительном падеже, например:

 

Для этого мне потребовалось добавить расширение с назначением "Исправление". Теперь отважно прошествуем в общий модуль ЗарплатаКадрыОтчеты и добавив его в расширение заменяем функцию ПодразделениеНаПечать. Так как у нас действительно везде в документообороте используется в качестве полного наименования это представление подразделения - я решила воспользоваться именно этим вариантом. Возможно в дальнейшем я об этом пожалею, но пока все устраивает. Получилось вот так:

&Вместо("ПодразделениеНаПечать")
Функция Исправ_ПодразделениеНаПечать(Знач Подразделение) Экспорт
	
	Если ЗначениеЗаполнено(Подразделение) Тогда
		
		НастройкиПечатныхФорм = ЗарплатаКадры.НастройкиПечатныхФорм();
		Если НастройкиПечатныхФорм.ВыводитьПолнуюИерархиюПодразделений Тогда
			//Возврат Подразделение.ПолноеНаименование();
			Возврат ПолучитьПолноеНаименованиеПодразделения(Подразделение);
		Иначе
			Возврат Подразделение;
		КонецЕсли;
		
	Иначе
		Возврат "";
	КонецЕсли;
	
КонецФункции

Функция ПолучитьПолноеНаименованиеПодразделения(Подразделение)
	
	ТПодразделение = Подразделение.Родитель;
	ПодразделениеТекстом = Подразделение.Наименование;
	Пока не (ТПодразделение.Родитель = Справочники.ПодразделенияОрганизаций.ПустаяСсылка()) Цикл
		ПодразделениеТекстом = ПодразделениеТекстом + " "
					+ СклонениеПредставленийОбъектов.ПросклонятьПредставление(ТПодразделение.Наименование, 2, ТПодразделение.Ссылка);
		ТПодразделение = ТПодразделение.Родитель;
	КонецЦикла;
							
	Возврат ПодразделениеТекстом;						
	
КонецФункции

Мне удобненько: видно, что было раньше и мне все равно какие ещё способы изобретет 1С для формирования краткого и полного наименования - для меня этот способ самый верный.

Следующая проблема - расширить список выбранных полей. Тут встал вопрос, а не получится ли, что у меня у пользователей будут какие-то дополнительные пользовательские настройки. Или вдруг этот отчет вызывается ещё из десятка мест.. или ещё нечто неведомое.. Значит саму СКД трогать даже программно надо аккуратно. Но нам надо возможность добавлять поля и заполнять их чем нашей душе угодно. Лезу проверять процедуры печати отчета, в надежде, что есть возможность что-то подпихнуть перед формированием в СКД.

Если ЗАО 1С выпилила механизм доступных полей с пользовательского интерфейса, то уж со стороны кода он обязательно где-нибудь торчит, например прямо в процедуре Сформировать посреди модуля менеджера отчета:

Процедура Сформировать(ДокументРезультат, РезультатКомпоновки, ОбъектыПечати = Неопределено) Экспорт
	
	КадровыйУчет.ВывестиНаПечатьТ1(
		ДокументРезультат,
		РезультатКомпоновки.ДанныеОтчета.Строки,
		РезультатКомпоновки.МакетПечатнойФормы,
		РезультатКомпоновки.ИдентификаторыМакета,
		ОбъектыПечати);
	
КонецПроцедуры

Вот прямо здесь РезультатКомпоновки.ДанныеОтчета.Строки - это и есть наше дерево строк результата. Т.е здесь уже все данные сформированы и там именно то, что в дальнейшем будет выводиться к нам на печать. Значит, не грех добавить ещё пару колонок. Захватываем модуль менеджера отчета и перед Сформировать добавляем свои несколько строк кода:

&Перед("Сформировать")
Процедура Испр_Сформировать(ДокументРезультат, РезультатКомпоновки, ОбъектыПечати)
	Для каждого ТДокументы из РезультатКомпоновки.ДанныеОтчета.Строки Цикл
		Если ЗначениеЗаполнено(ТДокументы.СсылкаНаОбъект) тогда
			Если РезультатКомпоновки.ДанныеОтчета.Колонки.Найти("СсылкаНаОбъектДолжностьРуководителяНаПечать") = неопределено тогда
				МассивТипов = Новый Массив;
				МассивТипов.Добавить(Тип("Строка"));
				КС = Новый КвалификаторыСтроки(250);
				ОписаниеСтроки = Новый ОписаниеТипов(МассивТипов,КС);
				РезультатКомпоновки.ДанныеОтчета.Колонки.Добавить("СсылкаНаОбъектДолжностьРуководителяНаПечать",
									ОписаниеСтроки,
									"СсылкаНаОбъект.Должность руководителя на печать",
									);
			Иначе
			КонецЕсли; 
			
			Для каждого ТПараметрыДокумента из ТДокументы.Строки Цикл
				ТПараметрыДокумента.СсылкаНаОбъектДолжностьРуководителяНаПечать = ЗарплатаКадрыОтчеты.ДолжностьПодписантаНаПечать();//ТПараметрыДокумента.СсылкаНаОбъект.Руководитель);		
			КонецЦикла;
		КонецЕсли;
	КонецЦикла;
КонецПроцедуры

Функцию формирования самого строкового представления я опять вытаскиваю в общий модуль ЗарплатаКадрыОтчеты - он у меня уже захвачен, а специфичное представление должности подписанта мне потребуется ещё пожалуй в нескольких печатных формах для кадров и расчетчиков. Кстати, я могу здесь даже передавать в функции параметром любое выбранное в СКД поле, а так же любой реквизит этого поля. А также можно свободно добавлять сколько угодно дополнительных колонок в структуру дерева, и все эти колонки будут доступны нам в качестве параметров макета в пользовательском режиме:

 

Итог:

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

21

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

Наименование Файл Версия Размер
Расширение реализовывающее описанные функции:
.cfe 9,26Kb
30.01.19
8
.cfe 1.0 9,26Kb 8 Скачать

См. также

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо
3. Japan 17 01.04.19 09:11 Сейчас в теме
Тема хорошая, но не всем подойдет, т.к. доработка общих модулей вещь такая, в какой то ВПФ нужно - в какой то нет, хорошо что у вас совпало для всех. По поводу моей выкладки //infostart.ru/public/783619/, добавлять там свои параметры можно, у меня описано как это сделать.
Оставьте свое сообщение