Вопрос

Группы или фильтрация меню "Печать"

Здравствуйте, подскажите, как можно в меню "Печать" создавать группы отчетов? Имеется большое количество печатных форм в разделе Контакты, хотелось бы их сгруппировать по типам.

Либо вариант, есть ли возможность фильтрации печатных форм, в зависимости от выбранной записи?

Нравится

3 комментария

Добрый день, Егор!

Вы можете выполнить настройку настройку печатных форм через Дизайнер системы - справочники - печатные формы.

В данном справочнике Вы можете указать где будет отображаться печатная форма. Можно выбрать отображение в разделе или в карточке записи.

Так же рекомендую ознакомиться со статьями на академии Террасофта: https://academy.terrasoft.ru/documents/sales-commerce/7-11/nastroyka-pe…

https://academy.terrasoft.ru/documents/sales-commerce/7-11/registraciya…

Так же я передам информацию по данному вопросу в отдел разработки для оценки и принятия решения внедрения данной возможности в новых версиях bpm'online.

 

Дело в том, что я понимаю как добавить печатную форму в меню Печать, просто у меня их порядка 30-40 в разделе контакты, и хотелось их группировать, для удобства поиска.

Алексaндр Егоров,

Добрый день, Егор!

Сделать группировку и фильтрацию вполне реально. Для этого нужно переопределить несколько методов. На примере будет понятнее.

К примеру, будем делать для карточки "Контакты". Перед тем как переопределять методы необходимо в секции attributes объявить все группы для группировки. Пусть для примера будет две группы:

attributes: {
	subMenuGroup1: {
		dataValueType: Terrasoft.DataValueType.COLLECTION
	},
	subMenuGroup2: {
		dataValueType: Terrasoft.DataValueType.COLLECTION
	}
}

Для карточки нужно переопределить методы initCardPrintForms и generateCardPrintForm и в них "перетасовать" все ваши печатные формы, например так:

initCardPrintForms: function(callback, scope) {
	this.callParent([function(callback, scope) {
		var position = 0;
		var myFirstPrintFormId = "4a0ad08a-8c80-e011-afbc-00155d04320c";
		var mySecondPrintFormId = "55e7f911-9def-48c6-8405-8e9b682bf3b3";
		//получаем коллекцию всех печатных форм
		var printMenuItems = this.get(this.moduleCardPrintFormsCollectionName);
		//создаем две группы печатных форм
		var subMenu1 = this.Ext.create("Terrasoft.BaseViewModelCollection");
		var subMenu2 = this.Ext.create("Terrasoft.BaseViewModelCollection");
		//для примера у нас две печатных формы, одну - в первую группу, другую - во вторую
		subMenu1.add(myFirstPrintFormId, printMenuItems.get(myFirstPrintFormId), position);
		subMenu2.add(mySecondPrintFormId, printMenuItems.get(mySecondPrintFormId), position + 1);
		this.set("subMenuGroup1", subMenu1);
		this.set("subMenuGroup2", subMenu2);
		//переменная для хранения всего меню печатных форм
		var printMenu = this.Ext.create("Terrasoft.BaseViewModelCollection");
		//добавляем две группы
		printMenu.add(printMenu.getUniqueKey(), this.getButtonMenuItem({
			"Caption": {"bindTo": "Resources.Strings.ReportGroup1"},
			"Items": {"bindTo": "subMenuGroup1"}
		}), position);
		printMenu.add(printMenu.getUniqueKey(), this.getButtonMenuItem({
			"Caption": {"bindTo": "Resources.Strings.ReportGroup2"},
			"Items": {"bindTo": "subMenuGroup2"}
		}), position + 1);
		//устанавливаем на меню печати
		this.set(this.moduleCardPrintFormsCollectionName, printMenu);
	}, this]);
},
generateCardPrintForm: function(tag) {
	var cardPrintFormsCollection = this.get(this.moduleCardPrintFormsCollectionName);
	var menuGroups = [];
	cardPrintFormsCollection.each(function(item) {
		menuGroups.push(item.get("Items").bindTo);
	});
	var printForm;
	for (var i = 0; i < menuGroups.length; i++) {
		var subMenu = this.get(menuGroups[i]);
		if (subMenu.contains(tag)) {
		printForm = subMenu.get(tag);
		}
	}
	this.generatePrintForm(printForm);
}

Небольшое пояснение к коду: метод initCardPrintForms загружает все печатные формы для нашей карточки, в коде комментарии. Метод generateCardPrintForm нужно переопределять так как наша карточка не знает, что меню печати имеет вложенную структуру, поэтому немного другим способом нужно подготавливать форму к печати, перебирая коллекции, которые завязаны на Items группы форм печати. Пример выше - это минимальный пример без обязательных проверок обьектов.

Обращаю ваше внимание, что если вам необходимо делать все это для раздела, а не карточки, то не стоит забывать, что там кроме этих методов необходимо кроме указанных выше переопределить методы initSectionPrintForms и generateSectionPrintForm, которые будут работать с реестром, а при открытии карточки в совмещенном режиме (Combined Mode) отработают методы initCardPrintForms и generateCardPrintForm.

Показать все комментарии