Example usage for org.hibernate.criterion Restrictions or

List of usage examples for org.hibernate.criterion Restrictions or

Introduction

In this page you can find the example usage for org.hibernate.criterion Restrictions or.

Prototype

public static LogicalExpression or(Criterion lhs, Criterion rhs) 

Source Link

Document

Return the disjuction of two expressions

Usage

From source file:com.jaspersoft.jasperserver.search.filter.ResourceTypeFilter.java

License:Open Source License

public void applyRestrictions(String type, ExecutionContext context, SearchCriteria criteria) {
    SearchAttributes searchAttributes = getSearchAttributes(context);

    if (searchAttributes != null && searchAttributes.getState() != null) {
        String resourceTypeFilterOption = searchAttributes.getState().getCustomFiltersMap()
                .get("resourceTypeFilter");

        List<String> resourceTypes = null;
        if (resourceTypeFilterOption != null) {
            resourceTypes = filterOptionToResourceTypes.get(resourceTypeFilterOption);
        }//  ww  w. jav  a2s.  co  m

        if (resourceTypes != null) {
            criteria.add(Restrictions.in("resourceType", resourceTypes));
        }
    } else {
        final RepositorySearchCriteria repositorySearchCriteria = getTypedAttribute(context,
                RepositorySearchCriteria.class);
        if (repositorySearchCriteria != null) {
            if (repositorySearchCriteria.getResourceTypes() != null
                    && !repositorySearchCriteria.getResourceTypes().isEmpty()) {
                List<String> types = new ArrayList<String>(repositorySearchCriteria.getResourceTypes());
                boolean addFolders = types.remove(Folder.class.getName());
                Criterion criterion = Restrictions.in("resourceType", types);

                if (addFolders && ResourceLookup.class.getName().equals(type)) {
                    Criterion folderCriterion = Restrictions.isNull("resourceType");
                    criteria.add(
                            types.isEmpty() ? folderCriterion : Restrictions.or(folderCriterion, criterion));
                } else {
                    criteria.add(criterion);
                }
            }
        } else {
            throw new RuntimeException("Resource type filter not found in the custom filters map.");
        }
    }
}

From source file:com.joey.Fujikom.modules.sys.service.SystemService.java

License:Open Source License

public Page<User> findUser(Page<User> page, User user) {
    User currentUser = UserUtils.getUser();
    DetachedCriteria dc = userDao.createDetachedCriteria();

    dc.createAlias("company", "company");
    if (user.getCompany() != null && StringUtils.isNotBlank(user.getCompany().getId())) {
        dc.add(Restrictions.or(Restrictions.eq("company.id", user.getCompany().getId()),
                Restrictions.like("company.parentIds", "%," + user.getCompany().getId() + ",%")));
    }//from   w w w.ja va  2s.co  m

    dc.createAlias("office", "office");
    if (user.getOffice() != null && StringUtils.isNotBlank(user.getOffice().getId())) {
        dc.add(Restrictions.or(Restrictions.eq("office.id", user.getOffice().getId()),
                Restrictions.like("office.parentIds", "%," + user.getOffice().getId() + ",%")));
    }

    // ????
    if (!currentUser.isAdmin()) {
        dc.add(Restrictions.ne("id", "1"));
    }

    dc.add(dataScopeFilter(currentUser, "office", ""));

    if (StringUtils.isNotEmpty(user.getLoginName())) {
        dc.add(Restrictions.like("loginName", "%" + user.getLoginName() + "%"));
    }
    if (StringUtils.isNotEmpty(user.getName())) {
        dc.add(Restrictions.like("name", "%" + user.getName() + "%"));
    }

    dc.add(Restrictions.eq(User.FIELD_DEL_FLAG, User.DEL_FLAG_NORMAL));
    if (!StringUtils.isNotEmpty(page.getOrderBy())) {
        dc.addOrder(Order.asc("company.code")).addOrder(Order.asc("office.code")).addOrder(Order.desc("name"));
    }

    return userDao.find(page, dc);
}

From source file:com.klistret.cmdb.utility.hibernate.XPathCriteria.java

License:Open Source License

/**
 * //  w  ww.  j  a  v  a  2s  .  c  o  m
 * @param predicate
 * @return
 */
protected Criterion getRestriction(Expr predicate, HibernateStep context) {
    logger.debug("Adding restrictions by predicate to context [{}]", context);

    switch (predicate.getType()) {
    case Or:
        /**
         * Recursively breaks down the OrExpr by translating on the first
         * and second operands
         */
        if (((OrExpr) predicate).getOperands().size() != 2)
            throw new ApplicationException(
                    String.format("OrExpr expression [%s] expects 2 operands", predicate));

        return Restrictions.or(getRestriction(((OrExpr) predicate).getOperands().get(0), context),
                getRestriction(((OrExpr) predicate).getOperands().get(1), context));
    case And:
        /**
         * Recursively breaks down the AndExpr by translating on the first
         * and second operands
         */
        if (((AndExpr) predicate).getOperands().size() != 2)
            throw new ApplicationException(
                    String.format("AndExpr expression [%s] expects 2 operands", predicate));

        return Restrictions.and(getRestriction(((AndExpr) predicate).getOperands().get(0), context),
                getRestriction(((AndExpr) predicate).getOperands().get(1), context));
    case Comparison:
        /**
         * Find the literal
         */
        LiteralExpr literal = getLiteralOperand(((ComparisonExpr) predicate).getOperands());

        /**
         * Find the relative path making a Hibernate relative path
         */
        RelativePathExpr rpe = getRelativePathOperand(((ComparisonExpr) predicate).getOperands());
        HibernateRelativePath hRPath = process(rpe, context);
        build(hRPath);

        HibernateStep last = hRPath.getLastHibernateStep();

        /**
         * Property name with alias prefix
         */
        String alias = last.getPrevious() == null ? aliasCache.get(context.getPath())
                : aliasCache.get(last.getPrevious().getPath());
        String propertyName = alias == null ? last.getName() : String.format("%s.%s", alias, last.getName());

        /**
         * Paths with XML properties (always the last step if present)
         * return a XPath restriction.
         */
        if (hRPath.hasXML()) {
            if (!hRPath.isTruncated())
                throw new ApplicationException(String.format(
                        "Predicate relative path ending in an XML property [%s] must be truncated", last));

            /**
             * Last Hibernate step of the Hibernate path marks the property
             * which the restriction acts on.
             */
            StepExpr step = (StepExpr) last.getStep();

            /**
             * A new XPath is created from the last step downwards till the
             * step prior to the ending step.
             */
            String xpath = null;
            for (int depth = step.getDepth(); depth < step.getRelativePath().getDepth() - 1; depth++) {
                Expr expr = step.getRelativePath().getExpr(depth);
                xpath = xpath == null ? expr.getXPath() : String.format("%s/%s", xpath, expr.getXPath());
            }

            Step ending = (Step) step.getRelativePath().getLastExpr();

            /**
             * A new comparison is generated
             */
            List<Expr> operands = new ArrayList<Expr>();
            operands.add(ending);
            operands.add(literal);

            xpath = String.format("%s[%s]", xpath,
                    ComparisonExpr.getXPath(((ComparisonExpr) predicate).getOperator(), operands, false));
            xpath = String.format("%s%s", context.getBaseExpression().getProlog(), xpath);

            PathExpression other = new PathExpression(xpath);
            return new XPathRestriction(propertyName, (Step) other.getRelativePath().getFirstExpr());
        }

        if (((StepExpr) last.getStep()).hasPredicates())
            throw new ApplicationException(String.format(
                    "Comparisons against Hibernate properties may not have an underlying step [] with predicates",
                    last.getStep()));

        logger.debug("Predicate is comparison [{}] against property [{}]",
                ((ComparisonExpr) predicate).getOperator().name(), propertyName);

        switch (((ComparisonExpr) predicate).getOperator()) {
        case ValueEquals:
            logger.debug("Value: {}", literal.getValue().getJavaValue());
            return Restrictions.eq(propertyName, literal.getValue().getJavaValue());
        case ValueGreaterThan:
            logger.debug("Value: {}", literal.getValue().getJavaValue());
            return Restrictions.gt(propertyName, literal.getValue().getJavaValue());
        case ValueGreaterThanOrEquals:
            logger.debug("Value: {}", literal.getValue().getJavaValue());
            return Restrictions.ge(propertyName, literal.getValue().getJavaValue());
        case ValueLessThan:
            logger.debug("Value: {}", literal.getValue().getJavaValue());
            return Restrictions.lt(propertyName, literal.getValue().getJavaValue());
        case ValueLessThanOrEquals:
            logger.debug("Value: {}", literal.getValue().getJavaValue());
            return Restrictions.le(propertyName, literal.getValue().getJavaValue());
        case ValueNotEquals:
            logger.debug("Value: {}", literal.getValue().getJavaValue());
            return Restrictions.ne(propertyName, literal.getValue().getJavaValue());
        case GeneralEquals:
            /**
             * If atomic (not a sequence) then the 'in' restriction is not
             * usable (defaults to 'eq' restriction) since the argument is
             * an array of objects.
             */
            if (literal.isAtomic()) {
                logger.debug("Value: {}", literal.getValue().getJavaValue());
                return Restrictions.eq(propertyName, literal.getValue().getJavaValue());
            }

            logger.debug("Values: {}", literal.getValues());

            Object[] javaValues = new Object[literal.getValues().length];
            for (int index = 0; index < literal.getValues().length; index++)
                javaValues[index] = ((com.klistret.cmdb.utility.saxon.Value) literal.getValues()[index])
                        .getJavaValue();

            return Restrictions.in(propertyName, javaValues);
        case Matches:
            if (((ComparisonExpr) predicate).getOperands().size() != 2)
                throw new ApplicationException(
                        String.format("Matches function [%s] expects 2 operands", predicate));

            logger.debug("Value: {}", literal.getValue().getText());
            return Restrictions.ilike(propertyName, literal.getValue().getText(), MatchMode.EXACT);
        case Exists:
            if (((ComparisonExpr) predicate).getOperands().size() != 1)
                throw new ApplicationException(
                        String.format("Exists function [%s] expects only 1 operand", predicate));

            return Restrictions.isNotNull(propertyName);
        case Empty:
            if (((ComparisonExpr) predicate).getOperands().size() != 1)
                throw new ApplicationException(
                        String.format("Empty function [%s] expects only 1 operand", predicate));

            return Restrictions.isNull(propertyName);
        default:
            throw new ApplicationException(
                    String.format("Unexpected comparison operator [%s] handling predicates",
                            ((ComparisonExpr) predicate).getOperator()));
        }

    default:
        throw new ApplicationException(String.format("Unexpected expr [%s] type for predicate", predicate));
    }
}

