com.lp.server.fertigung.ejbfac.FertigungReportFacBean.java Source code

Java tutorial

Introduction

Here is the source code for com.lp.server.fertigung.ejbfac.FertigungReportFacBean.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.fertigung.ejbfac;

import java.awt.Image;
import java.math.BigDecimal;
import java.rmi.RemoteException;
import java.sql.Date;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
import java.util.GregorianCalendar;
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.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.CriteriaSpecification;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;

import com.lp.server.angebot.service.AngebotReportFac;
import com.lp.server.artikel.fastlanereader.generated.FLRArtikelreservierung;
import com.lp.server.artikel.fastlanereader.generated.FLRFehlmenge;
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.ArtikelbestelltFac;
import com.lp.server.artikel.service.ArtikelfehlmengeDto;
import com.lp.server.artikel.service.ArtikelkommentarDto;
import com.lp.server.artikel.service.ArtikellagerplaetzeDto;
import com.lp.server.artikel.service.ArtikellieferantDto;
import com.lp.server.artikel.service.ArtikelsprDto;
import com.lp.server.artikel.service.GeometrieDto;
import com.lp.server.artikel.service.GeraetesnrDto;
import com.lp.server.artikel.service.HerstellerDto;
import com.lp.server.artikel.service.LagerDto;
import com.lp.server.artikel.service.LagerbewegungDto;
import com.lp.server.artikel.service.MaterialDto;
import com.lp.server.artikel.service.SeriennrChargennrMitMengeDto;
import com.lp.server.artikel.service.VerkaufspreisDto;
import com.lp.server.artikel.service.VerpackungDto;
import com.lp.server.artikel.service.VkPreisfindungEinzelverkaufspreisDto;
import com.lp.server.artikel.service.VkpreisfindungDto;
import com.lp.server.artikel.service.WarenzugangsreferenzDto;
import com.lp.server.auftrag.fastlanereader.generated.FLRAuftragReport;
import com.lp.server.auftrag.fastlanereader.generated.FLRAuftragposition;
import com.lp.server.auftrag.service.AuftragDto;
import com.lp.server.auftrag.service.AuftragFac;
import com.lp.server.auftrag.service.AuftragServiceFac;
import com.lp.server.auftrag.service.AuftragpositionDto;
import com.lp.server.auftrag.service.AuftragzeitenDto;
import com.lp.server.bestellung.fastlanereader.generated.FLRBestellposition;
import com.lp.server.bestellung.service.BSMahnungDto;
import com.lp.server.bestellung.service.BestellpositionDto;
import com.lp.server.bestellung.service.BestellungDto;
import com.lp.server.bestellung.service.BestellungFac;
import com.lp.server.fertigung.fastlanereader.generated.FLRLos;
import com.lp.server.fertigung.fastlanereader.generated.FLRLosReport;
import com.lp.server.fertigung.fastlanereader.generated.FLRLosablieferung;
import com.lp.server.fertigung.fastlanereader.generated.FLRLosgutschlecht;
import com.lp.server.fertigung.fastlanereader.generated.FLRLosistmaterial;
import com.lp.server.fertigung.fastlanereader.generated.FLRLossollarbeitsplan;
import com.lp.server.fertigung.fastlanereader.generated.FLRLossollmaterial;
import com.lp.server.fertigung.service.FertigungFac;
import com.lp.server.fertigung.service.FertigungReportFac;
import com.lp.server.fertigung.service.LosDto;
import com.lp.server.fertigung.service.LosMonatsauswertungDto;
import com.lp.server.fertigung.service.LosStatistikDto;
import com.lp.server.fertigung.service.LosablieferungDto;
import com.lp.server.fertigung.service.LosgutschlechtDto;
import com.lp.server.fertigung.service.LosistmaterialDto;
import com.lp.server.fertigung.service.LoslagerentnahmeDto;
import com.lp.server.fertigung.service.LossollarbeitsplanDto;
import com.lp.server.fertigung.service.LossollmaterialDto;
import com.lp.server.fertigung.service.ReportAufloesbareFehlmengenDto;
import com.lp.server.fertigung.service.ReportLosAusgabelisteDto;
import com.lp.server.fertigung.service.ReportLosnachkalkulationDto;
import com.lp.server.fertigung.service.ReportTheoretischeFehlmengenDto;
import com.lp.server.fertigung.service.ZusatzstatusDto;
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.PartnerDto;
import com.lp.server.partner.service.PartnerFac;
import com.lp.server.personal.service.MaschineDto;
import com.lp.server.personal.service.MaschinenzeitdatenDto;
import com.lp.server.personal.service.PersonalDto;
import com.lp.server.personal.service.SollverfuegbarkeitDto;
import com.lp.server.personal.service.ZeitdatenDto;
import com.lp.server.reklamation.fastlanereader.generated.FLRFehlerspr;
import com.lp.server.reklamation.service.FehlerDto;
import com.lp.server.stueckliste.fastlanereader.generated.FLRStueckliste;
import com.lp.server.stueckliste.service.FertigungsgruppeDto;
import com.lp.server.stueckliste.service.MontageartDto;
import com.lp.server.stueckliste.service.StuecklisteDto;
import com.lp.server.stueckliste.service.StuecklisteFac;
import com.lp.server.stueckliste.service.StuecklisteReportFac;
import com.lp.server.stueckliste.service.StuecklisteeigenschaftDto;
import com.lp.server.stueckliste.service.StuecklistepositionDto;
import com.lp.server.system.jcr.service.JCRDocDto;
import com.lp.server.system.pkgenerator.format.LpBelegnummerFormat;
import com.lp.server.system.service.KostenstelleDto;
import com.lp.server.system.service.LandplzortDto;
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.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.TheClientDto;
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.TimingInterceptor;
import com.lp.util.EJBExceptionLP;
import com.lp.util.Helper;
import com.lp.util.LPDatenSubreport;

@Stateless
@Interceptors(TimingInterceptor.class)
public class FertigungReportFacBean extends LPReport implements FertigungReportFac, JRDataSource {

    private int useCase;
    private Object[][] data = null;

    private static final int UC_THEORETISCHE_FEHLMENGEN = 0;
    private static final int UC_FERTIGUNGSBEGLEITSCHEIN = 1;
    private static final int UC_AUSGABELISTE = 2;
    private static final int UC_ALLE = 3;
    private static final int UC_OFFENE = 4;
    private static final int UC_HALBFERTIGFABRIKATSINVENTUR = 5;
    private static final int UC_NACHKALKULATION = 6;
    private static final int UC_ABLIEFERUNGSSTATISTIK = 7;
    private static final int UC_AUFLOESBARE_FEHLMENGEN = 8;
    private static final int UC_STUECKRUECKMELDUNG = 9;
    private static final int UC_GANZSEITIGESBILD = 10;
    private static final int UC_MONATSAUSWERTUNG = 11;
    private static final int UC_RANKINGLISTE = 12;
    private static final int UC_ETIKETT = 13;
    private static final int UC_FEHLMENGEN_ALLER_LOSE = 14;
    private static final int UC_PRODUKTIONSINFORMATION = 15;
    private static final int UC_ZEITENTWICKLUNG = 16;
    private static final int UC_AUSLASTUNGSVORSCHAU = 17;
    private static final int UC_AUSLIEFERLISTE = 18;
    private static final int UC_LOSSTATISTIK = 19;
    private static final int UC_FEHLTEILE = 20;
    private static final int UC_OFFENE_AG = 21;
    private static final int UC_ABLIEFERETIKETT = 22;
    private static final int UC_LOSZEITEN = 23;
    private static final int UC_ETIKETTA4 = 24;
    private static final int UC_FEHLERSTATISTIK = 25;
    private static final int UC_MATERIALLISTE = 26;

    private static final int TF_IDENT = 0;
    private static final int TF_BEZEICHNUNG = 1;
    private static final int TF_SOLLMENGE = 2;
    private static final int TF_VERFUEGBAR = 3;
    private static final int TF_FEHLMENGE = 4;
    private static final int TF_BESTELLT = 5;
    private static final int TF_MOEGLICH = 6;
    private static final int TF_LAGERSTAND = 7;
    private static final int TF_ZUSATZBEZEICHNUNG = 8;
    private static final int TF_ISTMENGE = 9;
    private static final int TF_VERFUEGBARZUMPRODUKTIONSSTART = 10;
    private static final int TF_ARTIKELSPERREN = 11;
    private static final int TF_ERSATZIDENT = 12;
    private static final int TF_ERSATZBEZEICHNUNG = 13;
    private final static int TF_SPALTENANZAHL = 14;

    private static final int AUSG_IDENT = 0;
    private static final int AUSG_MENGE = 1;
    private static final int AUSG_EINHEIT = 2;
    private static final int AUSG_AUSGABE = 3;
    private static final int AUSG_BEZEICHNUNG = 4;
    private static final int AUSG_LAGER = 5;
    private static final int AUSG_LAGERORT = 6;
    private static final int AUSG_MONTAGEART = 7;
    private static final int AUSG_SCHALE = 8;
    private static final int AUSG_ARTIKELKLASSE = 9;
    private static final int AUSG_ZUSATZBEZEICHNUNG = 10;
    private static final int AUSG_ZUSATZBEZEICHNUNG2 = 11;
    private static final int AUSG_FARBCODE = 12;
    private static final int AUSG_MATERIAL = 13;
    private static final int AUSG_HOEHE = 14;
    private static final int AUSG_BREITE = 15;
    private static final int AUSG_TIEFE = 16;
    private static final int AUSG_BAUFORM = 17;
    private static final int AUSG_VERPACKUNGSART = 18;
    private static final int AUSG_GEWICHTKG = 19;
    private static final int AUSG_RASTERSTEHEND = 20;
    private static final int AUSG_STUECKLISTE_KOMMENTAR = 21;
    private static final int AUSG_BESTELLT = 22;
    private static final int AUSG_SNRCHNR = 23;
    private static final int AUSG_KOMMENTAR = 24;
    private static final int AUSG_ARTIKELBILD = 25;
    private final static int AUSG_LAGERSTAND = 26;
    private final static int AUSG_LAGERSTAND_SPERRLAGER = 27;
    private final static int AUSG_INDEX = 28;
    private final static int AUSG_REVISION = 29;
    private final static int AUSG_IN_FERTIGUNG = 30;
    private final static int AUSG_NUR_ZUR_INFO = 31;
    private final static int AUSG_SPALTENANZAHL = 32;

    private static final int BEGL_IDENT = 0;
    private static final int BEGL_BEZEICHNUNG = 1;
    private static final int BEGL_RUESTZEIT = 2;
    private static final int BEGL_STUECKZEIT = 3;
    private static final int BEGL_GESAMTZEIT = 4;
    private static final int BEGL_KOMMENTAR = 5;
    private static final int BEGL_ZUSATZBEZEICHNUNG = 6;
    private static final int BEGL_ZUSATZBEZEICHNUNG2 = 7;
    private static final int BEGL_MASCHINE = 8;
    private static final int BEGL_MASCHINE_BEZEICHNUNG = 9;
    private static final int BEGL_ARBEITSGANG = 10;
    private static final int BEGL_IST_MATERIAL = 11;
    private static final int BEGL_MATERIAL_IDENT = 12;
    private static final int BEGL_MATERIAL_MENGE = 13;
    private static final int BEGL_MATERIAL_EINHEIT = 14;
    private static final int BEGL_MATERIAL_AUSGABE = 15;
    private static final int BEGL_MATERIAL_BEZEICHNUNG = 16;
    private static final int BEGL_MATERIAL_LAGER = 17;
    private static final int BEGL_MATERIAL_LAGERORT = 18;
    private static final int BEGL_MATERIAL_MONTAGEART = 19;
    private static final int BEGL_MATERIAL_SCHALE = 20;
    private static final int BEGL_MATERIAL_ARTIKELKLASSE = 21;
    private static final int BEGL_MATERIAL_ZUSATZBEZEICHNUNG = 22;
    private static final int BEGL_MATERIAL_ZUSATZBEZEICHNUNG2 = 23;
    private static final int BEGL_MATERIAL_FARBCODE = 24;
    private static final int BEGL_MATERIAL_MATERIAL = 25;
    private static final int BEGL_MATERIAL_HOEHE = 26;
    private static final int BEGL_MATERIAL_BREITE = 27;
    private static final int BEGL_MATERIAL_TIEFE = 28;
    private final static int BEGL_MATERIAL_INDEX = 29;
    private final static int BEGL_MATERIAL_REVISION = 30;
    private static final int BEGL_BAUFORM = 31;
    private static final int BEGL_VERPACKUNGSART = 32;
    private static final int BEGL_GEWICHTKG = 33;
    private static final int BEGL_AGART = 34;
    private static final int BEGL_AUFSPANNUNG = 35;
    private static final int BEGL_UNTERARBEITSGANG = 36;
    private static final int BEGL_FREMDMATERIAL_ARTIKEL = 37;
    private static final int BEGL_FREMDMATERIAL_ARTIKELBEZEICHNUNG = 38;
    private static final int BEGL_FREMDMATERIAL_ARTIKELKURZBEZEICHNUNG = 39;
    private static final int BEGL_FREMDMATERIAL_ARTIKELZUSATZBEZEICHNUNG = 40;
    private static final int BEGL_FREMDMATERIAL_ARTIKELZUSATZBEZEICHNUNG2 = 41;
    private static final int BEGL_FREMDMATERIAL_SOLLMENGE = 42;
    private static final int BEGL_FREMDMATERIAL_LAGERORT = 43;
    private static final int BEGL_FERTIG = 44;
    private static final int BEGL_NURZURINFORMATION = 45;
    private final static int BEGL_SPALTENANZAHL = 46;

    private static final int MATERIAL_ART = 0;
    private static final int MATERIAL_ARTIKELNUMMER = 1;
    private static final int MATERIAL_BEZEICHNUNG = 2;
    private static final int MATERIAL_ZUSATZBEZEICHNUNG = 3;
    private static final int MATERIAL_ZUSATZBEZEICHNUNG2 = 4;
    private static final int MATERIAL_KURZBEZEICHNUNG = 5;
    private static final int MATERIAL_SOLLMENGE = 6;
    private static final int MATERIAL_ISTMENGE = 7;
    private static final int MATERIAL_SOLLPREIS = 8;
    private static final int MATERIAL_LIEF1PREIS = 9;
    private static final int MATERIAL_ISTPREIS = 10;
    private static final int MATERIAL_WE_REFERENZ = 11;
    private static final int MATERIAL_SNRCHNR = 11;
    private final static int MATERIAL_SPALTENANZAHL = 12;

    private static final int ALLE_LOSNUMMER = 0;
    private static final int ALLE_IDENT = 1;
    private static final int ALLE_BEZEICHNUNG = 2;
    private static final int ALLE_MATERIALSOLLMENGE = 3;
    private static final int ALLE_MATERIALISTMENGE = 4;
    private static final int ALLE_MATERIALSOLLPREIS = 5;
    private static final int ALLE_MATERIALISTPREIS = 6;
    private static final int ALLE_ARBEITSZEITSOLLMENGE = 7;
    private static final int ALLE_ARBEITSZEITISTMENGE = 8;
    private static final int ALLE_ARBEITSZEITSOLLPREIS = 9;
    private static final int ALLE_ARBEITSZEITISTPREIS = 10;
    private static final int ALLE_ZUSATZBEZEICHNUNG = 11;
    private static final int ALLE_BEGINNTERMIN = 12;
    private static final int ALLE_AUFTRAGLIEFERTERMIN = 13;
    private static final int ALLE_LOSGROESSE = 14;
    private static final int ALLE_OFFENERAHMENRESERVIERUNGEN = 15;
    private static final int ALLE_AUFTRAGSNUMMER = 16;
    private static final int ALLE_KUNDE = 17;
    private static final int ALLE_FERTIGUNGSGRUPPE = 18;

    private static final int ALLE_FELDANZAHL = 19;

    private static final int OFFENE_LOSNUMMER = 0;
    private static final int OFFENE_ARTIKELNUMMER = 1;
    private static final int OFFENE_BEZEICHNUNG = 2;
    private static final int OFFENE_KALENDERWOCHE = 3;
    private static final int OFFENE_AUFTRAGSNUMMER = 4;
    private static final int OFFENE_LOSGROESSE = 5;
    private static final int OFFENE_GELIEFERT = 6;
    private static final int OFFENE_BEGINN = 7;
    private static final int OFFENE_ENDE = 8;
    private static final int OFFENE_MATERIAL = 9;
    private static final int OFFENE_ZUSATZBEZEICHNUNG = 10;
    private static final int OFFENE_KUNDE = 11;
    private static final int OFFENE_PROJEKT = 12;
    private static final int OFFENE_FERTIGUNGSGRUPPE = 13;
    private static final int OFFENE_FEHLMENGE = 14;
    private static final int OFFENE_RESERVIERUNGEN = 15;
    private static final int OFFENE_RAHMEN_BESTELLT = 16;
    private static final int OFFENE_AUFTRAGSPOENALE = 17;
    private static final int OFFENE_FERTIGUNGSZEIT = 18;
    private static final int OFFENE_LOSSTATUS = 19;
    private static final int OFFENE_LIEFERTERMIN = 20;
    private static final int OFFENE_RAHMENRESERVIERUNGEN = 21;
    private static final int OFFENE_DETAILBEDARF = 22;
    private static final int OFFENE_LOSHATFEHLMENGE = 23;
    private final static int OFFENE_SPALTENANZAHL = 24;

    private static final int OFFENE_AG_LOSNUMMER = 0;
    private static final int OFFENE_AG_ARTIKELNUMMER = 1;
    private static final int OFFENE_AG_BEZEICHNUNG = 2;
    private static final int OFFENE_AG_KALENDERWOCHE = 3;
    private static final int OFFENE_AG_AUFTRAGSNUMMER = 4;
    private static final int OFFENE_AG_LOSGROESSE = 5;
    private static final int OFFENE_AG_GELIEFERT = 6;
    private static final int OFFENE_AG_BEGINN = 7;
    private static final int OFFENE_AG_ENDE = 8;
    private static final int OFFENE_AG_MATERIAL = 9;
    private static final int OFFENE_AG_ZUSATZBEZEICHNUNG = 10;
    private static final int OFFENE_AG_KUNDE = 11;
    private static final int OFFENE_AG_PROJEKT = 12;
    private static final int OFFENE_AG_FERTIGUNGSGRUPPE = 13;
    private static final int OFFENE_AG_FEHLMENGE = 14;
    private static final int OFFENE_AG_RESERVIERUNGEN = 15;
    private static final int OFFENE_AG_RAHMEN_BESTELLT = 16;
    private static final int OFFENE_AG_AUFTRAGSPOENALE = 17;
    private static final int OFFENE_AG_FERTIGUNGSZEIT = 18;
    private static final int OFFENE_AG_LOSSTATUS = 19;
    private static final int OFFENE_AG_LIEFERTERMIN = 20;
    private static final int OFFENE_AG_RAHMENRESERVIERUNGEN = 21;
    private static final int OFFENE_AG_DETAILBEDARF = 22;
    private static final int OFFENE_AG_LOSHATFEHLMENGE = 23;
    private static final int OFFENE_AG_AGNUMMER = 24;
    private static final int OFFENE_AG_UAGNUMMER = 25;
    private static final int OFFENE_AG_AG_ARTIKEL = 26;
    private static final int OFFENE_AG_AG_ARTIKELGRUPPPE = 27;
    private static final int OFFENE_AG_AG_BEGINN = 28;

    private static final int OFFENE_AG_AG_ARTIKELBEZEICHNUNG = 29;
    private static final int OFFENE_AG_AG_GESAMTZEIT = 30;
    private static final int OFFENE_AG_AG_MASCHINE_IDENTIFIKATIONSNUMMMER = 31;
    private static final int OFFENE_AG_AG_MASCHINE_BEZEICHNUNG = 32;
    private static final int OFFENE_AG_AG_MASCHINE_INVENTARNUMMMER = 33;
    private static final int OFFENE_AG_AG_ISTZEIT = 34;

    private final static int OFFENE_AG_SPALTENANZAHL = 35;

    private static final int AUSLIEFERLISTE_LOSNUMMER = 0;
    private static final int AUSLIEFERLISTE_ARTIKELNUMMER = 1;
    private static final int AUSLIEFERLISTE_BEZEICHNUNG = 2;
    private static final int AUSLIEFERLISTE_KALENDERWOCHE = 3;
    private static final int AUSLIEFERLISTE_AUFTRAGSNUMMER = 4;
    private static final int AUSLIEFERLISTE_LOSGROESSE = 5;
    private static final int AUSLIEFERLISTE_GELIEFERT = 6;
    private static final int AUSLIEFERLISTE_BEGINN = 7;
    private static final int AUSLIEFERLISTE_ENDE = 8;
    private static final int AUSLIEFERLISTE_MATERIAL = 9;
    private static final int AUSLIEFERLISTE_ZUSATZBEZEICHNUNG = 10;
    private static final int AUSLIEFERLISTE_KUNDE = 11;
    private static final int AUSLIEFERLISTE_PROJEKT = 12;
    private static final int AUSLIEFERLISTE_FERTIGUNGSGRUPPE = 13;
    private static final int AUSLIEFERLISTE_FEHLMENGE = 14;
    private static final int AUSLIEFERLISTE_RESERVIERUNGEN = 15;
    private static final int AUSLIEFERLISTE_RAHMEN_BESTELLT = 16;
    private static final int AUSLIEFERLISTE_AUFTRAGSPOENALE = 17;
    private static final int AUSLIEFERLISTE_FERTIGUNGSZEIT = 18;
    private static final int AUSLIEFERLISTE_LOSSTATUS = 19;
    private static final int AUSLIEFERLISTE_LIEFERTERMIN = 20;
    private static final int AUSLIEFERLISTE_RAHMENRESERVIERUNGEN = 21;
    private static final int AUSLIEFERLISTE_LOSHATFEHLMENGE = 22;
    private static final int AUSLIEFERLISTE_ARBEITSGAENGE = 23;
    private static final int AUSLIEFERLISTE_AUFTRAGSPOSITIONNUMMER = 24;
    private static final int AUSLIEFERLISTE_AUFTRAGARTIKEL = 25;
    private static final int AUSLIEFERLISTE_AUFTRAGARTIKELBEZEICHNUNG = 26;
    private static final int AUSLIEFERLISTE_AUFTRAGARTIKELGRUPPE = 27;
    private static final int AUSLIEFERLISTE_AUFTRAGARTIKELKLASSE = 28;
    private static final int AUSLIEFERLISTE_AUFTRAGPOSITIONSMENGE = 29;
    private static final int AUSLIEFERLISTE_AUFTRAGART = 30;
    private static final int AUSLIEFERLISTE_AUFTRAGSKUNDE_NAME1 = 31;
    private static final int AUSLIEFERLISTE_AUFTRAGSKUNDE_NAME2 = 32;
    private static final int AUSLIEFERLISTE_AUFTRAGSKUNDE_STRASSE = 33;
    private static final int AUSLIEFERLISTE_AUFTRAGSKUNDE_ORT = 34;
    private static final int AUSLIEFERLISTE_AUFTRAGSKUNDE_LKZ = 35;
    private static final int AUSLIEFERLISTE_AUFTRAGSKUNDE_PLZ = 36;
    private static final int AUSLIEFERLISTE_AUFTRAGSKUNDE_TELEFON = 37;
    private static final int AUSLIEFERLISTE_AUFTRAGSKUNDE_ANSPRECHPARTNER = 38;
    private static final int AUSLIEFERLISTE_AUFTRAGSKUNDE_ANSPRECHPARTNER_TELEFONDW = 39;
    private static final int AUSLIEFERLISTE_AUFTRAG_POSITIONSTERMIN = 40;
    private static final int AUSLIEFERLISTE_MATERIALLISTE = 41;
    private static final int AUSLIEFERLISTE_PROJEKTKOMMENTAR = 42;
    private static final int AUSLIEFERLISTE_LOSARTIKELGRUPPE = 43;
    private static final int AUSLIEFERLISTE_LOSARTIKELKLASSE = 44;
    private static final int AUSLIEFERLISTE_AUFTRAG_LIEFERADRESSE = 45;
    private static final int AUSLIEFERLISTE_AUFTRAG_LIEFERART = 46;
    private static final int AUSLIEFERLISTE_AUFTRAG_SPEDITEUR = 47;
    private static final int AUSLIEFERLISTE_ABLIEFERDATUM = 48;
    private static final int AUSLIEFERLISTE_AUFTRAG_OFFENERAHMENMENGE = 49;
    private static final int AUSLIEFERLISTE_LOSKLASSEN = 50;
    private static final int AUSLIEFERLISTE_ZUWENIG_AUF_LAGER_ZUM_ZEITPUNKT = 51;
    private static final int AUSLIEFERLISTE_AUFTRAG_OFFENEMENGE = 52;
    private static final int AUSLIEFERLISTE_LAGERSTAND = 53;
    private static final int AUSLIEFERLISTE_AUFTRAGARTIKEL_LAGERSTAND = 54;
    private final static int AUSLIEFERLISTE_SPALTENANZAHL = 55;

    private static final int ABLIEF_LOSNUMMER = 0;
    private static final int ABLIEF_IDENT = 1;
    private static final int ABLIEF_BEZEICHNUNG = 2;
    private static final int ABLIEF_DATUM = 3;
    private static final int ABLIEF_MENGE = 4;
    private static final int ABLIEF_ABLIEFERPREIS = 5;
    private static final int ABLIEF_MATERIALWERT = 6;
    private static final int ABLIEF_ARBEITSZEITWERT = 7;
    private static final int ABLIEF_WERT = 8;
    private static final int ABLIEF_ZUSATZBEZEICHNUNG = 9;

    private static final int ZE_SOLLZEIT = 0;
    private static final int ZE_ISTZEIT = 1;
    private static final int ZE_DATUM = 2;
    private static final int ZE_ARTIKELGRUPPE = 3;

    private static final int AV_SOLLZEITBEGINN = 0;
    private static final int AV_SOLLZEITENDE = 1;
    private static final int AV_DATUM = 2;
    private static final int AV_ARTIKELGRUPPE = 3;
    private static final int AV_PERSONALVERFUEGBARKEIT = 4;

    private static final int HF_ARTIKELNUMMER = 0;
    private static final int HF_LOSGROESSE = 1;
    private static final int HF_LOSNUMMER = 2;
    private static final int HF_BEZEICHNUNG = 3;
    private static final int HF_ERLEDIGT = 4;
    private static final int HF_POSITION_ARTIKELNUMMMER = 5;
    private static final int HF_POSITION_BEZEICHNUNG = 6;
    private static final int HF_POSITION_AUSGEGEBEN = 7;
    private static final int HF_POSITION_ABGELIFERT = 8;
    private static final int HF_POSITION_OFFEN = 9;
    private static final int HF_POSITION_PREIS = 10;
    private static final int HF_POSITION_EKPREIS = 11;
    private static final int HF_POSITION_MAT_ODER_AZ = 12;
    private static final int HF_POSITION_AUSGEGEBEN_MASCHINE = 13;
    private static final int HF_POSITION_ABGELIFERT_MASCHINE = 14;
    private static final int HF_POSITION_OFFEN_MASCHINE = 15;
    private static final int HF_POSITION_PREIS_MASCHINE = 16;

    private final static int AFM_BELEGNUMMER = 0;
    private final static int AFM_PROJEKT = 1;
    private final static int AFM_STUECKLISTENUMMER = 2;
    private final static int AFM_STUECKLISTEBEZEICHNUNG = 3;
    private final static int AFM_ARTIKELNUMMER = 4;
    private final static int AFM_ARTIKELBEZEICHNUNG = 5;
    private final static int AFM_FEHLMENGE = 6;
    private final static int AFM_LAGERSTAND = 7;
    private final static int AFM_TERMIN = 8;
    private final static int AFM_EINHEIT = 9;
    private final static int AFM_BESTELLT = 10;
    private final static int AFM_STUECKLISTEZUSATZBEZEICHNUNG = 11;
    private final static int AFM_ARTIKELZUSATZBEZEICHNUNG = 12;
    private final static int AFM_RESERVIERT = 14;
    private final static int AFM_OFFEN = 15;
    private final static int AFM_ABNUMMER = 16;
    private final static int AFM_MAHNSTUFE = 17;
    private final static int AFM_FIKTIVERLAGERSTAND = 18;
    private final static int AFM_SPALTENANZAHL = 19;

    private final static int FMAL_BELEGNUMMER = 0;
    private final static int FMAL_BELEGART = 1;
    private final static int FMAL_STUECKLISTENUMMER = 2;
    private final static int FMAL_STUECKLISTEBEZEICHNUNG = 3;
    private final static int FMAL_ARTIKELNUMMER = 4;
    private final static int FMAL_ARTIKELBEZEICHNUNG = 5;
    private final static int FMAL_FEHLMENGE = 6;
    private final static int FMAL_LAGERSTAND = 7;
    private final static int FMAL_TERMIN = 8;
    private final static int FMAL_PRODUKTIONSBEGINN = 9;
    private final static int FMAL_PRODUKTIONSENDE = 10;
    private final static int FMAL_EINHEIT = 11;
    private final static int FMAL_BESTELLT = 12;
    private final static int FMAL_STUECKLISTEZUSATZBEZEICHNUNG = 13;
    private final static int FMAL_ARTIKELZUSATZBEZEICHNUNG = 14;
    private final static int FMAL_RESERVIERT = 15;
    private final static int FMAL_OFFEN = 16;
    private final static int FMAL_ABNUMMER = 17;
    private final static int FMAL_MAHNSTUFE = 18;
    private final static int FMAL_FIKTIVERLAGERSTAND = 19;
    private final static int FMAL_ARTIKEL_I_ID = 20;
    private final static int FMAL_ABTERMIN = 21;
    private final static int FMAL_LIEFERANT = 22;
    private final static int FMAL_ARTIKELSPERREN = 23;
    private final static int FMAL_POENALE_AUS_AUFTRAG = 24;
    private final static int FMAL_SPALTENANZAHL = 25;

    private final static int SRM_ARBEITSGANG = 0;
    private final static int SRM_IDENT = 1;
    private final static int SRM_BEZEICHNUNG = 2;
    private final static int SRM_ZUSATZBEZEICHNUNG = 3;
    private final static int SRM_GEBUCHT = 4;
    private final static int SRM_PERSONAL = 5;
    private final static int SRM_GUT = 6;
    private final static int SRM_SCHLECHT = 7;
    private final static int SRM_INARBEIT = 8;
    private final static int SRM_OFFEN = 8;
    private final static int SRM_MASCHINE = 10;
    private final static int SRM_SPALTENANZAHL = 11;

    private final static int LOSZEITEN_ARTIKELNUMMER = 0;
    private final static int LOSZEITEN_BEZEICHNUNG = 1;
    private final static int LOSZEITEN_ZUSATZBEZEICHNUNG = 2;
    private final static int LOSZEITEN_PERSON_MASCHINE = 3;
    private final static int LOSZEITEN_PERSONALNUMMER_MASCHINENINVENARNUMMER = 4;
    private final static int LOSZEITEN_BEGINN = 5;
    private final static int LOSZEITEN_ENDE = 6;
    private final static int LOSZEITEN_DAUER = 7;
    private final static int LOSZEITEN_BEMERKUNG = 8;
    private final static int LOSZEITEN_BEMERKUNG_LANG = 9;
    private final static int LOSZEITEN_MASCHINENGRUPPE = 10;
    private final static int LOSZEITEN_ARBEITSGANG = 11;
    private final static int LOSZEITEN_UNTERARBEITSGANG = 12;
    private final static int LOSZEITEN_SPALTENANZAHL = 13;

    private final static int FEHLERSTATISTIK_LOSNUMMER = 0;
    private final static int FEHLERSTATISTIK_STUECKLISTE = 1;
    private final static int FEHLERSTATISTIK_STUECKLISTEBEZEICHNUNG = 2;
    private final static int FEHLERSTATISTIK_PROJEKT = 3;
    private final static int FEHLERSTATISTIK_LOSGROESSE = 4;
    private final static int FEHLERSTATISTIK_MENGE_ERLEDIGT = 5;
    private final static int FEHLERSTATISTIK_ERLEDIGTDATUM = 6;
    private final static int FEHLERSTATISTIK_AG_AGNUMMER = 7;
    private final static int FEHLERSTATISTIK_AG_UAGNUMMER = 8;
    private final static int FEHLERSTATISTIK_AG_ARTIKELNUMMER = 9;
    private final static int FEHLERSTATISTIK_AG_ARTIKELBEZEICHNUNG = 10;
    private final static int FEHLERSTATISTIK_GUT = 11;
    private final static int FEHLERSTATISTIK_SCHLECHT = 12;
    private final static int FEHLERSTATISTIK_INARBEIT = 13;
    private final static int FEHLERSTATISTIK_FEHLER = 14;
    private final static int FEHLERSTATISTIK_FEHLERSPR = 15;
    private final static int FEHLERSTATISTIK_FEHLER_KOMMENTAR = 16;
    private final static int FEHLERSTATISTIK_PERSONAL = 17;
    private final static int FEHLERSTATISTIK_ZEITPUNKT = 18;
    private final static int FEHLERSTATISTIK_SPALTENANZAHL = 19;

    private final static int LOSSTATISTIK_ARTIKELNUMMER = 0;
    private final static int LOSSTATISTIK_ARTIKELBEZEICHNUNG = 1;
    private final static int LOSSTATISTIK_PERSONALMASCHINE = 2;
    private final static int LOSSTATISTIK_SOLLMENGE = 3;
    private final static int LOSSTATISTIK_SOLLPREIS = 4;
    private final static int LOSSTATISTIK_ISTMENGE = 5;
    private final static int LOSSTATISTIK_ISTPREIS = 6;
    private final static int LOSSTATISTIK_GRUPPIERUNG = 7;
    private final static int LOSSTATISTIK_GRUPPIERUNGBEZEICHNUNG = 8;
    private final static int LOSSTATISTIK_UNTERGRUPPEMATERIAL = 9;
    private final static int LOSSTATISTIK_GRUPPIERUNGSTKLARTIKEL = 10;
    private final static int LOSSTATISTIK_GRUPPIERUNGKUNDE = 11;
    private final static int LOSSTATISTIK_GRUPPIERUNGAUSGABE = 12;
    private final static int LOSSTATISTIK_GRUPPIERUNGERLEDIGT = 13;
    private final static int LOSSTATISTIK_ISTPERSON = 14;
    private final static int LOSSTATISTIK_GRUPPIERUNVKPREIS = 15;
    private final static int LOSSTATISTIK_GRUPPIERUNABGELIEFERTEMENGE = 16;
    private final static int LOSSTATISTIK_GRUPPIERUNGLOSGROESSE = 17;
    private final static int LOSSTATISTIK_BUCHUNGSZEIT = 18;
    private final static int LOSSTATISTIK_GEPLANTESSOLLMATERIAL = 19;
    private final static int LOSSTATISTIK_BEWERTUNG = 20;
    private final static int LOSSTATISTIK_ERLEDIGUNGSDATUM = 21;

    private static final int MONATSAUSWERTUNG_KUNDE = 0;
    private static final int MONATSAUSWERTUNG_ARTIKELNUMMER = 1;
    private static final int MONATSAUSWERTUNG_BEZEICHNUNG = 2;
    private static final int MONATSAUSWERTUNG_SOLLZEIT = 3;
    private static final int MONATSAUSWERTUNG_ISTZEIT = 4;
    private static final int MONATSAUSWERTUNG_LOSGROESSE = 5;
    private static final int MONATSAUSWERTUNG_ABWEICHUNG = 6;
    private static final int MONATSAUSWERTUNG_FERTIGUNGSGRUPPE = 7;
    private static final int MONATSAUSWERTUNG_LOSNUMMER = 8;
    private static final int MONATSAUSWERTUNG_BEWERTUNG = 9;
    private static final int MONATSAUSWERTUNG_ANZAHL_FELDER = 10;

    private static final int RANKINGLISTE_FERTIGUNGSGRUPPE = 0;
    private static final int RANKINGLISTE_INFO_U = 1;
    private static final int RANKINGLISTE_INFO_L = 2;
    private static final int RANKINGLISTE_INFO_K = 3;
    private static final int RANKINGLISTE_ARTIKELNUMMER = 4;
    private static final int RANKINGLISTE_ARTIKELBEZEICHNUNG = 5;
    private static final int RANKINGLISTE_LOSNR = 6;
    private static final int RANKINGLISTE_KUNDE = 7;
    private static final int RANKINGLISTE_SOLLZEIT = 8;
    private static final int RANKINGLISTE_OFFENELOSMENGE = 9;
    private static final int RANKINGLISTE_LOSBEGINNTERMIN = 10;

    private final static int NACHKALKULATION_ARTIKELNUMMER = 0;
    private final static int NACHKALKULATION_ARTIKELBEZEICHNUNG = 1;
    private final static int NACHKALKULATION_PERSONALSOLL = 2;
    private final static int NACHKALKULATION_PERSONALIST = 3;
    private final static int NACHKALKULATION_PERSONALDIFF = 4;
    private final static int NACHKALKULATION_MASCHINESOLL = 5;
    private final static int NACHKALKULATION_MASCHINEIST = 6;
    private final static int NACHKALKULATION_MASCHINEDIFF = 7;
    private final static int NACHKALKULATION_GESAMTSOLL = 8;
    private final static int NACHKALKULATION_GESAMTIST = 9;

    private static final int ETI_ARTIKELNUMMER = 0;
    private static final int ETI_BEZEICHNUNG = 1;
    private static final int ETI_KURZBEZEICHNUNG = 2;
    private static final int ETI_ZUSATZBEZEICHNUNG = 3;
    private static final int ETI_ZUSATZBEZEICHNUNG2 = 4;
    private static final int ETI_REFERENZNUMMER = 5;
    private static final int ETI_SOLLMENGE = 6;
    private static final int ETI_ISTMENGE = 7;
    private static final int ETI_EINHEIT = 8;
    private final static int ETI_ANZAHL_FELDER = 9;

    private static final int ETI_A4_SOLLMATERIAL_ARTIKELNUMMER = 0;
    private static final int ETI_A4_SOLLMATERIAL_BEZEICHNUNG = 1;
    private static final int ETI_A4_SOLLMATERIAL_KURZBEZEICHNUNG = 2;
    private static final int ETI_A4_SOLLMATERIAL_ZUSATZBEZEICHNUNG = 3;
    private static final int ETI_A4_SOLLMATERIAL_ZUSATZBEZEICHNUNG2 = 4;
    private static final int ETI_A4_SOLLMATERIAL_REFERENZNUMMER = 5;
    private static final int ETI_A4_SOLLMATERIAL_SOLLMENGE = 6;
    private static final int ETI_A4_SOLLMATERIAL_ISTMENGE = 7;
    private static final int ETI_A4_SOLLMATERIAL_EINHEIT = 8;
    private static final int ETI_A4_LOSNUMMER = 9;
    private static final int ETI_A4_AUFTRAG = 10;
    private static final int ETI_A4_ROHS = 11;
    private static final int ETI_A4_KUNDE_ANREDE = 12;
    private static final int ETI_A4_KUNDE_ABTEILUNG = 13;
    private static final int ETI_A4_KUNDE_LANDPLZORT = 14;
    private static final int ETI_A4_AUFTRAGSPOSITION = 15;
    private static final int ETI_A4_KOSTENSTELLENNUMMER = 16;
    private static final int ETI_A4_KOSTENSTELLENBEZEICHNUNG = 17;
    private static final int ETI_A4_LOSART = 18;
    private static final int ETI_A4_STUECKLISTENNUMMER = 19;
    private static final int ETI_A4_STUECKLISTENBEZEICHNUNG = 20;
    private static final int ETI_A4_STUECKLISTEZUSATZBEZEICHNUNG = 21;
    private static final int ETI_A4_STUECKLISTEKURZBEZEICHNUNG = 22;
    private static final int ETI_A4_STUECKLISTEREFERENZNUMMER = 23;
    private static final int ETI_A4_STUECKLISTEMENGENEINHEIT = 24;
    private static final int ETI_A4_LOSGROESSE = 25;
    private static final int ETI_A4_LAGER = 26;
    private static final int ETI_A4_BEGINN = 27;
    private static final int ETI_A4_ENDE = 28;
    private static final int ETI_A4_DAUER = 29;
    private static final int ETI_A4_TECHNIKERNUMMER = 30;
    private static final int ETI_A4_TECHNIKERNAME = 31;
    private static final int ETI_A4_PROJEKT = 32;
    private static final int ETI_A4_KOMMENTAR = 33;
    private static final int ETI_A4_FERTIGUNGSGRUPPE = 34;
    private static final int ETI_A4_FERTIGUNGSORT = 35;
    private static final int ETI_A4_TEXT = 36;
    private static final int ETI_A4_EXEMPLAR = 37;
    private final static int ETI_A4_ANZAHL_FELDER = 38;

    private static final int PI_BILD = 0;
    private static final int PI_SCHLAGWORTE = 1;
    private static final int PI_FILENAME = 2;
    private static final int PI_NAME = 3;
    private final static int PI_ANZAHL_FELDER = 4;

    private static final int FT_STUECKLISTENART = 0;
    private static final int FT_ARTIKELNUMMER = 1;
    private static final int FT_BEZEICHNUNG = 2;
    private static final int FT_SOLLMENGE = 3;
    private static final int FT_AUSGEGEBEN = 4;
    private static final int FT_LAGERSTAND = 5;
    private static final int FT_EBENE = 6;
    private static final int FT_LOSNUMMER = 7;
    private static final int FT_FEHLMENGE = 8;
    private static final int FT_LOSGROESSE = 9;
    private static final int FT_ABGELIEFERT = 10;
    private static final int FT_LOSSTATUS = 11;
    private final static int FT_ANZAHL_SPALTEN = 12;

    private static final int ABLIEFERETIKETT_SERIENNUMMER = 0;
    private static final int ABLIEFERETIKETT_SUBREPORT_GERAETESNR = 1;
    private final static int ABLIEFERETIKETT_ANZAHL_SPALTEN = 2;

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

    public Object getFieldValue(JRField field) throws JRException {
        Object value = null;
        String fieldName = field.getName();
        switch (useCase) {
        case UC_THEORETISCHE_FEHLMENGEN: {
            if ("F_IDENT".equals(fieldName)) {
                value = data[index][TF_IDENT];
            } else if ("F_BEZEICHNUNG".equals(fieldName)) {
                value = data[index][TF_BEZEICHNUNG];
            } else if ("F_SOLLMENGE".equals(fieldName)) {
                value = data[index][TF_SOLLMENGE];
            } else if ("F_ISTMENGE".equals(fieldName)) {
                value = data[index][TF_ISTMENGE];
            } else if ("F_VERFUEGBAR".equals(fieldName)) {
                value = data[index][TF_VERFUEGBAR];
            } else if ("F_FEHLMENGE".equals(fieldName)) {
                value = data[index][TF_FEHLMENGE];
            } else if ("F_BESTELLT".equals(fieldName)) {
                value = data[index][TF_BESTELLT];
            } else if ("F_MOEGLICH".equals(fieldName)) {
                value = data[index][TF_MOEGLICH];
            } else if ("F_LAGERSTAND".equals(fieldName)) {
                value = data[index][TF_LAGERSTAND];
            } else if (F_ZUSATZBEZEICHNUNG.equals(fieldName)) {
                value = data[index][TF_ZUSATZBEZEICHNUNG];
            } else if ("F_VERFUEGBARZUMTERMIN".equals(fieldName)) {
                value = data[index][TF_VERFUEGBARZUMPRODUKTIONSSTART];
            } else if ("F_ARTIKELSPERREN".equals(fieldName)) {
                value = data[index][TF_ARTIKELSPERREN];
            } else if ("F_ERSATZIDENT".equals(fieldName)) {
                value = data[index][TF_ERSATZIDENT];
            } else if ("F_ERSATZBEZEICHNUNG".equals(fieldName)) {
                value = data[index][TF_ERSATZBEZEICHNUNG];
            }

        }
            break;
        case UC_MATERIALLISTE: {
            if ("F_ART".equals(fieldName)) {
                value = data[index][MATERIAL_ART];
            } else if ("F_ARTIKELNUMMER".equals(fieldName)) {
                value = data[index][MATERIAL_ARTIKELNUMMER];
            } else if ("F_BEZEICHNUNG".equals(fieldName)) {
                value = data[index][MATERIAL_BEZEICHNUNG];
            } else if ("F_ZUSATZBEZEICHNUNG".equals(fieldName)) {
                value = data[index][MATERIAL_ZUSATZBEZEICHNUNG];
            } else if ("F_ZUSATZBEZEICHNUNG2".equals(fieldName)) {
                value = data[index][MATERIAL_ZUSATZBEZEICHNUNG2];
            } else if ("F_KURZBEZEICHNUNG".equals(fieldName)) {
                value = data[index][MATERIAL_KURZBEZEICHNUNG];
            } else if ("F_SOLLMENGE".equals(fieldName)) {
                value = data[index][MATERIAL_SOLLMENGE];
            } else if ("F_ISTMENGE".equals(fieldName)) {
                value = data[index][MATERIAL_ISTMENGE];
            } else if ("F_SOLLPREIS".equals(fieldName)) {
                value = data[index][MATERIAL_SOLLPREIS];
            } else if ("F_LIEF1PREIS".equals(fieldName)) {
                value = data[index][MATERIAL_LIEF1PREIS];
            } else if ("F_ISTPREIS".equals(fieldName)) {
                value = data[index][MATERIAL_ISTPREIS];
            } else if ("F_WE_REFERENZ".equals(fieldName)) {
                value = data[index][MATERIAL_WE_REFERENZ];
            } else if ("F_SNRCHNR".equals(fieldName)) {
                value = data[index][MATERIAL_SNRCHNR];
            }

        }
            break;
        case UC_AUSGABELISTE: {
            if ("F_IDENT".equals(fieldName)) {
                value = data[index][AUSG_IDENT];
            } else if ("F_BEZEICHNUNG".equals(fieldName)) {
                value = data[index][AUSG_BEZEICHNUNG];
            } else if ("F_ARTIKELKLASSE".equals(fieldName)) {
                value = data[index][AUSG_ARTIKELKLASSE];
            } else if ("F_AUSGABE".equals(fieldName)) {
                value = data[index][AUSG_AUSGABE];
            } else if ("F_EINHEIT".equals(fieldName)) {
                value = data[index][AUSG_EINHEIT];
            } else if ("F_LAGER".equals(fieldName)) {
                value = data[index][AUSG_LAGER];
            } else if ("F_LAGERORT".equals(fieldName)) {
                value = data[index][AUSG_LAGERORT];
            } else if ("F_MENGE".equals(fieldName)) {
                value = data[index][AUSG_MENGE];
            } else if ("F_MONTAGEART".equals(fieldName)) {
                value = data[index][AUSG_MONTAGEART];
            } else if ("F_SCHALE".equals(fieldName)) {
                value = data[index][AUSG_SCHALE];
            } else if (F_ZUSATZBEZEICHNUNG.equals(fieldName)) {
                value = data[index][AUSG_ZUSATZBEZEICHNUNG];
            } else if ("F_ZUSATZBEZEICHNUNG2".equals(fieldName)) {
                value = data[index][AUSG_ZUSATZBEZEICHNUNG2];
            } else if ("F_FARBCODE".equals(fieldName)) {
                value = data[index][AUSG_FARBCODE];
            } else if ("F_HOEHE".equals(fieldName)) {
                value = data[index][AUSG_HOEHE];
            } else if (F_ARTIKEL_BREITE.equals(fieldName)) {
                value = data[index][AUSG_BREITE];
            } else if (F_ARTIKEL_TIEFE.equals(fieldName)) {
                value = data[index][AUSG_TIEFE];
            } else if ("F_MATERIAL".equals(fieldName)) {
                value = data[index][AUSG_MATERIAL];
            } else if (F_ARTIKEL_BAUFORM.equals(fieldName)) {
                value = data[index][AUSG_BAUFORM];
            } else if (F_ARTIKEL_VERPACKUNGSART.equals(fieldName)) {
                value = data[index][AUSG_VERPACKUNGSART];
            } else if (F_ARTIKEL_MONTAGE_RASTERSTEHEND.equals(fieldName)) {
                value = data[index][AUSG_RASTERSTEHEND];
            } else if ("F_BESTELLT".equals(fieldName)) {
                value = data[index][AUSG_BESTELLT];
            } else if ("F_STKL_KOMMENTAR".equals(fieldName)) {
                value = Helper.formatStyledTextForJasper(data[index][AUSG_STUECKLISTE_KOMMENTAR]);
            } else if ("F_SNRCHNR".equals(fieldName)) {
                value = data[index][AUSG_SNRCHNR];
            } else if ("F_ARTIKELKOMMENTAR".equals(fieldName)) {
                value = Helper.formatStyledTextForJasper(data[index][AUSG_KOMMENTAR]);
            } else if ("F_ARTIKELBILD".equals(fieldName)) {
                value = data[index][AUSG_ARTIKELBILD];
            } else if ("F_LAGERSTAND".equals(fieldName)) {
                value = data[index][AUSG_LAGERSTAND];
            } else if ("F_IN_FERTIGUNG".equals(fieldName)) {
                value = data[index][AUSG_IN_FERTIGUNG];
            } else if ("F_LAGERSTAND_SPERRLAGER".equals(fieldName)) {
                value = data[index][AUSG_LAGERSTAND_SPERRLAGER];
            } else if ("F_INDEX".equals(fieldName)) {
                value = data[index][AUSG_INDEX];
            } else if ("F_REVISION".equals(fieldName)) {
                value = data[index][AUSG_REVISION];
            }
        }
            break;
        case UC_FERTIGUNGSBEGLEITSCHEIN: {
            if ("F_IDENT".equals(fieldName)) {
                value = data[index][BEGL_IDENT];
            }
            if ("F_IST_MATERIAL".equals(fieldName)) {
                value = data[index][BEGL_IST_MATERIAL];
            } else if ("F_BEZEICHNUNG".equals(fieldName)) {
                value = data[index][BEGL_BEZEICHNUNG];
            } else if ("F_RUESTZEIT".equals(fieldName)) {
                value = data[index][BEGL_RUESTZEIT];
            } else if ("F_STUECKZEIT".equals(fieldName)) {
                value = data[index][BEGL_STUECKZEIT];
            } else if ("F_GESAMTZEIT".equals(fieldName)) {
                value = data[index][BEGL_GESAMTZEIT];
            } else if ("F_KOMMENTAR".equals(fieldName)) {
                value = Helper.formatStyledTextForJasper(data[index][BEGL_KOMMENTAR]);
            } else if (F_ZUSATZBEZEICHNUNG.equals(fieldName)) {
                value = data[index][BEGL_ZUSATZBEZEICHNUNG];
            } else if ("F_ZUSATZBEZEICHNUNG2".equals(fieldName)) {
                value = data[index][BEGL_ZUSATZBEZEICHNUNG2];
            } else if ("F_MASCHINE".equals(fieldName)) {
                value = data[index][BEGL_MASCHINE];
            } else if ("F_MASCHINEBEZEICHNUNG".equals(fieldName)) {
                value = data[index][BEGL_MASCHINE_BEZEICHNUNG];
            } else if ("F_ARBEITSGANG".equals(fieldName)) {
                value = data[index][BEGL_ARBEITSGANG];
            } else if ("F_UNTERARBEITSGANG".equals(fieldName)) {
                value = data[index][BEGL_UNTERARBEITSGANG];
            } else if ("F_AGART".equals(fieldName)) {
                value = data[index][BEGL_AGART];
            } else if ("F_AUFSPANNUNG".equals(fieldName)) {
                value = data[index][BEGL_AUFSPANNUNG];
            } else if ("F_FERTIG".equals(fieldName)) {
                value = data[index][BEGL_FERTIG];
            } else if ("F_NURZURINFORMATION".equals(fieldName)) {
                value = data[index][BEGL_NURZURINFORMATION];
            }
            // Material
            else if ("F_MATERIAL_ARTIKELKLASSE".equals(fieldName)) {
                value = data[index][BEGL_MATERIAL_ARTIKELKLASSE];
            } else if ("F_MATERIAL_AUSGABE".equals(fieldName)) {
                value = data[index][BEGL_MATERIAL_AUSGABE];
            } else if ("F_MATERIAL_BEZEICHNUNG".equals(fieldName)) {
                value = data[index][BEGL_MATERIAL_BEZEICHNUNG];
            } else if ("F_MATERIAL_EINHEIT".equals(fieldName)) {
                value = data[index][BEGL_MATERIAL_EINHEIT];
            } else if ("F_MATERIAL_FARBCODE".equals(fieldName)) {
                value = data[index][BEGL_MATERIAL_FARBCODE];
            } else if ("F_MATERIAL_IDENT".equals(fieldName)) {
                value = data[index][BEGL_MATERIAL_IDENT];
            } else if ("F_MATERIAL_LAGER".equals(fieldName)) {
                value = data[index][BEGL_MATERIAL_LAGER];
            } else if ("F_MATERIAL_LAGERORT".equals(fieldName)) {
                value = data[index][BEGL_MATERIAL_LAGERORT];
            } else if ("F_MATERIAL_MENGE".equals(fieldName)) {
                value = data[index][BEGL_MATERIAL_MENGE];
            } else if ("F_MATERIAL_MONTAGEART".equals(fieldName)) {
                value = data[index][BEGL_MATERIAL_MONTAGEART];
            } else if ("F_MATERIAL_SCHALE".equals(fieldName)) {
                value = data[index][BEGL_MATERIAL_SCHALE];
            } else if ("F_MATERIAL_ZUSATZBEZEICHNUNG".equals(fieldName)) {
                value = data[index][BEGL_MATERIAL_ZUSATZBEZEICHNUNG];
            } else if ("F_MATERIAL_ZUSATZBEZEICHNUNG2".equals(fieldName)) {
                value = data[index][BEGL_MATERIAL_ZUSATZBEZEICHNUNG2];
            } else if ("F_MATERIAL_HOEHE".equals(fieldName)) {
                value = data[index][BEGL_MATERIAL_HOEHE];
            } else if (F_ARTIKEL_BREITE.equals(fieldName)) {
                value = data[index][BEGL_MATERIAL_BREITE];
            } else if (F_ARTIKEL_TIEFE.equals(fieldName)) {
                value = data[index][BEGL_MATERIAL_TIEFE];
            } else if ("F_MATERIAL_MATERIAL".equals(fieldName)) {
                value = data[index][BEGL_MATERIAL_MATERIAL];
            } else if ("F_MATERIAL_INDEX".equals(fieldName)) {
                value = data[index][BEGL_MATERIAL_INDEX];
            } else if ("F_MATERIAL_REVISION".equals(fieldName)) {
                value = data[index][BEGL_MATERIAL_REVISION];
            } else if (F_ARTIKEL_BAUFORM.equals(fieldName)) {
                value = data[index][BEGL_BAUFORM];
            } else if (F_ARTIKEL_VERPACKUNGSART.equals(fieldName)) {
                value = data[index][BEGL_VERPACKUNGSART];
            } else if (F_ARTIKEL_GEWICHTKG.equals(fieldName)) {
                value = data[index][BEGL_GEWICHTKG];
            } else if ("FremdmaterialArtikel".equals(fieldName)) {
                value = data[index][BEGL_FREMDMATERIAL_ARTIKEL];
            } else if ("FremdmaterialArtikelbezeichnung".equals(fieldName)) {
                value = data[index][BEGL_FREMDMATERIAL_ARTIKELBEZEICHNUNG];
            } else if ("FremdmaterialSollmenge".equals(fieldName)) {
                value = data[index][BEGL_FREMDMATERIAL_SOLLMENGE];
            } else if ("FremdmaterialLagerort".equals(fieldName)) {
                value = data[index][BEGL_FREMDMATERIAL_LAGERORT];
            } else if ("FremdmaterialArtikelkurzbezeichnung".equals(fieldName)) {
                value = data[index][BEGL_FREMDMATERIAL_ARTIKELKURZBEZEICHNUNG];
            } else if ("FremdmaterialArtikelzusatzbezeichnung".equals(fieldName)) {
                value = data[index][BEGL_FREMDMATERIAL_ARTIKELZUSATZBEZEICHNUNG];
            } else if ("FremdmaterialArtikelzusatzbezeichnung2".equals(fieldName)) {
                value = data[index][BEGL_FREMDMATERIAL_ARTIKELZUSATZBEZEICHNUNG2];
            }

        }
            break;
        case UC_ABLIEFERUNGSSTATISTIK: {
            if ("F_LOSNUMMER".equals(fieldName)) {
                value = data[index][ABLIEF_LOSNUMMER];
            } else if ("F_IDENT".equals(fieldName)) {
                value = data[index][ABLIEF_IDENT];
            } else if ("F_BEZEICHNUNG".equals(fieldName)) {
                value = data[index][ABLIEF_BEZEICHNUNG];
            } else if ("F_DATUM".equals(fieldName)) {
                value = data[index][ABLIEF_DATUM];
            } else if ("F_MENGE".equals(fieldName)) {
                value = data[index][ABLIEF_MENGE];
            } else if ("F_ABLIEFERPREIS".equals(fieldName)) {
                value = data[index][ABLIEF_ABLIEFERPREIS];
            } else if ("F_MATERIALWERT".equals(fieldName)) {
                value = data[index][ABLIEF_MATERIALWERT];
            } else if ("F_ARBEITSZEITWERT".equals(fieldName)) {
                value = data[index][ABLIEF_ARBEITSZEITWERT];
            } else if ("F_WERT".equals(fieldName)) {
                value = data[index][ABLIEF_WERT];
            } else if (F_ZUSATZBEZEICHNUNG.equals(fieldName)) {
                value = data[index][ABLIEF_ZUSATZBEZEICHNUNG];
            }
        }
            break;
        case UC_ABLIEFERETIKETT: {
            if ("F_SNRCHNR".equals(fieldName)) {
                value = data[index][ABLIEFERETIKETT_SERIENNUMMER];
            } else if ("F_SUBREPORT_GERAETESNR".equals(fieldName)) {
                value = data[index][ABLIEFERETIKETT_SUBREPORT_GERAETESNR];
            }
        }
            break;
        case UC_FEHLERSTATISTIK: {
            if ("F_AG_AGNUMMER".equals(fieldName)) {
                value = data[index][FEHLERSTATISTIK_AG_AGNUMMER];
            } else if ("F_AG_ARTIKELBEZEICHNUNG".equals(fieldName)) {
                value = data[index][FEHLERSTATISTIK_AG_ARTIKELBEZEICHNUNG];
            } else if ("F_AG_ARTIKELNUMMER".equals(fieldName)) {
                value = data[index][FEHLERSTATISTIK_AG_ARTIKELNUMMER];
            } else if ("F_AG_UAGNUMMER".equals(fieldName)) {
                value = data[index][FEHLERSTATISTIK_AG_UAGNUMMER];
            } else if ("F_ERLEDIGTDATUM".equals(fieldName)) {
                value = data[index][FEHLERSTATISTIK_ERLEDIGTDATUM];
            } else if ("F_FEHLER".equals(fieldName)) {
                value = data[index][FEHLERSTATISTIK_FEHLER];
            } else if ("F_FEHLERSPR".equals(fieldName)) {
                value = data[index][FEHLERSTATISTIK_FEHLERSPR];
            } else if ("F_FEHLER_KOMMENTAR".equals(fieldName)) {
                value = data[index][FEHLERSTATISTIK_FEHLER_KOMMENTAR];
            } else if ("F_GUT".equals(fieldName)) {
                value = data[index][FEHLERSTATISTIK_GUT];
            } else if ("F_SCHLECHT".equals(fieldName)) {
                value = data[index][FEHLERSTATISTIK_SCHLECHT];
            } else if ("F_INARBEIT".equals(fieldName)) {
                value = data[index][FEHLERSTATISTIK_INARBEIT];
            } else if ("F_LOSGROESSE".equals(fieldName)) {
                value = data[index][FEHLERSTATISTIK_LOSGROESSE];
            } else if ("F_LOSNUMMER".equals(fieldName)) {
                value = data[index][FEHLERSTATISTIK_LOSNUMMER];
            } else if ("F_MENGE_ERLEDIGT".equals(fieldName)) {
                value = data[index][FEHLERSTATISTIK_MENGE_ERLEDIGT];
            } else if ("F_PERSONAL".equals(fieldName)) {
                value = data[index][FEHLERSTATISTIK_PERSONAL];
            } else if ("F_PROJEKT".equals(fieldName)) {
                value = data[index][FEHLERSTATISTIK_PROJEKT];
            } else if ("F_STUECKLISTE".equals(fieldName)) {
                value = data[index][FEHLERSTATISTIK_STUECKLISTE];
            } else if ("F_STUECKLISTEBEZEICHNUNG".equals(fieldName)) {
                value = data[index][FEHLERSTATISTIK_STUECKLISTEBEZEICHNUNG];
            } else if ("F_ZEITPUNKT".equals(fieldName)) {
                value = data[index][FEHLERSTATISTIK_ZEITPUNKT];
            }
        }
            break;
        case UC_LOSZEITEN: {
            if ("F_ARTIKELNUMMER".equals(fieldName)) {
                value = data[index][LOSZEITEN_ARTIKELNUMMER];
            } else if ("F_BEZEICHNUNG".equals(fieldName)) {
                value = data[index][LOSZEITEN_BEZEICHNUNG];
            } else if ("F_ZUSATZBEZEICHNUNG".equals(fieldName)) {
                value = data[index][LOSZEITEN_ZUSATZBEZEICHNUNG];
            } else if ("F_BEGINN".equals(fieldName)) {
                value = data[index][LOSZEITEN_BEGINN];
            } else if ("F_BEMERKUNG".equals(fieldName)) {
                value = data[index][LOSZEITEN_BEMERKUNG];
            } else if ("F_BEMERKUNG_LANG".equals(fieldName)) {
                value = data[index][LOSZEITEN_BEMERKUNG_LANG];
            } else if ("F_MASCHINENGRUPPE".equals(fieldName)) {
                value = data[index][LOSZEITEN_MASCHINENGRUPPE];
            } else if ("F_ARBEITSGANG".equals(fieldName)) {
                value = data[index][LOSZEITEN_ARBEITSGANG];
            } else if ("F_UNTERARBEITSGANG".equals(fieldName)) {
                value = data[index][LOSZEITEN_UNTERARBEITSGANG];
            } else if ("F_DAUER".equals(fieldName)) {
                value = data[index][LOSZEITEN_DAUER];
            } else if ("F_ENDE".equals(fieldName)) {
                value = data[index][LOSZEITEN_ENDE];
            } else if ("F_PERSON_MASCHINE".equals(fieldName)) {
                value = data[index][LOSZEITEN_PERSON_MASCHINE];
            } else if ("F_PERSONALNUMMER_MASCHINENINVENARNUMMER".equals(fieldName)) {
                value = data[index][LOSZEITEN_PERSONALNUMMER_MASCHINENINVENARNUMMER];
            }
        }
            break;
        case UC_FEHLTEILE: {
            if ("F_ARTIKELNUMMER".equals(fieldName)) {
                value = data[index][FT_ARTIKELNUMMER];
            } else if ("F_AUSGEGEBEN".equals(fieldName)) {
                value = data[index][FT_AUSGEGEBEN];
            } else if ("F_BEZEICHNUNG".equals(fieldName)) {
                value = data[index][FT_BEZEICHNUNG];
            } else if ("F_EBENE".equals(fieldName)) {
                value = data[index][FT_EBENE];
            } else if ("F_FEHLMENGE".equals(fieldName)) {
                value = data[index][FT_FEHLMENGE];
            } else if ("F_LAGERSTAND".equals(fieldName)) {
                value = data[index][FT_LAGERSTAND];
            } else if ("F_LOSNUMMER".equals(fieldName)) {
                value = data[index][FT_LOSNUMMER];
            } else if ("F_SOLLMENGE".equals(fieldName)) {
                value = data[index][FT_SOLLMENGE];
            } else if ("F_STUECKLISTENART".equals(fieldName)) {
                value = data[index][FT_STUECKLISTENART];
            } else if ("F_LOSGROESSE".equals(fieldName)) {
                value = data[index][FT_LOSGROESSE];
            } else if ("F_LOSSTATUS".equals(fieldName)) {
                value = data[index][FT_LOSSTATUS];
            } else if ("F_ABGELIEFERT".equals(fieldName)) {
                value = data[index][FT_ABGELIEFERT];
            }

        }
            break;

        case UC_ZEITENTWICKLUNG: {
            if ("Sollzeit".equals(fieldName)) {
                value = data[index][ZE_SOLLZEIT];
            } else if ("Istzeit".equals(fieldName)) {
                value = data[index][ZE_ISTZEIT];
            } else if ("Artikelgruppe".equals(fieldName)) {
                value = data[index][ZE_ARTIKELGRUPPE];
            } else if ("Datum".equals(fieldName)) {
                value = data[index][ZE_DATUM];
            }
        }
            break;
        case UC_AUSLASTUNGSVORSCHAU: {
            if ("SollzeitBeginn".equals(fieldName)) {
                value = data[index][AV_SOLLZEITBEGINN];
            } else if ("SollzeitEnde".equals(fieldName)) {
                value = data[index][AV_SOLLZEITENDE];
            } else if ("Verfuegbarkeit".equals(fieldName)) {
                value = data[index][AV_PERSONALVERFUEGBARKEIT];
            } else if ("Datum".equals(fieldName)) {
                value = data[index][AV_DATUM];
            } else if ("Artikelgruppe".equals(fieldName)) {
                value = data[index][AV_ARTIKELGRUPPE];
            }
        }
            break;
        case UC_HALBFERTIGFABRIKATSINVENTUR: {
            if ("Losnummer".equals(fieldName)) {
                value = data[index][HF_LOSNUMMER];
            } else if ("Artikelnummer".equals(fieldName)) {
                value = data[index][HF_ARTIKELNUMMER];
            } else if ("Bezeichnung".equals(fieldName)) {
                value = data[index][HF_BEZEICHNUNG];
            } else if ("Losgroesse".equals(fieldName)) {
                value = data[index][HF_LOSGROESSE];
            } else if ("Erledigt".equals(fieldName)) {
                value = data[index][HF_ERLEDIGT];
            } else if ("PositionArtikelnummer".equals(fieldName)) {
                value = data[index][HF_POSITION_ARTIKELNUMMMER];
            } else if ("PositionBezeichnung".equals(fieldName)) {
                value = data[index][HF_POSITION_BEZEICHNUNG];
            } else if ("PositionAbgeliefert".equals(fieldName)) {
                value = data[index][HF_POSITION_ABGELIFERT];
            } else if ("PositionAusgegeben".equals(fieldName)) {
                value = data[index][HF_POSITION_AUSGEGEBEN];
            } else if ("PositionOffen".equals(fieldName)) {
                value = data[index][HF_POSITION_OFFEN];
            } else if ("PositionPreis".equals(fieldName)) {
                value = data[index][HF_POSITION_PREIS];
            } else if ("PositionAbgeliefertMaschine".equals(fieldName)) {
                value = data[index][HF_POSITION_ABGELIFERT_MASCHINE];
            } else if ("PositionAusgegebenMaschine".equals(fieldName)) {
                value = data[index][HF_POSITION_AUSGEGEBEN_MASCHINE];
            } else if ("PositionOffenMaschine".equals(fieldName)) {
                value = data[index][HF_POSITION_OFFEN_MASCHINE];
            } else if ("PositionPreisMaschine".equals(fieldName)) {
                value = data[index][HF_POSITION_PREIS_MASCHINE];
            } else if ("PositionEinkaufspreis".equals(fieldName)) {
                value = data[index][HF_POSITION_EKPREIS];
            } else if ("Material".equals(fieldName)) {
                value = data[index][HF_POSITION_MAT_ODER_AZ];
            }
        }
            break;
        case UC_OFFENE: {
            if ("F_AUFTRAGNUMMER".equals(fieldName)) {
                value = data[index][OFFENE_AUFTRAGSNUMMER];
            } else if ("F_BEZEICHNUNG".equals(fieldName)) {
                value = data[index][OFFENE_BEZEICHNUNG];
            } else if ("F_GELIEFERT".equals(fieldName)) {
                value = data[index][OFFENE_GELIEFERT];
            } else if ("F_ARTIKELNUMMMER".equals(fieldName)) {
                value = data[index][OFFENE_ARTIKELNUMMER];
            } else if ("F_DETAILBEDARF".equals(fieldName)) {
                value = data[index][OFFENE_DETAILBEDARF];
            } else if ("F_KALENDERWOCHE".equals(fieldName)) {
                value = data[index][OFFENE_KALENDERWOCHE];
            } else if ("F_LOSGROESSE".equals(fieldName)) {
                value = data[index][OFFENE_LOSGROESSE];
            } else if ("F_LOSNUMMER".equals(fieldName)) {
                value = data[index][OFFENE_LOSNUMMER];
            } else if ("F_MATERIAL".equals(fieldName)) {
                value = data[index][OFFENE_MATERIAL];
            } else if ("F_BEGINN".equals(fieldName)) {
                value = data[index][OFFENE_BEGINN];
            } else if ("F_ENDE".equals(fieldName)) {
                value = data[index][OFFENE_ENDE];
            } else if (F_ZUSATZBEZEICHNUNG.equals(fieldName)) {
                value = data[index][OFFENE_ZUSATZBEZEICHNUNG];
            } else if ("F_KUNDE".equals(fieldName)) {
                value = data[index][OFFENE_KUNDE];
            } else if ("F_PROJEKT".equals(fieldName)) {
                value = data[index][OFFENE_PROJEKT];
            } else if ("F_FERTIGUNGSGRUPPE".equals(fieldName)) {
                value = data[index][OFFENE_FERTIGUNGSGRUPPE];
            } else if ("F_FEHLMENGE".equals(fieldName)) {
                value = data[index][OFFENE_FEHLMENGE];
            } else if ("F_RESERVIERUNGEN".equals(fieldName)) {
                value = data[index][OFFENE_RESERVIERUNGEN];
            } else if (F_ARTIKELRAHMENMENGE_OFFEN.equals(fieldName)) {
                value = data[index][OFFENE_RAHMEN_BESTELLT];
            } else if ("F_AUFTRAGSPOENALE".equals(fieldName)) {
                value = data[index][OFFENE_AUFTRAGSPOENALE];
            } else if ("F_FERTIGUNGSZEIT".equals(fieldName)) {
                value = data[index][OFFENE_FERTIGUNGSZEIT];
            } else if ("F_LOSSTATUS".equals(fieldName)) {
                value = data[index][OFFENE_LOSSTATUS];
            } else if ("F_LIEFERTERMIN".equals(fieldName)) {
                value = data[index][OFFENE_LIEFERTERMIN];
            } else if ("F_RAHMENRESERVIERUNGEN".equals(fieldName)) {
                value = data[index][OFFENE_RAHMENRESERVIERUNGEN];
            } else if ("F_LOSHATFEHLMENGE".equals(fieldName)) {
                value = data[index][OFFENE_LOSHATFEHLMENGE];
            }
        }
            break;
        case UC_OFFENE_AG: {
            if ("F_AUFTRAGNUMMER".equals(fieldName)) {
                value = data[index][OFFENE_AG_AUFTRAGSNUMMER];
            } else if ("F_BEZEICHNUNG".equals(fieldName)) {
                value = data[index][OFFENE_AG_BEZEICHNUNG];
            } else if ("F_GELIEFERT".equals(fieldName)) {
                value = data[index][OFFENE_AG_GELIEFERT];
            } else if ("F_ARTIKELNUMMMER".equals(fieldName)) {
                value = data[index][OFFENE_AG_ARTIKELNUMMER];
            } else if ("F_DETAILBEDARF".equals(fieldName)) {
                value = data[index][OFFENE_AG_DETAILBEDARF];
            } else if ("F_KALENDERWOCHE".equals(fieldName)) {
                value = data[index][OFFENE_AG_KALENDERWOCHE];
            } else if ("F_LOSGROESSE".equals(fieldName)) {
                value = data[index][OFFENE_AG_LOSGROESSE];
            } else if ("F_LOSNUMMER".equals(fieldName)) {
                value = data[index][OFFENE_AG_LOSNUMMER];
            } else if ("F_MATERIAL".equals(fieldName)) {
                value = data[index][OFFENE_AG_MATERIAL];
            } else if ("F_BEGINN".equals(fieldName)) {
                value = data[index][OFFENE_AG_BEGINN];
            } else if ("F_ENDE".equals(fieldName)) {
                value = data[index][OFFENE_AG_ENDE];
            } else if (F_ZUSATZBEZEICHNUNG.equals(fieldName)) {
                value = data[index][OFFENE_AG_ZUSATZBEZEICHNUNG];
            } else if ("F_KUNDE".equals(fieldName)) {
                value = data[index][OFFENE_AG_KUNDE];
            } else if ("F_PROJEKT".equals(fieldName)) {
                value = data[index][OFFENE_AG_PROJEKT];
            } else if ("F_FERTIGUNGSGRUPPE".equals(fieldName)) {
                value = data[index][OFFENE_AG_FERTIGUNGSGRUPPE];
            } else if ("F_FEHLMENGE".equals(fieldName)) {
                value = data[index][OFFENE_AG_FEHLMENGE];
            } else if ("F_RESERVIERUNGEN".equals(fieldName)) {
                value = data[index][OFFENE_AG_RESERVIERUNGEN];
            } else if (F_ARTIKELRAHMENMENGE_OFFEN.equals(fieldName)) {
                value = data[index][OFFENE_AG_RAHMEN_BESTELLT];
            } else if ("F_AUFTRAGSPOENALE".equals(fieldName)) {
                value = data[index][OFFENE_AG_AUFTRAGSPOENALE];
            } else if ("F_FERTIGUNGSZEIT".equals(fieldName)) {
                value = data[index][OFFENE_AG_FERTIGUNGSZEIT];
            } else if ("F_LOSSTATUS".equals(fieldName)) {
                value = data[index][OFFENE_AG_LOSSTATUS];
            } else if ("F_LIEFERTERMIN".equals(fieldName)) {
                value = data[index][OFFENE_AG_LIEFERTERMIN];
            } else if ("F_RAHMENRESERVIERUNGEN".equals(fieldName)) {
                value = data[index][OFFENE_AG_RAHMENRESERVIERUNGEN];
            } else if ("F_LOSHATFEHLMENGE".equals(fieldName)) {
                value = data[index][OFFENE_AG_LOSHATFEHLMENGE];
            } else if ("F_AG_ARTIKELNUMMER".equals(fieldName)) {
                value = data[index][OFFENE_AG_AG_ARTIKEL];
            } else if ("F_AG_ARTIKELGRUPPE".equals(fieldName)) {
                value = data[index][OFFENE_AG_AG_ARTIKELGRUPPPE];
            } else if ("F_AG_AG_BEGINN".equals(fieldName)) {
                value = data[index][OFFENE_AG_AG_BEGINN];
            } else if ("F_AG_AGNUMMER".equals(fieldName)) {
                value = data[index][OFFENE_AG_AGNUMMER];
            } else if ("F_AG_UAGNUMMER".equals(fieldName)) {
                value = data[index][OFFENE_AG_UAGNUMMER];
            }

            else if ("F_AG_ARTIKELBEZEICHNUNG".equals(fieldName)) {
                value = data[index][OFFENE_AG_AG_ARTIKELBEZEICHNUNG];
            } else if ("F_AG_GESAMTZEIT".equals(fieldName)) {
                value = data[index][OFFENE_AG_AG_GESAMTZEIT];
            } else if ("F_AG_ISTTZEIT".equals(fieldName)) {
                value = data[index][OFFENE_AG_AG_ISTZEIT];
            } else if ("F_AG_MASCHINE_IDENTIFIKATIONSNUMMMER".equals(fieldName)) {
                value = data[index][OFFENE_AG_AG_MASCHINE_IDENTIFIKATIONSNUMMMER];
            } else if ("F_AG_MASCHINE_BEZEICHNUNG".equals(fieldName)) {
                value = data[index][OFFENE_AG_AG_MASCHINE_BEZEICHNUNG];
            } else if ("F_AG_MASCHINE_INVENTARNUMMMER".equals(fieldName)) {
                value = data[index][OFFENE_AG_AG_MASCHINE_INVENTARNUMMMER];
            }

        }
            break;
        case UC_AUSLIEFERLISTE: {
            if ("F_AUFTRAGNUMMER".equals(fieldName)) {
                value = data[index][AUSLIEFERLISTE_AUFTRAGSNUMMER];
            } else if ("F_BEZEICHNUNG".equals(fieldName)) {
                value = data[index][AUSLIEFERLISTE_BEZEICHNUNG];
            } else if ("F_GELIEFERT".equals(fieldName)) {
                value = data[index][AUSLIEFERLISTE_GELIEFERT];
            } else if ("F_ARTIKELNUMMMER".equals(fieldName)) {
                value = data[index][AUSLIEFERLISTE_ARTIKELNUMMER];
            } else if ("F_LAGERSTAND".equals(fieldName)) {
                value = data[index][AUSLIEFERLISTE_LAGERSTAND];
            } else if ("F_KALENDERWOCHE".equals(fieldName)) {
                value = data[index][AUSLIEFERLISTE_KALENDERWOCHE];
            } else if ("F_LOSGROESSE".equals(fieldName)) {
                value = data[index][AUSLIEFERLISTE_LOSGROESSE];
            } else if ("F_LOSNUMMER".equals(fieldName)) {
                value = data[index][AUSLIEFERLISTE_LOSNUMMER];
            } else if ("F_MATERIAL".equals(fieldName)) {
                value = data[index][AUSLIEFERLISTE_MATERIAL];
            } else if ("F_BEGINN".equals(fieldName)) {
                value = data[index][AUSLIEFERLISTE_BEGINN];
            } else if ("F_ENDE".equals(fieldName)) {
                value = data[index][AUSLIEFERLISTE_ENDE];
            } else if (F_ZUSATZBEZEICHNUNG.equals(fieldName)) {
                value = data[index][AUSLIEFERLISTE_ZUSATZBEZEICHNUNG];
            } else if ("F_KUNDE".equals(fieldName)) {
                value = data[index][AUSLIEFERLISTE_KUNDE];
            } else if ("F_PROJEKT".equals(fieldName)) {
                value = data[index][AUSLIEFERLISTE_PROJEKT];
            } else if ("F_FERTIGUNGSGRUPPE".equals(fieldName)) {
                value = data[index][AUSLIEFERLISTE_FERTIGUNGSGRUPPE];
            } else if ("F_FEHLMENGE".equals(fieldName)) {
                value = data[index][AUSLIEFERLISTE_FEHLMENGE];
            } else if ("F_RESERVIERUNGEN".equals(fieldName)) {
                value = data[index][AUSLIEFERLISTE_RESERVIERUNGEN];
            } else if (F_ARTIKELRAHMENMENGE_OFFEN.equals(fieldName)) {
                value = data[index][AUSLIEFERLISTE_RAHMEN_BESTELLT];
            } else if ("F_AUFTRAGSPOENALE".equals(fieldName)) {
                value = data[index][AUSLIEFERLISTE_AUFTRAGSPOENALE];
            } else if ("F_FERTIGUNGSZEIT".equals(fieldName)) {
                value = data[index][AUSLIEFERLISTE_FERTIGUNGSZEIT];
            } else if ("F_LOSSTATUS".equals(fieldName)) {
                value = data[index][AUSLIEFERLISTE_LOSSTATUS];
            } else if ("F_LIEFERTERMIN".equals(fieldName)) {
                value = data[index][AUSLIEFERLISTE_LIEFERTERMIN];
            } else if ("F_RAHMENRESERVIERUNGEN".equals(fieldName)) {
                value = data[index][AUSLIEFERLISTE_RAHMENRESERVIERUNGEN];
            } else if ("F_LOSHATFEHLMENGE".equals(fieldName)) {
                value = data[index][AUSLIEFERLISTE_LOSHATFEHLMENGE];
            } else if ("F_ARBEITSGAENGE".equals(fieldName)) {
                value = data[index][AUSLIEFERLISTE_ARBEITSGAENGE];
            } else if ("F_AUFTRAGSPOSITIONNUMMER".equals(fieldName)) {
                value = data[index][AUSLIEFERLISTE_AUFTRAGSPOSITIONNUMMER];
            } else if ("F_AUFTRAGARTIKEL".equals(fieldName)) {
                value = data[index][AUSLIEFERLISTE_AUFTRAGARTIKEL];
            } else if ("F_AUFTRAGARTIKEL_LAGERSTAND".equals(fieldName)) {
                value = data[index][AUSLIEFERLISTE_AUFTRAGARTIKEL_LAGERSTAND];
            } else if ("F_AUFTRAGARTIKELBEZEICHNUNG".equals(fieldName)) {
                value = data[index][AUSLIEFERLISTE_AUFTRAGARTIKELBEZEICHNUNG];
            } else if ("F_AUFTRAGARTIKELGRUPPE".equals(fieldName)) {
                value = data[index][AUSLIEFERLISTE_AUFTRAGARTIKELGRUPPE];
            } else if ("F_AUFTRAGARTIKELKLASSE".equals(fieldName)) {
                value = data[index][AUSLIEFERLISTE_AUFTRAGARTIKELKLASSE];
            } else if ("F_AUFTRAGPOSITIONSMENGE".equals(fieldName)) {
                value = data[index][AUSLIEFERLISTE_AUFTRAGPOSITIONSMENGE];
            } else if ("F_AUFTRAGART".equals(fieldName)) {
                value = data[index][AUSLIEFERLISTE_AUFTRAGART];
            } else if ("F_AUFTRAGSKUNDE_NAME1".equals(fieldName)) {
                value = data[index][AUSLIEFERLISTE_AUFTRAGSKUNDE_NAME1];
            } else if ("F_AUFTRAGSKUNDE_NAME2".equals(fieldName)) {
                value = data[index][AUSLIEFERLISTE_AUFTRAGSKUNDE_NAME2];
            } else if ("F_AUFTRAGSKUNDE_STRASSE".equals(fieldName)) {
                value = data[index][AUSLIEFERLISTE_AUFTRAGSKUNDE_STRASSE];
            } else if ("F_AUFTRAGSKUNDE_ORT".equals(fieldName)) {
                value = data[index][AUSLIEFERLISTE_AUFTRAGSKUNDE_ORT];
            } else if ("F_AUFTRAGSKUNDE_LKZ".equals(fieldName)) {
                value = data[index][AUSLIEFERLISTE_AUFTRAGSKUNDE_LKZ];
            } else if ("F_AUFTRAGSKUNDE_PLZ".equals(fieldName)) {
                value = data[index][AUSLIEFERLISTE_AUFTRAGSKUNDE_PLZ];
            } else if ("F_AUFTRAGSKUNDE_TELEFON".equals(fieldName)) {
                value = data[index][AUSLIEFERLISTE_AUFTRAGSKUNDE_TELEFON];
            } else if ("F_AUFTRAGSKUNDE_ANSPRECHPARTNER".equals(fieldName)) {
                value = data[index][AUSLIEFERLISTE_AUFTRAGSKUNDE_ANSPRECHPARTNER];
            } else if ("F_AUFTRAGSKUNDE_ANSPRECHPARTNER_TELEFONDW".equals(fieldName)) {
                value = data[index][AUSLIEFERLISTE_AUFTRAGSKUNDE_ANSPRECHPARTNER_TELEFONDW];
            } else if ("F_AUFTRAGSKUNDE_AUFTRAG_POSITIONSTERMIN".equals(fieldName)) {
                value = data[index][AUSLIEFERLISTE_AUFTRAG_POSITIONSTERMIN];
            } else if ("F_MATERIALLISTE".equals(fieldName)) {
                value = data[index][AUSLIEFERLISTE_MATERIALLISTE];
            } else if ("F_PROJEKTKOMMENTAR".equals(fieldName)) {
                value = data[index][AUSLIEFERLISTE_PROJEKTKOMMENTAR];
            } else if ("F_LOSARTIKELGRUPPE".equals(fieldName)) {
                value = data[index][AUSLIEFERLISTE_LOSARTIKELGRUPPE];
            } else if ("F_LOSARTIKELKLASSE".equals(fieldName)) {
                value = data[index][AUSLIEFERLISTE_LOSARTIKELKLASSE];
            } else if ("F_AUFTRAG_LIEFERADRESSE".equals(fieldName)) {
                value = data[index][AUSLIEFERLISTE_AUFTRAG_LIEFERADRESSE];
            } else if ("F_AUFTRAG_LIEFERART".equals(fieldName)) {
                value = data[index][AUSLIEFERLISTE_AUFTRAG_LIEFERART];
            } else if ("F_AUFTRAG_SPEDITEUR".equals(fieldName)) {
                value = data[index][AUSLIEFERLISTE_AUFTRAG_SPEDITEUR];
            } else if ("F_ABLIEFERDATUM".equals(fieldName)) {
                value = data[index][AUSLIEFERLISTE_ABLIEFERDATUM];
            } else if ("F_AUFTRAG_OFFENERAHMENMENGE".equals(fieldName)) {
                value = data[index][AUSLIEFERLISTE_AUFTRAG_OFFENERAHMENMENGE];
            } else if ("F_LOSKLASSEN".equals(fieldName)) {
                value = data[index][AUSLIEFERLISTE_LOSKLASSEN];
            } else if ("F_ZUWENIG_AUF_LAGER_ZUM_ZEITPUNKT".equals(fieldName)) {
                value = data[index][AUSLIEFERLISTE_ZUWENIG_AUF_LAGER_ZUM_ZEITPUNKT];
            } else if ("F_AUFTRAG_OFFENEMENGE".equals(fieldName)) {
                value = data[index][AUSLIEFERLISTE_AUFTRAG_OFFENEMENGE];
            }
        }
            break;
        case UC_ALLE: {
            if ("F_ARBEITSZEITISTMENGE".equals(fieldName)) {
                value = data[index][ALLE_ARBEITSZEITISTMENGE];
            } else if ("F_ARBEITSZEITISTPREIS".equals(fieldName)) {
                value = data[index][ALLE_ARBEITSZEITISTPREIS];
            } else if ("F_ARBEITSZEITSOLLMENGE".equals(fieldName)) {
                value = data[index][ALLE_ARBEITSZEITSOLLMENGE];
            } else if ("F_ARBEITSZEITSOLLPREIS".equals(fieldName)) {
                value = data[index][ALLE_ARBEITSZEITSOLLPREIS];
            } else if ("F_BEZEICHNUNG".equals(fieldName)) {
                value = data[index][ALLE_BEZEICHNUNG];
            } else if ("F_IDENT".equals(fieldName)) {
                value = data[index][ALLE_IDENT];
            } else if ("F_LOSNUMMER".equals(fieldName)) {
                value = data[index][ALLE_LOSNUMMER];
            } else if ("F_MATERIALISTMENGE".equals(fieldName)) {
                value = data[index][ALLE_MATERIALISTMENGE];
            } else if ("F_MATERIALISTPREIS".equals(fieldName)) {
                value = data[index][ALLE_MATERIALISTPREIS];
            } else if ("F_MATERIALSOLLMENGE".equals(fieldName)) {
                value = data[index][ALLE_MATERIALSOLLMENGE];
            } else if ("F_MATERIALSOLLPREIS".equals(fieldName)) {
                value = data[index][ALLE_MATERIALSOLLPREIS];
            } else if (F_ZUSATZBEZEICHNUNG.equals(fieldName)) {
                value = data[index][ALLE_ZUSATZBEZEICHNUNG];
            } else if ("F_BEGINNTERMIN".equals(fieldName)) {
                value = data[index][ALLE_BEGINNTERMIN];
            } else if ("F_AUFTRAGLIEFERTERMIN".equals(fieldName)) {
                value = data[index][ALLE_AUFTRAGLIEFERTERMIN];
            } else if ("F_LOSGROESSE".equals(fieldName)) {
                value = data[index][ALLE_LOSGROESSE];
            } else if ("F_OFFENERAHMENRESERVIERUNGEN".equals(fieldName)) {
                value = data[index][ALLE_OFFENERAHMENRESERVIERUNGEN];
            } else if ("F_AUFTRAGSNUMMER".equals(fieldName)) {
                value = data[index][ALLE_AUFTRAGSNUMMER];
            } else if ("F_KUNDE".equals(fieldName)) {
                value = data[index][ALLE_KUNDE];
            } else if ("F_FERTIGUNGSGRUPPE".equals(fieldName)) {
                value = data[index][ALLE_FERTIGUNGSGRUPPE];
            }
        }
            break;
        case UC_MONATSAUSWERTUNG: {
            if ("Kunde".equals(fieldName)) {
                value = data[index][MONATSAUSWERTUNG_KUNDE];
            } else if ("Sollzeit".equals(fieldName)) {
                value = data[index][MONATSAUSWERTUNG_SOLLZEIT];
            } else if ("Istzeit".equals(fieldName)) {
                value = data[index][MONATSAUSWERTUNG_ISTZEIT];
            } else if ("Losgroesse".equals(fieldName)) {
                value = data[index][MONATSAUSWERTUNG_LOSGROESSE];
            } else if ("Bezeichnung".equals(fieldName)) {
                value = data[index][MONATSAUSWERTUNG_BEZEICHNUNG];
            } else if ("Abweichung".equals(fieldName)) {
                value = data[index][MONATSAUSWERTUNG_ABWEICHUNG];
            } else if ("Losnummer".equals(fieldName)) {
                value = data[index][MONATSAUSWERTUNG_LOSNUMMER];
            } else if ("Fertigungsgruppe".equals(fieldName)) {
                value = data[index][MONATSAUSWERTUNG_FERTIGUNGSGRUPPE];
            } else if ("Artikelnummer".equals(fieldName)) {
                value = data[index][MONATSAUSWERTUNG_ARTIKELNUMMER];
            } else if ("Bewertung".equals(fieldName)) {
                value = data[index][MONATSAUSWERTUNG_BEWERTUNG];
            }

        }
            break;

        case UC_AUFLOESBARE_FEHLMENGEN: {
            if ("F_BEZEICHNUNG".equals(fieldName)) {
                value = data[index][AFM_ARTIKELBEZEICHNUNG];
            } else if ("F_IDENT".equals(fieldName)) {
                value = data[index][AFM_ARTIKELNUMMER];
            } else if ("F_EINHEIT".equals(fieldName)) {
                value = data[index][AFM_EINHEIT];
            } else if ("F_FEHLMENGE".equals(fieldName)) {
                value = data[index][AFM_FEHLMENGE];
            } else if ("F_LAGERSTAND".equals(fieldName)) {
                value = data[index][AFM_LAGERSTAND];
            } else if ("F_BELEGNUMMER".equals(fieldName)) {
                value = data[index][AFM_BELEGNUMMER];
            } else if ("F_PROJEKT".equals(fieldName)) {
                value = data[index][AFM_PROJEKT];
            } else if ("F_STUECKLISTEBEZEICHNUNG".equals(fieldName)) {
                value = data[index][AFM_STUECKLISTEBEZEICHNUNG];
            } else if ("F_STUECKLISTEIDENT".equals(fieldName)) {
                value = data[index][AFM_STUECKLISTENUMMER];
            } else if ("F_TERMIN".equals(fieldName)) {
                value = data[index][AFM_TERMIN];
            } else if ("F_RESERVIERT".equals(fieldName)) {
                value = data[index][AFM_RESERVIERT];
            } else if ("F_BESTELLT".equals(fieldName)) {
                value = data[index][AFM_BESTELLT];
            } else if ("F_OFFEN".equals(fieldName)) {
                value = data[index][AFM_OFFEN];
            } else if ("F_ABNUMMER".equals(fieldName)) {
                value = data[index][AFM_ABNUMMER];
            } else if ("F_MAHNSTUFE".equals(fieldName)) {
                value = data[index][AFM_MAHNSTUFE];
            } else if ("F_STUECKLISTEZUSATZBEZEICHNUNG".equals(fieldName)) {
                value = data[index][AFM_STUECKLISTEZUSATZBEZEICHNUNG];
            } else if (F_ZUSATZBEZEICHNUNG.equals(fieldName)) {
                value = data[index][AFM_ARTIKELZUSATZBEZEICHNUNG];
            } else if ("F_FIKTIVERLAGERSTAND".equals(fieldName)) {
                value = data[index][AFM_FIKTIVERLAGERSTAND];
            }
        }
            break;
        case UC_FEHLMENGEN_ALLER_LOSE: {
            if ("F_BEZEICHNUNG".equals(fieldName)) {
                value = data[index][FMAL_ARTIKELBEZEICHNUNG];
            } else if ("F_IDENT".equals(fieldName)) {
                value = data[index][FMAL_ARTIKELNUMMER];
            } else if ("F_EINHEIT".equals(fieldName)) {
                value = data[index][FMAL_EINHEIT];
            } else if ("F_FEHLMENGE".equals(fieldName)) {
                value = data[index][FMAL_FEHLMENGE];
            } else if ("F_LAGERSTAND".equals(fieldName)) {
                value = data[index][FMAL_LAGERSTAND];
            } else if ("F_BELEGNUMMER".equals(fieldName)) {
                value = data[index][FMAL_BELEGNUMMER];
            } else if ("F_POENALE_AUS_AUFTRAG".equals(fieldName)) {
                value = data[index][FMAL_POENALE_AUS_AUFTRAG];
            } else if ("F_BELEGART".equals(fieldName)) {
                value = data[index][FMAL_BELEGART];
            } else if ("F_STUECKLISTEBEZEICHNUNG".equals(fieldName)) {
                value = data[index][FMAL_STUECKLISTEBEZEICHNUNG];
            } else if ("F_STUECKLISTEIDENT".equals(fieldName)) {
                value = data[index][FMAL_STUECKLISTENUMMER];
            } else if ("F_TERMIN".equals(fieldName)) {
                value = data[index][FMAL_TERMIN];
            } else if ("F_PRODUKTIONSBEGINN".equals(fieldName)) {
                value = data[index][FMAL_PRODUKTIONSBEGINN];
            } else if ("F_PRODUKTIONSENDE".equals(fieldName)) {
                value = data[index][FMAL_PRODUKTIONSENDE];
            } else if ("F_TERMIN".equals(fieldName)) {
                value = data[index][FMAL_TERMIN];
            } else if ("F_ABTERMIN".equals(fieldName)) {
                value = data[index][FMAL_ABTERMIN];
            } else if ("F_FIKTIVERLAGERSTAND".equals(fieldName)) {
                value = data[index][FMAL_FIKTIVERLAGERSTAND];
            } else if ("F_RESERVIERT".equals(fieldName)) {
                value = data[index][FMAL_RESERVIERT];
            } else if ("F_BESTELLT".equals(fieldName)) {
                value = data[index][FMAL_BESTELLT];
            } else if ("F_OFFEN".equals(fieldName)) {
                value = data[index][FMAL_OFFEN];
            } else if ("F_ABNUMMER".equals(fieldName)) {
                value = data[index][FMAL_ABNUMMER];
            } else if ("F_MAHNSTUFE".equals(fieldName)) {
                value = data[index][FMAL_MAHNSTUFE];
            } else if ("F_STUECKLISTEZUSATZBEZEICHNUNG".equals(fieldName)) {
                value = data[index][FMAL_STUECKLISTEZUSATZBEZEICHNUNG];
            } else if (F_ZUSATZBEZEICHNUNG.equals(fieldName)) {
                value = data[index][FMAL_ARTIKELZUSATZBEZEICHNUNG];
            } else if ("F_FIKTIVERLAGERSTAND".equals(fieldName)) {
                value = data[index][FMAL_FIKTIVERLAGERSTAND];
            } else if ("F_LIEFERANT".equals(fieldName)) {
                value = data[index][FMAL_LIEFERANT];
            } else if ("F_ARTIKELSPERREN".equals(fieldName)) {
                value = data[index][FMAL_ARTIKELSPERREN];
            }
        }
            break;
        case UC_STUECKRUECKMELDUNG: {
            if ("F_ARBEITSGANG".equals(fieldName)) {
                value = data[index][SRM_ARBEITSGANG];
            }
            if ("F_BEZEICHNUNG".equals(fieldName)) {
                value = data[index][SRM_BEZEICHNUNG];
            } else if ("F_GEBUCHT".equals(fieldName)) {
                value = data[index][SRM_GEBUCHT];
            } else if ("F_GUT".equals(fieldName)) {
                value = data[index][SRM_GUT];
            } else if ("F_INARBEIT".equals(fieldName)) {
                value = data[index][SRM_INARBEIT];
            } else if ("F_IDENT".equals(fieldName)) {
                value = data[index][SRM_IDENT];
            } else if ("F_MASCHINE".equals(fieldName)) {
                value = data[index][SRM_MASCHINE];
            } else if ("F_OFFEN".equals(fieldName)) {
                value = data[index][SRM_OFFEN];
            } else if ("F_PERSONAL".equals(fieldName)) {
                value = data[index][SRM_PERSONAL];
            } else if ("F_SCHLECHT".equals(fieldName)) {
                value = data[index][SRM_SCHLECHT];
            } else if (F_ZUSATZBEZEICHNUNG.equals(fieldName)) {
                value = data[index][SRM_ZUSATZBEZEICHNUNG];
            }
        }
            break;
        case UC_LOSSTATISTIK: {
            if ("Artikelnummer".equals(fieldName)) {
                value = data[index][LOSSTATISTIK_ARTIKELNUMMER];
            }
            if ("Bezeichnung".equals(fieldName)) {
                value = data[index][LOSSTATISTIK_ARTIKELBEZEICHNUNG];
            } else if ("PersonalMaschine".equals(fieldName)) {
                value = data[index][LOSSTATISTIK_PERSONALMASCHINE];
            } else if ("IstPerson".equals(fieldName)) {
                value = data[index][LOSSTATISTIK_ISTPERSON];
            } else if ("Sollpreis".equals(fieldName)) {
                value = data[index][LOSSTATISTIK_SOLLPREIS];
            } else if ("Sollmenge".equals(fieldName)) {
                value = data[index][LOSSTATISTIK_SOLLMENGE];
            } else if ("Istpreis".equals(fieldName)) {
                value = data[index][LOSSTATISTIK_ISTPREIS];
            } else if ("Istmenge".equals(fieldName)) {
                value = data[index][LOSSTATISTIK_ISTMENGE];
            } else if ("Gruppierung".equals(fieldName)) {
                value = data[index][LOSSTATISTIK_GRUPPIERUNG];
            } else if ("Gruppierungbezeichnung".equals(fieldName)) {
                value = data[index][LOSSTATISTIK_GRUPPIERUNGBEZEICHNUNG];
            } else if ("Gruppierungausgabe".equals(fieldName)) {
                value = data[index][LOSSTATISTIK_GRUPPIERUNGAUSGABE];
            } else if ("Gruppierungerledigt".equals(fieldName)) {
                value = data[index][LOSSTATISTIK_GRUPPIERUNGERLEDIGT];
            } else if ("Gruppierungartikel".equals(fieldName)) {
                value = data[index][LOSSTATISTIK_GRUPPIERUNGSTKLARTIKEL];
            } else if ("Gruppierungkunde".equals(fieldName)) {
                value = data[index][LOSSTATISTIK_GRUPPIERUNGKUNDE];
            } else if ("Untergruppematerial".equals(fieldName)) {
                value = data[index][LOSSTATISTIK_UNTERGRUPPEMATERIAL];
            } else if ("Gruppierunglosgroesse".equals(fieldName)) {
                value = data[index][LOSSTATISTIK_GRUPPIERUNGLOSGROESSE];
            } else if ("Gruppierungabgeliefertemenge".equals(fieldName)) {
                value = data[index][LOSSTATISTIK_GRUPPIERUNABGELIEFERTEMENGE];
            } else if ("Gruppierungvkpreis".equals(fieldName)) {
                value = data[index][LOSSTATISTIK_GRUPPIERUNVKPREIS];
            } else if ("Buchungszeit".equals(fieldName)) {
                value = data[index][LOSSTATISTIK_BUCHUNGSZEIT];
            } else if ("GeplantesSollmaterial".equals(fieldName)) {
                value = data[index][LOSSTATISTIK_GEPLANTESSOLLMATERIAL];
            } else if ("Erledigungsdatum".equals(fieldName)) {
                value = data[index][LOSSTATISTIK_ERLEDIGUNGSDATUM];
            } else if ("Bewertung".equals(fieldName)) {
                value = data[index][LOSSTATISTIK_BEWERTUNG];
            }
        }
            break;
        case UC_NACHKALKULATION: {
            if ("Artikelnummer".equals(fieldName)) {
                value = data[index][NACHKALKULATION_ARTIKELNUMMER];
            } else if ("Artikelbezeichnung".equals(fieldName)) {
                value = data[index][NACHKALKULATION_ARTIKELBEZEICHNUNG];
            } else if ("Gesamtist".equals(fieldName)) {
                value = data[index][NACHKALKULATION_GESAMTIST];
            } else if ("Gesamtsoll".equals(fieldName)) {
                value = data[index][NACHKALKULATION_GESAMTSOLL];
            } else if ("Maschinediff".equals(fieldName)) {
                value = data[index][NACHKALKULATION_MASCHINEDIFF];
            } else if ("Maschineist".equals(fieldName)) {
                value = data[index][NACHKALKULATION_MASCHINEIST];
            } else if ("Maschinesoll".equals(fieldName)) {
                value = data[index][NACHKALKULATION_MASCHINESOLL];
            } else if ("Personaldiff".equals(fieldName)) {
                value = data[index][NACHKALKULATION_PERSONALDIFF];
            } else if ("Personalist".equals(fieldName)) {
                value = data[index][NACHKALKULATION_PERSONALIST];
            } else if ("Personalsoll".equals(fieldName)) {
                value = data[index][NACHKALKULATION_PERSONALSOLL];
            }
        }
            break;
        case UC_GANZSEITIGESBILD: {
            if ("F_BILD".equals(fieldName)) {
                value = data[index][0];
            }

        }
            break;
        case UC_PRODUKTIONSINFORMATION: {
            if ("F_SCHLAGWORTE".equals(fieldName)) {
                value = data[index][PI_SCHLAGWORTE];
            } else if ("F_DATEINAME".equals(fieldName)) {
                value = data[index][PI_FILENAME];
            } else if ("F_NAME".equals(fieldName)) {
                value = data[index][PI_NAME];
            } else if ("F_BILD".equals(fieldName)) {
                value = data[index][PI_BILD];
            }
        }
            break;
        case UC_RANKINGLISTE: {
            if ("Fertigungsgruppe".equals(fieldName)) {
                value = data[index][RANKINGLISTE_FERTIGUNGSGRUPPE];
            } else if ("InfoU".equals(fieldName)) {
                value = data[index][RANKINGLISTE_INFO_U];
            } else if ("InfoL".equals(fieldName)) {
                value = data[index][RANKINGLISTE_INFO_L];
            } else if ("InfoK".equals(fieldName)) {
                value = data[index][RANKINGLISTE_INFO_K];
            } else if ("Artikelnummer".equals(fieldName)) {
                value = data[index][RANKINGLISTE_ARTIKELNUMMER];
            } else if ("Artikelbezeichnung".equals(fieldName)) {
                value = data[index][RANKINGLISTE_ARTIKELBEZEICHNUNG];
            } else if ("Losnummer".equals(fieldName)) {
                value = data[index][RANKINGLISTE_LOSNR];
            } else if ("Beginntermin".equals(fieldName)) {
                value = data[index][RANKINGLISTE_LOSBEGINNTERMIN];
            } else if ("Kunde".equals(fieldName)) {
                value = data[index][RANKINGLISTE_KUNDE];
            } else if ("Sollzeit".equals(fieldName)) {
                value = data[index][RANKINGLISTE_SOLLZEIT];
            } else if ("Offenelosmenge".equals(fieldName)) {
                value = data[index][RANKINGLISTE_OFFENELOSMENGE];
            }
        }
            break;
        case UC_ETIKETT: {
            if ("Artikelnummer".equals(fieldName)) {
                value = data[index][ETI_ARTIKELNUMMER];
            } else if ("Bezeichnung".equals(fieldName)) {
                value = data[index][ETI_BEZEICHNUNG];
            } else if ("Kurzbezeichnung".equals(fieldName)) {
                value = data[index][ETI_KURZBEZEICHNUNG];
            } else if ("Zusatzbezeichnung".equals(fieldName)) {
                value = data[index][ETI_ZUSATZBEZEICHNUNG];
            } else if ("Zusatzbezeichnung2".equals(fieldName)) {
                value = data[index][ETI_ZUSATZBEZEICHNUNG2];
            } else if ("Einheit".equals(fieldName)) {
                value = data[index][ETI_EINHEIT];
            } else if ("Referenznummer".equals(fieldName)) {
                value = data[index][ETI_REFERENZNUMMER];
            } else if ("Istmenge".equals(fieldName)) {
                value = data[index][ETI_ISTMENGE];
            } else if ("Sollmenge".equals(fieldName)) {
                value = data[index][ETI_SOLLMENGE];
            }
        }
            break;
        case UC_ETIKETTA4: {
            if ("Sollmaterial_Artikelnummer".equals(fieldName)) {
                value = data[index][ETI_A4_SOLLMATERIAL_ARTIKELNUMMER];
            } else if ("Sollmaterial_Bezeichnung".equals(fieldName)) {
                value = data[index][ETI_A4_SOLLMATERIAL_BEZEICHNUNG];
            } else if ("Sollmaterial_Kurzbezeichnung".equals(fieldName)) {
                value = data[index][ETI_A4_SOLLMATERIAL_KURZBEZEICHNUNG];
            } else if ("Sollmaterial_Zusatzbezeichnung".equals(fieldName)) {
                value = data[index][ETI_A4_SOLLMATERIAL_ZUSATZBEZEICHNUNG];
            } else if ("Sollmaterial_Zusatzbezeichnung2".equals(fieldName)) {
                value = data[index][ETI_A4_SOLLMATERIAL_ZUSATZBEZEICHNUNG2];
            } else if ("Sollmaterial_Einheit".equals(fieldName)) {
                value = data[index][ETI_A4_SOLLMATERIAL_EINHEIT];
            } else if ("Sollmaterial_Referenznummer".equals(fieldName)) {
                value = data[index][ETI_A4_SOLLMATERIAL_REFERENZNUMMER];
            } else if ("Sollmaterial_Istmenge".equals(fieldName)) {
                value = data[index][ETI_A4_SOLLMATERIAL_ISTMENGE];
            } else if ("Sollmaterial_Sollmenge".equals(fieldName)) {
                value = data[index][ETI_A4_SOLLMATERIAL_SOLLMENGE];
            } else if ("Losnummer".equals(fieldName)) {
                value = data[index][ETI_A4_LOSNUMMER];
            } else if ("Auftrag".equals(fieldName)) {
                value = data[index][ETI_A4_AUFTRAG];
            } else if ("Rohs".equals(fieldName)) {
                value = data[index][ETI_A4_ROHS];
            } else if ("Kunde_Anrede".equals(fieldName)) {
                value = data[index][ETI_A4_KUNDE_ANREDE];
            } else if ("Kunde_Abteilung".equals(fieldName)) {
                value = data[index][ETI_A4_KUNDE_ABTEILUNG];
            } else if ("Kunde_LandPlzOrt".equals(fieldName)) {
                value = data[index][ETI_A4_KUNDE_LANDPLZORT];
            } else if ("Auftragsposition".equals(fieldName)) {
                value = data[index][ETI_A4_AUFTRAGSPOSITION];
            } else if ("Kostenstellennummer".equals(fieldName)) {
                value = data[index][ETI_A4_KOSTENSTELLENNUMMER];
            } else if ("Kostenstellenbezeichnung".equals(fieldName)) {
                value = data[index][ETI_A4_KOSTENSTELLENBEZEICHNUNG];
            } else if ("Losart".equals(fieldName)) {
                value = data[index][ETI_A4_LOSART];
            } else if ("Stuecklistennummer".equals(fieldName)) {
                value = data[index][ETI_A4_STUECKLISTENNUMMER];
            } else if ("Stuecklistenbezeichnung".equals(fieldName)) {
                value = data[index][ETI_A4_STUECKLISTENBEZEICHNUNG];
            } else if ("Stuecklistenzusatzbezeichnung".equals(fieldName)) {
                value = data[index][ETI_A4_STUECKLISTEZUSATZBEZEICHNUNG];
            } else if ("Stuecklistenkurzbezeichnung".equals(fieldName)) {
                value = data[index][ETI_A4_STUECKLISTEKURZBEZEICHNUNG];
            } else if ("Stuecklistenreferenznummer".equals(fieldName)) {
                value = data[index][ETI_A4_STUECKLISTEREFERENZNUMMER];
            } else if ("Stuecklisteneinheit".equals(fieldName)) {
                value = data[index][ETI_A4_STUECKLISTEMENGENEINHEIT];
            } else if ("Losgroesse".equals(fieldName)) {
                value = data[index][ETI_A4_LOSGROESSE];
            } else if ("Lager".equals(fieldName)) {
                value = data[index][ETI_A4_LAGER];
            } else if ("Beginn".equals(fieldName)) {
                value = data[index][ETI_A4_BEGINN];
            } else if ("Ende".equals(fieldName)) {
                value = data[index][ETI_A4_ENDE];
            } else if ("Dauer".equals(fieldName)) {
                value = data[index][ETI_A4_DAUER];
            } else if ("Technikernummer".equals(fieldName)) {
                value = data[index][ETI_A4_TECHNIKERNUMMER];
            } else if ("Technikername".equals(fieldName)) {
                value = data[index][ETI_A4_TECHNIKERNAME];
            } else if ("Projekt".equals(fieldName)) {
                value = data[index][ETI_A4_PROJEKT];
            } else if ("Kommentar".equals(fieldName)) {
                value = data[index][ETI_A4_KOMMENTAR];
            } else if ("Fertigungsgruppe".equals(fieldName)) {
                value = data[index][ETI_A4_FERTIGUNGSGRUPPE];
            } else if ("Fertigungsort".equals(fieldName)) {
                value = data[index][ETI_A4_FERTIGUNGSORT];
            } else if ("Text".equals(fieldName)) {
                value = data[index][ETI_A4_TEXT];
            } else if ("Exemplar".equals(fieldName)) {
                value = data[index][ETI_A4_EXEMPLAR];
            }
        }
            break;
        }

        return value;
    }

    public JasperPrintLP printTheoretischeFehlmengen(Integer losIId, TheClientDto theClientDto)
            throws EJBExceptionLP {
        Session session = null;
        try {
            this.useCase = UC_THEORETISCHE_FEHLMENGEN;
            this.index = -1;
            // Los holen und status pruefen
            LosDto losDto = getFertigungFac().losFindByPrimaryKey(losIId);
            if (losDto.getStatusCNr().equals(FertigungFac.STATUS_ERLEDIGT)) {
                throw new EJBExceptionLP(EJBExceptionLP.FEHLER_FERTIGUNG_DAS_LOS_IST_BEREITS_ERLEDIGT, "");
            }
            SessionFactory factory = FLRSessionFactory.getFactory();
            session = factory.openSession();
            Criteria c = session.createCriteria(FLRLossollmaterial.class);
            c.add(Restrictions.eq(FertigungFac.FLR_LOSSOLLMATERIAL_LOS_I_ID, losIId));
            // Sortierung nach Artikelnummer

            c.createAlias(FertigungFac.FLR_LOSSOLLMATERIAL_FLRARTIKEL, "a").addOrder(Order.asc("a.c_nr"));
            List<?> list = c.list();
            // Laeger holen
            LoslagerentnahmeDto[] laeger = getFertigungFac().loslagerentnahmeFindByLosIId(losIId);
            // positionen verdichten
            ArrayList<ReportTheoretischeFehlmengenDto> listVerdichtet = new ArrayList<ReportTheoretischeFehlmengenDto>();
            for (Iterator<?> iter = list.iterator(); iter.hasNext();) {
                FLRLossollmaterial mat = (FLRLossollmaterial) iter.next();

                LossollmaterialDto[] lossollmaterialDtoErsatztypen = getFertigungFac()
                        .lossollmaterialFindByLossollmaterialIIdOriginal(mat.getI_id());

                boolean bBereitsZugeordnet = false;
                for (int i = 0; i < listVerdichtet.size(); i++) {
                    ReportTheoretischeFehlmengenDto temp = listVerdichtet.get(i);

                    if (temp.getArtikelIId().equals(mat.getFlrartikel().getI_id())) {
                        if (temp.getErsatztypen() != null && temp.getErsatztypen().length > 0) {
                            // nicht verdichten
                            break;
                        } else {
                            if (lossollmaterialDtoErsatztypen != null && lossollmaterialDtoErsatztypen.length > 0) {
                                // nicht verdichten
                                break;
                            } else if (mat.getLossollmaterial_i_id_original() != null
                                    || temp.getArtikelIIdOriginal() != null) {
                                // nicht verdichten
                                break;
                            } else {
                                // verdichten
                                temp.addiereZuMenge(mat.getN_menge());
                                temp.addiereZuAusgegebenerMenge(
                                        getFertigungFac().getAusgegebeneMenge(mat.getI_id(), null, theClientDto));
                                bBereitsZugeordnet = true;
                                break;
                            }
                        }
                    }

                }
                if (bBereitsZugeordnet == false) {
                    ReportTheoretischeFehlmengenDto dto = new ReportTheoretischeFehlmengenDto(
                            mat.getFlrartikel().getI_id());
                    dto.setErsatztypen(lossollmaterialDtoErsatztypen);
                    dto.addiereZuMenge(mat.getN_menge());
                    dto.addiereZuAusgegebenerMenge(
                            getFertigungFac().getAusgegebeneMenge(mat.getI_id(), null, theClientDto));
                    if (mat.getLossollmaterial_i_id_original() != null) {
                        LossollmaterialDto sollmatDto = getFertigungFac()
                                .lossollmaterialFindByPrimaryKey(mat.getLossollmaterial_i_id_original());
                        dto.setArtikelIIdOriginal(sollmatDto.getArtikelIId());
                    }
                    listVerdichtet.add(dto);
                }

            }
            data = new Object[listVerdichtet.size()][TF_SPALTENANZAHL];
            for (int i = 0; i < listVerdichtet.size(); i++) {
                ReportTheoretischeFehlmengenDto item = (ReportTheoretischeFehlmengenDto) listVerdichtet.get(i);

                Integer artikelIId = item.getArtikelIId();

                if (item.getArtikelIIdOriginal() != null) {
                    ArtikelDto artikelDto = getArtikelFac()
                            .artikelFindByPrimaryKeySmall(item.getArtikelIIdOriginal(), theClientDto);
                    data[i][TF_IDENT] = artikelDto.getCNr();
                    data[i][TF_BEZEICHNUNG] = artikelDto.getArtikelsprDto().getCBez();
                    ArtikelDto artikelDtoErsatz = getArtikelFac().artikelFindByPrimaryKeySmall(item.getArtikelIId(),
                            theClientDto);
                    data[i][TF_ERSATZIDENT] = artikelDtoErsatz.getCNr();
                    data[i][TF_ERSATZBEZEICHNUNG] = artikelDtoErsatz.getArtikelsprDto().getCBez();
                    data[i][TF_ZUSATZBEZEICHNUNG] = artikelDto.getArtikelsprDto().getCZbez();
                    artikelIId = item.getArtikelIId();
                } else {
                    ArtikelDto artikelDto = getArtikelFac().artikelFindByPrimaryKeySmall(item.getArtikelIId(),
                            theClientDto);
                    data[i][TF_IDENT] = artikelDto.getCNr();
                    data[i][TF_BEZEICHNUNG] = artikelDto.getArtikelsprDto().getCBez();
                    data[i][TF_ERSATZIDENT] = "";
                    data[i][TF_ZUSATZBEZEICHNUNG] = artikelDto.getArtikelsprDto().getCZbez();
                }

                data[i][TF_SOLLMENGE] = item.getMenge();

                data[i][TF_ISTMENGE] = item.getBdAusgegebeneMenge();

                try {
                    data[i][TF_ARTIKELSPERREN] = getArtikelFac().getArtikelsperrenText(artikelIId);
                } catch (RemoteException e) {
                    throwEJBExceptionLPRespectOld(e);
                }

                BigDecimal bdLagerstand = new BigDecimal(0);
                for (int j = 0; j < laeger.length; j++) {
                    bdLagerstand = bdLagerstand.add(
                            getLagerFac().getLagerstandOhneExc(artikelIId, laeger[j].getLagerIId(), theClientDto));
                }
                BigDecimal bdFehlmenge = getFehlmengeFac().getAnzahlFehlmengeEinesArtikels(artikelIId,
                        theClientDto);
                BigDecimal bdReserviert = getReservierungFac().getAnzahlReservierungen(artikelIId, theClientDto);
                BigDecimal bdVerfuegbar = bdLagerstand.subtract(bdFehlmenge).subtract(bdReserviert);
                // die Reservierungen auf diesem Los darf ich nicht
                // beruecksichtigen
                BigDecimal bdFehlmengeTheoretisch;
                Integer iMoeglich;
                // wenn der lagerstand >= als die sollmenge -> th.fehlmenge=0
                if (bdLagerstand.add(item.getBdAusgegebeneMenge()).compareTo(item.getMenge()) >= 0) {
                    bdFehlmengeTheoretisch = new BigDecimal(0);
                    iMoeglich = new Integer(losDto.getNLosgroesse().intValue());
                } else {
                    bdFehlmengeTheoretisch = item.getMenge()
                            .subtract(bdLagerstand.add(item.getBdAusgegebeneMenge()));
                    BigDecimal bdMoeglich = bdLagerstand.add(item.getBdAusgegebeneMenge())
                            .multiply(losDto.getNLosgroesse()).divide(item.getMenge(), 0, BigDecimal.ROUND_DOWN);
                    iMoeglich = new Integer(bdMoeglich.intValue());
                }
                data[i][TF_VERFUEGBAR] = bdVerfuegbar;
                data[i][TF_LAGERSTAND] = bdLagerstand; // zum testen
                data[i][TF_FEHLMENGE] = bdFehlmengeTheoretisch;
                data[i][TF_BESTELLT] = getArtikelbestelltFac().getAnzahlBestellt(artikelIId);
                data[i][TF_MOEGLICH] = iMoeglich;

                // Verfuegbarkeit bis zum Produktionsstart
                // PJ 14249
                // Fehlmengen
                Session sessionFehlmengen = FLRSessionFactory.getFactory().openSession();

                String query = "SELECT SUM(f.n_menge) FROM FLRFehlmenge AS f WHERE f.artikel_i_id=" + artikelIId
                        + " AND f.t_liefertermin<='" + Helper.formatDateWithSlashes(losDto.getTProduktionsbeginn())
                        + "'" + " AND f.flrlossollmaterial.flrlos.c_nr<'" + losDto.getCNr() + "'";
                Query qResult = sessionFehlmengen.createQuery(query);
                List<?> results = qResult.list();
                BigDecimal bdfehlmengenZumTermin = new BigDecimal(0);
                Iterator<?> resultListIterator = results.iterator();
                if (resultListIterator.hasNext()) {
                    BigDecimal bd = (BigDecimal) resultListIterator.next();
                    if (bd != null) {
                        bdfehlmengenZumTermin = bd;
                    }
                }

                sessionFehlmengen.close();
                // Reservierungen

                Session sessionReservierungen = FLRSessionFactory.getFactory().openSession();
                BigDecimal reservierungen = new BigDecimal(0);
                query = "SELECT r FROM FLRArtikelreservierung AS r WHERE r.flrartikel.i_id=" + artikelIId;
                qResult = sessionReservierungen.createQuery(query);

                results = qResult.list();

                resultListIterator = results.iterator();
                while (resultListIterator.hasNext()) {
                    FLRArtikelreservierung flrArtikelreservierung = (FLRArtikelreservierung) resultListIterator
                            .next();

                    if (Helper.cutTimestamp(flrArtikelreservierung.getT_liefertermin()).getTime() <= losDto
                            .getTProduktionsbeginn().getTime()) {
                        {

                        }

                        if (flrArtikelreservierung.getC_belegartnr().equals(LocaleFac.BELEGART_LOS)) {

                            LossollmaterialDto sollmatDto = getFertigungFac()
                                    .lossollmaterialFindByPrimaryKeyOhneExc(
                                            flrArtikelreservierung.getI_belegartpositionid());

                            if (sollmatDto != null) {
                                LosDto losvonreservierungDto = getFertigungFac()
                                        .losFindByPrimaryKey(sollmatDto.getLosIId());

                                if (losvonreservierungDto.getCNr().compareTo(losDto.getCNr()) < 0) {
                                    reservierungen = reservierungen.add(flrArtikelreservierung.getN_menge());
                                } else {
                                    continue;
                                }

                            }

                        }
                    }

                }

                sessionReservierungen.close();

                data[i][TF_VERFUEGBARZUMPRODUKTIONSSTART] = bdLagerstand.subtract(bdfehlmengenZumTermin)
                        .subtract(reservierungen);

            }

            // Sortieren nach Artikel und dann nach ersatzartikel

            for (int k = data.length - 1; k > 0; --k) {
                for (int j = 0; j < k; ++j) {
                    Object[] a1 = (Object[]) data[j];
                    Object[] a2 = (Object[]) data[j + 1];

                    if (((String) a1[TF_IDENT]).compareTo((String) a2[TF_IDENT]) > 0) {
                        data[j] = a2;
                        data[j + 1] = a1;
                    } else if (((String) a1[TF_IDENT]).compareTo((String) a2[TF_IDENT]) == 0) {
                        String k1 = (String) a1[TF_ERSATZIDENT];
                        String k2 = (String) a2[TF_ERSATZIDENT];

                        if (k1.compareTo(k2) > 0) {
                            data[j] = a2;
                            data[j + 1] = a1;
                        }
                    }
                }
            }

            Map<String, Object> mapParameter = new TreeMap<String, Object>();
            mapParameter.put("P_ANGELEGT", new java.util.Date(losDto.getTAnlegen().getTime()));
            String sAuftragsnummer;
            String sKunde;
            if (losDto.getAuftragIId() != null) {
                AuftragDto auftragDto = getAuftragFac().auftragFindByPrimaryKey(losDto.getAuftragIId());
                sAuftragsnummer = auftragDto.getCNr();
                KundeDto kundeDto = getKundeFac().kundeFindByPrimaryKey(auftragDto.getKundeIIdAuftragsadresse(),
                        theClientDto);
                sKunde = kundeDto.getPartnerDto().getCName1nachnamefirmazeile1();
            } else {
                sAuftragsnummer = "";
                sKunde = "";
            }
            mapParameter.put("P_AUFTRAGNUMMER", sAuftragsnummer);
            KostenstelleDto kstDto = getSystemFac().kostenstelleFindByPrimaryKey(losDto.getKostenstelleIId());
            mapParameter.put("P_KOSTENSTELLENUMMER", kstDto.getCNr());
            mapParameter.put("P_KUNDE", sKunde);
            mapParameter.put("P_LOSGROESSE", losDto.getNLosgroesse());
            mapParameter.put("P_LOSNUMMER", losDto.getCNr());
            mapParameter.put("P_PRODUKTIONSBEGINN", losDto.getTProduktionsbeginn());
            String sMengenEinheit = null;
            // Materialliste?
            if (losDto.getStuecklisteIId() != null) {
                StuecklisteDto stkDto = getStuecklisteFac().stuecklisteFindByPrimaryKey(losDto.getStuecklisteIId(),
                        theClientDto);
                // Einheit
                if (stkDto.getArtikelDto() != null) {
                    if (stkDto.getArtikelDto().getEinheitCNr() != null) {
                        sMengenEinheit = stkDto.getArtikelDto().getEinheitCNr();
                    }
                }
                mapParameter.put("P_STUECKLISTEBEZEICHNUNG", stkDto.getArtikelDto().getArtikelsprDto().getCBez());
                mapParameter.put("P_STUECKLISTEZUSATZBEZEICHNUNG",
                        stkDto.getArtikelDto().getArtikelsprDto().getCZbez());
                mapParameter.put("P_STUECKLISTENUMMER", stkDto.getArtikelDto().getCNr());
            } else {
                mapParameter.put("P_STUECKLISTEBEZEICHNUNG", losDto.getCProjekt());
                mapParameter.put("P_STUECKLISTENUMMER", getTextRespectUISpr("fert.materialliste",
                        theClientDto.getMandant(), theClientDto.getLocUi()));
            }
            mapParameter.put("P_MENGENEINHEIT", sMengenEinheit);
            ArrayList<Object> images = new ArrayList<Object>();
            String sLosStuecklisteArtikelKommentar = "";
            // Bild einfuegen
            if (losDto.getStuecklisteIId() != null) {
                StuecklisteDto stuecklisteDto = getStuecklisteFac()
                        .stuecklisteFindByPrimaryKey(losDto.getStuecklisteIId(), theClientDto);
                ArtikelkommentarDto[] artikelkommentarDto = getArtikelkommentarFac()
                        .artikelkommentardruckFindByArtikelIIdBelegartCNr(stuecklisteDto.getArtikelIId(),
                                LocaleFac.BELEGART_LOS, theClientDto.getLocUiAsString(), theClientDto);

                if (artikelkommentarDto != null && artikelkommentarDto.length > 0) {

                    for (int j = 0; j < artikelkommentarDto.length; j++) {
                        if (artikelkommentarDto[j].getArtikelkommentarsprDto() != null) {
                            // Text Kommentar
                            if (artikelkommentarDto[j].getDatenformatCNr().trim()
                                    .indexOf(MediaFac.DATENFORMAT_MIMETYPEART_TEXT) != -1) {
                                if (sLosStuecklisteArtikelKommentar == "") {
                                    sLosStuecklisteArtikelKommentar += artikelkommentarDto[j]
                                            .getArtikelkommentarsprDto().getXKommentar();
                                } else {
                                    sLosStuecklisteArtikelKommentar += "\n"
                                            + artikelkommentarDto[j].getArtikelkommentarsprDto().getXKommentar();
                                }
                            } else if (artikelkommentarDto[j].getDatenformatCNr()
                                    .equals(MediaFac.DATENFORMAT_MIMETYPE_IMAGE_JPEG)
                                    || artikelkommentarDto[j].getDatenformatCNr()
                                            .equals(MediaFac.DATENFORMAT_MIMETYPE_IMAGE_PNG)
                                    || artikelkommentarDto[j].getDatenformatCNr()
                                            .equals(MediaFac.DATENFORMAT_MIMETYPE_IMAGE_GIF)) {
                                byte[] bild = artikelkommentarDto[j].getArtikelkommentarsprDto().getOMedia();
                                if (bild != null) {
                                    java.awt.Image myImage = Helper.byteArrayToImage(bild);
                                    images.add(myImage);
                                }
                            } else if (artikelkommentarDto[j].getDatenformatCNr()
                                    .equals(MediaFac.DATENFORMAT_MIMETYPE_IMAGE_TIFF)) {

                                byte[] bild = artikelkommentarDto[j].getArtikelkommentarsprDto().getOMedia();

                                java.awt.Image[] tiffs = Helper.tiffToImageArray(bild);
                                if (tiffs != null) {
                                    for (int k = 0; k < tiffs.length; k++) {
                                        images.add(tiffs[k]);
                                    }
                                }

                            }
                        }
                    }
                }
            }
            if (sLosStuecklisteArtikelKommentar != "") {
                mapParameter.put("P_STUECKLISTEARTIKELKOMMENTAR",
                        Helper.formatStyledTextForJasper(sLosStuecklisteArtikelKommentar));
            }

            super.initJRDS(mapParameter, FertigungReportFac.REPORT_MODUL,
                    FertigungReportFac.REPORT_THEORETISCHE_FEHLMENGEN, theClientDto.getMandant(),
                    theClientDto.getLocUi(), theClientDto);
            JasperPrintLP print = getReportPrint();
            Integer cachedReportvariante = theClientDto.getReportvarianteIId();
            if (images != null) {
                for (int k = 0; k < images.size(); k++) {
                    mapParameter = new HashMap<String, Object>();
                    mapParameter.put("P_BILD", images.get(k));
                    this.useCase = UC_GANZSEITIGESBILD;
                    this.index = -1;
                    data = new Object[1][1];
                    data[0][0] = images.get(k);
                    theClientDto.setReportvarianteIId(cachedReportvariante);
                    initJRDS(mapParameter, REPORT_MODUL_ALLGEMEIN, REPORT_GANZSEITIGESBILD,
                            theClientDto.getMandant(), theClientDto.getLocUi(), theClientDto);
                    print = Helper.addReport2Report(print, getReportPrint().getPrint());
                }
            }
            return print;
        } catch (Exception t) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER, t);
        } finally {
            closeSession(session);
        }
    }

    public JasperPrintLP printLosEtikett(Integer losIId, BigDecimal bdMenge, String sKommentar,
            boolean bMitInhalten, Integer iExemplare, TheClientDto theClientDto)
            throws RemoteException, EJBExceptionLP {
        // TODO SK
        // Je nach bMitInhalten Inhalte mitdrucken oder nicht.
        // Inhalte drucken = getDataAusgabeliste(lodDto[0])
        // Inhalte nicht drucken = getDataAusgabeliste(losDto)
        // Paramerter mit gerParameter holen
        Map<String, Object> parameter = new TreeMap<String, Object>();
        this.useCase = UC_ETIKETT;
        this.index = -1;
        data = new Object[1][1];
        data[0][0] = "";
        parameter.put("P_ZUSATZKOMMENTAR", sKommentar);
        parameter.put("P_MITINHALT", new Boolean(bMitInhalten));
        parameter.put("P_MENGE", bdMenge);
        LosDto losDto = getFertigungFac().losFindByPrimaryKey(losIId);
        // parameter = getParameterAusgabeliste(losDto,"",theClientDto);
        if (losDto != null) {
            parameter.put("P_CNR", losDto.getCNr());
            if (losDto.getAuftragIId() != null) {
                AuftragDto auftragDto = getAuftragFac().auftragFindByPrimaryKey(losDto.getAuftragIId());
                if (auftragDto != null) {
                    parameter.put("P_AUFTRAG", auftragDto.getCNr());
                    parameter.put("P_ROHS", Helper.short2Boolean(auftragDto.getBRoHs()));
                    if (auftragDto.getKundeIIdAuftragsadresse() != null) {
                        KundeDto kundeDto = getKundeFac()
                                .kundeFindByPrimaryKey(auftragDto.getKundeIIdAuftragsadresse(), theClientDto);
                        if (kundeDto != null) {
                            if (kundeDto.getPartnerDto() != null) {
                                parameter.put("P_KUNDE_ANREDE",
                                        kundeDto.getPartnerDto().formatFixTitelName1Name2());
                                parameter.put("P_KUNDE_ABTEILUNG",
                                        kundeDto.getPartnerDto().getCName3vorname2abteilung());
                            }
                            if (kundeDto.getPartnerDto().getLandplzortDto() == null) {
                                if (kundeDto.getPartnerDto().getLandplzortIId() != null) {
                                    LandplzortDto lpoDto = getSystemFac().landplzortFindByPrimaryKey(
                                            kundeDto.getPartnerDto().getLandplzortIId());
                                    kundeDto.getPartnerDto().setLandplzortDto(lpoDto);
                                }
                            }
                            if (kundeDto.getPartnerDto().getLandplzortDto() != null) {
                                parameter.put("P_KUNDE_LANDPLZORT",
                                        kundeDto.getPartnerDto().getLandplzortDto().formatLandPlzOrt());
                            }
                        }
                    }
                }
            }
            if (losDto.getAuftragpositionIId() != null) {
                AuftragpositionDto auftragposDto = getAuftragpositionFac()
                        .auftragpositionFindByPrimaryKey(losDto.getAuftragpositionIId());
                if (auftragposDto != null) {
                    parameter.put("P_AUFTRAGPOSITION", auftragposDto.getISort());
                }
            }
            if (losDto.getKostenstelleIId() != null) {
                KostenstelleDto kostDto = getSystemFac().kostenstelleFindByPrimaryKey(losDto.getKostenstelleIId());
                if (kostDto != null) {
                    parameter.put("P_KOSTENSTELLENNUMMER", kostDto.getCNr());
                    parameter.put("P_KOSTENSTELLENBEZEICHNUNG", kostDto.getCBez());
                }
            }
            if (losDto.getStuecklisteIId() != null) {
                parameter.put("P_LOSART", FertigungFac.LOSART_IDENT);
                StuecklisteDto stuecklisteDto = getStuecklisteFac()
                        .stuecklisteFindByPrimaryKey(losDto.getStuecklisteIId(), theClientDto);
                if (stuecklisteDto != null) {
                    if (stuecklisteDto.getArtikelDto() == null) {
                        ArtikelDto artikelDto = getArtikelFac()
                                .artikelFindByPrimaryKey(stuecklisteDto.getArtikelIId(), theClientDto);
                        stuecklisteDto.setArtikelDto(artikelDto);
                    }
                    // Nochmal abfragen falls Artikel nicht gefunden wurde
                    if (stuecklisteDto.getArtikelDto() != null) {
                        parameter.put("P_STUECKLISTENNUMMER", stuecklisteDto.getArtikelDto().getCNr());
                        if (stuecklisteDto.getArtikelDto().getArtikelsprDto() == null) {
                            ArtikelsprDto artikelsprDto = getArtikelFac()
                                    .artikelsprFindByArtikelIIdLocaleCNrOhneExc(stuecklisteDto.getArtikelIId(),
                                            theClientDto.getLocUiAsString(), theClientDto);
                            stuecklisteDto.getArtikelDto().setArtikelsprDto(artikelsprDto);
                        }
                        if (stuecklisteDto.getArtikelDto().getArtikelsprDto() != null) {
                            parameter.put("P_STUECKLISTENBEZEICHNUNG",
                                    stuecklisteDto.getArtikelDto().getArtikelsprDto().getCBez());
                            parameter.put("P_ARTIKELZUSATZBEZEICHNUNG",
                                    stuecklisteDto.getArtikelDto().getArtikelsprDto().getCZbez());
                            parameter.put("P_ARTIKELKURZBEZEICHNUNG",
                                    stuecklisteDto.getArtikelDto().getArtikelsprDto().getCKbez());
                        }

                        parameter.put("P_STUECKLISTEREFERENZNUMMER",
                                stuecklisteDto.getArtikelDto().getCReferenznr());
                        parameter.put("P_STUECKLISTEMENGENEINHEIT", stuecklisteDto.getArtikelDto().getEinheitCNr());
                    }
                }
            } else {
                parameter.put("P_LOSART", FertigungFac.LOSART_MATERIALLISTE);
            }
            parameter.put("P_LOSGROESSE", losDto.getNLosgroesse());
            if (losDto.getLagerIIdZiel() != null) {
                LagerDto lagerDto = getLagerFac().lagerFindByPrimaryKey(losDto.getLagerIIdZiel());
                if (lagerDto != null) {
                    parameter.put("P_LAGER", lagerDto.getCNr());
                }
            }
            Date dBegin = losDto.getTProduktionsbeginn();
            Date dEnde = losDto.getTProduktionsende();
            parameter.put("P_BEGINN", dBegin);
            parameter.put("P_ENDE", dEnde);
            if ((dEnde != null) && (dBegin != null)) {
                parameter.put("P_DAUER", new Integer(Helper.getDifferenzInTagen(dBegin, dEnde)));
            }
            if (losDto.getPersonalIIdTechniker() != null) {
                PersonalDto personalDto = getPersonalFac()
                        .personalFindByPrimaryKey(losDto.getPersonalIIdTechniker(), theClientDto);
                if (personalDto != null) {
                    parameter.put("P_TECHNIKERNUMMER", personalDto.getCPersonalnr());
                    parameter.put("P_TECHNIKERNAME", personalDto.formatFixUFTitelName2Name1());
                }
            }
            parameter.put("P_PROJEKT", losDto.getCProjekt());
            parameter.put("P_KOMMENTAR", losDto.getCKommentar());
            if (losDto.getFertigungsgruppeIId() != null) {
                FertigungsgruppeDto fertDto = getStuecklisteFac()
                        .fertigungsgruppeFindByPrimaryKey(losDto.getFertigungsgruppeIId());
                if (fertDto != null) {
                    parameter.put("P_FERTIGUNGSGRUPPE", fertDto.getCBez());
                }
            }
            if (losDto.getPartnerIIdFertigungsort() != null) {
                PartnerDto partnerDto = getPartnerFac()
                        .partnerFindByPrimaryKeyOhneExc(losDto.getPartnerIIdFertigungsort(), theClientDto);
                if (partnerDto != null) {
                    parameter.put("P_FERTIGUNGSORT", partnerDto.formatTitelAnrede());
                }
            }
            parameter.put("P_TEXT", losDto.getXText());

            // Inhalt
            LossollmaterialDto[] sollmaterialDtos = getFertigungFac()
                    .lossollmaterialFindByLosIIdOrderByISort(losIId);

            data = new Object[sollmaterialDtos.length][ETI_ANZAHL_FELDER];

            for (int i = 0; i < sollmaterialDtos.length; i++) {
                data[i][ETI_SOLLMENGE] = sollmaterialDtos[i].getNMenge();
                data[i][ETI_ISTMENGE] = getFertigungFac().getAusgegebeneMenge(sollmaterialDtos[i].getIId(), null,
                        theClientDto);

                ArtikelDto artikelDto = getArtikelFac()
                        .artikelFindByPrimaryKeySmall(sollmaterialDtos[i].getArtikelIId(), theClientDto);

                data[i][ETI_ARTIKELNUMMER] = artikelDto.getCNr();
                if (artikelDto.getArtikelsprDto() != null) {
                    data[i][ETI_BEZEICHNUNG] = artikelDto.getArtikelsprDto().getCBez();
                    data[i][ETI_KURZBEZEICHNUNG] = artikelDto.getArtikelsprDto().getCKbez();
                    data[i][ETI_ZUSATZBEZEICHNUNG] = artikelDto.getArtikelsprDto().getCZbez();
                    data[i][ETI_ZUSATZBEZEICHNUNG2] = artikelDto.getArtikelsprDto().getCZbez2();
                }

                data[i][ETI_EINHEIT] = artikelDto.getEinheitCNr();
                data[i][ETI_REFERENZNUMMER] = artikelDto.getCReferenznr();

            }

        }

        JasperPrintLP print = null;
        Integer varianteIId = theClientDto.getReportvarianteIId();
        for (int i = 0; i < iExemplare; i++) {

            parameter.put("P_EXEMPLAR", new Integer(i + 1));
            parameter.put("P_EXEMPLAREGESAMT", iExemplare);
            theClientDto.setReportvarianteIId(varianteIId);
            if (print != null) {
                initJRDS(parameter, FertigungReportFac.REPORT_MODUL, FertigungReportFac.REPORT_LOSETIKETT1,
                        theClientDto.getMandant(), theClientDto.getLocUi(), theClientDto);

                print = Helper.addReport2Report(print, getReportPrint().getPrint());
            } else {
                initJRDS(parameter, FertigungReportFac.REPORT_MODUL, FertigungReportFac.REPORT_LOSETIKETT1,
                        theClientDto.getMandant(), theClientDto.getLocUi(), theClientDto);

                print = getReportPrint();
            }

        }

        return print;

    }

    public JasperPrintLP printLosEtikettA4(Integer losIId, BigDecimal bdMenge, String sKommentar,
            boolean bMitInhalten, Integer iExemplare, TheClientDto theClientDto) throws RemoteException {
        // TODO SK
        // Je nach bMitInhalten Inhalte mitdrucken oder nicht.
        // Inhalte drucken = getDataAusgabeliste(lodDto[0])
        // Inhalte nicht drucken = getDataAusgabeliste(losDto)
        // Paramerter mit gerParameter holen
        Map<String, Object> parameter = new TreeMap<String, Object>();
        this.useCase = UC_ETIKETTA4;
        this.index = -1;

        ArrayList alDaten = new ArrayList();

        parameter.put("P_ZUSATZKOMMENTAR", sKommentar);
        parameter.put("P_MITINHALT", new Boolean(bMitInhalten));
        parameter.put("P_MENGE", bdMenge);
        parameter.put("P_EXEMPLAREGESAMT", iExemplare);

        LosDto losDto = getFertigungFac().losFindByPrimaryKey(losIId);
        // parameter = getParameterAusgabeliste(losDto,"",theClientDto);
        if (losDto != null) {
            for (int ex = 0; ex < iExemplare; ex++) {

                Object[] zeile = new Object[ETI_A4_ANZAHL_FELDER];

                zeile[ETI_A4_LOSNUMMER] = losDto.getCNr();
                zeile[ETI_A4_EXEMPLAR] = ex + 1;

                if (losDto.getAuftragIId() != null) {

                    AuftragDto auftragDto = getAuftragFac().auftragFindByPrimaryKey(losDto.getAuftragIId());
                    if (auftragDto != null) {

                        zeile[ETI_A4_AUFTRAG] = auftragDto.getCNr();
                        zeile[ETI_A4_ROHS] = Helper.short2Boolean(auftragDto.getBRoHs());

                        if (auftragDto.getKundeIIdAuftragsadresse() != null) {
                            KundeDto kundeDto = getKundeFac()
                                    .kundeFindByPrimaryKey(auftragDto.getKundeIIdAuftragsadresse(), theClientDto);
                            if (kundeDto != null) {
                                if (kundeDto.getPartnerDto() != null) {

                                    zeile[ETI_A4_KUNDE_ABTEILUNG] = kundeDto.getPartnerDto()
                                            .getCName3vorname2abteilung();
                                    zeile[ETI_A4_KUNDE_ANREDE] = kundeDto.getPartnerDto()
                                            .formatFixTitelName1Name2();

                                }
                                if (kundeDto.getPartnerDto().getLandplzortDto() == null) {
                                    if (kundeDto.getPartnerDto().getLandplzortIId() != null) {
                                        LandplzortDto lpoDto = getSystemFac().landplzortFindByPrimaryKey(
                                                kundeDto.getPartnerDto().getLandplzortIId());
                                        kundeDto.getPartnerDto().setLandplzortDto(lpoDto);
                                    }
                                }
                                if (kundeDto.getPartnerDto().getLandplzortDto() != null) {
                                    zeile[ETI_A4_KUNDE_LANDPLZORT] = kundeDto.getPartnerDto().getLandplzortDto()
                                            .formatLandPlzOrt();

                                }
                            }
                        }
                    }
                }
                if (losDto.getAuftragpositionIId() != null) {
                    AuftragpositionDto auftragposDto = getAuftragpositionFac()
                            .auftragpositionFindByPrimaryKey(losDto.getAuftragpositionIId());
                    if (auftragposDto != null) {

                        zeile[ETI_A4_AUFTRAGSPOSITION] = auftragposDto.getISort();

                    }
                }
                if (losDto.getKostenstelleIId() != null) {
                    KostenstelleDto kostDto = getSystemFac()
                            .kostenstelleFindByPrimaryKey(losDto.getKostenstelleIId());
                    if (kostDto != null) {

                        zeile[ETI_A4_KOSTENSTELLENNUMMER] = kostDto.getCNr();
                        zeile[ETI_A4_KOSTENSTELLENBEZEICHNUNG] = kostDto.getCBez();

                    }
                }
                if (losDto.getStuecklisteIId() != null) {

                    zeile[ETI_A4_LOSART] = FertigungFac.LOSART_IDENT;

                    StuecklisteDto stuecklisteDto = getStuecklisteFac()
                            .stuecklisteFindByPrimaryKey(losDto.getStuecklisteIId(), theClientDto);
                    if (stuecklisteDto != null) {
                        if (stuecklisteDto.getArtikelDto() == null) {
                            ArtikelDto artikelDto = getArtikelFac()
                                    .artikelFindByPrimaryKey(stuecklisteDto.getArtikelIId(), theClientDto);
                            stuecklisteDto.setArtikelDto(artikelDto);
                        }
                        // Nochmal abfragen falls Artikel nicht gefunden wurde
                        if (stuecklisteDto.getArtikelDto() != null) {

                            zeile[ETI_A4_STUECKLISTENNUMMER] = stuecklisteDto.getArtikelDto().getCNr();
                            if (stuecklisteDto.getArtikelDto().getArtikelsprDto() == null) {
                                ArtikelsprDto artikelsprDto = getArtikelFac()
                                        .artikelsprFindByArtikelIIdLocaleCNrOhneExc(stuecklisteDto.getArtikelIId(),
                                                theClientDto.getLocUiAsString(), theClientDto);
                                stuecklisteDto.getArtikelDto().setArtikelsprDto(artikelsprDto);
                            }
                            if (stuecklisteDto.getArtikelDto().getArtikelsprDto() != null) {

                                zeile[ETI_A4_STUECKLISTENBEZEICHNUNG] = stuecklisteDto.getArtikelDto()
                                        .getArtikelsprDto().getCBez();
                                zeile[ETI_A4_STUECKLISTEKURZBEZEICHNUNG] = stuecklisteDto.getArtikelDto()
                                        .getArtikelsprDto().getCKbez();
                                zeile[ETI_A4_STUECKLISTEZUSATZBEZEICHNUNG] = stuecklisteDto.getArtikelDto()
                                        .getArtikelsprDto().getCZbez();

                            }
                            zeile[ETI_A4_STUECKLISTEMENGENEINHEIT] = stuecklisteDto.getArtikelDto().getEinheitCNr();
                            zeile[ETI_A4_STUECKLISTEREFERENZNUMMER] = stuecklisteDto.getArtikelDto()
                                    .getCReferenznr();
                        }
                    }
                } else {
                    zeile[ETI_A4_LOSART] = FertigungFac.LOSART_MATERIALLISTE;
                }

                zeile[ETI_A4_LOSGROESSE] = losDto.getNLosgroesse();

                if (losDto.getLagerIIdZiel() != null) {
                    LagerDto lagerDto = getLagerFac().lagerFindByPrimaryKey(losDto.getLagerIIdZiel());
                    if (lagerDto != null) {

                        zeile[ETI_A4_LAGER] = lagerDto.getCNr();
                    }
                }
                Date dBegin = losDto.getTProduktionsbeginn();
                Date dEnde = losDto.getTProduktionsende();

                zeile[ETI_A4_BEGINN] = dBegin;
                zeile[ETI_A4_ENDE] = dEnde;

                if ((dEnde != null) && (dBegin != null)) {
                    zeile[ETI_A4_DAUER] = new Integer(Helper.getDifferenzInTagen(dBegin, dEnde));
                }
                if (losDto.getPersonalIIdTechniker() != null) {
                    PersonalDto personalDto = getPersonalFac()
                            .personalFindByPrimaryKey(losDto.getPersonalIIdTechniker(), theClientDto);
                    if (personalDto != null) {

                        zeile[ETI_A4_TECHNIKERNAME] = personalDto.formatFixUFTitelName2Name1();
                        zeile[ETI_A4_TECHNIKERNUMMER] = personalDto.getCPersonalnr();

                    }
                }

                zeile[ETI_A4_PROJEKT] = losDto.getCProjekt();
                zeile[ETI_A4_KOMMENTAR] = losDto.getCKommentar();

                if (losDto.getFertigungsgruppeIId() != null) {
                    FertigungsgruppeDto fertDto = getStuecklisteFac()
                            .fertigungsgruppeFindByPrimaryKey(losDto.getFertigungsgruppeIId());
                    if (fertDto != null) {
                        zeile[ETI_A4_FERTIGUNGSGRUPPE] = fertDto.getCBez();

                    }
                }
                if (losDto.getPartnerIIdFertigungsort() != null) {
                    PartnerDto partnerDto = getPartnerFac()
                            .partnerFindByPrimaryKeyOhneExc(losDto.getPartnerIIdFertigungsort(), theClientDto);
                    if (partnerDto != null) {
                        zeile[ETI_A4_FERTIGUNGSORT] = partnerDto.formatTitelAnrede();

                    }
                }

                zeile[ETI_A4_TEXT] = losDto.getXText();

                if (bMitInhalten == true) {

                    // Inhalt
                    LossollmaterialDto[] sollmaterialDtos = getFertigungFac()
                            .lossollmaterialFindByLosIIdOrderByISort(losIId);

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

                        Object[] zeileSoll = zeile.clone();
                        zeileSoll[ETI_A4_SOLLMATERIAL_SOLLMENGE] = sollmaterialDtos[i].getNMenge();
                        zeileSoll[ETI_A4_SOLLMATERIAL_ISTMENGE] = getFertigungFac()
                                .getAusgegebeneMenge(sollmaterialDtos[i].getIId(), null, theClientDto);

                        ArtikelDto artikelDto = getArtikelFac()
                                .artikelFindByPrimaryKeySmall(sollmaterialDtos[i].getArtikelIId(), theClientDto);

                        zeileSoll[ETI_A4_SOLLMATERIAL_ARTIKELNUMMER] = artikelDto.getCNr();
                        if (artikelDto.getArtikelsprDto() != null) {
                            zeileSoll[ETI_A4_SOLLMATERIAL_BEZEICHNUNG] = artikelDto.getArtikelsprDto().getCBez();
                            zeileSoll[ETI_A4_SOLLMATERIAL_KURZBEZEICHNUNG] = artikelDto.getArtikelsprDto()
                                    .getCKbez();
                            zeileSoll[ETI_A4_SOLLMATERIAL_ZUSATZBEZEICHNUNG] = artikelDto.getArtikelsprDto()
                                    .getCZbez();
                            zeileSoll[ETI_A4_SOLLMATERIAL_ZUSATZBEZEICHNUNG2] = artikelDto.getArtikelsprDto()
                                    .getCZbez2();
                        }

                        zeileSoll[ETI_A4_SOLLMATERIAL_EINHEIT] = artikelDto.getEinheitCNr();
                        zeileSoll[ETI_A4_SOLLMATERIAL_REFERENZNUMMER] = artikelDto.getCReferenznr();
                        alDaten.add(zeileSoll);
                    }
                } else {
                    alDaten.add(zeile);
                }
            }
        }
        data = new Object[alDaten.size()][ETI_A4_ANZAHL_FELDER];
        data = (Object[][]) alDaten.toArray(data);

        initJRDS(parameter, FertigungReportFac.REPORT_MODUL, FertigungReportFac.REPORT_LOSETIKETTA4,
                theClientDto.getMandant(), theClientDto.getLocUi(), theClientDto);

        return getReportPrint();

    }

    public JasperPrintLP printAusgabeListe(Integer[] losIId, Integer iSortierung, boolean bVerdichtetNachIdent,
            boolean bVorrangigNachFarbcodeSortiert, Integer artikelklasseIId, String alternativerReport,
            TheClientDto theClientDto) throws EJBExceptionLP {
        Session session = null;
        try {
            this.useCase = UC_AUSGABELISTE;
            this.index = -1;
            Map<String, Object> mapParameter = new TreeMap<String, Object>();
            String lose = "";
            for (int i = 0; i < losIId.length; i++) {

                // Los holen
                LosDto losDto = getFertigungFac().losFindByPrimaryKey(losIId[i]);
                lose += losDto.getCNr() + ", ";

                ArrayList<Object> al = new ArrayList<Object>();
                al.add(losDto.getCNr());

                if (losDto.getStatusCNr().equals(FertigungFac.STATUS_ANGELEGT)) {
                    throw new EJBExceptionLP(EJBExceptionLP.FEHLER_FERTIGUNG_DAS_LOS_IST_NOCH_NICHT_AUSGEGEBEN, al,
                            null);
                } else if (losDto.getStatusCNr().equals(FertigungFac.STATUS_STORNIERT)) {
                    throw new EJBExceptionLP(EJBExceptionLP.FEHLER_FERTIGUNG_DAS_LOS_IST_STORNIERT, al, null);
                }
            }
            data = getDataAusgabeListe(losIId, iSortierung, bVerdichtetNachIdent, bVorrangigNachFarbcodeSortiert,
                    artikelklasseIId, theClientDto);
            LosDto losDto = getFertigungFac().losFindByPrimaryKey(losIId[0]);
            mapParameter = getParameterAusgabeliste(losDto, lose, theClientDto);
            ArrayList<Object> images = new ArrayList<Object>();
            String sLosStuecklisteArtikelKommentar = "";
            // Bild einfuegen
            if (losDto.getStuecklisteIId() != null) {
                StuecklisteDto stuecklisteDto = getStuecklisteFac()
                        .stuecklisteFindByPrimaryKey(losDto.getStuecklisteIId(), theClientDto);
                ArtikelkommentarDto[] artikelkommentarDto = getArtikelkommentarFac()
                        .artikelkommentardruckFindByArtikelIIdBelegartCNr(stuecklisteDto.getArtikelIId(),
                                LocaleFac.BELEGART_LOS, theClientDto.getLocUiAsString(), theClientDto);

                // Sperren
                String sperren = getArtikelFac().getArtikelsperrenText(stuecklisteDto.getArtikelIId());

                mapParameter.put("P_STUECKLISTESPERRSTATUS", sperren);

                if (artikelkommentarDto != null && artikelkommentarDto.length > 0) {

                    for (int j = 0; j < artikelkommentarDto.length; j++) {
                        if (artikelkommentarDto[j].getArtikelkommentarsprDto() != null) {
                            // Text Kommentar
                            if (artikelkommentarDto[j].getDatenformatCNr().trim()
                                    .indexOf(MediaFac.DATENFORMAT_MIMETYPEART_TEXT) != -1) {
                                if (sLosStuecklisteArtikelKommentar == "") {
                                    sLosStuecklisteArtikelKommentar += artikelkommentarDto[j]
                                            .getArtikelkommentarsprDto().getXKommentar();
                                } else {
                                    sLosStuecklisteArtikelKommentar += "\n"
                                            + artikelkommentarDto[j].getArtikelkommentarsprDto().getXKommentar();
                                }
                            } else if (artikelkommentarDto[j].getDatenformatCNr()
                                    .equals(MediaFac.DATENFORMAT_MIMETYPE_IMAGE_JPEG)
                                    || artikelkommentarDto[j].getDatenformatCNr()
                                            .equals(MediaFac.DATENFORMAT_MIMETYPE_IMAGE_PNG)
                                    || artikelkommentarDto[j].getDatenformatCNr()
                                            .equals(MediaFac.DATENFORMAT_MIMETYPE_IMAGE_GIF)) {
                                byte[] bild = artikelkommentarDto[j].getArtikelkommentarsprDto().getOMedia();
                                if (bild != null) {
                                    java.awt.Image myImage = Helper.byteArrayToImage(bild);
                                    images.add(myImage);
                                }
                            } else if (artikelkommentarDto[j].getDatenformatCNr()
                                    .equals(MediaFac.DATENFORMAT_MIMETYPE_IMAGE_TIFF)) {

                                byte[] bild = artikelkommentarDto[j].getArtikelkommentarsprDto().getOMedia();

                                java.awt.Image[] tiffs = Helper.tiffToImageArray(bild);
                                if (tiffs != null) {
                                    for (int k = 0; k < tiffs.length; k++) {
                                        images.add(tiffs[k]);
                                    }
                                }

                            }
                        }
                    }
                }
            }
            if (sLosStuecklisteArtikelKommentar != "") {
                mapParameter.put("P_STUECKLISTEARTIKELKOMMENTAR",
                        Helper.formatStyledTextForJasper(sLosStuecklisteArtikelKommentar));
            }

            if (alternativerReport != null) {
                initJRDS(mapParameter, FertigungReportFac.REPORT_MODUL, alternativerReport,
                        theClientDto.getMandant(), theClientDto.getLocUi(), theClientDto);
            } else {

                String report = FertigungReportFac.REPORT_AUSGABELISTE;

                // PJ 17672
                FertigungsgruppeDto fertGruppeDto = getStuecklisteFac()
                        .fertigungsgruppeFindByPrimaryKey(losDto.getFertigungsgruppeIId());
                if (fertGruppeDto.getIFormularnummer() != null) {
                    report = report.replace(".", fertGruppeDto.getIFormularnummer() + ".");
                }

                initJRDS(mapParameter, FertigungReportFac.REPORT_MODUL, report, theClientDto.getMandant(),
                        theClientDto.getLocUi(), theClientDto);
            }

            JasperPrintLP print = getReportPrint();
            Integer cachedReportvariante = theClientDto.getReportvarianteIId();
            if (images != null) {
                for (int k = 0; k < images.size(); k++) {
                    mapParameter = new HashMap<String, Object>();
                    mapParameter.put("P_BILD", images.get(k));
                    this.useCase = UC_GANZSEITIGESBILD;
                    this.index = -1;
                    data = new Object[1][1];
                    data[0][0] = images.get(k);
                    theClientDto.setReportvarianteIId(cachedReportvariante);
                    initJRDS(mapParameter, REPORT_MODUL_ALLGEMEIN, REPORT_GANZSEITIGESBILD,
                            theClientDto.getMandant(), theClientDto.getLocUi(), theClientDto);
                    print = Helper.addReport2Report(print, getReportPrint().getPrint());
                }
            }
            return print;
        } catch (RemoteException t) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER, t);
        } finally {
            closeSession(session);
        }
    }

    public JasperPrintLP printProduktionsinformation(Integer losIId, TheClientDto theClientDto) {
        this.useCase = UC_PRODUKTIONSINFORMATION;

        Map<String, Object> mapParameter = new TreeMap<String, Object>();

        try {
            LosDto losDto = getFertigungFac().losFindByPrimaryKey(losIId);
            KostenstelleDto kstDto = getSystemFac().kostenstelleFindByPrimaryKey(losDto.getKostenstelleIId());

            String sAuftragsnummer = "";
            String sInternerKommentar = "";
            String sKunde = "";
            Timestamp dLiefertermin = null;
            String sLieferart = "";
            String sAbteilung = null;
            String sSpediteur = null;
            Boolean bPoenale = Boolean.FALSE;
            Boolean bRoHs = Boolean.FALSE;
            String sKundenbestellnummer = null;

            if (losDto.getAuftragIId() != null) {
                // Auftrag holen
                AuftragDto auftragDto = getAuftragFac().auftragFindByPrimaryKey(losDto.getAuftragIId());
                sAuftragsnummer = auftragDto.getCNr();
                sLieferart = getLocaleFac().lieferartFindByIIdLocaleOhneExc(auftragDto.getLieferartIId(),
                        theClientDto.getLocUi(), theClientDto);

                if (auftragDto.getSpediteurIId() != null) {
                    sSpediteur = getMandantFac().spediteurFindByPrimaryKey(auftragDto.getSpediteurIId())
                            .getCNamedesspediteurs();
                }

                bPoenale = Helper.short2Boolean(auftragDto.getBPoenale());
                bRoHs = Helper.short2Boolean(auftragDto.getBRoHs());

                sKundenbestellnummer = auftragDto.getCBestellnummer();

                // Internen Kommentar aus dem Auftrag, abhaengig von einem
                // Mandantenparameter
                ParametermandantDto parameter = getParameterFac().getMandantparameter(theClientDto.getMandant(),
                        ParameterFac.KATEGORIE_FERTIGUNG,
                        ParameterFac.PARAMETER_KOMMENTAR_AM_FERTIGUNGSBEGLEITSCHEIN);
                short iValue = Short.parseShort(parameter.getCWert());
                boolean bDruckeKommentar = Helper.short2boolean(iValue);
                if (bDruckeKommentar) {
                    sInternerKommentar = auftragDto.getXInternerkommentar();
                }
                // Kunde holen
                KundeDto kundeDto = getKundeFac().kundeFindByPrimaryKey(auftragDto.getKundeIIdAuftragsadresse(),
                        theClientDto);
                sKunde = kundeDto.getPartnerDto().getCName1nachnamefirmazeile1();

                sAbteilung = kundeDto.getPartnerDto().getCName3vorname2abteilung();

                if (losDto.getAuftragpositionIId() != null) {
                    AuftragpositionDto aufposDto = getAuftragpositionFac()
                            .auftragpositionFindByPrimaryKey(losDto.getAuftragpositionIId());
                    if (aufposDto.getTUebersteuerbarerLiefertermin() != null) {
                        dLiefertermin = aufposDto.getTUebersteuerbarerLiefertermin();
                    } else {
                        dLiefertermin = auftragDto.getDLiefertermin();
                    }
                } else {
                    dLiefertermin = auftragDto.getDLiefertermin();
                }
            }

            mapParameter.put("P_AUFTRAGNUMMER", sAuftragsnummer);
            mapParameter.put("P_BESTELLNUMMER", sKundenbestellnummer);
            mapParameter.put("P_AUFTRAG_INTERNERKOMMENTAR", sInternerKommentar);
            mapParameter.put("P_AUFTRAG_KUNDE_ABTEILUNG", sAbteilung);
            mapParameter.put("P_LIEFERART", sLieferart);
            mapParameter.put("P_SPEDITEUR", sSpediteur);
            mapParameter.put("P_POENALE", bPoenale);
            mapParameter.put("P_ROHS", bRoHs);

            PersonalDto personalBenutzer = getPersonalFac().personalFindByPrimaryKey(theClientDto.getIDPersonal(),
                    theClientDto);
            mapParameter.put("P_BENUTZER", personalBenutzer.getCKurzzeichen());

            MandantDto mandantDto = getMandantFac().mandantFindByPrimaryKey(theClientDto.getMandant(),
                    theClientDto);
            mapParameter.put("Mandantenadresse", Helper.formatMandantAdresse(mandantDto));

            mapParameter.put("P_ANGELEGT", new java.util.Date(losDto.getTAnlegen().getTime()));

            if (losDto.getTErledigt() != null) {
                mapParameter.put("P_ERLEDIGT", new java.util.Date(losDto.getTErledigt().getTime()));
            }

            mapParameter.put("P_KOSTENSTELLENUMMER", kstDto.getCNr());
            mapParameter.put("P_KUNDE", sKunde);
            mapParameter.put("P_LOSGROESSE", losDto.getNLosgroesse());
            mapParameter.put("P_LOSNUMMER", losDto.getCNr());
            mapParameter.put("P_PRODUKTIONSBEGINN", losDto.getTProduktionsbeginn());
            mapParameter.put("P_PRODUKTIONSENDE", losDto.getTProduktionsende());
            mapParameter.put("P_PROJEKT", losDto.getCProjekt());
            mapParameter.put("P_LOSKOMMENTAR", losDto.getCKommentar());
            mapParameter.put("P_LOSLANGTEXT", losDto.getXText());

            mapParameter.put("P_PRODUKTIONSINFORMATION", losDto.getXProduktionsinformation());

            mapParameter.put("P_LIEFERTERMIN", dLiefertermin);
            // Materialliste?
            if (losDto.getStuecklisteIId() != null) {
                StuecklisteDto stkDto = getStuecklisteFac().stuecklisteFindByPrimaryKey(losDto.getStuecklisteIId(),
                        theClientDto);

                mapParameter.put("P_STUECKLISTEBEZEICHNUNG", stkDto.getArtikelDto().getArtikelsprDto().getCBez());

                mapParameter.put("P_STUECKLISTEZUSATZBEZEICHNUNG",
                        stkDto.getArtikelDto().getArtikelsprDto().getCZbez());
                mapParameter.put("P_STUECKLISTEZUSATZBEZEICHNUNG2",
                        stkDto.getArtikelDto().getArtikelsprDto().getCZbez2());
                mapParameter.put("P_STUECKLISTENUMMER", stkDto.getArtikelDto().getCNr());

                mapParameter.put("P_STUECKLISTE_GEWICHTKG", stkDto.getArtikelDto().getFGewichtkg());

                if (stkDto.getArtikelDto().getVerpackungDto() != null) {
                    mapParameter.put("P_STUECKLISTE_BAUFORM",
                            stkDto.getArtikelDto().getVerpackungDto().getCBauform());
                    mapParameter.put("P_STUECKLISTE_VERPACKUNGSART",
                            stkDto.getArtikelDto().getVerpackungDto().getCVerpackungsart());
                }

                if (stkDto.getArtikelDto().getGeometrieDto() != null) {
                    mapParameter.put("P_STUECKLISTE_BREITETEXT",
                            stkDto.getArtikelDto().getGeometrieDto().getCBreitetext());
                    mapParameter.put("P_STUECKLISTE_BREITE", stkDto.getArtikelDto().getGeometrieDto().getFBreite());
                    mapParameter.put("P_STUECKLISTE_HOEHE", stkDto.getArtikelDto().getGeometrieDto().getFHoehe());
                    mapParameter.put("P_STUECKLISTE_TIEFE", stkDto.getArtikelDto().getGeometrieDto().getFTiefe());
                }

            } else {
                mapParameter.put("P_STUECKLISTEBEZEICHNUNG", losDto.getCProjekt());
                mapParameter.put("P_STUECKLISTENUMMER", getTextRespectUISpr("fert.materialliste",
                        theClientDto.getMandant(), theClientDto.getLocUi()));
            }
        } catch (RemoteException ex) {
            throwEJBExceptionLPRespectOld(ex);
        }

        ArrayList alData = new ArrayList();

        ArrayList<JCRDocDto> dokumente = getJCRDocFac().holeDokumenteZuUseCase(losIId, QueryParameters.UC_ID_LOS,
                theClientDto);

        for (int i = 0; i < dokumente.size(); i++) {

            if (((JCRDocDto) dokumente.get(i)).getsMIME() != null) {

                String sMime = ((JCRDocDto) dokumente.get(i)).getsMIME();

                if (".JPG".equals(sMime.toUpperCase()) || ".JPEG".equals(sMime.toUpperCase())
                        || ".GIF".equals(sMime.toUpperCase()) || ".PNG".equals(sMime.toUpperCase())
                        || ".TIFF".equals(sMime.toUpperCase()) || ".BMP".equals(sMime.toUpperCase())) {
                    Object[] zeile = new Object[PI_ANZAHL_FELDER];

                    zeile[PI_BILD] = Helper.byteArrayToImage(((JCRDocDto) dokumente.get(i)).getbData());
                    zeile[PI_FILENAME] = ((JCRDocDto) dokumente.get(i)).getsFilename();
                    zeile[PI_NAME] = ((JCRDocDto) dokumente.get(i)).getsName();
                    zeile[PI_SCHLAGWORTE] = ((JCRDocDto) dokumente.get(i)).getsSchlagworte();

                    alData.add(zeile);
                }

            }

        }

        data = new Object[alData.size()][PI_ANZAHL_FELDER];
        data = (Object[][]) alData.toArray(data);

        initJRDS(mapParameter, FertigungReportFac.REPORT_MODUL, FertigungReportFac.REPORT_PRODUKTIONSINFORMATION,
                theClientDto.getMandant(), theClientDto.getLocUi(), theClientDto);
        return getReportPrint();

    }

    public boolean istErstlos(LosDto losDto, TheClientDto theClientDto) {

        if (losDto.getStuecklisteIId() != null) {

            SessionFactory factory = FLRSessionFactory.getFactory();
            org.hibernate.Session session = factory.openSession();
            Criteria c = session.createCriteria(FLRLosReport.class);
            c.add(Restrictions.eq(FertigungFac.FLR_LOS_MANDANT_C_NR, theClientDto.getMandant()));

            c.add(Restrictions.eq(FertigungFac.FLR_LOS_STUECKLISTE_I_ID, losDto.getStuecklisteIId()));
            c.add(Restrictions.lt(FertigungFac.FLR_LOS_C_NR, losDto.getCNr()));
            c.add(Restrictions.not(Restrictions.in(FertigungFac.FLR_LOS_STATUS_C_NR,
                    new String[] { FertigungFac.STATUS_STORNIERT, FertigungFac.STATUS_GESTOPPT })));

            // Sortierung nach Losnummer
            c.addOrder(Order.asc(FertigungFac.FLR_LOS_C_NR));
            c.setMaxResults(1);
            List<?> list = c.list();

            if (list.size() > 0) {
                return false;
            } else {
                return true;
            }
        } else {
            return false;
        }
    }

    public JasperPrintLP printAblieferEtikett(Integer losablieferungIId, Integer iExemplare, BigDecimal bdHandmenge,
            TheClientDto theClientDto) {
        this.useCase = UC_ABLIEFERETIKETT;
        try {

            LosablieferungDto losablieferungDto = getFertigungFac()
                    .losablieferungFindByPrimaryKey(losablieferungIId, false, theClientDto);
            LosDto losDto = getFertigungFac().losFindByPrimaryKey(losablieferungDto.getLosIId());

            Map<String, Object> parameter = new TreeMap<String, Object>();

            if (losDto.getStuecklisteIId() != null) {
                StuecklisteDto stklDto = getStuecklisteFac().stuecklisteFindByPrimaryKey(losDto.getStuecklisteIId(),
                        theClientDto);
                ArtikelDto artikelDto = stklDto.getArtikelDto();

                parameter.put("P_ARTIKELNUMMER", artikelDto.getCNr());

                if (artikelDto.getArtikelsprDto() != null) {
                    parameter.put("P_BEZEICHNUNG", artikelDto.getArtikelsprDto().getCBez());
                    parameter.put("P_KURZBEZEICHNUNG", artikelDto.getArtikelsprDto().getCKbez());
                    parameter.put("P_ZUSATZBEZEICHNUNG", artikelDto.getArtikelsprDto().getCZbez());
                    parameter.put("P_ZUSATZBEZEICHNUNG2", artikelDto.getArtikelsprDto().getCZbez2());
                }

                // Erste gefundene Version anzeigen
                LagerbewegungDto[] lDto = getLagerFac().lagerbewegungFindByBelegartCNrBelegartPositionIId(
                        LocaleFac.BELEGART_LOSABLIEFERUNG, losablieferungDto.getIId());
                if (lDto != null && lDto.length > 0) {
                    parameter.put("P_VERSION", lDto[0].getCVersion());
                }

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

                parameter.put("P_EINHEIT", artikelDto.getEinheitCNr());
                parameter.put("P_REFERENZNUMMER", artikelDto.getCReferenznr());
                parameter.put("P_REVISION", artikelDto.getCRevision());
                parameter.put("P_INDEX", artikelDto.getCIndex());
                parameter.put("P_VERPACKUNGSMENGE", artikelDto.getFVerpackungsmenge());

                parameter.put("P_MANDANTADRESSE", Helper.formatMandantAdresse(mandantDto));

                if (artikelDto.getMaterialIId() != null) {
                    MaterialDto materialDto = getMaterialFac().materialFindByPrimaryKey(artikelDto.getMaterialIId(),
                            theClientDto);
                    parameter.put("P_MATERIAL", materialDto.getBezeichnung());
                }

                if (artikelDto.getGeometrieDto() != null) {
                    parameter.put("P_BREITE", artikelDto.getGeometrieDto().getFBreite());
                    parameter.put("P_HOEHE", artikelDto.getGeometrieDto().getFHoehe());
                    parameter.put("P_TIEFE", artikelDto.getGeometrieDto().getFTiefe());
                }

                if (artikelDto.getVerpackungDto() != null) {
                    parameter.put("P_BAUFORM", artikelDto.getVerpackungDto().getCBauform());
                    parameter.put("P_VERPACKUNGSART", artikelDto.getVerpackungDto().getCVerpackungsart());
                }

                parameter.put("P_VERPACKUNGS_EAN", artikelDto.getCVerpackungseannr());
                parameter.put("P_VERKAUFS_EAN", artikelDto.getCVerkaufseannr());

                if (artikelDto.getHerstellerIId() != null) {
                    HerstellerDto herstellerDto = getArtikelFac()
                            .herstellerFindByPrimaryKey(artikelDto.getHerstellerIId(), theClientDto);
                    parameter.put("P_HERSTELLER", herstellerDto.getCNr());
                    parameter.put("P_HERSTELLER_NAME1",
                            herstellerDto.getPartnerDto().getCName1nachnamefirmazeile1());
                    parameter.put("P_HERSTELLER_NAME2",
                            herstellerDto.getPartnerDto().getCName2vornamefirmazeile2());
                }

                ArtikellieferantDto[] artikellieferantDtos = getArtikelFac()
                        .artikellieferantFindByArtikelIId(artikelDto.getIId(), theClientDto);

                if (artikellieferantDtos != null && artikellieferantDtos.length > 0) {
                    parameter.put("P_LIEFERANT", getLieferantFac()
                            .lieferantFindByPrimaryKey(artikellieferantDtos[0].getLieferantIId(), theClientDto)
                            .getPartnerDto().formatAnrede());
                    parameter.put("P_LIEFERANT_ARTIKELNUMMER", artikellieferantDtos[0].getCArtikelnrlieferant());
                    parameter.put("P_LIEFERANT_ARTIKELBEZEICHNUNG", artikellieferantDtos[0].getCBezbeilieferant());
                }
                Integer iIdHauplpager = getLagerFac().getHauptlagerDesMandanten(theClientDto).getIId();
                if (Helper.short2boolean(artikelDto.getBLagerbewirtschaftet())) {
                    parameter.put("P_LAGERSTAND",
                            getLagerFac().getLagerstand(artikelDto.getIId(), iIdHauplpager, theClientDto));
                }

                parameter.put("P_LAGERORT",
                        getLagerFac().getLagerplaezteEinesArtikels(artikelDto.getIId(), iIdHauplpager));

            }

            if (bdHandmenge != null) {
                parameter.put("P_MENGE", bdHandmenge);
            } else {
                parameter.put("P_MENGE", losablieferungDto.getNMenge());
            }

            parameter.put("P_LOSNUMMER", losDto.getCNr());
            parameter.put("P_ABLIEFERDATUM", losablieferungDto.getTAendern());
            parameter.put("P_PROJEKT", losDto.getCKommentar());
            parameter.put("P_KOMMENTAR", losDto.getCKommentar());

            parameter.put("P_SNRCHNR", SeriennrChargennrMitMengeDto
                    .erstelleStringAusMehrerenSeriennummern(losablieferungDto.getSeriennrChargennrMitMenge()));
            data = new Object[0][ABLIEFERETIKETT_ANZAHL_SPALTEN];
            if (losablieferungDto.getSeriennrChargennrMitMenge() != null) {

                data = new Object[losablieferungDto.getSeriennrChargennrMitMenge()
                        .size()][ABLIEFERETIKETT_ANZAHL_SPALTEN];

                for (int i = 0; i < losablieferungDto.getSeriennrChargennrMitMenge().size(); i++) {

                    String snr = losablieferungDto.getSeriennrChargennrMitMenge().get(i).getCSeriennrChargennr();

                    data[i][ABLIEFERETIKETT_SERIENNUMMER] = snr;

                    GeraetesnrDto[] gsnrDto = getLagerFac().getGeraeteseriennummerEinerLagerbewegung(
                            LocaleFac.BELEGART_LOSABLIEFERUNG, losablieferungIId, snr);

                    String[] fieldnames = new String[] { "F_ARTIKELNUMMER", "F_ARTIKELBEZEICHNUNG",
                            "F_GERAETESNR" };
                    Object[][] dataSub = new Object[gsnrDto.length][fieldnames.length];

                    for (int k = 0; k < gsnrDto.length; k++) {
                        ArtikelDto aDto = getArtikelFac().artikelFindByPrimaryKey(gsnrDto[k].getArtikelIId(),
                                theClientDto);
                        dataSub[k][0] = aDto.getCNr();
                        if (aDto.getArtikelsprDto() != null) {
                            dataSub[k][1] = aDto.getArtikelsprDto().getCBez();
                        }
                        dataSub[k][2] = gsnrDto[k].getCSnr();
                    }

                    data[i][ABLIEFERETIKETT_SUBREPORT_GERAETESNR] = new LPDatenSubreport(dataSub, fieldnames);

                }
            }

            JasperPrintLP print = null;
            Integer cachedReportVarianteId = theClientDto.getReportvarianteIId();
            for (int i = 0; i < iExemplare; i++) {

                parameter.put("P_EXEMPLAR", new Integer(i + 1));
                parameter.put("P_EXEMPLAREGESAMT", iExemplare);

                theClientDto.setReportvarianteIId(cachedReportVarianteId);

                initJRDS(parameter, FertigungReportFac.REPORT_MODUL, FertigungReportFac.REPORT_ABLIEFERETIKETT,
                        theClientDto.getMandant(), theClientDto.getLocUi(), theClientDto);
                print = print == null ? getReportPrint()
                        : Helper.addReport2Report(print, getReportPrint().getPrint());
            }

            return print;
        }

        catch (Exception ex) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEIM_DRUCKEN, ex);
        }

    }

    public JasperPrintLP printFertigungsbegleitschein(Integer losIId, Boolean bStammtVonSchnellanlage,
            TheClientDto theClientDto) throws EJBExceptionLP {
        Session session = null;
        try {
            this.useCase = UC_FERTIGUNGSBEGLEITSCHEIN;
            this.index = -1;
            // Los holen
            LosDto losDto = getFertigungFac().losFindByPrimaryKey(losIId);
            if (losDto.getStatusCNr().equals(FertigungFac.STATUS_ANGELEGT)) {
                throw new EJBExceptionLP(EJBExceptionLP.FEHLER_FERTIGUNG_DAS_LOS_IST_NOCH_NICHT_AUSGEGEBEN, "");
            } else if (losDto.getStatusCNr().equals(FertigungFac.STATUS_STORNIERT)) {
                throw new EJBExceptionLP(EJBExceptionLP.FEHLER_FERTIGUNG_DAS_LOS_IST_STORNIERT, "");
            } else if (losDto.getStatusCNr().equals(FertigungFac.STATUS_ERLEDIGT)) {
                throw new EJBExceptionLP(EJBExceptionLP.FEHLER_FERTIGUNG_DAS_LOS_IST_BEREITS_ERLEDIGT, "");
            }

            // Hole Parameter UNTERDRUECKE_ARTIKELNR_NULLTAETIGKEIT
            String artikelnrZuUnterdruecken = null;
            ParametermandantDto parameterNulltaetigkeit = getParameterFac().getMandantparameter(
                    theClientDto.getMandant(), ParameterFac.KATEGORIE_ALLGEMEIN,
                    ParameterFac.PARAMETER_UNTERDRUECKE_ARTIKELNR_NULLTAETIGKEIT);
            if (parameterNulltaetigkeit.getCWert() != null && !parameterNulltaetigkeit.getCWert().equals("")
                    && !parameterNulltaetigkeit.getCWert().equals(" ")) {
                artikelnrZuUnterdruecken = parameterNulltaetigkeit.getCWert();
            }

            SessionFactory factory = FLRSessionFactory.getFactory();
            session = factory.openSession();
            Criteria c = session.createCriteria(FLRLossollarbeitsplan.class);
            if (artikelnrZuUnterdruecken != null) {
                c.createAlias(FertigungFac.FLR_LOSSOLLARBEITSPLAN_FLRARTIKEL, "a");
                c.add(Restrictions.not(
                        Restrictions.and(Restrictions.isNotNull(FertigungFac.FLR_LOSSOLLARBEITSPLAN_MASCHINE_I_ID),
                                Restrictions.eq("a.c_nr", artikelnrZuUnterdruecken))));
            }
            c.add(Restrictions.eq(FertigungFac.FLR_LOSSOLLARBEITSPLAN_LOS_I_ID, losIId));
            // Sortierung nach Arbeitsgang
            c.addOrder(Order.asc(FertigungFac.FLR_LOSSOLLARBEITSPLAN_I_ARBEITSGANGNUMMER));
            c.addOrder(Order.asc(FertigungFac.FLR_LOSSOLLARBEITSPLAN_I_UNTERARBEITSGANG));
            List<?> list = c.list();

            int iSizeMaterial = 0;
            ParametermandantDto parameterMaterial = getParameterFac().getMandantparameter(theClientDto.getMandant(),
                    ParameterFac.KATEGORIE_FERTIGUNG, ParameterFac.PARAMETER_FERTIGUNGSBEGLEITSCHEIN_MIT_MATERIAL);
            short iMaterial = Short.parseShort(parameterMaterial.getCWert());
            boolean bMitMaterial = Helper.short2boolean(iMaterial);
            if (bMitMaterial) {
                // Hier Material einfuegen
                Object[][] material = getDataAusgabeListe(new Integer[] { losIId }, Helper.SORTIERUNG_NACH_IDENT,
                        true, false, null, theClientDto);

                if (material == null) {
                    iSizeMaterial = 0;
                } else {
                    iSizeMaterial = material.length;
                }

                data = new Object[list.size() + material.length][BEGL_SPALTENANZAHL];
                for (int i = 0; i < iSizeMaterial; i++) {
                    data[i][BEGL_IST_MATERIAL] = new Boolean(true);
                    data[i][BEGL_MATERIAL_ARTIKELKLASSE] = material[i][AUSG_ARTIKELKLASSE];
                    data[i][BEGL_MATERIAL_AUSGABE] = material[i][AUSG_AUSGABE];
                    data[i][BEGL_MATERIAL_BEZEICHNUNG] = material[i][AUSG_BEZEICHNUNG];
                    data[i][BEGL_MATERIAL_EINHEIT] = material[i][AUSG_EINHEIT];
                    data[i][BEGL_MATERIAL_FARBCODE] = material[i][AUSG_FARBCODE];
                    data[i][BEGL_MATERIAL_IDENT] = material[i][AUSG_IDENT];
                    data[i][BEGL_MATERIAL_LAGER] = material[i][AUSG_LAGER];
                    data[i][BEGL_MATERIAL_LAGERORT] = material[i][AUSG_LAGERORT];
                    data[i][BEGL_MATERIAL_MENGE] = material[i][AUSG_MENGE];
                    data[i][BEGL_MATERIAL_MONTAGEART] = material[i][AUSG_MONTAGEART];
                    data[i][BEGL_MATERIAL_SCHALE] = material[i][AUSG_SCHALE];
                    data[i][BEGL_MATERIAL_ZUSATZBEZEICHNUNG] = material[i][AUSG_ZUSATZBEZEICHNUNG];
                    data[i][BEGL_MATERIAL_ZUSATZBEZEICHNUNG2] = material[i][AUSG_ZUSATZBEZEICHNUNG2];
                    data[i][BEGL_MATERIAL_HOEHE] = material[i][AUSG_HOEHE];
                    data[i][BEGL_MATERIAL_BREITE] = material[i][AUSG_BREITE];
                    data[i][BEGL_MATERIAL_TIEFE] = material[i][AUSG_TIEFE];
                    data[i][BEGL_MATERIAL_MATERIAL] = material[i][AUSG_MATERIAL];
                    data[i][BEGL_BAUFORM] = material[i][AUSG_BAUFORM];
                    data[i][BEGL_VERPACKUNGSART] = material[i][AUSG_VERPACKUNGSART];
                    data[i][BEGL_GEWICHTKG] = material[i][AUSG_GEWICHTKG];
                    data[i][BEGL_MATERIAL_REVISION] = material[i][AUSG_REVISION];
                    data[i][BEGL_MATERIAL_INDEX] = material[i][AUSG_INDEX];
                    data[i][BEGL_NURZURINFORMATION] = material[i][AUSG_NUR_ZUR_INFO];

                }

            } else {
                data = new Object[list.size()][BEGL_SPALTENANZAHL];
            }

            int i = 0;
            for (Iterator<?> iter = list.iterator(); iter.hasNext(); i++) {
                FLRLossollarbeitsplan item = (FLRLossollarbeitsplan) iter.next();
                ArtikelDto artikelDto = getArtikelFac().artikelFindByPrimaryKey(item.getFlrartikel().getI_id(),
                        theClientDto);
                data[i + iSizeMaterial][BEGL_IST_MATERIAL] = new Boolean(false);
                data[i + iSizeMaterial][BEGL_IDENT] = artikelDto.getCNr();
                data[i + iSizeMaterial][BEGL_NURZURINFORMATION] = Helper.short2Boolean(artikelDto.getbNurzurinfo());
                data[i + iSizeMaterial][BEGL_BEZEICHNUNG] = artikelDto.getArtikelsprDto().getCBez();
                data[i + iSizeMaterial][BEGL_ZUSATZBEZEICHNUNG] = artikelDto.getArtikelsprDto().getCZbez();
                data[i + iSizeMaterial][BEGL_ZUSATZBEZEICHNUNG2] = artikelDto.getArtikelsprDto().getCZbez2();
                data[i + iSizeMaterial][BEGL_ARBEITSGANG] = item.getI_arbeitsgangsnummer();
                data[i + iSizeMaterial][BEGL_UNTERARBEITSGANG] = item.getI_unterarbeitsgang();
                data[i + iSizeMaterial][BEGL_AGART] = item.getAgart_c_nr();
                data[i + iSizeMaterial][BEGL_AUFSPANNUNG] = item.getI_aufspannung();
                data[i + iSizeMaterial][BEGL_MATERIAL_REVISION] = artikelDto.getCRevision();
                data[i + iSizeMaterial][BEGL_MATERIAL_INDEX] = artikelDto.getCIndex();
                data[i + iSizeMaterial][BEGL_FERTIG] = Helper.short2Boolean(item.getB_fertig());

                // Ein Mandantenparameter entscheidet, ob auch die Sollzeiten
                // gedruckt werden
                ParametermandantDto parameter = getParameterFac().getMandantparameter(theClientDto.getMandant(),
                        ParameterFac.KATEGORIE_FERTIGUNG,
                        ParameterFac.FERTIGUNG_FERTIGUNGSBEGLEITSCHEIN_MIT_SOLLDATEN);
                short iValue = Short.parseShort(parameter.getCWert());
                boolean bDruckeSolldaten = Helper.short2boolean(iValue);
                if (bDruckeSolldaten) {
                    data[i + iSizeMaterial][BEGL_RUESTZEIT] = item.getL_ruestzeit()
                            .divide(new BigDecimal(1000 * 60), 4, BigDecimal.ROUND_HALF_EVEN);
                    data[i + iSizeMaterial][BEGL_STUECKZEIT] = item.getL_stueckzeit()
                            .divide(new BigDecimal(1000 * 60), 4, BigDecimal.ROUND_HALF_EVEN);
                    data[i + iSizeMaterial][BEGL_GESAMTZEIT] = item.getN_gesamtzeit();
                }
                LossollarbeitsplanDto l = getFertigungFac().lossollarbeitsplanFindByPrimaryKey(item.getI_id());
                StringBuffer sKommentar = new StringBuffer();
                if (l.getCKomentar() != null) {
                    sKommentar.append(l.getCKomentar() + "\n");
                }
                if (l.getXText() != null) {
                    sKommentar.append(l.getXText());
                }
                data[i + iSizeMaterial][BEGL_KOMMENTAR] = sKommentar.toString();
                // Maschinenzeiterfassung
                if (l.getMaschineIId() != null) {
                    MaschineDto maschineDto = getZeiterfassungFac().maschineFindByPrimaryKey(l.getMaschineIId());
                    data[i + iSizeMaterial][BEGL_MASCHINE] = maschineDto.getCIdentifikationsnr();
                    data[i + iSizeMaterial][BEGL_MASCHINE_BEZEICHNUNG] = maschineDto.getCBez();
                }

                if (l.getLossollmaterialIId() != null) {
                    LossollmaterialDto posDto = getFertigungFac()
                            .lossollmaterialFindByPrimaryKey(l.getLossollmaterialIId());
                    ArtikelDto artikelDtoFremdmaterial = getArtikelFac()
                            .artikelFindByPrimaryKeySmall(posDto.getArtikelIId(), theClientDto);
                    data[i + iSizeMaterial][BEGL_FREMDMATERIAL_ARTIKEL] = artikelDtoFremdmaterial.getCNr();
                    if (artikelDtoFremdmaterial.getArtikelsprDto() != null) {
                        data[i + iSizeMaterial][BEGL_FREMDMATERIAL_ARTIKELBEZEICHNUNG] = artikelDtoFremdmaterial
                                .getArtikelsprDto().getCBez();
                        data[i + iSizeMaterial][BEGL_FREMDMATERIAL_ARTIKELKURZBEZEICHNUNG] = artikelDtoFremdmaterial
                                .getArtikelsprDto().getCKbez();
                        data[i + iSizeMaterial][BEGL_FREMDMATERIAL_ARTIKELZUSATZBEZEICHNUNG] = artikelDtoFremdmaterial
                                .getArtikelsprDto().getCZbez();
                        data[i + iSizeMaterial][BEGL_FREMDMATERIAL_ARTIKELZUSATZBEZEICHNUNG2] = artikelDtoFremdmaterial
                                .getArtikelsprDto().getCZbez2();
                    }
                    data[i + iSizeMaterial][BEGL_FREMDMATERIAL_SOLLMENGE] = posDto.getNMenge();

                    LoslagerentnahmeDto[] laeger = getFertigungFac()
                            .loslagerentnahmeFindByLosIId(posDto.getLosIId());
                    if (laeger.length > 0) {
                        ArtikellagerplaetzeDto artikellagerplaetzeDto = getLagerFac()
                                .artikellagerplaetzeFindByArtikelIIdLagerIId(artikelDtoFremdmaterial.getIId(),
                                        laeger[0].getLagerIId());
                        if (artikellagerplaetzeDto != null && artikellagerplaetzeDto.getLagerplatzDto() != null) {
                            data[i + iSizeMaterial][BEGL_FREMDMATERIAL_LAGERORT] = artikellagerplaetzeDto
                                    .getLagerplatzDto().getCLagerplatz();
                        }
                    }

                }

            }
            Map<String, Object> mapParameter = new TreeMap<String, Object>();
            mapParameter.put("P_ANGELEGT", new java.util.Date(losDto.getTAnlegen().getTime()));
            String sAuftragsnummer;
            String sInternerKommentar = null;
            String sKunde;
            String sKundeLieferadresse;
            Timestamp dLiefertermin;
            String sLieferart;
            String sAbteilung = null;
            String sSpediteur = null;
            Boolean bPoenale = Boolean.FALSE;
            Boolean bRoHs = Boolean.FALSE;
            if (losDto.getAuftragIId() != null) {
                // Auftrag holen
                AuftragDto auftragDto = getAuftragFac().auftragFindByPrimaryKey(losDto.getAuftragIId());
                sAuftragsnummer = auftragDto.getCNr();
                sLieferart = getLocaleFac().lieferartFindByIIdLocaleOhneExc(auftragDto.getLieferartIId(),
                        theClientDto.getLocUi(), theClientDto);

                if (auftragDto.getSpediteurIId() != null) {
                    sSpediteur = getMandantFac().spediteurFindByPrimaryKey(auftragDto.getSpediteurIId())
                            .getCNamedesspediteurs();
                }

                bPoenale = Helper.short2Boolean(auftragDto.getBPoenale());
                bRoHs = Helper.short2Boolean(auftragDto.getBRoHs());
                // Internen Kommentar aus dem Auftrag, abhaengig von einem
                // Mandantenparameter
                ParametermandantDto parameter = getParameterFac().getMandantparameter(theClientDto.getMandant(),
                        ParameterFac.KATEGORIE_FERTIGUNG,
                        ParameterFac.PARAMETER_KOMMENTAR_AM_FERTIGUNGSBEGLEITSCHEIN);
                short iValue = Short.parseShort(parameter.getCWert());
                boolean bDruckeKommentar = Helper.short2boolean(iValue);
                if (bDruckeKommentar) {
                    sInternerKommentar = auftragDto.getXInternerkommentar();
                }
                // Kunde holen
                KundeDto kundeDto = getKundeFac().kundeFindByPrimaryKey(auftragDto.getKundeIIdAuftragsadresse(),
                        theClientDto);

                sKunde = kundeDto.getPartnerDto().getCName1nachnamefirmazeile1();

                KundeDto kundeDtoLieferadresse = getKundeFac()
                        .kundeFindByPrimaryKey(auftragDto.getKundeIIdLieferadresse(), theClientDto);
                sKundeLieferadresse = kundeDtoLieferadresse.getPartnerDto().getCName1nachnamefirmazeile1();

                sAbteilung = kundeDto.getPartnerDto().getCName3vorname2abteilung();

                if (losDto.getAuftragpositionIId() != null) {
                    AuftragpositionDto aufposDto = getAuftragpositionFac()
                            .auftragpositionFindByPrimaryKey(losDto.getAuftragpositionIId());
                    if (aufposDto.getTUebersteuerbarerLiefertermin() != null) {
                        dLiefertermin = aufposDto.getTUebersteuerbarerLiefertermin();
                    } else {
                        dLiefertermin = auftragDto.getDLiefertermin();
                    }
                } else {
                    dLiefertermin = auftragDto.getDLiefertermin();
                }
            } else {
                sAuftragsnummer = "";

                if (losDto.getKundeIId() != null) {
                    KundeDto kundeDto = getKundeFac().kundeFindByPrimaryKey(losDto.getKundeIId(), theClientDto);

                    sKunde = kundeDto.getPartnerDto().getCName1nachnamefirmazeile1();
                } else {
                    sKunde = "";
                }

                sKundeLieferadresse = "";
                dLiefertermin = null;
                sLieferart = "";
                sSpediteur = "";
            }

            mapParameter.put("P_AUFTRAGNUMMER", sAuftragsnummer);
            mapParameter.put("P_AUFTRAG_INTERNERKOMMENTAR", sInternerKommentar);
            mapParameter.put("P_AUFTRAG_KUNDE_ABTEILUNG", sAbteilung);
            mapParameter.put("P_LIEFERART", sLieferart);
            mapParameter.put("P_SPEDITEUR", sSpediteur);
            mapParameter.put("P_POENALE", bPoenale);
            mapParameter.put("P_ROHS", bRoHs);
            KostenstelleDto kstDto = getSystemFac().kostenstelleFindByPrimaryKey(losDto.getKostenstelleIId());
            mapParameter.put("P_KOSTENSTELLENUMMER", kstDto.getCNr());
            mapParameter.put("P_KUNDE", sKunde);
            mapParameter.put("P_KUNDE_LIEFERADRESSE", sKundeLieferadresse);
            mapParameter.put("P_LOSGROESSE", losDto.getNLosgroesse());

            mapParameter.put("P_LOSKLASSEN", getLosLosKlassenAlsString(losDto.getIId()));

            mapParameter.put("P_LOSNUMMER", losDto.getCNr());
            mapParameter.put("P_PRODUKTIONSBEGINN", losDto.getTProduktionsbeginn());
            mapParameter.put("P_PRODUKTIONSENDE", losDto.getTProduktionsende());
            GregorianCalendar gc = new GregorianCalendar();
            gc.setTime(losDto.getTProduktionsende());
            mapParameter.put("P_PRODUKTIONSENDE_KW", new Integer(gc.get(Calendar.WEEK_OF_YEAR)));

            mapParameter.put("P_LIEFERTERMIN", dLiefertermin);

            // Fertigungsort
            if (losDto.getPartnerIIdFertigungsort() != null) {
                PartnerDto partnerDto = getPartnerFac().partnerFindByPrimaryKey(losDto.getPartnerIIdFertigungsort(),
                        theClientDto);
                mapParameter.put("P_FERTIGUNGSORT", partnerDto.formatTitelAnrede());
            }

            // Erstlos
            mapParameter.put("P_ERSTLOS", new Boolean(istErstlos(losDto, theClientDto)));

            boolean bDruckeUeberschriftMaterial = false;
            if (bMitMaterial == true && iSizeMaterial > 0) {
                bDruckeUeberschriftMaterial = true;
            }

            mapParameter.put("P_DRUCKEUEBERSCHRIFTMATERIAL", new Boolean(bDruckeUeberschriftMaterial));

            ArrayList<Object> images = new ArrayList<Object>();
            String sLosStuecklisteArtikelKommentar = "";
            // Bild einfuegen
            String sMengenEinheit = "";
            if (losDto.getStuecklisteIId() != null) {
                StuecklisteDto stuecklisteDto = getStuecklisteFac()
                        .stuecklisteFindByPrimaryKey(losDto.getStuecklisteIId(), theClientDto);
                // Einheit
                if (stuecklisteDto.getArtikelDto() != null) {
                    if (stuecklisteDto.getArtikelDto().getEinheitCNr() != null) {
                        sMengenEinheit = stuecklisteDto.getArtikelDto().getEinheitCNr();
                    }
                }

                // Sperren
                String sperren = getArtikelFac().getArtikelsperrenText(stuecklisteDto.getArtikelIId());

                mapParameter.put("P_STUECKLISTESPERRSTATUS", sperren);

                // Abmessungen
                GeometrieDto geometrieDto = stuecklisteDto.getArtikelDto().getGeometrieDto();
                if (geometrieDto != null) {
                    mapParameter.put(P_ARTIKEL_BREITE, geometrieDto.getFBreite());
                    mapParameter.put(P_ARTIKEL_HOEHE, geometrieDto.getFHoehe());
                    mapParameter.put(P_ARTIKEL_TIEFE, geometrieDto.getFTiefe());
                }
                // Bauform
                VerpackungDto verpackungDto = stuecklisteDto.getArtikelDto().getVerpackungDto();
                if (verpackungDto != null) {
                    mapParameter.put("P_ARTIKEL_BAUFORM", verpackungDto.getCBauform());
                    mapParameter.put("P_ARTIKEL_VERPACKUNGSART", verpackungDto.getCVerpackungsart());
                }

                mapParameter.put("P_INDEX", stuecklisteDto.getArtikelDto().getCIndex());
                mapParameter.put("P_REVISION", stuecklisteDto.getArtikelDto().getCRevision());

                ArtikelkommentarDto[] artikelkommentarDto = getArtikelkommentarFac()
                        .artikelkommentardruckFindByArtikelIIdBelegartCNr(stuecklisteDto.getArtikelIId(),
                                LocaleFac.BELEGART_LOS, theClientDto.getLocUiAsString(), theClientDto);

                if (artikelkommentarDto != null && artikelkommentarDto.length > 0) {

                    for (int j = 0; j < artikelkommentarDto.length; j++) {
                        if (artikelkommentarDto[j].getArtikelkommentarsprDto() != null) {
                            // Text Kommentar
                            if (artikelkommentarDto[j].getDatenformatCNr().trim()
                                    .indexOf(MediaFac.DATENFORMAT_MIMETYPEART_TEXT) != -1) {
                                if (sLosStuecklisteArtikelKommentar == "") {
                                    sLosStuecklisteArtikelKommentar += artikelkommentarDto[j]
                                            .getArtikelkommentarsprDto().getXKommentar();
                                } else {
                                    sLosStuecklisteArtikelKommentar += "\n"
                                            + artikelkommentarDto[j].getArtikelkommentarsprDto().getXKommentar();
                                }
                            } else if (artikelkommentarDto[j].getDatenformatCNr()
                                    .equals(MediaFac.DATENFORMAT_MIMETYPE_IMAGE_JPEG)
                                    || artikelkommentarDto[j].getDatenformatCNr()
                                            .equals(MediaFac.DATENFORMAT_MIMETYPE_IMAGE_PNG)
                                    || artikelkommentarDto[j].getDatenformatCNr()
                                            .equals(MediaFac.DATENFORMAT_MIMETYPE_IMAGE_GIF)) {
                                byte[] bild = artikelkommentarDto[j].getArtikelkommentarsprDto().getOMedia();
                                if (bild != null) {
                                    java.awt.Image myImage = Helper.byteArrayToImage(bild);
                                    images.add(myImage);
                                }
                            } else if (artikelkommentarDto[j].getDatenformatCNr()
                                    .equals(MediaFac.DATENFORMAT_MIMETYPE_IMAGE_TIFF)) {

                                byte[] bild = artikelkommentarDto[j].getArtikelkommentarsprDto().getOMedia();

                                java.awt.Image[] tiffs = Helper.tiffToImageArray(bild);
                                if (tiffs != null) {
                                    for (int k = 0; k < tiffs.length; k++) {
                                        images.add(tiffs[k]);
                                    }
                                }

                            }
                        }
                    }
                }
            }
            mapParameter.put("P_MENGENEINHEIT", sMengenEinheit);
            mapParameter.put("P_PROJEKT", losDto.getCProjekt());
            mapParameter.put("P_LOSKOMMENTAR", losDto.getCKommentar());
            mapParameter.put("P_LOSLANGTEXT", losDto.getXText());

            FertigungsgruppeDto fertGruppeDto = getStuecklisteFac()
                    .fertigungsgruppeFindByPrimaryKey(losDto.getFertigungsgruppeIId());
            mapParameter.put("P_FERTIGUNGSGRUPPE", fertGruppeDto.getCBez());

            // Materialliste?
            if (losDto.getStuecklisteIId() != null) {
                StuecklisteDto stkDto = getStuecklisteFac().stuecklisteFindByPrimaryKey(losDto.getStuecklisteIId(),
                        theClientDto);

                if (sLosStuecklisteArtikelKommentar != "") {
                    mapParameter.put("P_STUECKLISTEARTIKELKOMMENTAR",
                            Helper.formatStyledTextForJasper(sLosStuecklisteArtikelKommentar));
                }

                mapParameter.put("P_STUECKLISTEBEZEICHNUNG", stkDto.getArtikelDto().getArtikelsprDto().getCBez());

                mapParameter.put("P_STUECKLISTEZUSATZBEZEICHNUNG",
                        stkDto.getArtikelDto().getArtikelsprDto().getCZbez());
                mapParameter.put("P_STUECKLISTEZUSATZBEZEICHNUNG2",
                        stkDto.getArtikelDto().getArtikelsprDto().getCZbez2());

                mapParameter.put("P_STUECKLISTEKURZBEZEICHNUNG",
                        stkDto.getArtikelDto().getArtikelsprDto().getCKbez());
                mapParameter.put("P_STUECKLISTEREFERENZNUMMER", stkDto.getArtikelDto().getCReferenznr());

                mapParameter.put("P_STUECKLISTENUMMER", stkDto.getArtikelDto().getCNr());

                mapParameter.put("P_STUECKLISTE_GEWICHTKG", stkDto.getArtikelDto().getFGewichtkg());

                if (stkDto.getArtikelDto().getVerpackungDto() != null) {
                    mapParameter.put("P_STUECKLISTE_BAUFORM",
                            stkDto.getArtikelDto().getVerpackungDto().getCBauform());
                    mapParameter.put("P_STUECKLISTE_VERPACKUNGSART",
                            stkDto.getArtikelDto().getVerpackungDto().getCVerpackungsart());
                }

                if (stkDto.getArtikelDto().getGeometrieDto() != null) {
                    mapParameter.put("P_STUECKLISTE_BREITETEXT",
                            stkDto.getArtikelDto().getGeometrieDto().getCBreitetext());
                    mapParameter.put("P_STUECKLISTE_BREITE", stkDto.getArtikelDto().getGeometrieDto().getFBreite());
                    mapParameter.put("P_STUECKLISTE_HOEHE", stkDto.getArtikelDto().getGeometrieDto().getFHoehe());
                    mapParameter.put("P_STUECKLISTE_TIEFE", stkDto.getArtikelDto().getGeometrieDto().getFTiefe());
                }

                // Stuecklisteneigenschaften
                StuecklisteeigenschaftDto[] stuecklisteeigenschaftDtos = getStuecklisteFac()
                        .stuecklisteeigenschaftFindByStuecklisteIId(losDto.getStuecklisteIId());
                ArrayList<Object[]> al = new ArrayList<Object[]>();
                for (int j = 0; j < stuecklisteeigenschaftDtos.length; j++) {
                    StuecklisteeigenschaftDto dto = stuecklisteeigenschaftDtos[j];

                    Object[] o = new Object[2];
                    String sStklEigenschaftArt = dto.getStuecklisteeigenschaftartDto().getCBez();
                    o[0] = sStklEigenschaftArt;
                    o[1] = dto.getCBez();
                    al.add(o);

                    // Index und Materialplatz auch einzeln an Report uebergeben
                    if (sStklEigenschaftArt.equals(StuecklisteReportFac.REPORT_STUECKLISTE_EIGENSCHAFTEN_INDEX)) {
                        mapParameter.put(P_STUECKLISTENEIGENSCHAFT_INDEX, dto.getCBez());
                    }
                    if (sStklEigenschaftArt
                            .equals(StuecklisteReportFac.REPORT_STUECKLISTE_EIGENSCHAFTEN_MATERIALPLATZ)) {
                        mapParameter.put(P_STUECKLISTENEIGENSCHAFT_MATERIALPLATZ, dto.getCBez());
                    }

                }

                if (stuecklisteeigenschaftDtos.length > 0) {
                    String[] fieldnames = new String[] { "F_EIGENSCHAFTART", "F_BEZEICHNUNG" };
                    Object[][] dataSub = new Object[al.size()][fieldnames.length];
                    dataSub = (Object[][]) al.toArray(dataSub);

                    mapParameter.put("DATENSUBREPORT", new LPDatenSubreport(dataSub, fieldnames));
                }

            } else {
                mapParameter.put("P_STUECKLISTEBEZEICHNUNG", losDto.getCProjekt());
                mapParameter.put("P_STUECKLISTENUMMER", getTextRespectUISpr("fert.materialliste",
                        theClientDto.getMandant(), theClientDto.getLocUi()));
            }

            mapParameter.put("P_SCHNELLANLAGE", bStammtVonSchnellanlage);

            // Formularnummer anhaengen, wenn vorhanden
            String report = FertigungReportFac.REPORT_FERTIGUNGSBEGLEITSCHEIN;

            if (fertGruppeDto.getIFormularnummer() != null) {
                report = report.replace(".", fertGruppeDto.getIFormularnummer() + ".");
            }

            initJRDS(mapParameter, FertigungReportFac.REPORT_MODUL, report, theClientDto.getMandant(),
                    theClientDto.getLocUi(), theClientDto);

            JasperPrintLP print = getReportPrint();
            Integer cachedReportvariante = theClientDto.getReportvarianteIId();
            if (images != null) {
                for (int k = 0; k < images.size(); k++) {
                    mapParameter = new HashMap<String, Object>();
                    mapParameter.put("P_BILD", images.get(k));
                    this.useCase = UC_GANZSEITIGESBILD;
                    this.index = -1;
                    data = new Object[1][1];
                    data[0][0] = images.get(k);
                    theClientDto.setReportvarianteIId(cachedReportvariante);
                    initJRDS(mapParameter, REPORT_MODUL_ALLGEMEIN, REPORT_GANZSEITIGESBILD,
                            theClientDto.getMandant(), theClientDto.getLocUi(), theClientDto);
                    print = Helper.addReport2Report(print, getReportPrint().getPrint());
                }
            }
            return print;
        } catch (RemoteException ex) {
            throwEJBExceptionLPRespectOld(ex);
            return null;
        } finally {
            closeSession(session);
        }
    }

    @TransactionAttribute(TransactionAttributeType.NEVER)
    public JasperPrintLP printAlle(ReportJournalKriterienDto krit, boolean bNurAngelegte,
            Integer fertigungsgruppeIId, TheClientDto theClientDto) throws EJBExceptionLP {
        Session session = null;
        try {
            this.useCase = UC_ALLE;
            this.index = -1;
            Map<String, Object> mapParameter = new TreeMap<String, Object>();
            SessionFactory factory = FLRSessionFactory.getFactory();
            session = factory.openSession();
            Criteria c = session.createCriteria(FLRLosReport.class);
            c.add(Restrictions.eq(FertigungFac.FLR_LOS_MANDANT_C_NR, theClientDto.getMandant()));
            if (krit.kostenstelleIId != null) {
                c.add(Restrictions.eq(FertigungFac.FLR_LOSREPORT_KOSTENSTELLE_I_ID, krit.kostenstelleIId));
            }
            if (bNurAngelegte) {
                c.add(Restrictions.eq(FertigungFac.FLR_LOS_STATUS_C_NR, LocaleFac.STATUS_ANGELEGT));
            }
            if (fertigungsgruppeIId != null) {
                c.add(Restrictions.eq(FertigungFac.FLR_LOSREPORT_FERTIGUNGSGRUPPE_I_ID, fertigungsgruppeIId));

                FertigungsgruppeDto fertigungsgruppeDto = getStuecklisteFac()
                        .fertigungsgruppeFindByPrimaryKey(fertigungsgruppeIId);
                mapParameter.put("P_FERTIGUNGSGRUPPE", fertigungsgruppeDto.getCBez());
            }

            String sVon = null;
            String sBis = null;
            if (krit.dVon != null) {
                c.add(Restrictions.ge(FertigungFac.FLR_LOS_T_PRODUKTIONSBEGINN, krit.dVon));
                sVon = Helper.formatDatum(krit.dVon, theClientDto.getLocUi());
            }
            if (krit.dBis != null) {
                c.add(Restrictions.le(FertigungFac.FLR_LOS_T_PRODUKTIONSBEGINN, krit.dBis));
                sBis = Helper.formatDatum(krit.dBis, theClientDto.getLocUi());
            }
            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(FertigungFac.FLR_LOS_C_NR, sVon));
            }
            if (krit.sBelegnummerBis != null) {
                sBis = HelperServer.getBelegnummernFilterForHibernateCriterias(f, iGeschaeftsjahr, sMandantKuerzel,
                        krit.sBelegnummerBis);
                c.add(Restrictions.le(FertigungFac.FLR_LOS_C_NR, sBis));
            }
            if (krit.bSortiereNachKostenstelle) {
                c.createCriteria(FertigungFac.FLR_LOSREPORT_FLRKOSTENSTELLE).addOrder(Order.asc("c_nr"));
            }
            // if (krit.iSortierung ==
            // ReportJournalKriterienDto.KRIT_SORT_NACH_PARTNER) {
            // c.createCriteria(FertigungFac.FLR_ER_FLRLIEFERANT).createCriteria(
            // LieferantFac.
            // FLR_PARTNER).addOrder(Order.asc(PartnerFac.
            // FLR_PARTNER_NAME1NACHNAMEFIRMAZEILE1));
            // }
            if (krit.iSortierung == ReportJournalKriterienDto.KRIT_SORT_NACH_PARTNER) {
                c.createCriteria(FertigungFac.FLR_LOSREPORT_FLRAUFTRAG)
                        .createCriteria(AuftragFac.FLR_AUFTRAG_FLRKUNDE).createCriteria(KundeFac.FLR_PARTNER)
                        .addOrder(Order.asc(PartnerFac.FLR_PARTNER_C_NAME1NACHNAMEFIRMAZEILE1));
            }
            if (krit.iSortierung == ReportJournalKriterienDto.KRIT_SORT_NACH_BELEGNUMMER) {
                c.addOrder(Order.asc(FertigungFac.FLR_LOS_C_NR));
            }
            List<Object> list = c.list();
            if (krit.iSortierung == ReportJournalKriterienDto.KRIT_SORT_NACH_PARTNER) {
                Criteria c2 = session.createCriteria(FLRLosReport.class);
                c2.add(Restrictions.isNull(FertigungFac.FLR_LOSREPORT_FLRAUFTRAG));
                c2.add(Restrictions.eq(FertigungFac.FLR_LOS_MANDANT_C_NR, theClientDto.getMandant()));
                if (krit.kostenstelleIId != null) {
                    c2.add(Restrictions.eq(FertigungFac.FLR_LOSREPORT_KOSTENSTELLE_I_ID, krit.kostenstelleIId));
                }
                if (bNurAngelegte) {
                    c2.add(Restrictions.eq(FertigungFac.FLR_LOS_STATUS_C_NR, LocaleFac.STATUS_ANGELEGT));
                }
                if (fertigungsgruppeIId != null) {
                    c2.add(Restrictions.eq(FertigungFac.FLR_LOSREPORT_FERTIGUNGSGRUPPE_I_ID, fertigungsgruppeIId));
                }
                if (krit.dVon != null) {
                    c2.add(Restrictions.ge(FertigungFac.FLR_LOS_T_PRODUKTIONSBEGINN, krit.dVon));
                }
                if (krit.dBis != null) {
                    c2.add(Restrictions.le(FertigungFac.FLR_LOS_T_PRODUKTIONSBEGINN, krit.dBis));
                }
                List<?> list2 = c2.list();
                Iterator<?> iter2 = list2.iterator();
                while (iter2.hasNext()) {
                    list.add(iter2.next());
                }
            }

            data = new Object[list.size()][ALLE_FELDANZAHL];
            int i = 0;
            for (Iterator<?> iter = list.iterator(); iter.hasNext(); i++) {
                FLRLosReport los = (FLRLosReport) iter.next();
                LossollarbeitsplanDto[] sollaz = getFertigungFac().lossollarbeitsplanFindByLosIId(los.getI_id());
                BigDecimal bdArbeitszeitIstmenge = new BigDecimal(0);
                BigDecimal bdArbeitszeitSollmenge = new BigDecimal(0);
                BigDecimal bdArbeitszeitIstpreis = new BigDecimal(0);
                BigDecimal bdArbeitszeitSollpreis = new BigDecimal(0);
                for (int j = 0; j < sollaz.length; j++) {
                    bdArbeitszeitSollmenge = bdArbeitszeitSollmenge.add(sollaz[j].getNGesamtzeit());
                    ArtikellieferantDto artikellieferantDto = getArtikelFac().getArtikelEinkaufspreis(
                            sollaz[j].getArtikelIIdTaetigkeit(), new BigDecimal(1),
                            theClientDto.getSMandantenwaehrung(), theClientDto);
                    BigDecimal bdEinzelpreis;
                    if (artikellieferantDto != null) {
                        bdEinzelpreis = artikellieferantDto.getNEinzelpreis();
                    } else {
                        bdEinzelpreis = new BigDecimal(0);
                    }
                    bdArbeitszeitSollpreis = bdArbeitszeitSollpreis
                            .add(sollaz[j].getNGesamtzeit().multiply(bdEinzelpreis));
                }
                AuftragzeitenDto[] zeiten = getZeiterfassungFac().getAllZeitenEinesBeleges(LocaleFac.BELEGART_LOS,
                        los.getI_id(), null, null, null, null, false, false, theClientDto);
                for (int j = 0; j < zeiten.length; j++) {
                    bdArbeitszeitIstmenge = bdArbeitszeitIstmenge
                            .add(new BigDecimal(zeiten[j].getDdDauer().doubleValue()));
                    bdArbeitszeitIstpreis = bdArbeitszeitIstpreis.add(zeiten[j].getBdKosten());
                }
                data[i][ALLE_ARBEITSZEITISTMENGE] = bdArbeitszeitIstmenge;
                data[i][ALLE_ARBEITSZEITISTPREIS] = bdArbeitszeitIstpreis;
                data[i][ALLE_ARBEITSZEITSOLLMENGE] = bdArbeitszeitSollmenge;
                data[i][ALLE_ARBEITSZEITSOLLPREIS] = bdArbeitszeitSollpreis;
                if (los.getFlrstueckliste() != null) {
                    ArtikelDto artikelDto = getArtikelFac().artikelFindByPrimaryKeySmall(
                            los.getFlrstueckliste().getFlrartikel().getI_id(), theClientDto);
                    data[i][ALLE_BEZEICHNUNG] = artikelDto.getArtikelsprDto().getCBez();
                    if (artikelDto.getArtikelsprDto().getCZbez() != null) {
                        data[i][ALLE_ZUSATZBEZEICHNUNG] = artikelDto.getArtikelsprDto().getCZbez();
                    } else {
                        data[i][ALLE_ZUSATZBEZEICHNUNG] = "";
                    }
                    data[i][ALLE_IDENT] = los.getFlrstueckliste().getFlrartikel().getC_nr();
                    data[i][ALLE_OFFENERAHMENRESERVIERUNGEN] = getReservierungFac()
                            .getAnzahlRahmenreservierungen(artikelDto.getIId(), theClientDto);
                } else {
                    data[i][ALLE_BEZEICHNUNG] = los.getC_projekt();
                    data[i][ALLE_BEZEICHNUNG] = null;
                    data[i][ALLE_IDENT] = getTextRespectUISpr("fert.materialliste", theClientDto.getMandant(),
                            theClientDto.getLocUi());
                    data[i][ALLE_OFFENERAHMENRESERVIERUNGEN] = new BigDecimal(0);
                }
                data[i][ALLE_LOSNUMMER] = los.getC_nr();
                LossollmaterialDto[] sollmat = getFertigungFac().lossollmaterialFindByLosIId(los.getI_id());
                BigDecimal bdMaterialIstmenge = new BigDecimal(0);
                BigDecimal bdMaterialSollmenge = new BigDecimal(0);
                BigDecimal bdMaterialIstpreis = new BigDecimal(0);
                BigDecimal bdMaterialSollpreis = new BigDecimal(0);
                for (int j = 0; j < sollmat.length; j++) {
                    BigDecimal bdAusgegebeneMenge = getFertigungFac().getAusgegebeneMenge(sollmat[j].getIId(), null,
                            theClientDto);
                    bdMaterialIstmenge = bdMaterialIstmenge.add(bdAusgegebeneMenge);
                    bdMaterialSollmenge = bdMaterialSollmenge.add(sollmat[j].getNMenge());
                    bdMaterialIstpreis = bdMaterialIstpreis.add(bdAusgegebeneMenge.multiply(
                            getFertigungFac().getAusgegebeneMengePreis(sollmat[j].getIId(), null, theClientDto)));
                    bdMaterialSollpreis = bdMaterialSollpreis
                            .add(sollmat[j].getNMenge().multiply(sollmat[j].getNSollpreis()));
                }
                data[i][ALLE_MATERIALISTMENGE] = bdMaterialIstmenge;
                data[i][ALLE_MATERIALISTPREIS] = bdMaterialIstpreis;
                data[i][ALLE_MATERIALSOLLMENGE] = bdMaterialSollmenge;
                data[i][ALLE_MATERIALSOLLPREIS] = bdMaterialSollpreis;
                data[i][ALLE_BEGINNTERMIN] = los.getT_produktionsbeginn();
                data[i][ALLE_LOSGROESSE] = los.getN_losgroesse();
                if (los.getFlrauftrag() != null) {
                    data[i][ALLE_AUFTRAGLIEFERTERMIN] = los.getFlrauftrag().getT_liefertermin();
                    data[i][ALLE_AUFTRAGSNUMMER] = los.getFlrauftrag().getC_nr();
                    if (los.getFlrauftrag().getFlrkunde() != null) {
                        if (los.getFlrauftrag().getFlrkunde().getFlrpartner() != null) {
                            data[i][ALLE_KUNDE] = los.getFlrauftrag().getFlrkunde().getFlrpartner()
                                    .getC_name1nachnamefirmazeile1();
                        } else {
                            data[i][ALLE_KUNDE] = "";
                        }
                    } else {
                        data[i][ALLE_KUNDE] = "";
                    }
                } else {
                    data[i][ALLE_AUFTRAGSNUMMER] = "";
                    data[i][ALLE_AUFTRAGLIEFERTERMIN] = null;
                }
                if (los.getFlrfertigungsgruppe() != null) {
                    data[i][ALLE_FERTIGUNGSGRUPPE] = los.getFlrfertigungsgruppe().getC_bez();
                } else {
                    data[i][ALLE_FERTIGUNGSGRUPPE] = "";
                }
            }

            StringBuffer sSortierung = new StringBuffer();
            // Sortierung nach Kostenstelle
            sSortierung.append(
                    getTextRespectUISpr("lp.sortierungnach", theClientDto.getMandant(), theClientDto.getLocUi())
                            + ": ");
            mapParameter.put(LPReport.P_SORTIERENACHKOSTENSTELLE, new Boolean(krit.bSortiereNachKostenstelle));
            if (krit.bSortiereNachKostenstelle) {
                sSortierung.append(
                        getTextRespectUISpr("lp.kostenstelle", theClientDto.getMandant(), theClientDto.getLocUi()));
                sSortierung.append(", ");
            }
            // Sortieung nach Kunde
            mapParameter.put(LPReport.P_SORTIERENACHKUNDE,
                    new Boolean(krit.iSortierung == ReportJournalKriterienDto.KRIT_SORT_NACH_PARTNER));
            if (krit.iSortierung == ReportJournalKriterienDto.KRIT_SORT_NACH_PARTNER) {
                sSortierung.append(
                        getTextRespectUISpr("lp.kunde", theClientDto.getMandant(), theClientDto.getLocUi()));
            } else if (krit.iSortierung == ReportJournalKriterienDto.KRIT_SORT_NACH_BELEGNUMMER) {
                sSortierung.append(
                        getTextRespectUISpr("lp.losnr", theClientDto.getMandant(), theClientDto.getLocUi()));
            }
            StringBuffer sFilter = new StringBuffer();
            sFilter.append(
                    getTextRespectUISpr("lp.filter", theClientDto.getMandant(), theClientDto.getLocUi()) + ": ");
            if (bNurAngelegte) {
                sFilter.append(getTextRespectUISpr("lp.nichtausgegebene", theClientDto.getMandant(),
                        theClientDto.getLocUi()) + ", ");
            }
            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());
            }
            mapParameter.put(LPReport.P_SORTIERUNG, sSortierung.toString());
            mapParameter.put("P_VON", krit.dVon);
            mapParameter.put("P_BIS", krit.dBis);
            mapParameter.put(LPReport.P_FILTER, sFilter.toString());
            initJRDS(mapParameter, FertigungReportFac.REPORT_MODUL, FertigungReportFac.REPORT_ALLE,
                    theClientDto.getMandant(), theClientDto.getLocUi(), theClientDto);
            return getReportPrint();
        } catch (RemoteException t) {
            throwEJBExceptionLPRespectOld(t);
            return null;
        } finally {
            closeSession(session);
        }
    }

    @TransactionAttribute(TransactionAttributeType.NEVER)
    public JasperPrintLP printOffene(java.sql.Date dStichtag, int iOptionStichtag, String belegNrVon,
            String belegNrBis, Integer kundeIId, Integer kostenstelleIId, Integer fertigungsgruppeIId,
            int iSortierung, TheClientDto theClientDto) throws EJBExceptionLP {
        Session session = null;

        try {
            this.useCase = UC_OFFENE;
            this.index = -1;
            SessionFactory factory = FLRSessionFactory.getFactory();
            session = factory.openSession();
            Criteria c = session.createCriteria(FLRLosReport.class);
            c.add(Restrictions.eq(FertigungFac.FLR_LOS_MANDANT_C_NR, theClientDto.getMandant()));
            Map<String, Object> mapParameter = new TreeMap<String, Object>();

            if (kostenstelleIId != null) {
                KostenstelleDto kostenstelleDto = getSystemFac().kostenstelleFindByPrimaryKey(kostenstelleIId);
                mapParameter.put("P_KOSTENSTELLE", kostenstelleDto.formatKostenstellenbezeichnung());

                c.add(Restrictions.eq(FertigungFac.FLR_LOSREPORT_KOSTENSTELLE_I_ID, kostenstelleIId));
            }
            boolean flrAuftragSchonVerwendet = false;
            if (kundeIId != null) {
                KundeDto kundeDto = getKundeFac().kundeFindByPrimaryKey(kundeIId, theClientDto);
                mapParameter.put("P_KUNDE", kundeDto.getPartnerDto().formatFixTitelName1Name2());
                c.createAlias(FertigungFac.FLR_LOSREPORT_FLRAUFTRAG, "a", CriteriaSpecification.LEFT_JOIN);
                flrAuftragSchonVerwendet = true;
                c.add(Restrictions.eq("a." + AuftragFac.FLR_AUFTRAG_KUNDE_I_ID_AUFTRAGSADRESSE, kundeIId));
            }
            if (fertigungsgruppeIId != null) {
                c.add(Restrictions.eq(FertigungFac.FLR_LOSREPORT_FERTIGUNGSGRUPPE_I_ID, fertigungsgruppeIId));
            }

            String[] stati = new String[4];
            stati[0] = LocaleFac.STATUS_AUSGEGEBEN;
            stati[1] = LocaleFac.STATUS_IN_PRODUKTION;
            stati[2] = LocaleFac.STATUS_TEILERLEDIGT;
            stati[3] = LocaleFac.STATUS_ANGELEGT;

            c.add(Restrictions.in(FertigungFac.FLR_LOS_STATUS_C_NR, stati));

            if (dStichtag != null) {

                dStichtag = Helper.cutDate(dStichtag);

                // PJ 14420
                mapParameter.put("P_STICHTAG", dStichtag);

                Calendar cal = Calendar.getInstance();
                cal.setTimeInMillis(dStichtag.getTime());
                cal.set(Calendar.DATE, cal.get(Calendar.DATE) + 1);

                dStichtag = new java.sql.Date(cal.getTimeInMillis());

                String datumsart = "";

                if (iOptionStichtag == FertigungReportFac.OFFENE_OPTION_STICHTAG_BEGINNDATUM) {
                    c.add(Restrictions.lt(FertigungFac.FLR_LOS_T_PRODUKTIONSBEGINN, dStichtag));

                    datumsart = getTextRespectUISpr("lp.begintermin", theClientDto.getMandant(),
                            theClientDto.getLocUi());

                } else if (iOptionStichtag == FertigungReportFac.OFFENE_OPTION_STICHTAG_ENDEDATUM) {
                    c.add(Restrictions.lt(FertigungFac.FLR_LOS_T_PRODUKTIONSENDE, dStichtag));
                    datumsart = getTextRespectUISpr("lp.endetermin", theClientDto.getMandant(),
                            theClientDto.getLocUi());

                } else if (iOptionStichtag == FertigungReportFac.OFFENE_OPTION_STICHTAG_LIEFERTERMIN) {
                    if (flrAuftragSchonVerwendet == false) {
                        c.createAlias(FertigungFac.FLR_LOSREPORT_FLRAUFTRAG, "a", CriteriaSpecification.LEFT_JOIN);
                        flrAuftragSchonVerwendet = true;
                        c.add(Restrictions.lt("a." + AuftragFac.FLR_AUFTRAG_T_LIEFERTERMIN, dStichtag));

                    }
                    datumsart = getTextRespectUISpr("bes.liefertermin", theClientDto.getMandant(),
                            theClientDto.getLocUi());

                }

                mapParameter.put("P_DATUMSART", datumsart);

            }
            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 (belegNrVon != null) {
                String sVon = HelperServer.getBelegnummernFilterForHibernateCriterias(f, iGeschaeftsjahr,
                        sMandantKuerzel, belegNrVon);
                c.add(Restrictions.ge(FertigungFac.FLR_LOS_C_NR, sVon));
                mapParameter.put("P_LOSNRVON", sVon);
            }
            if (belegNrBis != null) {
                String sBis = HelperServer.getBelegnummernFilterForHibernateCriterias(f, iGeschaeftsjahr,
                        sMandantKuerzel, belegNrBis);
                c.add(Restrictions.le(FertigungFac.FLR_LOS_C_NR, sBis));
                mapParameter.put("P_LOSNRBIS", sBis);
            }

            // Sortierung
            if (iSortierung == FertigungReportFac.OFFENE_OPTION_SORTIERUNG_KOSTENSTELLE) {
                c.createCriteria(FertigungFac.FLR_LOSREPORT_FLRKOSTENSTELLE).addOrder(Order.asc("c_nr"));
                mapParameter.put(P_SORTIERUNG,
                        getTextRespectUISpr("lp.kostenstelle", theClientDto.getMandant(), theClientDto.getLocUi()));
            } else if (iSortierung == FertigungReportFac.OFFENE_OPTION_SORTIERUNG_KUNDE) {
                if (flrAuftragSchonVerwendet == false) {
                    c.createAlias(FertigungFac.FLR_LOSREPORT_FLRAUFTRAG, "a", CriteriaSpecification.LEFT_JOIN);
                    flrAuftragSchonVerwendet = true;
                }
                c.createAlias("a." + AuftragFac.FLR_AUFTRAG_FLRKUNDE, "k", CriteriaSpecification.LEFT_JOIN);
                c.createAlias("k." + KundeFac.FLR_PARTNER, "p", CriteriaSpecification.LEFT_JOIN);

                c.addOrder(Order.asc("p." + PartnerFac.FLR_PARTNER_C_NAME1NACHNAMEFIRMAZEILE1));
                c.addOrder(Order.asc("k.i_id"));

                mapParameter.put(P_SORTIERUNG,
                        getTextRespectUISpr("lp.kunde", theClientDto.getMandant(), theClientDto.getLocUi()));
            } else if (iSortierung == FertigungReportFac.OFFENE_OPTION_SORTIERUNG_KUNDEUNDGEWAEHLTERTERMIN) {
                if (flrAuftragSchonVerwendet == false) {
                    c.createAlias(FertigungFac.FLR_LOSREPORT_FLRAUFTRAG, "a", CriteriaSpecification.LEFT_JOIN);
                    flrAuftragSchonVerwendet = true;
                }
                c.createAlias("a." + AuftragFac.FLR_AUFTRAG_FLRKUNDE, "k", CriteriaSpecification.LEFT_JOIN);
                c.createAlias("k." + KundeFac.FLR_PARTNER, "p", CriteriaSpecification.LEFT_JOIN);

                c.addOrder(Order.asc("p." + PartnerFac.FLR_PARTNER_C_NAME1NACHNAMEFIRMAZEILE1));

                if (iOptionStichtag == FertigungReportFac.OFFENE_OPTION_STICHTAG_BEGINNDATUM) {
                    c.addOrder(Order.asc(FertigungFac.FLR_LOS_T_PRODUKTIONSBEGINN));
                } else if (iOptionStichtag == FertigungReportFac.OFFENE_OPTION_STICHTAG_ENDEDATUM) {
                    c.addOrder(Order.asc(FertigungFac.FLR_LOS_T_PRODUKTIONSENDE));
                } else if (iOptionStichtag == FertigungReportFac.OFFENE_OPTION_STICHTAG_LIEFERTERMIN) {
                    c.addOrder(Order.asc("a." + AuftragFac.FLR_AUFTRAG_T_LIEFERTERMIN));
                }

                mapParameter.put(P_SORTIERUNG, getTextRespectUISpr("fert.kundeundtermin", theClientDto.getMandant(),
                        theClientDto.getLocUi()));
            } else if (iSortierung == FertigungReportFac.OFFENE_OPTION_SORTIERUNG_LIEFERTERMIN) {
                if (flrAuftragSchonVerwendet == false) {
                    c.createAlias(FertigungFac.FLR_LOSREPORT_FLRAUFTRAG, "a", CriteriaSpecification.LEFT_JOIN);
                    flrAuftragSchonVerwendet = true;
                }
                c.createAlias("a." + AuftragFac.FLR_AUFTRAG_FLRKUNDE, "k", CriteriaSpecification.LEFT_JOIN);
                c.createAlias("k." + KundeFac.FLR_PARTNER, "p", CriteriaSpecification.LEFT_JOIN);

                c.addOrder(Order.asc("a." + AuftragFac.FLR_AUFTRAG_T_LIEFERTERMIN));
                c.addOrder(Order.asc("p." + PartnerFac.FLR_PARTNER_C_NAME1NACHNAMEFIRMAZEILE1));

                mapParameter.put(P_SORTIERUNG, getTextRespectUISpr("fert.liefertermin", theClientDto.getMandant(),
                        theClientDto.getLocUi()));
            } else if (iSortierung == FertigungReportFac.OFFENE_OPTION_SORTIERUNG_ARTIKEL) {
                c.createAlias(FertigungFac.FLR_LOS_FLRSTUECKLISTE, "s");
                c.createAlias("s." + StuecklisteFac.FLR_STUECKLISTE_FLRARTIKEL, "art");
                c.addOrder(Order.asc("art.c_nr"));
                mapParameter.put(P_SORTIERUNG,
                        getTextRespectUISpr("lp.kunde", theClientDto.getMandant(), theClientDto.getLocUi()));
            } else if (iSortierung == FertigungReportFac.OFFENE_OPTION_SORTIERUNG_FERTIGUNGSGRUPPE) {
                c.createAlias(FertigungFac.FLR_LOSREPORT_FLRFERTIGUNGSGRUPPE, "f");
                c.addOrder(Order.asc("f.c_bez"));
                mapParameter.put(P_SORTIERUNG, getTextRespectUISpr("lp.fertigungsgruppe", theClientDto.getMandant(),
                        theClientDto.getLocUi()));
            } else if (iSortierung == FertigungReportFac.OFFENE_OPTION_SORTIERUNG_BEGINN) {
                c.addOrder(Order.asc(FertigungFac.FLR_LOS_T_PRODUKTIONSBEGINN));
                mapParameter.put(P_SORTIERUNG,
                        getTextRespectUISpr("lp.beginn", theClientDto.getMandant(), theClientDto.getLocUi()));
            } else if (iSortierung == FertigungReportFac.OFFENE_OPTION_SORTIERUNG_ENDE) {
                c.addOrder(Order.asc(FertigungFac.FLR_LOS_T_PRODUKTIONSENDE));
                mapParameter.put(P_SORTIERUNG,
                        getTextRespectUISpr("lp.ende", theClientDto.getMandant(), theClientDto.getLocUi()));
            } else {
                mapParameter.put(P_SORTIERUNG,
                        getTextRespectUISpr("lp.losnr", theClientDto.getMandant(), theClientDto.getLocUi()));
            }

            // 2tes sortierkriterium immer Losnr

            if (iSortierung == FertigungReportFac.OFFENE_OPTION_SORTIERUNG_BEGINN
                    || iSortierung == FertigungReportFac.OFFENE_OPTION_SORTIERUNG_ENDE
                    || iSortierung == FertigungReportFac.OFFENE_OPTION_SORTIERUNG_LIEFERTERMIN
                    || iSortierung == FertigungReportFac.OFFENE_OPTION_SORTIERUNG_KUNDEUNDGEWAEHLTERTERMIN) {
                if (flrAuftragSchonVerwendet == false) {
                    c.createAlias(FertigungFac.FLR_LOSREPORT_FLRAUFTRAG, "a", CriteriaSpecification.LEFT_JOIN);
                    flrAuftragSchonVerwendet = true;
                }
                c.addOrder(Order.asc("a.c_nr"));
            } else {

                c.addOrder(Order.asc(FertigungFac.FLR_LOS_C_NR));
            }

            List<?> list = c.list();
            data = new Object[list.size()][OFFENE_SPALTENANZAHL];
            int i = 0;
            for (Iterator<?> iter = list.iterator(); iter.hasNext(); i++) {
                FLRLosReport los = (FLRLosReport) iter.next();

                if (los.getFlrauftrag() != null) {

                    Integer partnerIId = los.getFlrauftrag().getFlrkunde().getFlrpartner().getI_id();
                    PartnerDto partnerDto = getPartnerFac().partnerFindByPrimaryKey(partnerIId, theClientDto);
                    data[i][OFFENE_KUNDE] = partnerDto.formatFixTitelName1Name2();
                    data[i][OFFENE_AUFTRAGSPOENALE] = los.getFlrauftrag().getB_poenale();
                }

                if (los.getFlrauftrag() != null) {
                    data[i][OFFENE_AUFTRAGSNUMMER] = los.getFlrauftrag().getC_nr();
                    data[i][OFFENE_PROJEKT] = los.getFlrauftrag().getC_bez();
                    data[i][OFFENE_LIEFERTERMIN] = los.getFlrauftrag().getT_liefertermin();
                }
                BigDecimal bdGeliefert = new BigDecimal(0);
                for (Iterator<?> iter2 = los.getAblieferungset().iterator(); iter2.hasNext();) {
                    FLRLosablieferung item = (FLRLosablieferung) iter2.next();
                    bdGeliefert = bdGeliefert.add(item.getN_menge());
                }
                data[i][OFFENE_GELIEFERT] = bdGeliefert;
                if (los.getFlrstueckliste() != null) {
                    ArtikelDto artikelDto = getArtikelFac().artikelFindByPrimaryKeySmall(
                            los.getFlrstueckliste().getFlrartikel().getI_id(), theClientDto);
                    data[i][OFFENE_BEZEICHNUNG] = artikelDto.getArtikelsprDto().getCBez();
                    data[i][OFFENE_ZUSATZBEZEICHNUNG] = artikelDto.getArtikelsprDto().getCZbez();
                    data[i][OFFENE_ARTIKELNUMMER] = los.getFlrstueckliste().getFlrartikel().getC_nr();

                    data[i][OFFENE_DETAILBEDARF] = getRahmenbedarfeFac()
                            .getSummeAllerRahmenbedarfeEinesArtikels(artikelDto.getIId());

                    // Offene Fehlmengen
                    data[i][OFFENE_FEHLMENGE] = getFehlmengeFac()
                            .getAnzahlFehlmengeEinesArtikels(artikelDto.getIId(), theClientDto);

                    LossollarbeitsplanDto[] lossollarbeitsplanDto = getFertigungFac()
                            .lossollarbeitsplanFindByLosIId(los.getI_id());

                    BigDecimal bdFertigungszeit = new BigDecimal(0);
                    for (int j = 0; lossollarbeitsplanDto.length > j; j++) {
                        bdFertigungszeit = bdFertigungszeit.add(lossollarbeitsplanDto[j].getNGesamtzeit());
                    }
                    data[i][OFFENE_FERTIGUNGSZEIT] = bdFertigungszeit;

                    // Rahmenbestellt
                    Hashtable<?, ?> htRahmenbestellt = getArtikelbestelltFac()
                            .getAnzahlRahmenbestellt(artikelDto.getIId(), theClientDto);
                    if (htRahmenbestellt.containsKey(ArtikelbestelltFac.KEY_RAHMENBESTELLT_ANZAHL)) {
                        BigDecimal bdAnzahlRahmenbestellt = (BigDecimal) htRahmenbestellt
                                .get(ArtikelbestelltFac.KEY_RAHMENBESTELLT_ANZAHL);
                        data[i][OFFENE_RAHMEN_BESTELLT] = bdAnzahlRahmenbestellt;
                    }
                    data[i][OFFENE_RESERVIERUNGEN] = getReservierungFac()
                            .getAnzahlReservierungen(artikelDto.getIId(), theClientDto);

                    data[i][OFFENE_RAHMENRESERVIERUNGEN] = getReservierungFac()
                            .getAnzahlRahmenreservierungen(artikelDto.getIId(), theClientDto);

                } else {
                    data[i][OFFENE_BEZEICHNUNG] = los.getC_projekt();
                    data[i][OFFENE_ZUSATZBEZEICHNUNG] = null;
                    data[i][OFFENE_ARTIKELNUMMER] = getTextRespectUISpr("fert.materialliste",
                            theClientDto.getMandant(), theClientDto.getLocUi());
                }

                GregorianCalendar gc = new GregorianCalendar();
                gc.setTime(los.getT_produktionsbeginn());
                data[i][OFFENE_KALENDERWOCHE] = new Integer(gc.get(GregorianCalendar.WEEK_OF_YEAR));
                data[i][OFFENE_LOSGROESSE] = los.getN_losgroesse();
                data[i][OFFENE_LOSNUMMER] = los.getC_nr();
                data[i][OFFENE_FERTIGUNGSGRUPPE] = los.getFlrfertigungsgruppe().getC_bez();
                /**
                 * @todo material PJ 4239
                 */
                data[i][OFFENE_MATERIAL] = null;
                data[i][OFFENE_BEGINN] = los.getT_produktionsbeginn();
                data[i][OFFENE_ENDE] = los.getT_produktionsende();
                data[i][OFFENE_LOSSTATUS] = los.getStatus_c_nr();

                // PJ 15009

                String queryf = "select sum(flrfehlmenge.n_menge) FROM FLRFehlmenge flrfehlmenge WHERE flrfehlmenge.flrlossollmaterial.flrlos = "
                        + los.getI_id() + " AND flrfehlmenge.n_menge>0";
                Session session2 = FLRSessionFactory.getFactory().openSession();
                Query query = session2.createQuery(queryf);
                List<?> results = query.list();

                data[i][OFFENE_LOSHATFEHLMENGE] = new Boolean(false);
                if (results.size() > 0) {
                    BigDecimal bd = (BigDecimal) results.iterator().next();

                    if (bd != null && bd.doubleValue() > 0) {
                        data[i][OFFENE_LOSHATFEHLMENGE] = new Boolean(true);
                    }
                }
                session2.close();
            }

            initJRDS(mapParameter, FertigungReportFac.REPORT_MODUL, FertigungReportFac.REPORT_OFFENE,
                    theClientDto.getMandant(), theClientDto.getLocUi(), theClientDto);
            return getReportPrint();
        } catch (Exception t) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER, t);
        } finally {
            closeSession(session);
        }
    }

    @TransactionAttribute(TransactionAttributeType.NEVER)
    public JasperPrintLP printOffeneArbeitsgaenge(java.sql.Date dStichtag, int iOptionStichtag, String belegNrVon,
            String belegNrBis, Integer kundeIId, Integer kostenstelleIId, Integer fertigungsgruppeIId,
            Integer artikelgruppeIId, Integer maschineIId, boolean bSollstundenbetrachtung,
            TheClientDto theClientDto) {
        Session session = null;

        try {
            this.useCase = UC_OFFENE_AG;
            this.index = -1;
            SessionFactory factory = FLRSessionFactory.getFactory();
            session = factory.openSession();
            Criteria c = session.createCriteria(FLRLossollarbeitsplan.class);

            c.createAlias(FertigungFac.FLR_LOSSOLLARBEITSPLAN_FLRLOS, "l", CriteriaSpecification.LEFT_JOIN);

            c.add(Restrictions.eq("l." + FertigungFac.FLR_LOS_MANDANT_C_NR, theClientDto.getMandant()));

            c.add(Restrictions.eq(FertigungFac.FLR_LOSSOLLARBEITSPLAN_B_FERTIG, Helper.boolean2Short(false)));

            Map<String, Object> mapParameter = new TreeMap<String, Object>();
            mapParameter.put("P_SOLLSTUNDENBETRACHTUNG", new Boolean(bSollstundenbetrachtung));
            if (artikelgruppeIId != null) {
                c.createAlias(FertigungFac.FLR_LOSSOLLARBEITSPLAN_FLRARTIKEL, "artikel",
                        CriteriaSpecification.LEFT_JOIN);
                c.createAlias("artikel." + ArtikelFac.FLR_ARTIKEL_FLRARTIKELGRUPPE, "artikelgruppe",
                        CriteriaSpecification.LEFT_JOIN);
                c.add(Restrictions.eq("artikelgruppe.i_id", artikelgruppeIId));

                ArtgruDto artgruDto = getArtikelFac().artgruFindByPrimaryKey(artikelgruppeIId, theClientDto);

                mapParameter.put("P_ARTIKELGRUPPE", artgruDto.getBezeichnung());
            }

            /*
             * if (kostenstelleIId != null) { KostenstelleDto kostenstelleDto =
             * getSystemFac() .kostenstelleFindByPrimaryKey(kostenstelleIId);
             * mapParameter.put("P_KOSTENSTELLE",
             * kostenstelleDto.formatKostenstellenbezeichnung());
             * 
             * c.add(Restrictions.eq("l." +
             * FertigungFac.FLR_LOSREPORT_KOSTENSTELLE_I_ID, kostenstelleIId));
             * }
             */
            boolean flrAuftragSchonVerwendet = false;
            if (kundeIId != null) {
                KundeDto kundeDto = getKundeFac().kundeFindByPrimaryKey(kundeIId, theClientDto);
                mapParameter.put("P_KUNDE", kundeDto.getPartnerDto().formatFixTitelName1Name2());
                c.createAlias("l." + FertigungFac.FLR_LOSREPORT_FLRAUFTRAG, "a", CriteriaSpecification.LEFT_JOIN);
                flrAuftragSchonVerwendet = true;
                c.add(Restrictions.eq("a." + AuftragFac.FLR_AUFTRAG_KUNDE_I_ID_AUFTRAGSADRESSE, kundeIId));
            }

            String[] stati = new String[4];
            stati[0] = LocaleFac.STATUS_AUSGEGEBEN;
            stati[1] = LocaleFac.STATUS_IN_PRODUKTION;
            stati[2] = LocaleFac.STATUS_TEILERLEDIGT;
            stati[3] = LocaleFac.STATUS_ANGELEGT;

            c.add(Restrictions.in("l." + FertigungFac.FLR_LOS_STATUS_C_NR, stati));

            if (dStichtag != null) {

                dStichtag = Helper.cutDate(dStichtag);

                // PJ 14420
                mapParameter.put("P_STICHTAG", dStichtag);

                Calendar cal = Calendar.getInstance();
                cal.setTimeInMillis(dStichtag.getTime());
                cal.set(Calendar.DATE, cal.get(Calendar.DATE) + 1);

                dStichtag = new java.sql.Date(cal.getTimeInMillis());

                String datumsart = "";

                if (iOptionStichtag == FertigungReportFac.OFFENE_OPTION_STICHTAG_BEGINNDATUM) {
                    c.add(Restrictions.lt("l." + FertigungFac.FLR_LOS_T_PRODUKTIONSBEGINN, dStichtag));

                    datumsart = getTextRespectUISpr("lp.begintermin", theClientDto.getMandant(),
                            theClientDto.getLocUi());

                } else if (iOptionStichtag == FertigungReportFac.OFFENE_OPTION_STICHTAG_ENDEDATUM) {
                    c.add(Restrictions.lt("l." + FertigungFac.FLR_LOS_T_PRODUKTIONSENDE, dStichtag));
                    datumsart = getTextRespectUISpr("lp.endetermin", theClientDto.getMandant(),
                            theClientDto.getLocUi());

                } else if (iOptionStichtag == FertigungReportFac.OFFENE_OPTION_STICHTAG_LIEFERTERMIN) {
                    if (flrAuftragSchonVerwendet == false) {
                        c.createAlias("l." + FertigungFac.FLR_LOSREPORT_FLRAUFTRAG, "a",
                                CriteriaSpecification.LEFT_JOIN);
                        flrAuftragSchonVerwendet = true;
                        c.add(Restrictions.lt("a." + AuftragFac.FLR_AUFTRAG_T_LIEFERTERMIN, dStichtag));

                    }
                    datumsart = getTextRespectUISpr("bes.liefertermin", theClientDto.getMandant(),
                            theClientDto.getLocUi());

                }

                mapParameter.put("P_DATUMSART", datumsart);

            }
            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 (belegNrVon != null) {
                String sVon = HelperServer.getBelegnummernFilterForHibernateCriterias(f, iGeschaeftsjahr,
                        sMandantKuerzel, belegNrVon);
                c.add(Restrictions.ge("l." + FertigungFac.FLR_LOS_C_NR, sVon));
                mapParameter.put("P_LOSNRVON", sVon);
            }
            if (belegNrBis != null) {
                String sBis = HelperServer.getBelegnummernFilterForHibernateCriterias(f, iGeschaeftsjahr,
                        sMandantKuerzel, belegNrBis);
                c.add(Restrictions.le("l." + FertigungFac.FLR_LOS_C_NR, sBis));
                mapParameter.put("P_LOSNRBIS", sBis);
            }

            if (maschineIId != null) {
                MaschineDto mDto = getZeiterfassungFac().maschineFindByPrimaryKey(maschineIId);
                c.add(Restrictions.eq("maschine_i_id", maschineIId));
                mapParameter.put("P_MASCHINE", mDto.getBezeichnung());
            }

            List<?> list = c.list();
            data = new Object[list.size()][OFFENE_AG_SPALTENANZAHL];
            int i = 0;
            for (Iterator<?> iter = list.iterator(); iter.hasNext(); i++) {
                FLRLossollarbeitsplan a = (FLRLossollarbeitsplan) iter.next();
                FLRLos los = a.getFlrlos();
                if (fertigungsgruppeIId != null && kostenstelleIId != null) {
                    if (los.getFertigungsgruppe_i_id().intValue() != fertigungsgruppeIId.intValue()
                            && los.getKostenstelle_i_id().intValue() != kostenstelleIId.intValue()) {
                        i--;
                    } else {
                        // skip
                    }
                } else if (fertigungsgruppeIId != null && kostenstelleIId == null) {
                    if (los.getFertigungsgruppe_i_id().intValue() != fertigungsgruppeIId.intValue()) {
                        i--;
                    } else {
                        // skip
                    }
                } else if (fertigungsgruppeIId == null && kostenstelleIId != null) {
                    if (los.getKostenstelle_i_id().intValue() != kostenstelleIId.intValue()) {
                        i--;
                    } else {
                        // skip
                    }
                }
            }
            if (fertigungsgruppeIId != null || kostenstelleIId != null) {
                data = new Object[i][OFFENE_AG_SPALTENANZAHL];
            }
            i = 0;
            for (Iterator<?> iter = list.iterator(); iter.hasNext(); i++) {
                FLRLossollarbeitsplan a = (FLRLossollarbeitsplan) iter.next();
                FLRLos los = a.getFlrlos();
                if (fertigungsgruppeIId != null && kostenstelleIId != null) {
                    if (los.getFertigungsgruppe_i_id().intValue() != fertigungsgruppeIId.intValue()
                            && los.getKostenstelle_i_id().intValue() != kostenstelleIId.intValue()) {
                        i--;
                    } else {
                        data[i][OFFENE_AG_AGNUMMER] = a.getI_arbeitsgangsnummer();
                        data[i][OFFENE_AG_UAGNUMMER] = a.getI_unterarbeitsgang();
                        data[i][OFFENE_AG_AG_ARTIKEL] = a.getFlrartikel().getC_nr();
                        ArtikelDto aDto = getArtikelFac().artikelFindByPrimaryKeySmall(a.getFlrartikel().getI_id(),
                                theClientDto);
                        data[i][OFFENE_AG_AG_ARTIKELBEZEICHNUNG] = aDto.formatBezeichnung();

                        if (Helper.short2boolean(a.getB_fertig())) {
                            data[i][OFFENE_AG_AG_GESAMTZEIT] = new BigDecimal(0);
                        } else {

                            data[i][OFFENE_AG_AG_GESAMTZEIT] = a.getN_gesamtzeit();
                        }

                        if (bSollstundenbetrachtung == true) {
                            data[i][OFFENE_AG_AG_ISTZEIT] = getZeiterfassungFac().getSummeZeitenEinesBeleges(
                                    LocaleFac.BELEGART_LOS, los.getI_id(), a.getI_id(), null, null, null,
                                    theClientDto);

                        }

                        if (a.getFlrmaschine() != null) {
                            data[i][OFFENE_AG_AG_MASCHINE_BEZEICHNUNG] = a.getFlrmaschine().getC_bez();
                            data[i][OFFENE_AG_AG_MASCHINE_IDENTIFIKATIONSNUMMMER] = a.getFlrmaschine()
                                    .getC_identifikationsnr();
                            data[i][OFFENE_AG_AG_MASCHINE_INVENTARNUMMMER] = a.getFlrmaschine()
                                    .getC_inventarnummer();
                        }

                        if (a.getFlrartikel().getFlrartikelgruppe() != null) {
                            data[i][OFFENE_AG_AG_ARTIKELGRUPPPE] = a.getFlrartikel().getFlrartikelgruppe()
                                    .getC_nr();
                        } else {
                            data[i][OFFENE_AG_AG_ARTIKELGRUPPPE] = "";
                        }

                        if (a.getI_maschinenversatztage() != null) {
                            data[i][OFFENE_AG_AG_BEGINN] = Helper.addiereTageZuTimestamp(
                                    (Timestamp) los.getT_produktionsbeginn(), a.getI_maschinenversatztage());

                        } else {
                            data[i][OFFENE_AG_AG_BEGINN] = los.getT_produktionsbeginn();

                        }

                        if (los.getFlrauftrag() != null) {

                            Integer partnerIId = los.getFlrauftrag().getFlrkunde().getFlrpartner().getI_id();
                            PartnerDto partnerDto = getPartnerFac().partnerFindByPrimaryKey(partnerIId,
                                    theClientDto);
                            data[i][OFFENE_AG_KUNDE] = partnerDto.formatFixTitelName1Name2();
                            data[i][OFFENE_AG_AUFTRAGSPOENALE] = los.getFlrauftrag().getB_poenale();
                        }

                        if (los.getFlrauftrag() != null) {
                            data[i][OFFENE_AG_AUFTRAGSNUMMER] = los.getFlrauftrag().getC_nr();
                            data[i][OFFENE_AG_PROJEKT] = los.getFlrauftrag().getC_bez();
                            data[i][OFFENE_AG_LIEFERTERMIN] = los.getFlrauftrag().getT_liefertermin();
                        }
                        BigDecimal bdGeliefert = new BigDecimal(0);
                        for (Iterator<?> iter2 = los.getAblieferungset().iterator(); iter2.hasNext();) {
                            FLRLosablieferung item = (FLRLosablieferung) iter2.next();
                            bdGeliefert = bdGeliefert.add(item.getN_menge());
                        }
                        data[i][OFFENE_AG_GELIEFERT] = bdGeliefert;
                        if (los.getFlrstueckliste() != null) {
                            ArtikelDto artikelDto = getArtikelFac().artikelFindByPrimaryKeySmall(
                                    los.getFlrstueckliste().getFlrartikel().getI_id(), theClientDto);
                            data[i][OFFENE_AG_BEZEICHNUNG] = artikelDto.getArtikelsprDto().getCBez();
                            data[i][OFFENE_AG_ZUSATZBEZEICHNUNG] = artikelDto.getArtikelsprDto().getCZbez();
                            data[i][OFFENE_AG_ARTIKELNUMMER] = los.getFlrstueckliste().getFlrartikel().getC_nr();

                            data[i][OFFENE_AG_DETAILBEDARF] = getRahmenbedarfeFac()
                                    .getSummeAllerRahmenbedarfeEinesArtikels(artikelDto.getIId());

                            // Offene Fehlmengen
                            data[i][OFFENE_AG_FEHLMENGE] = getFehlmengeFac()
                                    .getAnzahlFehlmengeEinesArtikels(artikelDto.getIId(), theClientDto);

                            LossollarbeitsplanDto[] lossollarbeitsplanDto = getFertigungFac()
                                    .lossollarbeitsplanFindByLosIId(los.getI_id());

                            BigDecimal bdFertigungszeit = new BigDecimal(0);
                            for (int j = 0; lossollarbeitsplanDto.length > j; j++) {
                                bdFertigungszeit = bdFertigungszeit.add(lossollarbeitsplanDto[j].getNGesamtzeit());
                            }
                            data[i][OFFENE_AG_FERTIGUNGSZEIT] = bdFertigungszeit;

                            // Rahmenbestellt
                            Hashtable<?, ?> htRahmenbestellt = getArtikelbestelltFac()
                                    .getAnzahlRahmenbestellt(artikelDto.getIId(), theClientDto);
                            if (htRahmenbestellt.containsKey(ArtikelbestelltFac.KEY_RAHMENBESTELLT_ANZAHL)) {
                                BigDecimal bdAnzahlRahmenbestellt = (BigDecimal) htRahmenbestellt
                                        .get(ArtikelbestelltFac.KEY_RAHMENBESTELLT_ANZAHL);
                                data[i][OFFENE_AG_RAHMEN_BESTELLT] = bdAnzahlRahmenbestellt;
                            }
                            data[i][OFFENE_AG_RESERVIERUNGEN] = getReservierungFac()
                                    .getAnzahlReservierungen(artikelDto.getIId(), theClientDto);

                            data[i][OFFENE_AG_RAHMENRESERVIERUNGEN] = getReservierungFac()
                                    .getAnzahlRahmenreservierungen(artikelDto.getIId(), theClientDto);

                        } else {
                            data[i][OFFENE_AG_BEZEICHNUNG] = los.getC_projekt();
                            data[i][OFFENE_AG_ZUSATZBEZEICHNUNG] = null;
                            data[i][OFFENE_AG_ARTIKELNUMMER] = getTextRespectUISpr("fert.materialliste",
                                    theClientDto.getMandant(), theClientDto.getLocUi());
                        }

                        GregorianCalendar gc = new GregorianCalendar();
                        gc.setTime(los.getT_produktionsbeginn());
                        data[i][OFFENE_AG_KALENDERWOCHE] = new Integer(gc.get(GregorianCalendar.WEEK_OF_YEAR));
                        data[i][OFFENE_AG_LOSGROESSE] = los.getN_losgroesse();
                        data[i][OFFENE_AG_LOSNUMMER] = los.getC_nr();
                        data[i][OFFENE_AG_FERTIGUNGSGRUPPE] = los.getFlrfertigungsgruppe().getC_bez();
                        /**
                         * @todo material PJ 4239
                         */
                        data[i][OFFENE_AG_MATERIAL] = null;
                        data[i][OFFENE_AG_BEGINN] = los.getT_produktionsbeginn();
                        data[i][OFFENE_AG_ENDE] = los.getT_produktionsende();
                        data[i][OFFENE_AG_LOSSTATUS] = los.getStatus_c_nr();

                        // PJ 15009

                        String queryf = "select sum(flrfehlmenge.n_menge) FROM FLRFehlmenge flrfehlmenge WHERE flrfehlmenge.flrlossollmaterial.flrlos = "
                                + los.getI_id() + " AND flrfehlmenge.n_menge>0";
                        Session session2 = FLRSessionFactory.getFactory().openSession();
                        Query query = session2.createQuery(queryf);
                        List<?> results = query.list();

                        data[i][OFFENE_AG_LOSHATFEHLMENGE] = new Boolean(false);
                        if (results.size() > 0) {
                            BigDecimal bd = (BigDecimal) results.iterator().next();

                            if (bd != null && bd.doubleValue() > 0) {
                                data[i][OFFENE_AG_LOSHATFEHLMENGE] = new Boolean(true);
                            }
                        }
                        session2.close();
                    }
                } else if (fertigungsgruppeIId != null || kostenstelleIId != null) {
                    if (fertigungsgruppeIId != null) {
                        if (los.getFertigungsgruppe_i_id().intValue() != fertigungsgruppeIId.intValue()) {
                            i--;
                        } else {
                            data[i][OFFENE_AG_AGNUMMER] = a.getI_arbeitsgangsnummer();
                            data[i][OFFENE_AG_UAGNUMMER] = a.getI_unterarbeitsgang();
                            data[i][OFFENE_AG_AG_ARTIKEL] = a.getFlrartikel().getC_nr();
                            ArtikelDto aDto = getArtikelFac()
                                    .artikelFindByPrimaryKeySmall(a.getFlrartikel().getI_id(), theClientDto);
                            data[i][OFFENE_AG_AG_ARTIKELBEZEICHNUNG] = aDto.formatBezeichnung();

                            if (Helper.short2boolean(a.getB_fertig())) {
                                data[i][OFFENE_AG_AG_GESAMTZEIT] = new BigDecimal(0);
                            } else {
                                data[i][OFFENE_AG_AG_GESAMTZEIT] = a.getN_gesamtzeit();
                            }

                            if (bSollstundenbetrachtung == true) {
                                data[i][OFFENE_AG_AG_ISTZEIT] = getZeiterfassungFac().getSummeZeitenEinesBeleges(
                                        LocaleFac.BELEGART_LOS, los.getI_id(), a.getI_id(), null, null, null,
                                        theClientDto);

                            }

                            if (a.getFlrmaschine() != null) {
                                data[i][OFFENE_AG_AG_MASCHINE_BEZEICHNUNG] = a.getFlrmaschine().getC_bez();
                                data[i][OFFENE_AG_AG_MASCHINE_IDENTIFIKATIONSNUMMMER] = a.getFlrmaschine()
                                        .getC_identifikationsnr();
                                data[i][OFFENE_AG_AG_MASCHINE_INVENTARNUMMMER] = a.getFlrmaschine()
                                        .getC_inventarnummer();
                            }

                            if (a.getFlrartikel().getFlrartikelgruppe() != null) {
                                data[i][OFFENE_AG_AG_ARTIKELGRUPPPE] = a.getFlrartikel().getFlrartikelgruppe()
                                        .getC_nr();
                            } else {
                                data[i][OFFENE_AG_AG_ARTIKELGRUPPPE] = "";
                            }

                            if (a.getI_maschinenversatztage() != null) {
                                data[i][OFFENE_AG_AG_BEGINN] = Helper.addiereTageZuTimestamp(
                                        (Timestamp) los.getT_produktionsbeginn(), a.getI_maschinenversatztage());

                            } else {
                                data[i][OFFENE_AG_AG_BEGINN] = los.getT_produktionsbeginn();

                            }

                            if (los.getFlrauftrag() != null) {

                                Integer partnerIId = los.getFlrauftrag().getFlrkunde().getFlrpartner().getI_id();
                                PartnerDto partnerDto = getPartnerFac().partnerFindByPrimaryKey(partnerIId,
                                        theClientDto);
                                data[i][OFFENE_AG_KUNDE] = partnerDto.formatFixTitelName1Name2();
                                data[i][OFFENE_AG_AUFTRAGSPOENALE] = los.getFlrauftrag().getB_poenale();
                            }

                            if (los.getFlrauftrag() != null) {
                                data[i][OFFENE_AG_AUFTRAGSNUMMER] = los.getFlrauftrag().getC_nr();
                                data[i][OFFENE_AG_PROJEKT] = los.getFlrauftrag().getC_bez();
                                data[i][OFFENE_AG_LIEFERTERMIN] = los.getFlrauftrag().getT_liefertermin();
                            }
                            BigDecimal bdGeliefert = new BigDecimal(0);
                            for (Iterator<?> iter2 = los.getAblieferungset().iterator(); iter2.hasNext();) {
                                FLRLosablieferung item = (FLRLosablieferung) iter2.next();
                                bdGeliefert = bdGeliefert.add(item.getN_menge());
                            }
                            data[i][OFFENE_AG_GELIEFERT] = bdGeliefert;
                            if (los.getFlrstueckliste() != null) {
                                ArtikelDto artikelDto = getArtikelFac().artikelFindByPrimaryKeySmall(
                                        los.getFlrstueckliste().getFlrartikel().getI_id(), theClientDto);
                                data[i][OFFENE_AG_BEZEICHNUNG] = artikelDto.getArtikelsprDto().getCBez();
                                data[i][OFFENE_AG_ZUSATZBEZEICHNUNG] = artikelDto.getArtikelsprDto().getCZbez();
                                data[i][OFFENE_AG_ARTIKELNUMMER] = los.getFlrstueckliste().getFlrartikel()
                                        .getC_nr();

                                data[i][OFFENE_AG_DETAILBEDARF] = getRahmenbedarfeFac()
                                        .getSummeAllerRahmenbedarfeEinesArtikels(artikelDto.getIId());

                                // Offene Fehlmengen
                                data[i][OFFENE_AG_FEHLMENGE] = getFehlmengeFac()
                                        .getAnzahlFehlmengeEinesArtikels(artikelDto.getIId(), theClientDto);

                                LossollarbeitsplanDto[] lossollarbeitsplanDto = getFertigungFac()
                                        .lossollarbeitsplanFindByLosIId(los.getI_id());

                                BigDecimal bdFertigungszeit = new BigDecimal(0);
                                for (int j = 0; lossollarbeitsplanDto.length > j; j++) {
                                    bdFertigungszeit = bdFertigungszeit
                                            .add(lossollarbeitsplanDto[j].getNGesamtzeit());
                                }
                                data[i][OFFENE_AG_FERTIGUNGSZEIT] = bdFertigungszeit;

                                // Rahmenbestellt
                                Hashtable<?, ?> htRahmenbestellt = getArtikelbestelltFac()
                                        .getAnzahlRahmenbestellt(artikelDto.getIId(), theClientDto);
                                if (htRahmenbestellt.containsKey(ArtikelbestelltFac.KEY_RAHMENBESTELLT_ANZAHL)) {
                                    BigDecimal bdAnzahlRahmenbestellt = (BigDecimal) htRahmenbestellt
                                            .get(ArtikelbestelltFac.KEY_RAHMENBESTELLT_ANZAHL);
                                    data[i][OFFENE_AG_RAHMEN_BESTELLT] = bdAnzahlRahmenbestellt;
                                }
                                data[i][OFFENE_AG_RESERVIERUNGEN] = getReservierungFac()
                                        .getAnzahlReservierungen(artikelDto.getIId(), theClientDto);

                                data[i][OFFENE_AG_RAHMENRESERVIERUNGEN] = getReservierungFac()
                                        .getAnzahlRahmenreservierungen(artikelDto.getIId(), theClientDto);

                            } else {
                                data[i][OFFENE_AG_BEZEICHNUNG] = los.getC_projekt();
                                data[i][OFFENE_AG_ZUSATZBEZEICHNUNG] = null;
                                data[i][OFFENE_AG_ARTIKELNUMMER] = getTextRespectUISpr("fert.materialliste",
                                        theClientDto.getMandant(), theClientDto.getLocUi());
                            }

                            GregorianCalendar gc = new GregorianCalendar();
                            gc.setTime(los.getT_produktionsbeginn());
                            data[i][OFFENE_AG_KALENDERWOCHE] = new Integer(gc.get(GregorianCalendar.WEEK_OF_YEAR));
                            data[i][OFFENE_AG_LOSGROESSE] = los.getN_losgroesse();
                            data[i][OFFENE_AG_LOSNUMMER] = los.getC_nr();
                            data[i][OFFENE_AG_FERTIGUNGSGRUPPE] = los.getFlrfertigungsgruppe().getC_bez();
                            /**
                             * @todo material PJ 4239
                             */
                            data[i][OFFENE_AG_MATERIAL] = null;
                            data[i][OFFENE_AG_BEGINN] = los.getT_produktionsbeginn();
                            data[i][OFFENE_AG_ENDE] = los.getT_produktionsende();
                            data[i][OFFENE_AG_LOSSTATUS] = los.getStatus_c_nr();

                            // PJ 15009

                            String queryf = "select sum(flrfehlmenge.n_menge) FROM FLRFehlmenge flrfehlmenge WHERE flrfehlmenge.flrlossollmaterial.flrlos = "
                                    + los.getI_id() + " AND flrfehlmenge.n_menge>0";
                            Session session2 = FLRSessionFactory.getFactory().openSession();
                            Query query = session2.createQuery(queryf);
                            List<?> results = query.list();

                            data[i][OFFENE_AG_LOSHATFEHLMENGE] = new Boolean(false);
                            if (results.size() > 0) {
                                BigDecimal bd = (BigDecimal) results.iterator().next();

                                if (bd != null && bd.doubleValue() > 0) {
                                    data[i][OFFENE_AG_LOSHATFEHLMENGE] = new Boolean(true);
                                }
                            }
                            session2.close();
                        }
                    } else if (kostenstelleIId != null) {
                        if (los.getKostenstelle_i_id().intValue() != kostenstelleIId.intValue()) {
                            i--;
                        } else {
                            data[i][OFFENE_AG_AGNUMMER] = a.getI_arbeitsgangsnummer();
                            data[i][OFFENE_AG_UAGNUMMER] = a.getI_unterarbeitsgang();
                            data[i][OFFENE_AG_AG_ARTIKEL] = a.getFlrartikel().getC_nr();
                            ArtikelDto aDto = getArtikelFac()
                                    .artikelFindByPrimaryKeySmall(a.getFlrartikel().getI_id(), theClientDto);
                            data[i][OFFENE_AG_AG_ARTIKELBEZEICHNUNG] = aDto.formatBezeichnung();

                            if (Helper.short2boolean(a.getB_fertig())) {
                                data[i][OFFENE_AG_AG_GESAMTZEIT] = new BigDecimal(0);
                            } else {
                                data[i][OFFENE_AG_AG_GESAMTZEIT] = a.getN_gesamtzeit();
                            }
                            if (bSollstundenbetrachtung == true) {
                                data[i][OFFENE_AG_AG_ISTZEIT] = getZeiterfassungFac().getSummeZeitenEinesBeleges(
                                        LocaleFac.BELEGART_LOS, los.getI_id(), a.getI_id(), null, null, null,
                                        theClientDto);

                            }
                            if (a.getFlrmaschine() != null) {
                                data[i][OFFENE_AG_AG_MASCHINE_BEZEICHNUNG] = a.getFlrmaschine().getC_bez();
                                data[i][OFFENE_AG_AG_MASCHINE_IDENTIFIKATIONSNUMMMER] = a.getFlrmaschine()
                                        .getC_identifikationsnr();
                                data[i][OFFENE_AG_AG_MASCHINE_INVENTARNUMMMER] = a.getFlrmaschine()
                                        .getC_inventarnummer();
                            }
                            if (a.getFlrartikel().getFlrartikelgruppe() != null) {
                                data[i][OFFENE_AG_AG_ARTIKELGRUPPPE] = a.getFlrartikel().getFlrartikelgruppe()
                                        .getC_nr();
                            } else {
                                data[i][OFFENE_AG_AG_ARTIKELGRUPPPE] = "";
                            }

                            if (a.getI_maschinenversatztage() != null) {
                                data[i][OFFENE_AG_AG_BEGINN] = Helper.addiereTageZuTimestamp(
                                        (Timestamp) los.getT_produktionsbeginn(), a.getI_maschinenversatztage());

                            } else {
                                data[i][OFFENE_AG_AG_BEGINN] = los.getT_produktionsbeginn();

                            }

                            if (los.getFlrauftrag() != null) {

                                Integer partnerIId = los.getFlrauftrag().getFlrkunde().getFlrpartner().getI_id();
                                PartnerDto partnerDto = getPartnerFac().partnerFindByPrimaryKey(partnerIId,
                                        theClientDto);
                                data[i][OFFENE_AG_KUNDE] = partnerDto.formatFixTitelName1Name2();
                                data[i][OFFENE_AG_AUFTRAGSPOENALE] = los.getFlrauftrag().getB_poenale();
                            }

                            if (los.getFlrauftrag() != null) {
                                data[i][OFFENE_AG_AUFTRAGSNUMMER] = los.getFlrauftrag().getC_nr();
                                data[i][OFFENE_AG_PROJEKT] = los.getFlrauftrag().getC_bez();
                                data[i][OFFENE_AG_LIEFERTERMIN] = los.getFlrauftrag().getT_liefertermin();
                            }
                            BigDecimal bdGeliefert = new BigDecimal(0);
                            for (Iterator<?> iter2 = los.getAblieferungset().iterator(); iter2.hasNext();) {
                                FLRLosablieferung item = (FLRLosablieferung) iter2.next();
                                bdGeliefert = bdGeliefert.add(item.getN_menge());
                            }
                            data[i][OFFENE_AG_GELIEFERT] = bdGeliefert;
                            if (los.getFlrstueckliste() != null) {
                                ArtikelDto artikelDto = getArtikelFac().artikelFindByPrimaryKeySmall(
                                        los.getFlrstueckliste().getFlrartikel().getI_id(), theClientDto);
                                data[i][OFFENE_AG_BEZEICHNUNG] = artikelDto.getArtikelsprDto().getCBez();
                                data[i][OFFENE_AG_ZUSATZBEZEICHNUNG] = artikelDto.getArtikelsprDto().getCZbez();
                                data[i][OFFENE_AG_ARTIKELNUMMER] = los.getFlrstueckliste().getFlrartikel()
                                        .getC_nr();

                                data[i][OFFENE_AG_DETAILBEDARF] = getRahmenbedarfeFac()
                                        .getSummeAllerRahmenbedarfeEinesArtikels(artikelDto.getIId());

                                // Offene Fehlmengen
                                data[i][OFFENE_AG_FEHLMENGE] = getFehlmengeFac()
                                        .getAnzahlFehlmengeEinesArtikels(artikelDto.getIId(), theClientDto);

                                LossollarbeitsplanDto[] lossollarbeitsplanDto = getFertigungFac()
                                        .lossollarbeitsplanFindByLosIId(los.getI_id());

                                BigDecimal bdFertigungszeit = new BigDecimal(0);
                                for (int j = 0; lossollarbeitsplanDto.length > j; j++) {
                                    bdFertigungszeit = bdFertigungszeit
                                            .add(lossollarbeitsplanDto[j].getNGesamtzeit());
                                }
                                data[i][OFFENE_AG_FERTIGUNGSZEIT] = bdFertigungszeit;

                                // Rahmenbestellt
                                Hashtable<?, ?> htRahmenbestellt = getArtikelbestelltFac()
                                        .getAnzahlRahmenbestellt(artikelDto.getIId(), theClientDto);
                                if (htRahmenbestellt.containsKey(ArtikelbestelltFac.KEY_RAHMENBESTELLT_ANZAHL)) {
                                    BigDecimal bdAnzahlRahmenbestellt = (BigDecimal) htRahmenbestellt
                                            .get(ArtikelbestelltFac.KEY_RAHMENBESTELLT_ANZAHL);
                                    data[i][OFFENE_AG_RAHMEN_BESTELLT] = bdAnzahlRahmenbestellt;
                                }
                                data[i][OFFENE_AG_RESERVIERUNGEN] = getReservierungFac()
                                        .getAnzahlReservierungen(artikelDto.getIId(), theClientDto);

                                data[i][OFFENE_AG_RAHMENRESERVIERUNGEN] = getReservierungFac()
                                        .getAnzahlRahmenreservierungen(artikelDto.getIId(), theClientDto);

                            } else {
                                data[i][OFFENE_AG_BEZEICHNUNG] = los.getC_projekt();
                                data[i][OFFENE_AG_ZUSATZBEZEICHNUNG] = null;
                                data[i][OFFENE_AG_ARTIKELNUMMER] = getTextRespectUISpr("fert.materialliste",
                                        theClientDto.getMandant(), theClientDto.getLocUi());
                            }

                            GregorianCalendar gc = new GregorianCalendar();
                            gc.setTime(los.getT_produktionsbeginn());
                            data[i][OFFENE_AG_KALENDERWOCHE] = new Integer(gc.get(GregorianCalendar.WEEK_OF_YEAR));
                            data[i][OFFENE_AG_LOSGROESSE] = los.getN_losgroesse();
                            data[i][OFFENE_AG_LOSNUMMER] = los.getC_nr();
                            data[i][OFFENE_AG_FERTIGUNGSGRUPPE] = los.getFlrfertigungsgruppe().getC_bez();
                            /**
                             * @todo material PJ 4239
                             */
                            data[i][OFFENE_AG_MATERIAL] = null;
                            data[i][OFFENE_AG_BEGINN] = los.getT_produktionsbeginn();
                            data[i][OFFENE_AG_ENDE] = los.getT_produktionsende();
                            data[i][OFFENE_AG_LOSSTATUS] = los.getStatus_c_nr();

                            // PJ 15009

                            String queryf = "select sum(flrfehlmenge.n_menge) FROM FLRFehlmenge flrfehlmenge WHERE flrfehlmenge.flrlossollmaterial.flrlos = "
                                    + los.getI_id() + " AND flrfehlmenge.n_menge>0";
                            Session session2 = FLRSessionFactory.getFactory().openSession();
                            Query query = session2.createQuery(queryf);
                            List<?> results = query.list();

                            data[i][OFFENE_AG_LOSHATFEHLMENGE] = new Boolean(false);
                            if (results.size() > 0) {
                                BigDecimal bd = (BigDecimal) results.iterator().next();

                                if (bd != null && bd.doubleValue() > 0) {
                                    data[i][OFFENE_AG_LOSHATFEHLMENGE] = new Boolean(true);
                                }
                            }
                            session2.close();
                        }
                    }
                } else {

                    data[i][OFFENE_AG_AGNUMMER] = a.getI_arbeitsgangsnummer();
                    data[i][OFFENE_AG_UAGNUMMER] = a.getI_unterarbeitsgang();
                    data[i][OFFENE_AG_AG_ARTIKEL] = a.getFlrartikel().getC_nr();
                    ArtikelDto aDto = getArtikelFac().artikelFindByPrimaryKeySmall(a.getFlrartikel().getI_id(),
                            theClientDto);
                    data[i][OFFENE_AG_AG_ARTIKELBEZEICHNUNG] = aDto.formatBezeichnung();

                    if (Helper.short2boolean(a.getB_fertig())) {
                        data[i][OFFENE_AG_AG_GESAMTZEIT] = new BigDecimal(0);
                    } else {
                        data[i][OFFENE_AG_AG_GESAMTZEIT] = a.getN_gesamtzeit();
                    }
                    if (bSollstundenbetrachtung == true) {
                        data[i][OFFENE_AG_AG_ISTZEIT] = getZeiterfassungFac().getSummeZeitenEinesBeleges(
                                LocaleFac.BELEGART_LOS, los.getI_id(), a.getI_id(), null, null, null, theClientDto);

                    }
                    if (a.getFlrmaschine() != null) {
                        data[i][OFFENE_AG_AG_MASCHINE_BEZEICHNUNG] = a.getFlrmaschine().getC_bez();
                        data[i][OFFENE_AG_AG_MASCHINE_IDENTIFIKATIONSNUMMMER] = a.getFlrmaschine()
                                .getC_identifikationsnr();
                        data[i][OFFENE_AG_AG_MASCHINE_INVENTARNUMMMER] = a.getFlrmaschine().getC_inventarnummer();
                    }
                    if (a.getFlrartikel().getFlrartikelgruppe() != null) {
                        data[i][OFFENE_AG_AG_ARTIKELGRUPPPE] = a.getFlrartikel().getFlrartikelgruppe().getC_nr();
                    } else {
                        data[i][OFFENE_AG_AG_ARTIKELGRUPPPE] = "";
                    }

                    if (a.getI_maschinenversatztage() != null) {
                        data[i][OFFENE_AG_AG_BEGINN] = Helper.addiereTageZuTimestamp(
                                (Timestamp) los.getT_produktionsbeginn(), a.getI_maschinenversatztage());

                    } else {
                        data[i][OFFENE_AG_AG_BEGINN] = los.getT_produktionsbeginn();

                    }

                    if (los.getFlrauftrag() != null) {

                        Integer partnerIId = los.getFlrauftrag().getFlrkunde().getFlrpartner().getI_id();
                        PartnerDto partnerDto = getPartnerFac().partnerFindByPrimaryKey(partnerIId, theClientDto);
                        data[i][OFFENE_AG_KUNDE] = partnerDto.formatFixTitelName1Name2();
                        data[i][OFFENE_AG_AUFTRAGSPOENALE] = los.getFlrauftrag().getB_poenale();
                    }

                    if (los.getFlrauftrag() != null) {
                        data[i][OFFENE_AG_AUFTRAGSNUMMER] = los.getFlrauftrag().getC_nr();
                        data[i][OFFENE_AG_PROJEKT] = los.getFlrauftrag().getC_bez();
                        data[i][OFFENE_AG_LIEFERTERMIN] = los.getFlrauftrag().getT_liefertermin();
                    }
                    BigDecimal bdGeliefert = new BigDecimal(0);
                    for (Iterator<?> iter2 = los.getAblieferungset().iterator(); iter2.hasNext();) {
                        FLRLosablieferung item = (FLRLosablieferung) iter2.next();
                        bdGeliefert = bdGeliefert.add(item.getN_menge());
                    }
                    data[i][OFFENE_AG_GELIEFERT] = bdGeliefert;
                    if (los.getFlrstueckliste() != null) {
                        ArtikelDto artikelDto = getArtikelFac().artikelFindByPrimaryKeySmall(
                                los.getFlrstueckliste().getFlrartikel().getI_id(), theClientDto);
                        data[i][OFFENE_AG_BEZEICHNUNG] = artikelDto.getArtikelsprDto().getCBez();
                        data[i][OFFENE_AG_ZUSATZBEZEICHNUNG] = artikelDto.getArtikelsprDto().getCZbez();
                        data[i][OFFENE_AG_ARTIKELNUMMER] = los.getFlrstueckliste().getFlrartikel().getC_nr();

                        data[i][OFFENE_AG_DETAILBEDARF] = getRahmenbedarfeFac()
                                .getSummeAllerRahmenbedarfeEinesArtikels(artikelDto.getIId());

                        // Offene Fehlmengen
                        data[i][OFFENE_AG_FEHLMENGE] = getFehlmengeFac()
                                .getAnzahlFehlmengeEinesArtikels(artikelDto.getIId(), theClientDto);

                        LossollarbeitsplanDto[] lossollarbeitsplanDto = getFertigungFac()
                                .lossollarbeitsplanFindByLosIId(los.getI_id());

                        BigDecimal bdFertigungszeit = new BigDecimal(0);
                        for (int j = 0; lossollarbeitsplanDto.length > j; j++) {
                            bdFertigungszeit = bdFertigungszeit.add(lossollarbeitsplanDto[j].getNGesamtzeit());
                        }
                        data[i][OFFENE_AG_FERTIGUNGSZEIT] = bdFertigungszeit;

                        // Rahmenbestellt
                        Hashtable<?, ?> htRahmenbestellt = getArtikelbestelltFac()
                                .getAnzahlRahmenbestellt(artikelDto.getIId(), theClientDto);
                        if (htRahmenbestellt.containsKey(ArtikelbestelltFac.KEY_RAHMENBESTELLT_ANZAHL)) {
                            BigDecimal bdAnzahlRahmenbestellt = (BigDecimal) htRahmenbestellt
                                    .get(ArtikelbestelltFac.KEY_RAHMENBESTELLT_ANZAHL);
                            data[i][OFFENE_AG_RAHMEN_BESTELLT] = bdAnzahlRahmenbestellt;
                        }
                        data[i][OFFENE_AG_RESERVIERUNGEN] = getReservierungFac()
                                .getAnzahlReservierungen(artikelDto.getIId(), theClientDto);

                        data[i][OFFENE_AG_RAHMENRESERVIERUNGEN] = getReservierungFac()
                                .getAnzahlRahmenreservierungen(artikelDto.getIId(), theClientDto);

                    } else {
                        data[i][OFFENE_AG_BEZEICHNUNG] = los.getC_projekt();
                        data[i][OFFENE_AG_ZUSATZBEZEICHNUNG] = null;
                        data[i][OFFENE_AG_ARTIKELNUMMER] = getTextRespectUISpr("fert.materialliste",
                                theClientDto.getMandant(), theClientDto.getLocUi());
                    }

                    GregorianCalendar gc = new GregorianCalendar();
                    gc.setTime(los.getT_produktionsbeginn());
                    data[i][OFFENE_AG_KALENDERWOCHE] = new Integer(gc.get(GregorianCalendar.WEEK_OF_YEAR));
                    data[i][OFFENE_AG_LOSGROESSE] = los.getN_losgroesse();
                    data[i][OFFENE_AG_LOSNUMMER] = los.getC_nr();
                    data[i][OFFENE_AG_FERTIGUNGSGRUPPE] = los.getFlrfertigungsgruppe().getC_bez();
                    /**
                     * @todo material PJ 4239
                     */
                    data[i][OFFENE_AG_MATERIAL] = null;
                    data[i][OFFENE_AG_BEGINN] = los.getT_produktionsbeginn();
                    data[i][OFFENE_AG_ENDE] = los.getT_produktionsende();
                    data[i][OFFENE_AG_LOSSTATUS] = los.getStatus_c_nr();

                    // PJ 15009

                    String queryf = "select sum(flrfehlmenge.n_menge) FROM FLRFehlmenge flrfehlmenge WHERE flrfehlmenge.flrlossollmaterial.flrlos = "
                            + los.getI_id() + " AND flrfehlmenge.n_menge>0";
                    Session session2 = FLRSessionFactory.getFactory().openSession();
                    Query query = session2.createQuery(queryf);
                    List<?> results = query.list();

                    data[i][OFFENE_AG_LOSHATFEHLMENGE] = new Boolean(false);
                    if (results.size() > 0) {
                        BigDecimal bd = (BigDecimal) results.iterator().next();

                        if (bd != null && bd.doubleValue() > 0) {
                            data[i][OFFENE_AG_LOSHATFEHLMENGE] = new Boolean(true);
                        }
                    }
                    session2.close();
                }
            }
            // Sortieren nach Artikelgruppe + AG-Beginn

            for (int k = data.length - 1; k > 0; --k) {
                for (int j = 0; j < k; ++j) {
                    Object[] a1 = (Object[]) data[j];
                    Object[] a2 = (Object[]) data[j + 1];

                    if (((String) a1[OFFENE_AG_AG_ARTIKELGRUPPPE])
                            .compareTo((String) a2[OFFENE_AG_AG_ARTIKELGRUPPPE]) > 0) {
                        data[j] = a2;
                        data[j + 1] = a1;
                    } else if (((String) a1[OFFENE_AG_AG_ARTIKELGRUPPPE])
                            .compareTo((String) a2[OFFENE_AG_AG_ARTIKELGRUPPPE]) == 0) {
                        java.util.Date k1 = (java.util.Date) a1[OFFENE_AG_AG_BEGINN];
                        java.util.Date k2 = (java.util.Date) a2[OFFENE_AG_AG_BEGINN];

                        if (iOptionStichtag == FertigungReportFac.OFFENE_OPTION_STICHTAG_ENDEDATUM) {
                            k1 = (java.util.Date) a1[OFFENE_AG_ENDE];
                            k2 = (java.util.Date) a2[OFFENE_AG_ENDE];
                        } else if (iOptionStichtag == FertigungReportFac.OFFENE_OPTION_STICHTAG_LIEFERTERMIN) {
                            k1 = (java.util.Date) a1[OFFENE_AG_LIEFERTERMIN];

                            if (k1 == null) {
                                k1 = new Date(0);
                            }

                            k2 = (java.util.Date) a2[OFFENE_AG_LIEFERTERMIN];

                            if (k2 == null) {
                                k2 = new Date(0);
                            }

                        }

                        k1 = Helper.cutDate(k1);
                        k2 = Helper.cutDate(k2);

                        if (k1.after(k2)) {
                            data[j] = a2;
                            data[j + 1] = a1;
                        } else if (k1.equals(k2)) {

                            String l1 = (String) a1[OFFENE_AG_LOSNUMMER];
                            String l2 = (String) a1[OFFENE_AG_LOSNUMMER];
                            if (l1.compareTo(l2) > 0) {
                                data[j] = a2;
                                data[j + 1] = a1;
                            }

                        }
                    }
                }
            }

            initJRDS(mapParameter, FertigungReportFac.REPORT_MODUL, FertigungReportFac.REPORT_OFFENE_AG,
                    theClientDto.getMandant(), theClientDto.getLocUi(), theClientDto);
            return getReportPrint();
        } catch (Exception t) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER, t);
        } finally {
            closeSession(session);
        }
    }

    @TransactionAttribute(TransactionAttributeType.NEVER)
    public JasperPrintLP printRankingliste(TheClientDto theClientDto) {

        this.useCase = UC_RANKINGLISTE;
        this.index = -1;

        Map<String, Object> mapParameter = new TreeMap<String, Object>();
        SessionFactory factory = FLRSessionFactory.getFactory();
        Session session = factory.openSession();
        session.enableFilter("filterMandant").setParameter("paramMandant", theClientDto.getMandant());
        session.enableFilter("filterLocale").setParameter("paramLocale",
                Helper.locale2String(theClientDto.getLocUi()));

        ZusatzstatusDto zusatzstatusDto = null;
        try {
            ParametermandantDto parametermandantDto = getParameterFac().getMandantparameter(
                    theClientDto.getMandant(), ParameterFac.KATEGORIE_FERTIGUNG,
                    ParameterFac.PARAMETER_RANKINGLISTE_ZUSATZSTATUS);
            if (((java.lang.Integer) parametermandantDto.getCWertAsObject()) != null) {
                zusatzstatusDto = getFertigungFac()
                        .zusatzstatusFindByPrimaryKey((java.lang.Integer) parametermandantDto.getCWertAsObject());

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

        String query = "SELECT a.flrartikel.i_id,a.flrartikel.c_nr, sum(a.n_menge), (SELECT s.i_id FROM FLRStueckliste s WHERE s.artikel_i_id=a.flrartikel.i_id AND a.flrartikel.mandant_c_nr='"
                + theClientDto.getMandant()
                + "') AS stkl_i_id ,  (SELECT COUNT(*) FROM FLRStuecklisteposition sp WHERE sp.flrartikel.i_id=a.flrartikel.i_id ),  (SELECT SUM(fm.n_menge) FROM FLRFehlmenge fm WHERE fm.flrartikel.i_id=a.flrartikel.i_id ),  (SELECT SUM(al.n_lagerstand) FROM FLRArtikellager al WHERE al.compId.artikel_i_id=a.flrartikel.i_id ), (SELECT spr.c_bez FROM FLRArtikellistespr spr WHERE spr.Id.artikelliste=a.flrartikel.i_id AND spr.Id.locale='"
                + theClientDto.getLocUiAsString()
                + "')  FROM FLRArtikelreservierung a WHERE a.flrartikel.mandant_c_nr='" + theClientDto.getMandant()
                + "'  GROUP BY a.flrartikel.i_id,a.flrartikel.mandant_c_nr,a.flrartikel.c_nr ORDER BY a.flrartikel.c_nr ASC";

        Query qResult = session.createQuery(query);

        List<?> results = qResult.list();

        ArrayList<Object[]> alDaten = new ArrayList<Object[]>();

        Iterator<?> resultListIterator = results.iterator();
        while (resultListIterator.hasNext()) {
            Object[] o = (Object[]) resultListIterator.next();
            Object[] oZeile = new Object[11];

            BigDecimal bdReserviert = (BigDecimal) o[2];
            if (bdReserviert == null) {
                bdReserviert = new BigDecimal(0.00);
            }
            BigDecimal bdLagerstand = (BigDecimal) o[6];
            if (bdLagerstand == null) {
                bdLagerstand = new BigDecimal(0.00);
            }
            BigDecimal bdFehlmengen = (BigDecimal) o[5];
            if (bdFehlmengen == null) {
                bdFehlmengen = new BigDecimal(0.00);
            }

            if (o[3] != null) {

                Session session2 = factory.openSession();

                String subQuery = "SELECT l.c_nr,partner.c_name1nachnamefirmazeile1, l.t_produktionsbeginn, l.n_losgroesse, "
                        + " (SELECT SUM(abl.n_menge) FROM FLRLosablieferung abl WHERE abl.los_i_id=l.i_id), "
                        + " (SELECT SUM(sa.n_gesamtzeit) FROM FLRLossollarbeitsplan sa WHERE sa.los_i_id=l.i_id), "
                        + "(SELECT ls.i_id FROM FLRLoszusatzstatus ls WHERE ls.los_i_id=l.i_id AND ls.zusatzstatus_i_id="
                        + zusatzstatusDto.getIId() + ") , fg.c_bez, l.flrstueckliste.flrartikel.c_nr "
                        + " FROM FLRLosReport l LEFT JOIN l.flrauftrag.flrkunde.flrpartner AS partner LEFT JOIN l.flrfertigungsgruppe AS fg  WHERE l.flrstueckliste.i_id="
                        + o[3] + " AND l.status_c_nr IN ('" + FertigungFac.STATUS_AUSGEGEBEN + "','"
                        + FertigungFac.STATUS_IN_PRODUKTION + "') ORDER BY l.t_produktionsbeginn ASC ";
                Query subResult = session2.createQuery(subQuery);

                List<?> subResults = subResult.list();
                Iterator<?> subResultListIterator = subResults.iterator();
                while (subResultListIterator.hasNext()) {
                    Object[] flrLosReport = (Object[]) subResultListIterator.next();

                    oZeile = new Object[11];

                    oZeile[RANKINGLISTE_LOSNR] = flrLosReport[0];
                    oZeile[RANKINGLISTE_LOSBEGINNTERMIN] = flrLosReport[2];

                    BigDecimal offeneMenge = new BigDecimal(0.00);
                    BigDecimal losgroesse = (BigDecimal) flrLosReport[3];

                    BigDecimal summeAblieferungen = (BigDecimal) flrLosReport[4];
                    if (summeAblieferungen == null) {
                        summeAblieferungen = new BigDecimal(0.00);
                    }

                    offeneMenge = losgroesse.subtract(summeAblieferungen);

                    oZeile[RANKINGLISTE_OFFENELOSMENGE] = offeneMenge;

                    if (offeneMenge.doubleValue() > 0) {

                        BigDecimal gesamt = (BigDecimal) flrLosReport[5];
                        if (gesamt == null) {
                            gesamt = new BigDecimal(0.00);
                        }

                        oZeile[RANKINGLISTE_SOLLZEIT] = gesamt.divide(losgroesse, 4, BigDecimal.ROUND_HALF_EVEN)
                                .multiply(offeneMenge);
                        // Unterstueckliste?
                        if (o[4] != null && ((Long) o[4]).intValue() > 0) {
                            oZeile[RANKINGLISTE_INFO_U] = new Boolean(true);
                        } else {
                            oZeile[RANKINGLISTE_INFO_U] = new Boolean(false);
                        }

                        if (bdReserviert.add(bdFehlmengen).doubleValue() > bdLagerstand.doubleValue()) {
                            oZeile[RANKINGLISTE_INFO_L] = new Boolean(true);
                        } else {
                            oZeile[RANKINGLISTE_INFO_L] = new Boolean(false);
                        }

                        if (flrLosReport[7] != null) {
                            oZeile[RANKINGLISTE_FERTIGUNGSGRUPPE] = flrLosReport[7];
                        } else {
                            oZeile[RANKINGLISTE_FERTIGUNGSGRUPPE] = "";
                        }

                        oZeile[RANKINGLISTE_ARTIKELNUMMER] = flrLosReport[8];
                        oZeile[RANKINGLISTE_ARTIKELBEZEICHNUNG] = o[7];

                        oZeile[RANKINGLISTE_KUNDE] = flrLosReport[1];

                        if (flrLosReport[6] != null) {

                            oZeile[RANKINGLISTE_INFO_K] = new Boolean(true);
                        } else {
                            // nix gefunden
                            oZeile[RANKINGLISTE_INFO_K] = new Boolean(false);
                        }

                        alDaten.add(oZeile);

                        oZeile = new Object[11];
                    }

                }

                session2.close();
            }
        }

        session.close();

        // Nach Fertigungsgruppe sortieren
        for (int k = alDaten.size() - 1; k > 0; --k) {
            for (int j = 0; j < k; ++j) {
                Object[] a1 = (Object[]) alDaten.get(j);
                Object[] a2 = (Object[]) alDaten.get(j + 1);

                String s1 = Helper.fitString2Length((String) a1[RANKINGLISTE_FERTIGUNGSGRUPPE], 40, ' ')
                        + a1[RANKINGLISTE_LOSBEGINNTERMIN];
                String s2 = Helper.fitString2Length((String) a2[RANKINGLISTE_FERTIGUNGSGRUPPE], 40, ' ')
                        + a2[RANKINGLISTE_LOSBEGINNTERMIN];

                if (s1.compareTo(s2) > 0) {
                    alDaten.set(j, a2);
                    alDaten.set(j + 1, a1);
                }
            }

        }

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

        initJRDS(mapParameter, FertigungReportFac.REPORT_MODUL, FertigungReportFac.REPORT_RANKINGLISTE,
                theClientDto.getMandant(), theClientDto.getLocUi(), theClientDto);

        return getReportPrint();

    }

    @TransactionAttribute(TransactionAttributeType.NEVER)
    public JasperPrintLP printHalbfertigfabrikatsinventur(java.sql.Timestamp tsStichtag, int iSortierung,
            boolean bVerdichtet, Integer partnerIIdFertigungsort, TheClientDto theClientDto) throws EJBExceptionLP {
        Session session = null;
        try {
            Map<String, Object> mapParameter = new TreeMap<String, Object>();
            if (tsStichtag != null) {
                mapParameter.put("P_STICHTAG", tsStichtag);
                Calendar c = Calendar.getInstance();
                c.setTimeInMillis(tsStichtag.getTime());
                c.set(Calendar.DAY_OF_MONTH, c.get(Calendar.DAY_OF_MONTH) + 1);
                tsStichtag = new java.sql.Timestamp(c.getTimeInMillis());
                tsStichtag = Helper.cutTimestamp(tsStichtag);
            }

            this.useCase = UC_HALBFERTIGFABRIKATSINVENTUR;
            this.index = -1;
            SessionFactory factory = FLRSessionFactory.getFactory();
            session = factory.openSession();
            Criteria c = session.createCriteria(FLRLosReport.class);
            c.add(Restrictions.eq(FertigungFac.FLR_LOS_MANDANT_C_NR, theClientDto.getMandant()));
            // c.add(Restrictions.eq("i_id", 99579));

            if (partnerIIdFertigungsort != null) {
                c.add(Restrictions.eq(FertigungFac.FLR_LOSREPORT_PARTNER_I_ID_FERTIGUNGSORT,
                        partnerIIdFertigungsort));
            }

            if (tsStichtag == null) {
                c.add(Restrictions.not(Restrictions.in(FertigungFac.FLR_LOS_STATUS_C_NR,
                        new String[] { FertigungFac.STATUS_STORNIERT, FertigungFac.STATUS_ERLEDIGT,
                                FertigungFac.STATUS_ANGELEGT, FertigungFac.STATUS_GESTOPPT })));
            } else {
                c.add(Restrictions.not(Restrictions.in(FertigungFac.FLR_LOS_STATUS_C_NR,
                        new String[] { FertigungFac.STATUS_STORNIERT, FertigungFac.STATUS_GESTOPPT })));

                c.add(Restrictions.or(Restrictions.gt(FertigungFac.FLR_LOS_T_ERLEDIGT, tsStichtag),
                        Restrictions.isNull(FertigungFac.FLR_LOS_T_ERLEDIGT)));

                c.add(Restrictions.or(Restrictions.gt(FertigungFac.FLR_LOSREPORT_T_MANUELLERLEDIGT, tsStichtag),
                        Restrictions.isNull(FertigungFac.FLR_LOSREPORT_T_MANUELLERLEDIGT)));

                c.add(Restrictions.le(FertigungFac.FLR_LOS_T_AUSGABE, tsStichtag));
            }

            // Sortierung nach Losnummer
            c.addOrder(Order.asc(FertigungFac.FLR_LOS_C_NR));
            List<?> list = c.list();

            ArrayList<Object[]> alDaten = new ArrayList<Object[]>();

            int i = 0;
            for (Iterator<?> iter = list.iterator(); iter.hasNext(); i++) {
                FLRLosReport item = (FLRLosReport) iter.next();

                Object[] zeile = new Object[17];

                zeile[HF_LOSNUMMER] = item.getC_nr();
                zeile[HF_LOSGROESSE] = item.getN_losgroesse();

                if (item.getFlrstueckliste() != null) {
                    zeile[HF_ARTIKELNUMMER] = item.getFlrstueckliste().getFlrartikel().getC_nr();
                    ArtikelDto artikelDto = getArtikelFac().artikelFindByPrimaryKeySmall(
                            item.getFlrstueckliste().getFlrartikel().getI_id(), theClientDto);
                    zeile[HF_BEZEICHNUNG] = artikelDto.getArtikelsprDto().getCBez();
                    ;
                } else {
                    zeile[HF_ARTIKELNUMMER] = getTextRespectUISpr("fert.materialliste", theClientDto.getMandant(),
                            theClientDto.getLocUi());
                    zeile[HF_BEZEICHNUNG] = item.getC_projekt();
                }

                LosablieferungDto[] losablieferungDtos = getFertigungFac()
                        .losablieferungFindByLosIId(item.getI_id(), true, theClientDto);
                BigDecimal bdAbgeliefert = new BigDecimal(0.0000);
                for (int j = 0; j < losablieferungDtos.length; j++) {

                    if (tsStichtag == null) {
                        bdAbgeliefert = bdAbgeliefert.add(losablieferungDtos[j].getNMenge());
                    } else {
                        if (tsStichtag.after(losablieferungDtos[j].getTAendern())) {
                            bdAbgeliefert = bdAbgeliefert.add(losablieferungDtos[j].getNMenge());
                        }
                    }

                }
                zeile[HF_ERLEDIGT] = bdAbgeliefert;

                // Nun eine Zeile pro Position

                // Ausgegebenes Material
                LossollmaterialDto[] sollmat = getFertigungFac().lossollmaterialFindByLosIId(item.getI_id());

                for (int j = 0; j < sollmat.length; j++) {
                    BigDecimal bdMenge = getFertigungFac().getAusgegebeneMenge(sollmat[j].getIId(), tsStichtag,
                            theClientDto);
                    zeile[HF_POSITION_AUSGEGEBEN] = bdMenge;

                    // Einkaufspreis des ersten Lieferanten hinzufuegen
                    ArtikellieferantDto dto = getArtikelFac().getArtikelEinkaufspreis(sollmat[j].getArtikelIId(),
                            null, new BigDecimal(1), theClientDto.getSMandantenwaehrung(),
                            new java.sql.Date(sollmat[j].getTAendern().getTime()), theClientDto);
                    if (dto != null) {
                        zeile[HF_POSITION_EKPREIS] = dto.getLief1Preis();
                    }

                    // CK:2008-12-23 Wegen Beistellteilen ist die Verfaelschung
                    // des Gestehungspreises falsch
                    // es muss immer der Gestehungspreis zum ausgabezeitpunkt
                    // verwendet werden.
                    BigDecimal bdPreis = getFertigungFac().getAusgegebeneMengePreis(sollmat[j].getIId(), tsStichtag,
                            theClientDto);
                    zeile[HF_POSITION_PREIS] = bdPreis;

                    BigDecimal sollsatzmenge = new BigDecimal(0);

                    if (item.getN_losgroesse().doubleValue() != 0) {
                        sollsatzmenge = sollmat[j].getNMenge().divide(item.getN_losgroesse(),
                                BigDecimal.ROUND_HALF_EVEN);
                    }

                    BigDecimal theoretischabgeliefert = sollsatzmenge.multiply(bdAbgeliefert);

                    if (theoretischabgeliefert.doubleValue() > bdMenge.doubleValue()) {
                        theoretischabgeliefert = bdMenge;
                    }

                    zeile[HF_POSITION_ABGELIFERT] = theoretischabgeliefert;
                    zeile[HF_POSITION_OFFEN] = bdMenge.subtract(theoretischabgeliefert);

                    ArtikelDto artikelDto = getArtikelFac().artikelFindByPrimaryKey(sollmat[j].getArtikelIId(),
                            theClientDto);
                    zeile[HF_POSITION_ARTIKELNUMMMER] = artikelDto.getCNr();
                    zeile[HF_POSITION_BEZEICHNUNG] = artikelDto.formatBezeichnung();

                    if (bVerdichtet) {
                        if (iSortierung == FertigungReportFac.HF_OPTION_SORTIERUNG_ARTIKELNR) {
                            boolean bGefunden = false;
                            for (int k = 0; k < alDaten.size(); k++) {
                                Object[] zeileTemp = (Object[]) alDaten.get(k);

                                if (zeileTemp[HF_POSITION_ARTIKELNUMMMER]
                                        .equals(zeile[HF_POSITION_ARTIKELNUMMMER])) {
                                    bGefunden = true;

                                    zeileTemp[HF_LOSNUMMER] = "";
                                    zeileTemp[HF_POSITION_AUSGEGEBEN] = ((BigDecimal) zeileTemp[HF_POSITION_AUSGEGEBEN])
                                            .add((BigDecimal) zeile[HF_POSITION_AUSGEGEBEN]);
                                    zeileTemp[HF_POSITION_ABGELIFERT] = ((BigDecimal) zeileTemp[HF_POSITION_ABGELIFERT])
                                            .add((BigDecimal) zeile[HF_POSITION_ABGELIFERT]);

                                    // Neuen Preis berechnen

                                    BigDecimal alterPreis = (BigDecimal) zeileTemp[HF_POSITION_PREIS];
                                    BigDecimal alteOffen = (BigDecimal) zeileTemp[HF_POSITION_OFFEN];

                                    BigDecimal neuerPreis = (BigDecimal) zeile[HF_POSITION_PREIS];
                                    BigDecimal neueOffen = (BigDecimal) zeile[HF_POSITION_OFFEN];

                                    BigDecimal wertNeu = alterPreis.multiply(alteOffen)
                                            .add(neuerPreis.multiply(neueOffen));

                                    if (neueOffen.add(alteOffen).doubleValue() != 0) {
                                        zeileTemp[HF_POSITION_PREIS] = wertNeu.divide(neueOffen.add(alteOffen), 4,
                                                BigDecimal.ROUND_HALF_EVEN);
                                    } else {
                                        zeileTemp[HF_POSITION_PREIS] = new BigDecimal(0);
                                    }

                                    zeileTemp[HF_POSITION_OFFEN] = neueOffen.add(alteOffen);

                                    alDaten.set(k, zeileTemp);
                                }

                            }

                            if (bGefunden == false) {
                                alDaten.add(zeile);
                            }

                        } else if (iSortierung == FertigungReportFac.HF_OPTION_SORTIERUNG_LOSNR) {
                            boolean bGefunden = false;
                            for (int k = 0; k < alDaten.size(); k++) {
                                Object[] zeileTemp = (Object[]) alDaten.get(k);

                                if (zeileTemp[HF_LOSNUMMER].equals(zeile[HF_LOSNUMMER])) {
                                    bGefunden = true;

                                    zeileTemp[HF_POSITION_ARTIKELNUMMMER] = "";
                                    zeileTemp[HF_POSITION_BEZEICHNUNG] = "";

                                    zeileTemp[HF_POSITION_AUSGEGEBEN] = ((BigDecimal) zeileTemp[HF_POSITION_AUSGEGEBEN])
                                            .add((BigDecimal) zeile[HF_POSITION_AUSGEGEBEN]);
                                    zeileTemp[HF_POSITION_ABGELIFERT] = ((BigDecimal) zeileTemp[HF_POSITION_ABGELIFERT])
                                            .add((BigDecimal) zeile[HF_POSITION_ABGELIFERT]);

                                    // Neuen Preis berechnen

                                    BigDecimal alterPreis = (BigDecimal) zeileTemp[HF_POSITION_PREIS];
                                    BigDecimal alteOffen = (BigDecimal) zeileTemp[HF_POSITION_OFFEN];

                                    BigDecimal neuerPreis = (BigDecimal) zeile[HF_POSITION_PREIS];
                                    BigDecimal neueOffen = (BigDecimal) zeile[HF_POSITION_OFFEN];

                                    BigDecimal wertNeu = alterPreis.multiply(alteOffen)
                                            .add(neuerPreis.multiply(neueOffen));

                                    if (neueOffen.add(alteOffen).doubleValue() != 0) {
                                        zeileTemp[HF_POSITION_PREIS] = wertNeu.divide(neueOffen.add(alteOffen), 4,
                                                BigDecimal.ROUND_HALF_EVEN);
                                    } else {
                                        zeileTemp[HF_POSITION_PREIS] = new BigDecimal(0);
                                    }

                                    zeileTemp[HF_POSITION_OFFEN] = neueOffen.add(alteOffen);

                                    alDaten.set(k, zeileTemp);
                                }

                            }

                            if (bGefunden == false) {
                                alDaten.add(zeile);
                            }

                        }
                    } else {

                        alDaten.add(zeile);
                    }
                    zeile = new Object[17];
                    zeile[HF_LOSNUMMER] = item.getC_nr();
                }

                // Verbrauchte Arbeitszeit
                LossollarbeitsplanDto[] lossollarbeitsplanDto = getFertigungFac()
                        .lossollarbeitsplanFindByLosIId(item.getI_id());
                for (int j = 0; j < lossollarbeitsplanDto.length; j++) {
                    AuftragzeitenDto[] zeiten = getZeiterfassungFac().getAllZeitenEinesBeleges(
                            LocaleFac.BELEGART_LOS, item.getI_id(), null, null, null, tsStichtag, false, false,
                            theClientDto);

                    ArtikelDto artikelDto = getArtikelFac().artikelFindByPrimaryKey(
                            lossollarbeitsplanDto[j].getArtikelIIdTaetigkeit(), theClientDto);
                    zeile[HF_POSITION_ARTIKELNUMMMER] = artikelDto.getCNr();
                    zeile[HF_POSITION_BEZEICHNUNG] = artikelDto.formatBezeichnung();

                    BigDecimal bdArbeitszeitwert = new BigDecimal(0);
                    BigDecimal bdIstZeit = new BigDecimal(0);

                    for (int k = 0; k < zeiten.length; k++) {
                        if (artikelDto.getIId().equals(zeiten[k].getArtikelIId())) {

                            bdArbeitszeitwert = bdArbeitszeitwert.add(zeiten[k].getBdKosten());
                            bdIstZeit = bdIstZeit.add(new BigDecimal(zeiten[k].getDdDauer().doubleValue()));
                        }
                    }
                    BigDecimal sollsatzmenge = new BigDecimal(0);

                    if (item.getN_losgroesse().doubleValue() != 0) {

                        sollsatzmenge = lossollarbeitsplanDto[j].getNGesamtzeit().divide(item.getN_losgroesse(),
                                BigDecimal.ROUND_HALF_EVEN);
                    }

                    if (Helper.short2boolean(lossollarbeitsplanDto[j].getBNurmaschinenzeit())) {
                        zeile[HF_POSITION_AUSGEGEBEN] = new BigDecimal(0);
                    } else {
                        zeile[HF_POSITION_AUSGEGEBEN] = lossollarbeitsplanDto[j].getNGesamtzeit();
                    }

                    BigDecimal theoretischabgeliefert = sollsatzmenge.multiply(bdAbgeliefert);

                    BigDecimal restist = bdIstZeit.subtract(theoretischabgeliefert);

                    if (restist.doubleValue() <= 0) {
                        restist = new BigDecimal(0);
                    }

                    if (theoretischabgeliefert.doubleValue() > bdIstZeit.doubleValue()) {
                        theoretischabgeliefert = bdIstZeit;
                    }
                    zeile[HF_POSITION_ABGELIFERT] = theoretischabgeliefert;
                    zeile[HF_POSITION_OFFEN] = restist;

                    if (bdIstZeit.doubleValue() != 0) {
                        zeile[HF_POSITION_PREIS] = bdArbeitszeitwert.divide(bdIstZeit, BigDecimal.ROUND_HALF_EVEN);
                    } else {
                        zeile[HF_POSITION_PREIS] = new BigDecimal(0);
                    }

                    AuftragzeitenDto[] maschinenzeiten = getZeiterfassungFac().getAllMaschinenzeitenEinesBeleges(
                            item.getI_id(), lossollarbeitsplanDto[j].getIId(), null, tsStichtag, theClientDto);

                    BigDecimal bdArbeitszeitwertMaschine = new BigDecimal(0);
                    BigDecimal bdIstZeitMaschine = new BigDecimal(0);

                    for (int k = 0; k < maschinenzeiten.length; k++) {

                        bdArbeitszeitwertMaschine = bdArbeitszeitwertMaschine.add(maschinenzeiten[k].getBdKosten());
                        bdIstZeitMaschine = bdIstZeitMaschine
                                .add(new BigDecimal(maschinenzeiten[k].getDdDauer().doubleValue()));

                    }

                    if (lossollarbeitsplanDto[j].getMaschineIId() == null) {
                        zeile[HF_POSITION_AUSGEGEBEN_MASCHINE] = new BigDecimal(0);
                    } else {
                        zeile[HF_POSITION_AUSGEGEBEN_MASCHINE] = lossollarbeitsplanDto[j].getNGesamtzeit();
                    }

                    theoretischabgeliefert = sollsatzmenge.multiply(bdAbgeliefert);
                    BigDecimal restistMaschine = bdIstZeitMaschine.subtract(theoretischabgeliefert);

                    if (restistMaschine.doubleValue() <= 0) {
                        restistMaschine = new BigDecimal(0);
                    }

                    if (theoretischabgeliefert.doubleValue() > bdIstZeitMaschine.doubleValue()) {
                        theoretischabgeliefert = bdIstZeitMaschine;
                    }
                    zeile[HF_POSITION_ABGELIFERT_MASCHINE] = theoretischabgeliefert;
                    zeile[HF_POSITION_OFFEN_MASCHINE] = restistMaschine;

                    if (bdIstZeitMaschine.doubleValue() != 0) {
                        zeile[HF_POSITION_PREIS_MASCHINE] = bdArbeitszeitwertMaschine.divide(bdIstZeitMaschine,
                                BigDecimal.ROUND_HALF_EVEN);
                    } else {
                        zeile[HF_POSITION_PREIS_MASCHINE] = new BigDecimal(0);
                    }

                    if (bVerdichtet) {
                        if (iSortierung == FertigungReportFac.HF_OPTION_SORTIERUNG_ARTIKELNR) {
                            boolean bGefunden = false;
                            for (int k = 0; k < alDaten.size(); k++) {
                                Object[] zeileTemp = (Object[]) alDaten.get(k);

                                if (zeileTemp[HF_POSITION_ARTIKELNUMMMER]
                                        .equals(zeile[HF_POSITION_ARTIKELNUMMMER])) {
                                    bGefunden = true;

                                    zeileTemp[HF_LOSNUMMER] = "";
                                    zeileTemp[HF_POSITION_AUSGEGEBEN] = ((BigDecimal) zeileTemp[HF_POSITION_AUSGEGEBEN])
                                            .add((BigDecimal) zeile[HF_POSITION_AUSGEGEBEN]);
                                    zeileTemp[HF_POSITION_ABGELIFERT] = ((BigDecimal) zeileTemp[HF_POSITION_ABGELIFERT])
                                            .add((BigDecimal) zeile[HF_POSITION_ABGELIFERT]);

                                    // Neuen Preis berechnen

                                    BigDecimal alterPreis = (BigDecimal) zeileTemp[HF_POSITION_PREIS];
                                    BigDecimal alteOffen = (BigDecimal) zeileTemp[HF_POSITION_OFFEN];

                                    BigDecimal neuerPreis = (BigDecimal) zeile[HF_POSITION_PREIS];
                                    BigDecimal neueOffen = (BigDecimal) zeile[HF_POSITION_OFFEN];

                                    BigDecimal wertNeu = alterPreis.multiply(alteOffen)
                                            .add(neuerPreis.multiply(neueOffen));

                                    if (neueOffen.add(alteOffen).doubleValue() != 0) {
                                        zeileTemp[HF_POSITION_PREIS] = wertNeu.divide(neueOffen.add(alteOffen), 4,
                                                BigDecimal.ROUND_HALF_EVEN);
                                    } else {
                                        zeileTemp[HF_POSITION_PREIS] = new BigDecimal(0);
                                    }

                                    zeileTemp[HF_POSITION_OFFEN] = neueOffen.add(alteOffen);

                                    alDaten.set(k, zeileTemp);
                                }

                            }

                            if (bGefunden == false) {
                                alDaten.add(zeile);
                            }

                        } else if (iSortierung == FertigungReportFac.HF_OPTION_SORTIERUNG_LOSNR) {
                            boolean bGefunden = false;
                            for (int k = 0; k < alDaten.size(); k++) {
                                Object[] zeileTemp = (Object[]) alDaten.get(k);

                                if (zeileTemp[HF_LOSNUMMER].equals(zeile[HF_LOSNUMMER])) {
                                    bGefunden = true;

                                    zeileTemp[HF_POSITION_ARTIKELNUMMMER] = "";
                                    zeileTemp[HF_POSITION_BEZEICHNUNG] = "";
                                    zeileTemp[HF_POSITION_AUSGEGEBEN] = ((BigDecimal) zeileTemp[HF_POSITION_AUSGEGEBEN])
                                            .add((BigDecimal) zeile[HF_POSITION_AUSGEGEBEN]);
                                    zeileTemp[HF_POSITION_ABGELIFERT] = ((BigDecimal) zeileTemp[HF_POSITION_ABGELIFERT])
                                            .add((BigDecimal) zeile[HF_POSITION_ABGELIFERT]);

                                    // Neuen Preis berechnen

                                    BigDecimal alterPreis = (BigDecimal) zeileTemp[HF_POSITION_PREIS];
                                    BigDecimal alteOffen = (BigDecimal) zeileTemp[HF_POSITION_OFFEN];

                                    BigDecimal neuerPreis = (BigDecimal) zeile[HF_POSITION_PREIS];
                                    BigDecimal neueOffen = (BigDecimal) zeile[HF_POSITION_OFFEN];

                                    BigDecimal wertNeu = alterPreis.multiply(alteOffen)
                                            .add(neuerPreis.multiply(neueOffen));

                                    if (neueOffen.add(alteOffen).doubleValue() != 0) {
                                        zeileTemp[HF_POSITION_PREIS] = wertNeu.divide(neueOffen.add(alteOffen), 4,
                                                BigDecimal.ROUND_HALF_EVEN);
                                    } else {
                                        zeileTemp[HF_POSITION_PREIS] = new BigDecimal(0);
                                    }

                                    zeileTemp[HF_POSITION_OFFEN] = neueOffen.add(alteOffen);

                                    alDaten.set(k, zeileTemp);
                                }

                            }

                            if (bGefunden == false) {
                                alDaten.add(zeile);
                            }

                        }
                    } else {

                        alDaten.add(zeile);
                    }

                    zeile = new Object[17];
                    zeile[HF_LOSNUMMER] = item.getC_nr();

                }

            }
            mapParameter.put(LPReport.P_WAEHRUNG, theClientDto.getSMandantenwaehrung());
            mapParameter.put("P_VERDICHTET", new Boolean(bVerdichtet));

            if (iSortierung == FertigungReportFac.HF_OPTION_SORTIERUNG_LOSNR) {
                // Sortierng nach Losnr
                data = new Object[alDaten.size()][17];
                data = (Object[][]) alDaten.toArray(data);

                initJRDS(mapParameter, FertigungReportFac.REPORT_MODUL,
                        FertigungReportFac.REPORT_HALBFERTIGFABRIKATSINVENTUR, theClientDto.getMandant(),
                        theClientDto.getLocUi(), theClientDto);
            } else if (iSortierung == FertigungReportFac.HF_OPTION_SORTIERUNG_ARTIKELNR) {

                // Sortieren nach Identnr
                for (int k = alDaten.size() - 1; k > 0; --k) {
                    for (int j = 0; j < k; ++j) {
                        Object[] a1 = (Object[]) alDaten.get(j);
                        Object[] a2 = (Object[]) alDaten.get(j + 1);

                        if (((String) a1[HF_POSITION_ARTIKELNUMMMER])
                                .compareTo((String) a2[HF_POSITION_ARTIKELNUMMMER]) > 0) {
                            alDaten.set(j, a2);
                            alDaten.set(j + 1, a1);
                        }
                    }
                }
                data = new Object[alDaten.size()][17];
                data = (Object[][]) alDaten.toArray(data);

                initJRDS(mapParameter, FertigungReportFac.REPORT_MODUL,
                        FertigungReportFac.REPORT_HALBFERTIGFABRIKATSINVENTUR_IDENT, theClientDto.getMandant(),
                        theClientDto.getLocUi(), theClientDto);

            }
            return getReportPrint();
        } catch (RemoteException t) {
            throwEJBExceptionLPRespectOld(t);
        } finally {
            closeSession(session);
        }
        return getReportPrint();
    }

    public ReportLosnachkalkulationDto[] getDataNachkalkulationZeitdaten(Integer losIId, TheClientDto theClientDto)
            throws EJBExceptionLP {
        try {
            String sMandantWaehrung = theClientDto.getSMandantenwaehrung();

            ParametermandantDto parametermandantDto = getParameterFac().getMandantparameter(
                    theClientDto.getMandant(), ParameterFac.KATEGORIE_FERTIGUNG,
                    ParameterFac.PARAMETER_ISTZEITEN_GLEICH_SOLLZEITEN);
            boolean bSollGleichIstzeiten = false;

            if (((java.lang.Boolean) parametermandantDto.getCWertAsObject()).booleanValue() == true) {
                bSollGleichIstzeiten = true;
            }

            LosDto losDto = getFertigungFac().losFindByPrimaryKey(losIId);
            BigDecimal erlMenge = getFertigungFac().getErledigteMenge(losIId, theClientDto);
            BigDecimal faktorFuerIstGleichSoll = new BigDecimal(0);

            if (losDto.getStatusCNr().equals(FertigungFac.STATUS_ERLEDIGT)) {
                faktorFuerIstGleichSoll = new BigDecimal(1);
            } else {

                if (losDto.getNLosgroesse().doubleValue() > 0) {
                    faktorFuerIstGleichSoll = erlMenge.divide(losDto.getNLosgroesse(), 10,
                            BigDecimal.ROUND_HALF_EVEN);
                }
            }
            // Sollzeiten holen
            LossollarbeitsplanDto[] soll = getFertigungFac().lossollarbeitsplanFindByLosIId(losIId);
            // Eine Verdichtete Liste anlegen
            HashMap<Integer, ReportLosnachkalkulationDto> listVerdichtet = new HashMap<Integer, ReportLosnachkalkulationDto>();
            // fuer jede Ident eine Zeile anlegen

            for (int i = 0; i < soll.length; i++) {
                ReportLosnachkalkulationDto dto = (ReportLosnachkalkulationDto) listVerdichtet
                        .get(soll[i].getArtikelIIdTaetigkeit());
                if (dto == null) {
                    dto = new ReportLosnachkalkulationDto();
                    listVerdichtet.put(soll[i].getArtikelIIdTaetigkeit(), dto);
                    ArtikelDto artikelDto = getArtikelFac()
                            .artikelFindByPrimaryKeySmall(soll[i].getArtikelIIdTaetigkeit(), theClientDto);
                    dto.setSArtikelnummer(artikelDto.getCNr());
                    dto.setSBezeichnung(artikelDto.formatBezeichnung());
                }

                if (soll[i].getMaschineIId() != null && Helper.short2boolean(soll[i].getBNurmaschinenzeit())) {
                    // Dann keine Personalzeit
                } else {
                    dto.addiereZuSollmenge(soll[i].getNGesamtzeit());
                }

                // CK:Neu
                if (bSollGleichIstzeiten == true) {
                    dto.addiereZuIstmenge(soll[i].getNGesamtzeit().multiply(faktorFuerIstGleichSoll));
                }

                if (soll[i].getMaschineIId() != null) {
                    dto.addiereZuSollmengeMaschine(soll[i].getNGesamtzeit());
                    if (bSollGleichIstzeiten == true) {
                        dto.addiereZuIstmengeMaschine(soll[i].getNGesamtzeit().multiply(faktorFuerIstGleichSoll));
                    }

                    // Soll hinzufuegen
                    BigDecimal sollpreis = getZeiterfassungFac().getMaschinenKostenZumZeitpunkt(
                            soll[i].getMaschineIId(),
                            Helper.cutTimestamp(new Timestamp(System.currentTimeMillis())));

                    dto.addiereZuSollpreis(soll[i].getNGesamtzeit().multiply(sollpreis));
                    if (bSollGleichIstzeiten == true) {
                        dto.addiereZuIstpreis(
                                soll[i].getNGesamtzeit().multiply(sollpreis).multiply(faktorFuerIstGleichSoll));
                    }

                }

                if (Helper.short2boolean(soll[i].getBNurmaschinenzeit()) == false) {
                    ArtikellieferantDto artlief = getArtikelFac().getArtikelEinkaufspreis(
                            soll[i].getArtikelIIdTaetigkeit(), new BigDecimal(1), sMandantWaehrung, theClientDto);
                    if (artlief != null && artlief.getLief1Preis() != null) {
                        BigDecimal bdSollpreis = artlief.getLief1Preis();
                        dto.addiereZuSollpreis(soll[i].getNGesamtzeit().multiply(bdSollpreis));
                        if (bSollGleichIstzeiten == true) {
                            dto.addiereZuIstpreis(soll[i].getNGesamtzeit().multiply(bdSollpreis)
                                    .multiply(faktorFuerIstGleichSoll));
                        }
                    }
                }
            }

            // gebuchte Zeiten holen

            // Eine zusaetzliche Zeile fuer gebuchte Taetigkeiten, die im Soll
            // nicht vorkamen
            ReportLosnachkalkulationDto nkSonstige = new ReportLosnachkalkulationDto();
            nkSonstige.setSBezeichnung(
                    getTextRespectUISpr("lp.sonstige", theClientDto.getMandant(), theClientDto.getLocUi()));

            if (bSollGleichIstzeiten == false) {

                // Maschinenzeiten
                AuftragzeitenDto[] zeitenMaschine = getZeiterfassungFac().getAllMaschinenzeitenEinesBeleges(losIId,
                        null, null, null, theClientDto);
                for (int i = 0; i < zeitenMaschine.length; i++) {
                    zeitenMaschine[i].getDdDauer();
                    ReportLosnachkalkulationDto nk = (ReportLosnachkalkulationDto) listVerdichtet
                            .get(zeitenMaschine[i].getArtikelIId());
                    if (nk != null) {
                        nk.addiereZuIstmengeMaschine(new BigDecimal(zeitenMaschine[i].getDdDauer().doubleValue()));
                        nk.addiereZuIstpreis(zeitenMaschine[i].getBdKosten());
                    } else {
                        nkSonstige.addiereZuIstmengeMaschine(
                                new BigDecimal(zeitenMaschine[i].getDdDauer().doubleValue()));
                        nkSonstige.addiereZuIstpreis(zeitenMaschine[i].getBdKosten());
                    }
                }
                // Istzeiten (ohne Maschinenzeiten)
                AuftragzeitenDto[] zeiten = getZeiterfassungFac().getAllZeitenEinesBeleges(LocaleFac.BELEGART_LOS,
                        losIId, null, null, null, null, false, false, theClientDto);
                for (int i = 0; i < zeiten.length; i++) {
                    zeiten[i].getDdDauer();
                    ReportLosnachkalkulationDto nk = (ReportLosnachkalkulationDto) listVerdichtet
                            .get(zeiten[i].getArtikelIId());
                    if (nk != null) {
                        nk.addiereZuIstmenge(new BigDecimal(zeiten[i].getDdDauer().doubleValue()));
                        nk.addiereZuIstpreis(zeiten[i].getBdKosten());
                    } else {
                        nkSonstige.addiereZuIstmenge(new BigDecimal(zeiten[i].getDdDauer().doubleValue()));
                        nkSonstige.addiereZuIstpreis(zeiten[i].getBdKosten());
                    }
                }
            }
            // Das ganze in ein Array umwandeln
            ReportLosnachkalkulationDto[] result = new ReportLosnachkalkulationDto[listVerdichtet.size() + 1];
            int i = 0;
            for (Iterator<Integer> iter = listVerdichtet.keySet().iterator(); iter.hasNext(); i++) {
                ReportLosnachkalkulationDto item = (ReportLosnachkalkulationDto) listVerdichtet.get(iter.next());
                result[i] = item;
            }
            // jetzt kommen auch die sonstigen dazu
            result[listVerdichtet.size()] = nkSonstige;
            return result;
        } catch (RemoteException ex) {
            throwEJBExceptionLPRespectOld(ex);
            return null;
        }
    }

    private Object[][] getDataAusgabeListe(Integer[] losIId, Integer iSortierung, boolean bVerdichtetNachIdent,
            boolean bVorrangigNachFarbcodeSortiert, Integer artikelklasseIId, TheClientDto theClientDto) {
        Session session = null;

        Object[][] dataLokal = null;

        try {

            SessionFactory factory = FLRSessionFactory.getFactory();
            session = factory.openSession();
            Criteria c = session.createCriteria(FLRLossollmaterial.class);

            c.add(Restrictions.in(FertigungFac.FLR_LOSSOLLMATERIAL_LOS_I_ID, losIId));

            if (artikelklasseIId != null) {

                c.createAlias("flrartikel", "a").createAlias("a.flrartikelklasse", "kl")
                        .add(Restrictions.eq("kl.i_id", artikelklasseIId));
            }

            List<?> list = c.list();
            // positionen verdichten
            LinkedHashMap<Integer, ReportLosAusgabelisteDto> listVerdichtet = new LinkedHashMap<Integer, ReportLosAusgabelisteDto>();
            for (Iterator<?> iter = list.iterator(); iter.hasNext();) {
                FLRLossollmaterial sollmat = (FLRLossollmaterial) iter.next();

                LosistmaterialDto[] mat = getFertigungFac()
                        .losistmaterialFindByLossollmaterialIId(sollmat.getI_id());
                ArtikelDto artikelDto = getArtikelFac().artikelFindByPrimaryKey(sollmat.getFlrartikel().getI_id(),
                        theClientDto);

                LoslagerentnahmeDto[] laeger = getFertigungFac()
                        .loslagerentnahmeFindByLosIId(sollmat.getLos_i_id());
                BigDecimal lagerstand = new BigDecimal(0);
                if (Helper.short2boolean(artikelDto.getBLagerbewirtschaftet()) == true) {
                    for (int i = 0; i < laeger.length; i++) {
                        lagerstand = lagerstand.add(getLagerFac().getLagerstandOhneExc(artikelDto.getIId(),
                                laeger[i].getLagerIId(), theClientDto));
                    }

                }
                BigDecimal inFertigung = getFertigungFac().getAnzahlInFertigung(artikelDto.getIId(), theClientDto);
                BigDecimal lagerstandSperrlager = getLagerFac()
                        .getLagerstandAllerSperrlaegerEinesMandanten(artikelDto.getIId(), theClientDto);

                // Artikelkommentar Text und Bild
                Image imageKommentar = null;
                String sArtikelKommentar = "";
                try {
                    ArtikelkommentarDto[] aKommentarDto = getArtikelkommentarFac()
                            .artikelkommentardruckFindByArtikelIIdBelegartCNr(artikelDto.getIId(),
                                    LocaleFac.BELEGART_LOS, theClientDto.getLocUiAsString(), theClientDto);

                    // Artikelkommentar kann Text oder Bild sein
                    if (aKommentarDto != null) {
                        for (int k = 0; k < aKommentarDto.length; k++) {
                            String cDatenformat = aKommentarDto[k].getDatenformatCNr().trim();
                            if (cDatenformat.indexOf(MediaFac.DATENFORMAT_MIMETYPEART_TEXT) != -1) {
                                sArtikelKommentar += "\n"
                                        + aKommentarDto[k].getArtikelkommentarsprDto().getXKommentar();
                            } else if (cDatenformat.indexOf(MediaFac.DATENFORMAT_MIMETYPEART_IMAGE) != -1) {
                                // es wird hoechstens 1 Bild pro Belegart
                                // gedruckt
                                imageKommentar = Helper
                                        .byteArrayToImage(aKommentarDto[k].getArtikelkommentarsprDto().getOMedia());
                            }
                        }
                    }

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

                if (mat.length == 0) {
                    ReportLosAusgabelisteDto dto = new ReportLosAusgabelisteDto();
                    dto.setISchale(sollmat.getI_lfdnummer());
                    dto.setNAusgabe(new BigDecimal(0));
                    dto.setNMenge(sollmat.getN_menge());

                    dto.setNLagerstand(lagerstand);
                    dto.setNLagerstandSperrlager(lagerstandSperrlager);
                    dto.setNInFertigung(inFertigung);
                    dto.setArtikelbild(imageKommentar);
                    dto.setSKommentar(sArtikelKommentar);
                    dto.setBNurZurInfo(Helper.short2Boolean(artikelDto.getbNurzurinfo()));

                    if (artikelDto.getFarbcodeIId() != null) {
                        dto.setSFarbcode(
                                getArtikelFac().farbcodeFindByPrimaryKey(artikelDto.getFarbcodeIId()).getCNr());
                    }

                    dto.setSBezeichnung(artikelDto.getArtikelsprDto().getCBez());
                    dto.setSZusatzBezeichnung(artikelDto.getArtikelsprDto().getCZbez());
                    dto.setSZusatzBezeichnung2(artikelDto.getArtikelsprDto().getCZbez2());
                    dto.setSEinheit(sollmat.getFlrartikel().getEinheit_c_nr());

                    // Material
                    if (artikelDto.getMaterialIId() != null) {
                        MaterialDto materialDto = getMaterialFac()
                                .materialFindByPrimaryKey(artikelDto.getMaterialIId(), theClientDto);
                        dto.setSMaterial(materialDto.getBezeichnung());
                    }
                    // Staerke/Hoehe
                    if (artikelDto.getGeometrieDto() != null) {
                        if (artikelDto.getGeometrieDto().getFHoehe() != null) {
                            dto.setDHoehe(artikelDto.getGeometrieDto().getFHoehe());
                        }
                        if (artikelDto.getGeometrieDto().getFBreite() != null) {
                            dto.setDBreite(artikelDto.getGeometrieDto().getFBreite());
                        }
                        if (artikelDto.getGeometrieDto().getFTiefe() != null) {
                            dto.setDTiefe(artikelDto.getGeometrieDto().getFTiefe());
                        }
                    }

                    dto.setSRevision(artikelDto.getCRevision());
                    dto.setSIndex(artikelDto.getCIndex());

                    // Verpackung
                    if (artikelDto.getVerpackungDto() != null) {
                        dto.setSBauform(artikelDto.getVerpackungDto().getCBauform());
                        dto.setSVerpackungsart(artikelDto.getVerpackungDto().getCVerpackungsart());
                    }

                    // Gewicht
                    dto.setDGewichtkg(artikelDto.getFGewichtkg());
                    // Montage Rasterstehend
                    if (artikelDto.getMontageDto() != null
                            && artikelDto.getMontageDto().getFRasterstehend() != null) {
                        dto.setDRasterstehend(artikelDto.getMontageDto().getFRasterstehend().doubleValue());
                    }
                    String sIdent;
                    if (sollmat.getFlrartikel().getArtikelart_c_nr().equals(ArtikelFac.ARTIKELART_HANDARTIKEL)) {
                        sIdent = "";
                    } else {
                        sIdent = sollmat.getFlrartikel().getC_nr();
                    }
                    dto.setSIdent(sIdent);
                    if (sollmat.getFlrartikel().getFlrartikelklasse() != null) {
                        dto.setSArtikelklasse(sollmat.getFlrartikel().getFlrartikelklasse().getC_nr());
                    }
                    if (sollmat.getMontageart_i_id() != null) {
                        MontageartDto montageartDto = getStuecklisteFac()
                                .montageartFindByPrimaryKey(sollmat.getMontageart_i_id(), theClientDto);
                        dto.setSMontageart(montageartDto.getCBez());
                    }

                    LosDto losDto = getFertigungFac().losFindByPrimaryKey(sollmat.getLos_i_id());
                    LagerDto lagerDto = getLagerFac().lagerFindByPrimaryKey(losDto.getLagerIIdZiel());
                    dto.setSLager(lagerDto.getCNr());

                    String sLagerort = getLagerFac().getLagerplaezteEinesArtikels(sollmat.getFlrartikel().getI_id(),
                            losDto.getLagerIIdZiel());

                    dto.setSLagerort(sLagerort);
                    // offene Bestellmenge
                    dto.setBdAnzahlBestellt(getArtikelbestelltFac().getAnzahlBestellt(artikelDto.getIId()));

                    // Stuecklistepositionskommentar
                    if (sollmat.getFlrlos().getStueckliste_i_id() != null) {
                        try {
                            StuecklistepositionDto[] stuecklistepositionDto = getStuecklisteFac()
                                    .stuecklistepositionFindByStuecklisteIIdArtikelIId(
                                            sollmat.getFlrlos().getStueckliste_i_id(), artikelDto.getIId(),
                                            theClientDto);

                            StringBuffer sbKommentarStuecklistepos = new StringBuffer();
                            // wenn ein Artikel mehrfach vorkommt und ich ja
                            // nicht entscheiden kann, an
                            // welcher Stelle ich bin, alle Kommentar
                            // aneinanderhaengen
                            for (int k = 0; k < stuecklistepositionDto.length; k++) {
                                sbKommentarStuecklistepos.append(stuecklistepositionDto[0].getCKommentar());

                            }
                            if (sbKommentarStuecklistepos.length() > 0) {
                                dto.setSKommentarStueckliste(sbKommentarStuecklistepos.toString());
                            }
                        } catch (EJBExceptionLP e) {
                            // ok
                        }
                    }

                    // key ist -i_id, damit ich keine vorhandenen eintraege
                    // ueberschreibe

                    // verdichten nach ident

                    Iterator<Integer> it = listVerdichtet.keySet().iterator();
                    boolean bGefunden = false;

                    if (bVerdichtetNachIdent) {
                        while (it.hasNext()) {
                            Object key = it.next();

                            ReportLosAusgabelisteDto temp = (ReportLosAusgabelisteDto) listVerdichtet.get(key);
                            if ((temp.getSLager() == null && lagerDto.getCNr() == null)
                                    || (temp.getSLager() != null && lagerDto.getCNr() != null)) {
                                if ((temp.getSLager() == null && lagerDto.getCNr() == null)
                                        || (temp.getSLager().equals(lagerDto.getCNr()))) {

                                    if (temp.getSIdent().equals(sIdent) && !temp.getSIdent().equals("")) {

                                        bGefunden = true;
                                        dto.setNMenge(dto.getNMenge().add(temp.getNMenge()));
                                        dto.setNAusgabe(dto.getNAusgabe().add(temp.getNAusgabe()));

                                        listVerdichtet.put((Integer) key, dto);

                                        continue;
                                    }
                                }
                            }

                        }
                    }
                    if (bGefunden == false) {
                        listVerdichtet.put(new Integer(-sollmat.getI_id().intValue()), dto);
                    }

                } else {

                    for (int i = 0; i < mat.length; i++) {
                        BigDecimal ausgabemenge = new BigDecimal(0);
                        Integer lagerIId = null;

                        if (Helper.short2boolean(mat[i].getBAbgang()) == true) {
                            ausgabemenge = ausgabemenge.add(mat[i].getNMenge());
                        } else {
                            ausgabemenge = ausgabemenge.add(mat[i].getNMenge().multiply(new BigDecimal(-1)));
                        }
                        lagerIId = mat[i].getLagerIId();

                        ReportLosAusgabelisteDto dto = new ReportLosAusgabelisteDto();
                        dto.setISchale(sollmat.getI_lfdnummer());
                        dto.setNAusgabe(ausgabemenge);
                        dto.setArtikelbild(imageKommentar);
                        dto.setSKommentar(sArtikelKommentar);
                        dto.setNLagerstand(lagerstand);
                        dto.setNLagerstandSperrlager(lagerstandSperrlager);
                        dto.setNInFertigung(inFertigung);

                        // Sollmenge zaehlt nur beim ersten eintrag
                        if (i == 0) {
                            dto.setNMenge(sollmat.getN_menge());
                        } else {
                            dto.setNMenge(new BigDecimal(0));
                        }

                        if (sollmat.getFlrartikel().getFlrartikelklasse() != null) {
                            dto.setSArtikelklasse(sollmat.getFlrartikel().getFlrartikelklasse().getC_nr());
                        } else {
                            dto.setSArtikelklasse("");
                        }

                        if (artikelDto.getFarbcodeIId() != null) {
                            dto.setSFarbcode(
                                    getArtikelFac().farbcodeFindByPrimaryKey(artikelDto.getFarbcodeIId()).getCNr());
                        }
                        dto.setSBezeichnung(artikelDto.getArtikelsprDto().getCBez());
                        dto.setSZusatzBezeichnung(artikelDto.getArtikelsprDto().getCZbez());
                        dto.setSZusatzBezeichnung2(artikelDto.getArtikelsprDto().getCZbez2());
                        dto.setSEinheit(sollmat.getFlrartikel().getEinheit_c_nr());

                        dto.setBNurZurInfo(Helper.short2Boolean(artikelDto.getbNurzurinfo()));

                        // Material
                        if (artikelDto.getMaterialIId() != null) {
                            MaterialDto materialDto = getMaterialFac()
                                    .materialFindByPrimaryKey(artikelDto.getMaterialIId(), theClientDto);
                            dto.setSMaterial(materialDto.getBezeichnung());
                        }
                        // Staerke/Hoehe
                        if (artikelDto.getGeometrieDto() != null) {
                            if (artikelDto.getGeometrieDto().getFHoehe() != null) {
                                dto.setDHoehe(artikelDto.getGeometrieDto().getFHoehe());
                            }
                            if (artikelDto.getGeometrieDto().getFBreite() != null) {
                                dto.setDBreite(artikelDto.getGeometrieDto().getFBreite());
                            }
                            if (artikelDto.getGeometrieDto().getFTiefe() != null) {
                                dto.setDTiefe(artikelDto.getGeometrieDto().getFTiefe());
                            }
                        }

                        // Verpackung
                        if (artikelDto.getVerpackungDto() != null) {
                            dto.setSBauform(artikelDto.getVerpackungDto().getCBauform());
                            dto.setSVerpackungsart(artikelDto.getVerpackungDto().getCVerpackungsart());
                        }
                        // Gewicht
                        dto.setDGewichtkg(artikelDto.getFGewichtkg());

                        dto.setSRevision(artikelDto.getCRevision());
                        dto.setSIndex(artikelDto.getCIndex());

                        // Montage Rasterstehend
                        if (artikelDto.getMontageDto() != null
                                && artikelDto.getMontageDto().getFRasterstehend() != null) {
                            dto.setDRasterstehend(artikelDto.getMontageDto().getFRasterstehend().doubleValue());
                        }

                        if (Helper.short2boolean(artikelDto.getBSeriennrtragend())
                                || Helper.short2boolean(artikelDto.getBChargennrtragend())) {
                            List<SeriennrChargennrMitMengeDto> snrChnrDtos = getLagerFac()
                                    .getAllSeriennrchargennrEinerBelegartposition(LocaleFac.BELEGART_LOS,
                                            mat[i].getIId());
                            if (snrChnrDtos != null) {
                                String snrchnr = "";
                                for (int s = 0; s < snrChnrDtos.size(); s++) {

                                    SeriennrChargennrMitMengeDto snrChnrDto = snrChnrDtos.get(s);

                                    if (dto.getNAusgabe().doubleValue() < 0) {
                                        snrchnr += "-";
                                    }

                                    snrchnr += Helper.formatZahl(snrChnrDto.getNMenge(), 4, theClientDto.getLocUi())
                                            + " ";
                                    snrchnr += snrChnrDto.getCSeriennrChargennr() + "; ";

                                }
                                dto.setSSnrChnr(snrchnr);
                            }
                        }

                        // offene Bestellmenge
                        dto.setBdAnzahlBestellt(getArtikelbestelltFac().getAnzahlBestellt(artikelDto.getIId()));

                        String sIdent;
                        if (sollmat.getFlrartikel().getArtikelart_c_nr()
                                .equals(ArtikelFac.ARTIKELART_HANDARTIKEL)) {
                            sIdent = "";
                        } else {
                            sIdent = sollmat.getFlrartikel().getC_nr();
                        }
                        dto.setSIdent(sIdent);

                        LagerDto lagerDto = getLagerFac().lagerFindByPrimaryKey(lagerIId);

                        dto.setSLager(lagerDto.getCNr());

                        String sLagerort = getLagerFac()
                                .getLagerplaezteEinesArtikels(sollmat.getFlrartikel().getI_id(), lagerDto.getIId());

                        dto.setSLagerort(sLagerort);

                        if (sollmat.getMontageart_i_id() != null) {
                            MontageartDto montageartDto = getStuecklisteFac()
                                    .montageartFindByPrimaryKey(sollmat.getMontageart_i_id(), theClientDto);
                            dto.setSMontageart(montageartDto.getCBez());
                        }

                        // Stuecklistepositionskommentar
                        if (sollmat.getFlrlos().getStueckliste_i_id() != null) {
                            try {
                                StuecklistepositionDto[] stuecklistepositionDto = getStuecklisteFac()
                                        .stuecklistepositionFindByStuecklisteIIdArtikelIId(
                                                sollmat.getFlrlos().getStueckliste_i_id(), artikelDto.getIId(),
                                                theClientDto);

                                StringBuffer sbKommentarStuecklistepos = new StringBuffer();
                                // wenn ein Artikel mehrfach vorkommt und ich ja
                                // nicht entscheiden kann, an
                                // welcher Stelle ich bin, alle Kommentar
                                // aneinanderhaengen
                                for (int k = 0; k < stuecklistepositionDto.length; k++) {
                                    sbKommentarStuecklistepos.append(stuecklistepositionDto[0].getCKommentar());

                                }
                                if (sbKommentarStuecklistepos.length() > 0) {
                                    dto.setSKommentarStueckliste(sbKommentarStuecklistepos.toString());
                                }
                            } catch (EJBExceptionLP e) {
                                // ok
                            }
                        }

                        // verdichten nach ident
                        Iterator<Integer> it = listVerdichtet.keySet().iterator();
                        boolean bGefunden = false;

                        if (bVerdichtetNachIdent) {

                            while (it.hasNext()) {
                                Object key = it.next();

                                ReportLosAusgabelisteDto temp = (ReportLosAusgabelisteDto) listVerdichtet.get(key);
                                if ((temp.getSLager() == null && lagerDto.getCNr() == null)
                                        || (temp.getSLager() != null && lagerDto.getCNr() != null)) {
                                    if ((temp.getSLager() == null && lagerDto.getCNr() == null)
                                            || (temp.getSLager().equals(lagerDto.getCNr()))) {
                                        if (temp.getSIdent().equals(sIdent) && !temp.getSIdent().equals("")) {
                                            bGefunden = true;
                                            dto.setNMenge(dto.getNMenge().add(temp.getNMenge()));
                                            dto.setNAusgabe(dto.getNAusgabe().add(temp.getNAusgabe()));
                                            // PJ 14410
                                            if (temp.getSSnrChnr() != null) {

                                                dto.setSSnrChnr(dto.getSSnrChnr() + (temp.getSSnrChnr()));

                                            }
                                            listVerdichtet.put((Integer) key, dto);

                                            continue;
                                        }
                                    }
                                }
                            }
                        }
                        if (bGefunden == false) {
                            listVerdichtet.put(mat[i].getIId(), dto);
                        }

                    }

                }
            }
            // Sortieren, dazu brauch ich einen anderen container-typ
            LinkedList<ReportLosAusgabelisteDto> listVerdichtetUndSortiert = new LinkedList<ReportLosAusgabelisteDto>();
            for (Iterator<Integer> iter = listVerdichtet.keySet().iterator(); iter.hasNext();) {
                listVerdichtetUndSortiert.add(listVerdichtet.get(iter.next()));
            }
            Collections.sort(listVerdichtetUndSortiert,
                    new ComparatorAusgabeListe(iSortierung.intValue(), bVorrangigNachFarbcodeSortiert));

            dataLokal = new Object[listVerdichtet.size()][AUSG_SPALTENANZAHL];
            int i = 0;
            for (Iterator<ReportLosAusgabelisteDto> iter = listVerdichtetUndSortiert.iterator(); iter
                    .hasNext(); i++) {
                ReportLosAusgabelisteDto item = (ReportLosAusgabelisteDto) iter.next();
                dataLokal[i][AUSG_ARTIKELKLASSE] = item.getSArtikelklasse();
                dataLokal[i][AUSG_NUR_ZUR_INFO] = item.getBNurZurInfo();
                dataLokal[i][AUSG_AUSGABE] = item.getNAusgabe();
                dataLokal[i][AUSG_BEZEICHNUNG] = item.getSBezeichnung();
                dataLokal[i][AUSG_ZUSATZBEZEICHNUNG] = item.getSZusatzBezeichnung();
                dataLokal[i][AUSG_ZUSATZBEZEICHNUNG2] = item.getSZusatzBezeichnung2();
                dataLokal[i][AUSG_EINHEIT] = item.getSEinheit();
                dataLokal[i][AUSG_IDENT] = item.getSIdent();
                dataLokal[i][AUSG_LAGER] = item.getSLager();
                dataLokal[i][AUSG_LAGERORT] = item.getSLagerort();
                dataLokal[i][AUSG_MENGE] = item.getNMenge();
                dataLokal[i][AUSG_MONTAGEART] = item.getSMontageart();
                dataLokal[i][AUSG_SCHALE] = item.getISchale();
                dataLokal[i][AUSG_SNRCHNR] = item.getSSnrChnr();
                dataLokal[i][AUSG_ARTIKELBILD] = item.getArtikelbild();
                dataLokal[i][AUSG_KOMMENTAR] = item.getSKommentar();
                dataLokal[i][AUSG_LAGERSTAND] = item.getNLagerstand();
                dataLokal[i][AUSG_LAGERSTAND_SPERRLAGER] = item.getNLagerstandSperrlager();

                dataLokal[i][AUSG_REVISION] = item.getSRevision();
                dataLokal[i][AUSG_INDEX] = item.getSIndex();

                // CK: Farbcode einfuegen
                dataLokal[i][AUSG_FARBCODE] = item.getSFarbcode();
                if (item.getDHoehe() != null && item.getDHoehe() != 0) {
                    dataLokal[i][AUSG_HOEHE] = new Double(item.getDHoehe());
                }
                if (item.getDBreite() != null && item.getDBreite() != 0) {
                    dataLokal[i][AUSG_BREITE] = new Double(item.getDBreite());
                }
                if (item.getDTiefe() != null && item.getDTiefe() != 0) {
                    dataLokal[i][AUSG_TIEFE] = new Double(item.getDTiefe());
                }
                dataLokal[i][AUSG_MATERIAL] = item.getSMaterial();

                // Verpackung
                if (item.getSBauform() != null) {
                    dataLokal[i][AUSG_BAUFORM] = item.getSBauform();
                }
                if (item.getSVerpackungsart() != null) {
                    dataLokal[i][AUSG_VERPACKUNGSART] = item.getSVerpackungsart();
                }
                // Gewicht
                if (item.getDGewichtkg() != null && item.getDGewichtkg() != 0) {
                    dataLokal[i][AUSG_GEWICHTKG] = item.getDGewichtkg();
                }
                // Montage Rasterstehend
                if (item.getDRasterstehend() != null && item.getDRasterstehend() != 0) {
                    dataLokal[i][AUSG_RASTERSTEHEND] = item.getDRasterstehend();
                }
                dataLokal[i][AUSG_BESTELLT] = item.getBdAnzahlBestellt();
                dataLokal[i][AUSG_IN_FERTIGUNG] = item.getNInFertigung();
                dataLokal[i][AUSG_STUECKLISTE_KOMMENTAR] = item.getSKommentarStueckliste();
            }

        } catch (Exception t) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER, t);
        } finally {
            closeSession(session);
        }
        return dataLokal;
    }

    private Map<String, Object> getParameterAusgabeliste(LosDto losDto, String lose, TheClientDto theClientDto)
            throws EJBExceptionLP, RemoteException {
        Map<String, Object> mapParameter = new TreeMap<String, Object>();
        mapParameter.put("P_ANGELEGT", new java.util.Date(losDto.getTAnlegen().getTime()));
        mapParameter.put("P_LOSNUMMER", lose);
        mapParameter.put("P_PROJEKT", losDto.getCProjekt());
        mapParameter.put("P_LOSKOMMENTAR", losDto.getCKommentar());
        mapParameter.put("P_LOSLANGTEXT", losDto.getXText());

        String sAuftragsnummer;
        String sKunde;
        String sLieferart;
        String sSpediteur = null;
        if (losDto.getAuftragIId() != null) {
            AuftragDto auftragDto = getAuftragFac().auftragFindByPrimaryKey(losDto.getAuftragIId());
            sAuftragsnummer = auftragDto.getCNr();
            mapParameter.put("P_AUFTRAGNUMMER", sAuftragsnummer);

            mapParameter.put("P_AUFTRAGLIEFERTERMIN", auftragDto.getDLiefertermin());
            mapParameter.put("P_ROHS", Helper.short2Boolean(auftragDto.getBRoHs()));

            sLieferart = getLocaleFac().lieferartFindByIIdLocaleOhneExc(auftragDto.getLieferartIId(),
                    theClientDto.getLocUi(), theClientDto);

            if (auftragDto.getSpediteurIId() != null) {
                sSpediteur = getMandantFac().spediteurFindByPrimaryKey(auftragDto.getSpediteurIId())
                        .getCNamedesspediteurs();
            }
            KundeDto kundeDto = getKundeFac().kundeFindByPrimaryKey(auftragDto.getKundeIIdAuftragsadresse(),
                    theClientDto);
            sKunde = kundeDto.getPartnerDto().getCName1nachnamefirmazeile1();
        } else {
            sKunde = "";
            sLieferart = "";
            sSpediteur = "";
            sAuftragsnummer = "";
        }

        KostenstelleDto kstDto = getSystemFac().kostenstelleFindByPrimaryKey(losDto.getKostenstelleIId());
        mapParameter.put("P_LIEFERART", sLieferart);
        mapParameter.put("P_SPEDITEUR", sSpediteur);
        mapParameter.put("P_KOSTENSTELLENUMMER", kstDto.getCNr());
        mapParameter.put("P_KUNDE", sKunde);
        mapParameter.put("P_LOSGROESSE", losDto.getNLosgroesse());

        mapParameter.put("P_PRODUKTIONSBEGINN", losDto.getTProduktionsbeginn());
        mapParameter.put("P_PRODUKTIONSENDE", losDto.getTProduktionsende());

        FertigungsgruppeDto fertGruppeDto = getStuecklisteFac()
                .fertigungsgruppeFindByPrimaryKey(losDto.getFertigungsgruppeIId());
        mapParameter.put("P_FERTIGUNGSGRUPPE", fertGruppeDto.getCBez());

        // Materialliste?
        String sMengenEinheit = "";
        if (losDto.getStuecklisteIId() != null) {
            StuecklisteDto stkDto = getStuecklisteFac().stuecklisteFindByPrimaryKey(losDto.getStuecklisteIId(),
                    theClientDto);
            // Einheit
            if (stkDto.getArtikelDto() != null) {
                if (stkDto.getArtikelDto().getEinheitCNr() != null) {
                    sMengenEinheit = stkDto.getArtikelDto().getEinheitCNr();
                }
            }
            mapParameter.put("P_STUECKLISTEBEZEICHNUNG", stkDto.getArtikelDto().getArtikelsprDto().getCBez());
            mapParameter.put("P_STUECKLISTEZUSATZBEZEICHNUNG",
                    stkDto.getArtikelDto().getArtikelsprDto().getCZbez());
            mapParameter.put("P_STUECKLISTEZUSATZBEZEICHNUNG2",
                    stkDto.getArtikelDto().getArtikelsprDto().getCZbez2());
            mapParameter.put("P_STUECKLISTENUMMER", stkDto.getArtikelDto().getCNr());
            mapParameter.put("P_INDEX", stkDto.getArtikelDto().getCIndex());
            mapParameter.put("P_REVISION", stkDto.getArtikelDto().getCRevision());

            mapParameter.put("P_STUECKLISTE_GEWICHTKG", stkDto.getArtikelDto().getFGewichtkg());

            if (stkDto.getArtikelDto().getVerpackungDto() != null) {
                mapParameter.put("P_STUECKLISTE_BAUFORM", stkDto.getArtikelDto().getVerpackungDto().getCBauform());
                mapParameter.put("P_STUECKLISTE_VERPACKUNGSART",
                        stkDto.getArtikelDto().getVerpackungDto().getCVerpackungsart());
            }

            if (stkDto.getArtikelDto().getGeometrieDto() != null) {
                mapParameter.put("P_STUECKLISTE_BREITETEXT",
                        stkDto.getArtikelDto().getGeometrieDto().getCBreitetext());
                mapParameter.put("P_STUECKLISTE_BREITE", stkDto.getArtikelDto().getGeometrieDto().getFBreite());
                mapParameter.put("P_STUECKLISTE_HOEHE", stkDto.getArtikelDto().getGeometrieDto().getFHoehe());
                mapParameter.put("P_STUECKLISTE_TIEFE", stkDto.getArtikelDto().getGeometrieDto().getFTiefe());
            }

            if (stkDto.getArtikelDto().getMontageDto() != null) {
                mapParameter.put("P_STUECKLISTE_RASTERSTEHEND",
                        stkDto.getArtikelDto().getMontageDto().getFRasterstehend());
                mapParameter.put("P_STUECKLISTE_RASTERLIEGEND",
                        stkDto.getArtikelDto().getMontageDto().getFRasterliegend());

            }

            // Zeichnungsnummer
            StuecklisteeigenschaftDto[] stuecklisteeigenschaftDtos = getStuecklisteFac()
                    .stuecklisteeigenschaftFindByStuecklisteIId(losDto.getStuecklisteIId());
            ArrayList<Object[]> al = new ArrayList<Object[]>();
            for (int i = 0; i < stuecklisteeigenschaftDtos.length; i++) {
                StuecklisteeigenschaftDto dto = stuecklisteeigenschaftDtos[i];

                Object[] o = new Object[2];
                String sStklEigenschaftArt = dto.getStuecklisteeigenschaftartDto().getCBez();
                o[0] = sStklEigenschaftArt;
                o[1] = dto.getCBez();
                al.add(o);

                // Index und Materialplatz auch einzeln an Report uebergeben
                if (sStklEigenschaftArt.equals(StuecklisteReportFac.REPORT_STUECKLISTE_EIGENSCHAFTEN_INDEX)) {
                    mapParameter.put(P_STUECKLISTENEIGENSCHAFT_INDEX, dto.getCBez());
                }
                if (sStklEigenschaftArt
                        .equals(StuecklisteReportFac.REPORT_STUECKLISTE_EIGENSCHAFTEN_MATERIALPLATZ)) {
                    mapParameter.put(P_STUECKLISTENEIGENSCHAFT_MATERIALPLATZ, dto.getCBez());
                }
            }

            // Stuecklisteeigenschaft fuer Subreport
            if (stuecklisteeigenschaftDtos.length > 0) {
                String[] fieldnames = new String[] { "F_EIGENSCHAFTART", "F_BEZEICHNUNG" };
                Object[][] dataSub = new Object[al.size()][fieldnames.length];
                dataSub = (Object[][]) al.toArray(dataSub);

                mapParameter.put("DATENSUBREPORT", new LPDatenSubreport(dataSub, fieldnames));
            }

            // Stuecklisteeigenschaften als einzelne Parameter fuer Index
            // und Materialplatz
            Hashtable<?, ?> htStklEigenschaften = getStuecklisteReportFac().getStuecklisteEigenschaften(
                    losDto.getStuecklisteIId(), theClientDto.getMandant(), theClientDto);
            if (htStklEigenschaften != null) {
                if (htStklEigenschaften.containsKey(StuecklisteReportFac.REPORT_STUECKLISTE_EIGENSCHAFTEN_INDEX)) {
                    mapParameter.put(P_STUECKLISTENEIGENSCHAFT_INDEX,
                            htStklEigenschaften.get(StuecklisteReportFac.REPORT_STUECKLISTE_EIGENSCHAFTEN_INDEX));
                }
                if (htStklEigenschaften
                        .containsKey(StuecklisteReportFac.REPORT_STUECKLISTE_EIGENSCHAFTEN_MATERIALPLATZ)) {
                    mapParameter.put(P_STUECKLISTENEIGENSCHAFT_MATERIALPLATZ, htStklEigenschaften
                            .get(StuecklisteReportFac.REPORT_STUECKLISTE_EIGENSCHAFTEN_MATERIALPLATZ));
                }
            }

        } else {
            mapParameter.put("P_STUECKLISTEBEZEICHNUNG", losDto.getCProjekt());
            mapParameter.put("P_STUECKLISTENUMMER",
                    getTextRespectUISpr("fert.materialliste", theClientDto.getMandant(), theClientDto.getLocUi()));
        }
        mapParameter.put("P_MENGENEINHEIT", sMengenEinheit);
        return mapParameter;
    }

    public ReportLosnachkalkulationDto getDataNachkalkulationMaterial(Integer losIId, TheClientDto theClientDto)
            throws EJBExceptionLP {
        try {
            ReportLosnachkalkulationDto nk = new ReportLosnachkalkulationDto();
            nk.setSBezeichnung(
                    getTextRespectUISpr("lp.material", theClientDto.getMandant(), theClientDto.getLocUi()));
            LossollmaterialDto[] soll = getFertigungFac().lossollmaterialFindByLosIId(losIId);
            for (int i = 0; i < soll.length; i++) {
                nk.addiereZuSollpreis(soll[i].getNSollpreis().multiply(soll[i].getNMenge()));
                BigDecimal bdPreis = getFertigungFac().getAusgegebeneMengePreis(soll[i].getIId(), null,
                        theClientDto);
                BigDecimal bdMenge = getFertigungFac().getAusgegebeneMenge(soll[i].getIId(), null, theClientDto);
                nk.addiereZuIstpreis(bdPreis.multiply(bdMenge));
            }
            return nk;
        } catch (RemoteException ex) {
            throwEJBExceptionLPRespectOld(ex);
            return null;
        }
    }

    private HashMap hmAddToAuslastungsvorschau(HashMap hm, Timestamp t, Integer artikelgruppeIId,
            double dSollZumbeginn, double dSollZumEnde, double bdPersonalverfuegbarkeit) {
        if (hm == null) {
            hm = new HashMap();
        }

        t = Helper.cutTimestamp(t);

        if (t.before(Helper.cutTimestamp(new Timestamp(System.currentTimeMillis())))) {
            t = Helper.cutTimestamp(new Timestamp(System.currentTimeMillis()));
        }

        if (hm.containsKey(t)) {

            HashMap hmSub = (HashMap) hm.get(t);

            if (hmSub.containsKey(artikelgruppeIId)) {
                double[] d = (double[]) hmSub.get(artikelgruppeIId);
                d[0] = d[0] + dSollZumbeginn;
                d[1] = d[1] + dSollZumEnde;
                d[2] = d[2] + bdPersonalverfuegbarkeit;
                hmSub.put(artikelgruppeIId, d);
                hm.put(t, hmSub);
            } else {
                double[] d = new double[3];
                d[0] = dSollZumbeginn;
                d[1] = dSollZumEnde;
                d[2] = bdPersonalverfuegbarkeit;
                hmSub.put(artikelgruppeIId, d);
                hm.put(t, hmSub);
            }

        } else {

            double[] d = new double[3];
            d[0] = dSollZumbeginn;
            d[1] = dSollZumEnde;
            d[2] = bdPersonalverfuegbarkeit;

            HashMap hmSub = new HashMap();

            hmSub.put(artikelgruppeIId, d);

            hm.put(t, hmSub);

        }

        return hm;
    }

    private HashMap hmAddToZeitentwicklung(HashMap hm, Timestamp t, java.sql.Timestamp tVon,
            Integer artikelgruppeIId, double dSoll, double dIst) {
        if (hm == null) {
            hm = new HashMap();
        }

        t = Helper.cutTimestamp(t);

        if (t.before(Helper.cutTimestamp(tVon))) {
            t = Helper.cutTimestamp(tVon);
        }

        if (hm.containsKey(Helper.cutTimestamp(t))) {

            HashMap hmSub = (HashMap) hm.get(t);

            if (hmSub.containsKey(artikelgruppeIId)) {
                double[] d = (double[]) hmSub.get(artikelgruppeIId);
                d[0] = d[0] + dSoll;
                d[1] = d[1] + dIst;
                hmSub.put(artikelgruppeIId, d);
                hm.put(t, hmSub);
            } else {
                double[] d = new double[2];
                d[0] = dSoll;
                d[1] = dIst;
                hmSub.put(artikelgruppeIId, d);
                hm.put(t, hmSub);
            }

        } else {

            double[] d = new double[2];
            d[0] = dSoll;
            d[1] = dIst;

            HashMap hmSub = new HashMap();

            hmSub.put(artikelgruppeIId, d);

            hm.put(t, hmSub);
        }

        return hm;
    }

    @TransactionAttribute(TransactionAttributeType.NEVER)
    public JasperPrintLP printAuslieferliste(java.sql.Timestamp tStichtag, TheClientDto theClientDto) {
        this.useCase = UC_AUSLIEFERLISTE;

        HashMap hmPositionen = new HashMap();

        Session session = FLRSessionFactory.getFactory().openSession();
        String sQuery = "SELECT lr,(SELECT sum(la.n_menge) FROM FLRLosablieferung la WHERE la.los_i_id=lr.i_id   ) FROM FLRLosReport lr WHERE lr.t_produktionsbeginn <='"
                + Helper.formatDateWithSlashes(new java.sql.Date(tStichtag.getTime()))
                + "' AND lr.status_c_nr IN ('" + LocaleFac.STATUS_ANGELEGT + "','" + LocaleFac.STATUS_IN_PRODUKTION
                + "','" + LocaleFac.STATUS_TEILERLEDIGT + "') AND lr.mandant_c_nr='" + theClientDto.getMandant()
                + "' ORDER BY lr.t_produktionsende ASC , lr.c_nr ASC";

        Query qResult = session.createQuery(sQuery);
        List<?> results = qResult.list();
        ArrayList alDaten = new ArrayList();
        Iterator<?> resultListIterator = results.iterator();
        while (resultListIterator.hasNext()) {
            Object[] o = (Object[]) resultListIterator.next();

            FLRLosReport los = (FLRLosReport) o[0];
            BigDecimal bdAbgeliefert = new BigDecimal(0);

            if (o[1] != null) {
                bdAbgeliefert = (BigDecimal) o[1];
            }

            if (los.getFlrauftragposition() != null && !hmPositionen.containsKey(los.getFlrauftragposition())) {
                hmPositionen.put(los.getFlrauftragposition().getI_id(), "");
            }

            if (bdAbgeliefert.doubleValue() < los.getN_losgroesse().doubleValue()) {

                Object[] oZeile = new Object[AUSLIEFERLISTE_SPALTENANZAHL];
                oZeile[AUSLIEFERLISTE_AUFTRAGSNUMMER] = "";
                oZeile[AUSLIEFERLISTE_LOSNUMMER] = "";
                oZeile[AUSLIEFERLISTE_KUNDE] = "";
                try {
                    // SP590
                    if (los.getFlrkunde() != null) {
                        KundeDto kundeDto = getKundeFac().kundeFindByPrimaryKey(los.getFlrkunde().getI_id(),
                                theClientDto);
                        oZeile[AUSLIEFERLISTE_KUNDE] = kundeDto.getPartnerDto().formatAnrede();
                    }

                    BigDecimal bdGeliefert = new BigDecimal(0);
                    for (Iterator<?> iter2 = los.getAblieferungset().iterator(); iter2.hasNext();) {
                        FLRLosablieferung item = (FLRLosablieferung) iter2.next();
                        bdGeliefert = bdGeliefert.add(item.getN_menge());
                    }
                    oZeile[AUSLIEFERLISTE_GELIEFERT] = bdGeliefert;
                    if (los.getFlrstueckliste() != null) {
                        ArtikelDto artikelDto = getArtikelFac().artikelFindByPrimaryKeySmall(
                                los.getFlrstueckliste().getFlrartikel().getI_id(), theClientDto);
                        oZeile[AUSLIEFERLISTE_BEZEICHNUNG] = artikelDto.getArtikelsprDto().getCBez();
                        oZeile[AUSLIEFERLISTE_ZUSATZBEZEICHNUNG] = artikelDto.getArtikelsprDto().getCZbez();
                        oZeile[AUSLIEFERLISTE_ARTIKELNUMMER] = los.getFlrstueckliste().getFlrartikel().getC_nr();
                        oZeile[AUSLIEFERLISTE_LAGERSTAND] = getLagerFac().getLagerstandAllerLagerEinesMandanten(
                                los.getFlrstueckliste().getFlrartikel().getI_id(), theClientDto);
                        // Offene Fehlmengen
                        oZeile[AUSLIEFERLISTE_FEHLMENGE] = getFehlmengeFac()
                                .getAnzahlFehlmengeEinesArtikels(artikelDto.getIId(), theClientDto);

                        LossollarbeitsplanDto[] lossollarbeitsplanDto = getFertigungFac()
                                .lossollarbeitsplanFindByLosIId(los.getI_id());

                        BigDecimal bdFertigungszeit = new BigDecimal(0);
                        for (int j = 0; lossollarbeitsplanDto.length > j; j++) {
                            bdFertigungszeit = bdFertigungszeit.add(lossollarbeitsplanDto[j].getNGesamtzeit());
                        }
                        oZeile[AUSLIEFERLISTE_FERTIGUNGSZEIT] = bdFertigungszeit;

                        // Rahmenbestellt
                        Hashtable<?, ?> htRahmenbestellt = getArtikelbestelltFac()
                                .getAnzahlRahmenbestellt(artikelDto.getIId(), theClientDto);
                        if (htRahmenbestellt.containsKey(ArtikelbestelltFac.KEY_RAHMENBESTELLT_ANZAHL)) {
                            BigDecimal bdAnzahlRahmenbestellt = (BigDecimal) htRahmenbestellt
                                    .get(ArtikelbestelltFac.KEY_RAHMENBESTELLT_ANZAHL);
                            oZeile[AUSLIEFERLISTE_RAHMEN_BESTELLT] = bdAnzahlRahmenbestellt;
                        }
                        oZeile[AUSLIEFERLISTE_RESERVIERUNGEN] = getReservierungFac()
                                .getAnzahlReservierungen(artikelDto.getIId(), theClientDto);

                        oZeile[AUSLIEFERLISTE_RAHMENRESERVIERUNGEN] = getReservierungFac()
                                .getAnzahlRahmenreservierungen(artikelDto.getIId(), theClientDto);

                    } else {
                        oZeile[AUSLIEFERLISTE_BEZEICHNUNG] = los.getC_projekt();
                        oZeile[AUSLIEFERLISTE_ZUSATZBEZEICHNUNG] = null;
                        oZeile[AUSLIEFERLISTE_ARTIKELNUMMER] = getTextRespectUISpr("fert.materialliste",
                                theClientDto.getMandant(), theClientDto.getLocUi());
                    }

                    oZeile[AUSLIEFERLISTE_LOSKLASSEN] = getLosLosKlassenAlsString(los.getI_id());

                    LossollmaterialDto[] sollmatDtos = getFertigungFac().lossollmaterialFindByLosIId(los.getI_id());

                    Boolean bZuwenigauflagerzumbeginn = new Boolean(false);

                    for (int i = 0; i < sollmatDtos.length; i++) {
                        BigDecimal bd = getFertigungFac().getAusgegebeneMenge(sollmatDtos[i].getIId(), null,
                                theClientDto);

                        BigDecimal nochbenoetigt = sollmatDtos[i].getNMenge().subtract(bd);

                        if (nochbenoetigt.doubleValue() > 0) {
                            ArtikelDto aDtoSoll = getArtikelFac()
                                    .artikelFindByPrimaryKeySmall(sollmatDtos[i].getArtikelIId(), theClientDto);
                            BigDecimal bdfiktlag = getInternebestellungFac().getFiktivenLagerstandZuZeitpunkt(
                                    aDtoSoll, theClientDto, new Timestamp(los.getT_produktionsbeginn().getTime()));

                            if (bdfiktlag.doubleValue() < nochbenoetigt.doubleValue()) {
                                bZuwenigauflagerzumbeginn = true;
                                break;
                            }

                        }

                    }

                    oZeile[AUSLIEFERLISTE_ZUWENIG_AUF_LAGER_ZUM_ZEITPUNKT] = bZuwenigauflagerzumbeginn;

                    Calendar gc = Calendar.getInstance(theClientDto.getLocUi());
                    gc.setTime(los.getT_produktionsbeginn());
                    oZeile[AUSLIEFERLISTE_KALENDERWOCHE] = new Integer(gc.get(Calendar.WEEK_OF_YEAR));
                    oZeile[AUSLIEFERLISTE_LOSGROESSE] = los.getN_losgroesse();
                    oZeile[AUSLIEFERLISTE_LOSNUMMER] = los.getC_nr();
                    oZeile[AUSLIEFERLISTE_FERTIGUNGSGRUPPE] = los.getFlrfertigungsgruppe().getC_bez();
                    /**
                     * @todo material PJ 4239
                     */
                    oZeile[AUSLIEFERLISTE_MATERIAL] = null;
                    oZeile[AUSLIEFERLISTE_BEGINN] = los.getT_produktionsbeginn();
                    oZeile[AUSLIEFERLISTE_ENDE] = los.getT_produktionsende();
                    oZeile[AUSLIEFERLISTE_LOSSTATUS] = los.getStatus_c_nr();

                    LossollarbeitsplanDto[] sollDtos = getFertigungFac()
                            .lossollarbeitsplanFindByLosIId(los.getI_id());

                    if (sollDtos.length > 0) {

                        AuftragzeitenDto[] zeiten = getZeiterfassungFac().getAllZeitenEinesBeleges(
                                LocaleFac.BELEGART_LOS, los.getI_id(), null, null, null, null, false, false,
                                theClientDto);

                        Object[][] oSubData = new Object[sollDtos.length][13];

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

                            oSubData[i][0] = sollDtos[i].getIArbeitsgangnummer();

                            ArtikelDto artikelDto = getArtikelFac().artikelFindByPrimaryKeySmall(
                                    sollDtos[i].getArtikelIIdTaetigkeit(), theClientDto);
                            oSubData[i][1] = artikelDto.getCNr();
                            oSubData[i][2] = artikelDto.formatBezeichnung();
                            oSubData[i][3] = sollDtos[i].getNGesamtzeit();

                            // Istzeitdaten
                            BigDecimal bdZeit = new BigDecimal(0);
                            for (int j = 0; j < zeiten.length; j++) {
                                if (sollDtos[i].getArtikelIIdTaetigkeit().equals(zeiten[j].getArtikelIId())) {
                                    bdZeit = bdZeit.add(new BigDecimal(zeiten[j].getDdDauer().doubleValue()));
                                }
                            }

                            oSubData[i][4] = bdZeit;
                            oSubData[i][5] = Helper.short2Boolean(sollDtos[i].getBFertig());

                            if (artikelDto.getArtgruIId() != null) {
                                oSubData[i][6] = getArtikelFac()
                                        .artgruFindByPrimaryKey(artikelDto.getArtgruIId(), theClientDto).getCNr();
                            }

                            oSubData[i][7] = sollDtos[i].getIUnterarbeitsgang();

                            if (sollDtos[i].getMaschineIId() != null) {
                                MaschineDto maschineDto = getZeiterfassungFac()
                                        .maschineFindByPrimaryKey(sollDtos[i].getMaschineIId());
                                oSubData[i][8] = maschineDto.getCIdentifikationsnr();
                                oSubData[i][9] = maschineDto.getCBez();
                            }
                            if (sollDtos[i].getIMaschinenversatztage() != null) {
                                oSubData[i][10] = Helper.addiereTageZuTimestamp(
                                        new Timestamp(los.getT_produktionsbeginn().getTime()),
                                        sollDtos[i].getIMaschinenversatztage());
                            }

                            BigDecimal gut = new BigDecimal(0);
                            BigDecimal schlecht = new BigDecimal(0);
                            LosgutschlechtDto[] losgutschlechDtos = getFertigungFac()
                                    .losgutschlechtFindByLossollarbeitsplanIId(sollDtos[i].getIId());

                            for (int j = 0; j < losgutschlechDtos.length; j++) {
                                gut = gut.add(losgutschlechDtos[j].getNGut());
                                schlecht = schlecht.add(losgutschlechDtos[j].getNSchlecht());
                            }
                            oSubData[i][11] = gut;
                            oSubData[i][12] = schlecht;
                        }

                        String[] fieldnames = new String[] { "F_AGNUMMER", "F_ARTIKEL", "F_BEZEICHNUNG",
                                "F_SOLLZEIT", "F_ISTZEIT", "F_FERTIG", "F_ARTIKELGRUPPE", "F_UAGNUMMER",
                                "F_MASCHINENIDENTIFIKATION", "F_MASCHINENBEZEICHNUNG", "F_AGBEGINN", "F_GUTSTUECK",
                                "F_SCHLECHTSTUECK" };
                        oZeile[AUSLIEFERLISTE_ARBEITSGAENGE] = new LPDatenSubreport(oSubData, fieldnames);
                    }

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

                // PJ 15009

                String queryf = "select sum(flrfehlmenge.n_menge) FROM FLRFehlmenge flrfehlmenge WHERE flrfehlmenge.flrlossollmaterial.flrlos = "
                        + los.getI_id() + " AND flrfehlmenge.n_menge>0";
                Session session2 = FLRSessionFactory.getFactory().openSession();
                Query query = session2.createQuery(queryf);
                List<?> results2 = query.list();

                oZeile[AUSLIEFERLISTE_LOSHATFEHLMENGE] = new Boolean(false);
                if (results.size() > 0) {
                    BigDecimal bd = (BigDecimal) results2.iterator().next();

                    if (bd != null && bd.doubleValue() > 0) {
                        oZeile[AUSLIEFERLISTE_LOSHATFEHLMENGE] = new Boolean(true);
                    }
                }
                session2.close();

                oZeile[AUSLIEFERLISTE_PROJEKTKOMMENTAR] = los.getC_projekt();
                if (los.getFlrstueckliste() == null) {
                    oZeile[AUSLIEFERLISTE_MATERIALLISTE] = new Boolean(true);

                } else {
                    oZeile[AUSLIEFERLISTE_MATERIALLISTE] = new Boolean(false);

                    if (los.getFlrstueckliste().getFlrartikel().getFlrartikelgruppe() != null) {
                        oZeile[AUSLIEFERLISTE_LOSARTIKELGRUPPE] = los.getFlrstueckliste().getFlrartikel()
                                .getFlrartikelgruppe().getC_nr();
                    }
                    if (los.getFlrstueckliste().getFlrartikel().getFlrartikelklasse() != null) {
                        oZeile[AUSLIEFERLISTE_LOSARTIKELKLASSE] = los.getFlrstueckliste().getFlrartikel()
                                .getFlrartikelklasse().getC_nr();
                    }

                }
                if (los.getFlrauftragposition() != null || los.getFlrauftrag() != null) {

                    if (los.getFlrauftragposition() != null) {
                        oZeile = befuelleMitAuftragsdaten(oZeile, los.getFlrauftragposition().getFlrauftrag(),
                                los.getFlrauftragposition(), theClientDto);
                    } else {
                        oZeile = befuelleMitAuftragsdaten(oZeile, los.getFlrauftrag(), null, theClientDto);

                    }

                }

                if (oZeile[AUSLIEFERLISTE_ABLIEFERDATUM] == null) {
                    oZeile[AUSLIEFERLISTE_ABLIEFERDATUM] = new java.sql.Date(los.getT_produktionsende().getTime());

                }

                alDaten.add(oZeile);
            }

        }

        session.close();

        session = FLRSessionFactory.getFactory().openSession();
        sQuery = "SELECT ap FROM FLRAuftragposition ap WHERE ap.flrauftrag.auftragstatus_c_nr IN ('"
                + LocaleFac.STATUS_OFFEN + "','" + LocaleFac.STATUS_TEILERLEDIGT
                + "') AND ap.flrauftrag.mandant_c_nr='" + theClientDto.getMandant()
                + "' AND ap.n_menge IS NOT NULL";

        qResult = session.createQuery(sQuery);
        results = qResult.list();

        resultListIterator = results.iterator();
        while (resultListIterator.hasNext()) {
            FLRAuftragposition ap = (FLRAuftragposition) resultListIterator.next();

            Object[] oZeile = new Object[AUSLIEFERLISTE_SPALTENANZAHL];

            oZeile[AUSLIEFERLISTE_AUFTRAGSNUMMER] = "";
            oZeile[AUSLIEFERLISTE_LOSNUMMER] = "";
            oZeile = befuelleMitAuftragsdaten(oZeile, ap.getFlrauftrag(), ap, theClientDto);

            if (!hmPositionen.containsKey(ap.getI_id())) {

                if (((java.sql.Date) oZeile[AUSLIEFERLISTE_ABLIEFERDATUM]).after(tStichtag)) {

                } else {
                    alDaten.add(oZeile);

                }
            }

        }

        // sortieren

        for (int k = alDaten.size() - 1; k > 0; --k) {
            for (int j = 0; j < k; ++j) {
                Object[] a1 = (Object[]) alDaten.get(j);
                Object[] a2 = (Object[]) alDaten.get(j + 1);

                java.sql.Date s1 = (java.sql.Date) a1[AUSLIEFERLISTE_ABLIEFERDATUM];
                java.sql.Date s2 = (java.sql.Date) a2[AUSLIEFERLISTE_ABLIEFERDATUM];

                s1 = Helper.cutDate(s1);
                s2 = Helper.cutDate(s2);

                if (s1.getTime() > s2.getTime()) {
                    alDaten.set(j, a2);
                    alDaten.set(j + 1, a1);
                } else if (s1.getTime() == s2.getTime()) {
                    String k1 = (String) a1[AUSLIEFERLISTE_KUNDE];
                    String k2 = (String) a2[AUSLIEFERLISTE_KUNDE];

                    if (k1.compareTo(k2) > 0) {
                        alDaten.set(j, a2);
                        alDaten.set(j + 1, a1);
                    } else if (k1.compareTo(k2) == 0) {
                        String t1 = (String) a1[AUSLIEFERLISTE_AUFTRAGSNUMMER];
                        String t2 = (String) a2[AUSLIEFERLISTE_AUFTRAGSNUMMER];

                        if (t1.compareTo(t2) > 0) {
                            alDaten.set(j, a2);
                            alDaten.set(j + 1, a1);
                        } else if (t1.compareTo(t2) == 0) {
                            String l1 = (String) a1[AUSLIEFERLISTE_LOSNUMMER];
                            String l2 = (String) a2[AUSLIEFERLISTE_LOSNUMMER];

                            if (l1.compareTo(l2) > 0) {
                                alDaten.set(j, a2);
                                alDaten.set(j + 1, a1);
                            }
                        }
                    }
                }
            }
        }

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

        Map<String, Object> mapParameter = new TreeMap<String, Object>();
        mapParameter.put("P_STICHTAG", new Timestamp(tStichtag.getTime() - 3600000 * 24));
        initJRDS(mapParameter, FertigungReportFac.REPORT_MODUL, FertigungReportFac.REPORT_AUSLIEFERLISTE,
                theClientDto.getMandant(), theClientDto.getLocUi(), theClientDto);
        return getReportPrint();
    }

    private String getLosLosKlassenAlsString(Integer losIId) {

        Session sessionLosklasse = FLRSessionFactory.getFactory().openSession();
        String queryLosklasse = "FROM FLRLoslosklasse l where l.los_i_id=" + losIId;

        org.hibernate.Query loslosklasse = sessionLosklasse.createQuery(queryLosklasse);

        List resultListLosklasse = loslosklasse.list();

        Iterator resultListIteratorLosklasse = resultListLosklasse.iterator();

        String losklassen = "";
        while (resultListIteratorLosklasse.hasNext()) {
            com.lp.server.fertigung.fastlanereader.generated.FLRLoslosklasse lk = (com.lp.server.fertigung.fastlanereader.generated.FLRLoslosklasse) resultListIteratorLosklasse
                    .next();

            losklassen += lk.getFlrlosklasse().getC_nr() + ",";

        }

        sessionLosklasse.close();

        return losklassen;
    }

    private Object[] befuelleMitAuftragsdaten(Object[] oZeile, FLRAuftragReport flrAuftrag,
            FLRAuftragposition position, TheClientDto theClientDto) {

        try {
            AuftragDto auftragDto = getAuftragFac().auftragFindByPrimaryKey(flrAuftrag.getI_id());

            if (position != null) {
                oZeile[AUSLIEFERLISTE_AUFTRAGSPOSITIONNUMMER] = position.getI_sort();

                KundeDto kundeDto = getKundeFac().kundeFindByPrimaryKey(flrAuftrag.getKunde_i_id_auftragsadresse(),
                        theClientDto);
                oZeile[AUSLIEFERLISTE_KUNDE] = kundeDto.getPartnerDto().formatAnrede();

                oZeile[AUSLIEFERLISTE_AUFTRAGSPOENALE] = Helper.short2Boolean(auftragDto.getBPoenale());

                if (position.getFlrartikel() != null) {

                    ArtikelDto artikelDto = getArtikelFac()
                            .artikelFindByPrimaryKeySmall(position.getFlrartikel().getI_id(), theClientDto);

                    oZeile[AUSLIEFERLISTE_AUFTRAGARTIKEL] = artikelDto.getCNr();
                    oZeile[AUSLIEFERLISTE_AUFTRAGARTIKEL_LAGERSTAND] = getLagerFac()
                            .getLagerstandAllerLagerEinesMandanten(artikelDto.getIId(), theClientDto);

                    oZeile[AUSLIEFERLISTE_AUFTRAGARTIKELBEZEICHNUNG] = artikelDto.formatArtikelbezeichnung();
                    if (artikelDto.getArtgruIId() != null) {
                        oZeile[AUSLIEFERLISTE_AUFTRAGARTIKELGRUPPE] = getArtikelFac()
                                .artgruFindByPrimaryKey(artikelDto.getArtgruIId(), theClientDto).getCNr();
                    }
                    if (artikelDto.getArtklaIId() != null) {
                        oZeile[AUSLIEFERLISTE_AUFTRAGARTIKELKLASSE] = getArtikelFac()
                                .artklaFindByPrimaryKey(artikelDto.getArtklaIId(), theClientDto).getCNr();
                    }

                } else {
                    oZeile[AUSLIEFERLISTE_AUFTRAGARTIKELBEZEICHNUNG] = position.getC_bez();
                }

                oZeile[AUSLIEFERLISTE_AUFTRAGPOSITIONSMENGE] = position.getN_menge();

                oZeile[AUSLIEFERLISTE_AUFTRAG_OFFENEMENGE] = position.getN_offenemenge();

                if (auftragDto.getAuftragartCNr().equals(AuftragServiceFac.AUFTRAGART_RAHMEN)) {
                    oZeile[AUSLIEFERLISTE_AUFTRAG_OFFENERAHMENMENGE] = position.getN_offenerahmenmenge();
                }

                oZeile[AUSLIEFERLISTE_AUFTRAG_POSITIONSTERMIN] = new Timestamp(
                        position.getT_uebersteuerterliefertermin().getTime());

            }

            if (auftragDto != null) {

                oZeile[AUSLIEFERLISTE_AUFTRAGSNUMMER] = auftragDto.getCNr();
                oZeile[AUSLIEFERLISTE_PROJEKT] = auftragDto.getCBezProjektbezeichnung();
                oZeile[AUSLIEFERLISTE_LIEFERTERMIN] = auftragDto.getDLiefertermin();

                oZeile[AUSLIEFERLISTE_AUFTRAGART] = auftragDto.getAuftragartCNr();
                oZeile[AUSLIEFERLISTE_AUFTRAGSKUNDE_NAME1] = flrAuftrag.getFlrkunde().getFlrpartner()
                        .getC_name1nachnamefirmazeile1();
                oZeile[AUSLIEFERLISTE_AUFTRAGSKUNDE_NAME2] = flrAuftrag.getFlrkunde().getFlrpartner()
                        .getC_name2vornamefirmazeile2();
                oZeile[AUSLIEFERLISTE_AUFTRAGSKUNDE_STRASSE] = flrAuftrag.getFlrkunde().getFlrpartner()
                        .getC_strasse();

                if (flrAuftrag.getFlrkunde().getFlrpartner().getFlrlandplzort() != null) {
                    oZeile[AUSLIEFERLISTE_AUFTRAGSKUNDE_ORT] = flrAuftrag.getFlrkunde().getFlrpartner()
                            .getFlrlandplzort().getFlrort().getC_name();
                    oZeile[AUSLIEFERLISTE_AUFTRAGSKUNDE_LKZ] = flrAuftrag.getFlrkunde().getFlrpartner()
                            .getFlrlandplzort().getFlrland().getC_lkz();
                    oZeile[AUSLIEFERLISTE_AUFTRAGSKUNDE_PLZ] = flrAuftrag.getFlrkunde().getFlrpartner()
                            .getFlrlandplzort().getC_plz();

                }

                oZeile[AUSLIEFERLISTE_AUFTRAGSKUNDE_TELEFON] = flrAuftrag.getFlrkunde().getFlrpartner()
                        .getC_telefon();

                if (flrAuftrag.getFlrkundeansprechpartner() != null) {
                    AnsprechpartnerDto anspDto = getAnsprechpartnerFac().ansprechpartnerFindByPrimaryKey(
                            flrAuftrag.getFlrkundeansprechpartner().getI_id(), theClientDto);
                    oZeile[AUSLIEFERLISTE_AUFTRAGSKUNDE_ANSPRECHPARTNER] = anspDto.getPartnerDto().formatAnrede();

                    oZeile[AUSLIEFERLISTE_AUFTRAGSKUNDE_ANSPRECHPARTNER_TELEFONDW] = flrAuftrag
                            .getFlrkundeansprechpartner().getC_telefon();

                }

                // Ablieferdatum

                KundeDto kundeDto = getKundeFac().kundeFindByPrimaryKey(flrAuftrag.getKunde_i_id_lieferadresse(),
                        theClientDto);
                oZeile[AUSLIEFERLISTE_AUFTRAG_LIEFERADRESSE] = kundeDto.getPartnerDto().formatAnrede();

                oZeile[AUSLIEFERLISTE_AUFTRAG_LIEFERART] = getLocaleFac()
                        .lieferartFindByPrimaryKey(auftragDto.getLieferartIId(), theClientDto).formatBez();
                oZeile[AUSLIEFERLISTE_AUFTRAG_SPEDITEUR] = getMandantFac()
                        .spediteurFindByPrimaryKey(auftragDto.getSpediteurIId()).getCNamedesspediteurs();

                java.sql.Date dTermin = null;

                if (position != null) {
                    dTermin = Helper.addiereTageZuDatum(
                            new Date(position.getT_uebersteuerterliefertermin().getTime()),
                            -kundeDto.getILieferdauer().intValue());
                } else {
                    dTermin = Helper.addiereTageZuDatum(new Date(flrAuftrag.getT_liefertermin().getTime()),
                            -kundeDto.getILieferdauer().intValue());
                }

                oZeile[AUSLIEFERLISTE_ABLIEFERDATUM] = dTermin;

            }

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

        return oZeile;
    }

    @TransactionAttribute(TransactionAttributeType.NEVER)
    public JasperPrintLP printAuslastungsvorschau(java.sql.Timestamp tStichtag, boolean bSortiertNachArtikelgruppe,
            TheClientDto theClientDto) {
        this.useCase = UC_AUSLASTUNGSVORSCHAU;

        Session session = FLRSessionFactory.getFactory().openSession();
        String sQuery = "SELECT lr,(SELECT sum(la.n_menge) FROM FLRLosablieferung la WHERE la.los_i_id=lr.i_id   ) FROM FLRLosReport lr WHERE lr.t_produktionsbeginn <='"
                + Helper.formatDateWithSlashes(new java.sql.Date(tStichtag.getTime()))
                + "' AND lr.status_c_nr IN ('" + LocaleFac.STATUS_ANGELEGT + "','" + LocaleFac.STATUS_IN_PRODUKTION
                + "','" + LocaleFac.STATUS_TEILERLEDIGT + "') AND lr.mandant_c_nr='" + theClientDto.getMandant()
                + "'";

        HashMap hmGesamt = new HashMap();
        HashMap hmArtikelgruppen = new HashMap();
        java.sql.Timestamp tSpaetestesDatum = new Timestamp(System.currentTimeMillis());

        Query qResult = session.createQuery(sQuery);
        List<?> results = qResult.list();
        Iterator<?> resultListIterator = results.iterator();
        while (resultListIterator.hasNext()) {
            Object[] o = (Object[]) resultListIterator.next();

            FLRLosReport flrLosReport = (FLRLosReport) o[0];
            BigDecimal bdAbgeliefert = new BigDecimal(0);

            if (o[1] != null) {
                bdAbgeliefert = (BigDecimal) o[1];
            }

            if (bdAbgeliefert.doubleValue() < flrLosReport.getN_losgroesse().doubleValue()) {
                BigDecimal sollsatzfaktor = new BigDecimal(1);

                if (flrLosReport.getT_produktionsende().after(tSpaetestesDatum)) {
                    tSpaetestesDatum = new Timestamp(flrLosReport.getT_produktionsende().getTime());
                }

                if (bdAbgeliefert.doubleValue() > 0) {
                    sollsatzfaktor = bdAbgeliefert.divide(flrLosReport.getN_losgroesse(), 4,
                            BigDecimal.ROUND_HALF_EVEN);
                }

                try {

                    LossollarbeitsplanDto[] sollDtos = getFertigungFac()
                            .lossollarbeitsplanFindByLosIId(flrLosReport.getI_id());

                    if (sollDtos.length > 0) {

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

                            ArtikelDto artikelDto = getArtikelFac().artikelFindByPrimaryKeySmall(
                                    sollDtos[i].getArtikelIIdTaetigkeit(), theClientDto);
                            // sollzeit berechnen
                            double dSollzeit = sollDtos[i].getNGesamtzeit().doubleValue();

                            hmGesamt = hmAddToAuslastungsvorschau(hmGesamt,
                                    new java.sql.Timestamp(flrLosReport.getT_produktionsbeginn().getTime()),
                                    artikelDto.getArtgruIId(), dSollzeit * sollsatzfaktor.doubleValue(), 0, 0);

                            hmGesamt = hmAddToAuslastungsvorschau(hmGesamt,
                                    new java.sql.Timestamp(flrLosReport.getT_produktionsende().getTime()),
                                    artikelDto.getArtgruIId(), 0, dSollzeit * sollsatzfaktor.doubleValue(), 0);

                            if (!hmArtikelgruppen.containsKey(artikelDto.getArtgruIId())) {
                                hmArtikelgruppen.put(artikelDto.getArtgruIId(), null);
                            }

                        }

                    }

                } catch (RemoteException e) {
                    throwEJBExceptionLPRespectOld(e);
                }
            }
        }
        try {
            SollverfuegbarkeitDto[] dtos = getZeiterfassungFac().getVerfuegbareSollzeit(
                    Helper.cutTimestamp(new Timestamp(System.currentTimeMillis())), tSpaetestesDatum, theClientDto);
            for (int i = 0; i < dtos.length; i++) {
                if (dtos[i].isBMannarbeitszeit()) {
                    hmGesamt = hmAddToAuslastungsvorschau(hmGesamt, dtos[i].getTDatum(), dtos[i].getIGruppeid(), 0,
                            0, dtos[i].getNSollstunden().doubleValue());
                }
            }
        } catch (RemoteException e) {
            throwEJBExceptionLPRespectOld(e);
        }

        // Fehlende Tage mit 0 nachtragen
        int iAnzahlTage = Helper.getDifferenzInTagen(new Timestamp(System.currentTimeMillis()), tSpaetestesDatum);
        Calendar c = Calendar.getInstance();
        c.setTimeInMillis(System.currentTimeMillis());
        for (int i = 0; i < iAnzahlTage; i++) {

            Iterator itGru = hmArtikelgruppen.keySet().iterator();
            while (itGru.hasNext()) {
                hmGesamt = hmAddToAuslastungsvorschau(hmGesamt, new Timestamp(c.getTimeInMillis()),
                        (Integer) itGru.next(), 0, 0, 0);
            }

            c.set(Calendar.DATE, c.get(Calendar.DATE) + 1);
        }

        Map<String, Object> mapParameter = new TreeMap<String, Object>();
        mapParameter.put("P_SORTIERTNACHARTIKELGRUPPE", new Boolean(bSortiertNachArtikelgruppe));
        mapParameter.put("P_STICHTAG", new Timestamp(tStichtag.getTime() - 3600000 * 24));

        ArrayList alDaten = new ArrayList();
        Iterator itGesamt = hmGesamt.keySet().iterator();
        while (itGesamt.hasNext()) {
            Timestamp t = (Timestamp) itGesamt.next();

            HashMap hmSub = (HashMap) hmGesamt.get(t);

            Iterator itSub = hmSub.keySet().iterator();

            while (itSub.hasNext()) {
                Integer artikelgruppeIId = (Integer) itSub.next();

                double[] d = (double[]) hmSub.get(artikelgruppeIId);

                Object[] zeile = new Object[5];
                try {
                    if (artikelgruppeIId == null) {
                        zeile[ZE_ARTIKELGRUPPE] = "";
                    } else {
                        zeile[ZE_ARTIKELGRUPPE] = getArtikelFac()
                                .artgruFindByPrimaryKey(artikelgruppeIId, theClientDto).getCNr();
                    }

                } catch (RemoteException e) {
                    throwEJBExceptionLPRespectOld(e);
                }
                zeile[AV_DATUM] = t;
                zeile[AV_SOLLZEITBEGINN] = new BigDecimal(d[0]);
                zeile[AV_SOLLZEITENDE] = new BigDecimal(d[1]);
                zeile[AV_PERSONALVERFUEGBARKEIT] = new BigDecimal(d[2]);
                alDaten.add(zeile);

            }

        }

        // sortieren

        for (int k = alDaten.size() - 1; k > 0; --k) {
            for (int j = 0; j < k; ++j) {
                Object[] a1 = (Object[]) alDaten.get(j);
                Object[] a2 = (Object[]) alDaten.get(j + 1);

                if (bSortiertNachArtikelgruppe == false) {
                    Timestamp t1 = (Timestamp) a1[ZE_DATUM];
                    Timestamp t2 = (Timestamp) a2[ZE_DATUM];

                    if (t1.after(t2)) {
                        alDaten.set(j, a2);
                        alDaten.set(j + 1, a1);
                    }
                } else {
                    String s1 = (String) a1[ZE_ARTIKELGRUPPE];
                    String s2 = (String) a2[ZE_ARTIKELGRUPPE];

                    if (s1.compareTo(s2) > 0) {
                        alDaten.set(j, a2);
                        alDaten.set(j + 1, a1);
                    } else if (s1.compareTo(s2) == 0) {
                        Timestamp t1 = (Timestamp) a1[ZE_DATUM];
                        Timestamp t2 = (Timestamp) a2[ZE_DATUM];

                        if (t1.after(t2)) {
                            alDaten.set(j, a2);
                            alDaten.set(j + 1, a1);
                        }
                    }
                }

            }

        }

        data = new Object[alDaten.size()][4];
        data = (Object[][]) alDaten.toArray(data);
        initJRDS(mapParameter, FertigungReportFac.REPORT_MODUL, FertigungReportFac.REPORT_AUSLASTUNGSVORSCHAU,
                theClientDto.getMandant(), theClientDto.getLocUi(), theClientDto);
        return getReportPrint();
    }

    @TransactionAttribute(TransactionAttributeType.NEVER)
    public JasperPrintLP printZeitentwicklung(java.sql.Timestamp tVon, java.sql.Timestamp tBis,
            boolean bSortiertNachArtikelgruppe, TheClientDto theClientDto) {
        this.useCase = UC_ZEITENTWICKLUNG;

        Map<String, Object> mapParameter = new TreeMap<String, Object>();
        mapParameter.put("P_VON", Helper.cutTimestamp(tVon));
        mapParameter.put("P_BIS", new Timestamp(tBis.getTime() - 3600000 * 24));
        mapParameter.put("P_SORTIERTNACHARTIKELGRUPPE", new Boolean(bSortiertNachArtikelgruppe));

        HashMap mhLosIIds = new HashMap();

        java.sql.Timestamp tFruehestesDatum = new Timestamp(System.currentTimeMillis());

        Session session = FLRSessionFactory.getFactory().openSession();
        String sQuery = "SELECT lr FROM FLRLosReport lr WHERE lr.t_manuellerledigt <='"
                + Helper.formatDateWithSlashes(new java.sql.Date(tBis.getTime())) + "' AND lr.t_manuellerledigt >='"
                + Helper.formatDateWithSlashes(new java.sql.Date(tVon.getTime())) + "' AND lr.mandant_c_nr='"
                + theClientDto.getMandant() + "'";

        Query qResult = session.createQuery(sQuery);
        List<?> results = qResult.list();
        Iterator<?> resultListIterator = results.iterator();
        while (resultListIterator.hasNext()) {
            FLRLosReport flrLosReport = (FLRLosReport) resultListIterator.next();
            mhLosIIds.put(flrLosReport.getI_id(), null);
        }

        Session session2 = FLRSessionFactory.getFactory().openSession();
        sQuery = "SELECT la.flrlos.i_id,sum(la.n_menge) FROM FLRLosablieferung la WHERE la.t_aendern <='"
                + Helper.formatDateWithSlashes(new java.sql.Date(tBis.getTime())) + "' AND la.t_aendern >='"
                + Helper.formatDateWithSlashes(new java.sql.Date(tVon.getTime())) + "' AND la.flrlos.mandant_c_nr='"
                + theClientDto.getMandant() + "' GROUP BY la.los_i_id";

        qResult = session2.createQuery(sQuery);
        results = qResult.list();
        resultListIterator = results.iterator();
        while (resultListIterator.hasNext()) {

            Object[] o = (Object[]) resultListIterator.next();
            Integer losIId = (Integer) o[0];

            BigDecimal bdAbgeliefert = (BigDecimal) o[1];

            LosDto losDto = null;
            try {
                losDto = getFertigungFac().losFindByPrimaryKey(losIId);
            } catch (RemoteException e) {
                throwEJBExceptionLPRespectOld(e);
            }

            if (bdAbgeliefert.doubleValue() >= losDto.getNLosgroesse().doubleValue()) {

                if (!mhLosIIds.containsKey(losIId)) {
                    mhLosIIds.put(losIId, null);
                }
            }

        }
        session.close();
        session2.close();

        HashMap hmGesamt = new HashMap();

        HashMap hmArtikelgruppen = new HashMap();

        Iterator it = mhLosIIds.keySet().iterator();
        while (it.hasNext()) {
            Integer losIId = (Integer) it.next();
            try {

                LosDto losDto = getFertigungFac().losFindByPrimaryKey(losIId);

                AuftragzeitenDto[] dtos = getZeiterfassungFac().getAllZeitenEinesBeleges(LocaleFac.BELEGART_LOS,
                        losIId, null, null, null, null, false, false, theClientDto);

                if (dtos.length > 0) {

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

                        if (dtos[i] != null && dtos[i].getDdDauer() != null) {
                            if (dtos[dtos.length - 1].getTsBeginn().before(tFruehestesDatum)) {
                                tFruehestesDatum = dtos[0].getTsBeginn();
                            }
                            hmGesamt = hmAddToZeitentwicklung(hmGesamt,
                                    Helper.cutTimestamp(dtos[dtos.length - 1].getTsBeginn()), tVon,
                                    dtos[i].getArtikelgruppeIId(), 0, dtos[i].getDdDauer());
                        }
                    }

                    LossollarbeitsplanDto[] sollDtos = getFertigungFac().lossollarbeitsplanFindByLosIId(losIId);

                    if (sollDtos.length > 0) {

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

                            ArtikelDto artikelDto = getArtikelFac().artikelFindByPrimaryKeySmall(
                                    sollDtos[i].getArtikelIIdTaetigkeit(), theClientDto);

                            double dSollzeit = sollDtos[i].getNGesamtzeit().doubleValue();
                            hmGesamt = hmAddToZeitentwicklung(hmGesamt, Helper.cutTimestamp(dtos[0].getTsBeginn()),
                                    tVon, artikelDto.getArtgruIId(), dSollzeit, 0);

                            if (!hmArtikelgruppen.containsKey(artikelDto.getArtgruIId())) {
                                hmArtikelgruppen.put(artikelDto.getArtgruIId(), null);
                            }

                        }
                    }

                }

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

        }

        // Fehlende Tage mit 0 nachtragen
        int iAnzahlTage = Helper.getDifferenzInTagen(tFruehestesDatum, tBis);
        Calendar c = Calendar.getInstance();
        c.setTimeInMillis(tFruehestesDatum.getTime());
        for (int i = 0; i < iAnzahlTage; i++) {
            Iterator itGru = hmArtikelgruppen.keySet().iterator();
            while (itGru.hasNext()) {
                hmGesamt = hmAddToZeitentwicklung(hmGesamt, new Timestamp(c.getTimeInMillis()), tVon,
                        (Integer) itGru.next(), 0, 0);
            }
            c.set(Calendar.DATE, c.get(Calendar.DATE) + 1);
        }

        ArrayList alDaten = new ArrayList();

        Iterator itGesamt = hmGesamt.keySet().iterator();
        while (itGesamt.hasNext()) {
            Timestamp t = (Timestamp) itGesamt.next();

            HashMap hmSub = (HashMap) hmGesamt.get(t);

            Iterator itSub = hmSub.keySet().iterator();

            while (itSub.hasNext()) {
                Integer artikelgruppeIId = (Integer) itSub.next();

                double[] d = (double[]) hmSub.get(artikelgruppeIId);

                Object[] zeile = new Object[4];
                try {
                    if (artikelgruppeIId == null) {
                        zeile[ZE_ARTIKELGRUPPE] = "";
                    } else {
                        zeile[ZE_ARTIKELGRUPPE] = getArtikelFac()
                                .artgruFindByPrimaryKey(artikelgruppeIId, theClientDto).getCNr();
                    }

                } catch (RemoteException e) {
                    throwEJBExceptionLPRespectOld(e);
                }
                zeile[ZE_DATUM] = t;
                zeile[ZE_SOLLZEIT] = new BigDecimal(d[0]);
                zeile[ZE_ISTZEIT] = new BigDecimal(d[1]);
                alDaten.add(zeile);

            }

        }

        // sortieren

        for (int k = alDaten.size() - 1; k > 0; --k) {
            for (int j = 0; j < k; ++j) {
                Object[] a1 = (Object[]) alDaten.get(j);
                Object[] a2 = (Object[]) alDaten.get(j + 1);

                if (bSortiertNachArtikelgruppe == false) {
                    Timestamp t1 = (Timestamp) a1[ZE_DATUM];
                    Timestamp t2 = (Timestamp) a2[ZE_DATUM];

                    if (t1.after(t2)) {
                        alDaten.set(j, a2);
                        alDaten.set(j + 1, a1);
                    }
                } else {
                    String s1 = (String) a1[ZE_ARTIKELGRUPPE];
                    String s2 = (String) a2[ZE_ARTIKELGRUPPE];

                    if (s1.compareTo(s2) > 0) {
                        alDaten.set(j, a2);
                        alDaten.set(j + 1, a1);
                    } else if (s1.compareTo(s2) == 0) {
                        Timestamp t1 = (Timestamp) a1[ZE_DATUM];
                        Timestamp t2 = (Timestamp) a2[ZE_DATUM];

                        if (t1.after(t2)) {
                            alDaten.set(j, a2);
                            alDaten.set(j + 1, a1);
                        }
                    }
                }

            }

        }

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

        initJRDS(mapParameter, FertigungReportFac.REPORT_MODUL, FertigungReportFac.REPORT_ZEITENTWICKLUNG,
                theClientDto.getMandant(), theClientDto.getLocUi(), theClientDto);
        return getReportPrint();
    }

    @TransactionAttribute(TransactionAttributeType.NEVER)
    public JasperPrintLP printMonatsauswertung(java.sql.Timestamp tVon, java.sql.Timestamp tBis,
            boolean bVerdichtet, TheClientDto theClientDto) {
        this.useCase = UC_MONATSAUSWERTUNG;
        this.index = -1;

        Map<String, Object> mapParameter = new TreeMap<String, Object>();

        // Zuerst Alle Lose Ohne Kunden
        SessionFactory factory = FLRSessionFactory.getFactory();
        Session session = factory.openSession();
        session.enableFilter("filterMandant").setParameter("paramMandant", theClientDto.getMandant());
        session.enableFilter("filterLocale").setParameter("paramLocale",
                Helper.locale2String(theClientDto.getLocUi()));
        String query = "SELECT l, (SELECT SUM(s.n_gesamtzeit) FROM FLRLossollarbeitsplan s  WHERE s.los_i_id=l.i_id)  FROM FLRLosReport l LEFT OUTER JOIN l.flrauftrag a LEFT OUTER JOIN l.flrauftrag.flrkunde.flrpartner p WHERE l.mandant_c_nr='"
                + theClientDto.getMandant() + "' " + " AND l.status_c_nr ='" + LocaleFac.STATUS_ERLEDIGT
                + "' AND (l.t_manuellerledigt>='" + Helper.formatDateWithSlashes(new java.sql.Date(tVon.getTime()))
                + "'   OR l.t_erledigt>='" + Helper.formatDateWithSlashes(new java.sql.Date(tVon.getTime())) + "')"
                + " AND (l.t_manuellerledigt<='" + Helper.formatDateWithSlashes(new java.sql.Date(tBis.getTime()))
                + "'   OR l.t_erledigt<='" + Helper.formatDateWithSlashes(new java.sql.Date(tBis.getTime()))
                + "') ORDER BY l.flrfertigungsgruppe.c_bez,p.c_name1nachnamefirmazeile1, a.c_nr, l.c_nr";

        mapParameter.put("P_VERDICHTET", new Boolean(bVerdichtet));
        mapParameter.put("P_VON", Helper.cutTimestamp(tVon));
        mapParameter.put("P_BIS", new Timestamp(tBis.getTime() - 3600000 * 24));

        Query qResult = session.createQuery(query);
        // qResult.setMaxResults(50);

        List<?> results = qResult.list();

        ArrayList<LosMonatsauswertungDto> alDaten = new ArrayList<LosMonatsauswertungDto>();
        int k = 0;

        Iterator<?> resultListIterator = results.iterator();
        while (resultListIterator.hasNext()) {
            Object[] o = (Object[]) resultListIterator.next();

            FLRLosReport flrLosReport = (FLRLosReport) o[0];

            k++;
            LosMonatsauswertungDto losMonatsauswertungDto = new LosMonatsauswertungDto();

            losMonatsauswertungDto.setSFertigungsgruppe(flrLosReport.getFlrfertigungsgruppe().getC_bez());

            losMonatsauswertungDto.setSLosnummer(flrLosReport.getC_nr());
            // Sollzeit/Istzeit
            BigDecimal sollzeit = new BigDecimal(0.0000);
            if (o[1] != null) {
                sollzeit = (BigDecimal) o[1];
            }
            losMonatsauswertungDto.setNSollzeit(sollzeit);

            Double zeiten = new Double(0);
            try {
                zeiten = getZeiterfassungFac().getSummeZeitenEinesBeleges(LocaleFac.BELEGART_LOS,
                        flrLosReport.getI_id(), null, null, null, null, theClientDto);
            } catch (RemoteException ex) {
                throwEJBExceptionLPRespectOld(ex);
            }

            BigDecimal istzeit = new BigDecimal(zeiten.doubleValue());

            losMonatsauswertungDto.setNIstZeit(istzeit);
            losMonatsauswertungDto.setNLosgroesse(flrLosReport.getN_losgroesse());

            if (flrLosReport.getF_bewertung() != null) {
                BigDecimal abw = sollzeit.subtract(istzeit)
                        .multiply(new BigDecimal(flrLosReport.getF_bewertung().doubleValue()));
                abw = abw.divide(new BigDecimal(100), 4, BigDecimal.ROUND_HALF_EVEN);
                losMonatsauswertungDto.setNAbweichung(abw);
                losMonatsauswertungDto.setFBewertung(flrLosReport.getF_bewertung());
            } else {
                losMonatsauswertungDto.setNAbweichung(sollzeit.subtract(istzeit));
            }

            if (flrLosReport.getFlrstueckliste() == null) {
                if (flrLosReport.getC_projekt() != null) {
                    losMonatsauswertungDto.setArtikelnummer(flrLosReport.getC_projekt());
                } else {
                    losMonatsauswertungDto.setArtikelnummer("");
                }
            } else {
                losMonatsauswertungDto.setArtikelnummer(flrLosReport.getFlrstueckliste().getFlrartikel().getC_nr());

                ArtikelDto artikelDto = getArtikelFac().artikelFindByPrimaryKeySmall(
                        flrLosReport.getFlrstueckliste().getFlrartikel().getI_id(), theClientDto);

                losMonatsauswertungDto.setArtikelbezeichnung(artikelDto.formatBezeichnung());

            }

            if (flrLosReport.getFlrauftrag() == null) {

                if (flrLosReport.getFlrkunde() != null) {
                    String kunde = flrLosReport.getFlrkunde().getFlrpartner().getC_name1nachnamefirmazeile1();
                    losMonatsauswertungDto.setSKunde(kunde);
                } else {
                    losMonatsauswertungDto.setSKunde("");
                }

            } else {
                String kunde = flrLosReport.getFlrauftrag().getFlrkunde().getFlrpartner()
                        .getC_name1nachnamefirmazeile1();
                losMonatsauswertungDto.setSKunde(kunde);
            }

            alDaten.add(losMonatsauswertungDto);
        }

        session.close();

        data = new Object[alDaten.size()][MONATSAUSWERTUNG_ANZAHL_FELDER];

        int i = 0;

        Iterator<LosMonatsauswertungDto> it = alDaten.iterator();
        while (it.hasNext()) {
            LosMonatsauswertungDto losMonatsauswertungDto = (LosMonatsauswertungDto) it.next();

            data[i][MONATSAUSWERTUNG_ARTIKELNUMMER] = losMonatsauswertungDto.getArtikelnummer();
            data[i][MONATSAUSWERTUNG_BEZEICHNUNG] = losMonatsauswertungDto.getArtikelbezeichnung();
            data[i][MONATSAUSWERTUNG_KUNDE] = losMonatsauswertungDto.getSKunde();
            data[i][MONATSAUSWERTUNG_ISTZEIT] = losMonatsauswertungDto.getNIstZeit();
            data[i][MONATSAUSWERTUNG_SOLLZEIT] = losMonatsauswertungDto.getNSollzeit();
            data[i][MONATSAUSWERTUNG_ABWEICHUNG] = losMonatsauswertungDto.getNAbweichung();
            data[i][MONATSAUSWERTUNG_LOSGROESSE] = losMonatsauswertungDto.getNLosgroesse();
            data[i][MONATSAUSWERTUNG_FERTIGUNGSGRUPPE] = losMonatsauswertungDto.getSFertigungsgruppe();
            data[i][MONATSAUSWERTUNG_LOSNUMMER] = losMonatsauswertungDto.getSLosnummer();
            data[i][MONATSAUSWERTUNG_BEWERTUNG] = losMonatsauswertungDto.getFBewertung();
            i++;
        }

        // Nochmals sortieren

        for (int m = data.length - 1; m > 0; --m) {
            for (int j = 0; j < m; ++j) {
                Object[] a1 = (Object[]) data[j];
                Object[] a2 = (Object[]) data[j + 1];

                if (((String) a1[MONATSAUSWERTUNG_FERTIGUNGSGRUPPE])
                        .compareTo((String) a2[MONATSAUSWERTUNG_FERTIGUNGSGRUPPE]) > 0) {
                    data[j] = a2;
                    data[j + 1] = a1;
                } else if (((String) a1[MONATSAUSWERTUNG_FERTIGUNGSGRUPPE])
                        .compareTo((String) a2[MONATSAUSWERTUNG_FERTIGUNGSGRUPPE]) == 0) {
                    String k1 = (String) a1[MONATSAUSWERTUNG_KUNDE];
                    String k2 = (String) a2[MONATSAUSWERTUNG_KUNDE];

                    if (k1.compareTo(k2) > 0) {
                        data[j] = a2;
                        data[j + 1] = a1;
                    } else if (((String) a1[MONATSAUSWERTUNG_KUNDE])
                            .compareTo((String) a2[MONATSAUSWERTUNG_KUNDE]) == 0) {
                        String b1 = (String) a1[MONATSAUSWERTUNG_ARTIKELNUMMER];
                        String b2 = (String) a2[MONATSAUSWERTUNG_ARTIKELNUMMER];

                        if (b1.compareTo(b2) > 0) {
                            data[j] = a2;
                            data[j + 1] = a1;
                        } else if (((String) a1[MONATSAUSWERTUNG_ARTIKELNUMMER])
                                .compareTo((String) a2[MONATSAUSWERTUNG_ARTIKELNUMMER]) == 0) {
                            String l1 = (String) a1[MONATSAUSWERTUNG_LOSNUMMER];
                            String l2 = (String) a2[MONATSAUSWERTUNG_LOSNUMMER];

                            if (l1.compareTo(l2) > 0) {
                                data[j] = a2;
                                data[j + 1] = a1;
                            }
                        }
                    }
                }
            }
        }

        initJRDS(mapParameter, FertigungReportFac.REPORT_MODUL, FertigungReportFac.REPORT_MONATSAUSWERTUNG,
                theClientDto.getMandant(), theClientDto.getLocUi(), theClientDto);
        return getReportPrint();
    }

    public JasperPrintLP printLoszeiten(Integer losIId, int iSortierung, java.sql.Timestamp tVon,
            java.sql.Timestamp tBis, TheClientDto theClientDto) {
        Map<String, Object> mapParameter = new TreeMap<String, Object>();
        try {
            this.useCase = UC_LOSZEITEN;
            this.index = -1;
            LosDto losDto = getFertigungFac().losFindByPrimaryKey(losIId);
            AuftragzeitenDto[] personalZeitenDtos = null;
            AuftragzeitenDto[] maschinenZeitenDtos = null;

            mapParameter.put("P_VON", tVon);
            mapParameter.put("P_BIS", tBis);

            if (iSortierung == LOSZEITEN_OPTION_SORTIERUNG_PERSON) {
                mapParameter.put("P_SORTIERUNG",
                        getTextRespectUISpr("lp.person", theClientDto.getMandant(), theClientDto.getLocUi()));
            } else if (iSortierung == LOSZEITEN_OPTION_SORTIERUNG_ARTIKEL) {
                mapParameter.put("P_SORTIERUNG",
                        getTextRespectUISpr("lp.artikel", theClientDto.getMandant(), theClientDto.getLocUi()));
            } else if (iSortierung == LOSZEITEN_OPTION_SORTIERUNG_AG_UAG) {
                mapParameter.put("P_SORTIERUNG",
                        getTextRespectUISpr("fert.ag", theClientDto.getMandant(), theClientDto.getLocUi()) + "+"
                                + getTextRespectUISpr("fert.uag", theClientDto.getMandant(),
                                        theClientDto.getLocUi()));
            }

            if (tBis != null) {

                tBis = Helper.cutTimestamp(Helper.addiereTageZuTimestamp(tBis, 1));
            }

            if (iSortierung == LOSZEITEN_OPTION_SORTIERUNG_PERSON) {
                personalZeitenDtos = getZeiterfassungFac().getAllZeitenEinesBeleges(LocaleFac.BELEGART_LOS, losIId,
                        null, null, tVon, tBis, false, true, theClientDto);
            } else {
                personalZeitenDtos = getZeiterfassungFac().getAllZeitenEinesBeleges(LocaleFac.BELEGART_LOS, losIId,
                        null, null, tVon, tBis, true, false, theClientDto);
            }

            if (iSortierung == LOSZEITEN_OPTION_SORTIERUNG_PERSON) {
                maschinenZeitenDtos = getZeiterfassungFac().getAllMaschinenzeitenEinesBeleges(losIId, null, tVon,
                        tBis, theClientDto);
            } else {
                maschinenZeitenDtos = getZeiterfassungFac().getAllMaschinenzeitenEinesBeleges(losIId, null, tVon,
                        tBis, theClientDto);
            }

            AuftragzeitenDto[] aLoszeitenDtos = new AuftragzeitenDto[personalZeitenDtos.length
                    + maschinenZeitenDtos.length];

            int row = 0;

            for (int i = 0; i < personalZeitenDtos.length; i++) {
                aLoszeitenDtos[row] = personalZeitenDtos[i];
                row++;
            }
            for (int i = 0; i < maschinenZeitenDtos.length; i++) {
                aLoszeitenDtos[row] = maschinenZeitenDtos[i];
                row++;
            }

            data = new Object[aLoszeitenDtos.length][LOSZEITEN_SPALTENANZAHL];

            for (int i = 0; i < aLoszeitenDtos.length; i++) {
                data[i][LOSZEITEN_PERSON_MASCHINE] = aLoszeitenDtos[i].getSPersonalMaschinenname();
                data[i][LOSZEITEN_PERSONALNUMMER_MASCHINENINVENARNUMMER] = aLoszeitenDtos[i].getSPersonalnummer();
                data[i][LOSZEITEN_ARTIKELNUMMER] = aLoszeitenDtos[i].getSArtikelcnr();
                data[i][LOSZEITEN_BEMERKUNG] = aLoszeitenDtos[i].getSZeitbuchungtext();
                data[i][LOSZEITEN_BEMERKUNG_LANG] = aLoszeitenDtos[i].getSKommentar();
                data[i][LOSZEITEN_BEMERKUNG_LANG] = aLoszeitenDtos[i].getSKommentar();
                data[i][LOSZEITEN_MASCHINENGRUPPE] = aLoszeitenDtos[i].getMaschinengruppe();
                data[i][LOSZEITEN_ARBEITSGANG] = aLoszeitenDtos[i].getiArbeitsgang();
                data[i][LOSZEITEN_UNTERARBEITSGANG] = aLoszeitenDtos[i].getiUnterarbeitsgang();
                data[i][LOSZEITEN_BEZEICHNUNG] = aLoszeitenDtos[i].getSArtikelbezeichnung();
                data[i][LOSZEITEN_ZUSATZBEZEICHNUNG] = aLoszeitenDtos[i].getSArtikelzusatzbezeichnung();
                data[i][LOSZEITEN_DAUER] = aLoszeitenDtos[i].getDdDauer();
                data[i][LOSZEITEN_BEGINN] = aLoszeitenDtos[i].getTsBeginn();
                data[i][LOSZEITEN_ENDE] = aLoszeitenDtos[i].getTsEnde();

            }

            // SP1296
            if (iSortierung == LOSZEITEN_OPTION_SORTIERUNG_AG_UAG) {
                // Umsortieren
                for (int k = data.length - 1; k > 0; --k) {
                    for (int j = 0; j < k; ++j) {
                        Object[] a1 = (Object[]) data[j];
                        Object[] a2 = (Object[]) data[j + 1];

                        Integer iArbeitsgang = (Integer) a1[LOSZEITEN_ARBEITSGANG];
                        Integer iUnterArbeitsgang = (Integer) a1[LOSZEITEN_UNTERARBEITSGANG];
                        if (iArbeitsgang == null) {
                            iArbeitsgang = 0;
                        }
                        if (iUnterArbeitsgang == null) {
                            iUnterArbeitsgang = 0;
                        }
                        Integer iArbeitsgang2 = (Integer) a2[LOSZEITEN_ARBEITSGANG];
                        Integer iUnterArbeitsgang2 = (Integer) a2[LOSZEITEN_UNTERARBEITSGANG];
                        if (iArbeitsgang2 == null) {
                            iArbeitsgang2 = 0;
                        }
                        if (iUnterArbeitsgang2 == null) {
                            iUnterArbeitsgang2 = 0;
                        }

                        String s1 = Helper.fitString2LengthAlignRight(iArbeitsgang + "", 5, '0')
                                + Helper.fitString2LengthAlignRight(iUnterArbeitsgang + "", 5, '0');
                        String s2 = Helper.fitString2LengthAlignRight(iArbeitsgang2 + "", 5, '0')
                                + Helper.fitString2LengthAlignRight(iUnterArbeitsgang2 + "", 5, '0');

                        if (s1.compareTo(s2) > 0) {
                            data[j] = a2;
                            data[j + 1] = a1;
                        }
                    }
                }
            }

            mapParameter.put("P_ANGELEGT", new java.util.Date(losDto.getTAnlegen().getTime()));
            String sAuftragsnummer;
            String sInternerKommentar = null;
            String sKunde;
            String sKundeLieferadresse;
            Timestamp dLiefertermin;
            String sLieferart;
            String sAbteilung = null;
            String sSpediteur = null;
            Boolean bPoenale = Boolean.FALSE;
            Boolean bRoHs = Boolean.FALSE;
            if (losDto.getAuftragIId() != null) {
                // Auftrag holen
                AuftragDto auftragDto = getAuftragFac().auftragFindByPrimaryKey(losDto.getAuftragIId());
                sAuftragsnummer = auftragDto.getCNr();
                sLieferart = getLocaleFac().lieferartFindByIIdLocaleOhneExc(auftragDto.getLieferartIId(),
                        theClientDto.getLocUi(), theClientDto);

                if (auftragDto.getSpediteurIId() != null) {
                    sSpediteur = getMandantFac().spediteurFindByPrimaryKey(auftragDto.getSpediteurIId())
                            .getCNamedesspediteurs();
                }

                bPoenale = Helper.short2Boolean(auftragDto.getBPoenale());
                bRoHs = Helper.short2Boolean(auftragDto.getBRoHs());
                // Internen Kommentar aus dem Auftrag, abhaengig von einem
                // Mandantenparameter
                ParametermandantDto parameter = getParameterFac().getMandantparameter(theClientDto.getMandant(),
                        ParameterFac.KATEGORIE_FERTIGUNG,
                        ParameterFac.PARAMETER_KOMMENTAR_AM_FERTIGUNGSBEGLEITSCHEIN);
                short iValue = Short.parseShort(parameter.getCWert());
                boolean bDruckeKommentar = Helper.short2boolean(iValue);
                if (bDruckeKommentar) {
                    sInternerKommentar = auftragDto.getXInternerkommentar();
                }
                // Kunde holen
                KundeDto kundeDto = getKundeFac().kundeFindByPrimaryKey(auftragDto.getKundeIIdAuftragsadresse(),
                        theClientDto);

                sKunde = kundeDto.getPartnerDto().getCName1nachnamefirmazeile1();

                KundeDto kundeDtoLieferadresse = getKundeFac()
                        .kundeFindByPrimaryKey(auftragDto.getKundeIIdLieferadresse(), theClientDto);
                sKundeLieferadresse = kundeDtoLieferadresse.getPartnerDto().getCName1nachnamefirmazeile1();

                sAbteilung = kundeDto.getPartnerDto().getCName3vorname2abteilung();

                if (losDto.getAuftragpositionIId() != null) {
                    AuftragpositionDto aufposDto = getAuftragpositionFac()
                            .auftragpositionFindByPrimaryKey(losDto.getAuftragpositionIId());
                    if (aufposDto.getTUebersteuerbarerLiefertermin() != null) {
                        dLiefertermin = aufposDto.getTUebersteuerbarerLiefertermin();
                    } else {
                        dLiefertermin = auftragDto.getDLiefertermin();
                    }
                } else {
                    dLiefertermin = auftragDto.getDLiefertermin();
                }
            } else {
                sAuftragsnummer = "";

                if (losDto.getKundeIId() != null) {
                    KundeDto kundeDto = getKundeFac().kundeFindByPrimaryKey(losDto.getKundeIId(), theClientDto);

                    sKunde = kundeDto.getPartnerDto().getCName1nachnamefirmazeile1();
                } else {
                    sKunde = "";
                }

                sKundeLieferadresse = "";
                dLiefertermin = null;
                sLieferart = "";
                sSpediteur = "";
            }

            mapParameter.put("P_AUFTRAGNUMMER", sAuftragsnummer);
            mapParameter.put("P_AUFTRAG_INTERNERKOMMENTAR", sInternerKommentar);
            mapParameter.put("P_AUFTRAG_KUNDE_ABTEILUNG", sAbteilung);
            mapParameter.put("P_LIEFERART", sLieferart);
            mapParameter.put("P_SPEDITEUR", sSpediteur);
            mapParameter.put("P_POENALE", bPoenale);
            mapParameter.put("P_ROHS", bRoHs);
            KostenstelleDto kstDto = getSystemFac().kostenstelleFindByPrimaryKey(losDto.getKostenstelleIId());
            mapParameter.put("P_KOSTENSTELLENUMMER", kstDto.getCNr());
            mapParameter.put("P_KUNDE", sKunde);
            mapParameter.put("P_KUNDE_LIEFERADRESSE", sKundeLieferadresse);
            mapParameter.put("P_LOSGROESSE", losDto.getNLosgroesse());

            mapParameter.put("P_LOSKLASSEN", getLosLosKlassenAlsString(losDto.getIId()));

            mapParameter.put("P_LOSNUMMER", losDto.getCNr());
            mapParameter.put("P_PRODUKTIONSBEGINN", losDto.getTProduktionsbeginn());
            mapParameter.put("P_PRODUKTIONSENDE", losDto.getTProduktionsende());
            GregorianCalendar gc = new GregorianCalendar();
            gc.setTime(losDto.getTProduktionsende());
            mapParameter.put("P_PRODUKTIONSENDE_KW", new Integer(gc.get(Calendar.WEEK_OF_YEAR)));

            mapParameter.put("P_LIEFERTERMIN", dLiefertermin);

            // Fertigungsort
            if (losDto.getPartnerIIdFertigungsort() != null) {
                PartnerDto partnerDto = getPartnerFac().partnerFindByPrimaryKey(losDto.getPartnerIIdFertigungsort(),
                        theClientDto);
                mapParameter.put("P_FERTIGUNGSORT", partnerDto.formatTitelAnrede());
            }

            // Erstlos
            mapParameter.put("P_ERSTLOS", new Boolean(istErstlos(losDto, theClientDto)));

            ArrayList<Object> images = new ArrayList<Object>();
            String sLosStuecklisteArtikelKommentar = "";
            // Bild einfuegen
            String sMengenEinheit = "";
            if (losDto.getStuecklisteIId() != null) {
                StuecklisteDto stuecklisteDto = getStuecklisteFac()
                        .stuecklisteFindByPrimaryKey(losDto.getStuecklisteIId(), theClientDto);
                // Einheit
                if (stuecklisteDto.getArtikelDto() != null) {
                    if (stuecklisteDto.getArtikelDto().getEinheitCNr() != null) {
                        sMengenEinheit = stuecklisteDto.getArtikelDto().getEinheitCNr();
                    }
                }

                // Sperren
                String sperren = getArtikelFac().getArtikelsperrenText(stuecklisteDto.getArtikelIId());

                mapParameter.put("P_STUECKLISTESPERRSTATUS", sperren);

                // Abmessungen
                GeometrieDto geometrieDto = stuecklisteDto.getArtikelDto().getGeometrieDto();
                if (geometrieDto != null) {
                    mapParameter.put(P_ARTIKEL_BREITE, geometrieDto.getFBreite());
                    mapParameter.put(P_ARTIKEL_HOEHE, geometrieDto.getFHoehe());
                    mapParameter.put(P_ARTIKEL_TIEFE, geometrieDto.getFTiefe());
                }
                // Bauform
                VerpackungDto verpackungDto = stuecklisteDto.getArtikelDto().getVerpackungDto();
                if (verpackungDto != null) {
                    mapParameter.put("P_ARTIKEL_BAUFORM", verpackungDto.getCBauform());
                    mapParameter.put("P_ARTIKEL_VERPACKUNGSART", verpackungDto.getCVerpackungsart());
                }

                mapParameter.put("P_INDEX", stuecklisteDto.getArtikelDto().getCIndex());
                mapParameter.put("P_REVISION", stuecklisteDto.getArtikelDto().getCRevision());

                ArtikelkommentarDto[] artikelkommentarDto = getArtikelkommentarFac()
                        .artikelkommentardruckFindByArtikelIIdBelegartCNr(stuecklisteDto.getArtikelIId(),
                                LocaleFac.BELEGART_LOS, theClientDto.getLocUiAsString(), theClientDto);

                if (artikelkommentarDto != null && artikelkommentarDto.length > 0) {

                    for (int j = 0; j < artikelkommentarDto.length; j++) {
                        if (artikelkommentarDto[j].getArtikelkommentarsprDto() != null) {
                            // Text Kommentar
                            if (artikelkommentarDto[j].getDatenformatCNr().trim()
                                    .indexOf(MediaFac.DATENFORMAT_MIMETYPEART_TEXT) != -1) {
                                if (sLosStuecklisteArtikelKommentar == "") {
                                    sLosStuecklisteArtikelKommentar += artikelkommentarDto[j]
                                            .getArtikelkommentarsprDto().getXKommentar();
                                } else {
                                    sLosStuecklisteArtikelKommentar += "\n"
                                            + artikelkommentarDto[j].getArtikelkommentarsprDto().getXKommentar();
                                }
                            } else if (artikelkommentarDto[j].getDatenformatCNr()
                                    .equals(MediaFac.DATENFORMAT_MIMETYPE_IMAGE_JPEG)
                                    || artikelkommentarDto[j].getDatenformatCNr()
                                            .equals(MediaFac.DATENFORMAT_MIMETYPE_IMAGE_PNG)
                                    || artikelkommentarDto[j].getDatenformatCNr()
                                            .equals(MediaFac.DATENFORMAT_MIMETYPE_IMAGE_GIF)) {
                                byte[] bild = artikelkommentarDto[j].getArtikelkommentarsprDto().getOMedia();
                                if (bild != null) {
                                    java.awt.Image myImage = Helper.byteArrayToImage(bild);
                                    images.add(myImage);
                                }
                            } else if (artikelkommentarDto[j].getDatenformatCNr()
                                    .equals(MediaFac.DATENFORMAT_MIMETYPE_IMAGE_TIFF)) {

                                byte[] bild = artikelkommentarDto[j].getArtikelkommentarsprDto().getOMedia();

                                java.awt.Image[] tiffs = Helper.tiffToImageArray(bild);
                                if (tiffs != null) {
                                    for (int k = 0; k < tiffs.length; k++) {
                                        images.add(tiffs[k]);
                                    }
                                }

                            }
                        }
                    }
                }
            }
            mapParameter.put("P_MENGENEINHEIT", sMengenEinheit);
            mapParameter.put("P_PROJEKT", losDto.getCProjekt());
            mapParameter.put("P_LOSKOMMENTAR", losDto.getCKommentar());
            mapParameter.put("P_LOSLANGTEXT", losDto.getXText());

            FertigungsgruppeDto fertGruppeDto = getStuecklisteFac()
                    .fertigungsgruppeFindByPrimaryKey(losDto.getFertigungsgruppeIId());
            mapParameter.put("P_FERTIGUNGSGRUPPE", fertGruppeDto.getCBez());

            // Materialliste?
            if (losDto.getStuecklisteIId() != null) {
                StuecklisteDto stkDto = getStuecklisteFac().stuecklisteFindByPrimaryKey(losDto.getStuecklisteIId(),
                        theClientDto);

                if (sLosStuecklisteArtikelKommentar != "") {
                    mapParameter.put("P_STUECKLISTEARTIKELKOMMENTAR",
                            Helper.formatStyledTextForJasper(sLosStuecklisteArtikelKommentar));
                }

                mapParameter.put("P_STUECKLISTEBEZEICHNUNG", stkDto.getArtikelDto().getArtikelsprDto().getCBez());

                mapParameter.put("P_STUECKLISTEZUSATZBEZEICHNUNG",
                        stkDto.getArtikelDto().getArtikelsprDto().getCZbez());
                mapParameter.put("P_STUECKLISTEZUSATZBEZEICHNUNG2",
                        stkDto.getArtikelDto().getArtikelsprDto().getCZbez2());

                mapParameter.put("P_STUECKLISTEKURZBEZEICHNUNG",
                        stkDto.getArtikelDto().getArtikelsprDto().getCKbez());
                mapParameter.put("P_STUECKLISTEREFERENZNUMMER", stkDto.getArtikelDto().getCReferenznr());

                mapParameter.put("P_STUECKLISTENUMMER", stkDto.getArtikelDto().getCNr());

                mapParameter.put("P_STUECKLISTE_GEWICHTKG", stkDto.getArtikelDto().getFGewichtkg());

                if (stkDto.getArtikelDto().getVerpackungDto() != null) {
                    mapParameter.put("P_STUECKLISTE_BAUFORM",
                            stkDto.getArtikelDto().getVerpackungDto().getCBauform());
                    mapParameter.put("P_STUECKLISTE_VERPACKUNGSART",
                            stkDto.getArtikelDto().getVerpackungDto().getCVerpackungsart());
                }

                if (stkDto.getArtikelDto().getGeometrieDto() != null) {
                    mapParameter.put("P_STUECKLISTE_BREITETEXT",
                            stkDto.getArtikelDto().getGeometrieDto().getCBreitetext());
                    mapParameter.put("P_STUECKLISTE_BREITE", stkDto.getArtikelDto().getGeometrieDto().getFBreite());
                    mapParameter.put("P_STUECKLISTE_HOEHE", stkDto.getArtikelDto().getGeometrieDto().getFHoehe());
                    mapParameter.put("P_STUECKLISTE_TIEFE", stkDto.getArtikelDto().getGeometrieDto().getFTiefe());
                }

                // Stuecklisteneigenschaften
                StuecklisteeigenschaftDto[] stuecklisteeigenschaftDtos = getStuecklisteFac()
                        .stuecklisteeigenschaftFindByStuecklisteIId(losDto.getStuecklisteIId());
                ArrayList<Object[]> al = new ArrayList<Object[]>();
                for (int j = 0; j < stuecklisteeigenschaftDtos.length; j++) {
                    StuecklisteeigenschaftDto dto = stuecklisteeigenschaftDtos[j];

                    Object[] o = new Object[2];
                    String sStklEigenschaftArt = dto.getStuecklisteeigenschaftartDto().getCBez();
                    o[0] = sStklEigenschaftArt;
                    o[1] = dto.getCBez();
                    al.add(o);

                    // Index und Materialplatz auch einzeln an Report uebergeben
                    if (sStklEigenschaftArt.equals(StuecklisteReportFac.REPORT_STUECKLISTE_EIGENSCHAFTEN_INDEX)) {
                        mapParameter.put(P_STUECKLISTENEIGENSCHAFT_INDEX, dto.getCBez());
                    }
                    if (sStklEigenschaftArt
                            .equals(StuecklisteReportFac.REPORT_STUECKLISTE_EIGENSCHAFTEN_MATERIALPLATZ)) {
                        mapParameter.put(P_STUECKLISTENEIGENSCHAFT_MATERIALPLATZ, dto.getCBez());
                    }

                }

                if (stuecklisteeigenschaftDtos.length > 0) {
                    String[] fieldnames = new String[] { "F_EIGENSCHAFTART", "F_BEZEICHNUNG" };
                    Object[][] dataSub = new Object[al.size()][fieldnames.length];
                    dataSub = (Object[][]) al.toArray(dataSub);

                    mapParameter.put("DATENSUBREPORT", new LPDatenSubreport(dataSub, fieldnames));
                }

            } else {
                mapParameter.put("P_STUECKLISTEBEZEICHNUNG", losDto.getCProjekt());
                mapParameter.put("P_STUECKLISTENUMMER", getTextRespectUISpr("fert.materialliste",
                        theClientDto.getMandant(), theClientDto.getLocUi()));
            }
        } catch (RemoteException e) {
            throwEJBExceptionLPRespectOld(e);
        }

        initJRDS(mapParameter, FertigungReportFac.REPORT_MODUL, FertigungReportFac.REPORT_LOSZEITEN,
                theClientDto.getMandant(), theClientDto.getLocUi(), theClientDto);

        return getReportPrint();
    }

    public JasperPrintLP printNachkalkulation(Integer losIId, TheClientDto theClientDto) {

        this.useCase = UC_NACHKALKULATION;

        try {
            int iAnzahlSpalten = 10;
            int iAnzahlZeilen = 50;
            ReportLosnachkalkulationDto mat = getFertigungReportFac().getDataNachkalkulationMaterial(losIId,
                    theClientDto);

            ReportLosnachkalkulationDto[] zeit = getFertigungReportFac().getDataNachkalkulationZeitdaten(losIId,
                    theClientDto);
            data = new Object[iAnzahlZeilen][iAnzahlSpalten];

            int row = 0;
            ReportLosnachkalkulationDto nkZeitSumme = new ReportLosnachkalkulationDto();
            nkZeitSumme.setSBezeichnung(
                    getTextRespectUISpr("lp.summe", theClientDto.getMandant(), theClientDto.getLocUi()));

            for (int i = 0; i < zeit.length; i++) {
                data[row][NACHKALKULATION_ARTIKELNUMMER] = zeit[i].getSArtikelnummer();
                data[row][NACHKALKULATION_ARTIKELBEZEICHNUNG] = zeit[i].getSBezeichnung();
                data[row][NACHKALKULATION_PERSONALSOLL] = zeit[i].getBdSollmenge();
                data[row][NACHKALKULATION_PERSONALIST] = zeit[i].getBdIstmenge();
                data[row][NACHKALKULATION_PERSONALDIFF] = zeit[i].getBdSollmenge()
                        .subtract(zeit[i].getBdIstmenge());
                data[row][NACHKALKULATION_MASCHINESOLL] = zeit[i].getBdSollmengeMaschine();
                data[row][NACHKALKULATION_MASCHINEIST] = zeit[i].getBdIstmengeMaschine();
                data[row][NACHKALKULATION_MASCHINEDIFF] = zeit[i].getBdSollmengeMaschine()
                        .subtract(zeit[i].getBdIstmengeMaschine());
                data[row][NACHKALKULATION_GESAMTSOLL] = zeit[i].getBdSollpreis();
                data[row][NACHKALKULATION_GESAMTIST] = zeit[i].getBdIstpreis();
                // Summe
                nkZeitSumme.addiereZuSollmenge(zeit[i].getBdSollmenge());
                nkZeitSumme.addiereZuIstmenge(zeit[i].getBdIstmenge());
                nkZeitSumme.addiereZuIstmengeMaschine(zeit[i].getBdIstmengeMaschine());
                nkZeitSumme.addiereZuSollpreis(zeit[i].getBdSollpreis());
                nkZeitSumme.addiereZuIstpreis(zeit[i].getBdIstpreis());
                nkZeitSumme.addiereZuSollmengeMaschine(zeit[i].getBdSollmengeMaschine());
                row++;
            }
            data[row][NACHKALKULATION_ARTIKELBEZEICHNUNG] = nkZeitSumme.getSBezeichnung();
            data[row][NACHKALKULATION_PERSONALSOLL] = nkZeitSumme.getBdSollmenge();
            data[row][NACHKALKULATION_PERSONALIST] = nkZeitSumme.getBdIstmenge();
            data[row][NACHKALKULATION_PERSONALDIFF] = nkZeitSumme.getBdSollmenge()
                    .subtract(nkZeitSumme.getBdIstmenge());
            data[row][NACHKALKULATION_MASCHINESOLL] = nkZeitSumme.getBdSollmengeMaschine();
            data[row][NACHKALKULATION_MASCHINEIST] = nkZeitSumme.getBdIstmengeMaschine();
            data[row][NACHKALKULATION_MASCHINEDIFF] = nkZeitSumme.getBdSollmengeMaschine()
                    .subtract(nkZeitSumme.getBdIstmengeMaschine());
            data[row][NACHKALKULATION_GESAMTSOLL] = nkZeitSumme.getBdSollpreis();
            data[row][NACHKALKULATION_GESAMTIST] = nkZeitSumme.getBdIstpreis();
            row++;
            row++;
            ReportLosnachkalkulationDto nkGesamtSumme = new ReportLosnachkalkulationDto();
            nkGesamtSumme.setSBezeichnung(
                    getTextRespectUISpr("lp.gesamtsumme", theClientDto.getMandant(), theClientDto.getLocUi()));
            nkGesamtSumme.addiereZuSollpreis(nkZeitSumme.getBdSollpreis());
            nkGesamtSumme.addiereZuIstpreis(nkZeitSumme.getBdIstpreis());
            nkGesamtSumme.addiereZuSollpreis(mat.getBdSollpreis());
            nkGesamtSumme.addiereZuIstpreis(mat.getBdIstpreis());
            data[row][NACHKALKULATION_ARTIKELBEZEICHNUNG] = mat.getSBezeichnung();
            data[row][NACHKALKULATION_PERSONALSOLL] = mat.getBdSollmenge();
            data[row][NACHKALKULATION_PERSONALIST] = mat.getBdIstmenge();
            data[row][NACHKALKULATION_PERSONALDIFF] = mat.getBdSollmenge().subtract(mat.getBdIstmenge());
            data[row][NACHKALKULATION_MASCHINESOLL] = mat.getBdSollmengeMaschine();
            data[row][NACHKALKULATION_MASCHINEIST] = mat.getBdIstmengeMaschine();
            data[row][NACHKALKULATION_MASCHINEDIFF] = mat.getBdSollmengeMaschine()
                    .subtract(mat.getBdIstmengeMaschine());
            data[row][NACHKALKULATION_GESAMTSOLL] = mat.getBdSollpreis();
            data[row][NACHKALKULATION_GESAMTIST] = mat.getBdIstpreis();
            row++;
            row++;
            data[row][NACHKALKULATION_ARTIKELBEZEICHNUNG] = nkGesamtSumme.getSBezeichnung();
            data[row][NACHKALKULATION_PERSONALSOLL] = nkGesamtSumme.getBdSollmenge();
            data[row][NACHKALKULATION_PERSONALIST] = nkGesamtSumme.getBdIstmenge();
            data[row][NACHKALKULATION_PERSONALDIFF] = nkGesamtSumme.getBdSollmengeMaschine()
                    .subtract(nkGesamtSumme.getBdIstmengeMaschine());
            data[row][NACHKALKULATION_MASCHINESOLL] = nkGesamtSumme.getBdSollmengeMaschine();
            data[row][NACHKALKULATION_MASCHINEIST] = nkGesamtSumme.getBdIstmengeMaschine();
            data[row][NACHKALKULATION_MASCHINEDIFF] = nkGesamtSumme.getBdSollmenge()
                    .subtract(nkGesamtSumme.getBdIstmenge());
            data[row][NACHKALKULATION_GESAMTSOLL] = nkGesamtSumme.getBdSollpreis();
            data[row][NACHKALKULATION_GESAMTIST] = nkGesamtSumme.getBdIstpreis();
            row++;

            LosDto losDto = getFertigungFac().losFindByPrimaryKey(losIId);

            Map<String, Object> mapParameter = new TreeMap<String, Object>();
            mapParameter.put("P_ANGELEGT", new java.util.Date(losDto.getTAnlegen().getTime()));
            String sAuftragsnummer;
            String sInternerKommentar = null;
            String sKunde;
            String sKundeLieferadresse;
            Timestamp dLiefertermin;
            String sLieferart;
            String sAbteilung = null;
            String sSpediteur = null;
            Boolean bPoenale = Boolean.FALSE;
            Boolean bRoHs = Boolean.FALSE;

            Integer kundeIId = null;

            if (losDto.getAuftragIId() != null) {
                // Auftrag holen
                AuftragDto auftragDto = getAuftragFac().auftragFindByPrimaryKey(losDto.getAuftragIId());
                kundeIId = auftragDto.getKundeIIdAuftragsadresse();
                sAuftragsnummer = auftragDto.getCNr();
                sLieferart = getLocaleFac().lieferartFindByIIdLocaleOhneExc(auftragDto.getLieferartIId(),
                        theClientDto.getLocUi(), theClientDto);

                if (auftragDto.getSpediteurIId() != null) {
                    sSpediteur = getMandantFac().spediteurFindByPrimaryKey(auftragDto.getSpediteurIId())
                            .getCNamedesspediteurs();
                }

                bPoenale = Helper.short2Boolean(auftragDto.getBPoenale());
                bRoHs = Helper.short2Boolean(auftragDto.getBRoHs());
                // Internen Kommentar aus dem Auftrag, abhaengig von einem
                // Mandantenparameter
                ParametermandantDto parameter = getParameterFac().getMandantparameter(theClientDto.getMandant(),
                        ParameterFac.KATEGORIE_FERTIGUNG,
                        ParameterFac.PARAMETER_KOMMENTAR_AM_FERTIGUNGSBEGLEITSCHEIN);
                short iValue = Short.parseShort(parameter.getCWert());
                boolean bDruckeKommentar = Helper.short2boolean(iValue);
                if (bDruckeKommentar) {
                    sInternerKommentar = auftragDto.getXInternerkommentar();
                }
                // Kunde holen
                KundeDto kundeDto = getKundeFac().kundeFindByPrimaryKey(auftragDto.getKundeIIdAuftragsadresse(),
                        theClientDto);

                sKunde = kundeDto.getPartnerDto().getCName1nachnamefirmazeile1();

                KundeDto kundeDtoLieferadresse = getKundeFac()
                        .kundeFindByPrimaryKey(auftragDto.getKundeIIdLieferadresse(), theClientDto);
                sKundeLieferadresse = kundeDtoLieferadresse.getPartnerDto().getCName1nachnamefirmazeile1();

                sAbteilung = kundeDto.getPartnerDto().getCName3vorname2abteilung();

                if (losDto.getAuftragpositionIId() != null) {
                    AuftragpositionDto aufposDto = getAuftragpositionFac()
                            .auftragpositionFindByPrimaryKey(losDto.getAuftragpositionIId());
                    if (aufposDto.getTUebersteuerbarerLiefertermin() != null) {
                        dLiefertermin = aufposDto.getTUebersteuerbarerLiefertermin();
                    } else {
                        dLiefertermin = auftragDto.getDLiefertermin();
                    }
                } else {
                    dLiefertermin = auftragDto.getDLiefertermin();
                }
            } else {
                sAuftragsnummer = "";
                sKunde = "";
                sKundeLieferadresse = "";
                dLiefertermin = null;
                sLieferart = "";
                sSpediteur = "";
            }

            BigDecimal vkPreisAuftragsposition = null;
            BigDecimal vkPreisbasisStueckliste = null;
            BigDecimal vkPreisStueckliste = null;
            if (kundeIId == null) {
                kundeIId = losDto.getKundeIId();
            }

            if (losDto.getAuftragpositionIId() != null) {
                AuftragpositionDto auftragpositionDto = getAuftragpositionFac()
                        .auftragpositionFindByPrimaryKey(losDto.getAuftragpositionIId());
                vkPreisAuftragsposition = auftragpositionDto
                        .getNNettoeinzelpreisplusversteckteraufschlagminusrabatte();
            }

            if (losDto.getStuecklisteIId() != null) {
                StuecklisteDto stkDto = getStuecklisteFac().stuecklisteFindByPrimaryKey(losDto.getStuecklisteIId(),
                        theClientDto);

                VkPreisfindungEinzelverkaufspreisDto vkpreisDto = getVkPreisfindungFac()
                        .getArtikeleinzelverkaufspreis(stkDto.getArtikelIId(), losDto.getTProduktionsende(),
                                theClientDto.getSMandantenwaehrung(), theClientDto);
                if (vkpreisDto != null && vkpreisDto.getNVerkaufspreisbasis() != null) {
                    vkPreisbasisStueckliste = vkpreisDto.getNVerkaufspreisbasis();
                }

                if (kundeIId != null) {

                    KundeDto kundeDto = getKundeFac().kundeFindByPrimaryKey(kundeIId, theClientDto);

                    MwstsatzDto mwstsatzDtoAktuell = getMandantFac()
                            .mwstsatzFindByMwstsatzbezIIdAktuellster(kundeDto.getMwstsatzbezIId(), theClientDto);

                    VkpreisfindungDto vkpreisfindungDto = getVkPreisfindungFac().verkaufspreisfindung(
                            stkDto.getArtikelIId(), kundeIId, losDto.getNLosgroesse(), losDto.getTProduktionsende(),
                            kundeDto.getVkpfArtikelpreislisteIIdStdpreisliste(), mwstsatzDtoAktuell.getIId(),
                            theClientDto.getSMandantenwaehrung(), theClientDto);

                    VerkaufspreisDto kundenVKPreisDto = Helper.getVkpreisBerechnet(vkpreisfindungDto);
                    if (kundenVKPreisDto != null) {
                        vkPreisStueckliste = kundenVKPreisDto.nettopreis;
                    }
                }

            }

            mapParameter.put("P_VKPREIS_AUFTRAGSPOSITION", vkPreisAuftragsposition);
            mapParameter.put("P_VKPREISBASIS_STUECKLISTE", vkPreisbasisStueckliste);
            mapParameter.put("P_VKPREIS_STUECKLISTE", vkPreisStueckliste);

            mapParameter.put("P_AUFTRAGNUMMER", sAuftragsnummer);
            mapParameter.put("P_AUFTRAG_INTERNERKOMMENTAR", sInternerKommentar);
            mapParameter.put("P_AUFTRAG_KUNDE_ABTEILUNG", sAbteilung);
            mapParameter.put("P_LIEFERART", sLieferart);
            mapParameter.put("P_SPEDITEUR", sSpediteur);
            mapParameter.put("P_POENALE", bPoenale);
            mapParameter.put("P_ROHS", bRoHs);
            KostenstelleDto kstDto = getSystemFac().kostenstelleFindByPrimaryKey(losDto.getKostenstelleIId());
            mapParameter.put("P_KOSTENSTELLENUMMER", kstDto.getCNr());
            mapParameter.put("P_KUNDE", sKunde);
            mapParameter.put("P_KUNDE_LIEFERADRESSE", sKundeLieferadresse);
            mapParameter.put("P_LOSGROESSE", losDto.getNLosgroesse());

            BigDecimal abgeliefert = BigDecimal.ZERO;

            LosablieferungDto[] losablieferungDtos = getFertigungFac().losablieferungFindByLosIId(losDto.getIId(),
                    false, theClientDto);
            BigDecimal bdAbgeliefert = new BigDecimal(0.0000);
            for (int j = 0; j < losablieferungDtos.length; j++) {
                abgeliefert = abgeliefert.add(losablieferungDtos[j].getNMenge());
            }

            mapParameter.put("P_ABGELIEFERTEMENGE", abgeliefert);

            mapParameter.put("P_LOSNUMMER", losDto.getCNr());
            mapParameter.put("P_PRODUKTIONSBEGINN", losDto.getTProduktionsbeginn());
            mapParameter.put("P_PRODUKTIONSENDE", losDto.getTProduktionsende());
            GregorianCalendar gc = new GregorianCalendar();
            gc.setTime(losDto.getTProduktionsende());
            mapParameter.put("P_PRODUKTIONSENDE_KW", new Integer(gc.get(Calendar.WEEK_OF_YEAR)));

            mapParameter.put("P_LIEFERTERMIN", dLiefertermin);

            mapParameter.put("P_PROJEKT", losDto.getCProjekt());
            mapParameter.put("P_LOSKOMMENTAR", losDto.getCKommentar());
            mapParameter.put("P_LOSLANGTEXT", losDto.getXText());

            FertigungsgruppeDto fertGruppeDto = getStuecklisteFac()
                    .fertigungsgruppeFindByPrimaryKey(losDto.getFertigungsgruppeIId());
            mapParameter.put("P_FERTIGUNGSGRUPPE", fertGruppeDto.getCBez());

            // Materialliste?
            if (losDto.getStuecklisteIId() != null) {
                StuecklisteDto stkDto = getStuecklisteFac().stuecklisteFindByPrimaryKey(losDto.getStuecklisteIId(),
                        theClientDto);

                mapParameter.put("P_MENGENEINHEIT", stkDto.getArtikelDto().getEinheitCNr());
                mapParameter.put("P_MINDESTDECKUNGSBEITRAG", stkDto.getArtikelDto().getFMindestdeckungsbeitrag());
                mapParameter.put("P_STUECKLISTEBEZEICHNUNG", stkDto.getArtikelDto().getArtikelsprDto().getCBez());

                mapParameter.put("P_STUECKLISTEZUSATZBEZEICHNUNG",
                        stkDto.getArtikelDto().getArtikelsprDto().getCZbez());
                mapParameter.put("P_STUECKLISTEZUSATZBEZEICHNUNG2",
                        stkDto.getArtikelDto().getArtikelsprDto().getCZbez2());

                mapParameter.put("P_STUECKLISTEKURZBEZEICHNUNG",
                        stkDto.getArtikelDto().getArtikelsprDto().getCKbez());
                mapParameter.put("P_STUECKLISTEREFERENZNUMMER", stkDto.getArtikelDto().getCReferenznr());

                mapParameter.put("P_STUECKLISTENUMMER", stkDto.getArtikelDto().getCNr());

                mapParameter.put("P_STUECKLISTE_GEWICHTKG", stkDto.getArtikelDto().getFGewichtkg());

                if (stkDto.getArtikelDto().getVerpackungDto() != null) {
                    mapParameter.put("P_STUECKLISTE_BAUFORM",
                            stkDto.getArtikelDto().getVerpackungDto().getCBauform());
                    mapParameter.put("P_STUECKLISTE_VERPACKUNGSART",
                            stkDto.getArtikelDto().getVerpackungDto().getCVerpackungsart());
                }

                if (stkDto.getArtikelDto().getGeometrieDto() != null) {
                    mapParameter.put("P_STUECKLISTE_BREITETEXT",
                            stkDto.getArtikelDto().getGeometrieDto().getCBreitetext());
                    mapParameter.put("P_STUECKLISTE_BREITE", stkDto.getArtikelDto().getGeometrieDto().getFBreite());
                    mapParameter.put("P_STUECKLISTE_HOEHE", stkDto.getArtikelDto().getGeometrieDto().getFHoehe());
                    mapParameter.put("P_STUECKLISTE_TIEFE", stkDto.getArtikelDto().getGeometrieDto().getFTiefe());
                }

                // Stuecklisteneigenschaften
                StuecklisteeigenschaftDto[] stuecklisteeigenschaftDtos = getStuecklisteFac()
                        .stuecklisteeigenschaftFindByStuecklisteIId(losDto.getStuecklisteIId());
                ArrayList<Object[]> al = new ArrayList<Object[]>();
                for (int j = 0; j < stuecklisteeigenschaftDtos.length; j++) {
                    StuecklisteeigenschaftDto dto = stuecklisteeigenschaftDtos[j];

                    Object[] o = new Object[2];
                    String sStklEigenschaftArt = dto.getStuecklisteeigenschaftartDto().getCBez();
                    o[0] = sStklEigenschaftArt;
                    o[1] = dto.getCBez();
                    al.add(o);

                    // Index und Materialplatz auch einzeln an Report uebergeben
                    if (sStklEigenschaftArt.equals(StuecklisteReportFac.REPORT_STUECKLISTE_EIGENSCHAFTEN_INDEX)) {
                        mapParameter.put(P_STUECKLISTENEIGENSCHAFT_INDEX, dto.getCBez());
                    }
                    if (sStklEigenschaftArt
                            .equals(StuecklisteReportFac.REPORT_STUECKLISTE_EIGENSCHAFTEN_MATERIALPLATZ)) {
                        mapParameter.put(P_STUECKLISTENEIGENSCHAFT_MATERIALPLATZ, dto.getCBez());
                    }

                }

                if (stuecklisteeigenschaftDtos.length > 0) {
                    String[] fieldnames = new String[] { "F_EIGENSCHAFTART", "F_BEZEICHNUNG" };
                    Object[][] dataSub = new Object[al.size()][fieldnames.length];
                    dataSub = (Object[][]) al.toArray(dataSub);

                    mapParameter.put("DATENSUBREPORT", new LPDatenSubreport(dataSub, fieldnames));
                }

            } else {
                mapParameter.put("P_STUECKLISTEBEZEICHNUNG", losDto.getCProjekt());
                mapParameter.put("P_STUECKLISTENUMMER", getTextRespectUISpr("fert.materialliste",
                        theClientDto.getMandant(), theClientDto.getLocUi()));
            }

            // PJ17759
            LosgutschlechtDto[] lgsDtos = getFertigungFac().losgutschlechtFindAllFehler(losIId);
            Object[][] oSubData = new Object[lgsDtos.length][8];

            for (int i = 0; i < lgsDtos.length; i++) {
                LossollarbeitsplanDto sollDto = getFertigungFac()
                        .lossollarbeitsplanFindByPrimaryKey(lgsDtos[i].getLossollarbeitsplanIId());

                oSubData[i][0] = sollDto.getIArbeitsgangnummer();
                oSubData[i][1] = sollDto.getIUnterarbeitsgang();
                ArtikelDto artikelDto = getArtikelFac()
                        .artikelFindByPrimaryKeySmall(sollDto.getArtikelIIdTaetigkeit(), theClientDto);
                oSubData[i][2] = artikelDto.getCNr();
                oSubData[i][3] = artikelDto.formatBezeichnung();

                String person = "";
                Timestamp zeitpunkt = null;
                if (lgsDtos[i].getZeitdatenIId() != null) {
                    ZeitdatenDto zDto = getZeiterfassungFac()
                            .zeitdatenFindByPrimaryKey(lgsDtos[i].getZeitdatenIId(), theClientDto);
                    zeitpunkt = zDto.getTZeit();

                    PersonalDto pDto = getPersonalFac().personalFindByPrimaryKey(zDto.getPersonalIId(),
                            theClientDto);

                    person = pDto.formatFixName1Name2();

                } else if (lgsDtos[i].getMaschinenzeitdatenIId() != null) {
                    MaschinenzeitdatenDto mzDto = getZeiterfassungFac()
                            .maschinenzeitdatenFindByPrimaryKey(lgsDtos[i].getMaschinenzeitdatenIId());
                    person = getZeiterfassungFac().maschineFindByPrimaryKey(mzDto.getMaschineIId()).getCBez();
                    zeitpunkt = mzDto.getTVon();
                }

                FehlerDto fDto = getReklamationFac().fehlerFindByPrimaryKey(lgsDtos[i].getFehlerIId(),
                        theClientDto);

                oSubData[i][4] = fDto.getCBez();
                oSubData[i][5] = lgsDtos[i].getCKommentar();

                oSubData[i][6] = person;
                oSubData[i][7] = zeitpunkt;

            }

            String[] fieldnames = new String[] { "F_AGNUMMER", "F_UAGNUMMER", "F_ARTIKEL", "F_BEZEICHNUNG",
                    "F_FEHLER", "F_FEHLER_KOMMENTAR", "F_PERSONMASCHINE", "F_ZEITPUNKT" };

            mapParameter.put("P_SUBREPORT_FEHLER", new LPDatenSubreport(oSubData, fieldnames));
            initJRDS(mapParameter, FertigungReportFac.REPORT_MODUL, FertigungReportFac.REPORT_NACHKALKULATION,
                    theClientDto.getMandant(), theClientDto.getLocUi(), theClientDto);

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

    @TransactionAttribute(TransactionAttributeType.NEVER)
    public JasperPrintLP printFehlerstatistik(java.sql.Timestamp tVon, java.sql.Timestamp tBis, Integer iSortierung,
            TheClientDto theClientDto) {
        this.useCase = UC_FEHLERSTATISTIK;
        Map<String, Object> mapParameter = new TreeMap<String, Object>();

        SessionFactory factory = FLRSessionFactory.getFactory();
        org.hibernate.Session session = factory.openSession();

        String queryString = "SELECT lgs FROM FLRLosgutschlecht lgs LEFT OUTER JOIN lgs.flrfehler fehler LEFT OUTER JOIN lgs.flrlossollarbeitsplan.flrlos.flrstueckliste.flrartikel flra WHERE  ((lgs.flrlossollarbeitsplan.flrlos.t_erledigt>=' "
                + Helper.formatTimestampWithSlashes(tVon) + "' AND lgs.flrlossollarbeitsplan.flrlos.t_erledigt<' "
                + Helper.formatTimestampWithSlashes(tBis)
                + "') OR (lgs.flrlossollarbeitsplan.flrlos.t_manuellerledigt>=' "
                + Helper.formatTimestampWithSlashes(tVon)
                + "' AND lgs.flrlossollarbeitsplan.flrlos.t_manuellerledigt<' "
                + Helper.formatTimestampWithSlashes(tBis)
                + "')) AND lgs.flrlossollarbeitsplan.flrlos.status_c_nr<>'" + FertigungFac.STATUS_STORNIERT + "' ";

        String sortierung = "";
        if (iSortierung == FertigungReportFac.SORTIERUNG_FEHLERSTATISTIK_ARTIKELNUMMER) {
            sortierung = getTextRespectUISpr("lp.artikelnummer", theClientDto.getMandant(),
                    theClientDto.getLocUi());
            queryString += " ORDER BY flra.c_nr ";
        } else if (iSortierung == FertigungReportFac.SORTIERUNG_FEHLERSTATISTIK_FEHLER) {
            sortierung = getTextRespectUISpr("lp.fehler", theClientDto.getMandant(), theClientDto.getLocUi());
            queryString += " ORDER BY fehler.c_bez ";
        } else if (iSortierung == FertigungReportFac.SORTIERUNG_FEHLERSTATISTIK_LOSNUMMER) {
            sortierung = getTextRespectUISpr("fert.tab.unten.los.title", theClientDto.getMandant(),
                    theClientDto.getLocUi());
            queryString += " ORDER BY lgs.flrlossollarbeitsplan.flrlos.c_nr ";
        }
        mapParameter.put("P_SORTIERUNG", sortierung);

        String sLocUI = Helper.locale2String(theClientDto.getLocUi());

        org.hibernate.Query query = session.createQuery(queryString);

        List<?> resultList = query.list();
        Iterator it = resultList.iterator();

        ArrayList alDaten = new ArrayList();

        while (it.hasNext()) {
            FLRLosgutschlecht lgs = (FLRLosgutschlecht) it.next();

            Object[] zeile = new Object[FEHLERSTATISTIK_SPALTENANZAHL];

            zeile[FEHLERSTATISTIK_AG_AGNUMMER] = lgs.getFlrlossollarbeitsplan().getI_arbeitsgangsnummer();
            zeile[FEHLERSTATISTIK_AG_UAGNUMMER] = lgs.getFlrlossollarbeitsplan().getI_unterarbeitsgang();
            zeile[FEHLERSTATISTIK_AG_ARTIKELNUMMER] = lgs.getFlrlossollarbeitsplan().getFlrartikel().getC_nr();
            zeile[FEHLERSTATISTIK_AG_ARTIKELBEZEICHNUNG] = getArtikelFac().artikelFindByPrimaryKeySmall(
                    lgs.getFlrlossollarbeitsplan().getFlrartikel().getI_id(), theClientDto).formatBezeichnung();
            if (lgs.getFlrlossollarbeitsplan().getFlrlos().getT_erledigt() != null) {
                zeile[FEHLERSTATISTIK_ERLEDIGTDATUM] = lgs.getFlrlossollarbeitsplan().getFlrlos().getT_erledigt();
            } else {
                zeile[FEHLERSTATISTIK_ERLEDIGTDATUM] = lgs.getFlrlossollarbeitsplan().getFlrlos()
                        .getT_manuellerledigt();
            }

            if (lgs.getFlrfehler() != null) {
                zeile[FEHLERSTATISTIK_FEHLER] = lgs.getFlrfehler().getC_bez();

                if (lgs.getFlrfehler().getSprset() != null && lgs.getFlrfehler().getSprset().size() > 0) {

                    Iterator<?> sprsetIterator = lgs.getFlrfehler().getSprset().iterator();

                    while (sprsetIterator.hasNext()) {
                        FLRFehlerspr fehlerspr = (FLRFehlerspr) sprsetIterator.next();
                        if (fehlerspr.getLocale().getC_nr().compareTo(sLocUI) == 0) {
                            zeile[FEHLERSTATISTIK_FEHLERSPR] = fehlerspr.getC_bez();
                            break;
                        }
                    }

                }

            }
            zeile[FEHLERSTATISTIK_FEHLER_KOMMENTAR] = lgs.getC_kommentar();
            zeile[FEHLERSTATISTIK_GUT] = lgs.getN_gut();
            zeile[FEHLERSTATISTIK_INARBEIT] = lgs.getN_inarbeit();
            zeile[FEHLERSTATISTIK_LOSGROESSE] = lgs.getFlrlossollarbeitsplan().getFlrlos().getN_losgroesse();
            zeile[FEHLERSTATISTIK_LOSNUMMER] = lgs.getFlrlossollarbeitsplan().getFlrlos().getC_nr();
            try {
                zeile[FEHLERSTATISTIK_MENGE_ERLEDIGT] = getFertigungFac()
                        .getErledigteMenge(lgs.getFlrlossollarbeitsplan().getFlrlos().getI_id(), theClientDto);
            } catch (RemoteException e) {
                throwEJBExceptionLPRespectOld(e);
            }

            zeile[FEHLERSTATISTIK_PROJEKT] = lgs.getFlrlossollarbeitsplan().getFlrlos().getC_projekt();
            zeile[FEHLERSTATISTIK_SCHLECHT] = lgs.getN_schlecht();
            if (lgs.getFlrlossollarbeitsplan().getFlrlos().getFlrstueckliste() != null) {
                zeile[FEHLERSTATISTIK_STUECKLISTE] = lgs.getFlrlossollarbeitsplan().getFlrlos().getFlrstueckliste()
                        .getFlrartikel().getC_nr();
                zeile[FEHLERSTATISTIK_STUECKLISTEBEZEICHNUNG] = getArtikelFac().artikelFindByPrimaryKeySmall(
                        lgs.getFlrlossollarbeitsplan().getFlrlos().getFlrstueckliste().getFlrartikel().getI_id(),
                        theClientDto).formatBezeichnung();

            }

            if (lgs.getFlrzeitdaten() != null) {
                zeile[FEHLERSTATISTIK_PERSONAL] = HelperServer
                        .formatAdresseEinesFLRPartner(lgs.getFlrzeitdaten().getFlrpersonal().getFlrpartner());
                zeile[FEHLERSTATISTIK_ZEITPUNKT] = lgs.getFlrzeitdaten().getT_zeit();
            }

            alDaten.add(zeile);
        }

        session.close();

        mapParameter.put("P_VON", tVon);
        mapParameter.put("P_BIS", new Timestamp(tBis.getTime() - 3600000));

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

        initJRDS(mapParameter, FertigungReportFac.REPORT_MODUL, FertigungReportFac.REPORT_FEHLERSTATISTIK,
                theClientDto.getMandant(), theClientDto.getLocUi(), theClientDto);
        return getReportPrint();
    }

    @TransactionAttribute(TransactionAttributeType.NEVER)
    public JasperPrintLP printLosstatistik(java.sql.Timestamp tVon, java.sql.Timestamp tBis, Integer losIId,
            Integer stuecklisteIId, Integer auftragIId, boolean bArbeitsplanSortiertNachAG, boolean bVerdichtet,
            java.sql.Timestamp tStichtag, TheClientDto theClientDto) {

        this.useCase = UC_LOSSTATISTIK;
        this.index = -1;
        SessionFactory factory = FLRSessionFactory.getFactory();
        Session session = factory.openSession();

        PersonalDto[] personalDtos = null;
        MaschineDto[] maschineDtos = null;
        try {
            personalDtos = getPersonalFac().personalFindByMandantCNr(theClientDto.getMandant(), true);
            maschineDtos = getZeiterfassungFac().maschineFindByMandantCNr(theClientDto.getMandant());
        } catch (RemoteException ex1) {
            throwEJBExceptionLPRespectOld(ex1);
        }

        Map<String, Object> mapParameter = new TreeMap<String, Object>();

        Criteria c = session.createCriteria(FLRLosReport.class);
        c.add(Restrictions.eq(FertigungFac.FLR_LOS_MANDANT_C_NR, theClientDto.getMandant()));
        c.add(Restrictions.not(Restrictions.in(FertigungFac.FLR_LOS_STATUS_C_NR,
                new String[] { LocaleFac.STATUS_ANGELEGT, LocaleFac.STATUS_STORNIERT })));
        if (stuecklisteIId != null) {
            c.add(Restrictions.eq(FertigungFac.FLR_LOS_STUECKLISTE_I_ID, stuecklisteIId));

            StuecklisteDto stuecklisteDto = getStuecklisteFac().stuecklisteFindByPrimaryKey(stuecklisteIId,
                    theClientDto);
            mapParameter.put("P_STUECKLISTE", stuecklisteDto.getArtikelDto().formatArtikelbezeichnung());

        }
        if (losIId != null) {
            c.add(Restrictions.eq("i_id", losIId));
        }
        if (auftragIId != null) {
            c.createAlias("flrauftrag", "a").add(Restrictions.eq("a.i_id", auftragIId));

            try {
                AuftragDto auftragDto = getAuftragFac().auftragFindByPrimaryKey(auftragIId);
                KundeDto kundeDto = getKundeFac().kundeFindByPrimaryKey(auftragDto.getKundeIIdAuftragsadresse(),
                        theClientDto);
                mapParameter.put("P_AUFTRAG", auftragDto.getCNr());
                mapParameter.put("P_AUFTRAGPROJEKT", auftragDto.getCBezProjektbezeichnung());
                mapParameter.put("P_AUFTRAGKUNDE", kundeDto.getPartnerDto().formatAnrede());

                mapParameter.put("P_BEARBEITER",
                        getPersonalFac().getPersonRpt(auftragDto.getPersonalIIdAnlegen(), theClientDto));
                if (auftragDto.getPersonalIIdVertreter() != null) {
                    mapParameter.put("P_VERTRETER",
                            getPersonalFac().getPersonRpt(auftragDto.getPersonalIIdVertreter(), theClientDto));
                }

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

        }
        if (tStichtag != null) {
            mapParameter.put("P_STICHTAG", tStichtag);// new
            // Timestamp(tStichtag.getTime()));
            tStichtag = Helper.cutTimestamp(new Timestamp(tStichtag.getTime() + 24 * 3600000));
        }

        if (losIId == null && auftragIId == null) {

            if (tVon != null) {
                c.add(Restrictions.or(Restrictions.ge(FertigungFac.FLR_LOSREPORT_T_MANUELLERLEDIGT, tVon),
                        Restrictions.ge(FertigungFac.FLR_LOS_T_ERLEDIGT, tVon)));
                mapParameter.put("P_VON", tVon);
            }
            if (tBis != null) {
                c.add(Restrictions.or(Restrictions.lt(FertigungFac.FLR_LOSREPORT_T_MANUELLERLEDIGT, tBis),
                        Restrictions.lt(FertigungFac.FLR_LOS_T_ERLEDIGT, tBis)));
                mapParameter.put("P_BIS", new Timestamp(tBis.getTime() - 3600000));
            }

            if (tStichtag != null) {
                c.add(Restrictions.or(Restrictions.lt(FertigungFac.FLR_LOSREPORT_T_ANLEGEN, tStichtag),
                        Restrictions.lt(FertigungFac.FLR_LOSREPORT_T_ANLEGEN, tStichtag)));
                c.add(Restrictions.or(Restrictions.ge(FertigungFac.FLR_LOSREPORT_T_MANUELLERLEDIGT, tStichtag),
                        Restrictions.ge(FertigungFac.FLR_LOS_T_ERLEDIGT, tStichtag)));
            }

        }
        c.addOrder(Order.asc("c_nr"));

        List<?> results = c.list();
        ArrayList<LosStatistikDto> al = new ArrayList<LosStatistikDto>();

        Iterator<?> resultListIterator = results.iterator();
        while (resultListIterator.hasNext()) {
            FLRLosReport los = (FLRLosReport) resultListIterator.next();

            try {

                LosDto losDto = getFertigungFac().losFindByPrimaryKey(los.getI_id());

                BigDecimal abgeliefert = new BigDecimal(0);
                for (Iterator<?> iter2 = los.getAblieferungset().iterator(); iter2.hasNext();) {
                    FLRLosablieferung item = (FLRLosablieferung) iter2.next();
                    abgeliefert = abgeliefert.add(item.getN_menge());
                }

                // VKpreis
                BigDecimal vkPreis = null;

                if (los.getFlrauftragposition() != null) {
                    vkPreis = los.getFlrauftragposition()
                            .getN_nettogesamtpreisplusversteckteraufschlagminusrabatte();
                } else {

                    if (los.getFlrstueckliste() != null) {

                        Integer kundeIId = null;

                        if (los.getFlrauftrag() != null) {
                            kundeIId = los.getFlrauftrag().getFlrkunde().getI_id();
                        }
                        if (kundeIId == null && los.getFlrkunde() != null) {
                            kundeIId = los.getFlrkunde().getI_id();
                        }

                        if (kundeIId != null) {
                            KundeDto kundeDto = getKundeFac().kundeFindByPrimaryKey(kundeIId, theClientDto);

                            MwstsatzDto mwstsatzDtoAktuell = getMandantFac()
                                    .mwstsatzFindByMwstsatzbezIIdAktuellster(kundeDto.getMwstsatzbezIId(),
                                            theClientDto);

                            VkpreisfindungDto vkpreisfindungDto = getVkPreisfindungFac().verkaufspreisfindung(
                                    los.getFlrstueckliste().getArtikel_i_id(), kundeIId, losDto.getNLosgroesse(),
                                    losDto.getTProduktionsende(),
                                    kundeDto.getVkpfArtikelpreislisteIIdStdpreisliste(),
                                    mwstsatzDtoAktuell.getIId(), theClientDto.getSMandantenwaehrung(),
                                    theClientDto);

                            VerkaufspreisDto kundenVKPreisDto = Helper.getVkpreisBerechnet(vkpreisfindungDto);
                            if (kundenVKPreisDto != null) {
                                vkPreis = kundenVKPreisDto.nettopreis;
                            }
                        } else {
                            VkPreisfindungEinzelverkaufspreisDto vkpreisDto = getVkPreisfindungFac()
                                    .getArtikeleinzelverkaufspreis(los.getFlrstueckliste().getArtikel_i_id(), null,
                                            theClientDto.getSMandantenwaehrung(), theClientDto);
                            if (vkpreisDto != null && vkpreisDto.getNVerkaufspreisbasis() != null) {
                                vkPreis = vkpreisDto.getNVerkaufspreisbasis();
                            }
                        }

                    }
                }

                // Zuerst Material
                Session session2 = factory.openSession();
                Criteria cSoll = session.createCriteria(FLRLossollmaterial.class);
                cSoll.add(Restrictions.eq(FertigungFac.FLR_LOSSOLLMATERIAL_LOS_I_ID, los.getI_id()));
                cSoll.createAlias("flrartikel", "a");
                cSoll.addOrder(Order.asc("a.c_nr"));
                List<?> resultsSoll = cSoll.list();
                Iterator<?> resultListIteratorSoll = resultsSoll.iterator();
                while (resultListIteratorSoll.hasNext()) {
                    FLRLossollmaterial sollmat = (FLRLossollmaterial) resultListIteratorSoll.next();
                    if (bVerdichtet == false && sollmat.getIstmaterialset().size() > 0) {
                        int i = 0;
                        for (Iterator<?> iter = sollmat.getIstmaterialset().iterator(); iter.hasNext();) {
                            FLRLosistmaterial item = (FLRLosistmaterial) iter.next();
                            LosStatistikDto losStatistikDto = new LosStatistikDto(losDto);
                            losStatistikDto.setArtikelnummer(sollmat.getFlrartikel().getC_nr());
                            ArtikelDto artikelDto = getArtikelFac()
                                    .artikelFindByPrimaryKeySmall(sollmat.getFlrartikel().getI_id(), theClientDto);
                            losStatistikDto.setArtikelbezeichnung(artikelDto.formatBezeichnung());

                            Timestamp tsBuchungszeit = null;

                            List<SeriennrChargennrMitMengeDto> snrDtos = getLagerFac()
                                    .getAllSeriennrchargennrEinerBelegartposition(LocaleFac.BELEGART_LOS,
                                            item.getI_id());

                            for (int k = 0; k < snrDtos.size(); k++) {

                                LagerbewegungDto bewDto = getLagerFac().getLetzteintrag(LocaleFac.BELEGART_LOS,
                                        item.getI_id(), snrDtos.get(k).getCSeriennrChargennr());
                                tsBuchungszeit = bewDto.getTBuchungszeit();
                                break;
                            }

                            losStatistikDto.setBuchungszeit(tsBuchungszeit);

                            if (i == 0) {
                                losStatistikDto.setSollmenge(sollmat.getN_menge());
                                losStatistikDto.setSollpreis(sollmat.getN_sollpreis());
                            } else {
                                losStatistikDto.setSollmenge(new BigDecimal(0));
                                losStatistikDto.setSollpreis(new BigDecimal(0));
                            }

                            losStatistikDto.setBMaterial(true);
                            losStatistikDto.setIstpreis(getFertigungFac()
                                    .getAusgegebeneMengePreis(sollmat.getI_id(), null, theClientDto));
                            losStatistikDto.setAbgelieferteMenge(abgeliefert);
                            losStatistikDto.setVkpreisStueckliste(vkPreis);

                            BigDecimal istmenge = new BigDecimal(0);

                            if (Helper.short2boolean(item.getB_abgang()) == true) {
                                istmenge = istmenge.add(item.getN_menge());
                            } else {
                                istmenge = istmenge.subtract(item.getN_menge());
                            }

                            losStatistikDto.setIstmenge(istmenge);

                            if (tStichtag == null) {

                                al.add(losStatistikDto);
                                i++;
                            } else {
                                if (tsBuchungszeit == null) {
                                    al.add(losStatistikDto);
                                    i++;
                                } else {
                                    if (tsBuchungszeit.before(tStichtag)) {
                                        al.add(losStatistikDto);
                                        i++;
                                    }
                                }

                            }

                        }
                    } else {

                        LosStatistikDto losStatistikDto = new LosStatistikDto(losDto);
                        losStatistikDto.setArtikelnummer(sollmat.getFlrartikel().getC_nr());
                        ArtikelDto artikelDto = getArtikelFac()
                                .artikelFindByPrimaryKeySmall(sollmat.getFlrartikel().getI_id(), theClientDto);
                        losStatistikDto.setArtikelbezeichnung(artikelDto.formatBezeichnung());
                        losStatistikDto.setSollmenge(sollmat.getN_menge());
                        losStatistikDto.setSollpreis(sollmat.getN_sollpreis());
                        losStatistikDto.setBMaterial(true);
                        losStatistikDto.setIstpreis(
                                getFertigungFac().getAusgegebeneMengePreis(sollmat.getI_id(), null, theClientDto));
                        losStatistikDto.setAbgelieferteMenge(abgeliefert);
                        losStatistikDto.setVkpreisStueckliste(vkPreis);

                        BigDecimal istmenge = new BigDecimal(0);
                        for (Iterator<?> iter = sollmat.getIstmaterialset().iterator(); iter.hasNext();) {
                            FLRLosistmaterial item = (FLRLosistmaterial) iter.next();

                            if (tStichtag != null) {

                                Timestamp tsBuchungszeit = null;

                                List<SeriennrChargennrMitMengeDto> snrDtos = getLagerFac()
                                        .getAllSeriennrchargennrEinerBelegartposition(LocaleFac.BELEGART_LOS,
                                                item.getI_id());

                                for (int k = 0; k < snrDtos.size(); k++) {

                                    LagerbewegungDto bewDto = getLagerFac().getLetzteintrag(LocaleFac.BELEGART_LOS,
                                            item.getI_id(), snrDtos.get(k).getCSeriennrChargennr());
                                    tsBuchungszeit = bewDto.getTBuchungszeit();
                                    break;
                                }

                                if (tsBuchungszeit.after(tStichtag)) {
                                    continue;
                                }

                            }

                            if (Helper.short2boolean(item.getB_abgang()) == true) {
                                istmenge = istmenge.add(item.getN_menge());
                            } else {
                                istmenge = istmenge.subtract(item.getN_menge());
                            }
                        }
                        losStatistikDto.setIstmenge(istmenge);

                        al.add(losStatistikDto);
                    }
                }
                session2.close();

                LossollarbeitsplanDto[] lossollarbeitsplanDtos = getFertigungFac()
                        .lossollarbeitsplanFindByLosIId(los.getI_id());
                // PJ14351 Nach AG sortieren
                if (bArbeitsplanSortiertNachAG == true) {

                    // Nach Fertigungsgruppe sortieren
                    for (int k = lossollarbeitsplanDtos.length - 1; k > 0; --k) {
                        for (int j = 0; j < k; ++j) {
                            Integer a1 = lossollarbeitsplanDtos[j].getIArbeitsgangnummer();
                            Integer a2 = lossollarbeitsplanDtos[j + 1].getIArbeitsgangnummer();
                            if (a1.intValue() > a2.intValue()) {
                                LossollarbeitsplanDto temp = lossollarbeitsplanDtos[j];
                                lossollarbeitsplanDtos[j] = lossollarbeitsplanDtos[j + 1];
                                lossollarbeitsplanDtos[j + 1] = temp;
                            }
                        }
                    }
                }

                ArrayList<LosStatistikDto> hmSoll = new ArrayList<LosStatistikDto>();

                // Zuerst Maschinenzeiten
                for (int i = 0; i < lossollarbeitsplanDtos.length; i++) {
                    if (lossollarbeitsplanDtos[i].getMaschineIId() != null) {
                        Integer artikelIId = lossollarbeitsplanDtos[i].getArtikelIIdTaetigkeit();
                        BigDecimal sollzeit = lossollarbeitsplanDtos[i].getNGesamtzeit();
                        ArtikelDto artikelDto = getArtikelFac().artikelFindByPrimaryKeySmall(artikelIId,
                                theClientDto);

                        // Schon vorhanden?
                        boolean bGefunden = false;
                        for (int j = 0; j < hmSoll.size(); j++) {
                            LosStatistikDto losStatistikDto = (LosStatistikDto) hmSoll.get(j);
                            if (losStatistikDto.getArtikelnummer().equals(artikelDto.getCNr())) {
                                if (lossollarbeitsplanDtos[i].getMaschineIId()
                                        .equals(losStatistikDto.getMaschineIId())) {
                                    losStatistikDto.setSollmenge(losStatistikDto.getSollmenge().add(sollzeit));
                                    bGefunden = true;
                                    hmSoll.set(j, losStatistikDto);
                                }
                            }
                        }
                        if (!bGefunden) {
                            LosStatistikDto losStatistikMaschineDto = new LosStatistikDto(losDto);
                            losStatistikMaschineDto.setArtikelnummer(artikelDto.getCNr());
                            losStatistikMaschineDto.setArtikelbezeichnung(artikelDto.formatBezeichnung());
                            losStatistikMaschineDto.setSollmenge(sollzeit);
                            losStatistikMaschineDto.setBMaterial(false);
                            losStatistikMaschineDto.setBIstPerson(false);

                            losStatistikMaschineDto.setAbgelieferteMenge(abgeliefert);
                            losStatistikMaschineDto.setVkpreisStueckliste(vkPreis);

                            losStatistikMaschineDto.setSollpreis(getZeiterfassungFac()
                                    .getMaschinenKostenZumZeitpunkt(lossollarbeitsplanDtos[i].getMaschineIId(),
                                            Helper.cutTimestamp(new Timestamp(System.currentTimeMillis()))));
                            MaschineDto maschineDto = getZeiterfassungFac()
                                    .maschineFindByPrimaryKey(lossollarbeitsplanDtos[i].getMaschineIId());

                            String maschinenname = "M:";
                            if (maschineDto.getCIdentifikationsnr() != null) {
                                maschinenname += maschineDto.getCIdentifikationsnr() + " ";
                            }
                            maschinenname += maschineDto.getCBez();

                            losStatistikMaschineDto.setPersonMaschine(maschinenname);
                            losStatistikMaschineDto.setMaschineIId(maschineDto.getIId());

                            hmSoll.add(losStatistikMaschineDto);
                        }
                    }
                }
                // Dann Personalzeiten
                for (int i = 0; i < lossollarbeitsplanDtos.length; i++) {

                    if (!Helper.short2boolean(lossollarbeitsplanDtos[i].getBNurmaschinenzeit())) {

                        Integer artikelIId = lossollarbeitsplanDtos[i].getArtikelIIdTaetigkeit();
                        BigDecimal sollzeit = lossollarbeitsplanDtos[i].getNGesamtzeit();
                        ArtikelDto artikelDto = getArtikelFac().artikelFindByPrimaryKeySmall(artikelIId,
                                theClientDto);

                        // Schon vorhanden?
                        boolean bGefunden = false;
                        for (int j = 0; j < hmSoll.size(); j++) {
                            LosStatistikDto losStatistikDto = (LosStatistikDto) hmSoll.get(j);
                            if (losStatistikDto.getArtikelnummer().equals(artikelDto.getCNr())) {

                                if (losStatistikDto.getMaschineIId() == null) {
                                    losStatistikDto.setSollmenge(losStatistikDto.getSollmenge().add(sollzeit));
                                    hmSoll.set(j, losStatistikDto);
                                    bGefunden = true;
                                }

                            }

                        }

                        if (!bGefunden) {
                            LosStatistikDto losStatistikDto = new LosStatistikDto(losDto);
                            losStatistikDto.setArtikelnummer(artikelDto.getCNr());
                            losStatistikDto.setArtikelbezeichnung(artikelDto.formatBezeichnung());
                            losStatistikDto.setSollmenge(sollzeit);
                            losStatistikDto.setBMaterial(false);
                            losStatistikDto.setBIstPerson(true);
                            losStatistikDto.setAbgelieferteMenge(abgeliefert);
                            losStatistikDto.setVkpreisStueckliste(vkPreis);
                            ArtikellieferantDto artikellieferantDto = getArtikelFac().getArtikelEinkaufspreis(
                                    artikelDto.getIId(), new BigDecimal(1), theClientDto.getSMandantenwaehrung(),
                                    theClientDto);
                            if (artikellieferantDto != null && artikellieferantDto.getLief1Preis() != null) {
                                losStatistikDto.setSollpreis(artikellieferantDto.getLief1Preis());
                            } else {
                                losStatistikDto.setSollpreis(new BigDecimal(0));
                            }
                            hmSoll.add(losStatistikDto);

                        }
                    }
                }
                // Dann Zeiten

                AuftragzeitenDto[] maschinenzeitenDtos = getZeiterfassungFac()
                        .getAllMaschinenzeitenEinesBeleges(los.getI_id(), null, null, tStichtag, theClientDto);

                AuftragzeitenDto[] personalzeitenDtos = getZeiterfassungFac().getAllZeitenEinesBeleges(
                        LocaleFac.BELEGART_LOS, los.getI_id(), null, null, null, tStichtag, true, false,
                        theClientDto);

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

                    boolean bGefunden = false;
                    for (int j = 0; j < hmSoll.size(); j++) {
                        LosStatistikDto losStatistikDto = (LosStatistikDto) hmSoll.get(j);

                        if (losStatistikDto.getMaschineIId() == null) {

                            if (losStatistikDto.getArtikelnummer().equals(personalzeitenDtos[i].getSArtikelcnr())) {
                                bGefunden = true;

                            }
                        }
                    }

                    if (bGefunden == false) {
                        LosStatistikDto losStatistikDto = new LosStatistikDto(losDto);
                        losStatistikDto.setArtikelnummer(personalzeitenDtos[i].getSArtikelcnr());
                        losStatistikDto.setArtikelbezeichnung(personalzeitenDtos[i].getSArtikelbezeichnung());
                        losStatistikDto.setSollmenge(new BigDecimal(0));
                        losStatistikDto.setSollpreis(new BigDecimal(0));
                        losStatistikDto.setAbgelieferteMenge(abgeliefert);
                        losStatistikDto.setVkpreisStueckliste(vkPreis);
                        hmSoll.add(losStatistikDto);

                    }
                }

                for (int i = 0; i < maschinenzeitenDtos.length; i++) {
                    boolean bGefunden = false;

                    if (tStichtag != null && maschinenzeitenDtos[i].getTsEnde() != null
                            && tStichtag.before(maschinenzeitenDtos[i].getTsEnde())) {
                        continue;
                    }

                    for (int j = 0; j < hmSoll.size(); j++) {
                        LosStatistikDto losStatistikDto = (LosStatistikDto) hmSoll.get(j);

                        if (losStatistikDto.getMaschineIId() != null && losStatistikDto.getMaschineIId()
                                .equals(maschinenzeitenDtos[i].getIPersonalMaschinenId())) {

                            if (losStatistikDto.getArtikelnummer()
                                    .equals(maschinenzeitenDtos[i].getSArtikelcnr())) {
                                bGefunden = true;

                            }
                        }
                    }

                    if (bGefunden == false) {
                        LosStatistikDto losStatistikDto = new LosStatistikDto(losDto);
                        losStatistikDto.setArtikelnummer(maschinenzeitenDtos[i].getSArtikelcnr());
                        losStatistikDto.setArtikelbezeichnung(maschinenzeitenDtos[i].getSArtikelbezeichnung());
                        losStatistikDto.setMaschineIId(maschinenzeitenDtos[i].getIPersonalMaschinenId());
                        losStatistikDto.setSollmenge(new BigDecimal(0));
                        losStatistikDto.setSollpreis(new BigDecimal(0));
                        losStatistikDto.setAbgelieferteMenge(abgeliefert);
                        losStatistikDto.setVkpreisStueckliste(vkPreis);

                        hmSoll.add(losStatistikDto);

                    }

                }

                for (int k = 0; k < hmSoll.size(); k++) {
                    LosStatistikDto losStatistikDto = (LosStatistikDto) hmSoll.get(k);

                    losStatistikDto.setAbgelieferteMenge(abgeliefert);

                    int iPos = al.size();
                    al.add(losStatistikDto);
                    // Personen
                    if (losStatistikDto.getMaschineIId() == null) {
                        for (int i = 0; i < personalDtos.length; i++) {
                            PersonalDto personalDto = personalDtos[i];

                            BigDecimal bdgesamtzeit = new BigDecimal(0);
                            BigDecimal bdgesamtkosten = new BigDecimal(0);
                            String person = "";
                            for (int j = 0; j < personalzeitenDtos.length; j++) {
                                AuftragzeitenDto azDto = personalzeitenDtos[j];
                                if (azDto != null) {
                                    if (personalDto.getIId().equals(azDto.getIPersonalMaschinenId())
                                            && azDto.getSArtikelcnr().equals(losStatistikDto.getArtikelnummer())) {
                                        bdgesamtzeit = bdgesamtzeit.add(new BigDecimal(azDto.getDdDauer()));
                                        bdgesamtkosten = bdgesamtkosten.add(azDto.getBdKosten());
                                        person = azDto.getSPersonalMaschinenname();
                                        personalzeitenDtos[j] = null;
                                    }
                                }
                            }
                            if (bdgesamtzeit.doubleValue() != 0 || bdgesamtkosten.doubleValue() != 0) {

                                LosStatistikDto losStatistikPersonDto = new LosStatistikDto(losDto);
                                losStatistikPersonDto.setPersonMaschine(person);
                                losStatistikPersonDto.setBMaterial(false);
                                losStatistikPersonDto.setAbgelieferteMenge(abgeliefert);
                                losStatistikPersonDto.setVkpreisStueckliste(vkPreis);

                                losStatistikPersonDto.setIstmenge(bdgesamtzeit);
                                if (bdgesamtzeit.doubleValue() != 0) {
                                    losStatistikPersonDto.setIstpreis(
                                            bdgesamtkosten.divide(bdgesamtzeit, 4, BigDecimal.ROUND_HALF_EVEN));
                                } else {
                                    losStatistikPersonDto.setIstpreis(new BigDecimal(0));
                                }
                                al.add(losStatistikPersonDto);

                            }

                        }
                    }
                    // Maschinen
                    if (losStatistikDto.getMaschineIId() != null) {
                        for (int i = 0; i < maschineDtos.length; i++) {
                            MaschineDto maschineDto = maschineDtos[i];

                            BigDecimal bdgesamtzeit = new BigDecimal(0);
                            BigDecimal bdgesamtkosten = new BigDecimal(0);
                            for (int j = 0; j < maschinenzeitenDtos.length; j++) {

                                if (tStichtag != null && maschinenzeitenDtos[j].getTsEnde() != null
                                        && tStichtag.before(maschinenzeitenDtos[j].getTsEnde())) {
                                    continue;
                                }

                                AuftragzeitenDto azDto = maschinenzeitenDtos[j];
                                if (maschineDto.getIId().equals(azDto.getIPersonalMaschinenId())
                                        && azDto.getSArtikelcnr().equals(losStatistikDto.getArtikelnummer())) {
                                    if (losStatistikDto.getMaschineIId().equals(azDto.getIPersonalMaschinenId())) {
                                        bdgesamtzeit = bdgesamtzeit.add(new BigDecimal(azDto.getDdDauer()));
                                        bdgesamtkosten = bdgesamtkosten.add(azDto.getBdKosten());
                                    }

                                }
                            }
                            if (bdgesamtzeit.doubleValue() != 0 || bdgesamtkosten.doubleValue() != 0) {

                                BigDecimal kosten = bdgesamtkosten.divide(bdgesamtzeit, 4,
                                        BigDecimal.ROUND_HALF_EVEN);

                                if (losStatistikDto.getIstmenge() != null) {
                                    losStatistikDto.setIstmenge(losStatistikDto.getIstmenge().add(bdgesamtzeit));
                                } else {
                                    losStatistikDto.setIstmenge(bdgesamtzeit);
                                }

                                if (losStatistikDto.getIstpreis() != null) {
                                    losStatistikDto.setIstpreis(losStatistikDto.getIstpreis().add(kosten));
                                } else {
                                    losStatistikDto.setIstpreis(kosten);
                                }
                                al.set(iPos, losStatistikDto);
                            }

                        }
                    }
                }

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

        }
        session.close();

        data = new Object[al.size()][23];
        for (int i = 0; i < al.size(); i++) {
            LosStatistikDto losStatistikDto = (LosStatistikDto) al.get(i);
            data[i][LOSSTATISTIK_GRUPPIERUNG] = losStatistikDto.getLosDto().getCNr();

            if (losStatistikDto.getLosDto().getTManuellerledigt() != null) {
                data[i][LOSSTATISTIK_ERLEDIGUNGSDATUM] = losStatistikDto.getLosDto().getTManuellerledigt();
            } else {
                data[i][LOSSTATISTIK_ERLEDIGUNGSDATUM] = losStatistikDto.getLosDto().getTErledigt();
            }

            data[i][LOSSTATISTIK_BEWERTUNG] = losStatistikDto.getLosDto().getFBewertung();
            data[i][LOSSTATISTIK_GEPLANTESSOLLMATERIAL] = losStatistikDto.getLosDto().getNSollmaterial();
            data[i][LOSSTATISTIK_GRUPPIERUNGBEZEICHNUNG] = losStatistikDto.getLosDto().getCProjekt();
            data[i][LOSSTATISTIK_GRUPPIERUNGERLEDIGT] = losStatistikDto.getLosDto().getTErledigt();
            data[i][LOSSTATISTIK_GRUPPIERUNGAUSGABE] = losStatistikDto.getLosDto().getTAusgabe();
            data[i][LOSSTATISTIK_GRUPPIERUNABGELIEFERTEMENGE] = losStatistikDto.getAbgelieferteMenge();
            data[i][LOSSTATISTIK_GRUPPIERUNGLOSGROESSE] = losStatistikDto.getLosDto().getNLosgroesse();
            data[i][LOSSTATISTIK_GRUPPIERUNVKPREIS] = losStatistikDto.getVkpreisStueckliste();
            data[i][LOSSTATISTIK_BUCHUNGSZEIT] = losStatistikDto.getBuchungszeit();

            if (losStatistikDto.getLosDto().getStuecklisteIId() != null) {
                data[i][LOSSTATISTIK_GRUPPIERUNGSTKLARTIKEL] = getStuecklisteFac()
                        .stuecklisteFindByPrimaryKey(losStatistikDto.getLosDto().getStuecklisteIId(), theClientDto)
                        .getArtikelDto().formatArtikelbezeichnung();
            }

            if (losStatistikDto.getLosDto().getAuftragIId() != null) {
                AuftragDto auftragDto = getAuftragFac()
                        .auftragFindByPrimaryKey(losStatistikDto.getLosDto().getAuftragIId());
                if (auftragDto.getKundeIIdAuftragsadresse() != null) {
                    KundeDto kundeDto = getKundeFac().kundeFindByPrimaryKey(auftragDto.getKundeIIdAuftragsadresse(),
                            theClientDto);
                    data[i][LOSSTATISTIK_GRUPPIERUNGKUNDE] = kundeDto.getPartnerDto().formatAnrede();
                }
            }

            data[i][LOSSTATISTIK_ISTMENGE] = losStatistikDto.getIstmenge();
            data[i][LOSSTATISTIK_ISTPREIS] = losStatistikDto.getIstpreis();
            data[i][LOSSTATISTIK_PERSONALMASCHINE] = losStatistikDto.getPersonMaschine();
            data[i][LOSSTATISTIK_ISTPERSON] = new Boolean(losStatistikDto.isBIstPerson());
            data[i][LOSSTATISTIK_SOLLMENGE] = losStatistikDto.getSollmenge();
            data[i][LOSSTATISTIK_SOLLPREIS] = losStatistikDto.getSollpreis();
            data[i][LOSSTATISTIK_ARTIKELNUMMER] = losStatistikDto.getArtikelnummer();
            data[i][LOSSTATISTIK_ARTIKELBEZEICHNUNG] = losStatistikDto.getArtikelbezeichnung();
            data[i][LOSSTATISTIK_UNTERGRUPPEMATERIAL] = new Boolean(losStatistikDto.isBMaterial());
        }

        initJRDS(mapParameter, FertigungReportFac.REPORT_MODUL, FertigungReportFac.REPORT_LOSSTATISTIK,
                theClientDto.getMandant(), theClientDto.getLocUi(), theClientDto);
        return getReportPrint();
    }

    @TransactionAttribute(TransactionAttributeType.NEVER)
    public JasperPrintLP printAblieferungsstatistik(java.sql.Date dVon, java.sql.Date dBis, Integer artikelIId,
            boolean bSortiertNachArtikel, boolean bVerdichtetNachArtikel, TheClientDto theClientDto)
            throws EJBExceptionLP {
        Session session = null;
        try {

            Map<String, Object> mapParameter = new TreeMap<String, Object>();

            this.useCase = UC_ABLIEFERUNGSSTATISTIK;
            this.index = -1;
            SessionFactory factory = FLRSessionFactory.getFactory();
            session = factory.openSession();
            Criteria c = session.createCriteria(FLRLosablieferung.class);
            if (dVon != null) {
                dVon = Helper.cutDate(dVon);

                c.add(Restrictions.ge(FertigungFac.FLR_LOSABLIEFERUNG_T_AENDERN, dVon));

                mapParameter.put("P_VON", new Timestamp(dVon.getTime()));

            }
            if (dBis != null) {

                c.add(Restrictions.lt(FertigungFac.FLR_LOSABLIEFERUNG_T_AENDERN,
                        Helper.cutTimestamp(new Timestamp(dBis.getTime() + 24 * 3600000))));

                mapParameter.put("P_BIS", new Timestamp(dBis.getTime()));

            }
            Criteria cLos = c.createCriteria(FertigungFac.FLR_LOSABLIEFERUNG_FLRLOS);
            // Filter nach Mandant
            cLos.add(Restrictions.eq(FertigungFac.FLR_LOS_MANDANT_C_NR, theClientDto.getMandant()));

            Criteria cStueckliste = cLos.createCriteria(FertigungFac.FLR_LOS_FLRSTUECKLISTE);
            Criteria cArtikel = cStueckliste.createCriteria(StuecklisteFac.FLR_STUECKLISTE_FLRARTIKEL);
            if (artikelIId != null) {
                cArtikel.add(Restrictions.eq("i_id", artikelIId));
            }

            mapParameter.put("P_VERDICHTET", new Boolean(bVerdichtetNachArtikel));

            if (bSortiertNachArtikel) {
                cArtikel.addOrder(Order.asc("c_nr"));
                mapParameter.put(LPReport.P_SORTIERUNG, getTextRespectUISpr("artikel.artikelnummerlang",
                        theClientDto.getMandant(), theClientDto.getLocUi()));
            } else {

                mapParameter.put(LPReport.P_SORTIERUNG, getTextRespectUISpr("fert.ablieferdatum",
                        theClientDto.getMandant(), theClientDto.getLocUi()));
            }

            c.addOrder(Order.desc(FertigungFac.FLR_LOSABLIEFERUNG_T_AENDERN));

            List<?> list = c.list();
            data = new Object[list.size()][10];
            int i = 0;
            for (Iterator<?> iter = list.iterator(); iter.hasNext(); i++) {
                FLRLosablieferung losab = (FLRLosablieferung) iter.next();
                ArtikelDto artikelDto = getArtikelFac().artikelFindByPrimaryKeySmall(
                        losab.getFlrlos().getFlrstueckliste().getFlrartikel().getI_id(), theClientDto);
                data[i][ABLIEF_LOSNUMMER] = losab.getFlrlos().getC_nr();
                data[i][ABLIEF_IDENT] = artikelDto.getCNr();
                data[i][ABLIEF_BEZEICHNUNG] = artikelDto.getArtikelsprDto().getCBez();
                if (artikelDto.getArtikelsprDto().getCZbez() != null) {
                    data[i][ABLIEF_ZUSATZBEZEICHNUNG] = artikelDto.getArtikelsprDto().getCZbez();
                } else {
                    data[i][ABLIEF_ZUSATZBEZEICHNUNG] = "";
                }
                data[i][ABLIEF_DATUM] = losab.getT_aendern();
                data[i][ABLIEF_MENGE] = losab.getN_menge();
                data[i][ABLIEF_ABLIEFERPREIS] = losab.getN_gestehungspreis();
                data[i][ABLIEF_MATERIALWERT] = losab.getN_materialwert();
                data[i][ABLIEF_ARBEITSZEITWERT] = losab.getN_arbeitszeitwert();
                data[i][ABLIEF_WERT] = losab.getN_gestehungspreis().multiply(losab.getN_menge());
            }

            initJRDS(mapParameter, FertigungReportFac.REPORT_MODUL, FertigungReportFac.REPORT_ABLIEFERUNGSSTATISTIK,
                    theClientDto.getMandant(), theClientDto.getLocUi(), theClientDto);
            return getReportPrint();
        } catch (Exception t) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER, t);
        } finally {
            closeSession(session);
        }
    }

    @TransactionAttribute(TransactionAttributeType.NEVER)
    public JasperPrintLP printAufloesbareFehlmengen(Integer iSortierung, Boolean bNurArtikelMitLagerstand,
            Boolean bOhneEigengefertigteArtikel, TheClientDto theClientDto) {
        Session session = null;
        try {

            this.useCase = UC_AUFLOESBARE_FEHLMENGEN;
            this.index = -1;
            SessionFactory factory = FLRSessionFactory.getFactory();
            session = factory.openSession();
            Criteria c = session.createCriteria(FLRFehlmenge.class);
            c.createCriteria(ArtikelFac.FLR_FEHLMENGE_FLRLOSSOLLMATERIAL)
                    .createCriteria(FertigungFac.FLR_LOSSOLLMATERIAL_FLRLOS)
                    .add(Restrictions.eq(FertigungFac.FLR_LOS_MANDANT_C_NR, theClientDto.getMandant()));
            // c.add(Restrictions.eq("artikel_i_id",9223));
            List<?> list = c.list();
            int i = 0;
            LinkedList<ReportAufloesbareFehlmengenDto> cData = new LinkedList<ReportAufloesbareFehlmengenDto>();

            HashMap<Integer, String> hmVorhandeneBestelltEintraege = new HashMap<Integer, String>();

            for (Iterator<?> iter = list.iterator(); iter.hasNext(); i++) {
                FLRFehlmenge fm = (FLRFehlmenge) iter.next();

                boolean bDatensatzVerwenden = true;
                // gleich den Lagerstand holen
                BigDecimal bdLagerstand = getLagerFac().getLagerstandAllerLagerEinesMandanten(fm.getArtikel_i_id(),
                        theClientDto);

                if (bNurArtikelMitLagerstand.booleanValue()) {
                    // vorher Lagerstand pruefen
                    if (bdLagerstand.compareTo(new BigDecimal(0)) <= 0) {
                        bDatensatzVerwenden = false;
                    }
                }

                if (bDatensatzVerwenden) {

                    if (bOhneEigengefertigteArtikel == true) {
                        StuecklisteDto stklDto = getStuecklisteFac()
                                .stuecklisteFindByMandantCNrArtikelIIdOhneExc(fm.getArtikel_i_id(), theClientDto);

                        if (stklDto != null) {
                            if (!Helper.short2boolean(stklDto.getBFremdfertigung())) {
                                continue;
                            }
                        }
                    }
                    ReportAufloesbareFehlmengenDto rep = new ReportAufloesbareFehlmengenDto();
                    rep.setBdFehlmenge(fm.getN_menge());
                    rep.setBdLagerstand(bdLagerstand);
                    rep.setBdBestellt(getArtikelbestelltFac().getAnzahlBestellt(fm.getArtikel_i_id()));
                    rep.setBLos(true);
                    rep.setBdReserviert(
                            getReservierungFac().getAnzahlReservierungen(fm.getArtikel_i_id(), theClientDto));
                    rep.setDTermin(fm.getT_liefertermin());
                    ArtikelDto artikelDto = getArtikelFac().artikelFindByPrimaryKeySmall(fm.getArtikel_i_id(),
                            theClientDto);
                    rep.setSArtikelBezeichnung(artikelDto.getArtikelsprDto().getCBez());
                    rep.setSArtikelZusatzBezeichnung(artikelDto.getArtikelsprDto().getCZbez());
                    rep.setSArtikelNummer(artikelDto.getCNr());
                    rep.setIArtikelIId(artikelDto.getIId());
                    rep.setSEinheit(artikelDto.getEinheitCNr());
                    rep.setSBelegnummer("ALO" + fm.getFlrlossollmaterial().getFlrlos().getC_nr());
                    rep.setSProjekt(fm.getFlrlossollmaterial().getFlrlos().getC_projekt());
                    if (fm.getFlrlossollmaterial().getFlrlos().getFlrstueckliste() != null) {
                        ArtikelDto artikelDtoStueckliste = getArtikelFac().artikelFindByPrimaryKeySmall(fm
                                .getFlrlossollmaterial().getFlrlos().getFlrstueckliste().getFlrartikel().getI_id(),
                                theClientDto);
                        rep.setSStuecklisteBezeichnung(artikelDtoStueckliste.getArtikelsprDto().getCBez());
                        rep.setSStuecklisteZusatzBezeichnung(artikelDtoStueckliste.getArtikelsprDto().getCZbez());
                        rep.setSStuecklisteNummer(artikelDtoStueckliste.getCNr());
                    }
                    cData.add(rep);

                    if (!hmVorhandeneBestelltEintraege.containsKey(fm.getArtikel_i_id())) {

                        // HQL
                        Session session2 = factory.openSession();

                        String query = "SELECT a.n_menge, a.c_belegartnr, a.i_belegartpositionid FROM FLRArtikelbestellt a WHERE a.flrartikel.i_id="
                                + fm.getArtikel_i_id();

                        Query qResult = session.createQuery(query);
                        // qResult.setMaxResults(50);

                        List<?> results = qResult.list();
                        Iterator<?> it2 = results.iterator();
                        while (it2.hasNext()) {
                            Object[] o = (Object[]) it2.next();

                            rep = new ReportAufloesbareFehlmengenDto();
                            rep.setSArtikelBezeichnung(artikelDto.getArtikelsprDto().getCBez());
                            rep.setSArtikelZusatzBezeichnung(artikelDto.getArtikelsprDto().getCZbez());
                            rep.setSArtikelNummer(artikelDto.getCNr());
                            rep.setIArtikelIId(artikelDto.getIId());
                            rep.setSEinheit(artikelDto.getEinheitCNr());
                            rep.setBLos(false);

                            BestellpositionDto dto = getBestellpositionFac()
                                    .bestellpositionFindByPrimaryKeyOhneExc((Integer) o[2]);
                            if (dto != null) {
                                BestellungDto bestellungDto = getBestellungFac()
                                        .bestellungFindByPrimaryKey(dto.getBelegIId());
                                if (dto.getTAuftragsbestaetigungstermin() != null) {
                                    rep.setDTermin(dto.getTAuftragsbestaetigungstermin());
                                } else if (dto.getTUebersteuerterLiefertermin() != null) {
                                    rep.setDTermin(dto.getTUebersteuerterLiefertermin());
                                } else if (bestellungDto.getDLiefertermin() != null) {
                                    rep.setDTermin(bestellungDto.getDLiefertermin());
                                }
                                rep.setSBelegnummer("BBS" + bestellungDto.getCNr());
                                rep.setBdOffen((BigDecimal) o[0]);
                                rep.setSABNummer(dto.getCABNummer());

                                BSMahnungDto[] dtos = getBSMahnwesenFac().bsmahnungFindByBestellungIId(dto.getIId(),
                                        theClientDto);
                                if (dtos.length > 0) {
                                    rep.setIMahnstufe(dtos[0].getMahnstufeIId());
                                }

                            } else {
                                rep.setSBelegnummer("BS not found");
                            }

                            cData.add(rep);

                        }
                        hmVorhandeneBestelltEintraege.put(fm.getArtikel_i_id(), "");
                        closeSession(session2);
                    }
                }
            }
            Collections.sort(cData, new ComparatorAufloesbareFehlmengen(iSortierung.intValue()));
            data = new Object[cData.size()][AFM_SPALTENANZAHL];
            i = 0;
            for (Iterator<ReportAufloesbareFehlmengenDto> iter = cData.iterator(); iter.hasNext(); i++) {
                ReportAufloesbareFehlmengenDto rep = (ReportAufloesbareFehlmengenDto) iter.next();
                data[i][AFM_ARTIKELBEZEICHNUNG] = rep.getSArtikelBezeichnung();
                data[i][AFM_ARTIKELZUSATZBEZEICHNUNG] = rep.getSArtikelZusatzBezeichnung();
                data[i][AFM_ARTIKELNUMMER] = rep.getSArtikelNummer();
                data[i][AFM_EINHEIT] = rep.getSEinheit();
                data[i][AFM_FEHLMENGE] = rep.getBdFehlmenge();
                data[i][AFM_LAGERSTAND] = rep.getBdLagerstand();
                data[i][AFM_BELEGNUMMER] = rep.getSBelegnummer().substring(1);
                data[i][AFM_BESTELLT] = rep.getBdBestellt();
                data[i][AFM_RESERVIERT] = rep.getBdReserviert();
                data[i][AFM_PROJEKT] = rep.getSProjekt();
                data[i][AFM_OFFEN] = rep.getBdOffen();
                data[i][AFM_MAHNSTUFE] = rep.getIMahnstufe();
                data[i][AFM_ABNUMMER] = rep.getSABNummer();
                data[i][AFM_STUECKLISTEBEZEICHNUNG] = rep.getSStuecklisteBezeichnung();
                data[i][AFM_STUECKLISTEZUSATZBEZEICHNUNG] = rep.getSStuecklisteZusatzBezeichnung();
                data[i][AFM_STUECKLISTENUMMER] = rep.getSStuecklisteNummer();
                data[i][AFM_TERMIN] = rep.getDTermin();
                BigDecimal bdFiktiverLagerstand = null;
                if (rep.getBdLagerstand() == null) {
                    bdFiktiverLagerstand = new BigDecimal(0);
                } else {
                    bdFiktiverLagerstand = rep.getBdLagerstand();
                }
                for (int y = 0; y < cData.size(); y++) {
                    ReportAufloesbareFehlmengenDto rafHelper = cData.get(y);
                    if (rafHelper.isBLos() && rep.isBLos()) {
                        if (rafHelper.getIArtikelIId().equals(rep.getIArtikelIId())
                                && (rafHelper.getDTermin().before(rep.getDTermin())
                                        || rafHelper.getDTermin().equals(rep.getDTermin()))) {
                            if (rafHelper.getDTermin().equals(rep.getDTermin())) {
                                if (i >= y) {
                                    bdFiktiverLagerstand = bdFiktiverLagerstand
                                            .subtract(rafHelper.getBdFehlmenge() == null ? new BigDecimal(0)
                                                    : rafHelper.getBdFehlmenge());
                                }
                            } else {
                                bdFiktiverLagerstand = bdFiktiverLagerstand
                                        .subtract(rafHelper.getBdFehlmenge() == null ? new BigDecimal(0)
                                                : rafHelper.getBdFehlmenge());
                            }
                        }
                    }
                }
                data[i][AFM_FIKTIVERLAGERSTAND] = bdFiktiverLagerstand;
            }
            Map<String, Object> mapParameter = new TreeMap<String, Object>();
            String sSortierung = null;
            boolean bSortiertNachArtikelnummer = false;
            if (iSortierung.intValue() == Helper.SORTIERUNG_NACH_IDENT) {
                sSortierung = "Sortiert nach Artikelnummer";
                bSortiertNachArtikelnummer = true;

            } else if (iSortierung.intValue() == Helper.SORTIERUNG_NACH_LOSNUMMER) {
                sSortierung = "Sortiert nach Losnummer";
            }
            mapParameter.put("P_SORTIERTNACHARTIKELNUMMER", bSortiertNachArtikelnummer);
            mapParameter.put(P_SORTIERUNG, sSortierung);
            String sFilter = null;
            if (bNurArtikelMitLagerstand.booleanValue()) {
                sFilter = "Nur Artikel mit Lagerstand";
            }
            mapParameter.put(P_FILTER, sFilter);

            mapParameter.put("P_OHNEEIGENGEFERTIGTEARTIKEL", bOhneEigengefertigteArtikel);

            initJRDS(mapParameter, FertigungReportFac.REPORT_MODUL,
                    FertigungReportFac.REPORT_AUFLOESBARE_FEHLMENGEN, theClientDto.getMandant(),
                    theClientDto.getLocUi(), theClientDto);
            return getReportPrint();
        } catch (RemoteException ex) {
            throwEJBExceptionLPRespectOld(ex);
            return null;
        } finally {
            closeSession(session);
        }
    }

    private ArrayList befuelleFehlteillisteMitLossollmaterialDto(int iEbene, LosDto losDto,
            LoslagerentnahmeDto[] lolaeDtos, LossollmaterialDto sollmaterialDto, ArrayList alDaten,
            TheClientDto theClientDto) {

        try {
            Object[] oZeile = new Object[FT_ANZAHL_SPALTEN];
            oZeile[FT_AUSGEGEBEN] = getFertigungFac().getAusgegebeneMenge(sollmaterialDto.getIId(), null,
                    theClientDto);

            oZeile[FT_SOLLMENGE] = sollmaterialDto.getNMenge();

            ArtikelDto artikelDto = getArtikelFac().artikelFindByPrimaryKeySmall(sollmaterialDto.getArtikelIId(),
                    theClientDto);

            // Lagerstand
            BigDecimal lagerstand = new BigDecimal(0);

            if (Helper.short2boolean(artikelDto.getBLagerbewirtschaftet())) {

                for (int i = 0; i < lolaeDtos.length; i++) {
                    BigDecimal lagerstandEisneLagers = getLagerFac().getLagerstandOhneExc(
                            sollmaterialDto.getArtikelIId(), lolaeDtos[i].getLagerIId(), theClientDto);
                    if (lagerstandEisneLagers != null) {
                        lagerstand = lagerstand.add(lagerstandEisneLagers);
                    }
                }
            } else {
                lagerstand = new BigDecimal(99999999);
            }
            oZeile[FT_LAGERSTAND] = lagerstand;

            String einrueckung = "";
            for (int i = 0; i < iEbene; i++) {
                einrueckung = einrueckung + "   ";
            }

            oZeile[FT_ARTIKELNUMMER] = einrueckung + artikelDto.getCNr();

            if (artikelDto.getArtikelsprDto() != null) {
                oZeile[FT_BEZEICHNUNG] = artikelDto.getArtikelsprDto().getCBez();
            }

            BigDecimal fehlmenge = new BigDecimal(0);

            ArtikelfehlmengeDto fmDto = getFehlmengeFac()
                    .artikelfehlmengeFindByBelegartCNrBelegartPositionIIdOhneExc(LocaleFac.BELEGART_LOS,
                            sollmaterialDto.getIId());
            if (fmDto != null && fmDto.getNMenge() != null) {
                fehlmenge = fmDto.getNMenge();
            }
            oZeile[FT_FEHLMENGE] = fehlmenge;

            if (iEbene > 0) {
                oZeile[FT_LOSNUMMER] = losDto.getCNr();
                oZeile[FT_LOSGROESSE] = losDto.getNLosgroesse();
                oZeile[FT_LOSSTATUS] = losDto.getStatusCNr();
                oZeile[FT_ABGELIEFERT] = getFertigungFac().getErledigteMenge(losDto.getIId(), theClientDto);
                oZeile[FT_EBENE] = new Integer(iEbene);
            }

            // Nachsehen,ob Stueckliste
            StuecklisteDto stklDto = getStuecklisteFac()
                    .stuecklisteFindByMandantCNrArtikelIIdOhneExc(sollmaterialDto.getArtikelIId(), theClientDto);

            if (stklDto != null) {
                oZeile[FT_STUECKLISTENART] = new Boolean(true);
            } else {
                oZeile[FT_STUECKLISTENART] = new Boolean(false);
            }

            alDaten.add(oZeile);

            if (stklDto != null) {
                // Offene Lose holen
                ArrayList<LosDto> lose = getFertigungFac().getLoseInFertigung(sollmaterialDto.getArtikelIId(),
                        theClientDto);
                iEbene++;
                for (int i = 0; i < lose.size(); i++) {
                    LossollmaterialDto[] sollmaterialDtos = getFertigungFac()
                            .lossollmaterialFindByLosIIdOrderByISort(lose.get(i).getIId());

                    for (int j = 0; j < sollmaterialDtos.length; j++) {
                        alDaten = befuelleFehlteillisteMitLossollmaterialDto(iEbene, lose.get(i), lolaeDtos,
                                sollmaterialDtos[j], alDaten, theClientDto);
                    }
                }

            }

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

        return alDaten;
    }

    @TransactionAttribute(TransactionAttributeType.NEVER)
    public JasperPrintLP printFehlteile(Integer losIId, boolean bNurPositionenMitFehlmengen,
            TheClientDto theClientDto) {
        this.useCase = UC_FEHLTEILE;

        ArrayList alDaten = new ArrayList();
        try {

            LosDto losDto = getFertigungFac().losFindByPrimaryKey(losIId);

            LoslagerentnahmeDto[] lolaeDtos = getFertigungFac().loslagerentnahmeFindByLosIId(losIId);

            LossollmaterialDto[] sollmaterialDtos = getFertigungFac().lossollmaterialFindByLosIId(losIId);

            for (int i = 0; i < sollmaterialDtos.length; i++) {
                alDaten = befuelleFehlteillisteMitLossollmaterialDto(0, losDto, lolaeDtos, sollmaterialDtos[i],
                        alDaten, theClientDto);
            }

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

            Map<String, Object> mapParameter = new TreeMap<String, Object>();

            mapParameter = parameterMitLosinformationenFuellen(losDto, mapParameter, theClientDto);

            mapParameter.put("P_NURPOSITIONENMITFEHLMENGEN", new Boolean(bNurPositionenMitFehlmengen));

            initJRDS(mapParameter, FertigungReportFac.REPORT_MODUL, FertigungReportFac.REPORT_FEHLTEILE,
                    theClientDto.getMandant(), theClientDto.getLocUi(), theClientDto);
        } catch (RemoteException e) {
            throwEJBExceptionLPRespectOld(e);
        }
        return getReportPrint();
    }

    private Map parameterMitLosinformationenFuellen(LosDto losDto, Map mapParameter, TheClientDto theClientDto) {
        try {
            mapParameter.put("P_ANGELEGT", new java.util.Date(losDto.getTAnlegen().getTime()));
            String sAuftragsnummer;
            String sInternerKommentar = null;
            String sKunde;
            String sKundeLieferadresse;
            Timestamp dLiefertermin;
            String sLieferart;
            String sAbteilung = null;
            String sSpediteur = null;
            Boolean bPoenale = Boolean.FALSE;
            Boolean bRoHs = Boolean.FALSE;
            if (losDto.getAuftragIId() != null) {
                // Auftrag holen
                AuftragDto auftragDto = getAuftragFac().auftragFindByPrimaryKey(losDto.getAuftragIId());
                sAuftragsnummer = auftragDto.getCNr();
                sLieferart = getLocaleFac().lieferartFindByIIdLocaleOhneExc(auftragDto.getLieferartIId(),
                        theClientDto.getLocUi(), theClientDto);

                if (auftragDto.getSpediteurIId() != null) {
                    sSpediteur = getMandantFac().spediteurFindByPrimaryKey(auftragDto.getSpediteurIId())
                            .getCNamedesspediteurs();
                }

                bPoenale = Helper.short2Boolean(auftragDto.getBPoenale());
                bRoHs = Helper.short2Boolean(auftragDto.getBRoHs());
                // Internen Kommentar aus dem Auftrag, abhaengig von einem
                // Mandantenparameter
                ParametermandantDto parameter = getParameterFac().getMandantparameter(theClientDto.getMandant(),
                        ParameterFac.KATEGORIE_FERTIGUNG,
                        ParameterFac.PARAMETER_KOMMENTAR_AM_FERTIGUNGSBEGLEITSCHEIN);
                short iValue = Short.parseShort(parameter.getCWert());
                boolean bDruckeKommentar = Helper.short2boolean(iValue);
                if (bDruckeKommentar) {
                    sInternerKommentar = auftragDto.getXInternerkommentar();
                }
                // Kunde holen
                KundeDto kundeDto = getKundeFac().kundeFindByPrimaryKey(auftragDto.getKundeIIdAuftragsadresse(),
                        theClientDto);

                sKunde = kundeDto.getPartnerDto().getCName1nachnamefirmazeile1();

                KundeDto kundeDtoLieferadresse = getKundeFac()
                        .kundeFindByPrimaryKey(auftragDto.getKundeIIdLieferadresse(), theClientDto);
                sKundeLieferadresse = kundeDtoLieferadresse.getPartnerDto().getCName1nachnamefirmazeile1();

                sAbteilung = kundeDto.getPartnerDto().getCName3vorname2abteilung();

                if (losDto.getAuftragpositionIId() != null) {
                    AuftragpositionDto aufposDto = getAuftragpositionFac()
                            .auftragpositionFindByPrimaryKey(losDto.getAuftragpositionIId());
                    if (aufposDto.getTUebersteuerbarerLiefertermin() != null) {
                        dLiefertermin = aufposDto.getTUebersteuerbarerLiefertermin();
                    } else {
                        dLiefertermin = auftragDto.getDLiefertermin();
                    }
                } else {
                    dLiefertermin = auftragDto.getDLiefertermin();
                }
            } else {
                sAuftragsnummer = "";
                sKunde = "";
                sKundeLieferadresse = "";
                dLiefertermin = null;
                sLieferart = "";
                sSpediteur = "";
            }

            mapParameter.put("P_AUFTRAGNUMMER", sAuftragsnummer);
            mapParameter.put("P_AUFTRAG_INTERNERKOMMENTAR", sInternerKommentar);
            mapParameter.put("P_AUFTRAG_KUNDE_ABTEILUNG", sAbteilung);
            mapParameter.put("P_LIEFERART", sLieferart);
            mapParameter.put("P_SPEDITEUR", sSpediteur);
            mapParameter.put("P_POENALE", bPoenale);
            mapParameter.put("P_ROHS", bRoHs);
            KostenstelleDto kstDto = getSystemFac().kostenstelleFindByPrimaryKey(losDto.getKostenstelleIId());
            mapParameter.put("P_KOSTENSTELLENUMMER", kstDto.getCNr());
            mapParameter.put("P_KUNDE", sKunde);
            mapParameter.put("P_KUNDE_LIEFERADRESSE", sKundeLieferadresse);
            mapParameter.put("P_LOSGROESSE", losDto.getNLosgroesse());

            mapParameter.put("P_LOSNUMMER", losDto.getCNr());
            mapParameter.put("P_PRODUKTIONSBEGINN", losDto.getTProduktionsbeginn());
            mapParameter.put("P_PRODUKTIONSENDE", losDto.getTProduktionsende());
            GregorianCalendar gc = new GregorianCalendar();
            gc.setTime(losDto.getTProduktionsende());
            mapParameter.put("P_PRODUKTIONSENDE_KW", new Integer(gc.get(Calendar.WEEK_OF_YEAR)));

            mapParameter.put("P_LIEFERTERMIN", dLiefertermin);

            // Fertigungsort
            if (losDto.getPartnerIIdFertigungsort() != null) {
                PartnerDto partnerDto = getPartnerFac().partnerFindByPrimaryKey(losDto.getPartnerIIdFertigungsort(),
                        theClientDto);
                mapParameter.put("P_FERTIGUNGSORT", partnerDto.formatTitelAnrede());
            }

            // Erstlos
            mapParameter.put("P_ERSTLOS", new Boolean(istErstlos(losDto, theClientDto)));

            ArrayList<Object> images = new ArrayList<Object>();
            String sLosStuecklisteArtikelKommentar = "";
            // Bild einfuegen
            String sMengenEinheit = "";
            if (losDto.getStuecklisteIId() != null) {
                StuecklisteDto stuecklisteDto = getStuecklisteFac()
                        .stuecklisteFindByPrimaryKey(losDto.getStuecklisteIId(), theClientDto);
                // Einheit
                if (stuecklisteDto.getArtikelDto() != null) {
                    if (stuecklisteDto.getArtikelDto().getEinheitCNr() != null) {
                        sMengenEinheit = stuecklisteDto.getArtikelDto().getEinheitCNr();
                    }
                }
                // Abmessungen
                GeometrieDto geometrieDto = stuecklisteDto.getArtikelDto().getGeometrieDto();
                if (geometrieDto != null) {
                    mapParameter.put(P_ARTIKEL_BREITE, geometrieDto.getFBreite());
                    mapParameter.put(P_ARTIKEL_HOEHE, geometrieDto.getFHoehe());
                    mapParameter.put(P_ARTIKEL_TIEFE, geometrieDto.getFTiefe());
                }
                // Bauform
                VerpackungDto verpackungDto = stuecklisteDto.getArtikelDto().getVerpackungDto();
                if (verpackungDto != null) {
                    mapParameter.put("P_ARTIKEL_BAUFORM", verpackungDto.getCBauform());
                    mapParameter.put("P_ARTIKEL_VERPACKUNGSART", verpackungDto.getCVerpackungsart());
                }

                ArtikelkommentarDto[] artikelkommentarDto = getArtikelkommentarFac()
                        .artikelkommentardruckFindByArtikelIIdBelegartCNr(stuecklisteDto.getArtikelIId(),
                                LocaleFac.BELEGART_LOS, theClientDto.getLocUiAsString(), theClientDto);

                if (artikelkommentarDto != null && artikelkommentarDto.length > 0) {

                    for (int j = 0; j < artikelkommentarDto.length; j++) {
                        if (artikelkommentarDto[j].getArtikelkommentarsprDto() != null) {
                            // Text Kommentar
                            if (artikelkommentarDto[j].getDatenformatCNr().trim()
                                    .indexOf(MediaFac.DATENFORMAT_MIMETYPEART_TEXT) != -1) {
                                if (sLosStuecklisteArtikelKommentar == "") {
                                    sLosStuecklisteArtikelKommentar += artikelkommentarDto[j]
                                            .getArtikelkommentarsprDto().getXKommentar();
                                } else {
                                    sLosStuecklisteArtikelKommentar += "\n"
                                            + artikelkommentarDto[j].getArtikelkommentarsprDto().getXKommentar();
                                }
                            } else if (artikelkommentarDto[j].getDatenformatCNr()
                                    .equals(MediaFac.DATENFORMAT_MIMETYPE_IMAGE_JPEG)
                                    || artikelkommentarDto[j].getDatenformatCNr()
                                            .equals(MediaFac.DATENFORMAT_MIMETYPE_IMAGE_PNG)
                                    || artikelkommentarDto[j].getDatenformatCNr()
                                            .equals(MediaFac.DATENFORMAT_MIMETYPE_IMAGE_GIF)) {
                                byte[] bild = artikelkommentarDto[j].getArtikelkommentarsprDto().getOMedia();
                                if (bild != null) {
                                    java.awt.Image myImage = Helper.byteArrayToImage(bild);
                                    images.add(myImage);
                                }
                            } else if (artikelkommentarDto[j].getDatenformatCNr()
                                    .equals(MediaFac.DATENFORMAT_MIMETYPE_IMAGE_TIFF)) {

                                byte[] bild = artikelkommentarDto[j].getArtikelkommentarsprDto().getOMedia();

                                java.awt.Image[] tiffs = Helper.tiffToImageArray(bild);
                                if (tiffs != null) {
                                    for (int k = 0; k < tiffs.length; k++) {
                                        images.add(tiffs[k]);
                                    }
                                }

                            }
                        }
                    }
                }
            }
            mapParameter.put("P_MENGENEINHEIT", sMengenEinheit);
            mapParameter.put("P_PROJEKT", losDto.getCProjekt());
            mapParameter.put("P_LOSKOMMENTAR", losDto.getCKommentar());
            mapParameter.put("P_LOSLANGTEXT", losDto.getXText());

            FertigungsgruppeDto fertGruppeDto = getStuecklisteFac()
                    .fertigungsgruppeFindByPrimaryKey(losDto.getFertigungsgruppeIId());
            mapParameter.put("P_FERTIGUNGSGRUPPE", fertGruppeDto.getCBez());

            // Materialliste?
            if (losDto.getStuecklisteIId() != null) {
                StuecklisteDto stkDto = getStuecklisteFac().stuecklisteFindByPrimaryKey(losDto.getStuecklisteIId(),
                        theClientDto);

                if (sLosStuecklisteArtikelKommentar != "") {
                    mapParameter.put("P_STUECKLISTEARTIKELKOMMENTAR",
                            Helper.formatStyledTextForJasper(sLosStuecklisteArtikelKommentar));
                }

                mapParameter.put("P_STUECKLISTEBEZEICHNUNG", stkDto.getArtikelDto().getArtikelsprDto().getCBez());

                mapParameter.put("P_STUECKLISTEZUSATZBEZEICHNUNG",
                        stkDto.getArtikelDto().getArtikelsprDto().getCZbez());
                mapParameter.put("P_STUECKLISTEZUSATZBEZEICHNUNG2",
                        stkDto.getArtikelDto().getArtikelsprDto().getCZbez2());

                mapParameter.put("P_STUECKLISTEKURZBEZEICHNUNG",
                        stkDto.getArtikelDto().getArtikelsprDto().getCKbez());
                mapParameter.put("P_STUECKLISTEREFERENZNUMMER", stkDto.getArtikelDto().getCReferenznr());

                mapParameter.put("P_STUECKLISTENUMMER", stkDto.getArtikelDto().getCNr());

                mapParameter.put("P_STUECKLISTE_GEWICHTKG", stkDto.getArtikelDto().getFGewichtkg());

                if (stkDto.getArtikelDto().getVerpackungDto() != null) {
                    mapParameter.put("P_STUECKLISTE_BAUFORM",
                            stkDto.getArtikelDto().getVerpackungDto().getCBauform());
                    mapParameter.put("P_STUECKLISTE_VERPACKUNGSART",
                            stkDto.getArtikelDto().getVerpackungDto().getCVerpackungsart());
                }

                if (stkDto.getArtikelDto().getGeometrieDto() != null) {
                    mapParameter.put("P_STUECKLISTE_BREITETEXT",
                            stkDto.getArtikelDto().getGeometrieDto().getCBreitetext());
                    mapParameter.put("P_STUECKLISTE_BREITE", stkDto.getArtikelDto().getGeometrieDto().getFBreite());
                    mapParameter.put("P_STUECKLISTE_HOEHE", stkDto.getArtikelDto().getGeometrieDto().getFHoehe());
                    mapParameter.put("P_STUECKLISTE_TIEFE", stkDto.getArtikelDto().getGeometrieDto().getFTiefe());
                }

                // Stuecklisteneigenschaften
                StuecklisteeigenschaftDto[] stuecklisteeigenschaftDtos = getStuecklisteFac()
                        .stuecklisteeigenschaftFindByStuecklisteIId(losDto.getStuecklisteIId());
                ArrayList<Object[]> al = new ArrayList<Object[]>();
                for (int j = 0; j < stuecklisteeigenschaftDtos.length; j++) {
                    StuecklisteeigenschaftDto dto = stuecklisteeigenschaftDtos[j];

                    Object[] o = new Object[2];
                    String sStklEigenschaftArt = dto.getStuecklisteeigenschaftartDto().getCBez();
                    o[0] = sStklEigenschaftArt;
                    o[1] = dto.getCBez();
                    al.add(o);

                    // Index und Materialplatz auch einzeln an Report uebergeben
                    if (sStklEigenschaftArt.equals(StuecklisteReportFac.REPORT_STUECKLISTE_EIGENSCHAFTEN_INDEX)) {
                        mapParameter.put(P_STUECKLISTENEIGENSCHAFT_INDEX, dto.getCBez());
                    }
                    if (sStklEigenschaftArt
                            .equals(StuecklisteReportFac.REPORT_STUECKLISTE_EIGENSCHAFTEN_MATERIALPLATZ)) {
                        mapParameter.put(P_STUECKLISTENEIGENSCHAFT_MATERIALPLATZ, dto.getCBez());
                    }

                }

                if (stuecklisteeigenschaftDtos.length > 0) {
                    String[] fieldnames = new String[] { "F_EIGENSCHAFTART", "F_BEZEICHNUNG" };
                    Object[][] dataSub = new Object[al.size()][fieldnames.length];
                    dataSub = (Object[][]) al.toArray(dataSub);

                    mapParameter.put("DATENSUBREPORT", new LPDatenSubreport(dataSub, fieldnames));
                }

            } else {
                mapParameter.put("P_STUECKLISTEBEZEICHNUNG", losDto.getCProjekt());
                mapParameter.put("P_STUECKLISTENUMMER", getTextRespectUISpr("fert.materialliste",
                        theClientDto.getMandant(), theClientDto.getLocUi()));
            }
        } catch (RemoteException e) {
            throwEJBExceptionLPRespectOld(e);
        }
        return mapParameter;
    }

    @TransactionAttribute(TransactionAttributeType.NEVER)
    public JasperPrintLP printFehlmengenAllerLose(boolean bNurEigengefertigteArtikel,
            boolean bAlleOhneEigengefertigteArtikel, TheClientDto theClientDto) {
        Session session = null;
        // try {

        this.useCase = UC_FEHLMENGEN_ALLER_LOSE;
        this.index = -1;
        SessionFactory factory = FLRSessionFactory.getFactory();
        session = factory.openSession();

        String queryString = "SELECT f, (SELECT SUM(l.n_lagerstand) FROM FLRArtikellager l WHERE l.mandant_c_nr='"
                + theClientDto.getMandant()
                + "' AND l.flrartikel.i_id=f.flrartikel.i_id AND l.flrlager.i_loslagersort IS NOT NULL), (SELECT SUM(r.n_menge) FROM FLRArtikelreservierung r WHERE r.flrartikel.i_id=f.flrartikel.i_id),(SELECT SUM(bes.n_menge) FROM FLRArtikelbestellt bes WHERE bes.flrartikel.i_id=f.flrartikel.i_id),(SELECT spr.c_bez FROM FLRArtikellistespr as spr WHERE spr.Id.artikelliste=f.flrartikel.i_id AND spr.Id.locale='"
                + theClientDto.getLocUiAsString()
                + "' ),(SELECT spr.c_bez FROM FLRArtikellistespr as spr WHERE spr.Id.artikelliste=f.flrlossollmaterial.flrlos.flrstueckliste.flrartikel.i_id AND spr.Id.locale='"
                + theClientDto.getLocUiAsString()
                + "' ),(SELECT stkl FROM FLRStueckliste stkl WHERE stkl.artikel_i_id=f.flrartikel.i_id AND stkl.mandant_c_nr=f.flrartikel.mandant_c_nr) FROM FLRFehlmenge f WHERE 1=1 ";

        queryString += " ORDER BY f.flrartikel.c_nr, f.flrlossollmaterial.flrlos.t_produktionsbeginn,f.flrlossollmaterial.flrlos.c_nr ";

        org.hibernate.Query query = session.createQuery(queryString);

        List<?> resultList = query.list();

        int i = 0;

        data = new Object[resultList.size()][FMAL_SPALTENANZAHL];
        ArrayList alListe = new ArrayList();

        Integer letzteArtikelId = null;

        BigDecimal fiktiverLagerstand = new BigDecimal(0);

        for (Iterator<?> iter = resultList.iterator(); iter.hasNext(); i++) {
            Object[] f = (Object[]) iter.next();

            BigDecimal lagerstand = (BigDecimal) f[1];
            FLRFehlmenge al = (FLRFehlmenge) f[0];
            BigDecimal reservierungen = (BigDecimal) f[2];

            BigDecimal bestellt = (BigDecimal) f[3];
            String artikel_bez = (String) f[4];
            String stkl_bez = (String) f[5];
            FLRStueckliste stkl = (FLRStueckliste) f[6];

            if (bNurEigengefertigteArtikel == true) {
                if (stkl == null || Helper.short2boolean(stkl.getB_fremdfertigung()) == true) {
                    continue;
                }
            }
            if (bAlleOhneEigengefertigteArtikel == true) {
                if (stkl != null && Helper.short2boolean(stkl.getB_fremdfertigung()) == false) {
                    continue;
                }
            }

            Object[] zeile = new Object[FMAL_SPALTENANZAHL];

            zeile[FMAL_ARTIKEL_I_ID] = al.getArtikel_i_id();
            zeile[FMAL_BESTELLT] = bestellt;

            if (fiktiverLagerstand.doubleValue() >= 0 && letzteArtikelId != null
                    && !letzteArtikelId.equals(al.getFlrartikel().getI_id())) {
                while (alListe.size() > 0 && ((Object[]) alListe.get(alListe.size() - 1))[FMAL_ARTIKEL_I_ID]
                        .equals(letzteArtikelId)) {
                    alListe.remove(alListe.size() - 1);
                }
            }

            if (letzteArtikelId == null || !letzteArtikelId.equals(al.getFlrartikel().getI_id())) {
                // Offenen Bestelungen + Reservierungen
                fiktiverLagerstand = lagerstand;

            }

            if (fiktiverLagerstand == null) {
                fiktiverLagerstand = new BigDecimal(0);
            }

            zeile[FMAL_ARTIKELNUMMER] = al.getFlrartikel().getC_nr();
            zeile[FMAL_ARTIKELBEZEICHNUNG] = artikel_bez;

            try {
                zeile[FMAL_ARTIKELSPERREN] = getArtikelFac().getArtikelsperrenText(al.getFlrartikel().getI_id());
            } catch (RemoteException e) {
                throwEJBExceptionLPRespectOld(e);
            }

            zeile[FMAL_RESERVIERT] = reservierungen;
            if (al.getFlrlossollmaterial().getFlrlos().getFlrstueckliste() != null) {
                zeile[FMAL_STUECKLISTENUMMER] = al.getFlrlossollmaterial().getFlrlos().getFlrstueckliste()
                        .getFlrartikel().getC_nr();
                zeile[FMAL_STUECKLISTEBEZEICHNUNG] = stkl_bez;
            }

            zeile[FMAL_BELEGNUMMER] = al.getFlrlossollmaterial().getFlrlos().getC_nr();

            if (al.getFlrlossollmaterial().getFlrlos().getFlrauftrag() != null) {
                zeile[FMAL_POENALE_AUS_AUFTRAG] = Helper
                        .short2Boolean(al.getFlrlossollmaterial().getFlrlos().getFlrauftrag().getB_poenale());
            }

            zeile[FMAL_BELEGART] = LocaleFac.BELEGART_LOS;

            zeile[FMAL_PRODUKTIONSBEGINN] = al.getFlrlossollmaterial().getFlrlos().getT_produktionsbeginn();
            zeile[FMAL_PRODUKTIONSENDE] = al.getFlrlossollmaterial().getFlrlos().getT_produktionsende();

            zeile[FMAL_FEHLMENGE] = al.getN_menge();

            fiktiverLagerstand = fiktiverLagerstand.subtract(al.getN_menge());

            zeile[FMAL_FIKTIVERLAGERSTAND] = fiktiverLagerstand;

            zeile[FMAL_LAGERSTAND] = lagerstand;

            alListe.add(zeile);
            letzteArtikelId = al.getFlrartikel().getI_id();

        }
        closeSession(session);

        ArrayList alFertig = new ArrayList();

        letzteArtikelId = null;
        for (int j = 0; j < alListe.size(); j++) {
            Object[] zeile = (Object[]) alListe.get(j);
            Integer artikelIDNext = null;

            alFertig.add(zeile);

            if (alListe.size() > j + 1) {
                Object[] zeileNext = (Object[]) alListe.get(j + 1);
                artikelIDNext = (Integer) zeileNext[FMAL_ARTIKEL_I_ID];
            }

            if (artikelIDNext == null || !artikelIDNext.equals((Integer) zeile[FMAL_ARTIKEL_I_ID])) {

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

                String queryStringOb = "SELECT b,(SELECT spr.c_bez FROM FLRArtikellistespr as spr WHERE spr.Id.artikelliste=b.flrartikel.i_id AND spr.Id.locale='"
                        + theClientDto.getLocUiAsString()
                        + "' ) FROM FLRBestellposition b WHERE b.flrbestellung.bestellungstatus_c_nr NOT IN('"
                        + BestellungFac.BESTELLSTATUS_STORNIERT + "','" + BestellungFac.BESTELLSTATUS_ERLEDIGT
                        + "') AND ( b.flrbestellung.bestellungart_c_nr='"
                        + BestellungFac.BESTELLUNGART_FREIE_BESTELLUNG_C_NR
                        + "' OR b.flrbestellung.bestellungart_c_nr='"
                        + BestellungFac.BESTELLUNGART_ABRUFBESTELLUNG_C_NR + "' ) AND b.flrartikel.i_id="
                        + (Integer) zeile[FMAL_ARTIKEL_I_ID] + " ORDER BY b.flrbestellung.c_nr";

                org.hibernate.Query queryOb = session2.createQuery(queryStringOb);

                List<?> resultListOb = queryOb.list();
                Iterator it2 = resultListOb.iterator();
                while (it2.hasNext()) {

                    Object[] bp = (Object[]) it2.next();

                    String artikel_bez_bestpos = (String) bp[1];

                    FLRBestellposition bespos = (FLRBestellposition) bp[0];
                    Object[] zeileBestpos = new Object[FMAL_SPALTENANZAHL];

                    zeileBestpos[FMAL_BELEGNUMMER] = bespos.getFlrbestellung().getC_nr();
                    zeileBestpos[FMAL_ARTIKELNUMMER] = bespos.getFlrartikel().getC_nr();
                    zeileBestpos[FMAL_ARTIKELBEZEICHNUNG] = artikel_bez_bestpos;

                    if (bespos.getN_offenemenge() == null) {
                        zeileBestpos[FMAL_OFFEN] = bespos.getN_menge();
                    } else if (bespos.getN_offenemenge().doubleValue() > 0) {
                        zeileBestpos[FMAL_OFFEN] = bespos.getN_offenemenge();
                    } else {
                        continue;
                    }

                    zeileBestpos[FMAL_MAHNSTUFE] = bespos.getFlrbestellung().getMahnstufe_i_id();

                    zeileBestpos[FMAL_ABNUMMER] = bespos.getC_abnummer();

                    zeileBestpos[FMAL_ABTERMIN] = bespos.getT_auftragsbestaetigungstermin();

                    if (bespos.getT_uebersteuerterliefertermin() != null) {
                        zeileBestpos[FMAL_TERMIN] = bespos.getT_uebersteuerterliefertermin();
                    } else {
                        zeileBestpos[FMAL_TERMIN] = bespos.getFlrbestellung().getT_liefertermin();
                    }

                    String lieferant = bespos.getFlrbestellung().getFlrlieferant().getFlrpartner()
                            .getC_name1nachnamefirmazeile1();
                    if (bespos.getFlrbestellung().getFlrlieferant().getFlrpartner()
                            .getC_name2vornamefirmazeile2() != null) {
                        lieferant = lieferant + " " + bespos.getFlrbestellung().getFlrlieferant().getFlrpartner()
                                .getC_name2vornamefirmazeile2();
                    }
                    zeileBestpos[FMAL_LIEFERANT] = lieferant;

                    zeileBestpos[FMAL_ARTIKEL_I_ID] = (Integer) zeile[FMAL_ARTIKEL_I_ID];
                    zeileBestpos[FMAL_BELEGART] = LocaleFac.BELEGART_BESTELLUNG;
                    alFertig.add(zeileBestpos);

                }

                session2.close();
            }

            letzteArtikelId = (Integer) zeile[FMAL_ARTIKEL_I_ID];
        }

        Object[][] returnArray = new Object[alFertig.size()][FMAL_SPALTENANZAHL];
        data = (Object[][]) alFertig.toArray(returnArray);

        Map<String, Object> mapParameter = new TreeMap<String, Object>();

        mapParameter.put("P_NUREIGENGEFERTIGTEARTIKEL", new Boolean(bNurEigengefertigteArtikel));
        mapParameter.put("P_ALLEOHNEEIGENGEFERTIGTEARTIEL", new Boolean(bAlleOhneEigengefertigteArtikel));

        initJRDS(mapParameter, FertigungReportFac.REPORT_MODUL, FertigungReportFac.REPORT_FEHLMENGEN_ALLER_LOSE,
                theClientDto.getMandant(), theClientDto.getLocUi(), theClientDto);
        return getReportPrint();

    }

    @TransactionAttribute(TransactionAttributeType.NEVER)
    public JasperPrintLP printMaterialliste(Integer losIId, TheClientDto theClientDto) {
        this.useCase = UC_MATERIALLISTE;
        this.index = -1;
        try {
            LosDto losDto = getFertigungFac().losFindByPrimaryKey(losIId);

            Session sessionSub = FLRSessionFactory.getFactory().openSession();
            String sQuerySub = "FROM FLRLossollmaterial AS s WHERE s.flrlos.i_id=" + losIId
                    + "ORDER BY s.flrartikel.c_nr, s.t_aendern ";

            org.hibernate.Query hquerySub = sessionSub.createQuery(sQuerySub);
            List<?> resultListSub = hquerySub.list();
            Iterator<?> resultListIteratorSub = resultListSub.iterator();
            int i = 0;
            ArrayList alDaten = new ArrayList();

            while (resultListIteratorSub.hasNext()) {
                FLRLossollmaterial sollmaterial = (FLRLossollmaterial) resultListIteratorSub.next();

                ArrayList<WarenzugangsreferenzDto> alWeReferenzen = new ArrayList();

                // SNR-CHNR
                List<SeriennrChargennrMitMengeDto> snrDtosKomplett = new ArrayList<SeriennrChargennrMitMengeDto>();

                BigDecimal bdAusgegeben = new BigDecimal(0);
                for (Iterator<?> iter = sollmaterial.getIstmaterialset().iterator(); iter.hasNext();) {
                    FLRLosistmaterial item = (FLRLosistmaterial) iter.next();

                    List<SeriennrChargennrMitMengeDto> snrDtos = getLagerFac()
                            .getAllSeriennrchargennrEinerBelegartposition(LocaleFac.BELEGART_LOS, item.getI_id());

                    for (int k = 0; k < snrDtos.size(); k++) {
                        snrDtosKomplett.add(snrDtos.get(k));
                    }

                    if (Helper.short2boolean(item.getB_abgang()) == true) {
                        bdAusgegeben = bdAusgegeben.add(item.getN_menge());

                        ArrayList<WarenzugangsreferenzDto> alZeile = getLagerFac().getWareneingangsreferenz(
                                LocaleFac.BELEGART_LOS, item.getI_id(), (List) null, false, theClientDto);
                        for (int h = 0; h < alZeile.size(); h++) {
                            alWeReferenzen.add(alZeile.get(h));
                        }
                    } else {
                        bdAusgegeben = bdAusgegeben.subtract(item.getN_menge());
                    }
                }
                Object[] zeile = new Object[MATERIAL_SPALTENANZAHL];

                String[] fieldnames = new String[] { "F_BELEGART", "F_BELEGNUMMER", "F_ZUSATZ", "F_BELEGDATUM",
                        "F_POSITION1", "F_POSITION2", "F_URSPRUNGSLAND", "F_HERSTELLER", "F_MENGE",
                        "F_LOS_AZANTEIL", "F_LOS_MATERIALANTEIL" };

                Object[][] dataSub = new Object[alWeReferenzen.size()][fieldnames.length];

                for (int h = 0; h < alWeReferenzen.size(); h++) {
                    WarenzugangsreferenzDto dto = (WarenzugangsreferenzDto) alWeReferenzen.get(h);
                    dataSub[h][0] = dto.getBelegart();
                    dataSub[h][1] = dto.getBelegnummer();
                    dataSub[h][2] = dto.getZusatz();
                    dataSub[h][3] = dto.getTBelegdatum();
                    dataSub[h][4] = dto.getPosition1();
                    dataSub[h][5] = dto.getPosition2();
                    dataSub[h][6] = dto.getLand();
                    dataSub[h][7] = dto.getHersteller();
                    dataSub[h][8] = dto.getMenge();
                    dataSub[h][9] = dto.getLosAZAnteil();
                    dataSub[h][10] = dto.getLosMaterialanteil();

                }

                zeile[MATERIAL_WE_REFERENZ] = new LPDatenSubreport(dataSub, fieldnames);

                zeile[MATERIAL_SNRCHNR] = SeriennrChargennrMitMengeDto
                        .erstelleStringAusMehrerenSeriennummern(snrDtosKomplett);

                BigDecimal preis = new BigDecimal(0);

                if (bdAusgegeben.doubleValue() != 0) {
                    try {
                        preis = getFertigungFac().getAusgegebeneMengePreis(sollmaterial.getI_id(), null,
                                theClientDto);
                    } catch (RemoteException e) {
                        throwEJBExceptionLPRespectOld(e);
                    }
                }

                if (Helper.short2boolean(sollmaterial.getB_nachtraeglich())) {
                    zeile[MATERIAL_ART] = "N";
                } else {
                    zeile[MATERIAL_ART] = "S";
                }
                ArtikelDto aDto = getArtikelFac()
                        .artikelFindByPrimaryKeySmall(sollmaterial.getFlrartikel().getI_id(), theClientDto);
                zeile[MATERIAL_ARTIKELNUMMER] = aDto.getCNr();

                if (aDto.getArtikelsprDto() != null) {
                    zeile[MATERIAL_BEZEICHNUNG] = aDto.getArtikelsprDto().getCBez();
                    zeile[MATERIAL_ZUSATZBEZEICHNUNG] = aDto.getArtikelsprDto().getCZbez();
                    zeile[MATERIAL_ZUSATZBEZEICHNUNG2] = aDto.getArtikelsprDto().getCZbez2();
                    zeile[MATERIAL_KURZBEZEICHNUNG] = aDto.getArtikelsprDto().getCKbez();
                }

                zeile[MATERIAL_SOLLMENGE] = sollmaterial.getN_menge();
                zeile[MATERIAL_ISTMENGE] = bdAusgegeben;
                zeile[MATERIAL_SOLLPREIS] = sollmaterial.getN_sollpreis();
                zeile[MATERIAL_ISTPREIS] = preis;

                LossollmaterialDto sollMatDto = getFertigungFac()
                        .lossollmaterialFindByPrimaryKey(sollmaterial.getI_id());

                ArtikellieferantDto dto = getArtikelFac().getArtikelEinkaufspreis(
                        sollmaterial.getFlrartikel().getI_id(), null, sollmaterial.getN_menge(),
                        theClientDto.getSMandantenwaehrung(), new java.sql.Date(sollMatDto.getTAendern().getTime()),
                        theClientDto);
                if (dto != null) {
                    zeile[MATERIAL_LIEF1PREIS] = dto.getLief1Preis();
                }

                alDaten.add(zeile);
                i++;
            }
            sessionSub.close();

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

            Map<String, Object> mapParameter = new TreeMap<String, Object>();
            mapParameter.put("P_ANGELEGT", new java.util.Date(losDto.getTAnlegen().getTime()));
            String sAuftragsnummer;
            String sInternerKommentar = null;
            String sKunde;
            String sKundeLieferadresse;
            Timestamp dLiefertermin;
            String sLieferart;
            String sAbteilung = null;
            String sSpediteur = null;
            Boolean bPoenale = Boolean.FALSE;
            Boolean bRoHs = Boolean.FALSE;
            if (losDto.getAuftragIId() != null) {
                // Auftrag holen
                AuftragDto auftragDto = getAuftragFac().auftragFindByPrimaryKey(losDto.getAuftragIId());
                sAuftragsnummer = auftragDto.getCNr();
                sLieferart = getLocaleFac().lieferartFindByIIdLocaleOhneExc(auftragDto.getLieferartIId(),
                        theClientDto.getLocUi(), theClientDto);

                if (auftragDto.getSpediteurIId() != null) {
                    sSpediteur = getMandantFac().spediteurFindByPrimaryKey(auftragDto.getSpediteurIId())
                            .getCNamedesspediteurs();
                }

                bPoenale = Helper.short2Boolean(auftragDto.getBPoenale());
                bRoHs = Helper.short2Boolean(auftragDto.getBRoHs());
                // Internen Kommentar aus dem Auftrag, abhaengig von einem
                // Mandantenparameter
                ParametermandantDto parameter = getParameterFac().getMandantparameter(theClientDto.getMandant(),
                        ParameterFac.KATEGORIE_FERTIGUNG,
                        ParameterFac.PARAMETER_KOMMENTAR_AM_FERTIGUNGSBEGLEITSCHEIN);
                short iValue = Short.parseShort(parameter.getCWert());
                boolean bDruckeKommentar = Helper.short2boolean(iValue);
                if (bDruckeKommentar) {
                    sInternerKommentar = auftragDto.getXInternerkommentar();
                }
                // Kunde holen
                KundeDto kundeDto = getKundeFac().kundeFindByPrimaryKey(auftragDto.getKundeIIdAuftragsadresse(),
                        theClientDto);

                sKunde = kundeDto.getPartnerDto().getCName1nachnamefirmazeile1();

                KundeDto kundeDtoLieferadresse = getKundeFac()
                        .kundeFindByPrimaryKey(auftragDto.getKundeIIdLieferadresse(), theClientDto);
                sKundeLieferadresse = kundeDtoLieferadresse.getPartnerDto().getCName1nachnamefirmazeile1();

                sAbteilung = kundeDto.getPartnerDto().getCName3vorname2abteilung();

                if (losDto.getAuftragpositionIId() != null) {
                    AuftragpositionDto aufposDto = getAuftragpositionFac()
                            .auftragpositionFindByPrimaryKey(losDto.getAuftragpositionIId());
                    if (aufposDto.getTUebersteuerbarerLiefertermin() != null) {
                        dLiefertermin = aufposDto.getTUebersteuerbarerLiefertermin();
                    } else {
                        dLiefertermin = auftragDto.getDLiefertermin();
                    }
                } else {
                    dLiefertermin = auftragDto.getDLiefertermin();
                }
            } else {
                sAuftragsnummer = "";

                if (losDto.getKundeIId() != null) {
                    KundeDto kundeDto = getKundeFac().kundeFindByPrimaryKey(losDto.getKundeIId(), theClientDto);

                    sKunde = kundeDto.getPartnerDto().getCName1nachnamefirmazeile1();
                } else {
                    sKunde = "";
                }

                sKundeLieferadresse = "";
                dLiefertermin = null;
                sLieferart = "";
                sSpediteur = "";
            }

            mapParameter.put("P_AUFTRAGNUMMER", sAuftragsnummer);
            mapParameter.put("P_AUFTRAG_INTERNERKOMMENTAR", sInternerKommentar);
            mapParameter.put("P_AUFTRAG_KUNDE_ABTEILUNG", sAbteilung);
            mapParameter.put("P_LIEFERART", sLieferart);
            mapParameter.put("P_SPEDITEUR", sSpediteur);
            mapParameter.put("P_POENALE", bPoenale);
            mapParameter.put("P_ROHS", bRoHs);
            KostenstelleDto kstDto = getSystemFac().kostenstelleFindByPrimaryKey(losDto.getKostenstelleIId());
            mapParameter.put("P_KOSTENSTELLENUMMER", kstDto.getCNr());
            mapParameter.put("P_KUNDE", sKunde);
            mapParameter.put("P_KUNDE_LIEFERADRESSE", sKundeLieferadresse);
            mapParameter.put("P_LOSGROESSE", losDto.getNLosgroesse());

            mapParameter.put("P_LOSKLASSEN", getLosLosKlassenAlsString(losDto.getIId()));

            mapParameter.put("P_LOSNUMMER", losDto.getCNr());
            mapParameter.put("P_PRODUKTIONSBEGINN", losDto.getTProduktionsbeginn());
            mapParameter.put("P_PRODUKTIONSENDE", losDto.getTProduktionsende());
            GregorianCalendar gc = new GregorianCalendar();
            gc.setTime(losDto.getTProduktionsende());
            mapParameter.put("P_PRODUKTIONSENDE_KW", new Integer(gc.get(Calendar.WEEK_OF_YEAR)));

            mapParameter.put("P_LIEFERTERMIN", dLiefertermin);

            // Fertigungsort
            if (losDto.getPartnerIIdFertigungsort() != null) {
                PartnerDto partnerDto = getPartnerFac().partnerFindByPrimaryKey(losDto.getPartnerIIdFertigungsort(),
                        theClientDto);
                mapParameter.put("P_FERTIGUNGSORT", partnerDto.formatTitelAnrede());
            }

            // Erstlos
            mapParameter.put("P_ERSTLOS", new Boolean(istErstlos(losDto, theClientDto)));

            ArrayList<Object> images = new ArrayList<Object>();
            String sLosStuecklisteArtikelKommentar = "";
            // Bild einfuegen
            String sMengenEinheit = "";
            if (losDto.getStuecklisteIId() != null) {
                StuecklisteDto stuecklisteDto = getStuecklisteFac()
                        .stuecklisteFindByPrimaryKey(losDto.getStuecklisteIId(), theClientDto);
                // Einheit
                if (stuecklisteDto.getArtikelDto() != null) {
                    if (stuecklisteDto.getArtikelDto().getEinheitCNr() != null) {
                        sMengenEinheit = stuecklisteDto.getArtikelDto().getEinheitCNr();
                    }
                }

                // Sperren
                String sperren = getArtikelFac().getArtikelsperrenText(stuecklisteDto.getArtikelIId());

                mapParameter.put("P_STUECKLISTESPERRSTATUS", sperren);

                // Abmessungen
                GeometrieDto geometrieDto = stuecklisteDto.getArtikelDto().getGeometrieDto();
                if (geometrieDto != null) {
                    mapParameter.put(P_ARTIKEL_BREITE, geometrieDto.getFBreite());
                    mapParameter.put(P_ARTIKEL_HOEHE, geometrieDto.getFHoehe());
                    mapParameter.put(P_ARTIKEL_TIEFE, geometrieDto.getFTiefe());
                }
                // Bauform
                VerpackungDto verpackungDto = stuecklisteDto.getArtikelDto().getVerpackungDto();
                if (verpackungDto != null) {
                    mapParameter.put("P_ARTIKEL_BAUFORM", verpackungDto.getCBauform());
                    mapParameter.put("P_ARTIKEL_VERPACKUNGSART", verpackungDto.getCVerpackungsart());
                }

                mapParameter.put("P_INDEX", stuecklisteDto.getArtikelDto().getCIndex());
                mapParameter.put("P_REVISION", stuecklisteDto.getArtikelDto().getCRevision());

                ArtikelkommentarDto[] artikelkommentarDto = getArtikelkommentarFac()
                        .artikelkommentardruckFindByArtikelIIdBelegartCNr(stuecklisteDto.getArtikelIId(),
                                LocaleFac.BELEGART_LOS, theClientDto.getLocUiAsString(), theClientDto);

                if (artikelkommentarDto != null && artikelkommentarDto.length > 0) {

                    for (int j = 0; j < artikelkommentarDto.length; j++) {
                        if (artikelkommentarDto[j].getArtikelkommentarsprDto() != null) {
                            // Text Kommentar
                            if (artikelkommentarDto[j].getDatenformatCNr().trim()
                                    .indexOf(MediaFac.DATENFORMAT_MIMETYPEART_TEXT) != -1) {
                                if (sLosStuecklisteArtikelKommentar == "") {
                                    sLosStuecklisteArtikelKommentar += artikelkommentarDto[j]
                                            .getArtikelkommentarsprDto().getXKommentar();
                                } else {
                                    sLosStuecklisteArtikelKommentar += "\n"
                                            + artikelkommentarDto[j].getArtikelkommentarsprDto().getXKommentar();
                                }
                            } else if (artikelkommentarDto[j].getDatenformatCNr()
                                    .equals(MediaFac.DATENFORMAT_MIMETYPE_IMAGE_JPEG)
                                    || artikelkommentarDto[j].getDatenformatCNr()
                                            .equals(MediaFac.DATENFORMAT_MIMETYPE_IMAGE_PNG)
                                    || artikelkommentarDto[j].getDatenformatCNr()
                                            .equals(MediaFac.DATENFORMAT_MIMETYPE_IMAGE_GIF)) {
                                byte[] bild = artikelkommentarDto[j].getArtikelkommentarsprDto().getOMedia();
                                if (bild != null) {
                                    java.awt.Image myImage = Helper.byteArrayToImage(bild);
                                    images.add(myImage);
                                }
                            } else if (artikelkommentarDto[j].getDatenformatCNr()
                                    .equals(MediaFac.DATENFORMAT_MIMETYPE_IMAGE_TIFF)) {

                                byte[] bild = artikelkommentarDto[j].getArtikelkommentarsprDto().getOMedia();

                                java.awt.Image[] tiffs = Helper.tiffToImageArray(bild);
                                if (tiffs != null) {
                                    for (int k = 0; k < tiffs.length; k++) {
                                        images.add(tiffs[k]);
                                    }
                                }

                            }
                        }
                    }
                }
            }
            mapParameter.put("P_MENGENEINHEIT", sMengenEinheit);
            mapParameter.put("P_PROJEKT", losDto.getCProjekt());
            mapParameter.put("P_LOSKOMMENTAR", losDto.getCKommentar());
            mapParameter.put("P_LOSLANGTEXT", losDto.getXText());

            FertigungsgruppeDto fertGruppeDto = getStuecklisteFac()
                    .fertigungsgruppeFindByPrimaryKey(losDto.getFertigungsgruppeIId());
            mapParameter.put("P_FERTIGUNGSGRUPPE", fertGruppeDto.getCBez());

            // Materialliste?
            if (losDto.getStuecklisteIId() != null) {
                StuecklisteDto stkDto = getStuecklisteFac().stuecklisteFindByPrimaryKey(losDto.getStuecklisteIId(),
                        theClientDto);

                if (sLosStuecklisteArtikelKommentar != "") {
                    mapParameter.put("P_STUECKLISTEARTIKELKOMMENTAR",
                            Helper.formatStyledTextForJasper(sLosStuecklisteArtikelKommentar));
                }

                mapParameter.put("P_STUECKLISTEBEZEICHNUNG", stkDto.getArtikelDto().getArtikelsprDto().getCBez());

                mapParameter.put("P_STUECKLISTEZUSATZBEZEICHNUNG",
                        stkDto.getArtikelDto().getArtikelsprDto().getCZbez());
                mapParameter.put("P_STUECKLISTEZUSATZBEZEICHNUNG2",
                        stkDto.getArtikelDto().getArtikelsprDto().getCZbez2());

                mapParameter.put("P_STUECKLISTEKURZBEZEICHNUNG",
                        stkDto.getArtikelDto().getArtikelsprDto().getCKbez());
                mapParameter.put("P_STUECKLISTEREFERENZNUMMER", stkDto.getArtikelDto().getCReferenznr());

                mapParameter.put("P_STUECKLISTENUMMER", stkDto.getArtikelDto().getCNr());

                mapParameter.put("P_STUECKLISTE_GEWICHTKG", stkDto.getArtikelDto().getFGewichtkg());

                if (stkDto.getArtikelDto().getVerpackungDto() != null) {
                    mapParameter.put("P_STUECKLISTE_BAUFORM",
                            stkDto.getArtikelDto().getVerpackungDto().getCBauform());
                    mapParameter.put("P_STUECKLISTE_VERPACKUNGSART",
                            stkDto.getArtikelDto().getVerpackungDto().getCVerpackungsart());
                }

                if (stkDto.getArtikelDto().getGeometrieDto() != null) {
                    mapParameter.put("P_STUECKLISTE_BREITETEXT",
                            stkDto.getArtikelDto().getGeometrieDto().getCBreitetext());
                    mapParameter.put("P_STUECKLISTE_BREITE", stkDto.getArtikelDto().getGeometrieDto().getFBreite());
                    mapParameter.put("P_STUECKLISTE_HOEHE", stkDto.getArtikelDto().getGeometrieDto().getFHoehe());
                    mapParameter.put("P_STUECKLISTE_TIEFE", stkDto.getArtikelDto().getGeometrieDto().getFTiefe());
                }

                // Stuecklisteneigenschaften
                StuecklisteeigenschaftDto[] stuecklisteeigenschaftDtos = getStuecklisteFac()
                        .stuecklisteeigenschaftFindByStuecklisteIId(losDto.getStuecklisteIId());
                ArrayList<Object[]> al = new ArrayList<Object[]>();
                for (int j = 0; j < stuecklisteeigenschaftDtos.length; j++) {
                    StuecklisteeigenschaftDto dto = stuecklisteeigenschaftDtos[j];

                    Object[] o = new Object[2];
                    String sStklEigenschaftArt = dto.getStuecklisteeigenschaftartDto().getCBez();
                    o[0] = sStklEigenschaftArt;
                    o[1] = dto.getCBez();
                    al.add(o);

                    // Index und Materialplatz auch einzeln an Report uebergeben
                    if (sStklEigenschaftArt.equals(StuecklisteReportFac.REPORT_STUECKLISTE_EIGENSCHAFTEN_INDEX)) {
                        mapParameter.put(P_STUECKLISTENEIGENSCHAFT_INDEX, dto.getCBez());
                    }
                    if (sStklEigenschaftArt
                            .equals(StuecklisteReportFac.REPORT_STUECKLISTE_EIGENSCHAFTEN_MATERIALPLATZ)) {
                        mapParameter.put(P_STUECKLISTENEIGENSCHAFT_MATERIALPLATZ, dto.getCBez());
                    }

                }

                if (stuecklisteeigenschaftDtos.length > 0) {
                    String[] fieldnames = new String[] { "F_EIGENSCHAFTART", "F_BEZEICHNUNG" };
                    Object[][] dataSub = new Object[al.size()][fieldnames.length];
                    dataSub = (Object[][]) al.toArray(dataSub);

                    mapParameter.put("DATENSUBREPORT", new LPDatenSubreport(dataSub, fieldnames));
                }

            } else {
                mapParameter.put("P_STUECKLISTEBEZEICHNUNG", losDto.getCProjekt());
                mapParameter.put("P_STUECKLISTENUMMER", getTextRespectUISpr("fert.materialliste",
                        theClientDto.getMandant(), theClientDto.getLocUi()));
            }

            initJRDS(mapParameter, FertigungReportFac.REPORT_MODUL, FertigungReportFac.REPORT_MATERIALLISTE,
                    theClientDto.getMandant(), theClientDto.getLocUi(), theClientDto);
        } catch (Exception t) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER, t);

        }

        return getReportPrint();
    }

    @TransactionAttribute(TransactionAttributeType.NEVER)
    public JasperPrintLP printStueckrueckmeldung(Integer losIId, int iSortierung, TheClientDto theClientDto)
            throws EJBExceptionLP {
        Session session = null;
        try {
            this.useCase = UC_STUECKRUECKMELDUNG;
            this.index = -1;
            // Los holen
            LosDto losDto = getFertigungFac().losFindByPrimaryKey(losIId);
            if (losDto.getStatusCNr().equals(FertigungFac.STATUS_ANGELEGT)) {
                throw new EJBExceptionLP(EJBExceptionLP.FEHLER_FERTIGUNG_DAS_LOS_IST_NOCH_NICHT_AUSGEGEBEN, "");
            } else if (losDto.getStatusCNr().equals(FertigungFac.STATUS_STORNIERT)) {
                throw new EJBExceptionLP(EJBExceptionLP.FEHLER_FERTIGUNG_DAS_LOS_IST_STORNIERT, "");
            }
            SessionFactory factory = FLRSessionFactory.getFactory();
            session = factory.openSession();
            Criteria c = session.createCriteria(FLRLossollarbeitsplan.class);
            // Nur Buchungen auf dieses Los
            c.add(Restrictions.eq(FertigungFac.FLR_LOSSOLLARBEITSPLAN_LOS_I_ID, losIId));

            // Sortierung
            if (iSortierung == Helper.SORTIERUNG_NACH_IDENT) {
                c.createCriteria(FertigungFac.FLR_LOSSOLLARBEITSPLAN_FLRARTIKEL)
                        .addOrder(Order.asc(ArtikelFac.FLR_ARTIKEL_C_NR));
            } else if (iSortierung == Helper.SORTIERUNG_NACH_ARBEITSGANG) {
                c.addOrder(Order.asc(FertigungFac.FLR_LOSSOLLARBEITSPLAN_I_ARBEITSGANGNUMMER));
            }
            List<?> list = c.list();

            ArrayList alDaten = new ArrayList();
            Iterator<?> iter = list.iterator();
            while (iter.hasNext()) {
                FLRLossollarbeitsplan item = (FLRLossollarbeitsplan) iter.next();

                LosgutschlechtDto[] losgutschlechDtos = getFertigungFac()
                        .losgutschlechtFindByLossollarbeitsplanIId(item.getI_id());

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

                    Object[] oZeile = new Object[SRM_SPALTENANZAHL];
                    ArtikelDto artikelDto = getArtikelFac().artikelFindByPrimaryKey(item.getFlrartikel().getI_id(),
                            theClientDto);
                    oZeile[SRM_IDENT] = artikelDto.getCNr();
                    oZeile[SRM_BEZEICHNUNG] = artikelDto.getArtikelsprDto().getCBez();
                    oZeile[SRM_ZUSATZBEZEICHNUNG] = artikelDto.getArtikelsprDto().getCZbez();

                    oZeile[SRM_ARBEITSGANG] = item.getI_arbeitsgangsnummer();
                    ZeitdatenDto zd = getZeiterfassungFac()
                            .zeitdatenFindByPrimaryKey(losgutschlechDtos[i].getZeitdatenIId(), theClientDto);
                    oZeile[SRM_GEBUCHT] = zd.getTZeit();

                    oZeile[SRM_GUT] = losgutschlechDtos[i].getNGut();
                    oZeile[SRM_SCHLECHT] = losgutschlechDtos[i].getNSchlecht();
                    oZeile[SRM_INARBEIT] = losgutschlechDtos[i].getNInarbeit();
                    oZeile[SRM_OFFEN] = losDto.getNLosgroesse().subtract(losgutschlechDtos[i].getNGut())
                            .subtract(losgutschlechDtos[i].getNSchlecht())
                            .subtract(losgutschlechDtos[i].getNInarbeit());
                    if (item.getFlrmaschine() != null) {
                        oZeile[SRM_MASCHINE] = item.getFlrmaschine().getC_identifikationsnr();
                    }

                    PersonalDto personalDto = getPersonalFac().personalFindByPrimaryKey(zd.getPersonalIId(),
                            theClientDto);

                    oZeile[SRM_PERSONAL] = personalDto.formatAnrede();
                    alDaten.add(oZeile);
                }

            }

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

            // Parameter
            Map<String, Object> mapParameter = new TreeMap<String, Object>();
            mapParameter.put("P_ANGELEGT", new java.util.Date(losDto.getTAnlegen().getTime()));
            String sAuftragsnummer;
            String sInternerKommentar = null;
            String sKunde;
            Timestamp dLiefertermin;
            if (losDto.getAuftragpositionIId() != null) {
                // Auftrag holen
                AuftragpositionDto aufposDto = getAuftragpositionFac()
                        .auftragpositionFindByPrimaryKey(losDto.getAuftragpositionIId());
                AuftragDto auftragDto = getAuftragFac().auftragFindByPrimaryKey(aufposDto.getBelegIId());
                sAuftragsnummer = auftragDto.getCNr();
                // Internen Kommentar aus dem Auftrag, anhaengig von einem
                // Mandantenparameter
                ParametermandantDto parameter = getParameterFac().getMandantparameter(theClientDto.getMandant(),
                        ParameterFac.KATEGORIE_FERTIGUNG,
                        ParameterFac.PARAMETER_KOMMENTAR_AM_FERTIGUNGSBEGLEITSCHEIN);
                short iValue = Short.parseShort(parameter.getCWert());
                boolean bDruckeKommentar = Helper.short2boolean(iValue);
                if (bDruckeKommentar) {
                    sInternerKommentar = auftragDto.getXInternerkommentar();
                }
                // Kunde holen
                KundeDto kundeDto = getKundeFac().kundeFindByPrimaryKey(auftragDto.getKundeIIdAuftragsadresse(),
                        theClientDto);
                sKunde = kundeDto.getPartnerDto().getCName1nachnamefirmazeile1();
                if (aufposDto.getTUebersteuerbarerLiefertermin() != null) {
                    dLiefertermin = aufposDto.getTUebersteuerbarerLiefertermin();
                } else {
                    dLiefertermin = auftragDto.getDLiefertermin();
                }
            } else {
                sAuftragsnummer = "";
                sKunde = "";
                dLiefertermin = null;
            }
            mapParameter.put("P_AUFTRAGNUMMER", sAuftragsnummer);
            mapParameter.put("P_AUFTRAG_INTERNERKOMMENTAR", sInternerKommentar);

            KostenstelleDto kstDto = getSystemFac().kostenstelleFindByPrimaryKey(losDto.getKostenstelleIId());
            mapParameter.put("P_KOSTENSTELLENUMMER", kstDto.getCNr());
            mapParameter.put("P_KUNDE", sKunde);
            mapParameter.put("P_LOSGROESSE", losDto.getNLosgroesse());
            mapParameter.put("P_LOSNUMMER", losDto.getCNr());
            mapParameter.put("P_PRODUKTIONSBEGINN", losDto.getTProduktionsbeginn());
            mapParameter.put("P_LIEFERTERMIN", dLiefertermin);
            // Materialliste?
            if (losDto.getStuecklisteIId() != null) {
                StuecklisteDto stkDto = getStuecklisteFac().stuecklisteFindByPrimaryKey(losDto.getStuecklisteIId(),
                        theClientDto);
                mapParameter.put("P_STUECKLISTEBEZEICHNUNG", stkDto.getArtikelDto().getArtikelsprDto().getCBez());
                mapParameter.put("P_STUECKLISTEZUSATZBEZEICHNUNG",
                        stkDto.getArtikelDto().getArtikelsprDto().getCZbez());
                mapParameter.put("P_STUECKLISTENUMMER", stkDto.getArtikelDto().getCNr());
            } else {
                mapParameter.put("P_STUECKLISTEBEZEICHNUNG", losDto.getCProjekt());
                mapParameter.put("P_STUECKLISTENUMMER", getTextRespectUISpr("fert.materialliste",
                        theClientDto.getMandant(), theClientDto.getLocUi()));
            }
            initJRDS(mapParameter, FertigungReportFac.REPORT_MODUL, FertigungReportFac.REPORT_STUECKRUECKMELDUNG,
                    theClientDto.getMandant(), theClientDto.getLocUi(), theClientDto);
            return getReportPrint();
        } catch (Exception t) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER, t);
        } finally {
            closeSession(session);
        }
    }
}