com.lp.server.lieferschein.ejbfac.LieferscheinReportFacBean.java Source code

Java tutorial

Introduction

Here is the source code for com.lp.server.lieferschein.ejbfac.LieferscheinReportFacBean.java

Source

/*******************************************************************************
 * HELIUM V, Open Source ERP software for sustained success
 * at small and medium-sized enterprises.
 * Copyright (C) 2004 - 2014 HELIUM V IT-Solutions GmbH
 * 
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as published 
 * by the Free Software Foundation, either version 3 of theLicense, or 
 * (at your option) any later version.
 * 
 * According to sec. 7 of the GNU Affero General Public License, version 3, 
 * the terms of the AGPL are supplemented with the following terms:
 * 
 * "HELIUM V" and "HELIUM 5" are registered trademarks of 
 * HELIUM V IT-Solutions GmbH. The licensing of the program under the 
 * AGPL does not imply a trademark license. Therefore any rights, title and
 * interest in our trademarks remain entirely with us. If you want to propagate
 * modified versions of the Program under the name "HELIUM V" or "HELIUM 5",
 * you may only do so if you have a written permission by HELIUM V IT-Solutions 
 * GmbH (to acquire a permission please contact HELIUM V IT-Solutions
 * at trademark@heliumv.com).
 * 
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Affero General Public License for more details.
 * 
 * You should have received a copy of the GNU Affero General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 * 
 * Contact: developers@heliumv.com
 ******************************************************************************/
package com.lp.server.lieferschein.ejbfac;

import java.math.BigDecimal;
import java.rmi.RemoteException;
import java.sql.Date;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.TreeMap;

import javax.ejb.Stateless;
import javax.ejb.TransactionAttribute;
import javax.ejb.TransactionAttributeType;
import javax.interceptor.Interceptors;

import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRField;

import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;

import com.lp.server.angebot.service.AngebotReportFac;
import com.lp.server.angebot.service.AngebotServiceFac;
import com.lp.server.artikel.service.ArtgruDto;
import com.lp.server.artikel.service.ArtikelDto;
import com.lp.server.artikel.service.ArtikelFac;
import com.lp.server.artikel.service.LagerDto;
import com.lp.server.artikel.service.MaterialDto;
import com.lp.server.artikel.service.MaterialzuschlagDto;
import com.lp.server.artikel.service.SeriennrChargennrMitMengeDto;
import com.lp.server.artikel.service.VerkaufspreisDto;
import com.lp.server.artikel.service.VerleihDto;
import com.lp.server.artikel.service.VkpreisfindungDto;
import com.lp.server.auftrag.service.AuftragDto;
import com.lp.server.auftrag.service.AuftragReportFac;
import com.lp.server.auftrag.service.AuftragauftragdokumentDto;
import com.lp.server.auftrag.service.AuftragdokumentDto;
import com.lp.server.auftrag.service.AuftragpositionDto;
import com.lp.server.benutzer.service.RechteFac;
import com.lp.server.finanz.service.KontoDto;
import com.lp.server.finanz.service.KontoDtoSmall;
import com.lp.server.lieferschein.fastlanereader.generated.FLRLieferschein;
import com.lp.server.lieferschein.fastlanereader.generated.FLRLieferscheinReportAngelegte;
import com.lp.server.lieferschein.fastlanereader.generated.FLRLieferscheinposition;
import com.lp.server.lieferschein.service.LieferscheinDto;
import com.lp.server.lieferschein.service.LieferscheinFac;
import com.lp.server.lieferschein.service.LieferscheinReportFac;
import com.lp.server.lieferschein.service.LieferscheinServiceFac;
import com.lp.server.lieferschein.service.LieferscheinpositionDto;
import com.lp.server.lieferschein.service.LieferscheinpositionFac;
import com.lp.server.lieferschein.service.LieferscheintextDto;
import com.lp.server.lieferschein.service.ReportLieferscheinAngelegteDto;
import com.lp.server.lieferschein.service.ReportLieferscheinJournalKriterienDto;
import com.lp.server.lieferschein.service.ReportLieferscheinOffeneDto;
import com.lp.server.partner.fastlanereader.generated.FLRKunde;
import com.lp.server.partner.service.AnsprechpartnerDto;
import com.lp.server.partner.service.KundeDto;
import com.lp.server.partner.service.KundeFac;
import com.lp.server.partner.service.KundesokoDto;
import com.lp.server.partner.service.PartnerDto;
import com.lp.server.partner.service.PartnerFac;
import com.lp.server.personal.service.PersonalDto;
import com.lp.server.personal.service.PersonalFac;
import com.lp.server.projekt.service.ProjektDto;
import com.lp.server.rechnung.service.RechnungFac;
import com.lp.server.rechnung.service.RechnungkontierungDto;
import com.lp.server.stueckliste.service.StuecklisteMitStrukturDto;
import com.lp.server.stueckliste.service.StuecklistepositionDto;
import com.lp.server.system.jcr.service.PrintInfoDto;
import com.lp.server.system.pkgenerator.format.LpBelegnummerFormat;
import com.lp.server.system.service.BelegartDto;
import com.lp.server.system.service.KostenstelleDto;
import com.lp.server.system.service.LandDto;
import com.lp.server.system.service.LocaleFac;
import com.lp.server.system.service.MandantDto;
import com.lp.server.system.service.MediaFac;
import com.lp.server.system.service.MediastandardDto;
import com.lp.server.system.service.MwstsatzDto;
import com.lp.server.system.service.ParameterFac;
import com.lp.server.system.service.ParametermandantDto;
import com.lp.server.system.service.ReportJournalKriterienDto;
import com.lp.server.system.service.SpediteurDto;
import com.lp.server.system.service.SystemFac;
import com.lp.server.system.service.TheClientDto;
import com.lp.server.util.BelegPositionDruckIdentDto;
import com.lp.server.util.BelegPositionDruckTextbausteinDto;
import com.lp.server.util.HelperServer;
import com.lp.server.util.LPReport;
import com.lp.server.util.fastlanereader.FLRSessionFactory;
import com.lp.server.util.fastlanereader.service.query.QueryParameters;
import com.lp.server.util.report.JasperPrintLP;
import com.lp.server.util.report.MwstsatzReportDto;
import com.lp.server.util.report.TimingInterceptor;
import com.lp.service.StuecklisteInfoDto;
import com.lp.util.EJBExceptionLP;
import com.lp.util.Helper;
import com.lp.util.LPDatenSubreport;

@Stateless
@Interceptors(TimingInterceptor.class)
public class LieferscheinReportFacBean extends LPReport implements JRDataSource, LieferscheinReportFac {

    private String cAktuellerReport = null;
    private Object[][] data = null;

    private final static int FELD_ALLE_LIEFERSCHEINNUMMER = 0;
    private final static int FELD_ALLE_RECHNUNGSNUMMER = 1;
    private final static int FELD_ALLE_BELEGDATUM = 2;
    private final static int FELD_ALLE_KUNDE = 3;
    private final static int FELD_ALLE_KUNDE2 = 4;
    private final static int FELD_ALLE_KOSTENSTELLENUMMER = 5;
    private final static int FELD_ALLE_BETRAG = 6;
    private final static int FELD_ALLE_ORT = 7;
    private final static int FELD_ALLE_DEBITORENKONTO = 8;
    private final static int FELD_ALLE_ADRESSE = 9;
    private final static int FELD_ALLE_VERTRETER = 10;
    private final static int FELD_ALLE_KURS = 11;
    private final static int FELD_ALLE_WAEHRUNG = 12;
    private final static int FELD_ALLE_KUNDE_RECHNUNG = 13;
    private final static int FELD_ALLE_KUNDE2_RECHNUNG = 14;
    private final static int FELD_ALLE_ADRESSE_RECHNUNG = 15;
    private final static int FELD_ALLE_LAENDERART = 16;
    private final static int FELD_ALLE_PROJEKT = 17;
    private final static int FELD_ALLE_STATUS = 18;
    private final static int REPORT_ALLE_ANZAHL_SPALTEN = 19;

    public boolean next() throws JRException {
        index++;
        return (index < data.length);
    }