From source file:com.krawler.common.util.BuildCriteria.java

License:Open Source License

private static Criterion getCriteriaByCondition(Object value, Integer criteriaVal, String propertyname) {
    Criterion Criteriaobj;//ww  w.  ja v a2  s. c  o m

    switch (criteriaVal) {
    case ISNOTNULL:
        Criteriaobj = Restrictions.isNotNull(propertyname);
        break;
    case NOTIN:
        String[] strArr = String.valueOf(value).split(",");
        List ls = Arrays.asList(strArr);
        Criteriaobj = Restrictions.not(Restrictions.in(propertyname, ls));
        break;
    case LIKE:
        Criteriaobj = Restrictions.or(Restrictions.like(propertyname, value + "%"),
                Restrictions.like(propertyname, "% " + value + "%"));
        break;
    case LE:
        Criteriaobj = Restrictions.le(propertyname, value);
        break;
    case GE:
        Criteriaobj = Restrictions.ge(propertyname, value);
        break;
    case ISNULL:
        Criteriaobj = Restrictions.isNull(propertyname);
        break;
    case IN:
        strArr = String.valueOf(value).split(",");
        ls = Arrays.asList(strArr);
        Criteriaobj = Restrictions.in(propertyname, ls);
        break;
    case NE:
        Criteriaobj = Restrictions.ne(propertyname, value);
        break;
    case LT:
        Criteriaobj = Restrictions.lt(propertyname, value);
        break;
    case GT:
        Criteriaobj = Restrictions.gt(propertyname, value);
        break;
    case EQ:
    default:
        Criteriaobj = Restrictions.eq(propertyname, value);
        break;
    }
    return Criteriaobj;
}

From source file:com.lewischooman.dao.WebpageDAO.java

License:Open Source License

@Override
@SuppressWarnings(value = "unchecked")
public List<WebpageDB> getWebpages4Menu(String loginFlag) {
    Session session;/*from w  w  w  .  j a  va 2  s.  c  om*/
    Criteria criteria;

    session = this.sessionFactory.getCurrentSession();
    criteria = session.createCriteria(WebpageDB.class);
    criteria.add(Restrictions.eq("menuFlag", "Y"))
            .add(Restrictions.or(Restrictions.eq("loginFlag", loginFlag), Restrictions.isNull("loginFlag")))
            .addOrder(Order.asc("menuOrder"));
    List<WebpageDB> webpages = (List<WebpageDB>) criteria.list();
    return webpages;
}

From source file:com.lm.lic.manager.hibernate.LicenseVerifIncidentDAO.java

License:Open Source License

private void addLicTypeRespTypeCrit(String licType, String respType, Criteria mainCriteria,
        Criteria prodCriteria) {/*from w w  w  . j a v  a 2s .  c o m*/
    if (StringUtils.hasText(respType)) {
        if (respType.equals(LicenseVerificationStatus.YES_AUTHORIZED.value())) {
            Criterion afCrit = Restrictions.eq("verResp", LicenseVerificationStatus.AUTHORIZED_FOREVER.value());
            Criterion apCrit = Restrictions.eq("verResp",
                    LicenseVerificationStatus.AUTHORIZED_PERMANENT.value());
            Criterion atCrit = Restrictions.eq("verResp", LicenseVerificationStatus.AUTHORIZED_TRIAL.value());
            LogicalExpression orExp = Restrictions.or(afCrit, apCrit);
            orExp = Restrictions.or(orExp, atCrit);
            mainCriteria.add(orExp);
        } else
            mainCriteria.add(Restrictions.eq("verResp", respType));
    }

    if (CoarseLicenseType.isForever(licType))
        prodCriteria.add(Restrictions.gt("licLifeInDays", GenConst.YEAR_LIFE_LONG));
    else if (CoarseLicenseType.isPermanent(licType))
        prodCriteria.add(Restrictions.eq("licLifeInDays", GenConst.YEAR_LIFE_LONG));
    else if (CoarseLicenseType.isTrial(licType))
        prodCriteria.add(Restrictions.lt("licLifeInDays", GenConst.YEAR_LIFE_LONG));
}

From source file:com.lm.lic.manager.hibernate.RequestForLicenseDAO.java

private LogicalExpression createInProdNamesOrIsvProdIdsLogicalExp(List<QuickyProduct> products) {
    List<String> isvProductIds = GenUtil.listIsvProductIds(products);
    List<String> productNames = GenUtil.listproductNames(products);

    LogicalExpression orExp = null;/*from   ww w  . ja  v a2 s.  co  m*/
    if (products != null && products.size() > 0) {
        Criterion inProdNamesCrit = Restrictions.in("reqProduct", productNames);
        Criterion isvInProdIdsCrit = Restrictions.in("isvProductId", isvProductIds);
        orExp = Restrictions.or(isvInProdIdsCrit, inProdNamesCrit);
    }

    return orExp;
}

From source file:com.lohika.alp.reporter.fe.query.QueryTranslator.java

License:Open Source License

private Criterion translate(String propertyName, Query exp) throws QueryTranslatorException {

    if (exp instanceof Word) {
        String value = "%" + ((Word) exp).getValue() + "%";
        return Restrictions.like(propertyName, value);
    } else if (exp instanceof SQLLike) {
        String value = ((SQLLike) exp).getValue();
        return Restrictions.like(propertyName, value);
    } else if (exp instanceof Or) {
        Criterion left = translate(propertyName, ((Or) exp).getLeft());
        Criterion right = translate(propertyName, ((Or) exp).getRight());

        return Restrictions.or(left, right);
    }// w  w  w  .j av a2s  .co m

    throw new QueryTranslatorException("Unknown query type: " + propertyName + ", " + exp.getClass());
}

From source file:com.lp.server.anfrage.ejbfac.AnfrageFacBean.java

License:Open Source License

public ArrayList<Integer> getAngelegteAnfragenNachUmwandlungDerLiefergruppenanfragen(Integer liefergruppeIId,
        TheClientDto theClientDto) {//from  w  ww . j  av a  2  s.c  om
    Session session = null;
    ArrayList<Integer> alErzeugteAnfragen = new ArrayList<Integer>();
    try {
        SessionFactory factory = FLRSessionFactory.getFactory();
        session = factory.openSession();
        Criteria c = session.createCriteria(FLRAnfrage.class);
        // Filter auf Mandant
        c.add(Restrictions.eq(AnfrageFac.FLR_ANFRAGE_MANDANT_C_NR, theClientDto.getMandant()));
        c.add(Restrictions.eq(AnfrageFac.FLR_ANFRAGE_ANFRAGEART_C_NR,
                AnfrageServiceFac.ANFRAGEART_LIEFERGRUPPE));

        if (liefergruppeIId != null) {
            c.add(Restrictions.eq(AnfrageFac.FLR_ANFRAGE_LFLIEFERGRUPPE_I_ID, liefergruppeIId));
        }

        // Filter nach Status: nur angelegte
        c.add(Restrictions.or(
                Restrictions.eq(AnfrageFac.FLR_ANFRAGE_ANFRAGESTATUS_C_NR,
                        AnfrageServiceFac.ANFRAGESTATUS_ANGELEGT),
                Restrictions.eq(AnfrageFac.FLR_ANFRAGE_ANFRAGESTATUS_C_NR,
                        AnfrageServiceFac.ANFRAGESTATUS_OFFEN)));
        // nach RE-Nummer sortieren
        c.addOrder(Order.asc("c_nr"));
        // Query ausfuehren
        List<?> list = c.list();

        for (Iterator<?> iter = list.iterator(); iter.hasNext();) {
            FLRAnfrage item = (FLRAnfrage) iter.next();
            alErzeugteAnfragen = getAnfrageFac().erzeugeAnfragenAusLiefergruppenanfrage(item.getI_id(),
                    alErzeugteAnfragen, theClientDto);
        }
    } finally {
        if (session != null) {
            session.close();
        }

    }
    if (liefergruppeIId != null) {
        return alErzeugteAnfragen;
    }

    ArrayList<Integer> a = new ArrayList<Integer>();
    try {
        SessionFactory factory = FLRSessionFactory.getFactory();
        session = factory.openSession();
        Criteria c = session.createCriteria(FLRAnfrage.class);
        // Filter auf Mandant
        c.add(Restrictions.eq(AnfrageFac.FLR_ANFRAGE_MANDANT_C_NR, theClientDto.getMandant()));
        c.add(Restrictions.eq(AnfrageFac.FLR_ANFRAGE_ANFRAGEART_C_NR, AnfrageServiceFac.ANFRAGEART_LIEFERANT));

        // Filter nach Status: nur angelegte
        c.add(Restrictions.eq(AnfrageFac.FLR_ANFRAGE_ANFRAGESTATUS_C_NR,
                AnfrageServiceFac.ANFRAGESTATUS_ANGELEGT));
        // nach RE-Nummer sortieren
        c.addOrder(Order.asc("c_nr"));
        // Query ausfuehren
        List<?> list = c.list();
        for (Iterator<?> iter = list.iterator(); iter.hasNext();) {
            FLRAnfrage item = (FLRAnfrage) iter.next();
            a.add(item.getI_id());
        }
    } finally {
        if (session != null) {
            session.close();
        }
    }

    return a;
}

