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