Здравствуйте, подскажите, как можно в меню "Печать" создавать группы отчетов? Имеется большое количество печатных форм в разделе Контакты, хотелось бы их сгруппировать по типам.
Либо вариант, есть ли возможность фильтрации печатных форм, в зависимости от выбранной записи?
Нравится
Добрый день, Егор!
Вы можете выполнить настройку настройку печатных форм через Дизайнер системы - справочники - печатные формы.
В данном справочнике Вы можете указать где будет отображаться печатная форма. Можно выбрать отображение в разделе или в карточке записи.
Так же рекомендую ознакомиться со статьями на академии Террасофта: 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.