From source file:com.lp.server.artikel.ejbfac.LagerReportFacBean.java

License:Open Source License

@TransactionAttribute(TransactionAttributeType.NEVER)
public JasperPrintLP printKundeumsatzstatistik(Timestamp tVon, Timestamp tBis, Integer iOptionKundengruppierung,
        boolean bUmsatz, Integer iOptionGruppierung, Integer iOptionSortierung, Integer iSortierbasisJahre,
        boolean bVerwendeStatistikadresse, boolean bMitNichtLagerbewertetenArtikeln, boolean ohneDBBetrachtung,
        TheClientDto theClientDto) throws EJBExceptionLP, RemoteException {
    List<String> gruppierung = new ArrayList<String>();

    tVon = Helper.cutTimestamp(tVon);// w  ww .ja va  2  s. c o  m
    tBis = Helper.cutTimestamp(tBis);
    String[] monate = new DateFormatSymbols(theClientDto.getLocUi()).getMonths();
    try {
        if (iOptionGruppierung
                .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_ARTIKELKLASSE) {

            ArtklaDto[] artklDtos = getArtikelFac().artklaFindByMandantCNr(theClientDto);
            for (int i = 0; i < artklDtos.length; i++) {
                gruppierung.add(artklDtos[i].getCNr());
            }
        } else if (iOptionGruppierung
                .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_ARTIKELGRUPPE) {

            ArtgruDto[] artgruDtos = getArtikelFac().artgruFindByMandantCNr(theClientDto);
            for (int i = 0; i < artgruDtos.length; i++) {
                gruppierung.add(artgruDtos[i].getCNr());
            }
        } else if (iOptionGruppierung
                .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_FERTIGUNGSGRUPPE) {

            FertigungsgruppeDto[] ftgruDtos = getStuecklisteFac()
                    .fertigungsgruppeFindByMandantCNr(theClientDto.getMandant(), theClientDto);
            for (int i = 0; i < ftgruDtos.length; i++) {
                gruppierung.add(ftgruDtos[i].getCBez());
            }
        } else if (iOptionGruppierung
                .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_JAHR) {

            Calendar c = Calendar.getInstance();
            c.setTimeInMillis(tVon.getTime());
            c.set(Calendar.DAY_OF_YEAR, 1);
            while (c.getTime().before(tBis)) {
                gruppierung.add(c.get(Calendar.YEAR) + "");
                c.set(Calendar.YEAR, c.get(Calendar.YEAR) + 1);

            }

        } else if (iOptionGruppierung
                .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_MONAT) {

            Calendar c = Calendar.getInstance();
            c.setTimeInMillis(tVon.getTime());
            c.set(Calendar.MONTH, 1);
            while (c.getTime().before(tBis)) {

                gruppierung.add(monate[c.get(Calendar.MONTH)] + " " + c.get(Calendar.YEAR));
                c.set(Calendar.MONTH, c.get(Calendar.MONTH) + 1);

            }
        }
    } catch (RemoteException ex) {
        throwEJBExceptionLPRespectOld(ex);
    }

    BigDecimal gesamtUmsatz = new BigDecimal(0);
    BigDecimal gesamtDeckungsbeitrag = new BigDecimal(0);
    Session session = FLRSessionFactory.getFactory().openSession();

    org.hibernate.Criteria crit = session.createCriteria(FLRKunde.class);
    crit.add(Restrictions.eq("mandant_c_nr", theClientDto.getMandant()));

    List<?> results = crit.list();
    Iterator<?> resultListIterator = results.iterator();

    ArrayList<Object> gesamtListe = new ArrayList<Object>();

    // Leere Spalten entfernen

    boolean[] bSpalteAndrucken = new boolean[gruppierung.size()];
    int iKunde = 0;
    while (resultListIterator.hasNext()) {
        FLRKunde kunde = (FLRKunde) resultListIterator.next();
        iKunde++;
        System.out.println(iKunde + " von " + results.size());

        KundeDto kundeDto = getKundeFac().kundeFindByPrimaryKey(kunde.getI_id(), theClientDto);

        KundeUmsatzstatistikDto kdums = new KundeUmsatzstatistikDto(gruppierung.size() + 1);
        kdums.setSKunde(kunde.getFlrpartner().getC_name1nachnamefirmazeile1());
        kdums.setIZahlungsziel(kundeDto.getZahlungszielIId());
        kdums.setILieferart(kundeDto.getLieferartIId());
        kdums.setISpediteur(kundeDto.getSpediteurIId());
        kdums.setIKundennummer(kundeDto.getIKundennummer());

        if (kundeDto.getPartnerDto().getLandplzortDto() != null) {
            kdums.setSLkz(kundeDto.getPartnerDto().getLandplzortDto().getLandDto().getCLkz());
            kdums.setSPlz(kundeDto.getPartnerDto().getLandplzortDto().getCPlz());
        }

        kdums.setSKundengruppierung("");
        // Branche/Partnerklasse hinzufuegen

        if (iOptionKundengruppierung
                .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_KUNDENGRUPPIERUNG_BRANCHE
                && kunde.getFlrpartner().getBranche_i_id() != null) {
            kdums.setSKundengruppierung(getPartnerServicesFac()
                    .brancheFindByPrimaryKey(kunde.getFlrpartner().getBranche_i_id(), theClientDto)
                    .getBezeichnung());
        } else if (iOptionKundengruppierung
                .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_KUNDENGRUPPIERUNG_PARTNERKLASSE
                && kunde.getFlrpartner().getPartnerklasse_i_id() != null) {
            kdums.setSKundengruppierung(getPartnerFac()
                    .partnerklasseFindByPrimaryKey(kunde.getFlrpartner().getPartnerklasse_i_id(), theClientDto)
                    .getBezeichnung());
        }

        Session session2 = FLRSessionFactory.getFactory().openSession();

        org.hibernate.Criteria crit2 = session2.createCriteria(FLRRechnungPosition.class)
                .createAlias("flrrechnung", "r");

        if (bVerwendeStatistikadresse) {
            crit2.createAlias("r.flrstatistikadresse", "k");
        } else {
            crit2.createAlias("r.flrkunde", "k");
        }

        crit2.add(Restrictions.eq("k.i_id", kunde.getI_id())).createAlias("k.flrpartner", "p")
                .createAlias("r." + RechnungFac.FLR_RECHNUNG_FLRRECHNUNGART, "ra");

        // PJ 14808
        crit2.add(Restrictions.or(
                Restrictions.isNotNull(
                        RechnungFac.FLR_RECHNUNGPOSITION_N_NETTOEINZELPREIS_PLUS_AUFSCHLAG_MINUS_RABATT),
                Restrictions.eq(RechnungFac.FLR_RECHNUNGPOSITIONSART_POSITIONSART_C_NR,
                        RechnungFac.POSITIONSART_RECHNUNG_LIEFERSCHEIN)));

        // projekt 3568
        String[] arten = new String[2];
        arten[0] = RechnungFac.RECHNUNGART_ANZAHLUNG;
        arten[1] = RechnungFac.RECHNUNGART_PROFORMARECHNUNG;

        crit2.add(Restrictions.not(Restrictions.in("ra.c_nr", arten)));

        String[] stati = new String[2];
        stati[0] = RechnungFac.STATUS_ANGELEGT;
        stati[1] = RechnungFac.STATUS_STORNIERT;

        crit2.add(Restrictions.not(Restrictions.in("r." + RechnungFac.FLR_RECHNUNG_STATUS_C_NR, stati)));

        Calendar c = Calendar.getInstance();
        c.setTime(tVon);
        c.set(Calendar.HOUR_OF_DAY, 0);
        c.set(Calendar.MINUTE, 0);
        c.set(Calendar.SECOND, 0);
        c.set(Calendar.MILLISECOND, 0);
        crit2.add(Restrictions.ge("r." + RechnungFac.FLR_RECHNUNG_D_BELEGDATUM, c.getTime()));

        c.setTime(tBis);
        c.set(Calendar.HOUR_OF_DAY, 23);
        c.set(Calendar.MINUTE, 59);
        c.set(Calendar.SECOND, 59);
        c.set(Calendar.MILLISECOND, 999);
        crit2.add(Restrictions.le("r." + RechnungFac.FLR_RECHNUNG_D_BELEGDATUM, c.getTime()));

        // SP903
        crit2.add(Restrictions.isNull("position_i_id_artikelset"));

        crit2.addOrder(Order.asc("p.c_name1nachnamefirmazeile1"));

        List<?> results2 = crit2.list();
        Iterator<?> resultListIterator2 = results2.iterator();

        int iPos = 0;
        while (resultListIterator2.hasNext()) {
            FLRRechnungPosition rechpos = (FLRRechnungPosition) resultListIterator2.next();

            iPos++;

            // 16882 Ohne Lagerbewertete Artikel
            if (rechpos.getPositionsart_c_nr().equals(LocaleFac.POSITIONSART_IDENT)
                    && rechpos.getFlrartikel() != null
                    && !Helper.short2boolean(rechpos.getFlrartikel().getB_lagerbewertet())) {

                if (bMitNichtLagerbewertetenArtikeln == false) {
                    continue;
                }
            }

            if (iPos % 100 == 0) {
                System.out.println(iPos + " von " + results2.size());
            }

            // Erstumsatz?
            Session sessionEU = FLRSessionFactory.getFactory().openSession();

            org.hibernate.Criteria critEU = session2.createCriteria(FLRRechnung.class)
                    .createAlias("flrkunde", "k").add(Restrictions.eq("k.i_id", kunde.getI_id()));

            critEU.add(Restrictions.lt(RechnungFac.FLR_RECHNUNG_D_BELEGDATUM, tVon));

            String[] statiErstumsatz = new String[1];
            statiErstumsatz[0] = RechnungFac.STATUS_STORNIERT;
            critEU.add(
                    Restrictions.not(Restrictions.in(RechnungFac.FLR_RECHNUNG_STATUS_C_NR, statiErstumsatz)));
            critEU.setFetchSize(1);
            List<?> resultsEU = critEU.list();
            if (resultsEU.size() < 1) {
                kdums.setBErstumsatz(true);
            }
            sessionEU.close();

            // ENDE Erstumsatz

            boolean bGutschrift = false;

            BigDecimal umsatz = rechpos.getN_nettoeinzelpreis_plus_aufschlag_minus_rabatt();
            // Gutschrift oder Wertgutschrift
            if (rechpos.getFlrrechnung().getFlrrechnungart().getC_nr()
                    .equals(RechnungFac.RECHNUNGART_GUTSCHRIFT)
                    || rechpos.getFlrrechnung().getFlrrechnungart().getC_nr()
                            .equals(RechnungFac.RECHNUNGART_WERTGUTSCHRIFT)) {
                bGutschrift = true;
                umsatz = new BigDecimal(0).subtract(umsatz);

            }

            // Mit Welchselkurs zu Mandantenwaehrung dividieren
            if (rechpos.getFlrrechnung().getN_kurs() != null
                    && rechpos.getFlrrechnung().getN_kurs().doubleValue() != 0
                    && !rechpos.getPositionsart_c_nr().equals(RechnungFac.POSITIONSART_RECHNUNG_LIEFERSCHEIN)) {
                umsatz = umsatz.divide(rechpos.getFlrrechnung().getN_kurs(), 4, BigDecimal.ROUND_HALF_EVEN);

            }

            // Bei Handeingabe ist Umsatz gleich Deckungsbeitrag und kommt
            // in die Kategorie Unbekannt
            if (rechpos.getPositionsart_c_nr().equals(LocaleFac.POSITIONSART_HANDEINGABE)
                    && iOptionGruppierung
                            .intValue() != LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_JAHR
                    && iOptionGruppierung
                            .intValue() != LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_MONAT) {
                umsatz = umsatz.multiply(rechpos.getN_menge());
                kdums.getSubSummeUmsatz()[0] = kdums.getSubSummeUmsatz()[0].add(umsatz);
                kdums.getSubSummeDeckungsbeitrag()[0] = kdums.getSubSummeDeckungsbeitrag()[0].add(umsatz);
                // GESAMTSUMME
                kdums.setBdUmsatz(kdums.getBdUmsatz().add(umsatz));
                kdums.setBdDeckungsbeitrag(kdums.getBdDeckungsbeitrag().add(umsatz));

            } else if (rechpos.getPositionsart_c_nr().equals(LocaleFac.POSITIONSART_IDENT) || (rechpos
                    .getPositionsart_c_nr().equals(LocaleFac.POSITIONSART_HANDEINGABE)
                    && iOptionGruppierung
                            .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_JAHR)
                    || (rechpos.getPositionsart_c_nr().equals(LocaleFac.POSITIONSART_HANDEINGABE)
                            && iOptionGruppierung
                                    .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_MONAT)) {

                if (rechpos.getPosition_i_id_artikelset() == null) {

                    umsatz = umsatz.multiply(rechpos.getN_menge());
                    BigDecimal gestwert = new BigDecimal(0);

                    BigDecimal deckungsbeitrag = new BigDecimal(0);
                    if (ohneDBBetrachtung == false) {
                        if (!rechpos.getPositionsart_c_nr().equals(LocaleFac.POSITIONSART_HANDEINGABE)) {

                            if (rechpos.getSetartikel_set().size() == 0) {
                                gestwert = getGestpreisFuerUmsatzStatistik(rechpos, bGutschrift);
                            } else {
                                Iterator it = rechpos.getSetartikel_set().iterator();
                                while (it.hasNext()) {
                                    gestwert = gestwert.add(getGestpreisFuerUmsatzStatistik(
                                            (FLRRechnungPosition) it.next(), bGutschrift));
                                }
                            }
                        }

                        // Mit Welchselkurs zu Mandantenwaehrung dividieren
                        if (rechpos.getFlrrechnung().getN_kurs() != null
                                && rechpos.getFlrrechnung().getN_kurs().doubleValue() != 0) {
                            gestwert = gestwert.divide(rechpos.getFlrrechnung().getN_kurs(), 4,
                                    BigDecimal.ROUND_HALF_EVEN);
                        }

                        deckungsbeitrag = umsatz.subtract(gestwert);
                    }

                    // GESAMTSUMME
                    if (rechpos.getPositionsart_c_nr().equals(LocaleFac.POSITIONSART_HANDEINGABE)) {
                        deckungsbeitrag = umsatz;
                    }

                    kdums.setBdDeckungsbeitrag(kdums.getBdDeckungsbeitrag().add(deckungsbeitrag));

                    kdums.setBdUmsatz(kdums.getBdUmsatz().add(umsatz));

                    // Aufteilen auf Gruppe
                    if (iOptionGruppierung
                            .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_ARTIKELKLASSE) {
                        if (rechpos.getFlrartikel().getFlrartikelklasse() != null) {
                            // Bei richtiger Artikelklasse einfuegen

                            for (int j = 0; j < gruppierung.size(); j++) {
                                if (gruppierung.get(j)
                                        .equals(rechpos.getFlrartikel().getFlrartikelklasse().getC_nr())) {
                                    kdums.getSubSummeUmsatz()[j + 1] = kdums.getSubSummeUmsatz()[j + 1]
                                            .add(umsatz);
                                    kdums.getSubSummeDeckungsbeitrag()[j
                                            + 1] = kdums.getSubSummeDeckungsbeitrag()[j + 1]
                                                    .add(deckungsbeitrag);
                                    bSpalteAndrucken[j] = true;
                                }
                            }
                        } else {
                            kdums.getSubSummeUmsatz()[0] = kdums.getSubSummeUmsatz()[0].add(umsatz);
                            kdums.getSubSummeDeckungsbeitrag()[0] = kdums.getSubSummeDeckungsbeitrag()[0]
                                    .add(deckungsbeitrag);
                        }
                    } else if (iOptionGruppierung
                            .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_ARTIKELGRUPPE) {
                        if (rechpos.getFlrartikel().getFlrartikelgruppe() != null) {
                            // Bei richtiger Gruppe einfuegen

                            for (int j = 0; j < gruppierung.size(); j++) {
                                if (gruppierung.get(j)
                                        .equals(rechpos.getFlrartikel().getFlrartikelgruppe().getC_nr())) {
                                    kdums.getSubSummeUmsatz()[j + 1] = kdums.getSubSummeUmsatz()[j + 1]
                                            .add(umsatz);
                                    kdums.getSubSummeDeckungsbeitrag()[j
                                            + 1] = kdums.getSubSummeDeckungsbeitrag()[j + 1]
                                                    .add(deckungsbeitrag);
                                    bSpalteAndrucken[j] = true;
                                }
                            }
                        } else {
                            kdums.getSubSummeUmsatz()[0] = kdums.getSubSummeUmsatz()[0].add(umsatz);
                            kdums.getSubSummeDeckungsbeitrag()[0] = kdums.getSubSummeDeckungsbeitrag()[0]
                                    .add(deckungsbeitrag);
                        }
                    } else if (iOptionGruppierung
                            .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_FERTIGUNGSGRUPPE) {

                        Session sessionFTGruppe = FLRSessionFactory.getFactory().openSession();

                        String queryString = "SELECT stkl.flrfertigungsgruppe FROM FLRStueckliste AS stkl"
                                + " WHERE stkl.artikel_i_id= " + rechpos.getFlrartikel().getI_id();

                        Query query = sessionFTGruppe.createQuery(queryString);
                        List<?> resultList = query.list();
                        Iterator<?> resultListIteratorFTGruppe = resultList.iterator();
                        if (resultListIteratorFTGruppe.hasNext()) {
                            FLRFertigungsgruppe gru = (FLRFertigungsgruppe) resultListIteratorFTGruppe.next();

                            if (gru != null) {
                                // Bei richtiger Gruppe einfuegen
                                for (int j = 0; j < gruppierung.size(); j++) {
                                    if (gruppierung.get(j).equals(gru.getC_bez())) {
                                        kdums.getSubSummeUmsatz()[j + 1] = kdums.getSubSummeUmsatz()[j + 1]
                                                .add(umsatz);
                                        kdums.getSubSummeDeckungsbeitrag()[j
                                                + 1] = kdums.getSubSummeDeckungsbeitrag()[j + 1]
                                                        .add(deckungsbeitrag);
                                        bSpalteAndrucken[j] = true;
                                    }
                                }
                            } else {
                                kdums.getSubSummeUmsatz()[0] = kdums.getSubSummeUmsatz()[0].add(umsatz);
                                kdums.getSubSummeDeckungsbeitrag()[0] = kdums.getSubSummeDeckungsbeitrag()[0]
                                        .add(deckungsbeitrag);
                            }
                            sessionFTGruppe.close();
                        }
                    } else if (iOptionGruppierung
                            .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_JAHR) {

                        Calendar cZeile = Calendar.getInstance();
                        cZeile.setTimeInMillis(rechpos.getFlrrechnung().getD_belegdatum().getTime());
                        String jahr = cZeile.get(Calendar.YEAR) + "";

                        // Bei richtiger Gruppe einfuegen
                        for (int j = 0; j < gruppierung.size(); j++) {
                            if (gruppierung.get(j).equals(jahr)) {
                                kdums.getSubSummeUmsatz()[j + 1] = kdums.getSubSummeUmsatz()[j + 1].add(umsatz);
                                kdums.getSubSummeDeckungsbeitrag()[j
                                        + 1] = kdums.getSubSummeDeckungsbeitrag()[j + 1].add(deckungsbeitrag);
                                bSpalteAndrucken[j] = true;
                            }
                        }

                    } else if (iOptionGruppierung
                            .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_MONAT) {

                        Calendar cZeile = Calendar.getInstance();
                        cZeile.setTimeInMillis(rechpos.getFlrrechnung().getD_belegdatum().getTime());
                        String jahrMonat = monate[cZeile.get(Calendar.MONTH)] + " " + cZeile.get(Calendar.YEAR);

                        // Bei richtiger Gruppe einfuegen
                        for (int j = 0; j < gruppierung.size(); j++) {
                            if (gruppierung.get(j).equals(jahrMonat)) {
                                kdums.getSubSummeUmsatz()[j + 1] = kdums.getSubSummeUmsatz()[j + 1].add(umsatz);
                                kdums.getSubSummeDeckungsbeitrag()[j
                                        + 1] = kdums.getSubSummeDeckungsbeitrag()[j + 1].add(deckungsbeitrag);
                                bSpalteAndrucken[j] = true;
                            }
                        }

                    }
                }
            }
            // Wenn Rechnungsposition ein LS ist, dann dessen Positionen
            // verwenden
            else if (rechpos.getPositionsart_c_nr().equals(LocaleFac.POSITIONSART_LIEFERSCHEIN)) {
                Integer lieferscheinIId = rechpos.getFlrlieferschein().getI_id();

                Session session3 = FLRSessionFactory.getFactory().openSession();

                org.hibernate.Criteria crit3 = session3.createCriteria(FLRLieferscheinposition.class);
                crit3.createAlias("flrlieferschein", "l");
                crit3.add(Restrictions.eq("l.i_id", lieferscheinIId));
                // SP903
                crit3.add(Restrictions.isNull("position_i_id_artikelset"));
                crit3.add(Restrictions
                        .isNotNull(LieferscheinpositionFac.FLR_LIEFERSCHEINPOSITION_N_NETTOGESAMTPREIS));
                crit3.add(Restrictions.not(Restrictions
                        .eq(LieferscheinpositionFac.FLR_LIEFERSCHEINPOSITION_N_MENGE, new BigDecimal(0))));

                List<?> results3 = crit3.list();
                Iterator<?> resultListIterator3 = results3.iterator();
                while (resultListIterator3.hasNext()) {
                    FLRLieferscheinposition lieferscheinpos = (FLRLieferscheinposition) resultListIterator3
                            .next();

                    // 16882 Ohne Lagerbewertete Artikel
                    if (lieferscheinpos.getPositionsart_c_nr().equals(LocaleFac.POSITIONSART_IDENT)
                            && lieferscheinpos.getFlrartikel() != null
                            && !Helper.short2boolean(lieferscheinpos.getFlrartikel().getB_lagerbewertet())) {
                        if (bMitNichtLagerbewertetenArtikeln == false) {
                            continue;
                        }
                    }

                    // PJ 14525
                    BigDecimal umsatzLs = lieferscheinpos
                            .getN_nettogesamtpreisplusversteckteraufschlagminusrabatt()
                            .divide(rechpos.getFlrrechnung().getN_kurs(), 4, BigDecimal.ROUND_HALF_EVEN);
                    umsatzLs = umsatzLs.multiply(lieferscheinpos.getN_menge());

                    if (lieferscheinpos.getPositionsart_c_nr().equals(LocaleFac.POSITIONSART_HANDEINGABE)
                            && iOptionGruppierung
                                    .intValue() != LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_JAHR
                            && iOptionGruppierung
                                    .intValue() != LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_MONAT) {
                        kdums.getSubSummeUmsatz()[0] = kdums.getSubSummeUmsatz()[0].add(umsatzLs);
                        kdums.getSubSummeDeckungsbeitrag()[0] = kdums.getSubSummeDeckungsbeitrag()[0]
                                .add(umsatzLs);
                        // GESAMTSUMME
                        kdums.setBdUmsatz(kdums.getBdUmsatz().add(umsatzLs));
                        kdums.setBdDeckungsbeitrag(kdums.getBdDeckungsbeitrag().add(umsatzLs));

                    } else if (lieferscheinpos.getPositionsart_c_nr().equals(LocaleFac.POSITIONSART_IDENT)
                            || (lieferscheinpos.getPositionsart_c_nr()
                                    .equals(LocaleFac.POSITIONSART_HANDEINGABE)
                                    && iOptionGruppierung
                                            .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_JAHR)
                            || (lieferscheinpos.getPositionsart_c_nr()
                                    .equals(LocaleFac.POSITIONSART_HANDEINGABE)
                                    && iOptionGruppierung
                                            .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_MONAT)) {
                        BigDecimal gestpreis = new BigDecimal(0);
                        BigDecimal deckungsbeitrag = new BigDecimal(0);
                        if (ohneDBBetrachtung == false) {
                            try {

                                /**
                                 * @todo Berechnung fuer negative
                                 *       Lieferscheinpositionen einbauen
                                 */
                                if (lieferscheinpos.getN_menge().doubleValue() < 0) {
                                    if (umsatz != null) {
                                        gestpreis = umsatz;
                                    }
                                } else {

                                    if (!rechpos.getPositionsart_c_nr()
                                            .equals(LocaleFac.POSITIONSART_HANDEINGABE)) {

                                        // PJ 16882
                                        if (lieferscheinpos.getFlrartikel() != null
                                                && Helper.short2boolean(lieferscheinpos.getFlrartikel()
                                                        .getB_lagerbewirtschaftet()) == false
                                                && !lieferscheinpos.getFlrartikel().getArtikelart_c_nr()
                                                        .equals(ArtikelFac.ARTIKELART_ARBEITSZEIT)) {
                                            gestpreis = new BigDecimal(0);
                                        } else {
                                            gestpreis = getLagerFac()
                                                    .getGemittelterGestehungspreisEinerAbgangsposition(
                                                            LocaleFac.BELEGART_LIEFERSCHEIN,
                                                            lieferscheinpos.getI_id());
                                            gestpreis = gestpreis.multiply(lieferscheinpos.getN_menge());
                                        }

                                    }
                                }
                            } catch (RemoteException ex2) {
                                if (ex2.getCause() instanceof EJBExceptionLP) {
                                    if (((EJBExceptionLP) ex2.getCause())
                                            .getCode() == EJBExceptionLP.ARTIKEL_KEINE_LAGERBUCHUNG_VORHANDEN) {
                                        // DANN ALLES OK
                                    } else {
                                        throwEJBExceptionLPRespectOld(ex2);
                                    }
                                } else {
                                    throwEJBExceptionLPRespectOld(ex2);
                                }
                            }
                            deckungsbeitrag = umsatzLs.subtract(gestpreis);
                        }

                        // GESAMTSUMME

                        if (rechpos.getPositionsart_c_nr().equals(LocaleFac.POSITIONSART_HANDEINGABE)) {
                            deckungsbeitrag = umsatzLs;
                        }

                        kdums.setBdUmsatz(kdums.getBdUmsatz().add(umsatzLs));
                        kdums.setBdDeckungsbeitrag(kdums.getBdDeckungsbeitrag().add(deckungsbeitrag));

                        if (iOptionGruppierung
                                .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_ARTIKELKLASSE) {
                            if (lieferscheinpos.getFlrartikel().getFlrartikelklasse() != null) {
                                // Bei richtiger Artikelklasse einfuegen

                                for (int j = 0; j < gruppierung.size(); j++) {
                                    if (gruppierung.get(j).equals(
                                            lieferscheinpos.getFlrartikel().getFlrartikelklasse().getC_nr())) {
                                        kdums.getSubSummeUmsatz()[j + 1] = kdums.getSubSummeUmsatz()[j + 1]
                                                .add(umsatzLs);
                                        kdums.getSubSummeDeckungsbeitrag()[j
                                                + 1] = kdums.getSubSummeDeckungsbeitrag()[j + 1]
                                                        .add(deckungsbeitrag);
                                        bSpalteAndrucken[j] = true;

                                    }
                                }
                            } else {
                                kdums.getSubSummeUmsatz()[0] = kdums.getSubSummeUmsatz()[0].add(umsatzLs);
                                kdums.getSubSummeDeckungsbeitrag()[0] = kdums.getSubSummeDeckungsbeitrag()[0]
                                        .add(deckungsbeitrag);
                            }
                        } else if (iOptionGruppierung
                                .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_ARTIKELGRUPPE) {
                            if (lieferscheinpos.getFlrartikel().getFlrartikelgruppe() != null) {
                                // Bei richtiger Gruppe einfuegen

                                for (int j = 0; j < gruppierung.size(); j++) {
                                    if (gruppierung.get(j).equals(
                                            lieferscheinpos.getFlrartikel().getFlrartikelgruppe().getC_nr())) {
                                        kdums.getSubSummeUmsatz()[j + 1] = kdums.getSubSummeUmsatz()[j + 1]
                                                .add(umsatzLs);
                                        kdums.getSubSummeDeckungsbeitrag()[j
                                                + 1] = kdums.getSubSummeDeckungsbeitrag()[j + 1]
                                                        .add(deckungsbeitrag);
                                        bSpalteAndrucken[j] = true;

                                    }
                                }
                            } else {
                                kdums.getSubSummeUmsatz()[0] = kdums.getSubSummeUmsatz()[0].add(umsatzLs);
                                kdums.getSubSummeDeckungsbeitrag()[0] = kdums.getSubSummeDeckungsbeitrag()[0]
                                        .add(deckungsbeitrag);
                            }
                        } else if (iOptionGruppierung
                                .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_FERTIGUNGSGRUPPE) {

                            Session sessionFTGruppe = FLRSessionFactory.getFactory().openSession();

                            String queryString = "SELECT stkl.flrfertigungsgruppe FROM FLRStueckliste AS stkl"
                                    + " WHERE stkl.artikel_i_id= " + lieferscheinpos.getFlrartikel().getI_id();

                            Query query = sessionFTGruppe.createQuery(queryString);
                            List<?> resultList = query.list();
                            Iterator<?> resultListIteratorFTGruppe = resultList.iterator();

                            if (resultListIteratorFTGruppe.hasNext()) {
                                FLRFertigungsgruppe gru = (FLRFertigungsgruppe) resultListIteratorFTGruppe
                                        .next();

                                if (gru != null) {
                                    // Bei richtiger Gruppe einfuegen
                                    for (int j = 0; j < gruppierung.size(); j++) {
                                        if (gruppierung.get(j).equals(gru.getC_bez())) {
                                            kdums.getSubSummeUmsatz()[j + 1] = kdums.getSubSummeUmsatz()[j + 1]
                                                    .add(umsatzLs);
                                            kdums.getSubSummeDeckungsbeitrag()[j
                                                    + 1] = kdums.getSubSummeDeckungsbeitrag()[j + 1]
                                                            .add(deckungsbeitrag);
                                            bSpalteAndrucken[j] = true;
                                        }
                                    }
                                } else {
                                    kdums.getSubSummeUmsatz()[0] = kdums.getSubSummeUmsatz()[0].add(umsatzLs);
                                    kdums.getSubSummeDeckungsbeitrag()[0] = kdums
                                            .getSubSummeDeckungsbeitrag()[0].add(deckungsbeitrag);
                                }
                                sessionFTGruppe.close();
                            }
                        } else if (iOptionGruppierung
                                .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_JAHR) {

                            Calendar cZeile = Calendar.getInstance();
                            cZeile.setTimeInMillis(rechpos.getFlrrechnung().getD_belegdatum().getTime());
                            String jahr = cZeile.get(Calendar.YEAR) + "";

                            for (int j = 0; j < gruppierung.size(); j++) {
                                if (gruppierung.get(j).equals(jahr)) {
                                    kdums.getSubSummeUmsatz()[j + 1] = kdums.getSubSummeUmsatz()[j + 1]
                                            .add(umsatzLs);
                                    kdums.getSubSummeDeckungsbeitrag()[j
                                            + 1] = kdums.getSubSummeDeckungsbeitrag()[j + 1]
                                                    .add(deckungsbeitrag);
                                    bSpalteAndrucken[j] = true;
                                }
                            }
                        } else if (iOptionGruppierung
                                .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_MONAT) {

                            Calendar cZeile = Calendar.getInstance();
                            cZeile.setTimeInMillis(rechpos.getFlrrechnung().getD_belegdatum().getTime());
                            String jahrMonat = monate[cZeile.get(Calendar.MONTH)] + " "
                                    + cZeile.get(Calendar.YEAR);

                            for (int j = 0; j < gruppierung.size(); j++) {
                                if (gruppierung.get(j).equals(jahrMonat)) {
                                    kdums.getSubSummeUmsatz()[j + 1] = kdums.getSubSummeUmsatz()[j + 1]
                                            .add(umsatzLs);
                                    kdums.getSubSummeDeckungsbeitrag()[j
                                            + 1] = kdums.getSubSummeDeckungsbeitrag()[j + 1]
                                                    .add(deckungsbeitrag);
                                    bSpalteAndrucken[j] = true;
                                }
                            }
                        }
                    }

                }
                session3.close();

            }
        }
        session2.close();
        if (results2.size() > 0) {
            gesamtListe.add(kdums);

            gesamtUmsatz = gesamtUmsatz.add(kdums.getBdUmsatz());
            gesamtDeckungsbeitrag = gesamtDeckungsbeitrag.add(kdums.getBdDeckungsbeitrag());
        }
    }
    session.close();

    JasperPrintLP print = null;

    // NACH UMSATZ SORTIEREN
    int n = gesamtListe.size();
    Object temp;
    for (int i = 0; i < n - 1; i++) {
        for (int j = 0; j < n - 1 - i; j++) {

            if (bUmsatz == true) {

                double a = ((KundeUmsatzstatistikDto) gesamtListe.get(j)).getBdUmsatz().doubleValue();
                double b = ((KundeUmsatzstatistikDto) gesamtListe.get(j + 1)).getBdUmsatz().doubleValue();

                if (iOptionGruppierung == REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_JAHR
                        && iOptionSortierung == REPORT_KUNDEUMSATZSTATISTIK_OPTION_SORTIERUNG_UMSATZ) {
                    if (iSortierbasisJahre == REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_JAHRE_SORTIERBASIS_UMSATZ_AKTUELLESJAHR) {
                        a = ((KundeUmsatzstatistikDto) gesamtListe.get(j))
                                .getSubSummeUmsatz()[((KundeUmsatzstatistikDto) gesamtListe.get(j))
                                        .getSubSummeUmsatz().length - 1].doubleValue();
                        b = ((KundeUmsatzstatistikDto) gesamtListe.get(j + 1))
                                .getSubSummeUmsatz()[((KundeUmsatzstatistikDto) gesamtListe.get(j))
                                        .getSubSummeUmsatz().length - 1].doubleValue();
                    } else if (iSortierbasisJahre == REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_JAHRE_SORTIERBASIS_UMSATZ_VORJAHR
                            && ((KundeUmsatzstatistikDto) gesamtListe.get(j)).getSubSummeUmsatz().length > 1) {
                        a = ((KundeUmsatzstatistikDto) gesamtListe.get(j))
                                .getSubSummeUmsatz()[((KundeUmsatzstatistikDto) gesamtListe.get(j))
                                        .getSubSummeUmsatz().length - 2].doubleValue();
                        b = ((KundeUmsatzstatistikDto) gesamtListe.get(j + 1))
                                .getSubSummeUmsatz()[((KundeUmsatzstatistikDto) gesamtListe.get(j))
                                        .getSubSummeUmsatz().length - 2].doubleValue();
                    }
                }

                if (a < b) {
                    temp = gesamtListe.get(j);
                    gesamtListe.set(j, gesamtListe.get(j + 1));
                    gesamtListe.set(j + 1, temp);
                }
            } else {
                double a = ((KundeUmsatzstatistikDto) gesamtListe.get(j)).getBdDeckungsbeitrag().doubleValue();
                double b = ((KundeUmsatzstatistikDto) gesamtListe.get(j + 1)).getBdDeckungsbeitrag()
                        .doubleValue();

                if (iOptionGruppierung == REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_JAHR
                        && iOptionSortierung == REPORT_KUNDEUMSATZSTATISTIK_OPTION_SORTIERUNG_UMSATZ) {
                    if (iSortierbasisJahre == REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_JAHRE_SORTIERBASIS_UMSATZ_AKTUELLESJAHR) {
                        a = ((KundeUmsatzstatistikDto) gesamtListe.get(j))
                                .getSubSummeDeckungsbeitrag()[((KundeUmsatzstatistikDto) gesamtListe.get(j))
                                        .getSubSummeDeckungsbeitrag().length - 1].doubleValue();
                        b = ((KundeUmsatzstatistikDto) gesamtListe.get(j + 1))
                                .getSubSummeDeckungsbeitrag()[((KundeUmsatzstatistikDto) gesamtListe.get(j))
                                        .getSubSummeDeckungsbeitrag().length - 1].doubleValue();
                    } else if (iSortierbasisJahre == REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_JAHRE_SORTIERBASIS_UMSATZ_VORJAHR
                            && ((KundeUmsatzstatistikDto) gesamtListe.get(j))
                                    .getSubSummeDeckungsbeitrag().length > 1) {
                        a = ((KundeUmsatzstatistikDto) gesamtListe.get(j))
                                .getSubSummeDeckungsbeitrag()[((KundeUmsatzstatistikDto) gesamtListe.get(j))
                                        .getSubSummeDeckungsbeitrag().length - 2].doubleValue();
                        b = ((KundeUmsatzstatistikDto) gesamtListe.get(j + 1))
                                .getSubSummeDeckungsbeitrag()[((KundeUmsatzstatistikDto) gesamtListe.get(j))
                                        .getSubSummeDeckungsbeitrag().length - 2].doubleValue();
                    }
                }

                if (a < b) {
                    temp = gesamtListe.get(j);
                    gesamtListe.set(j, gesamtListe.get(j + 1));
                    gesamtListe.set(j + 1, temp);
                }

            }
        }
    }

    // ABC-Klassifizierung
    // A=80%
    // B=15%
    // C=5%

    double dTempUmsatz = gesamtUmsatz.doubleValue();
    double dTempDeckungsbeitrag = gesamtDeckungsbeitrag.doubleValue();

    ParametermandantDto mandantparameterA = null;
    ParametermandantDto mandantparameterB = null;
    try {
        mandantparameterA = getParameterFac().getMandantparameter(theClientDto.getMandant(),
                ParameterFac.KATEGORIE_KUNDEN, ParameterFac.PARAMETER_KUNDENBEWERTUNG_WERT_A);
        mandantparameterB = getParameterFac().getMandantparameter(theClientDto.getMandant(),
                ParameterFac.KATEGORIE_KUNDEN, ParameterFac.PARAMETER_KUNDENBEWERTUNG_WERT_B);

    } catch (RemoteException ex3) {
        throwEJBExceptionLPRespectOld(ex3);
    }

    BigDecimal paramBUmsatz = gesamtUmsatz.multiply((new BigDecimal(mandantparameterB.getCWert())
            .divide(new BigDecimal(100), 4, BigDecimal.ROUND_HALF_EVEN)));

    BigDecimal paramAUmsatz = gesamtUmsatz.multiply((new BigDecimal(mandantparameterA.getCWert())
            .divide(new BigDecimal(100), 4, BigDecimal.ROUND_HALF_EVEN)));

    BigDecimal paramBDeckungsbeitrag = gesamtDeckungsbeitrag
            .multiply((new BigDecimal(mandantparameterB.getCWert()).divide(new BigDecimal(100), 4,
                    BigDecimal.ROUND_HALF_EVEN)));

    BigDecimal paramADeckungsbeitrag = gesamtDeckungsbeitrag
            .multiply((new BigDecimal(mandantparameterA.getCWert()).divide(new BigDecimal(100), 4,
                    BigDecimal.ROUND_HALF_EVEN)));

    for (int i = 0; i < gesamtListe.size(); i++) {
        KundeUmsatzstatistikDto dto = (KundeUmsatzstatistikDto) gesamtListe.get(i);

        if (bUmsatz == true) {
            if (dTempUmsatz < gesamtUmsatz.doubleValue()
                    - (paramAUmsatz.doubleValue() + paramBUmsatz.doubleValue())) {
                dto.setAbcKlassifizierung("C");
            } else if (dTempUmsatz < paramBUmsatz.doubleValue()) {
                dto.setAbcKlassifizierung("B");
            } else {
                dto.setAbcKlassifizierung("A");
            }

            dTempUmsatz = dTempUmsatz - dto.getBdUmsatz().doubleValue();
        } else {
            if (dTempDeckungsbeitrag < gesamtDeckungsbeitrag.doubleValue()
                    - (paramADeckungsbeitrag.doubleValue() + paramBDeckungsbeitrag.doubleValue())) {
                dto.setAbcKlassifizierung("C");
            } else if (dTempDeckungsbeitrag < paramBDeckungsbeitrag.doubleValue()) {
                dto.setAbcKlassifizierung("B");
            } else {
                dto.setAbcKlassifizierung("A");
            }

            dTempDeckungsbeitrag = dTempDeckungsbeitrag - dto.getBdDeckungsbeitrag().doubleValue();

        }
        gesamtListe.set(i, dto);
    }

    // Nach Name sortieren

    // NACH NAME SORTIEREN, Wenn angegeben

    if (iOptionSortierung
            .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_SORTIERUNG_FIRMANNAME) {
        n = gesamtListe.size();
        for (int i = 0; i < n - 1; i++) {
            for (int j = 0; j < n - 1 - i; j++) {
                String a = ((KundeUmsatzstatistikDto) gesamtListe.get(j)).getSKunde();
                String b = ((KundeUmsatzstatistikDto) gesamtListe.get(j + 1)).getSKunde();
                if (a.compareTo(b) > 0) {
                    temp = gesamtListe.get(j);
                    gesamtListe.set(j, gesamtListe.get(j + 1));
                    gesamtListe.set(j + 1, temp);
                }
            }
        }
    }

    else if (iOptionSortierung.intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_SORTIERUNG_LKZ) {
        n = gesamtListe.size();
        for (int i = 0; i < n - 1; i++) {
            for (int j = 0; j < n - 1 - i; j++) {
                String a = ((KundeUmsatzstatistikDto) gesamtListe.get(j)).getSLkz();
                String b = ((KundeUmsatzstatistikDto) gesamtListe.get(j + 1)).getSLkz();
                if (a.compareTo(b) > 0) {
                    temp = gesamtListe.get(j);
                    gesamtListe.set(j, gesamtListe.get(j + 1));
                    gesamtListe.set(j + 1, temp);
                } else if (a.compareTo(b) == 0) {
                    String plz1 = ((KundeUmsatzstatistikDto) gesamtListe.get(j)).getSPlz();
                    String plz2 = ((KundeUmsatzstatistikDto) gesamtListe.get(j + 1)).getSPlz();

                    if (plz1.compareTo(plz2) > 0) {
                        temp = gesamtListe.get(j);
                        gesamtListe.set(j, gesamtListe.get(j + 1));
                        gesamtListe.set(j + 1, temp);
                    }

                }
            }
        }
    }

    // Nach Branche/Partnerklasse Gruppieren

    if (iOptionKundengruppierung
            .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_KUNDENGRUPPIERUNG_BRANCHE
            || iOptionKundengruppierung
                    .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_KUNDENGRUPPIERUNG_PARTNERKLASSE) {
        n = gesamtListe.size();
        for (int i = 0; i < n - 1; i++) {
            for (int j = 0; j < n - 1 - i; j++) {
                String a = ((KundeUmsatzstatistikDto) gesamtListe.get(j)).getSKundengruppierung();
                String b = ((KundeUmsatzstatistikDto) gesamtListe.get(j + 1)).getSKundengruppierung();
                if (a.compareTo(b) > 0) {
                    temp = gesamtListe.get(j);
                    gesamtListe.set(j, gesamtListe.get(j + 1));
                    gesamtListe.set(j + 1, temp);
                }
            }
        }

    }

    // SPALTENHEADER entfernen, wenn Spalte leer
    for (int i = bSpalteAndrucken.length; i > 0; i--) {
        if (bSpalteAndrucken[i - 1] == false) {
            gruppierung.remove(i - 1);
        }
    }

    int[] spaltenDrucken = new int[gruppierung.size() + 1];
    spaltenDrucken[0] = 0;
    int x = 1;
    for (int i = 1; i < bSpalteAndrucken.length + 1; i++) {
        if (bSpalteAndrucken[i - 1] == true) {
            spaltenDrucken[x] = i;
            x++;
        }
    }

    int seiten_breite = (gruppierung.size() / 8) + 1;

    for (int i = 0; i < seiten_breite; i++) {
        index = -1;
        if (bUmsatz == true) {
            sAktuellerReport = LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK;
        } else {
            sAktuellerReport = LagerReportFac.REPORT_KUNDEDBSTATISTIK;
        }
        data = new Object[gesamtListe.size()][28];
        for (int j = 0; j < gesamtListe.size(); j++) {
            KundeUmsatzstatistikDto dto = (KundeUmsatzstatistikDto) gesamtListe.get(j);
            data[j][REPORT_KUNDEUMSATZSTATISTIK_KUNDENGRUPPIERUNG] = dto.getSKundengruppierung();
            data[j][REPORT_KUNDEUMSATZSTATISTIK_KUNDE] = dto.getSKunde();
            data[j][REPORT_KUNDEUMSATZSTATISTIK_UMSATZ] = dto.getBdUmsatz();
            data[j][REPORT_KUNDEUMSATZSTATISTIK_PLZ] = dto.getSPlz();
            data[j][REPORT_KUNDEUMSATZSTATISTIK_LKZ] = dto.getSLkz();
            data[j][REPORT_KUNDEUMSATZSTATISTIK_KUNDENNUMMER] = dto.getIKundennummer();
            data[j][REPORT_KUNDEUMSATZSTATISTIK_DECKUNGSBEITRAG] = dto.getBdDeckungsbeitrag();
            data[j][REPORT_KUNDEUMSATZSTATISTIK_ERSTUMSATZ] = new Boolean(dto.isBErstumsatz());
            data[j][REPORT_KUNDEUMSATZSTATISTIK_ABCKLASSE] = dto.getAbcKlassifizierung();
            data[j][REPORT_KUNDEUMSATZSTATISTIK_ZAHLUNGSZIEL] = getMandantFac()
                    .zahlungszielFindByIIdLocaleOhneExc(dto.getIZahlungsziel(), theClientDto.getLocMandant(),
                            theClientDto);
            data[j][REPORT_KUNDEUMSATZSTATISTIK_LIEFERART] = getLocaleFac().lieferartFindByIIdLocaleOhneExc(
                    dto.getILieferart(), theClientDto.getLocMandant(), theClientDto);
            data[j][REPORT_KUNDEUMSATZSTATISTIK_SPEDITEUR] = getMandantFac()
                    .spediteurFindByPrimaryKey(dto.getISpediteur()).getCNamedesspediteurs();

            try {
                if (i == 0) {
                    data[j][REPORT_KUNDEUMSATZSTATISTIK_SPALTE1] = dto.getSubSummeUmsatz()[0];
                    data[j][REPORT_KUNDEUMSATZSTATISTIK_SPALTE1DB] = dto.getSubSummeDeckungsbeitrag()[0];
                } else {
                    data[j][REPORT_KUNDEUMSATZSTATISTIK_SPALTE1] = dto
                            .getSubSummeUmsatz()[spaltenDrucken[0 + (i * 8)]];
                    data[j][REPORT_KUNDEUMSATZSTATISTIK_SPALTE1DB] = dto
                            .getSubSummeDeckungsbeitrag()[spaltenDrucken[0 + (i * 8)]];
                }
                data[j][REPORT_KUNDEUMSATZSTATISTIK_SPALTE2] = dto
                        .getSubSummeUmsatz()[spaltenDrucken[1 + (i * 8)]];
                data[j][REPORT_KUNDEUMSATZSTATISTIK_SPALTE2DB] = dto
                        .getSubSummeDeckungsbeitrag()[spaltenDrucken[1 + (i * 8)]];
                data[j][REPORT_KUNDEUMSATZSTATISTIK_SPALTE3] = dto
                        .getSubSummeUmsatz()[spaltenDrucken[2 + (i * 8)]];
                data[j][REPORT_KUNDEUMSATZSTATISTIK_SPALTE3DB] = dto
                        .getSubSummeDeckungsbeitrag()[spaltenDrucken[2 + (i * 8)]];
                data[j][REPORT_KUNDEUMSATZSTATISTIK_SPALTE4] = dto
                        .getSubSummeUmsatz()[spaltenDrucken[3 + (i * 8)]];
                data[j][REPORT_KUNDEUMSATZSTATISTIK_SPALTE4DB] = dto
                        .getSubSummeDeckungsbeitrag()[spaltenDrucken[3 + (i * 8)]];
                data[j][REPORT_KUNDEUMSATZSTATISTIK_SPALTE5] = dto
                        .getSubSummeUmsatz()[spaltenDrucken[4 + (i * 8)]];
                data[j][REPORT_KUNDEUMSATZSTATISTIK_SPALTE5DB] = dto
                        .getSubSummeDeckungsbeitrag()[spaltenDrucken[4 + (i * 8)]];
                data[j][REPORT_KUNDEUMSATZSTATISTIK_SPALTE6] = dto
                        .getSubSummeUmsatz()[spaltenDrucken[5 + (i * 8)]];
                data[j][REPORT_KUNDEUMSATZSTATISTIK_SPALTE6DB] = dto
                        .getSubSummeDeckungsbeitrag()[spaltenDrucken[5 + (i * 8)]];
                data[j][REPORT_KUNDEUMSATZSTATISTIK_SPALTE7] = dto
                        .getSubSummeUmsatz()[spaltenDrucken[6 + (i * 8)]];
                data[j][REPORT_KUNDEUMSATZSTATISTIK_SPALTE7DB] = dto
                        .getSubSummeDeckungsbeitrag()[spaltenDrucken[6 + (i * 8)]];
                data[j][REPORT_KUNDEUMSATZSTATISTIK_SPALTE8] = dto
                        .getSubSummeUmsatz()[spaltenDrucken[7 + (i * 8)]];
                data[j][REPORT_KUNDEUMSATZSTATISTIK_SPALTE8DB] = dto
                        .getSubSummeDeckungsbeitrag()[spaltenDrucken[7 + (i * 8)]];
            } catch (ArrayIndexOutOfBoundsException ex1) {
                // nothing
            }

        }

        HashMap<String, Object> parameter = new HashMap<String, Object>();
        parameter.put("P_VON", tVon);
        parameter.put("P_BIS", tBis);

        if (bUmsatz == true) {
            parameter.put("P_UMSATZ", new Boolean(true));
        } else {
            parameter.put("P_UMSATZ", new Boolean(false));
        }

        if (iOptionKundengruppierung
                .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_KUNDENGRUPPIERUNG_BRANCHE) {
            parameter.put("P_GRUPPIERUNGKUNDE",
                    getTextRespectUISpr("lp.branche", theClientDto.getMandant(), theClientDto.getLocUi()));
        } else if (iOptionKundengruppierung
                .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_KUNDENGRUPPIERUNG_PARTNERKLASSE) {
            parameter.put("P_GRUPPIERUNGKUNDE", "Partnerklasse");
        }

        if (iOptionGruppierung
                .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_ARTIKELKLASSE) {
            parameter.put("P_GRUPPIERUNG", getTextRespectUISpr("lp.artikelklasse", theClientDto.getMandant(),
                    theClientDto.getLocUi()));
        } else if (iOptionGruppierung
                .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_ARTIKELGRUPPE) {
            parameter.put("P_GRUPPIERUNG", getTextRespectUISpr("lp.artikelgruppe", theClientDto.getMandant(),
                    theClientDto.getLocUi()));

        } else if (iOptionGruppierung
                .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_FERTIGUNGSGRUPPE) {
            parameter.put("P_GRUPPIERUNG", getTextRespectUISpr("lp.fertigungsgruppe", theClientDto.getMandant(),
                    theClientDto.getLocUi()));

        } else if (iOptionGruppierung
                .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_JAHR) {
            parameter.put("P_GRUPPIERUNG",
                    getTextRespectUISpr("lp.jahr", theClientDto.getMandant(), theClientDto.getLocUi()));

        } else if (iOptionGruppierung
                .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_JAHR) {
            parameter.put("P_GRUPPIERUNG",
                    getTextRespectUISpr("lp.monat", theClientDto.getMandant(), theClientDto.getLocUi()));

        }
        if (iOptionSortierung
                .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_SORTIERUNG_FIRMANNAME) {
            parameter.put("P_SORTIERUNG", "Firmenname");
        } else if (iOptionSortierung
                .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_SORTIERUNG_UMSATZ) {
            parameter.put("P_SORTIERUNG",
                    getTextRespectUISpr("er.umsatz", theClientDto.getMandant(), theClientDto.getLocUi()));

        } else if (iOptionSortierung
                .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_SORTIERUNG_LKZ) {
            parameter.put("P_SORTIERUNG",
                    getTextRespectUISpr("lp.lkzplz", theClientDto.getMandant(), theClientDto.getLocUi()));

        }
        parameter.put("P_STATISTIKADRESSE", new Boolean(bVerwendeStatistikadresse));

        parameter.put("P_MITNICHTLAGERBEWERTETENARTIKELN", new Boolean(bMitNichtLagerbewertetenArtikeln));
        parameter.put("P_OHNE_DBBETRACHTUNG", new Boolean(ohneDBBetrachtung));

        try {

            parameter.put("P_GRUPPEA", mandantparameterA.getCWertAsObject());
            parameter.put("P_GRUPPEB", mandantparameterB.getCWertAsObject());

            if (i == 0) {
                parameter.put("Spalte1", "Unbekannt");
                parameter.put("Spalte2", gruppierung.get(0 + (i * 8)));
                parameter.put("Spalte3", gruppierung.get(1 + (i * 8)));
                parameter.put("Spalte4", gruppierung.get(2 + (i * 8)));
                parameter.put("Spalte5", gruppierung.get(3 + (i * 8)));
                parameter.put("Spalte6", gruppierung.get(4 + (i * 8)));
                parameter.put("Spalte7", gruppierung.get(5 + (i * 8)));
                parameter.put("Spalte8", gruppierung.get(6 + (i * 8)));

            } else {

                parameter.put("Spalte1", gruppierung.get(7 + (i * 8) - 8));
                parameter.put("Spalte2", gruppierung.get(8 + (i * 8) - 8));
                parameter.put("Spalte3", gruppierung.get(1 + (i * 8)));
                parameter.put("Spalte4", gruppierung.get(2 + (i * 8)));
                parameter.put("Spalte5", gruppierung.get(3 + (i * 8)));
                parameter.put("Spalte6", gruppierung.get(4 + (i * 8)));
                parameter.put("Spalte7", gruppierung.get(5 + (i * 8)));
                parameter.put("Spalte8", gruppierung.get(6 + (i * 80)));

            }

        } catch (IndexOutOfBoundsException ex1) {
            // nothing
        }
        initJRDS(parameter, LagerReportFac.REPORT_MODUL, sAktuellerReport, theClientDto.getMandant(),
                theClientDto.getLocUi(), theClientDto);

        if (print == null) {
            print = getReportPrint();
        } else {
            print = Helper.addReport2Report(print, getReportPrint().getPrint());
        }
    }

    return print;

}