docs: public final <T extends AItemSpecifics<I, ?>, I extends IHasIdLongVersionName> List<T> retrieveItemSpecificsLst(
      final Map<String, Object> pReqVars, final Long pLuv, final Class<T> pItemSpecClass) throws Exception {
      List<T> result = null;
      String verCond;
      if (pLuv != null) {
        String tblNm = pItemSpecClass.getSimpleName().toUpperCase();
        verCond = " where " + tblNm + ".ITEM in " + " (select distinct  ITEM from " + tblNm + " join SPECIFICSOFITEM on "
          + tblNm + ".SPECIFICS=SPECIFICSOFITEM.ITSID where " + tblNm + ".ITSVERSION>" + pLuv.toString() + ")";
      } else {
        verCond = "";
      }
      try {
        this.srvDatabase.setIsAutocommit(false);
        this.srvDatabase.setTransactionIsolation(ISrvDatabase.TRANSACTION_READ_UNCOMMITTED);
        this.srvDatabase.beginTransaction();
        pReqVars.put(pItemSpecClass.getSimpleName() + "specificsdeepLevel", 2); //HTML templates only ID
        pReqVars.put("SpecificsOfItemtempHtmldeepLevel", 1); //HTML templates only ID
        HashSet<String> goodsFldNms = new HashSet<String>();
        goodsFldNms.add("itsId");
        goodsFldNms.add("itsName");
        pReqVars.put("InvItemneededFields", goodsFldNms);
        HashSet<String> soiFldNms = new HashSet<String>();
        soiFldNms.add("itsId");
        soiFldNms.add("itsName");
        soiFldNms.add("isShowInList");
        soiFldNms.add("itsType");
        soiFldNms.add("itsGroop");
        soiFldNms.add("tempHtml");
        pReqVars.put("SpecificsOfItemneededFields", soiFldNms);
        HashSet<String> soigFldNms = new HashSet<String>();
        soigFldNms.add("itsId");
        soigFldNms.add("itsName");
        soigFldNms.add("templateStart");
        soigFldNms.add("templateEnd");
        soigFldNms.add("templateDetail");
        pReqVars.put("SpecificsOfItemGroupneededFields", soigFldNms);
        result = getSrvOrm().retrieveListWithConditions(pReqVars, pItemSpecClass, verCond + " order by ITEM.ITSID, SPECIFICS.ITSINDEX");
        pReqVars.remove(pItemSpecClass.getSimpleName() + "specificsdeepLevel");
        pReqVars.remove("SpecificsOfItemtempHtmldeepLevel");
        pReqVars.remove("InvItemneededFields");
        pReqVars.remove("SpecificsOfItemneededFields");
        pReqVars.remove("SpecificsOfItemGroupneededFields");
        this.srvDatabase.commitTransaction();
      } catch (Exception ex) {
        if (!this.srvDatabase.getIsAutocommit()) {
          this.srvDatabase.rollBackTransaction();
        }
        throw ex;
      } finally {
        this.srvDatabase.releaseResources();
      }
      //make list of goods ordered by max(last updated specific) for that goods
      //goods itsVersion holds max(last updated specific):
      List<I> itemsForSpecifics = new ArrayList<I>();
      //also list of all used HTML templates ID to retrieve their full-filled list
      Set<Long> htmlTemplatesIds = new HashSet<Long>();
      I currItem = null;
      for (AItemSpecifics<I, ?> gs : result) {
        if (gs.getSpecifics().getTempHtml() != null) {
          htmlTemplatesIds.add(gs.getSpecifics().getTempHtml().getItsId());
        }
        if (gs.getSpecifics().getItsGroop() != null) {
          if (gs.getSpecifics().getItsGroop().getTemplateStart() != null) {
            htmlTemplatesIds.add(gs.getSpecifics().getItsGroop().getTemplateStart().getItsId());
          }
          if (gs.getSpecifics().getItsGroop().getTemplateEnd() != null) {
            htmlTemplatesIds.add(gs.getSpecifics().getItsGroop().getTemplateEnd().getItsId());
          }
          if (gs.getSpecifics().getItsGroop().getTemplateStart() != null) {
            htmlTemplatesIds.add(gs.getSpecifics().getItsGroop().getTemplateDetail().getItsId());
          }
        }
        if (currItem == null || !gs.getItem().getItsId().equals(currItem.getItsId())) {
          currItem = gs.getItem();
          currItem.setItsVersion(gs.getItsVersion());
          itemsForSpecifics.add(currItem);
        } else { //2-nd, 3-d... specifics of this goods
          if (currItem.getItsVersion() < gs.getItsVersion()) {
            currItem.setItsVersion(gs.getItsVersion());
          }
        }
      }
      CmprHasVersion<I> cmp = new CmprHasVersion<I>();
      Collections.sort(itemsForSpecifics, cmp);
      pReqVars.put("itemsForSpecifics", itemsForSpecifics);
      pReqVars.put("htmlTemplatesIds", htmlTemplatesIds);
      return result;
    }