Универсальный фильтр#

Как создать дополнительную группу фильтрации по классу#

  1. На операции lazyInitFilter инициализируем дополнительную группу:

    override def lazyInitFilter(): Unit = {
      if (!fltManager.isPopulatedRootGroup) {
        Btk_FltPkg().createRootGroupByClass(fltManager, "Bs_Goods", "ТМЦ")
      }
      super.lazyInitFilter()
    }
    
  2. На onApplyFiler получаем текст фильтрации по группе:

    override def onApplyFilter(): Unit = {
      super.onApplyFilter()
      //проверяем, что группы инициализированы и фильтр активен в выборке
      if (fltManager.isPopulatedRootGroup && fltManager.isActive) {
        val alias = "tt"
        val macros = Btk_FltPkg().generateMacroByGroup(fltManager, "Bs_Goods", alias)
        selection.setMacro("GdsMacro", macros.where)   
      }
    }
    
  3. В операции onRefresh используем установленный в onApplyFiler макрос:

    • Через метод prepareSelectStatement

    override protected def onRefresh: Recs = {
      prepareSelectStatement("&GdsMacro")
    }
    
    • В тексте sql-запроса

    override protected def onRefresh: Recs = {
      """
        select .....
          from .....
         where ....
           and &GdsMacro
      """
    }
    

Как создать дополнительную группу фильтрации с произвольными атрибутами#

  1. На операции lazyInitFilter инициализируем дополнительную группу:

    override def lazyInitFilter(): Unit = {
      if (!fltManager.isPopulatedRootGroup) {
         Btk_FltPkg().createCustomRootGroup(fltManager, "Some_CustomGroup", "Произвольная группа", (builder) => {
           builder.addRefObjectAttr("idGds", "Тмц", "Bs_Goods")
           builder.addBasicAttr("sCode", "Код", AttributeTypes.Varchar, false)
         })
      }
      super.lazyInitFilter()
    }
    
  2. На onApplyFiler получаем текст фильтрации по группе:

    override def onApplyFilter(): Unit = {
      super.onApplyFilter()
      //проверяем, что группы инициализированы и фильтр активен в выборке
      if (fltManager.isPopulatedRootGroup && fltManager.isActive) {
        val macros = Btk_FltPkg().generateMacroByGroup(fltManager, "Some_CustomGroup", "tt")
        selection.setMacro("SomeMacro", macros.where)   
      }
    }
    
  3. В операции onRefresh используем установленный в onApplyFiler макрос:

    • Через метод prepareSelectStatement

    override protected def onRefresh: Recs = {
      prepareSelectStatement("&SomeMacro")
    }
    
    • В тексте sql-запроса

    override protected def onRefresh: Recs = {
      """
        select .....
          from ..... 
         where ....
           and &SomeMacro
      """
    }