docs: public final Object convertOnlyId(final Map<String, Object> pAddParam,
      final IRecordSet<RS> pFrom, final String pName, final Class pFieldClass,
        final Class pEntityClass, final List<Integer> pCurrentLevel,
          final List<Integer> pDeepLevel,
            final List<String> pForeignFieldNms) throws Exception {
      // foreign entity's ID map
      Map<String, Object> idNmValMap = new HashMap<String, Object>();
      TableSql tableSql = this.tablesMap.get(pFieldClass.getSimpleName());
      for (String idFldNm : tableSql.getIdColumnsNames()) {
        Object idVal;
        Field rapiFld = this.fieldsRapiHolder.getFor(pFieldClass, idFldNm);
        String columnAlias;
        if (pDeepLevel.get(pDeepLevel.size() - 1) == 1
          || pCurrentLevel.get(pCurrentLevel.size() - 1)
            > pDeepLevel.get(pDeepLevel.size() - 1)) {
          // there is only ID of foreign entity in SELECT query:
          // e.g. PERSISTABLELINE
          // top level1
          // PERSISTABLELINE.ITSPRODUCT as ITSPRODUCT
          // top level2
          // PERSISTABLEHEAD.ITSDEPARTMENT as PERSISTABLEHEADITSDEPARTMENT
          if (pCurrentLevel.get(0) == 2) {
            if (tableSql.getIdColumnsNames().length > 1) {
              // composite derived names:
              columnAlias = idFldNm.toUpperCase();
            } else {
              columnAlias = pName.toUpperCase();
            }
          } else {
            int pos;
            if (pCurrentLevel.get(pCurrentLevel.size() - 1)
              > pDeepLevel.get(pDeepLevel.size() - 1) //deepLevel2, currLevel3
                //overridden on level > 2
                || pDeepLevel.get(pDeepLevel.size() - 1)  == 1) {
              //only ID - previous alias
              pos = 2;
            } else {
              pos = 1;
            }
            String currForeignFieldNm = pForeignFieldNms
              .get(pForeignFieldNms.size() - pos);
            String tableAlias = currForeignFieldNm.toUpperCase();
            if (tableSql.getIdColumnsNames().length > 1) {
              // composite derived names:
              columnAlias = tableAlias + idFldNm.toUpperCase();
            } else {
              columnAlias = tableAlias + pName.toUpperCase();
            }
          }
        } else {
          // e.g. PREPAYMENTTO - ACCCASH.ITSID as ACCCASHITSID
          columnAlias = pName.toUpperCase() + idFldNm.toUpperCase();
        }
        if (tableSql.getFieldsMap().get(idFldNm)
            .getForeignEntity() != null) {
          // foreign entity again, e.g. UserTomcat in
          // UserRoleTomcatPriority.userRoleTomcat.itsUser
          TableSql tableSqlFr = this.tablesMap
            .get(rapiFld.getType().getSimpleName());
          if (tableSqlFr.getIdColumnsNames().length > 1 || tableSqlFr
            .getFieldsMap().get(tableSqlFr.getIdColumnsNames()[0])
              .getForeignEntity() != null) {
            String msg = "There is no rule to fill foreign2 ID - "
                + rapiFld.getType();
            throw new ExceptionWithCode(ExceptionWithCode.NOT_YET_IMPLEMENTED,
              msg);
          }
          Field rapiFldFr = this.fieldsRapiHolder
            .getFor(rapiFld.getType(), tableSqlFr.getIdFieldName());
          if (!(pDeepLevel.get(pDeepLevel.size() - 1) == 1
            || pCurrentLevel.get(pCurrentLevel.size() - 1)
              >= pDeepLevel.get(pDeepLevel.size() - 1))) {
            //e.g. CUOrSeGdLn.sel.seller
            columnAlias = idFldNm.toUpperCase()
              + tableSqlFr.getIdColumnsNames()[0].toUpperCase();
          }
          Object idEntFr = getSimpleId(rapiFldFr.getType(), pFrom, columnAlias);
          if (idEntFr != null) {
            @SuppressWarnings("unchecked")
            IFactorySimple<Object> facEnFr =
              (IFactorySimple<Object>) this.entitiesFactoriesFatory
               .lazyGet(pAddParam, rapiFld.getType());
            idVal = facEnFr.create(pAddParam);
            @SuppressWarnings("unchecked")
            IFillerObjectFields<Object> filler =
              (IFillerObjectFields<Object>)
                fillersFieldsFactory.lazyGet(pAddParam, rapiFld.getType());
            filler.fill(pAddParam, idVal, idEntFr,
              tableSqlFr.getIdColumnsNames()[0]);
          } else {
            idVal = null;
          }
        } else {
          // simple ID
          idVal = getSimpleId(rapiFld.getType(), pFrom, columnAlias);
        }
        if (idVal != null) {
          idNmValMap.put(idFldNm, idVal);
        }
      }
      if (idNmValMap.size() > 0) {
        @SuppressWarnings("unchecked")
        IFactorySimple<Object> facEn =
          (IFactorySimple<Object>) this.entitiesFactoriesFatory
            .lazyGet(pAddParam, pFieldClass);
        Object entity = facEn.create(pAddParam);
        @SuppressWarnings("unchecked")
        IFillerObjectFields<Object> filler =
          (IFillerObjectFields<Object>)
            fillersFieldsFactory.lazyGet(pAddParam, pFieldClass);
        // e.g. UserRoleTomcatPriority.userRoleTomcat:
        // {itsRole - String='role1', itsUser - UserTomcat {itsUser='admin'}}
        for (Map.Entry<String, Object> entry : idNmValMap.entrySet()) {
          filler.fill(pAddParam, entity, entry.getValue(), entry.getKey());
        }
        return entity;
      }
      return null;
    }