    public Object getFieldValue(JRField field) throws JRException {
        Object value = null;

        String fieldName = field.getName();

        if (cAktuellerReport.equals(LieferscheinReportFac.REPORT_LIEFERSCHEIN_ETIKETT)) {

            if ("Adressefuerausdruck".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_ADRESSETIKETT];
            }
        } else if (cAktuellerReport.equals(LieferscheinReportFac.REPORT_LIEFERSCHEIN_WA_ETIKETT)) {
            if ("F_IDENT".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_WA_ETIKETT_IDENT];
            } else if ("F_MENGE".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_WA_ETIKETT_MENGE];
            } else if ("F_BEZ".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_WA_ETIKETT_ARTIKEL_BEZ];
            } else if ("F_KBEZ".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_WA_ETIKETT_ARTIKEL_KBEZ];
            } else if ("F_ZBEZ".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_WA_ETIKETT_ARTIKEL_ZBEZ];
            } else if ("F_ZBEZ2".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_WA_ETIKETT_ARTIKEL_ZBEZ2];
            } else if ("F_SERIENCHARGENR".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_WA_ETIKETT_SERIENCHARGENR];
            } else if ("F_POSITION".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_WA_ETIKETT_POSITION];
            } else if ("F_EINHEIT".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_WA_ETIKETT_EINHEIT];
            } else if ("F_REFERENZNUMMER".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_WA_ETIKETT_ARTIKEL_REFERENZNUMMER];
            } else if ("F_GEWICHT".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_WA_ETIKETT_ARTIKEL_GEWICHT];
            } else if ("F_KUNDENARTIKELNUMMER".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_WA_ETIKETT_ARTIKEL_KUNDENARTIKELNUMMER];
            } else if ("F_TEXTEINGABE".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_WA_ETIKETT_ARTIKEL_TEXTEINGABE];
            } else if ("WE_REFERENZ".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_WA_ETIKETT_ARTIKEL_WE_REFERENZ];
            } else if ("F_INDEX".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_WA_ETIKETT_ARTIKEL_INDEX];
            } else if ("F_REVISION".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_WA_ETIKETT_ARTIKEL_REVISION];
            }
        } else if (cAktuellerReport.equals(LieferscheinReportFac.REPORT_LIEFERSCHEIN_VERSANDETIKETTEN)) {
            if ("F_IDENT".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_VERSANDETIKETT_IDENT];
            } else if ("F_MENGE".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_VERSANDETIKETT_ANLIEFERMENGE];
            } else if ("F_BEZEICHNUNG".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_VERSANDETIKETT_ARTIKEL_BEZ];
            } else if ("F_KURZBEZEICHNUNG".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_VERSANDETIKETT_ARTIKEL_KBEZ];
            } else if ("F_ZUSATZBEZEICHNUNG".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_VERSANDETIKETT_ARTIKEL_ZBEZ];
            } else if ("F_ZUSATZBEZEICHNUNG2".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_VERSANDETIKETT_ARTIKEL_ZBEZ2];
            } else if ("F_SERIENCHARGENR".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_VERSANDETIKETT_SERIENCHARGENR];
            } else if ("F_POSITION".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_VERSANDETIKETT_POSITION];
            } else if ("F_EINHEIT".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_VERSANDETIKETT_EINHEIT];
            } else if ("F_REFERENZNUMMER".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_VERSANDETIKETT_ARTIKEL_REFERENZNUMMER];
            } else if ("F_STUECKGEWICHT".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_VERSANDETIKETT_ARTIKEL_GEWICHT];
            } else if ("F_KUNDENARTIKELNUMMER".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_VERSANDETIKETT_ARTIKEL_KUNDENARTIKELNUMMER];
            } else if ("F_TEXTEINGABE".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_VERSANDETIKETT_ARTIKEL_TEXTEINGABE];
            } else if ("WE_REFERENZ".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_VERSANDETIKETT_ARTIKEL_WE_REFERENZ];
            } else if ("F_INDEX".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_VERSANDETIKETT_ARTIKEL_INDEX];
            } else if ("F_REVISION".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_VERSANDETIKETT_ARTIKEL_REVISION];
            } else if ("F_PAKETMENGE".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_VERSANDETIKETT_PAKETMENGE];
            } else if ("F_VERPACKUNGSMENGE".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_VERSANDETIKETT_VERPACKUNGSMENGE];
            } else if ("F_AKTUELLESPAKET".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_VERSANDETIKETT_AKTUELLESPAKET];
            }
        } else if (cAktuellerReport.equals(LieferscheinReportFac.REPORT_LIEFERSCHEIN)) {
            if ("Position".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_POSITION];
            }
            if ("POSITION_NR".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_POSITION_NR];
            } else if ("Ident".equals(fieldName)) {
                value = Helper
                        .formatStyledTextForJasper(data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_IDENT]);
            } else if ("F_LAGER_UEBERSTEUERT".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_LAGER_UEBERSTEUERT];
            } else if ("Menge".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_MENGE];
            } else if ("KeinLieferrest".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_KEIN_LIEFERREST];
            } else if ("Einheit".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_EINHEIT];
            } else if ("Bestellt".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_BESTELLT];
            } else if ("Lieferrest".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_LIEFERREST];
            } else if ("Positionsart".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_POSITIONSART];
            } else if ("Freiertext".equals(fieldName)) {
                value = Helper.formatStyledTextForJasper(
                        data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_FREIERTEXT]);
            } else if ("Leerzeile".equals(fieldName)) {
                value = Helper.formatStyledTextForJasper(
                        data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_LEERZEILE]);
            } else if ("Image".equals(fieldName)) {
                value = Helper
                        .byteArrayToImage((byte[]) data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_IMAGE]);
            } else if ("Seitenumbruch".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_SEITENUMBRUCH];
            } else if ("F_STKLMENGE".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_STKLMENGE];
            } else if ("F_STKLEINHEIT".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_STKLEINHEIT];
            } else if ("F_STKLARTIKELCNR".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_STKLARTIKELCNR];
            } else if ("F_STKLARTIKELBEZ".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_STKLARTIKELBEZ];
            } else if ("F_STKLARTIKELKBEZ".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_STKLARTIKELKBEZ];
            } else if ("F_STKLARTIKEL_KDARTIKELNR".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_STKLARTIKEL_KDARTIKELNR];
            } else if ("F_STKLARTIKEL_KDPREIS".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_STKLARTIKEL_KDPREIS];
            } else if (F_IDENTNUMMER.equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_IDENTNUMMER];
            } else if (F_BEZEICHNUNG.equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_BEZEICHNUNG];
            } else if ("F_LV_POSITION".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_LV_POSITION];
            } else if (F_KURZBEZEICHNUNG.equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_KURZBEZEICHNUNG];
            } else if ("AUFTRAG_BESTELLDATUM".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_AUFTRAG_BESTELLDATUM];
            } else if ("F_POSITIONSOBJEKT".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_POSITIONSOBJEKT];
            } else if ("AUFTRAG_BESTELLNUMMER".equals(fieldName)) {
                value = Helper.formatStyledTextForJasper(
                        data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_AUFTRAG_BESTELLNUMMER]);
            } else if ("AUFTRAG_NUMMER".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_AUFTRAG_NUMMER];
            } else if ("AUFTRAG_PROJEKT".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_AUFTRAG_PROJEKT];
            } else if ("F_WARENVERKEHRSNUMMER".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_WARENVERKEHRSNUMMER];
            } else if ("F_SERIENCHARGENR".equals(fieldName)) {
                value = Helper.formatStyledTextForJasper(
                        data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_SERIENCHARGENR]);
            } else if ("F_SERIENCHARGENR_MENGE".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_SERIENCHARGENR_MENGE];
            } else if ("F_CHARGE_MINDESTHALTBARKEIT".equals(fieldName)) {
                value = Helper.formatStyledTextForJasper(
                        data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_MINDESTHALTBARKEIT]);
            } else if (F_KUNDEARTIKELNR.equals(fieldName)) {
                value = Helper.formatStyledTextForJasper(
                        data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_KUNDEARTIKELNR]);
            } else if ("F_KUNDEARTIKELNR_LIEFERADRESSE".equals(fieldName)) {
                value = Helper.formatStyledTextForJasper(
                        data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_KUNDEARTIKELNR_LIEFERADRESSE]);
            } else if ("F_VERPACKUNGSMENGE".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_ARTIKEL_VERPACKUNGSMENGE];
            } else if ("F_ARTIKEL_WERBEABGABEPFLICHTIG".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_ARTIKEL_WERBEABGABEPFLICHTIG];
            } else if ("F_VERPACKUNGSEANNR".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_ARTIKEL_VERPACKUNGSEANNR];
            } else if ("F_VERKAUFSEANNR".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_ARTIKEL_VERKAUFSEANNR];
            } else if ("F_GEWICHT".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_ARTIKEL_GEWICHT];
            } else if ("F_VERPACKUNGSART".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_ARTIKEL_VERPACKUNGSART];
            } else if (F_REFERENZNUMMER.equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_REFERENZNUMMER];
            } else if (F_ZUSATZBEZEICHNUNG2.equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_ARTIKELCZBEZ2];
            } else if (F_ARTIKELKOMMENTAR.equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_ARTIKELKOMMENTAR];
            } else if (F_ZUSATZBEZEICHNUNG.equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_ZUSATZBEZEICHNUNG];
            } else if (F_ARTIKEL_BAUFORM.equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_BAUFORM];
            } else if (F_ARTIKEL_VERPACKUNGSART.equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_VERPACKUNGSART];
            } else if (F_ARTIKEL_MATERIAL.equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_ARTIKEL_MATERIAL];
            } else if (F_ARTIKEL_MATERIALGEWICHT.equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_ARTIKEL_MATERIALGEWICHT];
            } else if (F_ARTIKEL_KURS_MATERIALZUSCHLAG.equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_ARTIKEL_KURS_MATERIALZUSCHLAG];
            } else if (F_ARTIKEL_DATUM_MATERIALZUSCHLAG.equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_ARTIKEL_DATUM_MATERIALZUSCHLAG];
            } else if (F_ARTIKEL_BREITE.equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_ARTIKEL_BREITE];
            } else if (F_ARTIKEL_HOEHE.equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_ARTIKEL_HOEHE];
            } else if (F_ARTIKEL_TIEFE.equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_ARTIKEL_TIEFE];
            } else if (F_ARTIKEL_URSPRUNGSLAND.equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_ARTIKEL_URSPRUNGSLAND];
            } else if ("F_TYP_CNR".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_TYP_CNR];
            } else if ("F_IDENT_TEXTEINGABE".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_IDENT_TEXTEINGABE];
            } else if ("F_SETARTIKEL_TYP".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_SETARTIKEL_TYP];
            } else if ("F_SERIENNUMMERN_DER_SETPOSITIONEN".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_SERIENNUMMERN_DER_SETPOSITIONEN];
            } else if ("WE_REFERENZ".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_WE_REFERENZ];
            } else if ("F_FIBU_MWST_CODE".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_FIBU_MWST_CODE];
            } else if ("F_DOKUMENTENPFLICHTIG".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_DOKUMENTENPFLICHTIG];
            } else if ("F_ARTIKEL_INDEX".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_ARTIKEL_INDEX];
            } else if ("F_ARTIKEL_REVISION".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_ARTIKEL_REVISION];
            } else if ("F_VERLEIHTAGE".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_VERLEIHTAGE];
            } else if ("F_VERLEIHFAKTOR".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_VERLEIHFAKTOR];
            } else if ("F_LS_POSITION_NR".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_LS_POSITION_NR];
            } else if ("F_VONPOSITION".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_VONPOSITION];
            } else if ("F_BISPOSITION".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_BISPOSITION];
            } else if ("F_ZWSNETTOSUMME".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_ZWSNETTOSUMME];
            } else if ("F_ZWSTEXT".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_ZWSTEXT];
            } else if ("F_RABATT".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_RABATT];
            } else if ("F_AUFTRAG_BESTAETIGUNG_TERMIN".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_AUFTRAG_BESTAETIGUNG_TERMIN];
            } else if ("F_AUFTRAG_VERSANDWEG".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_AUFTRAG_VERSANDWEG];
            }
        } else if (cAktuellerReport.equals(LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE)) {

            if ("Lieferscheinnummer".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_LIEFERSCHEINCNR];
            } else if ("Lieferscheinkunde".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_LIEFERSCHEINKUNDE];
            } else if ("F_KOSTENSTELLECNR".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_KOSTENSTELLECNR];
            } else if ("Anlagedatum".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_ANLAGEDATUM];
            } else if ("Liefertermin".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_LIEFERTERMIN];
            } else if ("Zahlungsziel".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_ZAHLUNGSZIEL];
            } else if ("Projektbezeichnung".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_PROJEKTBEZEICHNUNG];
            } else if ("Artikelcnr".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_ARTIKELCNR];
            } else if ("Artikelbezeichnung".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_ARTIKELBEZEICHNUNG];
            } else if ("Artikelmenge".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_ARTIKELMENGE];
            } else if ("Artikeleinheit".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_ARTIKELEINHEIT];
            } else if ("Artikelnettogesamtpreisplusversteckteraufschlagminusrabatt".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_ARTIKELNETTOGESAMTPREISPLUSVERSTECKTERAUFSCHLAGMINUSRABATT];
            } else if ("Artikelgestehungspreis".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_ARTIKELGESTEHUNGSPREIS];
            } else if ("Artikeloffenerwert".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_ARTIKELOFFENERWERT];
            } else if ("Artikeloffenerdb".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_ARTIKELOFFENERDB];
            } else if ("F_AUFTRAG".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_AUFTRAGSNUMMER];
            } else if ("F_BESTELLNUMMER".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_BESTELLNUMMER];
            } else if ("F_AUFTRAG_PROJEKT".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_AUFTRAG_PROJEKT];
            } else if ("F_LIEFERART".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_LIEFERART];
            } else if ("F_LIEFERARTORT".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_LIEFERARTORT];
            } else if ("F_ZIELLAGER".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_ZIELLAGER];
            } else if ("F_ABLAGER".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_ABLAGER];
            } else if ("F_RECHNUNGSADRESSE".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_RECHNUNGSADRESSE];
            } else if ("F_VERRECHENBAR".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_VERRECHENBAR];
            } else if ("F_SPEDITEUR".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_SPEDITEUR];
            } else if ("F_TEXTEINGABE".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_TEXTEINGABE];
            }

        } else if (cAktuellerReport.equals(LieferscheinReportFac.REPORT_LIEFERSCHEIN_ANGELEGTE)) {
            if ("Lieferscheinnummer".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_ANGELEGTE_NUMMER];
            } else if ("KundeAnrede".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_ANGELEGTE_KUNDE];
            } else if ("Anlagedatum".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_ANGELEGTE_ANLAGEDATUM];
            } else if ("AngelegtVon".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_ANGELEGTE_ANGELEGTVON];
            } else if ("Auftragsnummer".equals(fieldName)) {
                value = data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_ANGELEGTE_AUFTRAGSNUMMER];
            }
        } else if (cAktuellerReport.equals(LieferscheinReportFac.REPORT_LIEFERSCHEIN_ALLE)) {
            if ("F_BELEGDATUM".equals(fieldName)) {
                value = data[index][FELD_ALLE_BELEGDATUM];
            } else if ("F_BETRAG".equals(fieldName)) {
                value = data[index][FELD_ALLE_BETRAG];
            } else if ("F_KOSTENSTELLENUMMER".equals(fieldName)) {
                value = data[index][FELD_ALLE_KOSTENSTELLENUMMER];
            } else if ("F_KUNDE".equals(fieldName)) {
                value = data[index][FELD_ALLE_KUNDE];
            } else if ("F_KUNDE2".equals(fieldName)) {
                value = data[index][FELD_ALLE_KUNDE2];
            } else if ("F_KUNDE_RECHNUNG".equals(fieldName)) {
                value = data[index][FELD_ALLE_KUNDE_RECHNUNG];
            } else if ("F_KUNDE2_RECHNUNG".equals(fieldName)) {
                value = data[index][FELD_ALLE_KUNDE2_RECHNUNG];
            } else if ("F_ORT".equals(fieldName)) {
                value = data[index][FELD_ALLE_ORT];
            } else if ("F_RECHNUNGSNUMMER".equals(fieldName)) {
                value = data[index][FELD_ALLE_RECHNUNGSNUMMER];
            } else if ("F_LIEFERSCHEINNUMMER".equals(fieldName)) {
                value = data[index][FELD_ALLE_LIEFERSCHEINNUMMER];
            } else if ("F_DEBITORENKONTO".equals(fieldName)) {
                value = data[index][FELD_ALLE_DEBITORENKONTO];
            } else if ("F_ADRESSE".equals(fieldName)) {
                value = data[index][FELD_ALLE_ADRESSE];
            } else if ("F_ADRESSE_RECHNUNG".equals(fieldName)) {
                value = data[index][FELD_ALLE_ADRESSE_RECHNUNG];
            } else if ("F_VERTRETER".equals(fieldName)) {
                value = data[index][FELD_ALLE_VERTRETER];
            } else if ("F_WAEHRUNG".equals(fieldName)) {
                value = data[index][FELD_ALLE_WAEHRUNG];
            } else if ("F_KURS".equals(fieldName)) {
                value = data[index][FELD_ALLE_KURS];
            } else if ("F_LAENDERART".equals(fieldName)) {
                value = data[index][FELD_ALLE_LAENDERART];
            } else if ("F_PROJEKT".equals(fieldName)) {
                value = data[index][FELD_ALLE_PROJEKT];
            } else if ("F_STATUS".equals(fieldName)) {
                value = data[index][FELD_ALLE_STATUS];
            }
        }

        return value;
    }

    @TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
    public JasperPrintLP[] printLieferschein(Integer iIdLieferscheinI, Integer iAnzahlKopienI, Boolean bMitLogo,
            TheClientDto theClientDto) throws EJBExceptionLP {
        return printLieferschein(iIdLieferscheinI, iAnzahlKopienI, bMitLogo, LocaleFac.BELEGART_LIEFERSCHEIN,
                theClientDto);

    }

    @TransactionAttribute(TransactionAttributeType.NEVER)
    public JasperPrintLP printLieferscheinAlle(ReportLieferscheinJournalKriterienDto krit,
            TheClientDto theClientDto) {
        Session session = null;
        try {
            cAktuellerReport = LieferscheinReportFac.REPORT_LIEFERSCHEIN_ALLE;
            SessionFactory factory = FLRSessionFactory.getFactory();
            session = factory.openSession();
            // Kunde oder Statistikadresse verwenden
            final String critKundeIId;
            final String critFLRKunde;
            if (krit.getBVerwendeRechnungsAdresse()) {
                critKundeIId = LieferscheinFac.FLR_LIEFERSCHEIN_KUNDE_I_ID_RECHNUNGSADRESSE;
                critFLRKunde = LieferscheinFac.FLR_LIEFERSCHEIN_FLRKUNDERECHNUNGSADRESSE;
            } else {
                critKundeIId = LieferscheinFac.FLR_LIEFERSCHEIN_KUNDE_I_ID_LIEFERADRESSE;
                critFLRKunde = LieferscheinFac.FLR_LIEFERSCHEIN_FLRKUNDE;
            }

            Criteria c = session.createCriteria(FLRLieferschein.class);
            // Filter nach Mandant
            c.add(Restrictions.eq(LieferscheinFac.FLR_LIEFERSCHEIN_MANDANT_C_NR, theClientDto.getMandant()));

            // Filter nach Kostenstelle
            if (krit.kostenstelleIId != null) {
                c.add(Restrictions.eq(LieferscheinFac.FLR_LIEFERSCHEIN_KOSTENSTELLE_I_ID, krit.kostenstelleIId));
            }
            // Filter nach einem Kunden
            if (krit.kundeIId != null) {
                c.add(Restrictions.eq(critKundeIId, krit.kundeIId));
            }
            // Filter nach einem Vertrter
            if (krit.vertreterIId != null) {
                c.add(Restrictions.eq(LieferscheinFac.FLR_LIEFERSCHEIN_FLRVERTRETER + ".i_id", krit.vertreterIId));
            }
            // Filter nach Status (keine stornierten)
            c.add(Restrictions.not(Restrictions.eq(LieferscheinFac.FLR_LIEFERSCHEIN_LIEFERSCHEINSTATUS_STATUS_C_NR,
                    LieferscheinFac.LSSTATUS_STORNIERT)));
            // Nur offene anzeigen?
            if (krit.getBNurOffene()) {
                Collection<String> cStati = new LinkedList<String>();
                cStati.add(LieferscheinFac.LSSTATUS_ANGELEGT);
                cStati.add(LieferscheinFac.LSSTATUS_OFFEN);
                c.add(Restrictions.in(LieferscheinFac.FLR_LIEFERSCHEIN_LIEFERSCHEINSTATUS_STATUS_C_NR, cStati));
            }
            // Datum von/bis
            String sVon = null;
            String sBis = null;
            if (krit.dVon != null) {
                c.add(Restrictions.ge(LieferscheinFac.FLR_LIEFERSCHEIN_D_BELEGDATUM, krit.dVon));
                sVon = Helper.formatDatum(krit.dVon, theClientDto.getLocUi());
            }
            if (krit.dBis != null) {
                c.add(Restrictions.le(LieferscheinFac.FLR_LIEFERSCHEIN_D_BELEGDATUM, krit.dBis));
                sBis = Helper.formatDatum(krit.dBis, theClientDto.getLocUi());
            }

            // Belegnummer von/bis
            LpBelegnummerFormat f = getBelegnummerGeneratorObj().getBelegnummernFormat(theClientDto.getMandant());
            Integer iGeschaeftsjahr = getParameterFac().getGeschaeftsjahr(theClientDto.getMandant());
            String sMandantKuerzel = getParameterFac().getMandantparameter(theClientDto.getMandant(),
                    ParameterFac.KATEGORIE_ALLGEMEIN, ParameterFac.PARAMETER_BELEGNUMMER_MANDANTKENNUNG).getCWert();
            if (krit.sBelegnummerVon != null) {
                sVon = HelperServer.getBelegnummernFilterForHibernateCriterias(f, iGeschaeftsjahr, sMandantKuerzel,
                        krit.sBelegnummerVon);
                c.add(Restrictions.ge(LieferscheinFac.FLR_LIEFERSCHEIN_C_NR, sVon));
            }
            if (krit.sBelegnummerBis != null) {
                sBis = HelperServer.getBelegnummernFilterForHibernateCriterias(f, iGeschaeftsjahr, sMandantKuerzel,
                        krit.sBelegnummerBis);
                c.add(Restrictions.le(LieferscheinFac.FLR_LIEFERSCHEIN_C_NR, sBis));
            }
            // Sortierung nach Kostenstelle ist optional
            if (krit.bSortiereNachKostenstelle) {
                c.createCriteria(LieferscheinFac.FLR_LIEFERSCHEIN_FLRKOSTENSTELLE).addOrder(Order.asc("c_nr"));
            }
            // Sortierung nach Partner ist optional
            if (krit.iSortierung == ReportJournalKriterienDto.KRIT_SORT_NACH_PARTNER) {
                c.createCriteria(critFLRKunde).createCriteria(KundeFac.FLR_PARTNER)
                        .addOrder(Order.asc(PartnerFac.FLR_PARTNER_NAME1NACHNAMEFIRMAZEILE1));
            } else if (krit.iSortierung == ReportJournalKriterienDto.KRIT_SORT_NACH_BELEGNUMMER) {
                c.addOrder(Order.asc(LieferscheinFac.FLR_LIEFERSCHEIN_C_NR));
            }
            if (krit.iSortierung == ReportJournalKriterienDto.KRIT_SORT_NACH_VERTRETER) {
                c.createCriteria(LieferscheinFac.FLR_LIEFERSCHEIN_FLRVERTRETER)
                        .addOrder(Order.asc(PersonalFac.FLR_PERSONAL_C_KURZZEICHEN));
            }
            List<?> list = c.list();
            data = new Object[list.size()][REPORT_ALLE_ANZAHL_SPALTEN];

            int i = 0;
            for (Iterator<?> iter = list.iterator(); iter.hasNext();) {
                FLRLieferschein r = (FLRLieferschein) iter.next();
                data[i][FELD_ALLE_BELEGDATUM] = r.getD_belegdatum();
                data[i][FELD_ALLE_PROJEKT] = r.getC_bez_projektbezeichnung();
                data[i][FELD_ALLE_STATUS] = r.getLieferscheinstatus_status_c_nr();
                data[i][FELD_ALLE_BELEGDATUM] = r.getD_belegdatum();
                data[i][FELD_ALLE_LIEFERSCHEINNUMMER] = r.getC_nr();
                // Bezahlte Betraege

                BigDecimal bdWertmw = r.getN_gesamtwertinlieferscheinwaehrung();

                data[i][FELD_ALLE_BETRAG] = bdWertmw;
                // Kostenstelle
                if (r.getFlrkostenstelle() != null) {
                    String sKostenstellen = "";
                    KostenstelleDto k = null;
                    RechnungkontierungDto[] rechnungkontierungsDto = getRechnungFac()
                            .rechnungkontierungFindByRechnungIId(r.getI_id());
                    if (rechnungkontierungsDto.length != 0) {
                        for (int e = 0; e < rechnungkontierungsDto.length; e++) {
                            k = getSystemFac()
                                    .kostenstelleFindByPrimaryKey(rechnungkontierungsDto[e].getKostenstelleIId());
                            sKostenstellen = sKostenstellen + k.getCNr() + " ";
                        }
                    } else {
                        sKostenstellen = r.getFlrkostenstelle().getC_nr();
                    }
                    data[i][FELD_ALLE_KOSTENSTELLENUMMER] = sKostenstellen;
                } else {
                    data[i][FELD_ALLE_KOSTENSTELLENUMMER] = null;
                }
                // Kundendaten
                FLRKunde flrKunde, flrKundeStatistik;
                if (krit.getBVerwendeRechnungsAdresse()) {
                    flrKunde = r.getFlrkunderechnungsadresse();
                } else {
                    flrKunde = r.getFlrkunde();

                    // Statistikdaten wenn nicht Kriterium Rechnungsadresse
                    flrKundeStatistik = r.getFlrkunderechnungsadresse();
                    data[i][FELD_ALLE_KUNDE_RECHNUNG] = flrKundeStatistik.getFlrpartner()
                            .getC_name1nachnamefirmazeile1();
                    if (flrKundeStatistik.getFlrpartner().getC_name2vornamefirmazeile2() != null) {
                        data[i][FELD_ALLE_KUNDE2_RECHNUNG] = flrKundeStatistik.getFlrpartner()
                                .getC_name2vornamefirmazeile2();
                    } else {
                        data[i][FELD_ALLE_KUNDE2_RECHNUNG] = "";
                    }
                    PartnerDto partnerDtoStatistik = getPartnerFac()
                            .partnerFindByPrimaryKey(flrKundeStatistik.getFlrpartner().getI_id(), theClientDto);
                    data[i][FELD_ALLE_ADRESSE_RECHNUNG] = partnerDtoStatistik.formatAdresse();

                }
                data[i][FELD_ALLE_KUNDE] = flrKunde.getFlrpartner().getC_name1nachnamefirmazeile1();
                if (r.getFlrvertreter() != null) {
                    if (r.getFlrvertreter().getFlrpartner().getC_name2vornamefirmazeile2() != null) {
                        data[i][FELD_ALLE_VERTRETER] = r.getFlrvertreter().getFlrpartner()
                                .getC_name1nachnamefirmazeile1() + " "
                                + r.getFlrvertreter().getFlrpartner().getC_name2vornamefirmazeile2();
                    } else {
                        data[i][FELD_ALLE_VERTRETER] = r.getFlrvertreter().getFlrpartner()
                                .getC_name1nachnamefirmazeile1();
                    }
                }
                if (flrKunde.getFlrpartner().getC_name2vornamefirmazeile2() != null) {
                    data[i][FELD_ALLE_KUNDE2] = flrKunde.getFlrpartner().getC_name2vornamefirmazeile2();
                } else {
                    data[i][FELD_ALLE_KUNDE2] = "";
                }
                PartnerDto partnerDto = getPartnerFac().partnerFindByPrimaryKey(flrKunde.getFlrpartner().getI_id(),
                        theClientDto);
                data[i][FELD_ALLE_ADRESSE] = partnerDto.formatAdresse();
                data[i][FELD_ALLE_ORT] = partnerDto.formatAdresse();
                if (r.getFlrrechnung() != null) {
                    data[i][FELD_ALLE_RECHNUNGSNUMMER] = r.getFlrrechnung().getC_nr();
                }

                // Debitorenkontonummer
                KontoDtoSmall kontoDtoDeb = null;
                if (flrKunde.getKonto_i_id_debitorenkonto() != null) {
                    kontoDtoDeb = getFinanzFac()
                            .kontoFindByPrimaryKeySmallOhneExc(flrKunde.getKonto_i_id_debitorenkonto());
                }
                String sKontonummer;
                if (kontoDtoDeb != null) {
                    sKontonummer = kontoDtoDeb.getCNr();
                } else {
                    sKontonummer = "";
                }
                data[i][FELD_ALLE_DEBITORENKONTO] = sKontonummer;
                data[i][FELD_ALLE_WAEHRUNG] = r.getWaehrung_c_nr_lieferscheinwaehrung();
                data[i][FELD_ALLE_KURS] = new BigDecimal(r.getF_wechselkursmandantwaehrungzulieferscheinwaehrung());

                // 14217
                String sLaenderart = getFinanzServiceFac().getLaenderartZuPartner(partnerDto.getIId(),
                        theClientDto);
                data[i][FELD_ALLE_LAENDERART] = sLaenderart;
                i++;
            }
            Map<String, Object> mapParameter = new TreeMap<String, Object>();
            MandantDto mandantDto = getMandantFac().mandantFindByPrimaryKey(theClientDto.getMandant(),
                    theClientDto);
            // Waehrung
            mapParameter.put(LPReport.P_WAEHRUNG, mandantDto.getWaehrungCNr());
            StringBuffer sSortierung = new StringBuffer();
            if (krit.bSortiereNachKostenstelle) {
                sSortierung.append(
                        getTextRespectUISpr("lp.kostenstelle", theClientDto.getMandant(), theClientDto.getLocUi()));
                sSortierung.append(", ");
            }
            if (krit.iSortierung == ReportJournalKriterienDto.KRIT_SORT_NACH_PARTNER) {
                if (krit.getBVerwendeRechnungsAdresse()) {
                    sSortierung.append(getTextRespectUISpr("lp.rechnungsadresse", theClientDto.getMandant(),
                            theClientDto.getLocUi()));
                } else {
                    sSortierung.append(
                            getTextRespectUISpr("lp.kunde", theClientDto.getMandant(), theClientDto.getLocUi()));
                }
            } else if (krit.iSortierung == ReportJournalKriterienDto.KRIT_SORT_NACH_BELEGNUMMER) {
                sSortierung.append(
                        getTextRespectUISpr("bes.belegnummer", theClientDto.getMandant(), theClientDto.getLocUi()));
            } else if (krit.iSortierung == ReportJournalKriterienDto.KRIT_SORT_NACH_VERTRETER) {
                sSortierung.append(
                        getTextRespectUISpr("lp.vertreter", theClientDto.getMandant(), theClientDto.getLocUi()));
            }
            StringBuffer sFilter = new StringBuffer();
            if (sVon != null) {
                sFilter.append(getTextRespectUISpr("lp.von", theClientDto.getMandant(), theClientDto.getLocUi()));
                sFilter.append(" " + sVon + " ");
            }
            if (sBis != null) {
                sFilter.append(getTextRespectUISpr("lp.bis", theClientDto.getMandant(), theClientDto.getLocUi()));
                sFilter.append(" " + sBis + " ");
            }
            if (krit.kostenstelleIId != null) {
                if (sFilter.length() > 0) {
                    sFilter.append(", ");
                }
                KostenstelleDto kstDto = getSystemFac().kostenstelleFindByPrimaryKey(krit.kostenstelleIId);
                sFilter.append(
                        getTextRespectUISpr("lp.kostenstelle", theClientDto.getMandant(), theClientDto.getLocUi()));
                sFilter.append(" ");
                sFilter.append(kstDto.getCNr());
            }
            // Statistikadresse
            if (krit.getBVerwendeRechnungsAdresse()) {
                if (sFilter.length() > 0) {
                    sFilter.append(", ");
                }
                sFilter.append(getTextRespectUISpr("lp.rechnungsadresse", theClientDto.getMandant(),
                        theClientDto.getLocUi()));
            }

            mapParameter.put(LPReport.P_SORTIERUNG, sSortierung.toString());
            mapParameter.put(LPReport.P_SORTIERENACHKOSTENSTELLE, new Boolean(krit.bSortiereNachKostenstelle));
            mapParameter.put(LPReport.P_SORTIERENACHKUNDE,
                    new Boolean(krit.iSortierung == ReportJournalKriterienDto.KRIT_SORT_NACH_PARTNER));
            mapParameter.put(LPReport.P_SORTIERENACHVERTRETER,
                    new Boolean(krit.iSortierung == ReportJournalKriterienDto.KRIT_SORT_NACH_VERTRETER));
            mapParameter.put(LPReport.P_FILTER, sFilter.toString());
            initJRDS(mapParameter, LieferscheinReportFac.REPORT_MODUL, cAktuellerReport, theClientDto.getMandant(),
                    theClientDto.getLocUi(), theClientDto);
            return getReportPrint();

        } catch (RemoteException ex) {
            throwEJBExceptionLPRespectOld(ex);
            return null;
        } finally {
            if (session != null) {
                session.close();
            }
        }
    }

    private int addPositionToDataPosition(LieferscheinpositionDto lspos, Integer iArtikelpositionsnummer,
            AuftragDto auftragDto, AuftragpositionDto auftragpositionDto, int index, String sBelegart,
            TheClientDto theClientDto) throws EJBExceptionLP {
        data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_POSITION_NR] = iArtikelpositionsnummer;
        // weiterzaehlen
        iArtikelpositionsnummer = new Integer(iArtikelpositionsnummer.intValue() + 1);
        try {
            // Positionsnummer
            data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_POSITION] = getLieferscheinpositionFac()
                    .getPositionNummer(lspos.getIId());
            data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_MENGE] = new BigDecimal(1);
            data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_EINHEIT] = SystemFac.EINHEIT_STUECK.trim();
            data[index][REPORT_LIEFERSCHEIN_POSITIONSART] = LocaleFac.POSITIONSART_IDENT;
            String sIdent = null;
            // Druckdaten zusammenstellen
            if (lspos.getCBez() != null)
                sIdent = lspos.getCBez();
            else
                sIdent = "";
            data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_IDENT] = sIdent;
            Session session = null;
            try {
                if (lspos.getTypCNr().equals(LocaleFac.POSITIONTYP_MITPREISE)) {
                    data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_POSITIONSART] = LocaleFac.POSITIONSART_IDENT;
                    data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_IDENT] = lspos.getCBez();
                    data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_MENGE] = new BigDecimal(1);
                    data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_EINHEIT] = SystemFac.EINHEIT_STUECK
                            .trim();
                    data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_SEITENUMBRUCH] = new Boolean(false);
                    List<?> l = null;
                    String sArtikelInfo = new String();
                    SessionFactory factory = FLRSessionFactory.getFactory();
                    session = factory.openSession();
                    Criteria crit = session.createCriteria(FLRLieferscheinposition.class);
                    crit.add(Restrictions.eq("position_i_id", lspos.getIId()));
                    crit.addOrder(Order.asc(RechnungFac.FLR_RECHNUNGPOSITION_I_SORT));
                    l = crit.list();
                    Iterator<?> iter = l.iterator();
                    while (iter.hasNext()) {
                        index++;
                        FLRLieferscheinposition pos = (FLRLieferscheinposition) iter.next();
                        if (pos.getPositionsart_c_nr().equals(LocaleFac.POSITIONSART_IDENT))
                            sArtikelInfo = pos.getFlrartikel().getC_nr();
                        else if (pos.getPositionsart_c_nr().equals(LocaleFac.POSITIONSART_TEXTEINGABE))
                            sArtikelInfo = pos.getC_textinhalt();
                        else if (pos.getPositionsart_c_nr().equals(LocaleFac.POSITIONSART_HANDEINGABE))
                            sArtikelInfo = pos.getC_bez();
                        // Druckdaten zusammenstellen
                        data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_IDENT] = sArtikelInfo;
                        // weitere Daten
                        data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_MENGE] = pos.getN_menge();
                        data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_EINHEIT] = pos.getEinheit_c_nr();
                        data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_POSITIONSART] = LocaleFac.POSITIONSART_IDENT;
                        data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_SEITENUMBRUCH] = new Boolean(false);
                        data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_TYP_CNR] = pos.getTyp_c_nr();
                    }
                } else {

                    StringBuffer sbArtikelInfo = new StringBuffer();
                    List<?> l = null;
                    SessionFactory factory = FLRSessionFactory.getFactory();
                    session = factory.openSession();
                    Criteria crit = session.createCriteria(FLRLieferscheinposition.class);
                    crit.add(Restrictions.eq("position_i_id", lspos.getIId()));
                    l = crit.list();
                    Iterator<?> iter = l.iterator();
                    while (iter.hasNext()) {
                        FLRLieferscheinposition pos = (FLRLieferscheinposition) iter.next();
                        if (pos.getPositionsart_c_nr().equals(LocaleFac.POSITIONSART_IDENT)) {
                            sbArtikelInfo.append(pos.getFlrartikel().getC_nr());
                            // SK: Artikelgruppe wenn der Lieferscheindruck fuer
                            // Rechnungen verwendet wird
                            if (LocaleFac.BELEGART_RECHNUNG.equals(sBelegart)) {
                                if ((Boolean) getParameterFac()
                                        .getMandantparameter(theClientDto.getMandant(),
                                                ParameterFac.KATEGORIE_RECHNUNG,
                                                ParameterFac.PARAMETER_RECHNUNG_ARTIKELGRUPPE_DRUCKEN)
                                        .getCWertAsObject()) {
                                    if (pos.getFlrartikel().getFlrartikelgruppe() != null) {
                                        data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_ARTIKEL_ARTIKELGRUPPE] = data[index][REPORT_LIEFERSCHEIN_ARTIKEL_ARTIKELGRUPPE] == null
                                                ? pos.getFlrartikel().getFlrartikelgruppe().getC_nr() + "\n"
                                                : data[index][REPORT_LIEFERSCHEIN_ARTIKEL_ARTIKELGRUPPE]
                                                        + pos.getFlrartikel().getFlrartikelgruppe().getC_nr()
                                                        + "\n";
                                    }
                                }
                            }
                            if (iter.hasNext())
                                sbArtikelInfo.append("\n");
                        }
                    }
                    data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_POSITIONSART] = LocaleFac.POSITIONSART_IDENT;
                    data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_MENGE] = new BigDecimal(1);
                    data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_EINHEIT] = SystemFac.EINHEIT_STUECK
                            .trim();
                    if (auftragDto != null) {
                        Hashtable<?, ?> hAE = getAuftragReportFac().getAuftragEigenschaften(auftragDto.getIId(),
                                theClientDto);
                        if (hAE != null) {
                            sbArtikelInfo.append("\n");
                            sbArtikelInfo.append("FA: " + hAE.get(AuftragReportFac.AUFTRAG_EIGENSCHAFTEN_FA));
                            sbArtikelInfo.append("\n");
                            sbArtikelInfo
                                    .append("Cluster: " + hAE.get(AuftragReportFac.AUFTRAG_EIGENSCHAFTEN_CLUSTER));
                            sbArtikelInfo.append("\n");
                            sbArtikelInfo.append(
                                    "Equipmentnummer: " + hAE.get(AuftragReportFac.AUFTRAG_EIGENSCHAFTEN_EQNR));
                        }
                    }
                    data[index][LieferscheinReportFac.REPORT_LIEFERSCHEIN_IDENT] = sbArtikelInfo.toString();

                }

            } finally {
                if (session != null) {
                    session.close();
                }
            }
        } catch (RemoteException ex) {
        } catch (EJBExceptionLP ex) {
        }

        return index;
    }

    private void buildVersandwegParam(TheClientDto theClientDto, LieferscheinDto lieferscheinDto, Locale locDruck,
            HashMap<String, Object> parameter) throws RemoteException {
        parameter.put("P_VERSANDWEG_AVISO_TERMIN", lieferscheinDto.getTLieferaviso() == null ? null
                : Helper.formatDatum(lieferscheinDto.getTLieferaviso(), locDruck));
        boolean hasVersandweg = getLieferscheinFac().hatLieferscheinVersandweg(lieferscheinDto, theClientDto);
        parameter.put("P_VERSANDWEG", new Boolean(hasVersandweg));
    }

    @SuppressWarnings("unchecked")
    @TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
    public JasperPrintLP[] printLieferschein(Integer iIdLieferscheinI, Integer iAnzahlKopienI, Boolean bMitLogo,
            String sBelegart, TheClientDto theClientDto) throws EJBExceptionLP {

        checkLieferscheinIId(iIdLieferscheinI);

        JasperPrintLP[] aJasperPrint = null;

        try {
            // Beinhaltet Chargennummer die Mindesthalbarkeit MHD?
            ParametermandantDto parameter_MhdInCharge = getParameterFac().getMandantparameter(
                    theClientDto.getMandant(), ParameterFac.KATEGORIE_ARTIKEL,
                    ParameterFac.PARAMETER_CHARGENNUMMER_BEINHALTET_MINDESTHALTBARKEITSDATUM);
            final boolean bChargennummerBeinhaltetMindesthaltbarkeitsdatum = ((Boolean) parameter_MhdInCharge
                    .getCWertAsObject()).booleanValue();

            ParametermandantDto parameterAbweichung = getParameterFac().getMandantparameter(
                    theClientDto.getMandant(), ParameterFac.KATEGORIE_RECHNUNG,
                    ParameterFac.PARAMETER_MAXIMALE_ABWEICHUNG_SUMMENAUSDRUCK);
            final Double dAbweichung = (Double) parameterAbweichung.getCWertAsObject();

            LieferscheinDto lieferscheinDto = getLieferscheinFac().lieferscheinFindByPrimaryKey(iIdLieferscheinI,
                    theClientDto);
            LieferscheinpositionDto[] aLieferscheinpositionDto = getLieferscheinpositionFac()
                    .getLieferscheinPositionenByLieferschein(lieferscheinDto.getIId(), theClientDto);

            cAktuellerReport = LieferscheinReportFac.REPORT_LIEFERSCHEIN;
            int iArtikelpositionsnummer = 1;
            Boolean bbSeitenumbruch = new Boolean(false); // dieser Wert
            // wechselt mit
            // jedem
            // Seitenumbruch
            // zwischen true und
            // false

            // es gilt das Locale des Auftragskunden
            KundeDto kundeDto = getKundeFac().kundeFindByPrimaryKey(lieferscheinDto.getKundeIIdLieferadresse(),
                    theClientDto);

            Locale locDruck = Helper.string2Locale(kundeDto.getPartnerDto().getLocaleCNrKommunikation());

            AnsprechpartnerDto ansprechpartnerDto = null;

            if (lieferscheinDto.getAnsprechpartnerIId() != null) {
                ansprechpartnerDto = getAnsprechpartnerFac()
                        .ansprechpartnerFindByPrimaryKey(lieferscheinDto.getAnsprechpartnerIId(), theClientDto);

            }

            MandantDto mandantDto = getMandantFac().mandantFindByPrimaryKey(theClientDto.getMandant(),
                    theClientDto);

            // Kurzzeichenkombi zum Andrucken zusammenbauen
            PersonalDto oPersonalBenutzer = getPersonalFac().personalFindByPrimaryKey(theClientDto.getIDPersonal(),
                    theClientDto);
            PersonalDto oPersonalAnleger = getPersonalFac()
                    .personalFindByPrimaryKey(lieferscheinDto.getPersonalIIdAnlegen(), theClientDto);
            String sKurzzeichenkombi = Helper.getKurzzeichenkombi(oPersonalBenutzer.getCKurzzeichen(),
                    oPersonalAnleger.getCKurzzeichen());

            // Kopftext
            String sKopftext = lieferscheinDto.getCLieferscheinKopftextUeberschrieben();

            if (sKopftext == null || sKopftext.length() == 0) {
                LieferscheintextDto oLieferscheintextDto = getLieferscheinServiceFac()
                        .lieferscheintextFindByMandantLocaleCNr(
                                kundeDto.getPartnerDto().getLocaleCNrKommunikation(),
                                LieferscheinServiceFac.LIEFERSCHEINTEXT_KOPFTEXT, theClientDto);

                sKopftext = oLieferscheintextDto.getCTextinhalt();
            }

            // Fusstext
            String sFusstext = lieferscheinDto.getCLieferscheinFusstextUeberschrieben();

            if (sFusstext == null || sFusstext.length() == 0) {
                LieferscheintextDto oLieferscheintextDto = getLieferscheinServiceFac()
                        .lieferscheintextFindByMandantLocaleCNr(
                                kundeDto.getPartnerDto().getLocaleCNrKommunikation(),
                                LieferscheinServiceFac.LIEFERSCHEINTEXT_FUSSTEXT, theClientDto);

                sFusstext = oLieferscheintextDto.getCTextinhalt();
            }
            // dem Report seine Parameter setzen
            HashMap parameter = new HashMap<Object, Object>();
            parameter.put("P_LIEFERSCHEINART", lieferscheinDto.getLieferscheinartCNr());

            // CK: PJ 13849
            parameter.put("P_BEARBEITER",
                    getPersonalFac().getPersonRpt(lieferscheinDto.getPersonalIIdAnlegen(), theClientDto));

            final boolean bDruckeRabatt = Helper.short2boolean(kundeDto.getBRechnungsdruckmitrabatt());
            parameter.put("P_RABATTSPALTE_DRUCKEN", new Boolean(bDruckeRabatt));

            final boolean bPreiseAndrucken = Helper.short2boolean(kundeDto.getBPreiseanlsandrucken());
            parameter.put("P_PREISE_ANDRUCKEN", new Boolean(bPreiseAndrucken));
            parameter.put(LPReport.P_WAEHRUNG, lieferscheinDto.getWaehrungCNr());
            // PJ 17820
            parameter.put("P_AUFTRAGANZAHL", getGesamtAnzahlAnAuftraegen(lieferscheinDto));

            LagerDto zielLagerDto = null;
            if (lieferscheinDto.getZiellagerIId() != null) {
                zielLagerDto = getLagerFac().lagerFindByPrimaryKey(lieferscheinDto.getZiellagerIId());
                parameter.put("P_ZIELLAGER", zielLagerDto.getCNr());
            } else {
                parameter.put("P_ZIELLAGER", null);
            }
            parameter.put("P_MANDANTADRESSE", Helper.formatMandantAdresse(mandantDto));

            parameter.put("P_MAXIMALE_ABWEICHUNG", dAbweichung);

            ParametermandantDto parameterWerbeabgabe = getParameterFac().getMandantparameter(
                    theClientDto.getMandant(), ParameterFac.KATEGORIE_ARTIKEL,
                    ParameterFac.PARAMETER_WERBEABGABE_PROZENT);
            parameter.put("P_WERBEABGABE_PROZENT", (Integer) parameterWerbeabgabe.getCWertAsObject());
            ParametermandantDto parameterWerbeabgabeArtikel = getParameterFac().getMandantparameter(
                    theClientDto.getMandant(), ParameterFac.KATEGORIE_ARTIKEL,
                    ParameterFac.PARAMETER_WERBEABGABE_ARTIKEL);
            parameter.put("P_WERBEABGABE_ARTIKEL", parameterWerbeabgabeArtikel.getCWert());
            parameter.put("P_KUNDE_ADRESSBLOCK", formatAdresseFuerAusdruck(kundeDto.getPartnerDto(),
                    ansprechpartnerDto, mandantDto, locDruck, LocaleFac.BELEGART_LIEFERSCHEIN));

            if (ansprechpartnerDto != null) {
                parameter.put("P_ANSPRECHPARTNER_KUNDE_ADRESSBLOCK",
                        getPartnerFac().formatFixAnredeTitelName2Name1FuerAdresskopf(
                                ansprechpartnerDto.getPartnerDto(), locDruck, null));
            }

            parameter.put("P_KUNDE_HINWEISEXTERN", kundeDto.getSHinweisextern());

            if (lieferscheinDto.getKundeIIdRechnungsadresse() != null) {
                KundeDto rechnungKunde = getKundeFac()
                        .kundeFindByPrimaryKey(lieferscheinDto.getKundeIIdRechnungsadresse(), theClientDto);

                AnsprechpartnerDto ansprechpartnerDtoRechnungsadresse = null;

                if (lieferscheinDto.getAnsprechpartnerIIdRechnungsadresse() != null) {
                    ansprechpartnerDtoRechnungsadresse = getAnsprechpartnerFac().ansprechpartnerFindByPrimaryKey(
                            lieferscheinDto.getAnsprechpartnerIIdRechnungsadresse(), theClientDto);

                }

                if (lieferscheinDto.getKundeIIdRechnungsadresse().equals(kundeDto.getIId())
                        && sindAnsprechpartnerGleich(lieferscheinDto.getAnsprechpartnerIIdRechnungsadresse(),
                                lieferscheinDto.getAnsprechpartnerIId())) {

                } else {

                    parameter.put("P_RECHNUNGSADRESSE", formatAdresseFuerAusdruck(rechnungKunde.getPartnerDto(),
                            ansprechpartnerDtoRechnungsadresse, mandantDto, locDruck, LocaleFac.BELEGART_RECHNUNG));

                    if (ansprechpartnerDtoRechnungsadresse != null) {
                        parameter.put("P_ANSPRECHPARTNER_RECHNUNGSADRESSE",
                                getPartnerFac().formatFixAnredeTitelName2Name1FuerAdresskopf(
                                        ansprechpartnerDtoRechnungsadresse.getPartnerDto(), locDruck, null));
                    }

                }

                if (rechnungKunde != null) {
                    parameter.put("P_RECHNUNG_UID", rechnungKunde.getPartnerDto().getCUid());
                    parameter.put("P_RECHNUNG_EORI", rechnungKunde.getPartnerDto().getCEori());
                    parameter.put("P_RECHNUNG_FREMDSYSTEMNR", rechnungKunde.getCFremdsystemnr());
                    parameter.put("P_RECHNUNG_TOUR", rechnungKunde.getCTour());
                    parameter.put("P_RECHNUNG_LIEFERANTENNR", rechnungKunde.getCLieferantennr());
                    parameter.put("P_RECHNUNG_ILN", rechnungKunde.getPartnerDto().getCIln());
                    parameter.put("P_RECHNUNG_KUNDE_FIRMENBUCHNUMMER",
                            rechnungKunde.getPartnerDto().getCFirmenbuchnr());
                    parameter.put("P_RECHNUNG_KUNDE_KUNDENNUMMER", rechnungKunde.getIKundennummer());
                }
            }
            parameter.put("P_BEZEICHNUNG", lieferscheinDto.getCBezProjektbezeichnung());

            if (lieferscheinDto.getProjektIId() != null) {
                ProjektDto pjDto = getProjektFac().projektFindByPrimaryKey(lieferscheinDto.getProjektIId());
                parameter.put("P_PROJEKTNUMMER", pjDto.getCNr());
            }

            // Debitorenkonto des Kunden
            if (kundeDto.getIidDebitorenkonto() != null) {
                KontoDto kontoDto = getFinanzFac().kontoFindByPrimaryKey(kundeDto.getIidDebitorenkonto());
                parameter.put("P_KUNDE_DEBITORENKONTO", kontoDto.getCNr());
            }
            parameter.put("P_KUNDE_UID", kundeDto.getPartnerDto().getCUid());
            parameter.put("P_KUNDE_EORI", kundeDto.getPartnerDto().getCEori());
            parameter.put("P_KUNDE_FREMDSYSTEMNR", kundeDto.getCFremdsystemnr());
            parameter.put("P_KUNDE_TOUR", kundeDto.getCTour());
            parameter.put("P_LIEFERANTENNR", kundeDto.getCLieferantennr());
            parameter.put("P_KUNDE_ILN", kundeDto.getPartnerDto().getCIln());
            parameter.put("P_KUNDE_FIRMENBUCHNUMMER", kundeDto.getPartnerDto().getCFirmenbuchnr());
            parameter.put("P_BELEGKENNUNG", baueKennungLieferschein(lieferscheinDto, theClientDto));
            parameter.put("P_BESTELLNUMMER", lieferscheinDto.getCBestellnummer());
            if (lieferscheinDto.getKostenstelleIId() != null) {
                KostenstelleDto kostenstelleDto = getSystemFac()
                        .kostenstelleFindByPrimaryKey(lieferscheinDto.getKostenstelleIId());
                parameter.put(LPReport.P_KOSTENSTELLE, kostenstelleDto.getCNr());
            }
            parameter.put("P_KUNDE_KUNDENNUMMER", kundeDto.getIKundennummer());

            String sAuftragbestaetigung = null;
            // Hauptauftrag
            if (lieferscheinDto.getAuftragIId() != null) {
                AuftragDto auftragDto = getAuftragFac().auftragFindByPrimaryKey(lieferscheinDto.getAuftragIId());
                sAuftragbestaetigung = auftragDto.getCNr();
                KundeDto lieferKunde = getKundeFac().kundeFindByPrimaryKey(auftragDto.getKundeIIdLieferadresse(),
                        theClientDto);
                AnsprechpartnerDto akunde = null;
                if (lieferKunde.getAnsprechpartnerDto() != null) {
                    AnsprechpartnerDto[] anspkunde = lieferKunde.getAnsprechpartnerDto();
                    akunde = anspkunde[0];
                }
                parameter.put("P_LIEFERADRESSE", formatAdresseFuerAusdruck(lieferKunde.getPartnerDto(), akunde,
                        mandantDto, locDruck, LocaleFac.BELEGART_LIEFERSCHEIN));

                if (akunde != null) {
                    parameter.put("P_ANSPRECHPARTNER_LIEFERADRESSE", getPartnerFac()
                            .formatFixAnredeTitelName2Name1FuerAdresskopf(akunde.getPartnerDto(), locDruck, null));
                }

                parameter.put("P_FREMDSYSTEMNR", lieferKunde.getCFremdsystemnr());
                parameter.put("P_LIEFERANTENNR", lieferKunde.getCLieferantennr());
                parameter.put("P_ILN", lieferKunde.getPartnerDto().getCIln());

                if (lieferKunde.getIidDebitorenkonto() != null) {
                    KontoDto kontoDto = getFinanzFac().kontoFindByPrimaryKey(lieferKunde.getIidDebitorenkonto());
                    parameter.put("P_DEBITORENKONTO", kontoDto.getCNr());
                }
                parameter.put("P_TOUR", lieferKunde.getCTour());
                // AUFTRAGSEIGENSCHAFTEN
                Hashtable hAE = getAuftragReportFac().getAuftragEigenschaften(lieferscheinDto.getAuftragIId(),
                        theClientDto);
                if (hAE != null) {
                    parameter.put(P_AUFTRAGEIGENSCHAFT_FA, hAE.get(AuftragReportFac.AUFTRAG_EIGENSCHAFTEN_FA));
                    parameter.put(P_AUFTRAGEIGENSCHAFT_CLUSTER,
                            hAE.get(AuftragReportFac.AUFTRAG_EIGENSCHAFTEN_CLUSTER));
                    parameter.put(P_AUFTRAGEIGENSCHAFT_EQNR, hAE.get(AuftragReportFac.AUFTRAG_EIGENSCHAFTEN_EQNR));
                }
            }
            parameter.put("P_ABNR", sAuftragbestaetigung);
            parameter.put(LPReport.P_UNSERZEICHEN, sKurzzeichenkombi);
            parameter.put("P_BELEGDATUM", Helper.formatDatum(lieferscheinDto.getTBelegdatum(), locDruck));
            parameter.put("P_LIEFERTERMIN", Helper.formatDatum(lieferscheinDto.getTLiefertermin(), locDruck));

            // Gewicht nur andrucken, wenn Hakerl bei Kunde
            // SK: Wenn Gewicht andrucken auch Paketanzahl mitgeben
            if (Helper.short2Boolean(kundeDto.getBLsgewichtangeben())) {
                parameter.put("P_GEWICHT_ANDRUCKEN", true);
                parameter.put("P_GEWICHT", lieferscheinDto.getFGewichtLieferung());
                parameter.put("P_PAKETANZAHL", lieferscheinDto.getIAnzahlPakete());
            }

            SpediteurDto spediteurDto = getMandantFac()
                    .spediteurFindByPrimaryKey(lieferscheinDto.getSpediteurIId());
            parameter.put("P_SPEDITEUR", spediteurDto.getCNamedesspediteurs());

            if (spediteurDto.getPartnerIId() != null) {
                PartnerDto partnerDto = getPartnerFac().partnerFindByPrimaryKey(spediteurDto.getPartnerIId(),
                        theClientDto);

                AnsprechpartnerDto ansprechpartnerDtoSpediteur = null;

                if (spediteurDto.getAnsprechpartnerIId() != null) {
                    ansprechpartnerDtoSpediteur = getAnsprechpartnerFac()
                            .ansprechpartnerFindByPrimaryKey(spediteurDto.getAnsprechpartnerIId(), theClientDto);
                }

                parameter.put("P_SPEDITEUR_ADRESSBLOCK",
                        formatAdresseFuerAusdruck(partnerDto, ansprechpartnerDtoSpediteur, mandantDto, locDruck));
            }

            String cBriefanrede = "";

            if (ansprechpartnerDto != null) {
                cBriefanrede = getPartnerServicesFac().getBriefanredeFuerBeleg(
                        lieferscheinDto.getAnsprechpartnerIId(), kundeDto.getPartnerIId(), locDruck, theClientDto);
            } else {
                // neutrale Anrede
                cBriefanrede = getBriefanredeNeutralOderPrivatperson(kundeDto.getPartnerIId(), locDruck,
                        theClientDto);
            }

            // PJ15507

            if (lieferscheinDto.getAuftragIId() != null) {
                AuftragauftragdokumentDto[] auftragauftragdokumentDtos = getAuftragServiceFac()
                        .auftragauftragdokumentFindByAuftragIId(lieferscheinDto.getAuftragIId());
                if (auftragauftragdokumentDtos != null && auftragauftragdokumentDtos.length > 0) {

                    Object[][] oSubData = new Object[auftragauftragdokumentDtos.length][1];

                    for (int i = 0; i < auftragauftragdokumentDtos.length; i++) {
                        AuftragdokumentDto aDokDto = getAuftragServiceFac().auftragdokumentFindByPrimaryKey(
                                auftragauftragdokumentDtos[i].getAuftragdokumentIId());
                        oSubData[i][0] = aDokDto.getBezeichnung();
                    }
                    String[] fieldnames = new String[] { "F_AUFTRAGDOKUMENT" };

                    parameter.put("P_AUFTRAGDOKUMENTE", new LPDatenSubreport(oSubData, fieldnames));
                }
            }

            parameter.put("P_BRIEFANREDE", cBriefanrede);
            parameter.put("P_KOPFTEXT", Helper.formatStyledTextForJasper(sKopftext));
            parameter.put("P_LIEFERART", getLocaleFac()
                    .lieferartFindByIIdLocaleOhneExc(lieferscheinDto.getLieferartIId(), locDruck, theClientDto));
            parameter.put("P_LIEFERART_ORT", lieferscheinDto.getCLieferartort());

            // die Kommunikationsinformation des Kunden
            Integer partnerIIdAnsprechpartner = null;
            if (ansprechpartnerDto != null) {
                partnerIIdAnsprechpartner = ansprechpartnerDto.getPartnerIIdAnsprechpartner();

                parameter.put("P_LS_ANSPRECHPARTNER_FREMDSYSTEMNUMMER", ansprechpartnerDto.getCFremdsystemnr());

            }

            String sEmail = getPartnerFac().partnerkommFindRespectPartnerAsStringOhneExec(partnerIIdAnsprechpartner,
                    kundeDto.getPartnerDto(), PartnerFac.KOMMUNIKATIONSART_EMAIL, theClientDto.getMandant(),
                    theClientDto);
            String sFax = getPartnerFac().partnerkommFindRespectPartnerAsStringOhneExec(partnerIIdAnsprechpartner,
                    kundeDto.getPartnerDto(), PartnerFac.KOMMUNIKATIONSART_FAX, theClientDto.getMandant(),
                    theClientDto);
            String sTelefon = getPartnerFac().partnerkommFindRespectPartnerAsStringOhneExec(
                    partnerIIdAnsprechpartner, kundeDto.getPartnerDto(), PartnerFac.KOMMUNIKATIONSART_TELEFON,
                    theClientDto.getMandant(), theClientDto);

            parameter.put(LPReport.P_ANSPRECHPARTNEREMAIL, sEmail != null ? sEmail : "");
            parameter.put(LPReport.P_ANSPRECHPARTNERFAX, sFax != null ? sFax : "");
            parameter.put(LPReport.P_ANSPRECHPARTNERTELEFON, sTelefon != null ? sTelefon : "");

            // die folgenden Felder werden im Report mit jeweils einer
            // trennenden Leerzeile
            // hintereinandergehaengt
            StringBuffer buff = new StringBuffer();

            // Fusstext
            if (sFusstext != null) {
                parameter.put("P_FUSSTEXT", Helper.formatStyledTextForJasper(sFusstext));
                buff.append(sFusstext).append("\n\n");
            }

            // Eigentumsvorbehalt
            MediastandardDto mediastandardDto = getMediaFac().mediastandardFindByCNrDatenformatCNrMandantCNr(
                    MediaFac.MEDIASTANDARD_EIGENTUMSVORBEHALT, MediaFac.DATENFORMAT_MIMETYPE_TEXT_HTML,
                    theClientDto.getMandant(), kundeDto.getPartnerDto().getLocaleCNrKommunikation(), theClientDto);

            if (mediastandardDto != null) {
                parameter.put(LPReport.P_EIGENTUMSVORBEHALT,
                        Helper.formatStyledTextForJasper(mediastandardDto.getOMediaText()));
                buff.append(mediastandardDto.getOMediaText()).append("\n\n");
            }

            // Lieferbedingungen
            mediastandardDto = getMediaFac().mediastandardFindByCNrDatenformatCNrMandantCNr(
                    MediaFac.MEDIASTANDARD_LIEFERBEDINGUNGEN, MediaFac.DATENFORMAT_MIMETYPE_TEXT_HTML,
                    theClientDto.getMandant(), kundeDto.getPartnerDto().getLocaleCNrKommunikation(), theClientDto);

            if (mediastandardDto != null) {
                parameter.put(LPReport.P_LIEFERBEDINGUNGEN,
                        Helper.formatStyledTextForJasper(mediastandardDto.getOMediaText()));
                buff.append(mediastandardDto.getOMediaText()).append("\n\n");
            }

            PersonalDto vertreterDto = null;
            String cVertreterAnredeShort = null;

            if (lieferscheinDto.getPersonalIIdVertreter() != null) {
                vertreterDto = getPersonalFac().personalFindByPrimaryKey(lieferscheinDto.getPersonalIIdVertreter(),
                        theClientDto);

                cVertreterAnredeShort = getPersonalFac()
                        .personalFindByPrimaryKey(lieferscheinDto.getPersonalIIdVertreter(), theClientDto)
                        .getPartnerDto().formatFixName2Name1();
            }
            parameter.put("P_VERTRETER_ANREDE", cVertreterAnredeShort);

            StringBuffer buffVertreter = new StringBuffer();
            // Anrede des Mandanten
            String sMandantAnrede = mandantDto.getPartnerDto().formatFixName1Name2();
            if (sMandantAnrede != null && sMandantAnrede.length() > 0) {
                parameter.put(P_MANDANT_ANREDE_UND_NAME, sMandantAnrede);
                buff.append(sMandantAnrede).append("\n\n");
                buffVertreter.append(sMandantAnrede).append("\n\n");
            }

            // Die Unterschrift fuer Belege inclusive Unterschriftstext und
            // -funktion
            // Beispiel:
            // "i.A. Ing. Werner Hehenwarter" - im Falle des Angebots der
            // Vertreter aus den Kopfdaten
            // "Einkaufsleiter"
            if (vertreterDto != null) {
                String sVertreterUFTitelName2Name1 = vertreterDto.formatFixUFTitelName2Name1();

                parameter.put(P_VERTRETER, vertreterDto.formatAnrede());

                buff.append(sVertreterUFTitelName2Name1);
                buffVertreter.append(sVertreterUFTitelName2Name1);
                parameter.put(P_VERTRETER_UNTERSCHRIFTSFUNKTION_UND_NAME, sVertreterUFTitelName2Name1);

                if (vertreterDto.getCUnterschriftstext() != null
                        && vertreterDto.getCUnterschriftstext().length() > 0) {
                    String sUnterschriftstext = vertreterDto.getCUnterschriftstext();
                    buff.append("\n").append(sUnterschriftstext);
                    buffVertreter.append("\n").append(sUnterschriftstext);
                    parameter.put(P_VERTRETER_UNTERSCHRIFTSTEXT, sUnterschriftstext);
                }
                // Vertreter Kontaktdaten
                String sVertreterEmail = vertreterDto.getCEmail();

                String sVertreterFaxDirekt = vertreterDto.getCDirektfax();

                String sVertreterFax = vertreterDto.getCFax();

                String sVertreterTelefon = vertreterDto.getCTelefon();
                parameter.put(LPReport.P_VERTRETEREMAIL, sVertreterEmail != null ? sVertreterEmail : "");
                if (sVertreterFaxDirekt != null && sVertreterFaxDirekt != "") {
                    parameter.put(LPReport.P_VERTRETERFAX, sVertreterFaxDirekt);
                } else {
                    parameter.put(LPReport.P_VERTRETERFAX, sVertreterFax != null ? sVertreterFax : "");
                }
                parameter.put(LPReport.P_VERTRETEERTELEFON, sVertreterTelefon != null ? sVertreterTelefon : "");

            }

            parameter.put("P_SUMMARY", Helper.formatStyledTextForJasper(buff.toString()));

            buildVersandwegParam(theClientDto, lieferscheinDto, locDruck, parameter);

            int iAnzahlZeilen = 0; // Anzahl der Zeilen in der Gruppe

            for (int i = 0; i < aLieferscheinpositionDto.length; i++) {
                if (aLieferscheinpositionDto[i].getLieferscheinpositionartCNr()
                        .equals(LieferscheinpositionFac.LIEFERSCHEINPOSITIONSART_IDENT)) {
                    // Die Zeilenanzahl muss vor dem Befuellen festgelegt
                    // werden.
                    StuecklisteInfoDto stuecklisteInfoDto = getStuecklisteFac().getStrukturdatenEinesArtikels(
                            aLieferscheinpositionDto[i].getArtikelIId(), true, null, // in die Rekursion mit einer
                            // leeren Listen einsteigen
                            0, // in die Rekursion mit Ebene 0
                            // einsteigen
                            -1, // alle Stuecklisten komplett aufloesen
                            false, // Menge pro Einheit der
                            // uebergeorndeten Position
                            new BigDecimal(1), // fuer 1 Einheit der
                            // STKL
                            true, // Fremdfertigung aufloesen
                            theClientDto);

                    iAnzahlZeilen++; // fuer die eigentliche Ident Position
                    iAnzahlZeilen += stuecklisteInfoDto.getIiAnzahlPositionen().intValue();
                    // Auftragsdaten, wenn die Position auftragsbezogen ist
                    if (aLieferscheinpositionDto[i].getAuftragpositionIId() != null) {
                        iAnzahlZeilen++;
                    }
                    // Serien bzw Chargennummer Anzahl des Artikels
                    int iAnzahlSerienChargeNr = berechneAnzahlSerienChargeNummern(
                            aLieferscheinpositionDto[i].getArtikelIId(),
                            aLieferscheinpositionDto[i].getSeriennrChargennrMitMenge(), theClientDto);
                    iAnzahlZeilen += iAnzahlSerienChargeNr;
                } else if (aLieferscheinpositionDto[i].getLieferscheinpositionartCNr()
                        .equals(LieferscheinpositionFac.LIEFERSCHEINPOSITIONSART_HANDEINGABE)) {
                    iAnzahlZeilen++; // fuer die eigentliche Position
                    // Auftragsdaten, wenn die Position auftragsbezogen ist
                    if (aLieferscheinpositionDto[i].getAuftragpositionIId() != null) {
                        iAnzahlZeilen++;
                    }
                } else if (aLieferscheinpositionDto[i].getLieferscheinpositionartCNr()
                        .equals(LocaleFac.POSITIONSART_POSITION)) {
                    iAnzahlZeilen++; // fuer die eigentliche Position
                    if (aLieferscheinpositionDto[i].getTypCNr().equals(LocaleFac.POSITIONTYP_MITPREISE)) {
                        Session session = null;
                        SessionFactory factory = FLRSessionFactory.getFactory();
                        session = factory.openSession();
                        Criteria crit = session.createCriteria(FLRLieferscheinposition.class);
                        crit.add(Restrictions.eq("position_i_id", aLieferscheinpositionDto[i].getIId()));
                        crit.addOrder(Order.asc(RechnungFac.FLR_RECHNUNGPOSITION_I_SORT));
                        iAnzahlZeilen = iAnzahlZeilen + crit.list().size();
                    }
                    // Auftragsdaten, wenn die Position auftragsbezogen ist
                    if (aLieferscheinpositionDto[i].getAuftragpositionIId() != null) {
                        iAnzahlZeilen++;
                    }
                }

                else {
                    iAnzahlZeilen++; // fuer die Positionszeile
                }
            }

            int iAnzahlSpalten = LieferscheinReportFac.REPORT_LIEFERSCHEIN_ANZAHL_ZEILEN; // Anzahl
            // der
            // Spalten
            // in
            // der
            // Gruppe

            data = new Object[iAnzahlZeilen][iAnzahlSpalten];

            // Der Index der aktuell verarbeiteten Lieferscheinposition
            int iIndex = 0;

            // die Datenmatrix befuellen
            for (int i = 0; i < iAnzahlZeilen; i++) {

                data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_POSITIONSOBJEKT] = getSystemReportFac()
                        .getPositionForReport(LocaleFac.BELEGART_LIEFERSCHEIN,
                                aLieferscheinpositionDto[iIndex].getIId(), theClientDto);

                data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_INTERNAL_IID] = aLieferscheinpositionDto[iIndex]
                        .getIId();

                if (aLieferscheinpositionDto[iIndex].getTypCNr() != null) {
                    if (aLieferscheinpositionDto[iIndex].getPositionsartCNr()
                            .equals(LocaleFac.POSITIONSART_POSITION)) {
                        AuftragpositionDto abPosDto = null;

                        AuftragDto auftragDto = null;
                        // Auftragsbezogene erhalten eine Kopfzeile
                        if (aLieferscheinpositionDto[iIndex].getAuftragpositionIId() != null) {
                            abPosDto = getAuftragpositionFac().auftragpositionFindByPrimaryKey(
                                    aLieferscheinpositionDto[iIndex].getAuftragpositionIId());
                            auftragDto = getAuftragFac().auftragFindByPrimaryKey(abPosDto.getBelegIId());
                            data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_POSITIONSART] = LieferscheinpositionFac.LIEFERSCHEINPOSITIONSART_AUFTRAGSDATEN;
                            // Auch die naechste Zeile (die eigentliche Position
                            // erhaelt die auftragsbezogenen Daten)
                            for (int j = 0; j < 2; j++) {
                                data[i + j][LieferscheinReportFac.REPORT_LIEFERSCHEIN_AUFTRAG_BESTELLDATUM] = auftragDto
                                        .getDBestelldatum();
                                data[i + j][LieferscheinReportFac.REPORT_LIEFERSCHEIN_AUFTRAG_BESTELLNUMMER] = auftragDto
                                        .getCBestellnummer();
                                data[i + j][LieferscheinReportFac.REPORT_LIEFERSCHEIN_AUFTRAG_NUMMER] = auftragDto
                                        .getCNr();
                                data[i + j][LieferscheinReportFac.REPORT_LIEFERSCHEIN_AUFTRAG_PROJEKT] = auftragDto
                                        .getCBezProjektbezeichnung();
                                data[i + j][LieferscheinReportFac.REPORT_LIEFERSCHEIN_SEITENUMBRUCH] = bbSeitenumbruch;
                            }
                            i++;
                        }
                        Integer pNummer = null;
                        if (aLieferscheinpositionDto[iIndex].getAuftragpositionIId() != null) {
                            pNummer = getAuftragpositionFac()
                                    .getPositionNummer(aLieferscheinpositionDto[iIndex].getAuftragpositionIId());
                        } else {
                            if (lieferscheinDto.getAuftragIId() == null)
                                pNummer = getLieferscheinpositionFac()
                                        .getPositionNummer(aLieferscheinpositionDto[iIndex].getIId());

                        }

                        data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_POSITIONSOBJEKT] = getSystemReportFac()
                                .getPositionForReport(LocaleFac.BELEGART_LIEFERSCHEIN,
                                        aLieferscheinpositionDto[iIndex].getIId(), theClientDto);

                        data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_POSITION] = pNummer;
                        data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_POSITION_NR] = new Integer(
                                iArtikelpositionsnummer);
                        data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_LS_POSITION_NR] = getLieferscheinpositionFac()
                                .getLSPositionNummer(aLieferscheinpositionDto[iIndex].getIId());
                        iArtikelpositionsnummer++;

                        i = addPositionToDataPosition(aLieferscheinpositionDto[iIndex], iArtikelpositionsnummer,
                                auftragDto, abPosDto, i, sBelegart, theClientDto);
                        iIndex++;

                    }
                } else {
                    // Artikelpositionen
                    if (aLieferscheinpositionDto[iIndex].getLieferscheinpositionartCNr()
                            .equals(LieferscheinpositionFac.LIEFERSCHEINPOSITIONSART_IDENT)
                            || aLieferscheinpositionDto[iIndex].getLieferscheinpositionartCNr()
                                    .equals(LieferscheinpositionFac.LIEFERSCHEINPOSITIONSART_HANDEINGABE)) {
                        AuftragpositionDto abPosDto = null;
                        AuftragDto auftragDto = null;

                        // Auftragsbezogene erhalten eine Kopfzeile
                        if (aLieferscheinpositionDto[iIndex].getAuftragpositionIId() != null) {
                            abPosDto = getAuftragpositionFac().auftragpositionFindByPrimaryKey(
                                    aLieferscheinpositionDto[iIndex].getAuftragpositionIId());
                            auftragDto = getAuftragFac().auftragFindByPrimaryKey(abPosDto.getBelegIId());
                            data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_POSITIONSART] = LieferscheinpositionFac.LIEFERSCHEINPOSITIONSART_AUFTRAGSDATEN;
                            // Auch die naechste Zeile (die eigentliche Position
                            // erhaelt die auftragsbezogenen Daten)
                            for (int j = 0; j < 2; j++) {
                                data[i + j][LieferscheinReportFac.REPORT_LIEFERSCHEIN_AUFTRAG_BESTELLDATUM] = auftragDto
                                        .getDBestelldatum();
                                data[i + j][LieferscheinReportFac.REPORT_LIEFERSCHEIN_AUFTRAG_BESTELLNUMMER] = auftragDto
                                        .getCBestellnummer();
                                data[i + j][LieferscheinReportFac.REPORT_LIEFERSCHEIN_AUFTRAG_NUMMER] = auftragDto
                                        .getCNr();
                                data[i + j][LieferscheinReportFac.REPORT_LIEFERSCHEIN_AUFTRAG_PROJEKT] = auftragDto
                                        .getCBezProjektbezeichnung();
                                data[i + j][LieferscheinReportFac.REPORT_LIEFERSCHEIN_SEITENUMBRUCH] = bbSeitenumbruch;
                            }
                            i++;
                        }

                        if (auftragDto != null) {
                            data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_AUFTRAG_BESTAETIGUNG_TERMIN] = auftragDto
                                    .getTResponse() == null ? null
                                            : Helper.formatDatum(auftragDto.getTResponse(), locDruck);
                            data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_AUFTRAG_VERSANDWEG] = new Boolean(
                                    getAuftragFac().hatAuftragVersandweg(auftragDto, theClientDto));
                        } else {
                            data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_AUFTRAG_BESTAETIGUNG_TERMIN] = null;
                            data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_AUFTRAG_VERSANDWEG] = new Boolean(
                                    false);
                        }

                        Integer pNummer = null;
                        if (aLieferscheinpositionDto[iIndex].getAuftragpositionIId() != null) {
                            pNummer = getAuftragpositionFac()
                                    .getPositionNummer(aLieferscheinpositionDto[iIndex].getAuftragpositionIId());
                        } else {
                            if (lieferscheinDto.getAuftragIId() == null)
                                pNummer = getLieferscheinpositionFac()
                                        .getPositionNummer(aLieferscheinpositionDto[iIndex].getIId());
                            iArtikelpositionsnummer++;
                        }
                        data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_POSITION] = pNummer;
                        data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_POSITION_NR] = new Integer(
                                iArtikelpositionsnummer);
                        iArtikelpositionsnummer++;
                        data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_LS_POSITION_NR] = getLieferscheinpositionFac()
                                .getLSPositionNummer(aLieferscheinpositionDto[iIndex].getIId());

                        // String cBezArtikelbezeichnunguebersteuert = null;
                        // String cZBezArtikelbezeichnunguebersteuert = null;
                        //
                        // if (Helper
                        // .short2boolean(aLieferscheinpositionDto[iIndex]
                        // .getBArtikelbezeichnunguebersteuert())) {
                        // cBezArtikelbezeichnunguebersteuert =
                        // aLieferscheinpositionDto[iIndex]
                        // .getCBez();
                        // cZBezArtikelbezeichnunguebersteuert =
                        // aLieferscheinpositionDto[iIndex]
                        // .getCZusatzbez();
                        // }
                        ArtikelDto artikelDto = getArtikelFac().artikelFindByPrimaryKey(
                                aLieferscheinpositionDto[iIndex].getArtikelIId(), theClientDto);

                        data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_REFERENZNUMMER] = artikelDto
                                .getCReferenznr();
                        data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_ARTIKEL_INDEX] = artikelDto.getCIndex();
                        data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_ARTIKEL_REVISION] = artikelDto
                                .getCRevision();
                        data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_DOKUMENTENPFLICHTIG] = Helper
                                .short2Boolean(artikelDto.getBDokumentenpflicht());

                        BelegPositionDruckIdentDto druckDto = printIdent(aLieferscheinpositionDto[iIndex],
                                /* LocaleFac.BELEGART_LIEFERSCHEIN */sBelegart, artikelDto, locDruck,
                                kundeDto.getPartnerIId(), theClientDto);

                        data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_ARTIKELKOMMENTAR] = druckDto
                                .getSArtikelkommentar();
                        data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_IMAGE] = Helper
                                .imageToByteArray(druckDto.getOImageKommentar());

                        data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_IDENT] = druckDto.getSArtikelInfo();
                        data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_IDENT_TEXTEINGABE] = druckDto
                                .getSIdentTexteingabe();
                        data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_ZUSATZBEZEICHNUNG] = druckDto
                                .getSZusatzBezeichnung();
                        data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_ARTIKELCZBEZ2] = druckDto
                                .getSArtikelZusatzBezeichnung2();

                        data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_POSITIONSOBJEKT] = getSystemReportFac()
                                .getPositionForReport(LocaleFac.BELEGART_LIEFERSCHEIN,
                                        aLieferscheinpositionDto[iIndex].getIId(), theClientDto);

                        // PJ18261

                        if (aLieferscheinpositionDto[iIndex].getLagerIId() != null) {
                            LagerDto lagerDtoUebersteuert = getLagerFac()
                                    .lagerFindByPrimaryKey(aLieferscheinpositionDto[iIndex].getLagerIId());
                            data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_LAGER_UEBERSTEUERT] = lagerDtoUebersteuert
                                    .getCNr();
                        }

                        // PJ 15348
                        if (aLieferscheinpositionDto[iIndex].getMwstsatzIId() != null) {

                            MwstsatzDto mwstSatzDto = getMandantFac().mwstsatzFindByPrimaryKey(
                                    aLieferscheinpositionDto[iIndex].getMwstsatzIId(), theClientDto);
                            data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_FIBU_MWST_CODE] = mwstSatzDto
                                    .getIFibumwstcode();

                        }

                        data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_WE_REFERENZ] = getLagerFac()
                                .getWareneingangsreferenzSubreport(sBelegart,
                                        aLieferscheinpositionDto[iIndex].getIId(),
                                        aLieferscheinpositionDto[iIndex].getSeriennrChargennrMitMenge(), false,
                                        theClientDto);

                        // PJ 15926
                        if (aLieferscheinpositionDto[iIndex].getVerleihIId() != null) {
                            VerleihDto verleihDto = getArtikelFac()
                                    .verleihFindByPrimaryKey(aLieferscheinpositionDto[iIndex].getVerleihIId());
                            data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_VERLEIHTAGE] = verleihDto.getITage();
                            data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_VERLEIHFAKTOR] = verleihDto
                                    .getFFaktor();
                        }

                        if (aLieferscheinpositionDto[iIndex].getLieferscheinpositionartCNr()
                                .equals(LieferscheinpositionFac.LIEFERSCHEINPOSITIONSART_IDENT)) {
                            // Ident nur wenn "echter" Artikel
                            data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_IDENTNUMMER] = artikelDto.getCNr();
                            data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_SERIENCHARGENR] = SeriennrChargennrMitMengeDto
                                    .erstelleStringAusMehrerenSeriennummern(
                                            aLieferscheinpositionDto[iIndex].getSeriennrChargennrMitMenge());
                            // Warenverkehrsnummer fuer Artikel
                            String sWarenverkehrsnummer = artikelDto.getCWarenverkehrsnummer();
                            data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_WARENVERKEHRSNUMMER] = sWarenverkehrsnummer;

                            // Ursprungsland
                            if (artikelDto.getLandIIdUrsprungsland() != null) {
                                LandDto landDto = getSystemFac()
                                        .landFindByPrimaryKey(artikelDto.getLandIIdUrsprungsland());
                                data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_ARTIKEL_URSPRUNGSLAND] = landDto
                                        .getCName().toUpperCase();
                            }

                            // Typ, wenn Setartikel

                            if (aLieferscheinpositionDto[iIndex].getPositioniIdArtikelset() != null) {

                                data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_SETARTIKEL_TYP] = ArtikelFac.SETARTIKEL_TYP_POSITION;

                            } else {

                                Session session = null;
                                SessionFactory factory = FLRSessionFactory.getFactory();
                                session = factory.openSession();
                                Criteria crit = session.createCriteria(FLRLieferscheinposition.class);
                                crit.add(Restrictions.eq("position_i_id_artikelset",
                                        aLieferscheinpositionDto[iIndex].getIId()));

                                List l = crit.list();
                                int iZeilen = l.size();

                                if (iZeilen > 0) {
                                    data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_SETARTIKEL_TYP] = ArtikelFac.SETARTIKEL_TYP_KOPF;
                                    String snrs = "";
                                    Iterator it = l.iterator();
                                    while (it.hasNext()) {
                                        FLRLieferscheinposition lsPos = (FLRLieferscheinposition) it.next();
                                        LieferscheinpositionDto lsPosDto = getLieferscheinpositionFac()
                                                .lieferscheinpositionFindByPrimaryKey(lsPos.getI_id(),
                                                        theClientDto);
                                        if (lsPosDto.getSeriennrChargennrMitMenge() != null) {
                                            Iterator itSnrs = lsPosDto.getSeriennrChargennrMitMenge().iterator();
                                            while (itSnrs.hasNext()) {
                                                SeriennrChargennrMitMengeDto snrDo = (SeriennrChargennrMitMengeDto) itSnrs
                                                        .next();
                                                if (snrDo.getCSeriennrChargennr() != null) {
                                                    snrs += snrDo.getCSeriennrChargennr() + ", ";
                                                }
                                            }

                                        }
                                    }
                                    if (snrs.endsWith(", ")) {
                                        snrs = snrs.substring(0, snrs.length() - 2);
                                    }
                                    data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_SERIENNUMMERN_DER_SETPOSITIONEN] = snrs;

                                }
                                session.close();
                            }

                            // Artikelgruppe
                            if (LocaleFac.BELEGART_RECHNUNG.equals(sBelegart)) {
                                if ((Boolean) getParameterFac()
                                        .getMandantparameter(theClientDto.getMandant(),
                                                ParameterFac.KATEGORIE_RECHNUNG,
                                                ParameterFac.PARAMETER_RECHNUNG_ARTIKELGRUPPE_DRUCKEN)
                                        .getCWertAsObject()) {
                                    if (artikelDto.getArtgruIId() != null) {
                                        ArtgruDto artgruDto = getArtikelFac()
                                                .artgruFindByPrimaryKey(artikelDto.getArtgruIId(), theClientDto);

                                        data[i][REPORT_LIEFERSCHEIN_ARTIKEL_ARTIKELGRUPPE] = data[i][REPORT_LIEFERSCHEIN_ARTIKEL_ARTIKELGRUPPE] == null
                                                ? artgruDto.getCNr() + "\n"
                                                : data[i][REPORT_LIEFERSCHEIN_ARTIKEL_ARTIKELGRUPPE]
                                                        + artgruDto.getCNr() + "\n";
                                    }
                                }
                            }
                            // Gewicht nur andrucken, wenn Hakerl bei Kunde:
                            // Gewicht auf LS andrucken
                            if (Helper.short2Boolean(kundeDto.getBLsgewichtangeben())) {
                                data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_ARTIKEL_GEWICHT] = artikelDto
                                        .getFGewichtkg();
                            }
                            if (artikelDto.getVerpackungDto() != null) {
                                data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_ARTIKEL_VERPACKUNGSART] = artikelDto
                                        .getVerpackungDto().getCVerpackungsart();
                            }

                            // KundeArtikelnr gueltig zu Belegdatum
                            KundesokoDto kundeSokoDto_gueltig = this.getKundesokoFac()
                                    .kundesokoFindByKundeIIdArtikelIIdGueltigkeitsdatumOhneExc(
                                            lieferscheinDto.getKundeIIdRechnungsadresse(), artikelDto.getIId(),
                                            new java.sql.Date(lieferscheinDto.getTBelegdatum().getTime()));
                            if (kundeSokoDto_gueltig != null) {
                                data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_KUNDEARTIKELNR] = kundeSokoDto_gueltig
                                        .getCKundeartikelnummer();
                            }

                            KundesokoDto kundeSokoDtoLieferadresse_gueltig = this.getKundesokoFac()
                                    .kundesokoFindByKundeIIdArtikelIIdGueltigkeitsdatumOhneExc(
                                            lieferscheinDto.getKundeIIdLieferadresse(), artikelDto.getIId(),
                                            new java.sql.Date(lieferscheinDto.getTBelegdatum().getTime()));
                            if (kundeSokoDtoLieferadresse_gueltig != null) {
                                data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_KUNDEARTIKELNR_LIEFERADRESSE] = kundeSokoDtoLieferadresse_gueltig
                                        .getCKundeartikelnummer();
                            }

                            if (artikelDto.getVerpackungDto() != null) {
                                data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_BAUFORM] = artikelDto
                                        .getVerpackungDto().getCBauform();
                                data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_VERPACKUNGSART] = artikelDto
                                        .getVerpackungDto().getCVerpackungsart();
                            }
                            if (artikelDto.getMaterialIId() != null) {
                                MaterialDto materialDto = getMaterialFac()
                                        .materialFindByPrimaryKey(artikelDto.getMaterialIId(), theClientDto);
                                if (materialDto.getMaterialsprDto() != null) {
                                    /**
                                     * @todo MR->MR richtige Mehrsprachigkeit:
                                     *       Material in Drucksprache.
                                     */
                                    data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_ARTIKEL_MATERIAL] = materialDto
                                            .getMaterialsprDto().getCBez();
                                } else {
                                    data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_ARTIKEL_MATERIAL] = materialDto
                                            .getCNr();
                                }

                                MaterialzuschlagDto mzDto = getMaterialFac()
                                        .getKursMaterialzuschlagDtoInZielwaehrung(artikelDto.getMaterialIId(),
                                                lieferscheinDto.getTBelegdatum(), lieferscheinDto.getWaehrungCNr(),
                                                theClientDto);

                                data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_ARTIKEL_KURS_MATERIALZUSCHLAG] = mzDto
                                        .getNZuschlag();
                                data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_ARTIKEL_DATUM_MATERIALZUSCHLAG] = mzDto
                                        .getTGueltigab();

                            }

                            data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_ARTIKEL_MATERIALGEWICHT] = artikelDto
                                    .getFMaterialgewicht();

                            if (artikelDto.getGeometrieDto() != null) {
                                data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_ARTIKEL_BREITE] = artikelDto
                                        .getGeometrieDto().getFBreite();
                                data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_ARTIKEL_HOEHE] = artikelDto
                                        .getGeometrieDto().getFHoehe();
                                data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_ARTIKEL_TIEFE] = artikelDto
                                        .getGeometrieDto().getFTiefe();
                            }

                        }
                        String sBezeichnung = artikelDto.getArtikelsprDto() != null
                                ? artikelDto.getArtikelsprDto().getCBez()
                                : "";
                        if (artikelDto.getArtikelsprDto() != null
                                && artikelDto.getArtikelsprDto().getCZbez() != null) {
                            sBezeichnung = sBezeichnung + "\n" + artikelDto.getArtikelsprDto().getCZbez();
                        }
                        data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_BEZEICHNUNG] = sBezeichnung;
                        data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_KURZBEZEICHNUNG] = artikelDto
                                .getArtikelsprDto() != null ? artikelDto.getArtikelsprDto().getCKbez() : "";

                        data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_MENGE] = aLieferscheinpositionDto[iIndex]
                                .getNMenge();
                        data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_ARTIKEL_VERPACKUNGSMENGE] = artikelDto
                                .getFVerpackungsmenge();
                        data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_ARTIKEL_WERBEABGABEPFLICHTIG] = Helper
                                .short2Boolean(artikelDto.getBWerbeabgabepflichtig());
                        data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_ARTIKEL_VERPACKUNGSEANNR] = artikelDto
                                .getCVerpackungseannr();
                        data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_ARTIKEL_VERKAUFSEANNR] = artikelDto
                                .getCVerkaufseannr();

                        data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_EINHEIT] = aLieferscheinpositionDto[iIndex]
                                .getEinheitCNr() == null
                                        ? null
                                        : getSystemFac().formatEinheit(
                                                aLieferscheinpositionDto[iIndex].getEinheitCNr(),
                                                Helper.string2Locale(
                                                        kundeDto.getPartnerDto().getLocaleCNrKommunikation()),
                                                theClientDto);

                        data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_KEIN_LIEFERREST] = Helper
                                .short2Boolean(aLieferscheinpositionDto[iIndex].getBKeinlieferrest());

                        BigDecimal bdBestellteMenge = null;
                        BigDecimal bdLieferrest = null;

                        if (aLieferscheinpositionDto[iIndex].getAuftragpositionIId() != null) {
                            AuftragpositionDto oAuftragpositionDto = getAuftragpositionFac()
                                    .auftragpositionFindByPrimaryKey(
                                            aLieferscheinpositionDto[iIndex].getAuftragpositionIId());
                            bdBestellteMenge = oAuftragpositionDto.getNMenge();
                            bdLieferrest = bdBestellteMenge.subtract(aLieferscheinpositionDto[iIndex].getNMenge());

                            LieferscheinpositionDto[] lsPosDtos = getLieferscheinpositionFac()
                                    .lieferscheinpositionFindByAuftragpositionIId(
                                            aLieferscheinpositionDto[iIndex].getAuftragpositionIId(), theClientDto);

                            for (int k = 0; k < lsPosDtos.length; k++) {
                                LieferscheinpositionDto lsPosDto = lsPosDtos[k];

                                LieferscheinDto lsDto = getLieferscheinFac()
                                        .lieferscheinFindByPrimaryKey(lsPosDto.getLieferscheinIId(), theClientDto);

                                if (!lsDto.getStatusCNr().equals(LocaleFac.STATUS_STORNIERT)) {
                                    if (lsDto.getTBelegdatum().before(lieferscheinDto.getTBelegdatum())) {
                                        bdLieferrest = bdLieferrest.subtract(lsPosDto.getNMenge());
                                    } else if (lsDto.getTBelegdatum().equals(lieferscheinDto.getTBelegdatum())) {
                                        if (lsDto.getCNr().compareTo(lieferscheinDto.getCNr()) < 0) {
                                            bdLieferrest = bdLieferrest.subtract(lsPosDto.getNMenge());
                                        }

                                    }
                                }

                            }

                            if (bdLieferrest.doubleValue() < 0) {
                                bdLieferrest = Helper.getBigDecimalNull();
                            }

                        } else {
                            bdBestellteMenge = aLieferscheinpositionDto[iIndex].getNMenge();
                            bdLieferrest = Helper.getBigDecimalNull();
                        }

                        data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_BESTELLT] = bdBestellteMenge;
                        data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_LIEFERREST] = bdLieferrest;
                        data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_LV_POSITION] = aLieferscheinpositionDto[iIndex]
                                .getCLvposition();

                        // Wenn es zu einem Artikel eine Stueckliste gibt...
                        if (aLieferscheinpositionDto[iIndex].getLieferscheinpositionartCNr()
                                .equals(LieferscheinpositionFac.LIEFERSCHEINPOSITIONSART_IDENT)) {
                            StuecklisteInfoDto stuecklisteInfoDto = getStuecklisteFac()
                                    .getStrukturdatenEinesArtikels(aLieferscheinpositionDto[iIndex].getArtikelIId(),
                                            true, null, // in die Rekursion mit
                                            // einer
                                            // leeren Listen einsteigen
                                            0, // in die Rekursion mit Ebene 0
                                            // einsteigen
                                            -1, // alle Stuecklisten komplett
                                            // aufloesen
                                            false, // Menge pro Einheit der
                                            // uebergeorndeten Position
                                            new BigDecimal(1), // fuer 1 Einheit
                                            // der STKL
                                            true, // Fremdfertigung aufloesen
                                            theClientDto);

                            if (stuecklisteInfoDto.getIiAnzahlPositionen().intValue() > 0) {
                                // in die naechste Zeile schreiben, zuerst noch
                                // die aktuelle fertig machen
                                data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_POSITIONSART] = aLieferscheinpositionDto[iIndex]
                                        .getLieferscheinpositionartCNr();
                                data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_SEITENUMBRUCH] = bbSeitenumbruch;

                                ArrayList<?> alStuecklisteAufgeloest = stuecklisteInfoDto
                                        .getAlStuecklisteAufgeloest();

                                Iterator<?> it = alStuecklisteAufgeloest.iterator();

                                while (it.hasNext()) {
                                    i++;

                                    StuecklisteMitStrukturDto stuecklisteMitStrukturDto = (StuecklisteMitStrukturDto) it
                                            .next();

                                    StuecklistepositionDto stuecklistepositionDto = stuecklisteMitStrukturDto
                                            .getStuecklistepositionDto();

                                    // Pro Position eine kuenstliche Zeile zum
                                    // Andrucken erzeugen,
                                    // als Bezugsmenge gilt immer 1 Einheit der
                                    // Stueckliste
                                    data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_POSITIONSART] = LieferscheinpositionFac.LIEFERSCHEINPOSITIONSART_STUECKLISTENPOSITION;
                                    data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_SEITENUMBRUCH] = bbSeitenumbruch;
                                    data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_STKLMENGE] = stuecklistepositionDto
                                            .getNMenge();
                                    data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_STKLEINHEIT] = getSystemFac()
                                            .formatEinheit(stuecklistepositionDto.getEinheitCNr(),
                                                    Helper.string2Locale(
                                                            kundeDto.getPartnerDto().getLocaleCNrKommunikation()),
                                                    theClientDto);

                                    // Einrueckung fuer Unterstuecklisten
                                    String einrueckung = "";
                                    for (int j = 0; j < stuecklisteMitStrukturDto.getIEbene(); j++) {
                                        einrueckung = einrueckung + "    ";
                                    }

                                    String artikelCNr = null;

                                    // @todo boeser Workaround ... PJ 4400
                                    if (stuecklistepositionDto.getArtikelDto().getCNr().startsWith("~")) {
                                        artikelCNr = AngebotReportFac.REPORT_VORKALKULATION_ZEICHEN_FUER_HANDEINGABE;
                                    } else {
                                        artikelCNr = stuecklistepositionDto.getArtikelDto().getCNr();
                                    }

                                    data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_STKLARTIKELCNR] = einrueckung
                                            + artikelCNr;
                                    data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_STKLARTIKELBEZ] = getArtikelFac()
                                            .baueArtikelBezeichnungMehrzeilig(
                                                    stuecklistepositionDto.getArtikelIId(),
                                                    LocaleFac.POSITIONSART_IDENT, null, null, false, locDruck,
                                                    theClientDto);

                                    if (stuecklistepositionDto.getArtikelIId() != null) {

                                        ArtikelDto artikelDtoStkl = getArtikelFac().artikelFindByPrimaryKeySmall(
                                                stuecklistepositionDto.getArtikelIId(), theClientDto);

                                        data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_STKLARTIKELKBEZ] = artikelDtoStkl
                                                .getKbezAusSpr();
                                    }

                                    // KundeArtikelnr gueltig zu Belegdatum
                                    KundesokoDto kundeSokoDto_gueltig = this.getKundesokoFac()
                                            .kundesokoFindByKundeIIdArtikelIIdGueltigkeitsdatumOhneExc(
                                                    lieferscheinDto.getKundeIIdRechnungsadresse(),
                                                    stuecklistepositionDto.getArtikelIId(),
                                                    new java.sql.Date(lieferscheinDto.getTBelegdatum().getTime()));
                                    if (kundeSokoDto_gueltig != null) {
                                        data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_STKLARTIKEL_KDARTIKELNR] = kundeSokoDto_gueltig
                                                .getCKundeartikelnummer();
                                    }

                                    long belegTime = auftragDto == null ? lieferscheinDto.getTBelegdatum().getTime()
                                            : auftragDto.getTBelegdatum().getTime();
                                    // PJ18038
                                    VkpreisfindungDto vkpreisfindungDto = getVkPreisfindungFac()
                                            .verkaufspreisfindung(stuecklistepositionDto.getArtikelIId(),
                                                    lieferscheinDto.getKundeIIdRechnungsadresse(),
                                                    stuecklistepositionDto.getNMenge(), new Date(belegTime),
                                                    kundeDto.getVkpfArtikelpreislisteIIdStdpreisliste(),
                                                    aLieferscheinpositionDto[iIndex].getMwstsatzIId(),
                                                    theClientDto.getSMandantenwaehrung(), theClientDto);

                                    VerkaufspreisDto kundenVKPreisDto = Helper
                                            .getVkpreisBerechnet(vkpreisfindungDto);
                                    if (kundenVKPreisDto != null) {
                                        data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_STKLARTIKEL_KDPREIS] = kundenVKPreisDto.nettopreis;
                                    }

                                }
                            }

                            // Positionsart fuer Druck aendern, wenn bei Ident
                            // die Serien oder Chargennummer angedruckt werden
                            // soll
                            if (Helper.short2Boolean(artikelDto.getBSeriennrtragend())
                                    || Helper.short2Boolean(artikelDto.getBChargennrtragend())) {
                                // Positionsart fuer aktuelle Position setzen,
                                // da neue Unterpositionen angelegt werden
                                if (data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_POSITIONSART] == null) {
                                    data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_POSITIONSART] = aLieferscheinpositionDto[iIndex]
                                            .getLieferscheinpositionartCNr();
                                }
                                // Seitenumbruch
                                data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_SEITENUMBRUCH] = bbSeitenumbruch;
                            }

                            if (Helper.short2Boolean(artikelDto.getBSeriennrtragend())) {
                                i++;
                                data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_SERIENCHARGENR] = SeriennrChargennrMitMengeDto
                                        .erstelleStringAusMehrerenSeriennummern(
                                                aLieferscheinpositionDto[iIndex].getSeriennrChargennrMitMenge());

                                data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_POSITIONSART] = LieferscheinpositionFac.LIEFERSCHEINPOSITIONSART_SERIENNR;
                                if (data[i - 1][LieferscheinReportFac.REPORT_LIEFERSCHEIN_SETARTIKEL_TYP] != null) {
                                    data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_SETARTIKEL_TYP] = new String(
                                            (String) data[i
                                                    - 1][LieferscheinReportFac.REPORT_LIEFERSCHEIN_SETARTIKEL_TYP]);
                                }
                                data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_SEITENUMBRUCH] = bbSeitenumbruch;
                            } else if (Helper.short2Boolean(artikelDto.getBChargennrtragend())) {
                                // Chargennummer splitten in eigene Positionen
                                String[] aChargeNummer = SeriennrChargennrMitMengeDto
                                        .erstelleStringArrayAusMehrerenSeriennummern(
                                                aLieferscheinpositionDto[iIndex].getSeriennrChargennrMitMenge());
                                for (int k = 0; k < aChargeNummer.length; k++) {
                                    String sChargeNummer = aChargeNummer[k];
                                    i++;
                                    if (bChargennummerBeinhaltetMindesthaltbarkeitsdatum) {
                                        // MHD als eigenes Feld falls vorhanden
                                        String[] aChargenrMHD = Helper.zerlegeChargennummerMHD(sChargeNummer);
                                        if (aChargenrMHD != null) {
                                            data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_SERIENCHARGENR] = aChargenrMHD[0];
                                            if (aChargenrMHD.length > 1) {
                                                data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_MINDESTHALTBARKEIT] = aChargenrMHD[1];
                                            }
                                        }
                                    } else {
                                        data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_SERIENCHARGENR] = sChargeNummer;
                                    }

                                    data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_POSITIONSART] = LieferscheinpositionFac.LIEFERSCHEINPOSITIONSART_CHARGENR;
                                    data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_SEITENUMBRUCH] = bbSeitenumbruch;
                                    if (data[i
                                            - 1][LieferscheinReportFac.REPORT_LIEFERSCHEIN_SETARTIKEL_TYP] != null) {
                                        data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_SETARTIKEL_TYP] = new String(
                                                (String) data[i
                                                        - 1][LieferscheinReportFac.REPORT_LIEFERSCHEIN_SETARTIKEL_TYP]);
                                    }
                                    // Menge dieser Charge holen,nur wenn
                                    // mehrere Chargennummer vorhanden sind
                                    if (aChargeNummer.length > 1) {
                                        // alle Chargennummern der Position
                                        List<SeriennrChargennrMitMengeDto> aChargenMitMengeDto = getLagerFac()
                                                .getAllSeriennrchargennrEinerBelegartposition(
                                                        LocaleFac.BELEGART_LIEFERSCHEIN,
                                                        aLieferscheinpositionDto[iIndex].getIId());

                                        if (aChargenMitMengeDto != null) {
                                            for (int u = 0; u < aChargenMitMengeDto.size(); u++) {
                                                SeriennrChargennrMitMengeDto chargenMitMengeDto = aChargenMitMengeDto
                                                        .get(u);
                                                // Menge der aktuellen Chargenr
                                                // holen
                                                if (sChargeNummer
                                                        .equals(chargenMitMengeDto.getCSeriennrChargennr())) {
                                                    data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_SERIENCHARGENR_MENGE] = chargenMitMengeDto
                                                            .getNMenge();
                                                }
                                            }
                                        }

                                    }
                                }
                            }
                        }
                    }

                    // Betrifft Positionen
                    else if (aLieferscheinpositionDto[iIndex].getLieferscheinpositionartCNr()
                            .equals(LieferscheinpositionFac.LIEFERSCHEINPOSITIONSART_BETRIFFT)) {
                        data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_FREIERTEXT] = aLieferscheinpositionDto[iIndex]
                                .getCBez();
                    }

                    // Texteingabe Positionen
                    else if (aLieferscheinpositionDto[iIndex].getLieferscheinpositionartCNr()
                            .equals(LieferscheinpositionFac.LIEFERSCHEINPOSITIONSART_TEXTEINGABE)) {
                        // IMS 1619 leerer Text soll als Leerezeile erscheinen
                        String sText = aLieferscheinpositionDto[iIndex].getXTextinhalt();

                        if (sText != null && sText.trim().equals("")) {
                            data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_LEERZEILE] = " ";
                        } else {
                            data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_FREIERTEXT] = sText;
                        }
                    }

                    // Textbaustein Positionen
                    else if (aLieferscheinpositionDto[iIndex].getLieferscheinpositionartCNr()
                            .equals(LieferscheinpositionFac.LIEFERSCHEINPOSITIONSART_TEXTBAUSTEIN)) {
                        // Dto holen
                        MediastandardDto oMediastandardDto = getMediaFac().mediastandardFindByPrimaryKey(
                                aLieferscheinpositionDto[iIndex].getMediastandardIId());
                        // zum Drucken vorbereiten
                        BelegPositionDruckTextbausteinDto druckDto = printTextbaustein(oMediastandardDto,
                                theClientDto);
                        data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_FREIERTEXT] = druckDto.getSFreierText();
                        data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_IMAGE] = Helper
                                .imageToByteArray(druckDto.getOImage());
                    }

                    // Leerzeile Positionen
                    else if (aLieferscheinpositionDto[iIndex].getLieferscheinpositionartCNr()
                            .equals(LieferscheinpositionFac.LIEFERSCHEINPOSITIONSART_LEERZEILE)) {
                        data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_LEERZEILE] = " ";
                    }

                    else if (aLieferscheinpositionDto[iIndex].getLieferscheinpositionartCNr()
                            .equals(LieferscheinpositionFac.LIEFERSCHEINPOSITIONSART_INTELLIGENTE_ZWISCHENSUMME)) {
                        data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_VONPOSITION] = getLieferscheinpositionFac()
                                .getLSPositionNummer(aLieferscheinpositionDto[iIndex].getZwsVonPosition());
                        data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_BISPOSITION] = getLieferscheinpositionFac()
                                .getLSPositionNummer(aLieferscheinpositionDto[iIndex].getZwsBisPosition());
                        data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_ZWSNETTOSUMME] = aLieferscheinpositionDto[iIndex]
                                .getZwsNettoSumme();
                        data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_RABATT] = aLieferscheinpositionDto[iIndex]
                                .getFRabattsatz();
                        data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_IDENT] = aLieferscheinpositionDto[iIndex]
                                .getCBez();
                        data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_LS_POSITION_NR] = getLieferscheinpositionFac()
                                .getLSPositionNummer(aLieferscheinpositionDto[iIndex].getIId());
                        updateZwischensummenData(i, aLieferscheinpositionDto[iIndex].getZwsVonPosition(),
                                aLieferscheinpositionDto[iIndex].getZwsBisPosition(),
                                aLieferscheinpositionDto[iIndex].getCBez());
                    }
                    // Seitenumbruch Positionen
                    else if (aLieferscheinpositionDto[iIndex].getLieferscheinpositionartCNr()
                            .equals(LieferscheinpositionFac.LIEFERSCHEINPOSITIONSART_SEITENUMBRUCH)) {
                        bbSeitenumbruch = new Boolean(!bbSeitenumbruch.booleanValue()); // toggle
                    }

                    data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_SEITENUMBRUCH] = bbSeitenumbruch;

                    // Positionsart setzen, wenn es keine kuenstliche Position
                    // ist
                    if (data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_POSITIONSART] == null) {
                        data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_POSITIONSART] = aLieferscheinpositionDto[iIndex]
                                .getLieferscheinpositionartCNr();
                    }

                    iIndex++; // die naechste
                    // Lieferscheinposition
                    // bearbeiten
                }
            }

            // die Anzahl der Exemplare ist 1 + Anzahl der Kopien
            int iAnzahlExemplare = 1;

            if (iAnzahlKopienI != null && iAnzahlKopienI.intValue() > 0) {
                iAnzahlExemplare += iAnzahlKopienI.intValue();
            }

            aJasperPrint = new JasperPrintLP[iAnzahlExemplare];
            Integer varianteIId = theClientDto.getReportvarianteIId();
            for (int iKopieNummer = 0; iKopieNummer < iAnzahlExemplare; iKopieNummer++) {
                // jede Kopie bekommt eine Kopienummer, das Original bekommt
                // keine
                if (iKopieNummer > 0) {
                    parameter.put(LPReport.P_KOPIE_NUMMER, new Integer(iKopieNummer));
                }

                // Index zuruecksetzen !!!
                index = -1;
                theClientDto.setReportvarianteIId(varianteIId);
                initJRDS(parameter, LieferscheinReportFac.REPORT_MODUL, LieferscheinReportFac.REPORT_LIEFERSCHEIN,
                        theClientDto.getMandant(), locDruck, theClientDto, bMitLogo.booleanValue(),
                        lieferscheinDto.getKostenstelleIId());

                aJasperPrint[iKopieNummer] = getReportPrint();
            }

            PrintInfoDto values = getJCRDocFac().getPathAndPartnerAndTable(lieferscheinDto.getIId(),
                    QueryParameters.UC_ID_LIEFERSCHEIN, theClientDto);
            aJasperPrint[0].setOInfoForArchive(values);
            aJasperPrint[0].putAdditionalInformation(JasperPrintLP.KEY_BELEGART, LocaleFac.BELEGART_LIEFERSCHEIN);
            aJasperPrint[0].putAdditionalInformation(JasperPrintLP.KEY_BELEGIID, lieferscheinDto.getIId());

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

    /**
     * Update des Data-Arrays um die Zwischensummenbezeichnung in allen
     * Positionen verf&uuml;gbar zu haben.
     * 
     * @param i
     *            ist der Index an dem die Zwischensummenposition definiert ist
     * @param zwsVonPosition
     *            ist die IId der Von-Position
     * @param zwsBisPosition
     *            ist die IId der Bis-Position
     * @param cBez
     */
    private void updateZwischensummenData(int lastIndex, Integer zwsVonPosition, Integer zwsBisPosition,
            String cBez) {
        for (int i = 0; i < lastIndex; i++) {
            if (zwsVonPosition.equals(data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_INTERNAL_IID])) {
                if (null == data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_ZWSTEXT]) {
                    data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_ZWSTEXT] = cBez;
                } else {
                    String s = (String) data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_ZWSTEXT] + "\n" + cBez;
                    data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_ZWSTEXT] = s;
                }

                return;
            }
        }
    }

    /**
     * Das Datenarray des Lieferscheinausdrucks zurueckgeben. Wird vom
     * Rechnungsdruck verwendet.
     * 
     * @param lieferscheinIId
     *            Integer
     * @param theClientDto der aktuelle Benutzer
     * @return Object[][]
     * @throws EJBExceptionLP
     */
    public Object[][] getLieferscheinReportData(Integer lieferscheinIId, TheClientDto theClientDto)
            throws EJBExceptionLP {
        printLieferschein(lieferscheinIId, null, Boolean.TRUE, LocaleFac.BELEGART_RECHNUNG, theClientDto);
        return data;
    }

    /**
     * Etikett fuer einen Lieferschein drucken. <br>
     * Es handelt sich um einen einfachen A6 Druck.
     * 
     * @param iIdLieferscheinI
     *            PK des Lieferschein
     * @param iPaketnummer
     *            Integer
     * @param theClientDto
     *            der aktuelle Benutzer
     * @throws EJBExceptionLP
     *             Ausnahme
     * @return JasperPrint der Druck
     */
    @SuppressWarnings("unchecked")
    public JasperPrintLP printLieferscheinEtikett(Integer iIdLieferscheinI, Integer iPaketnummer,
            TheClientDto theClientDto) throws EJBExceptionLP {
        checkLieferscheinIId(iIdLieferscheinI);

        // Erstellung des Report
        JasperPrintLP oPrintO = null;
        cAktuellerReport = LieferscheinReportFac.REPORT_LIEFERSCHEIN_ETIKETT;

        try {
            LieferscheinDto lieferscheinDto = getLieferscheinFac().lieferscheinFindByPrimaryKey(iIdLieferscheinI,
                    theClientDto);

            KundeDto kundeDto = getKundeFac().kundeFindByPrimaryKey(lieferscheinDto.getKundeIIdLieferadresse(),
                    theClientDto);

            AnsprechpartnerDto oAnsprechpartnerDto = null;

            if (lieferscheinDto.getAnsprechpartnerIId() != null) {
                oAnsprechpartnerDto = getAnsprechpartnerFac()
                        .ansprechpartnerFindByPrimaryKey(lieferscheinDto.getAnsprechpartnerIId(), theClientDto);
            }

            MandantDto mandantDto = getMandantFac().mandantFindByPrimaryKey(theClientDto.getMandant(),
                    theClientDto);

            // es gilt das Locale des Lieferscheinkunden
            Locale locDruck = Helper.string2Locale(kundeDto.getPartnerDto().getLocaleCNrKommunikation());

            String sAdressefuerausdruck = formatAdresseFuerAusdruck(kundeDto.getPartnerDto(), oAnsprechpartnerDto,
                    mandantDto, locDruck);

            int iAnzahlZeilen = 1; // Anzahl der Zeilen in der Gruppe
            int iAnzahlSpalten = 4; // Anzahl der Spalten in der Gruppe

            data = new Object[iAnzahlZeilen][iAnzahlSpalten];

            // die Datenmatrix befuellen
            for (int i = 0; i < iAnzahlZeilen; i++) {
                data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_ADRESSETIKETT] = sAdressefuerausdruck;
            }

            HashMap parameter = new HashMap<Object, Object>();
            parameter.put("P_MANDANTADRESSE", Helper.formatMandantAdresse(mandantDto));
            parameter.put("P_VERSANDNUMMER", lieferscheinDto.getCVersandnummer());
            parameter.put("P_GEWICHT", lieferscheinDto.getFGewichtLieferung());
            parameter.put("P_LIEFERANTENNR", kundeDto.getCLieferantennr());
            parameter.put("P_KUNDENR", kundeDto.getIKundennummer());
            parameter.put("P_FILIALNR", kundeDto.getPartnerDto().getCFilialnummer());

            // Debitorenkonto des Kunden
            if (kundeDto.getIidDebitorenkonto() != null) {
                KontoDto kontoDto = getFinanzFac().kontoFindByPrimaryKey(kundeDto.getIidDebitorenkonto());
                parameter.put("P_KUNDE_DEBITORENKONTO", kontoDto.getCNr());
            }

            SpediteurDto spediteurDto = getMandantFac()
                    .spediteurFindByPrimaryKey(lieferscheinDto.getSpediteurIId());
            parameter.put("P_SPEDITEUR", spediteurDto.getCNamedesspediteurs());
            parameter.put("P_LIEFERART", getLocaleFac()
                    .lieferartFindByIIdLocaleOhneExc(lieferscheinDto.getLieferartIId(), locDruck, theClientDto));
            parameter.put("P_LIEFERSCHEINCNR", lieferscheinDto.getCNr());

            // Anzahl der Pakete bestimmen, die kann nicht kleiner als 1 sein
            Integer iAnzahlDerPakete;
            if (lieferscheinDto.getIAnzahlPakete() == null || lieferscheinDto.getIAnzahlPakete().intValue() <= 1) {
                iAnzahlDerPakete = new Integer(1);
            } else {
                iAnzahlDerPakete = lieferscheinDto.getIAnzahlPakete();
            }
            parameter.put("P_ANZAHLPAKETE", iAnzahlDerPakete);
            // eine bestimmte Paketnummer
            if (iPaketnummer != null) {
                parameter.put("P_PAKETNUMMER", iPaketnummer);
                initJRDS(parameter, LieferscheinReportFac.REPORT_MODUL,
                        LieferscheinReportFac.REPORT_LIEFERSCHEIN_ETIKETT, theClientDto.getMandant(), locDruck,
                        theClientDto);
                oPrintO = getReportPrint();
            }
            // oder sofort saemtliche Etiketten fuer alle Pakete
            else {
                Integer cachedReportvariante = theClientDto.getReportvarianteIId();
                for (int i = 1; i <= iAnzahlDerPakete.intValue(); i++) {
                    index = -1;
                    iPaketnummer = new Integer(i);
                    parameter.put("P_PAKETNUMMER", iPaketnummer);
                    theClientDto.setReportvarianteIId(cachedReportvariante);
                    initJRDS(parameter, LieferscheinReportFac.REPORT_MODUL,
                            LieferscheinReportFac.REPORT_LIEFERSCHEIN_ETIKETT, theClientDto.getMandant(), locDruck,
                            theClientDto);
                    // der erste
                    if (i == 1) {
                        oPrintO = getReportPrint();
                    }
                    // alle anderen dranhaengen
                    else {
                        oPrintO = Helper.addReport2Report(oPrintO, getReportPrint().getPrint());
                    }
                }
            }
        } catch (RemoteException ex) {
            throwEJBExceptionLPRespectOld(ex);
        }

        return oPrintO;
    }

    @SuppressWarnings("unchecked")
    public JasperPrintLP printLieferscheinWAEtikett(Integer iIdLieferscheinI, Integer iPaketnummer,
            Integer iIdLieferscheinPositionI, BigDecimal bdHandmenge, TheClientDto theClientDto)
            throws EJBExceptionLP {
        checkLieferscheinIId(iIdLieferscheinI);

        // Erstellung des Report
        JasperPrintLP oPrintO = null;
        int iArtikelpositionsnummer = 1;
        cAktuellerReport = LieferscheinReportFac.REPORT_LIEFERSCHEIN_WA_ETIKETT;

        try {
            LieferscheinDto lieferscheinDto = getLieferscheinFac().lieferscheinFindByPrimaryKey(iIdLieferscheinI,
                    theClientDto);
            LieferscheinpositionDto[] aLieferscheinpositionDto = getLieferscheinpositionFac()
                    .getLieferscheinPositionenByLieferschein(lieferscheinDto.getIId(), theClientDto);

            int iAnzahlZeilen = 0; // Anzahl der Zeilen in der Gruppe

            for (int i = 0; i < aLieferscheinpositionDto.length; i++) {

                if (iIdLieferscheinPositionI != null
                        && !iIdLieferscheinPositionI.equals(aLieferscheinpositionDto[i].getIId())) {
                    continue;
                }

                if (aLieferscheinpositionDto[i].getLieferscheinpositionartCNr()
                        .equals(LieferscheinpositionFac.LIEFERSCHEINPOSITIONSART_IDENT)) {
                    // Die Zeilenanzahl muss vor dem Befuellen festgelegt
                    // werden.
                    StuecklisteInfoDto stuecklisteInfoDto = getStuecklisteFac().getStrukturdatenEinesArtikels(
                            aLieferscheinpositionDto[i].getArtikelIId(), true, null, // in die Rekursion mit einer
                            // leeren Listen einsteigen
                            0, // in die Rekursion mit Ebene 0
                            // einsteigen
                            -1, // alle Stuecklisten komplett aufloesen
                            false, // Menge pro Einheit der
                            // uebergeorndeten Position
                            new BigDecimal(1), // fuer 1 Einheit der
                            // STKL
                            true, // Fremdfertigung aufloesen
                            theClientDto);

                    iAnzahlZeilen++; // fuer die eigentliche Ident Position
                    iAnzahlZeilen += stuecklisteInfoDto.getIiAnzahlPositionen().intValue();
                    // Auftragsdaten, wenn die Position auftragsbezogen ist
                    if (aLieferscheinpositionDto[i].getAuftragpositionIId() != null) {
                        iAnzahlZeilen++;
                    }
                    // Serien bzw Chargennummer Anzahl des Artikels
                    int iAnzahlSerienChargeNr = berechneAnzahlSerienChargeNummern(
                            aLieferscheinpositionDto[i].getArtikelIId(),
                            aLieferscheinpositionDto[i].getSeriennrChargennrMitMenge(), theClientDto);
                    iAnzahlZeilen += iAnzahlSerienChargeNr;
                } else if (aLieferscheinpositionDto[i].getLieferscheinpositionartCNr()
                        .equals(LieferscheinpositionFac.LIEFERSCHEINPOSITIONSART_HANDEINGABE)) {
                    iAnzahlZeilen++; // fuer die eigentliche Position
                    // Auftragsdaten, wenn die Position auftragsbezogen ist
                    if (aLieferscheinpositionDto[i].getAuftragpositionIId() != null) {
                        iAnzahlZeilen++;
                    }
                } else if (aLieferscheinpositionDto[i].getLieferscheinpositionartCNr()
                        .equals(LocaleFac.POSITIONSART_POSITION)) {
                    iAnzahlZeilen++; // fuer die eigentliche Position
                    if (aLieferscheinpositionDto[i].getTypCNr().equals(LocaleFac.POSITIONTYP_MITPREISE)) {
                        Session session = null;
                        SessionFactory factory = FLRSessionFactory.getFactory();
                        session = factory.openSession();
                        Criteria crit = session.createCriteria(FLRLieferscheinposition.class);
                        crit.add(Restrictions.eq("position_i_id", aLieferscheinpositionDto[i].getIId()));
                        crit.addOrder(Order.asc(RechnungFac.FLR_RECHNUNGPOSITION_I_SORT));
                        iAnzahlZeilen = iAnzahlZeilen + crit.list().size();
                    }
                    // Auftragsdaten, wenn die Position auftragsbezogen ist
                    if (aLieferscheinpositionDto[i].getAuftragpositionIId() != null) {
                        iAnzahlZeilen++;
                    }
                }

                else {
                    iAnzahlZeilen++; // fuer die Positionszeile
                }
            }

            KundeDto kundeDto = getKundeFac().kundeFindByPrimaryKey(lieferscheinDto.getKundeIIdLieferadresse(),
                    theClientDto);

            AnsprechpartnerDto oAnsprechpartnerDto = null;

            if (lieferscheinDto.getAnsprechpartnerIId() != null) {
                oAnsprechpartnerDto = getAnsprechpartnerFac()
                        .ansprechpartnerFindByPrimaryKey(lieferscheinDto.getAnsprechpartnerIId(), theClientDto);
            }

            MandantDto mandantDto = getMandantFac().mandantFindByPrimaryKey(theClientDto.getMandant(),
                    theClientDto);

            // es gilt das Locale des Lieferscheinkunden
            Locale locDruck = Helper.string2Locale(kundeDto.getPartnerDto().getLocaleCNrKommunikation());

            String sAdressefuerausdruck = formatAdresseFuerAusdruck(kundeDto.getPartnerDto(), oAnsprechpartnerDto,
                    mandantDto, locDruck);

            // data = new Object[iAnzahlZeilen][LieferscheinReportFac.
            // REPORT_LIEFERSCHEIN_WA_ETIKETT_ANZAHL_SPALTEN];
            List<Object> dataList = new ArrayList<Object>(); // in dieser Liste
            String positionsartCNr = null;
            String typCNr = null;
            for (int i = 0; i < aLieferscheinpositionDto.length; i++) {
                if (iIdLieferscheinPositionI != null
                        && !iIdLieferscheinPositionI.equals(aLieferscheinpositionDto[i].getIId())) {
                    continue;
                }

                positionsartCNr = aLieferscheinpositionDto[i].getLieferscheinpositionartCNr();
                typCNr = aLieferscheinpositionDto[i].getTypCNr();
                if (typCNr == null) {
                    if (positionsartCNr.equals(AngebotServiceFac.ANGEBOTPOSITIONART_IDENT)
                            || positionsartCNr.equals(AngebotServiceFac.ANGEBOTPOSITIONART_HANDEINGABE)
                            || positionsartCNr.equals(AngebotServiceFac.ANGEBOTPOSITIONART_AGSTUECKLISTE)) {
                        dataList.add(befuelleZeileMitPreisbehafteterPosition(aLieferscheinpositionDto[i],
                                lieferscheinDto, kundeDto, iArtikelpositionsnummer, null, false, locDruck,
                                theClientDto));

                        iArtikelpositionsnummer++;
                    }
                }
            }
            // jetzt die Map mit dataRows in ein Object[][] fuer den Druck
            // umwandeln
            data = new Object[dataList.size()][LieferscheinReportFac.REPORT_LIEFERSCHEIN_WA_ETIKETT_ANZAHL_SPALTEN];
            data = (Object[][]) dataList.toArray(data);

            HashMap parameter = new HashMap<Object, Object>();
            parameter.put("Mandantenadresse", Helper.formatMandantAdresse(mandantDto));
            parameter.put("P_VERSANDNUMMER", lieferscheinDto.getCVersandnummer());
            parameter.put("P_HANDMENGE", bdHandmenge);

            parameter.put("P_PROJEKT", lieferscheinDto.getCBezProjektbezeichnung());
            parameter.put("P_LIEFERSCHEINNUMMER", lieferscheinDto.getCNr());
            parameter.put("P_KOMMISSION", lieferscheinDto.getCKommission());

            if (lieferscheinDto.getAuftragIId() != null) {
                AuftragDto auftragDto = getAuftragFac().auftragFindByPrimaryKey(lieferscheinDto.getAuftragIId());
                parameter.put("P_AUFTRAGSNUMMER", auftragDto.getCNr());
            }
            parameter.put("P_LIEFERANTENNUMMER", kundeDto.getCLieferantennr());

            // sAdressefuerausdruck = sAdressefuerausdruck.replace("\n", " ");
            parameter.put("P_KUNDE_ADRESSBLOCK", sAdressefuerausdruck);

            if (lieferscheinDto.getAuftragIId() != null) {
                AuftragDto auftragDto = getAuftragFac().auftragFindByPrimaryKey(lieferscheinDto.getAuftragIId());
                AnsprechpartnerDto oAnsprechpartnerAuftragDto = null;
                if (auftragDto.getAnsprechparnterIId() != null) {
                    oAnsprechpartnerAuftragDto = getAnsprechpartnerFac()
                            .ansprechpartnerFindByPrimaryKey(auftragDto.getAnsprechparnterIId(), theClientDto);
                }

                KundeDto kundeAuftragDto = getKundeFac()
                        .kundeFindByPrimaryKey(auftragDto.getKundeIIdAuftragsadresse(), theClientDto);

                String sAuftragsAdressefuerausdruck = formatAdresseFuerAusdruck(kundeAuftragDto.getPartnerDto(),
                        oAnsprechpartnerAuftragDto, mandantDto, locDruck);
                parameter.put("P_KUNDEAUFTRAG_ADRESSBLOCK", sAuftragsAdressefuerausdruck);
            }

            parameter.put("P_BESTELLNUMMER", lieferscheinDto.getCBestellnummer());
            parameter.put("P_BELEGDATUM", Helper.formatDatum(lieferscheinDto.getTBelegdatum(), locDruck));
            parameter.put("P_LIEFERTERMIN", Helper.formatDatum(lieferscheinDto.getTLiefertermin(), locDruck));

            parameter.put("P_PAKETE", lieferscheinDto.getIAnzahlPakete());
            parameter.put("P_GEWICHT", lieferscheinDto.getFGewichtLieferung());
            parameter.put("P_VERSANDNUMMER", lieferscheinDto.getCVersandnummer());

            // Anzahl der Pakete bestimmen, die kann nicht kleiner als 1 sein
            Integer iAnzahlDerPakete;
            if (lieferscheinDto.getIAnzahlPakete() == null || lieferscheinDto.getIAnzahlPakete().intValue() <= 1) {
                iAnzahlDerPakete = new Integer(1);
            } else {
                iAnzahlDerPakete = lieferscheinDto.getIAnzahlPakete();
            }
            parameter.put("P_ANZAHLPAKETE", iAnzahlDerPakete);

            // eine bestimmte Paketnummer
            if (iPaketnummer != null) {
                parameter.put("P_PAKETNUMMER", iPaketnummer);
                initJRDS(parameter, LieferscheinReportFac.REPORT_MODUL,
                        LieferscheinReportFac.REPORT_LIEFERSCHEIN_WA_ETIKETT, theClientDto.getMandant(), locDruck,
                        theClientDto);
                oPrintO = getReportPrint();
            }
            // oder sofort saemtliche Etiketten fuer alle Pakete
            else {
                Integer varianteIId = theClientDto.getReportvarianteIId();
                for (int i = 1; i <= iAnzahlDerPakete.intValue(); i++) {
                    index = -1;
                    iPaketnummer = new Integer(i);
                    parameter.put("P_PAKETNUMMER", iPaketnummer);
                    theClientDto.setReportvarianteIId(varianteIId);

                    initJRDS(parameter, LieferscheinReportFac.REPORT_MODUL,
                            LieferscheinReportFac.REPORT_LIEFERSCHEIN_WA_ETIKETT, theClientDto.getMandant(),
                            locDruck, theClientDto);
                    // der erste
                    if (i == 1) {
                        oPrintO = getReportPrint();
                    }
                    // alle anderen dranhaengen
                    else {
                        oPrintO = Helper.addReport2Report(oPrintO, getReportPrint().getPrint());
                    }
                }
            }

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

        return oPrintO;
    }

    private Integer getGesamtAnzahlAnAuftraegen(LieferscheinDto lieferscheinDto) {

        HashMap hmAuftraege = new HashMap();

        if (lieferscheinDto.getAuftragIId() != null) {
            hmAuftraege.put(lieferscheinDto.getAuftragIId(), "");
        }

        // Auftrage aus LS-Positionen
        Session session = FLRSessionFactory.getFactory().openSession();
        String sQuery = "SELECT distinct auftragpos.auftrag_i_id FROM FLRLieferscheinposition lp LEFT OUTER JOIN lp.flrpositionensichtauftrag AS auftragpos WHERE lp.flrlieferschein.i_id="
                + lieferscheinDto.getIId() + " ";

        Query querylagerbewegungen = session.createQuery(sQuery);
        List<?> results = querylagerbewegungen.list();
        Iterator<?> resultListIterator = results.iterator();
        while (resultListIterator.hasNext()) {
            Integer auftragIId = (Integer) resultListIterator.next();
            if (auftragIId != null && !hmAuftraege.containsKey(auftragIId)) {
                hmAuftraege.put(auftragIId, "");

            }
        }
        session.close();

        return hmAuftraege.size();
    }

    public int getGesamtzahlPakete(Integer iIdLieferscheinI, TheClientDto theClientDto) {
        int iAnzahl = 0;

        try {
            LieferscheinDto lieferscheinDto = getLieferscheinFac().lieferscheinFindByPrimaryKey(iIdLieferscheinI,
                    theClientDto);
            LieferscheinpositionDto[] aLieferscheinpositionDto = getLieferscheinpositionFac()
                    .getLieferscheinPositionenByLieferschein(lieferscheinDto.getIId(), theClientDto);

            for (int i = 0; i < aLieferscheinpositionDto.length; i++) {
                iAnzahl += getAnzahlPaketeEinerPosition(aLieferscheinpositionDto[i].getIId(), theClientDto);
            }

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

        return iAnzahl;
    }

    public int getAnzahlPaketeEinerPosition(Integer iIdLieferscheinpositionI, TheClientDto theClientDto) {
        int iAnzahl = 0;
        try {
            LieferscheinpositionDto lsPos = getLieferscheinpositionFac()
                    .lieferscheinpositionFindByPrimaryKey(iIdLieferscheinpositionI, theClientDto);

            if (lsPos.getPositionsartCNr().equals(LieferscheinpositionFac.LIEFERSCHEINPOSITIONSART_IDENT)) {
                ArtikelDto artikelDto = getArtikelFac().artikelFindByPrimaryKey(lsPos.getArtikelIId(),
                        theClientDto);

                if (artikelDto.getFVerpackungsmenge() == null || artikelDto.getFVerpackungsmenge() == 0) {
                    iAnzahl += 1;
                } else {
                    iAnzahl += lsPos.getNMenge().doubleValue() / artikelDto.getFVerpackungsmenge();
                    if (lsPos.getNMenge().doubleValue() % artikelDto.getFVerpackungsmenge() > 0) {
                        iAnzahl += 1;
                    }
                }

            }

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

    public JasperPrintLP printVersandetikett(Integer iIdLieferscheinI, TheClientDto theClientDto) {
        checkLieferscheinIId(iIdLieferscheinI);

        // Erstellung des Report
        cAktuellerReport = LieferscheinReportFac.REPORT_LIEFERSCHEIN_VERSANDETIKETTEN;

        try {
            LieferscheinDto lieferscheinDto = getLieferscheinFac().lieferscheinFindByPrimaryKey(iIdLieferscheinI,
                    theClientDto);
            LieferscheinpositionDto[] aLieferscheinpositionDto = getLieferscheinpositionFac()
                    .getLieferscheinPositionenByLieferschein(lieferscheinDto.getIId(), theClientDto);

            KundeDto kundeDto = getKundeFac().kundeFindByPrimaryKey(lieferscheinDto.getKundeIIdLieferadresse(),
                    theClientDto);

            AnsprechpartnerDto oAnsprechpartnerDto = null;

            if (lieferscheinDto.getAnsprechpartnerIId() != null) {
                oAnsprechpartnerDto = getAnsprechpartnerFac()
                        .ansprechpartnerFindByPrimaryKey(lieferscheinDto.getAnsprechpartnerIId(), theClientDto);
            }

            MandantDto mandantDto = getMandantFac().mandantFindByPrimaryKey(theClientDto.getMandant(),
                    theClientDto);

            // es gilt das Locale des Lieferscheinkunden
            Locale locDruck = Helper.string2Locale(kundeDto.getPartnerDto().getLocaleCNrKommunikation());

            String sAdressefuerausdruck = formatAdresseFuerAusdruck(kundeDto.getPartnerDto(), oAnsprechpartnerDto,
                    mandantDto, locDruck);

            HashMap parameter = new HashMap<Object, Object>();
            parameter.put("Mandantenadresse", Helper.formatMandantAdresse(mandantDto));
            parameter.put("P_VERSANDNUMMER", lieferscheinDto.getCVersandnummer());

            parameter.put("P_PROJEKT", lieferscheinDto.getCBezProjektbezeichnung());
            parameter.put("P_LIEFERSCHEINNUMMER", lieferscheinDto.getCNr());
            parameter.put("P_ZIELLAGER",
                    getLagerFac().lagerFindByPrimaryKey(lieferscheinDto.getLagerIId()).getCNr());
            parameter.put("P_KOMMISSION", lieferscheinDto.getCKommission());

            if (lieferscheinDto.getAuftragIId() != null) {
                AuftragDto auftragDto = getAuftragFac().auftragFindByPrimaryKey(lieferscheinDto.getAuftragIId());
                parameter.put("P_AUFTRAGSNUMMER", auftragDto.getCNr());
            }
            parameter.put("P_LIEFERANTENNUMMER", kundeDto.getCLieferantennr());

            // sAdressefuerausdruck = sAdressefuerausdruck.replace("\n", " ");
            parameter.put("P_KUNDE_ADRESSBLOCK", sAdressefuerausdruck);

            if (lieferscheinDto.getAuftragIId() != null) {
                AuftragDto auftragDto = getAuftragFac().auftragFindByPrimaryKey(lieferscheinDto.getAuftragIId());
                AnsprechpartnerDto oAnsprechpartnerAuftragDto = null;
                if (auftragDto.getAnsprechparnterIId() != null) {
                    oAnsprechpartnerAuftragDto = getAnsprechpartnerFac()
                            .ansprechpartnerFindByPrimaryKey(auftragDto.getAnsprechparnterIId(), theClientDto);
                }

                KundeDto kundeAuftragDto = getKundeFac()
                        .kundeFindByPrimaryKey(auftragDto.getKundeIIdAuftragsadresse(), theClientDto);

                String sAuftragsAdressefuerausdruck = formatAdresseFuerAusdruck(kundeAuftragDto.getPartnerDto(),
                        oAnsprechpartnerAuftragDto, mandantDto, locDruck);
                parameter.put("P_KUNDEAUFTRAG_ADRESSBLOCK", sAuftragsAdressefuerausdruck);
            }

            parameter.put("P_BESTELLNUMMER", lieferscheinDto.getCBestellnummer());
            parameter.put("P_BELEGDATUM", Helper.formatDatum(lieferscheinDto.getTBelegdatum(), locDruck));
            parameter.put("P_LIEFERTERMIN", Helper.formatDatum(lieferscheinDto.getTLiefertermin(), locDruck));

            parameter.put("P_PAKETE", lieferscheinDto.getIAnzahlPakete());
            parameter.put("P_GEWICHT", lieferscheinDto.getFGewichtLieferung());
            parameter.put("P_VERSANDNUMMER", lieferscheinDto.getCVersandnummer());

            parameter.put("P_PAKETEGESAMT", new Integer(getGesamtzahlPakete(iIdLieferscheinI, theClientDto)));

            int iAktuellesPaket = 0;

            ArrayList alDaten = new ArrayList();

            for (int i = 0; i < aLieferscheinpositionDto.length; i++) {

                int iAnzahlPosition = getAnzahlPaketeEinerPosition(aLieferscheinpositionDto[i].getIId(),
                        theClientDto);

                BigDecimal bdPaketmenge = aLieferscheinpositionDto[i].getNMenge();

                for (int j = 0; j < iAnzahlPosition; j++) {
                    iAktuellesPaket++;

                    Object[] oZeileVersand = new Object[REPORT_LIEFERSCHEIN_VERSANDETIKETT_ANZAHL_SPALTEN];

                    // Positionsdaten

                    oZeileVersand[REPORT_LIEFERSCHEIN_VERSANDETIKETT_ARTIKEL_BEZ] =

                            oZeileVersand[REPORT_LIEFERSCHEIN_VERSANDETIKETT_AKTUELLESPAKET] = new Integer(
                                    iAktuellesPaket);

                    Object[] oZeile = befuelleZeileMitPreisbehafteterPosition(aLieferscheinpositionDto[i],
                            lieferscheinDto, kundeDto, 0, null, false, locDruck, theClientDto);
                    if (aLieferscheinpositionDto[i].getPositionsartCNr()
                            .equals(LieferscheinpositionFac.LIEFERSCHEINPOSITIONSART_IDENT)) {
                        ArtikelDto artikelDto = getArtikelFac()
                                .artikelFindByPrimaryKey(aLieferscheinpositionDto[i].getArtikelIId(), theClientDto);

                        oZeileVersand[REPORT_LIEFERSCHEIN_VERSANDETIKETT_VERPACKUNGSMENGE] = artikelDto
                                .getFVerpackungsmenge();

                        if (artikelDto.getFVerpackungsmenge() != null) {

                            if (bdPaketmenge.doubleValue() < artikelDto.getFVerpackungsmenge()) {

                                oZeileVersand[REPORT_LIEFERSCHEIN_VERSANDETIKETT_PAKETMENGE] = bdPaketmenge;

                            } else {

                                oZeileVersand[REPORT_LIEFERSCHEIN_VERSANDETIKETT_PAKETMENGE] = new BigDecimal(
                                        artikelDto.getFVerpackungsmenge());

                            }

                            bdPaketmenge = bdPaketmenge.subtract(new BigDecimal(artikelDto.getFVerpackungsmenge()));

                        }

                    }

                    oZeileVersand[REPORT_LIEFERSCHEIN_VERSANDETIKETT_ARTIKEL_BEZ] = oZeile[REPORT_LIEFERSCHEIN_WA_ETIKETT_ARTIKEL_BEZ];
                    oZeileVersand[REPORT_LIEFERSCHEIN_VERSANDETIKETT_ARTIKEL_BESTELLNUMMER] = oZeile[REPORT_LIEFERSCHEIN_WA_ETIKETT_ARTIKEL_BESTELLNUMMER];
                    oZeileVersand[REPORT_LIEFERSCHEIN_VERSANDETIKETT_ARTIKEL_ZBEZ] = oZeile[REPORT_LIEFERSCHEIN_WA_ETIKETT_ARTIKEL_ZBEZ];
                    oZeileVersand[REPORT_LIEFERSCHEIN_VERSANDETIKETT_ARTIKEL_KBEZ] = oZeile[REPORT_LIEFERSCHEIN_WA_ETIKETT_ARTIKEL_KBEZ];
                    oZeileVersand[REPORT_LIEFERSCHEIN_VERSANDETIKETT_ARTIKEL_ZBEZ2] = oZeile[REPORT_LIEFERSCHEIN_WA_ETIKETT_ARTIKEL_ZBEZ2];
                    oZeileVersand[REPORT_LIEFERSCHEIN_VERSANDETIKETT_ARTIKEL_REFERENZNUMMER] = oZeile[REPORT_LIEFERSCHEIN_WA_ETIKETT_ARTIKEL_REFERENZNUMMER];
                    oZeileVersand[REPORT_LIEFERSCHEIN_VERSANDETIKETT_ARTIKEL_REVISION] = oZeile[REPORT_LIEFERSCHEIN_WA_ETIKETT_ARTIKEL_REVISION];
                    oZeileVersand[REPORT_LIEFERSCHEIN_VERSANDETIKETT_ARTIKEL_TEXTEINGABE] = oZeile[REPORT_LIEFERSCHEIN_WA_ETIKETT_ARTIKEL_TEXTEINGABE];
                    oZeileVersand[REPORT_LIEFERSCHEIN_VERSANDETIKETT_ARTIKEL_INDEX] = oZeile[REPORT_LIEFERSCHEIN_WA_ETIKETT_ARTIKEL_INDEX];
                    oZeileVersand[REPORT_LIEFERSCHEIN_VERSANDETIKETT_ARTIKEL_GEWICHT] = oZeile[REPORT_LIEFERSCHEIN_WA_ETIKETT_ARTIKEL_GEWICHT];
                    oZeileVersand[REPORT_LIEFERSCHEIN_VERSANDETIKETT_IDENT] = oZeile[REPORT_LIEFERSCHEIN_WA_ETIKETT_IDENT];
                    oZeileVersand[REPORT_LIEFERSCHEIN_VERSANDETIKETT_ARTIKEL_KUNDENARTIKELNUMMER] = oZeile[REPORT_LIEFERSCHEIN_WA_ETIKETT_ARTIKEL_KUNDENARTIKELNUMMER];
                    oZeileVersand[REPORT_LIEFERSCHEIN_VERSANDETIKETT_ARTIKEL_WE_REFERENZ] = oZeile[REPORT_LIEFERSCHEIN_WA_ETIKETT_ARTIKEL_WE_REFERENZ];
                    oZeileVersand[REPORT_LIEFERSCHEIN_VERSANDETIKETT_EINHEIT] = oZeile[REPORT_LIEFERSCHEIN_WA_ETIKETT_EINHEIT];
                    oZeileVersand[REPORT_LIEFERSCHEIN_VERSANDETIKETT_ANLIEFERMENGE] = oZeile[REPORT_LIEFERSCHEIN_WA_ETIKETT_MENGE];
                    oZeileVersand[REPORT_LIEFERSCHEIN_VERSANDETIKETT_SERIENCHARGENR] = oZeile[REPORT_LIEFERSCHEIN_WA_ETIKETT_SERIENCHARGENR];
                    oZeileVersand[REPORT_LIEFERSCHEIN_VERSANDETIKETT_POSITION] = oZeile[REPORT_LIEFERSCHEIN_WA_ETIKETT_POSITION];

                    alDaten.add(oZeileVersand);
                }

            }

            data = new Object[alDaten
                    .size()][LieferscheinReportFac.REPORT_LIEFERSCHEIN_VERSANDETIKETT_ANZAHL_SPALTEN];
            data = (Object[][]) alDaten.toArray(data);

            initJRDS(parameter, LieferscheinReportFac.REPORT_MODUL,
                    LieferscheinReportFac.REPORT_LIEFERSCHEIN_VERSANDETIKETTEN, theClientDto.getMandant(), locDruck,
                    theClientDto);

            return getReportPrint();
        } catch (RemoteException ex) {
            throwEJBExceptionLPRespectOld(ex);
            return null;
        }

    }

    /**
     * Alle offenen Lieferscheine fuer einen bestimmten Mandanten drucken.
     * 
     * @param reportJournalKriterienDtoI
     *            die Filter- und Sortierkriterien
     * @param theClientDto
     *            der aktuelle Benutzer
     * @throws EJBExceptionLP
     *             Ausnahme
     * @return JasperPrint der Druck
     */

    @TransactionAttribute(TransactionAttributeType.NEVER)
    public JasperPrintLP printLieferscheinOffene(ReportJournalKriterienDto reportJournalKriterienDtoI, Integer iArt,
            boolean bMitDetails, TheClientDto theClientDto) throws EJBExceptionLP {
        if (reportJournalKriterienDtoI == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_PARAMETER_IS_NULL,
                    new Exception("reportJournalKriterienDtoI == null"));
        }
        JasperPrintLP oPrintO = null;
        cAktuellerReport = LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE;
        int iIndex = 0;
        ArrayList<FLRLieferschein> oZeilen = new ArrayList();
        SessionFactory factory = FLRSessionFactory.getFactory();
        Session session = null;
        try {
            session = factory.openSession();
            // Hiberante Criteria fuer alle Tabellen ausgehend von meiner
            // Haupttabelle anlegen,
            // nach denen ich filtern und sortieren kann
            Criteria crit = session.createCriteria(FLRLieferschein.class);
            // Einschraenkung auf den aktuellen Mandanten
            crit.add(Restrictions.eq("mandant_c_nr", theClientDto.getMandant()));
            // Einschraenkung nach Status Offen
            crit.add(Restrictions.eq(LieferscheinFac.FLR_LIEFERSCHEIN_LIEFERSCHEINSTATUS_STATUS_C_NR,
                    LieferscheinFac.LSSTATUS_GELIEFERT));
            if (iArt != null) {
                if (iArt == 1) {
                    crit.add(Restrictions.eq(LieferscheinFac.FLR_LIEFERSCHEIN_B_VERRECHENBAR,
                            Helper.boolean2Short(true)));
                } else if (iArt == 2) {
                    crit.add(Restrictions.eq(LieferscheinFac.FLR_LIEFERSCHEIN_B_VERRECHENBAR,
                            Helper.boolean2Short(false)));
                }
            }
            // Einschraenkung nach einer bestimmten Kostenstelle
            if (reportJournalKriterienDtoI.kostenstelleIId != null) {
                crit.add(Restrictions.eq(LieferscheinFac.FLR_LIEFERSCHEIN_KOSTENSTELLE_I_ID,
                        reportJournalKriterienDtoI.kostenstelleIId));
            }

            // Einschraenkung nach einem bestimmten Kunden
            if (reportJournalKriterienDtoI.kundeIId != null) {
                crit.add(Restrictions.eq(LieferscheinFac.FLR_LIEFERSCHEIN_KUNDE_I_ID_LIEFERADRESSE,
                        reportJournalKriterienDtoI.kundeIId));
            }

            // Einschraenkung nach Belegdatum von - bis
            String sVon = null;
            String sBis = null;

            if (reportJournalKriterienDtoI.dVon != null) {
                crit.add(Restrictions.ge(LieferscheinFac.FLR_LIEFERSCHEIN_D_BELEGDATUM,
                        reportJournalKriterienDtoI.dVon));
                sVon = Helper.formatDatum(reportJournalKriterienDtoI.dVon, theClientDto.getLocUi());
            }

            if (reportJournalKriterienDtoI.dBis != null) {
                crit.add(Restrictions.le(LieferscheinFac.FLR_LIEFERSCHEIN_D_BELEGDATUM,
                        reportJournalKriterienDtoI.dBis));
                sBis = Helper.formatDatum(reportJournalKriterienDtoI.dBis, theClientDto.getLocUi());
            }

            // Einschraenkung nach Belegnummer von - bis
            LpBelegnummerFormat f = getBelegnummerGeneratorObj().getBelegnummernFormat(theClientDto.getMandant());

            Integer iGeschaeftsjahr = getParameterFac().getGeschaeftsjahr(theClientDto.getMandant());

            String sMandantKuerzel = getParameterFac().getMandantparameter(theClientDto.getMandant(),
                    ParameterFac.KATEGORIE_ALLGEMEIN, ParameterFac.PARAMETER_BELEGNUMMER_MANDANTKENNUNG).getCWert();

            if (reportJournalKriterienDtoI.sBelegnummerVon != null) {
                sVon = HelperServer.getBelegnummernFilterForHibernateCriterias(f, iGeschaeftsjahr, sMandantKuerzel,
                        reportJournalKriterienDtoI.sBelegnummerVon);
                crit.add(Restrictions.ge("c_nr", sVon));
            }

            if (reportJournalKriterienDtoI.sBelegnummerBis != null) {
                sBis = HelperServer.getBelegnummernFilterForHibernateCriterias(f, iGeschaeftsjahr, sMandantKuerzel,
                        reportJournalKriterienDtoI.sBelegnummerBis);
                crit.add(Restrictions.le("c_nr", sBis));
            }

            // Sortierung nach Kostenstelle ist immer die erste Sortierung
            if (reportJournalKriterienDtoI.bSortiereNachKostenstelle) {
                crit.createCriteria(LieferscheinFac.FLR_LIEFERSCHEIN_FLRKOSTENSTELLE).addOrder(Order.asc("c_nr"));
            }

            // Sortierung nach Kunde, eventuell innerhalb der Kostenstelle
            if (reportJournalKriterienDtoI.iSortierung == ReportJournalKriterienDto.KRIT_SORT_NACH_PARTNER) {
                crit.createCriteria(LieferscheinFac.FLR_LIEFERSCHEIN_FLRKUNDE).createCriteria(KundeFac.FLR_PARTNER)
                        .addOrder(Order.asc(PartnerFac.FLR_PARTNER_NAME1NACHNAMEFIRMAZEILE1));
            }

            // es wird in jedem Fall nach der Belegnummer sortiert
            crit.addOrder(Order.asc("c_nr"));
            List<?> list = crit.list();
            Iterator<?> it = list.iterator();
            while (it.hasNext()) {
                FLRLieferschein flrlieferschein = (FLRLieferschein) it.next();
                oZeilen.add(flrlieferschein);
                session = factory.openSession();
                Criteria critPosition = session.createCriteria(FLRLieferscheinposition.class);
                critPosition.add(Restrictions.eq(LieferscheinpositionFac.FLR_LIEFERSCHEINPOSITION_FLRLIEFERSCHEIN,
                        flrlieferschein));
                critPosition.add(Restrictions.or(
                        Restrictions.isNotNull(LieferscheinpositionFac.FLR_LIEFERSCHEINPOSITION_N_MENGE),
                        Restrictions.eq(
                                LieferscheinpositionFac.FLR_LIEFERSCHEINPOSITION_LIEFERSCHEINPOSITIONART_C_NR,
                                LieferscheinpositionFac.LIEFERSCHEINPOSITIONSART_TEXTEINGABE)));
                // critPosition
                // .add(Restrictions
                // .isNotNull(LieferscheinpositionFac.FLR_LIEFERSCHEINPOSITION_N_MENGE));
                List<?> posList = critPosition.list();
                for (Iterator<?> ipos = posList.iterator(); ipos.hasNext();) {
                    FLRLieferscheinposition item = (FLRLieferscheinposition) ipos.next();
                    iIndex++;
                }
                iIndex++;
            }
            data = new Object[iIndex][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_ANZAHL_ZEILEN]; // Anzahl
            // der
            // Spalten
            // in
            // der
            // Gruppe
            Iterator<?> itZeilen = oZeilen.iterator();
            int i = 0;
            while (itZeilen.hasNext()) {
                FLRLieferschein flrlieferschein = (FLRLieferschein) itZeilen.next();
                data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_LIEFERSCHEINCNR] = flrlieferschein
                        .getC_nr();
                data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_LIEFERSCHEINKUNDE] = flrlieferschein
                        .getFlrkunde().getFlrpartner().getC_name1nachnamefirmazeile1();
                data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_KOSTENSTELLECNR] = flrlieferschein
                        .getFlrkostenstelle().getC_nr();
                data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_ANLAGEDATUM] = flrlieferschein
                        .getD_belegdatum(); // todo
                data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_LIEFERTERMIN] = flrlieferschein
                        .getT_liefertermin();
                data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_ZAHLUNGSZIEL] = getMandantFac()
                        .zahlungszielFindByIIdLocaleOhneExc(flrlieferschein.getZahlungsziel_i_id(),
                                theClientDto.getLocMandant(), theClientDto);
                if (flrlieferschein.getFlrauftrag() != null) {
                    data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_AUFTRAGSNUMMER] = flrlieferschein
                            .getFlrauftrag().getC_nr();
                    data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_AUFTRAG_PROJEKT] = flrlieferschein
                            .getFlrauftrag().getC_bez();
                    data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_BESTELLNUMMER] = flrlieferschein
                            .getFlrauftrag().getC_bestellnummer();
                } else {
                    data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_AUFTRAGSNUMMER] = null;
                    data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_AUFTRAG_PROJEKT] = null;
                    data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_BESTELLNUMMER] = null;
                }
                data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_LIEFERART] = getLocaleFac()
                        .lieferartFindByIIdLocaleOhneExc(flrlieferschein.getLieferart_i_id(),
                                theClientDto.getLocMandant(), theClientDto);

                data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_LIEFERARTORT] = flrlieferschein
                        .getC_lieferartort();
                data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_VERRECHENBAR] = Helper
                        .short2Boolean(flrlieferschein.getB_verrechenbar());
                if (flrlieferschein.getFlrziellager() != null) {
                    data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_ZIELLAGER] = flrlieferschein
                            .getFlrziellager().getC_nr();
                }
                if (flrlieferschein.getFlrlager() != null) {
                    data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_ABLAGER] = flrlieferschein
                            .getFlrlager().getC_nr();
                }

                data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_RECHNUNGSADRESSE] = flrlieferschein
                        .getFlrkunderechnungsadresse().getFlrpartner().getC_name1nachnamefirmazeile1();

                data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_VERRECHENBAR] = Helper
                        .short2Boolean(flrlieferschein.getB_verrechenbar());

                if (flrlieferschein.getSpediteur_i_id() != null) {
                    data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_SPEDITEUR] = getMandantFac()
                            .spediteurFindByPrimaryKey(flrlieferschein.getSpediteur_i_id()).getCNamedesspediteurs();
                } else {
                    data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_SPEDITEUR] = null;
                }
                data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_PROJEKTBEZEICHNUNG] = flrlieferschein
                        .getC_bez_projektbezeichnung();
                session = factory.openSession();
                Criteria critPosition = session.createCriteria(FLRLieferscheinposition.class);
                critPosition.add(Restrictions.eq(LieferscheinpositionFac.FLR_LIEFERSCHEINPOSITION_FLRLIEFERSCHEIN,
                        flrlieferschein));

                critPosition.add(Restrictions.or(
                        Restrictions.isNotNull(LieferscheinpositionFac.FLR_LIEFERSCHEINPOSITION_N_MENGE),
                        Restrictions.eq(
                                LieferscheinpositionFac.FLR_LIEFERSCHEINPOSITION_LIEFERSCHEINPOSITIONART_C_NR,
                                LieferscheinpositionFac.LIEFERSCHEINPOSITIONSART_TEXTEINGABE)));

                // critPosition
                // .add(Restrictions
                // .isNotNull(LieferscheinpositionFac.FLR_LIEFERSCHEINPOSITION_N_MENGE));
                List<?> posList = critPosition.list();
                boolean darfVerkaufspreisSehen = getTheJudgeFac()
                        .hatRecht(RechteFac.RECHT_LP_DARF_PREISE_SEHEN_VERKAUF, theClientDto);

                for (Iterator<?> ipos = posList.iterator(); ipos.hasNext();) {
                    FLRLieferscheinposition item = (FLRLieferscheinposition) ipos.next();
                    i++;// in die naechste Zeile vorruecken
                    // nur mengenbehaftete Positionen beruecksichtigen
                    if (item.getN_menge() != null) {
                        String artikelCNr = null;
                        // TODO boeser Workaround ... PJ 4400
                        if (item.getFlrartikel().getC_nr().startsWith("~")) {
                            artikelCNr = AngebotReportFac.REPORT_VORKALKULATION_ZEICHEN_FUER_HANDEINGABE;
                        } else {
                            artikelCNr = item.getFlrartikel().getC_nr();
                        }
                        data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_ARTIKELCNR] = artikelCNr;
                        String cArtikelBezeichnung = "";

                        if (item.getPositionsart_c_nr()
                                .equals(LieferscheinpositionFac.LIEFERSCHEINPOSITIONSART_IDENT)
                                || item.getPositionsart_c_nr()
                                        .equals(LieferscheinpositionFac.LIEFERSCHEINPOSITIONSART_HANDEINGABE)) {
                            cArtikelBezeichnung = getArtikelFac().baueArtikelBezeichnungMehrzeiligOhneExc(
                                    item.getFlrartikel().getI_id(), item.getPositionsart_c_nr(), item.getC_bez(),
                                    item.getC_zbez(), false, null, theClientDto);
                        }

                        data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_ARTIKELBEZEICHNUNG] = cArtikelBezeichnung;
                        data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_ARTIKELMENGE] = item.getN_menge();
                        data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_ARTIKELEINHEIT] = item
                                .getEinheit_c_nr() == null ? null : item.getEinheit_c_nr().trim();

                        if (darfVerkaufspreisSehen) {
                            // Positionspreise sind in Belegwaehrung abgelegt
                            BigDecimal nPreisInBelegwaehrung = item
                                    .getN_nettogesamtpreisplusversteckteraufschlagminusrabatt();

                            nPreisInBelegwaehrung = getBetragMalWechselkurs(nPreisInBelegwaehrung,
                                    Helper.getKehrwert(new BigDecimal(
                                            flrlieferschein.getF_wechselkursmandantwaehrungzulieferscheinwaehrung()
                                                    .doubleValue())));

                            data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_ARTIKELNETTOGESAMTPREISPLUSVERSTECKTERAUFSCHLAGMINUSRABATT] = nPreisInBelegwaehrung;
                            data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_ARTIKELOFFENERWERT] = item
                                    .getN_menge().multiply(nPreisInBelegwaehrung);
                        } else {
                            data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_ARTIKELNETTOGESAMTPREISPLUSVERSTECKTERAUFSCHLAGMINUSRABATT] = null;
                            data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_ARTIKELOFFENERWERT] = null;
                        }

                        // Grundlage ist der positionsbezogene Gestehungspreis
                        // des Artikels.
                        BigDecimal bdGestehungspreis = Helper.getBigDecimalNull();

                        if (item.getPositionsart_c_nr()
                                .equals(LieferscheinpositionFac.LIEFERSCHEINPOSITIONSART_IDENT)) {
                            try {
                                BigDecimal bdGestehungswert = getLieferscheinFac()
                                        .berechneGestehungswertEinerLieferscheinposition(item.getI_id(),
                                                theClientDto);

                                // Gestehungspreis bezogen auf 1 Stueck wird
                                // gemittelt
                                bdGestehungspreis = bdGestehungswert.divide(item.getN_menge(), 4,
                                        BigDecimal.ROUND_HALF_EVEN);
                                bdGestehungspreis = Helper.rundeKaufmaennisch(bdGestehungspreis, 4);
                            } catch (Throwable t) {
                                // dieser Fall sollte nicht auftreten, bitte als
                                // moeglichen Fehler pruefen!
                            }
                        }

                        data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_ARTIKELGESTEHUNGSPREIS] = bdGestehungspreis;
                        if (darfVerkaufspreisSehen) {
                            data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_ARTIKELOFFENERDB] = item
                                    .getN_menge().multiply(bdGestehungspreis);
                        } else {
                            data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_ARTIKELOFFENERDB] = null;
                        }
                        // die Positionen brauchen alle Attribute, nach denen im
                        // Report gruppiert wird
                        data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_LIEFERSCHEINCNR] = flrlieferschein
                                .getC_nr();
                        data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_KOSTENSTELLECNR] = flrlieferschein
                                .getFlrkostenstelle().getC_nr();
                        data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_LIEFERSCHEINKUNDE] = flrlieferschein
                                .getFlrkunde().getFlrpartner().getC_name1nachnamefirmazeile1();
                        data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_LIEFERSCHEINCNR] = flrlieferschein
                                .getC_nr(); // fuer die Gruppierung
                    } else if (item.getPositionsart_c_nr().equals(LocaleFac.POSITIONSART_TEXTEINGABE)) {
                        data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_TEXTEINGABE] = item
                                .getC_textinhalt();
                        // die Positionen brauchen alle Attribute, nach denen im
                        // Report gruppiert wird
                        data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_LIEFERSCHEINCNR] = flrlieferschein
                                .getC_nr();
                        data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_KOSTENSTELLECNR] = flrlieferschein
                                .getFlrkostenstelle().getC_nr();
                        data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_LIEFERSCHEINKUNDE] = flrlieferschein
                                .getFlrkunde().getFlrpartner().getC_name1nachnamefirmazeile1();
                        data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_LIEFERSCHEINCNR] = flrlieferschein
                                .getC_nr(); // fuer die Gruppierung
                    }
                }
                i++; // in die naechste Zeile vorruecken
            }
            // Erstellung des Report
            HashMap parameter = new HashMap<Object, Object>();
            // die Parameter dem Report uebergeben
            parameter.put(LPReport.P_SORTIERUNG,
                    buildSortierungLieferscheinOffene(reportJournalKriterienDtoI, theClientDto));
            parameter.put(LPReport.P_FILTER,
                    buildFilterLieferscheinOffene(reportJournalKriterienDtoI, theClientDto));
            // die Parameter zur Bildung von Zwischensummen uebergeben
            if (reportJournalKriterienDtoI.bSortiereNachKostenstelle) {
                parameter.put(LPReport.P_SORTIERENACHKOSTENSTELLE, new Boolean(true));
            } else {
                parameter.put(LPReport.P_SORTIERENACHKOSTENSTELLE, new Boolean(false));
            }
            if (reportJournalKriterienDtoI.iSortierung == ReportJournalKriterienDto.KRIT_SORT_NACH_PARTNER) {
                parameter.put(LPReport.P_SORTIERENACHKUNDE, new Boolean(true));
            } else {
                parameter.put(LPReport.P_SORTIERENACHKUNDE, new Boolean(false));
            }
            parameter.put("P_LIEFERSCHEINWAEHRUNG", theClientDto.getSMandantenwaehrung());
            parameter.put("P_DETAILS", new Boolean(bMitDetails));

            initJRDS(parameter, LieferscheinReportFac.REPORT_MODUL,
                    LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE, theClientDto.getMandant(),
                    theClientDto.getLocUi(), theClientDto);

            oPrintO = getReportPrint();
        } catch (RemoteException re) {
            throwEJBExceptionLPRespectOld(re);
        } finally {
            closeSession(session);
        }
        return oPrintO;
    }

    @TransactionAttribute(TransactionAttributeType.NEVER)
    public JasperPrintLP printLieferscheinAngelegte(ReportJournalKriterienDto reportJournalKriterienDtoI,
            TheClientDto theClientDto) throws EJBExceptionLP {

        if (reportJournalKriterienDtoI == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_PARAMETER_IS_NULL,
                    new Exception("reportJournalKriterienDtoI == null"));
        }

        cAktuellerReport = LieferscheinReportFac.REPORT_LIEFERSCHEIN_ANGELEGTE;

        // die Liste aller angelegten Lieferscheine entsprechend den Kriterien
        // zusammenstellen
        ReportLieferscheinAngelegteDto[] aReportLieferscheinAngelegteDto = getListeReportLieferscheinAngelegte(
                reportJournalKriterienDtoI, theClientDto);

        // es gilt das Locale des aktuellen Benutzers
        Locale locDruck = theClientDto.getLocUi();

        int iAnzahlZeilen = aReportLieferscheinAngelegteDto.length; // Anzahl
        // der
        // Zeilen in
        // der
        // Gruppe
        int iAnzahlSpalten = 5; // Anzahl der Spalten in der Gruppe

        data = new Object[iAnzahlZeilen][iAnzahlSpalten];

        // die Datenmatrix befuellen
        for (int i = 0; i < iAnzahlZeilen; i++) {
            ReportLieferscheinAngelegteDto reportLieferscheinAngelegteDto = aReportLieferscheinAngelegteDto[i];

            data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_ANGELEGTE_NUMMER] = reportLieferscheinAngelegteDto
                    .getCNrLieferschein();
            data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_ANGELEGTE_KUNDE] = reportLieferscheinAngelegteDto
                    .getKundeCName1();
            data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_ANGELEGTE_ANLAGEDATUM] = Helper
                    .formatDatum(reportLieferscheinAngelegteDto.getTAnlegen(), locDruck);
            data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_ANGELEGTE_ANGELEGTVON] = reportLieferscheinAngelegteDto
                    .getPersonalanlegenKurzzeichen();
            data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_ANGELEGTE_AUFTRAGSNUMMER] = reportLieferscheinAngelegteDto
                    .getCNrAuftrag();
        }

        HashMap parameter = new HashMap<Object, Object>();

        initJRDS(parameter, LieferscheinReportFac.REPORT_MODUL, LieferscheinReportFac.REPORT_LIEFERSCHEIN_ANGELEGTE,
                theClientDto.getMandant(), theClientDto.getLocUi(), theClientDto);
        return getReportPrint();
    }

    private void checkLieferscheinIId(Integer iIdLieferscheinI) throws EJBExceptionLP {
        if (iIdLieferscheinI == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_PARAMETER_IS_NULL,
                    new Exception("iIdLieferscheinI == null"));
        }
        myLogger.info("LieferscheinIId: " + iIdLieferscheinI.toString());
    }

    private String baueKennungLieferschein(LieferscheinDto lieferscheinDtoI, TheClientDto theClientDto)
            throws EJBExceptionLP {
        StringBuffer abKennung = null;
        try {
            BelegartDto belegartDto = getLocaleFac().belegartFindByPrimaryKey(lieferscheinDtoI.getBelegartCNr(),
                    theClientDto);

            abKennung = new StringBuffer(belegartDto.getCKurzbezeichnung());
            abKennung.append(" ").append(lieferscheinDtoI.getCNr());
        } catch (RemoteException ex) {
            throwEJBExceptionLPRespectOld(ex);
        }
        return abKennung.toString();
    }

    /**
     * Diese Methode liefert eine Liste von allen gelieferten Lieferscheine
     * eines Mandanten, die nach den eingegebenen Kriterien des Benutzers
     * zusammengestellt wird. <br>
     * Achtung: Hibernate verwendet lazy initialization, d.h. der Zugriff auf
     * Collections muss innerhalb der Session erfolgen.
     * 
     * @param reportJournalKriterienDtoI
     *            die Kriterien des Benutzers
     * @param theClientDto
     *            der aktuelle Benutzer
     * @return ReportLieferscheinOffeneDto[] die Liste der Lieferscheine
     * @throws EJBExceptionLP
     *             Ausnahme
     */
    private ReportLieferscheinOffeneDto[] getListeReportLieferscheinOffene(
            ReportJournalKriterienDto reportJournalKriterienDtoI, Integer iArt, boolean bMitDetails,
            TheClientDto theClientDto) throws EJBExceptionLP {

        ReportLieferscheinOffeneDto[] aResult = null;
        SessionFactory factory = FLRSessionFactory.getFactory();
        Session session = null;

        try {
            session = factory.openSession();

            // Hiberante Criteria fuer alle Tabellen ausgehend von meiner
            // Haupttabelle anlegen,
            // nach denen ich filtern und sortieren kann
            Criteria crit = session.createCriteria(FLRLieferschein.class);

            // Einschraenkung auf den aktuellen Mandanten
            crit.add(Restrictions.eq("mandant_c_nr", theClientDto.getMandant()));

            // Einschraenkung nach Status Offen
            crit.add(Restrictions.eq(LieferscheinFac.FLR_LIEFERSCHEIN_LIEFERSCHEINSTATUS_STATUS_C_NR,
                    LieferscheinFac.LSSTATUS_GELIEFERT));
            if (iArt != null) {
                if (iArt == 1) {
                    crit.add(Restrictions.eq(LieferscheinFac.FLR_LIEFERSCHEIN_B_VERRECHENBAR,
                            Helper.boolean2Short(true)));
                } else if (iArt == 2) {
                    crit.add(Restrictions.eq(LieferscheinFac.FLR_LIEFERSCHEIN_B_VERRECHENBAR,
                            Helper.boolean2Short(false)));
                }
            }
            // Einschraenkung nach einer bestimmten Kostenstelle
            if (reportJournalKriterienDtoI.kostenstelleIId != null) {
                crit.add(Restrictions.eq(LieferscheinFac.FLR_LIEFERSCHEIN_KOSTENSTELLE_I_ID,
                        reportJournalKriterienDtoI.kostenstelleIId));
            }

            // Einschraenkung nach einem bestimmten Kunden
            if (reportJournalKriterienDtoI.kundeIId != null) {
                crit.add(Restrictions.eq(LieferscheinFac.FLR_LIEFERSCHEIN_KUNDE_I_ID_LIEFERADRESSE,
                        reportJournalKriterienDtoI.kundeIId));
            }

            // Einschraenkung nach Belegdatum von - bis
            String sVon = null;
            String sBis = null;

            if (reportJournalKriterienDtoI.dVon != null) {
                crit.add(Restrictions.ge(LieferscheinFac.FLR_LIEFERSCHEIN_D_BELEGDATUM,
                        reportJournalKriterienDtoI.dVon));
                sVon = Helper.formatDatum(reportJournalKriterienDtoI.dVon, theClientDto.getLocUi());
            }

            if (reportJournalKriterienDtoI.dBis != null) {
                crit.add(Restrictions.le(LieferscheinFac.FLR_LIEFERSCHEIN_D_BELEGDATUM,
                        reportJournalKriterienDtoI.dBis));
                sBis = Helper.formatDatum(reportJournalKriterienDtoI.dBis, theClientDto.getLocUi());
            }

            // Einschraenkung nach Belegnummer von - bis
            LpBelegnummerFormat f = getBelegnummerGeneratorObj().getBelegnummernFormat(theClientDto.getMandant());

            Integer iGeschaeftsjahr = getParameterFac().getGeschaeftsjahr(theClientDto.getMandant());

            String sMandantKuerzel = getParameterFac().getMandantparameter(theClientDto.getMandant(),
                    ParameterFac.KATEGORIE_ALLGEMEIN, ParameterFac.PARAMETER_BELEGNUMMER_MANDANTKENNUNG).getCWert();

            if (reportJournalKriterienDtoI.sBelegnummerVon != null) {
                sVon = HelperServer.getBelegnummernFilterForHibernateCriterias(f, iGeschaeftsjahr, sMandantKuerzel,
                        reportJournalKriterienDtoI.sBelegnummerVon);
                crit.add(Restrictions.ge("c_nr", sVon));
            }

            if (reportJournalKriterienDtoI.sBelegnummerBis != null) {
                sBis = HelperServer.getBelegnummernFilterForHibernateCriterias(f, iGeschaeftsjahr, sMandantKuerzel,
                        reportJournalKriterienDtoI.sBelegnummerBis);
                crit.add(Restrictions.le("c_nr", sBis));
            }

            // Sortierung nach Kostenstelle ist immer die erste Sortierung
            if (reportJournalKriterienDtoI.bSortiereNachKostenstelle) {
                crit.createCriteria(LieferscheinFac.FLR_LIEFERSCHEIN_FLRKOSTENSTELLE).addOrder(Order.asc("c_nr"));
            }

            // Sortierung nach Kunde, eventuell innerhalb der Kostenstelle
            if (reportJournalKriterienDtoI.iSortierung == ReportJournalKriterienDto.KRIT_SORT_NACH_PARTNER) {
                crit.createCriteria(LieferscheinFac.FLR_LIEFERSCHEIN_FLRKUNDE).createCriteria(KundeFac.FLR_PARTNER)
                        .addOrder(Order.asc(PartnerFac.FLR_PARTNER_NAME1NACHNAMEFIRMAZEILE1));
            }

            // es wird in jedem Fall nach der Belegnummer sortiert
            crit.addOrder(Order.asc("c_nr"));

            List<?> list = crit.list();
            aResult = new ReportLieferscheinOffeneDto[list.size()];
            int iIndex = 0;
            Iterator<?> it = list.iterator();
            ReportLieferscheinOffeneDto reportDto = null;

            while (it.hasNext()) {
                FLRLieferschein flrlieferschein = (FLRLieferschein) it.next();

                reportDto = new ReportLieferscheinOffeneDto();
                reportDto.setIIdLieferschein(flrlieferschein.getI_id());
                reportDto.setCNrLieferschein(flrlieferschein.getC_nr());
                reportDto.setKundeCName1(
                        flrlieferschein.getFlrkunde().getFlrpartner().getC_name1nachnamefirmazeile1());
                reportDto.setKostenstelleCNr(flrlieferschein.getFlrkostenstelle().getC_nr());

                aResult[iIndex] = reportDto;
                iIndex++;
            }
        } catch (RemoteException re) {
            throwEJBExceptionLPRespectOld(re);
        } finally {
            closeSession(session);
        }
        return aResult;
    }

    /**
     * String zum Andrucken der Filterkriterien.
     * 
     * @param reportJournalKriterienDtoI
     *            die Kriterien
     * @param theClientDto
     *            der aktuelle Benutzer
     * @return String die Filterkriterien
     * @throws EJBExceptionLP
     *             Ausnahme
     */
    private String buildFilterLieferscheinOffene(ReportJournalKriterienDto reportJournalKriterienDtoI,
            TheClientDto theClientDto) throws EJBExceptionLP {

        StringBuffer buff = new StringBuffer("");

        // Belegdatum
        if (reportJournalKriterienDtoI.dVon != null || reportJournalKriterienDtoI.dBis != null) {
            buff.append(getTextRespectUISpr("bes.belegdatum", theClientDto.getMandant(), theClientDto.getLocUi()));
        }

        if (reportJournalKriterienDtoI.dVon != null) {
            buff.append(" ")
                    .append(getTextRespectUISpr("lp.von", theClientDto.getMandant(), theClientDto.getLocUi()));
            buff.append(" ").append(Helper.formatDatum(reportJournalKriterienDtoI.dVon, theClientDto.getLocUi()));
        }

        if (reportJournalKriterienDtoI.dBis != null) {
            buff.append(" ")
                    .append(getTextRespectUISpr("lp.bis", theClientDto.getMandant(), theClientDto.getLocUi()));
            buff.append(" ").append(Helper.formatDatum(reportJournalKriterienDtoI.dBis, theClientDto.getLocUi()));
        }

        // Kostenstelle
        if (reportJournalKriterienDtoI.kostenstelleIId != null) {
            buff.append(" ").append(
                    getTextRespectUISpr("lp.kostenstelle", theClientDto.getMandant(), theClientDto.getLocUi()));
            buff.append(" ").append(getSystemFac()
                    .kostenstelleFindByPrimaryKey(reportJournalKriterienDtoI.kostenstelleIId).getCNr());
        }

        // Kunde
        if (reportJournalKriterienDtoI.kundeIId != null) {
            buff.append(" ")
                    .append(getTextRespectUISpr("lp.kunde", theClientDto.getMandant(), theClientDto.getLocUi()));
            buff.append(" ")
                    .append(getKundeFac().kundeFindByPrimaryKey(reportJournalKriterienDtoI.kundeIId, theClientDto)
                            .getPartnerDto().getCName1nachnamefirmazeile1());
        }

        // Lieferscheinnummer
        if (reportJournalKriterienDtoI.sBelegnummerVon != null
                || reportJournalKriterienDtoI.sBelegnummerBis != null) {
            buff.append(" ").append(getTextRespectUISpr("ls.lieferscheinnummer", theClientDto.getMandant(),
                    theClientDto.getLocUi()));
        }

        if (reportJournalKriterienDtoI.sBelegnummerVon != null) {
            buff.append(" ")
                    .append(getTextRespectUISpr("lp.von", theClientDto.getMandant(), theClientDto.getLocUi()));
            buff.append(" ").append(reportJournalKriterienDtoI.sBelegnummerVon);
        }

        if (reportJournalKriterienDtoI.sBelegnummerBis != null) {
            buff.append(" ")
                    .append(getTextRespectUISpr("lp.bis", theClientDto.getMandant(), theClientDto.getLocUi()));
            buff.append(" ").append(reportJournalKriterienDtoI.sBelegnummerBis);
        }

        String cBuffer = buff.toString().trim();

        return cBuffer;
    }

    /**
     * String zum Andrucken der Sortierkriterien.
     * 
     * @param reportJournalKriterienDtoI
     *            die Kriterien
     * @param theClientDto
     *            der aktuelle Benutzer
     * @return String die Sortierkriterien
     */
    private String buildSortierungLieferscheinOffene(ReportJournalKriterienDto reportJournalKriterienDtoI,
            TheClientDto theClientDto) {

        StringBuffer buff = new StringBuffer(
                getTextRespectUISpr("lp.sortierungnach", theClientDto.getMandant(), theClientDto.getLocUi()));

        if (reportJournalKriterienDtoI.bSortiereNachKostenstelle) {
            buff.append(getTextRespectUISpr("lp.kostenstelle", theClientDto.getMandant(), theClientDto.getLocUi()))
                    .append(", ");
        }

        if (reportJournalKriterienDtoI.iSortierung == ReportJournalKriterienDto.KRIT_SORT_NACH_PARTNER) {
            buff.append(getTextRespectUISpr("lp.kunde", theClientDto.getMandant(), theClientDto.getLocUi()))
                    .append(", ");
        }

        buff.append(
                getTextRespectUISpr("ls.lieferscheinnummer", theClientDto.getMandant(), theClientDto.getLocUi()));

        return buff.toString();
    }

    /**
     * Diese Methode liefert eine Liste von allen angelegten Lieferscheine eines
     * Mandanten, die nach den eingegebenen Kriterien des Benutzers
     * zusammengestellt wird. <br>
     * Achtung: Hibernate verwendet lazy initialization, d.h. der Zugriff auf
     * Collections muss innerhalb der Session erfolgen.
     * 
     * @param reportJournalKriterienDtoI
     *            die Kriterien des Benutzers
     * @param theClientDto
     *            der aktuelle Benutzer
     * @return ReportLieferscheinOffeneDto[] die Liste der Lieferscheine
     * @throws EJBExceptionLP
     *             Ausnahme
     */
    private ReportLieferscheinAngelegteDto[] getListeReportLieferscheinAngelegte(
            ReportJournalKriterienDto reportJournalKriterienDtoI, TheClientDto theClientDto) throws EJBExceptionLP {

        ReportLieferscheinAngelegteDto[] aResult = null;
        SessionFactory factory = FLRSessionFactory.getFactory();
        Session session = factory.openSession();

        // Hiberante Criteria fuer alle Tabellen ausgehend von meiner
        // Haupttabelle anlegen,
        // nach denen ich filtern und sortieren kann
        Criteria crit = session.createCriteria(FLRLieferscheinReportAngelegte.class);

        // Einschraenkung auf den aktuellen Mandanten
        crit.add(Restrictions.eq("mandant_c_nr", theClientDto.getMandant()));

        // Einschraenkung nach Status Offen
        crit.add(Restrictions.eq(LieferscheinFac.FLR_LIEFERSCHEIN_LIEFERSCHEINSTATUS_STATUS_C_NR,
                LieferscheinFac.LSSTATUS_ANGELEGT));

        // Einschraenkung nach einer bestimmten Kostenstelle
        /*
         * if (reportJournalKriterienDtoI.kostenstelleIId != null) { crit.add
         * (Restrictions.eq(LieferscheinFac.FLR_LIEFERSCHEIN_KOSTENSTELLE_I_ID ,
         * reportJournalKriterienDtoI.kostenstelleIId)); }
         * 
         * // Einschraenkung nach einem bestimmten Kunden if
         * (reportJournalKriterienDtoI.kundeIId != null) { crit.add(Restrictions
         * .eq(LieferscheinFac.FLR_LIEFERSCHEIN_KUNDE_I_ID_LIEFERADRESSE,
         * reportJournalKriterienDtoI.kundeIId)); }
         * 
         * // Einschraenkung nach Belegdatum von - bis String sVon = null;
         * String sBis = null;
         * 
         * if (reportJournalKriterienDtoI.dVon != null) { crit.add(Restrictions
         * .ge(LieferscheinFac.FLR_LIEFERSCHEIN_D_BELEGDATUM,
         * reportJournalKriterienDtoI.dVon)); sVon =
         * Helper.formatDatum(reportJournalKriterienDtoI.dVon,
         * theClientDto.getLocUi()); }
         * 
         * if (reportJournalKriterienDtoI.dBis != null) { crit.add(Restrictions
         * .le(LieferscheinFac.FLR_LIEFERSCHEIN_D_BELEGDATUM,
         * reportJournalKriterienDtoI.dBis)); sBis =
         * Helper.formatDatum(reportJournalKriterienDtoI.dBis,
         * theClientDto.getLocUi()); }
         * 
         * // Einschraenkung nach Belegnummer von - bis LpBelegnummerFormat f =
         * getBelegnummerGeneratorObj().getBelegnummernFormat(
         * theClientDto.getMandant());
         * 
         * Integer iGeschaeftsjahr =
         * getParameterFac().getGeschaeftsjahr(theClientDto. getMandant());
         * 
         * if (reportJournalKriterienDtoI.sBelegnummerVon != null) { sVon =
         * HelperServer.getBelegnummernFilterForHibernateCriterias(f,
         * iGeschaeftsjahr, reportJournalKriterienDtoI.sBelegnummerVon);
         * crit.add(Restrictions.ge("c_nr", sVon)); }
         * 
         * if (reportJournalKriterienDtoI.sBelegnummerBis != null) { sBis =
         * HelperServer.getBelegnummernFilterForHibernateCriterias(f,
         * iGeschaeftsjahr, reportJournalKriterienDtoI.sBelegnummerBis);
         * crit.add(Restrictions.le("c_nr", sBis)); }
         * 
         * // Sortierung nach Kostenstelle ist immer die erste Sortierung if
         * (reportJournalKriterienDtoI.bSortiereNachKostenstelle) {
         * crit.createCriteria (LieferscheinFac.FLR_LIEFERSCHEIN_FLRKOSTENSTELLE
         * ).addOrder(Order.asc("c_nr")); }
         * 
         * // Sortierung nach Kunde, eventuell innerhalb der Kostenstelle if
         * (reportJournalKriterienDtoI.iSortierung ==
         * ReportJournalKriterienDto.KRIT_SORT_NACH_PARTNER) {
         * crit.createCriteria
         * (LieferscheinFac.FLR_LIEFERSCHEIN_FLRKUNDE).createCriteria (KundeFac.
         * FLR_PARTNER).addOrder(Order.asc(PartnerFac.
         * FLR_PARTNER_NAME1NACHNAMEFIRMAZEILE1)); }
         */

        // es wird in jedem Fall nach der Belegnummer sortiert
        crit.addOrder(Order.asc("c_nr"));

        List<?> list = crit.list();
        aResult = new ReportLieferscheinAngelegteDto[list.size()];
        int iIndex = 0;
        Iterator<?> it = list.iterator();
        ReportLieferscheinAngelegteDto reportDto = null;

        while (it.hasNext()) {
            FLRLieferscheinReportAngelegte flrlieferschein = (FLRLieferscheinReportAngelegte) it.next();

            reportDto = new ReportLieferscheinAngelegteDto();
            reportDto.setIIdLieferschein(flrlieferschein.getI_id());
            reportDto.setCNrLieferschein(flrlieferschein.getC_nr());
            reportDto.setKundeCName1(flrlieferschein.getFlrkunde().getFlrpartner().getC_name1nachnamefirmazeile1());
            reportDto.setKostenstelleCNr(flrlieferschein.getFlrkostenstelle().getC_nr());
            if (flrlieferschein.getFlrauftrag() != null) {
                reportDto.setCNrAuftrag(flrlieferschein.getFlrauftrag().getC_nr());
            }
            // @todo nicht ueber Bean PJ 4408
            PersonalDto personalAnlegenDto = getPersonalFac()
                    .personalFindByPrimaryKey(flrlieferschein.getFlrpersonalanlegen().getI_id(), theClientDto);

            reportDto.setPersonalanlegenKurzzeichen(personalAnlegenDto.getCKurzzeichen());
            reportDto.setTAnlegen(flrlieferschein.getT_anlegen());

            aResult[iIndex] = reportDto;
            iIndex++;
        }

        closeSession(session);

        return aResult;
    }

    /**
     * Fuer Serien- oder Chargennummerntragenden Artikel, die Anzahl der Serien
     * oder Chargennummern berechnen.
     * 
     * @param artikelIId
     *            int
     * @param cSerienchargennummerI
     *            String
     * @param theClientDto
     *            String
     * @return int
     * @throws EJBExceptionLP
     */
    private int berechneAnzahlSerienChargeNummern(int artikelIId, List cSerienchargennummerI,
            TheClientDto theClientDto) throws EJBExceptionLP {
        int iAnzahl = 0;

        ArtikelDto artikelDto = getArtikelFac().artikelFindByPrimaryKey(artikelIId, theClientDto);
        if (Helper.short2Boolean(artikelDto.getBChargennrtragend())) {
            if (cSerienchargennummerI != null) {
                iAnzahl = cSerienchargennummerI.size();
            }
        }
        if (Helper.short2Boolean(artikelDto.getBSeriennrtragend())) {
            return 1;
        }

        return iAnzahl;
    }

    private Object[] befuelleZeileMitPreisbehafteterPosition(LieferscheinpositionDto positionDto,
            LieferscheinDto lieferscheinDto, KundeDto kundeDto, int iArtikelpositionsnummerI, // Referenz
            LinkedHashMap<Object, MwstsatzReportDto> mwstMapI, // Referenz
            Boolean bbSeitenumbruchI, Locale localeCNrI, TheClientDto theClientDto) throws EJBExceptionLP {
        Object[] dataRow = null;
        try {
            dataRow = new Object[LieferscheinReportFac.REPORT_LIEFERSCHEIN_WA_ETIKETT_ANZAHL_SPALTEN];
            ArtikelDto artikelDto = getArtikelFac().artikelFindByPrimaryKey(positionDto.getArtikelIId(),
                    theClientDto);
            dataRow[REPORT_LIEFERSCHEIN_WA_ETIKETT_POSITION] = ""
                    + getLieferscheinpositionFac().getPositionNummer(positionDto.getIId());
            dataRow[REPORT_LIEFERSCHEIN_WA_ETIKETT_IDENT] = artikelDto.getCNr();
            dataRow[REPORT_LIEFERSCHEIN_WA_ETIKETT_MENGE] = positionDto.getNMenge();
            dataRow[REPORT_LIEFERSCHEIN_WA_ETIKETT_EINHEIT] = positionDto.getEinheitCNr().trim();
            dataRow[REPORT_LIEFERSCHEIN_WA_ETIKETT_SERIENCHARGENR] = SeriennrChargennrMitMengeDto
                    .erstelleStringAusMehrerenSeriennummern(positionDto.getSeriennrChargennrMitMenge());
            dataRow[REPORT_LIEFERSCHEIN_WA_ETIKETT_ARTIKEL_TEXTEINGABE] = positionDto.getXTextinhalt();

            // PJ15262
            dataRow[REPORT_LIEFERSCHEIN_WA_ETIKETT_ARTIKEL_WE_REFERENZ] = getLagerFac()
                    .getWareneingangsreferenzSubreport(LocaleFac.BELEGART_LIEFERSCHEIN, positionDto.getIId(),
                            positionDto.getSeriennrChargennrMitMenge(), false, theClientDto);

            // KundeArtikelnr gueltig zu Belegdatum
            KundesokoDto kundeSokoDto_gueltig = this.getKundesokoFac()
                    .kundesokoFindByKundeIIdArtikelIIdGueltigkeitsdatumOhneExc(kundeDto.getIId(),
                            artikelDto.getIId(), new java.sql.Date(lieferscheinDto.getTBelegdatum().getTime()));
            if (kundeSokoDto_gueltig != null) {
                dataRow[REPORT_LIEFERSCHEIN_WA_ETIKETT_ARTIKEL_KUNDENARTIKELNUMMER] = kundeSokoDto_gueltig
                        .getCKundeartikelnummer();
            }

            if (artikelDto.getArtikelsprDto() != null) {
                dataRow[REPORT_LIEFERSCHEIN_WA_ETIKETT_ARTIKEL_BEZ] = artikelDto.getArtikelsprDto().getCBez();
                dataRow[REPORT_LIEFERSCHEIN_WA_ETIKETT_ARTIKEL_ZBEZ] = artikelDto.getArtikelsprDto().getCZbez();
                dataRow[REPORT_LIEFERSCHEIN_WA_ETIKETT_ARTIKEL_ZBEZ2] = artikelDto.getArtikelsprDto().getCZbez2();
                dataRow[REPORT_LIEFERSCHEIN_WA_ETIKETT_ARTIKEL_KBEZ] = artikelDto.getArtikelsprDto().getCKbez();
            }
            dataRow[REPORT_LIEFERSCHEIN_WA_ETIKETT_ARTIKEL_REFERENZNUMMER] = artikelDto.getCReferenznr();
            dataRow[REPORT_LIEFERSCHEIN_WA_ETIKETT_ARTIKEL_GEWICHT] = artikelDto.getFGewichtkg();
            dataRow[REPORT_LIEFERSCHEIN_WA_ETIKETT_ARTIKEL_INDEX] = artikelDto.getCIndex();
            dataRow[REPORT_LIEFERSCHEIN_WA_ETIKETT_ARTIKEL_REVISION] = artikelDto.getCRevision();
            // Dto holen damit LPReport.printIdent verwendet werden kann
        } catch (RemoteException ex) {
            throwEJBExceptionLPRespectOld(ex);
        }
        return dataRow;
    }
}