View Javadoc

1   ////////////////////////////////////////////////////////////////////////////////
2   //CabaWeb
3   //Copyright (C) 2004  Thomas Vogt <Thomas.Vogt@TVC-Software.com>
4   //
5   //This library is free software; you can redistribute it and/or
6   //modify it under the terms of the GNU Lesser General Public
7   //License as published by the Free Software Foundation; either//version 2.1 of the License, or (at your option) any later version.
8   //
9   //This library is distributed in the hope that it will be useful,
10  //but WITHOUT ANY WARRANTY; without even the implied warranty of
11  //MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  //Lesser General Public License for more details.
13  //
14  //You should have received a copy of the GNU Lesser General Public
15  //License along with this library; if not, write to the Free Software
16  //Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
17  ////////////////////////////////////////////////////////////////////////////////
18  package org.fhw.cabaweb.calculation.threads;
19  
20  import java.util.ArrayList;
21  
22  import org.apache.commons.logging.Log;
23  import org.apache.commons.logging.LogFactory;
24  import org.fhw.cabaweb.calculation.ErstelleDatentabellen;
25  import org.fhw.cabaweb.calculation.common.CommonCalculation;
26  import org.fhw.cabaweb.data.DataInterfaceErgebnissdaten;
27  import org.fhw.cabaweb.data.DataInterfaceVoreinstellungen;
28  import org.fhw.cabaweb.data.constants.Constants;
29  import org.fhw.cabaweb.data.dataobjects.Ergebniss;
30  import org.fhw.cabaweb.data.dataobjects.Lizenzverkauf;
31  import org.fhw.cabaweb.data.dataobjects.ProduktartAbhaengigkeiten;
32  import org.fhw.cabaweb.data.dataobjects.Voreinstellung;
33  import org.fhw.cabaweb.math.Finanzierung;
34  import org.fhw.cabaweb.math.Produktion;
35  import org.fhw.cabaweb.math.Vertrieb;
36  
37  /***
38   * Die Klasse berechnet die HauptWerte der Unternehmen.
39   *
40   * @author  <a href="mailto:thomas.vogt@tvc-software.com">Thomas Vogt</a>
41   * @version Version 1.0 12.-25.08.2004
42   */
43  public final class BerechneHauptwerte extends Thread
44  {
45      /*** Commons Logging Instanz */
46      private Log log = LogFactory.getLog("org.fhw.cabaweb.calculation.threads.BerechneHauptwerte");
47      /*** Das LOCK Objekt */
48      private Lock lock;
49      /*** Die Projektnummer */
50      private Integer projektnummer;
51      /*** Die Gruppennummer */
52      private Integer gruppennummer;
53      /*** Das Quartal */
54      private Integer quartal;
55  
56      /* ----- Konstruktoren / Destruktoren ----- */
57  
58      /***
59       * Standardkonstruktor der nicht zug&auml;nglich sein soll
60       */
61      private BerechneHauptwerte()
62      {
63          log.error("!!! DEFAULT CONSTRUCTOR NOT TO BE USED !!!");
64      }
65  
66      /***
67       * Standardkonstruktor der das "Lock" Objekt übergeben bekommt
68       *
69       * @param lock          Das Lock Objekt
70       */
71      public BerechneHauptwerte(Lock lock)
72      {
73          this.lock = lock;
74      }
75  
76      /***
77       * Standardkonstruktor der das "Lock" Objekt übergeben bekommt
78       * Zusätzlich auch noch die nötigen Parameter
79       *
80       * @param lock          Das Lock Objekt
81       * @param projektnummer Die Projektnummer
82       * @param gruppennummer Die Gruppennummer
83       * @param quartal       Das Quartal
84       */
85      public BerechneHauptwerte(Lock lock, Integer projektnummer, Integer gruppennummer, Integer quartal)
86      {
87          this.lock = lock;
88          this.projektnummer = projektnummer;
89          this.gruppennummer = gruppennummer;
90          this.quartal = quartal;
91      }
92  
93      /* ----- Thread Methode ----- */
94  
95      /***
96       * Methode die beim Start des Threads ausgeführt wird
97       *
98       * Aufruf:
99       *
100      * Object lock = new Object ();
101      * BerechneHauptwerte mt1 = new BerechneHauptwerte(lock, PROJEKTNUMMER, GRUPPENNUMMER, QUARTAL);
102      * mt1.setName ("Name XYZ");
103      * // DEFAULT PRIORITY IS 5, MIN(IDLE) = 1, MAX(REALTIME) = 10
104      * mt1.setPriority(5);
105      * mt1.start();
106      *
107      * while(Thread.activeCount() > 1)
108      * {
109      *     synchronized (lock)
110      *     {
111      *         try
112      *         {
113      *             lock.wait();
114      *         }
115      *         catch (Exception e)
116      *         {
117      *             // Error Handling
118      *         }
119      *     }
120      * }
121      */
122     public synchronized void run()
123     {
124         if (lock != null && projektnummer != null && gruppennummer != null && quartal != null)
125         {
126             if (log.isDebugEnabled())
127             {
128                 log.debug(" THREAD NAME : " + getName());
129                 log.debug(" THREAD PRIO : " + getPriority());
130                 log.debug(" (S) Start der Verarbeitung \"BerechneHauptwerte\" fuer Gruppe \"" + gruppennummer + "\", Quartal \"" + quartal + "\" THREAD NAME : " + getName());
131             }
132 
133             try
134             {
135                 /*** Data Interface (indirekter Zugriff auf die OJB Ebene) initialisieren */
136                 DataInterfaceErgebnissdaten die = new DataInterfaceErgebnissdaten();
137                 /*** Data Interface (indirekter Zugriff auf die OJB Ebene) initialisieren */
138                 DataInterfaceVoreinstellungen div = new DataInterfaceVoreinstellungen();
139 
140                 Ergebniss wert1 = null;
141                 Ergebniss wert2 = null;
142                 Voreinstellung voreinstellung1 = null;
143 
144                 //              ArrayList mit den allgemeinen Voreinstellungen
145                 ArrayList allgemein = (ArrayList) div.sucheKombination_Gruppierung(projektnummer, Constants.VG_VOREINSTELLUNGENALLGEMEIN_KEY);
146                 //              ArrayList mit dem letzten Quartal
147                 ArrayList aktuellesquartalminus1 = (ArrayList) die.sucheQuartal(projektnummer, gruppennummer, quartal);
148                 //              ArrayList mit dem zu berechnenden Quartal
149                 ArrayList aktuellesquartal = (ArrayList) die.sucheQuartal(projektnummer, gruppennummer, new Integer(quartal.intValue() + 1));
150 
151                 //              Tabellen f&uuml;r die Voreinstellungen bezgl. Rahmenwerte
152                 ArrayList preisAbsatzTabelle = ErstelleDatentabellen.PreisAbsatzTabelle(projektnummer);
153                 ArrayList marktforschungTabelle = ErstelleDatentabellen.MarktforschungTabelle(projektnummer);
154                 ArrayList marketingTabelle = ErstelleDatentabellen.MarketingTabelle(projektnummer);
155                 ArrayList produktArtAbhaengigkeitenTabelle = ErstelleDatentabellen.ProduktArtAbhaengigkeitenTabelle(projektnummer);
156                 ArrayList qualitaetssicherungTabelle = ErstelleDatentabellen.QualitaetssicherungTabelle(projektnummer);
157                 ArrayList verwaltungTabelle = ErstelleDatentabellen.VerwaltungTabelle(projektnummer);
158                 ArrayList forschungundentwicklungTabelle = ErstelleDatentabellen.ForschungUndEntwicklungTabelle(projektnummer);
159 
160                 //              Inflationsindex
161                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_GRUNDDATENINFLATIONSRATE_KEY);
162                 Double inflationsrate = (Double) wert1.getObjectWert();
163                 wert2 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartalminus1, Constants.EF_GRUNDDATENINFLATIONSINDEX_KEY);
164                 Double inflationsindexVQ = (Double) wert2.getObjectWert();
165                 Double inflationsindex = new Double(Vertrieb.lohnerhoehungsIndex(inflationsindexVQ.doubleValue(), inflationsrate.doubleValue()));
166                 wert2.setObjectWert(inflationsindex);
167                 CommonCalculation.WertEintragen(wert2, gruppennummer, new Integer(quartal.intValue() + 1));
168 
169                 //              Lohnerhöhungsindex
170                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_GRUNDDATENLOHNERHOEHUNG_KEY);
171                 Double lohnerhoehungsrate = (Double) wert1.getObjectWert();
172                 wert2 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartalminus1, Constants.EF_GRUNDDATENLOHNERHOEHUNGSINDEX_KEY);
173                 Double lohnerhoehungsindexVQ = (Double) wert2.getObjectWert();
174                 Double lohnerhoehungssindex = new Double(Vertrieb.lohnerhoehungsIndex(lohnerhoehungsindexVQ.doubleValue(), lohnerhoehungsrate.doubleValue()));
175                 wert2.setObjectWert(lohnerhoehungssindex);
176                 CommonCalculation.WertEintragen(wert2, gruppennummer, new Integer(quartal.intValue() + 1));
177 
178                 //              Tab. 20 (211)
179                 /* Setze nominellen Verkaufspreis */
180                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_ENTSCHEIDUNGVERKAUFSPREIS_KEY);
181                 wert2 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_GRUNDDATENVERKAUFSPREISNOMINAL_KEY);
182                 Double verkaufspreisNominell = (Double) wert1.getObjectWert();
183                 wert2.setObjectWert(verkaufspreisNominell);
184                 CommonCalculation.WertEintragen(wert2, gruppennummer, new Integer(quartal.intValue() + 1));
185 
186                 //              Tab. 21 (12)
187                 /* nominalen Marketingaufwand aus Entscheidungsblatt kopieren */
188                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_ENTSCHEIDUNGMARKETING_KEY);
189                 wert2 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_ERFOLGSRECHNUNGMARKETINGKOSTEN_KEY);
190                 Double marketingkosten = new Double(- ((Integer) wert1.getObjectWert()).doubleValue() * 1000.0);
191                 wert2.setObjectWert(marketingkosten);
192                 CommonCalculation.WertEintragen(wert2, gruppennummer, new Integer(quartal.intValue() + 1));
193 
194                 //              Tab. 20 (243)
195                 /* Marktforschungsdienstnummer aus Entscheidungsblatt kopieren */
196                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_ENTSCHEIDUNGMARKTFORSCHUNGSDIENST_KEY);
197                 wert2 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_GRUNDDATENMARKTFORSCHUNGSDIENST_KEY);
198                 Integer marktforschungsdienst = (Integer) wert1.getObjectWert();
199                 wert2.setObjectWert(marktforschungsdienst);
200                 CommonCalculation.WertEintragen(wert2, gruppennummer, new Integer(quartal.intValue() + 1));
201 
202                 //              Tab. 21 (16)
203                 /* Marktforschungsdienstkosten */
204                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_ERFOLGSRECHNUNGMARKTFORSCHUNGSKOSTEN_KEY);
205                 Double marktforschungskosten = new Double(-Vertrieb.marktforschungskosten(marktforschungTabelle, marktforschungsdienst.intValue()));
206                 wert1.setObjectWert(marktforschungskosten);
207                 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
208 
209                 //              Tab. 23 (51)
210                 /* Investitionen aus Entscheidungsblatt kopieren */
211                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_ENTSCHEIDUNGINVESTITIONEN_KEY);
212                 wert2 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_FINANZIERUNGINVESTITIONEN_KEY);
213                 Double investitionskosten = new Double(- ((Integer) wert1.getObjectWert()).doubleValue() * 1000.0);
214                 wert2.setObjectWert(investitionskosten);
215                 CommonCalculation.WertEintragen(wert2, gruppennummer, new Integer(quartal.intValue() + 1));
216 
217                 //              Tab. 21 (33)
218                 /* Rohstoffbestellung aus Entscheidungsblatt kopieren (Normale- und Express-Bestellkosten aufaddieren) */
219                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_ENTSCHEIDUNGROHSTOFFBESTELLUNGEXPRESS_KEY);
220                 Double rohstoffbestellungexpress = new Double(((Integer) wert1.getObjectWert()).doubleValue() * 1000.0);
221                 voreinstellung1 = CommonCalculation.SucheVoreinstellungFeldname(allgemein, Constants.VF_ALLGEMEINEVOREINSTELLUNGENROHSTOFFBESTELLKOSTENEXPRESS_KEY);
222                 Double rohstoffbestellkostenexpress = new Double(((Integer) voreinstellung1.getWertObject()).doubleValue());
223                 Double rohstoffbestellkosten = new Double(0.0);
224 
225                 if (rohstoffbestellungexpress.doubleValue() > 0.0)
226                 {
227                     rohstoffbestellkosten = new Double(rohstoffbestellkostenexpress.doubleValue());
228                 }
229 
230                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_ENTSCHEIDUNGROHSTOFFBESTELLUNGNORMAL_KEY);
231                 Double rohstoffbestellungnormal = new Double(((Integer) wert1.getObjectWert()).doubleValue() * 1000.0);
232                 voreinstellung1 = CommonCalculation.SucheVoreinstellungFeldname(allgemein, Constants.VF_ALLGEMEINEVOREINSTELLUNGENROHSTOFFBESTELLKOSTENNORMAL_KEY);
233                 Double rohstoffbestellkostennormal = new Double(((Integer) voreinstellung1.getWertObject()).doubleValue());
234 
235                 if (rohstoffbestellungnormal.doubleValue() > 0.0)
236                 {
237                     rohstoffbestellkosten = new Double(rohstoffbestellkosten.doubleValue() + rohstoffbestellkostennormal.doubleValue());
238                 }
239 
240                 wert2 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_ERFOLGSRECHNUNGROHSTOFFBESTELLUNGSKOSTEN_KEY);
241                 wert2.setObjectWert(new Double(-rohstoffbestellkosten.doubleValue()));
242                 CommonCalculation.WertEintragen(wert2, gruppennummer, new Integer(quartal.intValue() + 1));
243 
244                 //              Tab. 23 (52)
245                 /* Rohstoffbestellung normal und express */
246                 Double rohstoffkostennormalundexpress = new Double(rohstoffbestellungexpress.doubleValue() + rohstoffbestellungnormal.doubleValue());
247                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_FINANZIERUNGROHSTOFFENORMALUNDEXPRESS_KEY);
248                 wert1.setObjectWert(new Double(-rohstoffkostennormalundexpress.doubleValue()));
249                 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
250 
251                 //              Tab. 20 (321)
252                 /* produzierte Produktart aus Entscheidungsblatt kopieren */
253                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_ENTSCHEIDUNGPRODUKTART_KEY);
254                 Integer produzierteProduktart = (Integer) wert1.getObjectWert();
255                 wert2 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartalminus1, Constants.EF_GRUNDDATENMAXIMALMOEGLICHEPRODUKTARTFOLGEQUARTAL_KEY);
256                 Integer maximaleProduktartVQ = (Integer) wert2.getObjectWert();
257                 wert2 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_GRUNDDATENPRODUZIERTEPRODUKTART_KEY);
258                 if (produzierteProduktart.intValue() > maximaleProduktartVQ.intValue())
259                 {
260                     wert2.setObjectWert(maximaleProduktartVQ);
261                 }
262                 else
263                 {
264                     wert2.setObjectWert(produzierteProduktart);
265                 }
266                 CommonCalculation.WertEintragen(wert2, gruppennummer, new Integer(quartal.intValue() + 1));
267 
268                 //              Tab. 21 (21)
269                 /* Forschung und Entwicklung */
270                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_ENTSCHEIDUNGFUNDE_KEY);
271                 wert2 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_ERFOLGSRECHNUNGFORSCHUNGSUNDENTWICKLUNGSKOSTEN_KEY);
272                 Double fundeKosten = new Double(- ((Integer) wert1.getObjectWert()).doubleValue() * 1000.0);
273                 wert2.setObjectWert(fundeKosten);
274                 CommonCalculation.WertEintragen(wert2, gruppennummer, new Integer(quartal.intValue() + 1));
275 
276                 //              Tab. 23 (13)
277                 /* Kapitalerhöhung aus VQ kopieren */
278                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartalminus1, Constants.EF_VERMOEGENSRECHNUNGKAPITALERHOEHUNG_KEY);
279                 wert2 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_FINANZIERUNGKAPITALERHOEHUNG_KEY);
280                 Double kapitalerhoehung = (Double) wert1.getObjectWert();
281                 wert2.setObjectWert(kapitalerhoehung);
282                 CommonCalculation.WertEintragen(wert2, gruppennummer, new Integer(quartal.intValue() + 1));
283 
284                 //              Tab. 23 (14)
285                 /* Kasse aus VQ kopieren */
286                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartalminus1, Constants.EF_VERMOEGENSRECHNUNGKASSE_KEY);
287                 wert2 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_FINANZIERUNGKASSE_KEY);
288                 Double kasse = (Double) wert1.getObjectWert();
289                 wert2.setObjectWert(kasse);
290                 CommonCalculation.WertEintragen(wert2, gruppennummer, new Integer(quartal.intValue() + 1));
291 
292                 //              Tab. 23 (15)
293                 /* unverzinsliche Verbindlichkeiten aus VQ kopieren */
294                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartalminus1, Constants.EF_VERMOEGENSRECHNUNGUNVERZINSLICHEVERBINDLICHKEITEN_KEY);
295                 wert2 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_FINANZIERUNGUNVERZINSLICHEVERBINDLICHKEITEN_KEY);
296                 Double unverzinslicheVerbindlichkeiten = (Double) wert1.getObjectWert();
297                 wert2.setObjectWert(unverzinslicheVerbindlichkeiten);
298                 CommonCalculation.WertEintragen(wert2, gruppennummer, new Integer(quartal.intValue() + 1));
299 
300                 //              Qualitätssicherung Real
301                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_ENTSCHEIDUNGQUALITAETSSICHERUNG_KEY);
302                 Double qualitaetssicherungReal = new Double(Produktion.qualtaetssicherungReal(((Double) wert1.getObjectWert()).doubleValue(), inflationsindex.doubleValue()));
303                 if (log.isDebugEnabled())
304                 {
305                     log.debug(" Qualitaetssicherung Real : '" + qualitaetssicherungReal.toString() + "'");
306                 }
307 
308                 //              Fehleranteil
309                 Double fehleranteil = new Double(Produktion.fehleranteil(qualitaetssicherungReal.doubleValue(), qualitaetssicherungTabelle));
310                 if (log.isDebugEnabled())
311                 {
312                     log.debug(" Fehleranteil : '" + fehleranteil.toString() + "'");
313                 }
314 
315                 //              Ausschussanteil
316                 Double ausschussanteil = new Double(Produktion.ausschuss(fehleranteil.doubleValue()));
317                 if (log.isDebugEnabled())
318                 {
319                     log.debug(" Ausschussanteil : '" + ausschussanteil.toString() + "'");
320                 }
321 
322                 //              nominale Produktionsmenge (Vorwert mit Entscheidung Produktionsmenge muss sp&auml;ter mit guter Produktionsmenge erneut berechnet werden.)
323                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_ENTSCHEIDUNGPRODUKTIONSMENGE_KEY);
324                 Double nominaleProduktionsmenge = new Double(Produktion.produktionsmengeNominal(((Integer) wert1.getObjectWert()).doubleValue() * 1000.0, ausschussanteil.doubleValue()));
325 
326                 //              Rohstoffverbrauch pro Stueck
327                 //              ERZEUGT Objekt "produzierteStufe" das noch &ouml;fter verwendet wird.
328                 ProduktartAbhaengigkeiten produzierteStufe = null;
329                 for (int i = 0; i < produktArtAbhaengigkeitenTabelle.size(); i++)
330                 {
331                     produzierteStufe = (ProduktartAbhaengigkeiten) produktArtAbhaengigkeitenTabelle.get(i);
332 
333                     if (produzierteStufe.getProduktart() == produzierteProduktart.intValue())
334                     {
335                         break;
336                     }
337                     else
338                     {
339                         produzierteStufe = null;
340                     }
341 
342                 }
343 
344                 if (produzierteStufe == null)
345                 {
346                     log.error(" Produzierte Stufe nicht gefunden !!! (" + produzierteProduktart + ")");
347                 }
348 
349                 Double rohstoffverbrauchStueck = new Double(produzierteStufe.getRohstoffverbrauch());
350 
351                 //              Menge an Rohstoffen per Express
352                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartalminus1, Constants.EF_GRUNDDATENROHSTOFFPREIS_KEY);
353                 Double mengeRohstoffeExpress = new Double(0.0);
354                 if (rohstoffbestellungexpress.doubleValue() > 0.0)
355                 {
356                     mengeRohstoffeExpress = new Double(rohstoffbestellungexpress.doubleValue() / Produktion.rohstoffpreis(((Double) wert1.getObjectWert()).doubleValue(), inflationsindex.doubleValue()));
357                 }
358 
359                 //              Tab. 20 (314)
360                 /* gute Produktionsmenge */
361                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartalminus1, Constants.EF_GRUNDDATENROHSTOFFLAGERBESTANDQUARTALSENDE_KEY);
362                 Double rohstofflagerbestandVQ = (Double) wert1.getObjectWert();
363                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_ENTSCHEIDUNGPRODUKTIONSMENGE_KEY);
364                 Double guteProduktionsmenge = new Double(0.0);
365                 if ((nominaleProduktionsmenge.doubleValue() * rohstoffverbrauchStueck.doubleValue()) <= (rohstofflagerbestandVQ.doubleValue() + mengeRohstoffeExpress.doubleValue()))
366                 {
367                     guteProduktionsmenge = new Double(((Integer) wert1.getObjectWert()).doubleValue() * 1000.0);
368                 }
369                 else
370                 {
371                     guteProduktionsmenge = new Double(((rohstofflagerbestandVQ.doubleValue() + mengeRohstoffeExpress.doubleValue()) / rohstoffverbrauchStueck.doubleValue()) * (1.0 - (ausschussanteil.doubleValue() / 100.0)));
372                 }
373 
374                 wert2 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_GRUNDDATENGUTEPRODUKTIONSMENGE_KEY);
375                 wert2.setObjectWert(guteProduktionsmenge);
376                 CommonCalculation.WertEintragen(wert2, gruppennummer, new Integer(quartal.intValue() + 1));
377 
378                 //              Tab. 20 (212)
379                 /* realer Verkaufspreis */
380                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_GRUNDDATENVERKAUFSPREISREAL_KEY);
381                 Double verkaufspreisReal = new Double(Vertrieb.realerPreis(verkaufspreisNominell.doubleValue(), inflationsindex.doubleValue()));
382                 wert1.setObjectWert(verkaufspreisReal);
383                 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
384 
385                 //               realer Marketingaufwand
386                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_ENTSCHEIDUNGMARKETING_KEY);
387                 Double marketingaufwandNominell = new Double(((Integer) wert1.getObjectWert()).doubleValue() * 1000.0);
388                 wert2 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_GRUNDDATENREALERMARKETINGAUFWAND_KEY);
389                 Double marketingaufwandReal = new Double(Vertrieb.realesMarketing(marketingaufwandNominell.doubleValue(), inflationsindex.doubleValue()));
390                 wert2.setObjectWert(marketingaufwandReal);
391                 CommonCalculation.WertEintragen(wert2, gruppennummer, new Integer(quartal.intValue() + 1));
392 
393                 //              Tab. 20 (244)
394                 /* wirksame Marketingkosten */
395                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartalminus1, Constants.EF_GRUNDDATENWIRKSAMEMARKETINGKOSTEN_KEY);
396                 Double wirksameMarketingkostenVQ = (Double) wert1.getObjectWert();
397                 voreinstellung1 = CommonCalculation.SucheVoreinstellungFeldname(allgemein, Constants.VF_ALLGEMEINEVOREINSTELLUNGENNACHHALLEFFEKT_KEY);
398                 Double nachhalleffekt = new Double(((Double) voreinstellung1.getWertObject()).doubleValue() / 100.0);
399                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_GRUNDDATENWIRKSAMEMARKETINGKOSTEN_KEY);
400                 Double wirksameMarketingkosten = new Double(Vertrieb.wirksamesMarketing(nachhalleffekt.doubleValue(), marketingaufwandReal.doubleValue(), wirksameMarketingkostenVQ.doubleValue()));
401                 wert1.setObjectWert(wirksameMarketingkosten);
402                 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
403 
404                 //              Tab. 22 (24)
405                 /* Forschung und Entwicklung Real */
406                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_ENTSCHEIDUNGFUNDE_KEY);
407                 wert2 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_GRUNDDATENFORSCHUNGUNDENTWICKLUNGREAL_KEY);
408                 Double fundeReal = new Double(Finanzierung.realeForschungUndEntwicklung(((Integer) wert1.getObjectWert()).doubleValue() * 1000.0, inflationsindex.doubleValue()));
409                 wert2.setObjectWert(fundeReal);
410                 CommonCalculation.WertEintragen(wert2, gruppennummer, new Integer(quartal.intValue() + 1));
411 
412                 //              Tab. 20 (322)
413                 /* Forschung und Entwicklung Wirksam */
414                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartalminus1, Constants.EF_GRUNDDATENFORSCHUNGUNDENTWICKLUNGREAL_KEY);
415                 Double fundeRealVQ = (Double) wert1.getObjectWert();
416                 if (fundeRealVQ == null)
417                 {
418                     fundeRealVQ = new Double(0.0);
419                 }
420                 wert2 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_GRUNDDATENFORSCHUNGUNDENTWICKLUNGWIRKSAM_KEY);
421                 Double fundeWirksam = new Double(Finanzierung.wirksameForschungUndEntwicklung(nachhalleffekt.doubleValue(), fundeRealVQ.doubleValue(), fundeReal.doubleValue()));
422                 wert2.setObjectWert(fundeWirksam);
423                 CommonCalculation.WertEintragen(wert2, gruppennummer, new Integer(quartal.intValue() + 1));
424 
425                 //              Tab. 20 (311)
426                 /* Nominale Produktionsmenge inklusive Ausschuss */
427                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_GRUNDDATENNOMINALEPRODUKTIONSMENGE_KEY);
428                 nominaleProduktionsmenge = new Double(Produktion.produktionsmengeNominal(guteProduktionsmenge.doubleValue(), ausschussanteil.doubleValue()));
429                 wert1.setObjectWert(nominaleProduktionsmenge);
430                 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
431 
432                 //              Tab. 20 (312)
433                 /* nachbearbeitbare Produktionsmenge */
434                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_GRUNDDATENNACHBEARBEITETEPRODUKTIONSMENGE_KEY);
435                 Double nachbearbeitbareProduktionsmenge = new Double(Produktion.produktionsmengeNacharbeitbar(nominaleProduktionsmenge.doubleValue(), fehleranteil.doubleValue()));
436                 wert1.setObjectWert(nachbearbeitbareProduktionsmenge);
437                 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
438 
439                 //              Tab. 20 (313)
440                 /* fehlerhafte Produktionsmenge */
441                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_GRUNDDATENFEHLERHAFTEPRODUKTIONSMENGE_KEY);
442                 Double fehlerhafteProduktionsmenge = new Double(Produktion.produktionsmengeFehlerhaft(nominaleProduktionsmenge.doubleValue(), fehleranteil.doubleValue()));
443                 wert1.setObjectWert(fehlerhafteProduktionsmenge);
444                 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
445 
446                 //              Marketingeffekt
447                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartalminus1, Constants.EF_ERFOLGSRECHNUNGUMSATZERLOESE_KEY);
448                 Double umsatzerloeseVQ = (Double) wert1.getObjectWert();
449                 wert2 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_ALLGEMEINMARKETINGEFFEKT_KEY);
450                 Double marketingEffekt = new Double(Vertrieb.marketingEffekt(wirksameMarketingkosten.doubleValue(), umsatzerloeseVQ.doubleValue(), marketingTabelle));
451                 wert2.setObjectWert(marketingEffekt);
452                 CommonCalculation.WertEintragen(wert2, gruppennummer, new Integer(quartal.intValue() + 1));
453 
454                 //              Temporäres ermitteln des Produktarteffekts
455                 Double produktarteffekt = new Double(produzierteStufe.getProduktarteffekt() / 100.0);
456 
457                 //              Tab. 20 (213)
458                 /* wirksamer Verkaufspreis */
459                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartalminus1, Constants.EF_GRUNDDATENVERKAUFSPREISREAL_KEY);
460                 Double verkaufspreisRealVQ = (Double) wert1.getObjectWert();
461                 wert2 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_GRUNDDATENVERKAUFSPREISWIRKSAM_KEY);
462                 Double verkaufspreisWirksam = new Double(Vertrieb.wirksamerPreis(verkaufspreisReal.doubleValue(), verkaufspreisRealVQ.doubleValue(), produktarteffekt.doubleValue(), marketingEffekt.doubleValue()));
463                 wert2.setObjectWert(verkaufspreisWirksam);
464                 CommonCalculation.WertEintragen(wert2, gruppennummer, new Integer(quartal.intValue() + 1));
465 
466                 synchronized (lock)
467                 {
468                     if (log.isDebugEnabled())
469                     {
470                         log.debug(" Waiting for other Threads to finish. " + getName());
471                     }
472 
473                     // Inkrementiere Semaphore, Warte auf Freigabe, Vater wartet bis semaphor == Threadcount - 1
474                     lock.incrementSemaphore();
475                     // Warte auf NotifyAll bzw 60 Minuten.
476                     lock.wait(3600000);
477                     // Dekrementiere Semaphore, Arbeite weiter
478                     lock.decrementSemaphore();
479 
480                     if (log.isDebugEnabled())
481                     {
482                         log.debug(" Other Threads finished. Continuing. " + getName());
483                     }
484                 }
485 
486                 //              Tabellen f&uuml;r die wirksamen Preise aller Unternehmen
487                 ArrayList wirksamePreiseTabelle = ErstelleDatentabellen.WirksamerPreisTabelle(projektnummer, new Integer(quartal.intValue() + 1));
488 
489                 //              Preis Absatz Ibnterpolation
490                 Double pafAbsatzWert = new Double(Vertrieb.pafAbsatz(verkaufspreisWirksam.doubleValue(), preisAbsatzTabelle));
491                 if (log.isDebugEnabled())
492                 {
493                     log.debug(" PAF AbsatzS : '" + pafAbsatzWert.toString() + "'");
494                 }
495 
496                 //              Korrekturfaktor
497                 Double korrekturfaktor = new Double(Vertrieb.korrekturfaktor(wirksamePreiseTabelle, gruppennummer));
498                 if (log.isDebugEnabled())
499                 {
500                     log.debug(" Korrekturfaktor : '" + korrekturfaktor.toString() + "'");
501                 }
502 
503                 //              Sainsonindex
504                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_GRUNDDATENSAISONINDEX_KEY);
505                 Double sainsonindex = new Double(((Double) wert1.getObjectWert()).doubleValue() / 100.0);
506 
507                 //              Konjunkturindex
508                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_GRUNDDATENKONJUNKTURINDEX_KEY);
509                 Double konjunkturindex = new Double(((Double) wert1.getObjectWert()).doubleValue() / 100.0);
510 
511                 //              Tab. 20 (221)
512                 /* absetzbare Menge VorWert für Erstellung des Arrays tabAbsetzbareMengen */
513                 voreinstellung1 = CommonCalculation.SucheVoreinstellungFeldname(allgemein, Constants.VF_ALLGEMEINEVOREINSTELLUNGENABHAENGIGEPREISE_KEY);
514                 Integer preisAbhaengigAb = (Integer) voreinstellung1.getWertObject();
515                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_GRUNDDATENABSETZBAREMENGE_KEY);
516                 Double absetzbareMenge = new Double(0.0);
517                 if ((quartal.intValue() + 1) >= preisAbhaengigAb.intValue())
518                 {
519                     absetzbareMenge = new Double(Vertrieb.mengeAbsetzbar(pafAbsatzWert.doubleValue(), konjunkturindex.doubleValue(), sainsonindex.doubleValue(), korrekturfaktor.doubleValue()));
520                 }
521                 else
522                 {
523                     absetzbareMenge = new Double(Vertrieb.mengeAbsetzbar(pafAbsatzWert.doubleValue(), konjunkturindex.doubleValue(), sainsonindex.doubleValue(), 1.0));
524                 }
525                 wert1.setObjectWert(absetzbareMenge);
526                 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
527 
528                 //              Frtigprodukte Gesamt
529                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartalminus1, Constants.EF_GRUNDDATENLAGERMENGEFERTIGPRODUKTE_KEY);
530                 Double lagerbestandFertigprodukteVQ = (Double) wert1.getObjectWert();
531                 wert2 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_ALLGEMEINFERTIGPRODUKTEGESAMT_KEY);
532                 Double fertigprodukteGesamt = new Double(Vertrieb.fertigProdukteGesamt(guteProduktionsmenge.doubleValue(), lagerbestandFertigprodukteVQ.doubleValue()));
533                 wert2.setObjectWert(fertigprodukteGesamt);
534                 CommonCalculation.WertEintragen(wert2, gruppennummer, new Integer(quartal.intValue() + 1));
535 
536                 //              Tab. 20 (225)
537                 /* Lieferdezit VorWert für Erstellung des Arrays tabDefizite */
538                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_GRUNDDATENLIEFERDEFIZIT_KEY);
539                 Double lieferdefizit = new Double(Vertrieb.defizit(fertigprodukteGesamt.doubleValue(), absetzbareMenge.doubleValue()));
540                 wert1.setObjectWert(lieferdefizit);
541                 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
542 
543                 synchronized (lock)
544                 {
545                     if (log.isDebugEnabled())
546                     {
547                         log.debug(" Waiting for other Threads to finish. " + getName());
548                     }
549 
550                     // Inkrementiere Semaphore, Warte auf Freigabe, Vater wartet bis semaphor == Threadcount - 1
551                     lock.incrementSemaphore();
552                     // Warte auf NotifyAll bzw 60 Minuten.
553                     lock.wait(3600000);
554                     // Dekrementiere Semaphore, Arbeite weiter
555                     lock.decrementSemaphore();
556 
557                     if (log.isDebugEnabled())
558                     {
559                         log.debug(" Other Threads finished. Continuing. " + getName());
560                     }
561                 }
562 
563                 //              Tabellen f&uuml;r die Zahl der Fertigprodukte aller Unternehmen
564                 ArrayList fertigProdukteTabelle = ErstelleDatentabellen.FertigProdukteTabelle(projektnummer, new Integer(quartal.intValue() + 1));
565                 //              Tabellen f&uuml;r die absetzbare Menge aller Unternehmen
566                 ArrayList absetzbareMengenTabelle = ErstelleDatentabellen.AbsetzbareMengenTabelle(projektnummer, new Integer(quartal.intValue() + 1));
567 
568                 //              GesamtDefizitBranche
569                 //              ArrayList defiziteTabelle = ErstelleDatentabellen.DefiziteTabelle(projektnummer, new Integer(quartal.intValue() + 1));
570                 //              Double gesamtLieferdefizitBranche = new Double(Vertrieb.gesamtdefizit(defiziteTabelle, gruppennummer));
571 
572                 //              Zus&auml;tzlicher Absatz durch Defizite anderer Unternehmen
573                 Double defizitAndererUnternehmenWert = new Double(Vertrieb.defizitAndererUnternehmen(fertigProdukteTabelle, absetzbareMengenTabelle, gruppennummer));
574                 if (log.isDebugEnabled())
575                 {
576                     log.debug(" Defizit anderer Unternehmen : '" + defizitAndererUnternehmenWert.toString() + "'");
577                 }
578 
579                 //              Tab. 20 (222)
580                 /* Davon wegen Defizites anderer Unternehmen */
581                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_GRUNDDATENABSETZBAREMENGEWEGENDEFIZIT_KEY);
582                 Double wegenDefizitAndererUnternehmen = new Double(0.0);
583                 if ((quartal.intValue() + 1) >= preisAbhaengigAb.intValue())
584                 {
585                     wegenDefizitAndererUnternehmen = defizitAndererUnternehmenWert;
586                 }
587                 else
588                 {
589                     wegenDefizitAndererUnternehmen = new Double(0.0);
590                 }
591                 wert1.setObjectWert(wegenDefizitAndererUnternehmen);
592                 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
593 
594                 //              Tab. 20 (221)
595                 /* Endgültiger Wert der absetzbaren Menge unter Defizitberücksichtigung und Korrekturfaktor (falls nötig) */
596                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_GRUNDDATENABSETZBAREMENGE_KEY);
597                 if ((quartal.intValue() + 1) >= preisAbhaengigAb.intValue())
598                 {
599                     absetzbareMenge = new Double(Vertrieb.mengeAbsetzbarInklusiveZusaetzlichemAbsatzDurchDefizitAndererUnternehmen(pafAbsatzWert.doubleValue(), konjunkturindex.doubleValue(), sainsonindex.doubleValue(), korrekturfaktor.doubleValue(), defizitAndererUnternehmenWert.doubleValue()));
600                 }
601                 else
602                 {
603                     absetzbareMenge = new Double(Vertrieb.mengeAbsetzbarInklusiveZusaetzlichemAbsatzDurchDefizitAndererUnternehmen(pafAbsatzWert.doubleValue(), konjunkturindex.doubleValue(), sainsonindex.doubleValue(), 1.0, defizitAndererUnternehmenWert.doubleValue()));
604                 }
605                 wert1.setObjectWert(absetzbareMenge);
606                 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
607 
608                 //              Tab. 20 (223)
609                 /* Minderabsatz wegen zu hohem Preis (wenn Preis ab XX Quartal abhängig) */
610                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_GRUNDDATENMINDERABSATZWEGENHOHEMPREIS_KEY);
611                 Double minderAbsatz = new Double(0.0);
612                 if ((quartal.intValue() + 1) >= preisAbhaengigAb.intValue())
613                 {
614                     minderAbsatz = new Double(Vertrieb.minderAbsatz(sainsonindex.doubleValue(), konjunkturindex.doubleValue(), pafAbsatzWert.doubleValue(), korrekturfaktor.doubleValue()));
615                 }
616                 else
617                 {
618                     minderAbsatz = new Double(0.0);
619                 }
620                 wert1.setObjectWert(minderAbsatz);
621                 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
622 
623                 //              Tab. 20 (225)
624                 /* Endgültiger Wert des Lieferdefizites nach Neuermittlung der absetzbaren Menge mit den Defiziten der anderen Unternehmen */
625                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_GRUNDDATENLIEFERDEFIZIT_KEY);
626                 lieferdefizit = new Double(Vertrieb.defizit(fertigprodukteGesamt.doubleValue(), absetzbareMenge.doubleValue()));
627                 wert1.setObjectWert(lieferdefizit);
628                 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
629 
630                 //              Tab. 20 (224)
631                 /* Abgesetzte Menge an Fertigprodukten */
632                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_GRUNDDATENABGESETZTEMENGE_KEY);
633                 Double abgesetzteMenge = new Double(Vertrieb.tatsaechlicherAbsatz(absetzbareMenge.doubleValue(), fertigprodukteGesamt.doubleValue()));
634                 wert1.setObjectWert(abgesetzteMenge);
635                 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
636 
637                 //              Tab. 21 (11)
638                 /* Umsatzerlösen aus abgesetzten Fertigprodukten */
639                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_ERFOLGSRECHNUNGUMSATZERLOESE_KEY);
640                 Double umsatzerloese = new Double(Vertrieb.umsatz(abgesetzteMenge.doubleValue(), verkaufspreisNominell.doubleValue()));
641                 wert1.setObjectWert(umsatzerloese);
642                 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
643 
644                 synchronized (lock)
645                 {
646                     if (log.isDebugEnabled())
647                     {
648                         log.debug(" Waiting for other Threads to finish. " + getName());
649                     }
650 
651                     // Inkrementiere Semaphore, Warte auf Freigabe, Vater wartet bis semaphor == Threadcount - 1
652                     lock.incrementSemaphore();
653                     // Warte auf NotifyAll bzw. 60 Minuten.
654                     lock.wait(3600000);
655                     // Dekrementiere Semaphore, Arbeite weiter
656                     lock.decrementSemaphore();
657 
658                     if (log.isDebugEnabled())
659                     {
660                         log.debug(" Other Threads finished. Continuing. " + getName());
661                     }
662                 }
663 
664                 //              Tabellen f&uuml;r die tats&auml;chliche Absatzmenge aller Unternehmen
665                 ArrayList tatsaechlicherAbsatzTabelle = ErstelleDatentabellen.TatsaechlicherAbsatzTabelle(projektnummer, new Integer(quartal.intValue() + 1));
666                 //              Tabellen f&uuml;r die Umsatzerl&ouml;se aller Unternehmen
667                 ArrayList umsatzTabelle = ErstelleDatentabellen.UmsatzTabelle(projektnummer, new Integer(quartal.intValue() + 1));
668                 //              Tabellen f&uuml;r die Lizenzk&auml;ufe und Verk&auml;ufe aller Unternehmen
669                 ArrayList lizenzverkaufTabelle = ErstelleDatentabellen.LizenzverkaufTabelle(projektnummer, new Integer(quartal.intValue() + 1));
670 
671                 //              Tab. 20 (241)
672                 /* Der Marktanteil */
673                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_GRUNDDATENMARKTANTEIL_KEY);
674                 Double marktanteil = new Double(Vertrieb.marktAnteil(tatsaechlicherAbsatzTabelle, gruppennummer));
675                 wert1.setObjectWert(marktanteil);
676                 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
677 
678                 //              Tab. 20 (242)
679                 /* Der Umsatzanteil */
680                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_GRUNDDATENUMSATZANTEIL_KEY);
681                 Double umsatzanteil = new Double(Vertrieb.umsatzAnteil(umsatzTabelle, gruppennummer));
682                 wert1.setObjectWert(umsatzanteil);
683                 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
684 
685                 //              Tab. 20 (231)
686                 /* Lagerzugang an Fertigprodukten in Stück */
687                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_GRUNDDATENLAGERZUGANGFERTIGPRODUKTE_KEY);
688                 Double lagerzugangFertigprodukte = new Double(Vertrieb.lagerZugangFertigprodukteStueck(absetzbareMenge.doubleValue(), guteProduktionsmenge.doubleValue()));
689                 wert1.setObjectWert(lagerzugangFertigprodukte);
690                 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
691 
692                 //              Tab. 20 (232)
693                 /* Lagerabgang an Fertigprodukten in Stück */
694                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_GRUNDDATENLAGERABGANGFERTIGPRODUKTE_KEY);
695                 Double lagerabgangFertigprodukte = new Double(Vertrieb.lagerAbgangFertigprodukteStueck(absetzbareMenge.doubleValue(), guteProduktionsmenge.doubleValue(), lagerbestandFertigprodukteVQ.doubleValue()));
696                 wert1.setObjectWert(lagerabgangFertigprodukte);
697                 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
698 
699                 //              Tab. 20 (233)
700                 /* Lagerbestand an Fertigprodukten in Stück */
701                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_GRUNDDATENLAGERMENGEFERTIGPRODUKTE_KEY);
702                 Double lagermengeFertigprodukte = new Double(Vertrieb.lagerBestandFertigprodukteStueck(lagerbestandFertigprodukteVQ.doubleValue(), lagerabgangFertigprodukte.doubleValue(), lagerzugangFertigprodukte.doubleValue()));
703                 wert1.setObjectWert(lagermengeFertigprodukte);
704                 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
705 
706                 //              Nacharbeitsaufwand
707                 voreinstellung1 = CommonCalculation.SucheVoreinstellungFeldname(allgemein, Constants.VF_ALLGEMEINEVOREINSTELLUNGENNACHARBEITSAUFWAND_KEY);
708                 Double nacharbeitsaufwand = new Double(1.0 + (((Double) voreinstellung1.getWertObject()).doubleValue() / 100.0));
709                 //                Double nacharbeitsaufwand =  new Double(((Double) voreinstellung1.getWertObject()).doubleValue() / 100.0);
710                 if (log.isDebugEnabled())
711                 {
712                     log.debug(" Nacharbeitsaufwand : '" + nacharbeitsaufwand.toString() + "'");
713                 }
714 
715                 //              Fertigungszeit pro Fertigprodukt
716                 Double fertigungszeitproFertigprodukt = new Double(produzierteStufe.getFertigungszeit());
717                 if (log.isDebugEnabled())
718                 {
719                     log.debug(" Fertigungszeit pro Fertigprodukt : '" + fertigungszeitproFertigprodukt.toString() + "'");
720                 }
721 
722                 //              Tab. 20 (331)
723                 /* Fertigungszeit pro "gutes" Stück */
724                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_GRUNDDATENFERTIGUNGSZEITPROSTUECK_KEY);
725                 Double fertigungszeitStueck = new Double(Produktion.fertigungsZeitGutesStueck(nominaleProduktionsmenge.doubleValue(), nachbearbeitbareProduktionsmenge.doubleValue(), guteProduktionsmenge.doubleValue(), fertigungszeitproFertigprodukt.doubleValue(), nacharbeitsaufwand.doubleValue()));
726                 wert1.setObjectWert(fertigungszeitStueck);
727                 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
728 
729                 //              Gesamte Fertigungszeit
730                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_GRUNDDATENFERTIGUNGSZEITGESAMT_KEY);
731                 Double fertigungszeitGesamt = new Double(Produktion.fertigungszeitGesamt(nominaleProduktionsmenge.doubleValue(), nachbearbeitbareProduktionsmenge.doubleValue(), fertigungszeitproFertigprodukt.doubleValue(), nacharbeitsaufwand.doubleValue()));
732                 wert1.setObjectWert(fertigungszeitGesamt);
733                 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
734 
735                 //              Tab. 20 (333)
736                 /* Die Kapazitätsauslastung in Prozent */
737                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartalminus1, Constants.EF_GRUNDDATENKAPAZITAETSBESTANDFOLGEQUARTAL_KEY);
738                 Double kapazitaetsbestandVQ = (Double) wert1.getObjectWert();
739                 wert2 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_GRUNDDATENKAPAZITAETSAUSLASTUNG_KEY);
740                 Double kapazitaetsauslastung = new Double(Produktion.kapazitaetsauslastung(fertigungszeitGesamt.doubleValue(), kapazitaetsbestandVQ.doubleValue()) * 100.0);
741                 wert2.setObjectWert(kapazitaetsauslastung);
742                 CommonCalculation.WertEintragen(wert2, gruppennummer, new Integer(quartal.intValue() + 1));
743 
744                 //              Rohstoffpreis
745                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartalminus1, Constants.EF_GRUNDDATENROHSTOFFPREIS_KEY);
746                 Double rohstoffpreisVQ = (Double) wert1.getObjectWert();
747                 wert2 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_GRUNDDATENROHSTOFFPREIS_KEY);
748                 Double rohstoffpreis = new Double(Produktion.rohstoffpreis(rohstoffpreisVQ.doubleValue(), inflationsindex.doubleValue()));
749                 wert2.setObjectWert(rohstoffpreis);
750                 CommonCalculation.WertEintragen(wert2, gruppennummer, new Integer(quartal.intValue() + 1));
751 
752                 //              Tab. 20 (411)
753                 /* Der Rohstoffkauf in Stück */
754                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_GRUNDDATENROHSTOFFKAUFNORMALUNDEXPRESS_KEY);
755                 Double rohstoffkaufNormalExpress = new Double((rohstoffbestellungnormal.doubleValue() + rohstoffbestellungexpress.doubleValue()) / rohstoffpreis.doubleValue());
756                 wert1.setObjectWert(rohstoffkaufNormalExpress);
757                 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
758 
759                 //              Tab. 20 (412)
760                 /* Der Rohstoffverbrauch im Quartal in Stück */
761                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_GRUNDDATENROHSTOFFVERBRAUCHQUARTAL_KEY);
762                 Double rohstoffverbrauchQuartal = new Double(Produktion.rohstoffverbrauch(nominaleProduktionsmenge.doubleValue(), rohstoffverbrauchStueck.doubleValue()));
763                 wert1.setObjectWert(rohstoffverbrauchQuartal);
764                 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
765 
766                 //              Tab. 20 (413)
767                 /* Der Rohstoflagerbestand am Quartalsende in Stück */
768                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartalminus1, Constants.EF_GRUNDDATENROHSTOFFLAGERBESTANDQUARTALSENDE_KEY);
769                 Double rohstofflagerbestandQuartalsendeVQ = (Double) wert1.getObjectWert();
770                 wert2 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_GRUNDDATENROHSTOFFLAGERBESTANDQUARTALSENDE_KEY);
771                 Double rohstofflagerbestandQuartalsende = new Double(Produktion.rohstoffLagerBestand(rohstofflagerbestandVQ.doubleValue(), rohstoffverbrauchQuartal.doubleValue(), rohstoffkaufNormalExpress.doubleValue()));
772                 wert2.setObjectWert(rohstofflagerbestandQuartalsende);
773                 CommonCalculation.WertEintragen(wert2, gruppennummer, new Integer(quartal.intValue() + 1));
774 
775                 //              Tab. 20 (414)
776                 /* Der Wert der im Lager befindlichen Rohstoffe am Quartalsende */
777                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartalminus1, Constants.EF_GRUNDDATENROHSTOFFWERTQUARTALSENDE_KEY);
778                 Double rohstoffwertQuartalsendeVQ = (Double) wert1.getObjectWert();
779                 wert2 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_GRUNDDATENROHSTOFFWERTQUARTALSENDE_KEY);
780                 Double rohstoffwertQuartalsende = new Double(Produktion.rohstoffwert(rohstoffkaufNormalExpress.doubleValue(), rohstofflagerbestandQuartalsendeVQ.doubleValue(), rohstoffverbrauchQuartal.doubleValue(), rohstoffwertQuartalsendeVQ.doubleValue(), rohstoffpreis.doubleValue()));
781                 wert2.setObjectWert(rohstoffwertQuartalsende);
782                 CommonCalculation.WertEintragen(wert2, gruppennummer, new Integer(quartal.intValue() + 1));
783 
784                 //              Tab. 21 (25)
785                 /* Die Qualitätssicherungskosten */
786                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_ENTSCHEIDUNGQUALITAETSSICHERUNG_KEY);
787                 Double qualitaetssicherungNominal = (Double) wert1.getObjectWert();
788                 wert2 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_ERFOLGSRECHNUNGQUALITAETSSICHERUNGSKOSTEN_KEY);
789                 Double qualitaetssicherungskosten = new Double(-Produktion.qualitaetssicherungGesamt(nominaleProduktionsmenge.doubleValue(), qualitaetssicherungNominal.doubleValue()));
790                 wert2.setObjectWert(qualitaetssicherungskosten);
791                 CommonCalculation.WertEintragen(wert2, gruppennummer, new Integer(quartal.intValue() + 1));
792 
793                 //              Fertigungszeit ohne Überstunden und ohne Nacharbeit
794                 Double fertigungszeitOhneUeberstundenUndNacharbeit = new Double(Produktion.fertigungszeitOhneUeberstundenOhneNacharbeit(nominaleProduktionsmenge.doubleValue(), fertigungszeitproFertigprodukt.doubleValue()));
795                 if (log.isDebugEnabled())
796                 {
797                     log.debug(" Fertigungszeit ohne Ueberstunden und ohne Nacharbeit : '" + fertigungszeitOhneUeberstundenUndNacharbeit.toString() + "'");
798                 }
799 
800                 //              Fertigungszeit in Nacharbeit und ohne Überstunden
801                 Double nacharbeitszeitOhneUeberstunden = new Double(Produktion.nacharbeitsZeitOhneUeberstunden(nachbearbeitbareProduktionsmenge.doubleValue(), fertigungszeitproFertigprodukt.doubleValue(), nacharbeitsaufwand.doubleValue() - 1.0));
802                 if (log.isDebugEnabled())
803                 {
804                     log.debug(" Nacharbeitszeit ohne Ueberstunden : '" + nacharbeitszeitOhneUeberstunden.toString() + "'");
805                 }
806 
807                 //              Fertigungszeit Gesamt-Fertigungslohnkosten
808                 Double fertigungszeitGesamtFLK = new Double(Produktion.fertigungszeitGesamtFertigungsLohnKosten(nominaleProduktionsmenge.doubleValue(), fertigungszeitproFertigprodukt.doubleValue(), nachbearbeitbareProduktionsmenge.doubleValue()));
809                 if (log.isDebugEnabled())
810                 {
811                     log.debug(" Fertigungszeit Gesamt FLK : '" + fertigungszeitGesamtFLK.toString() + "'");
812                 }
813 
814                 //              Lohnkosten
815                 voreinstellung1 = CommonCalculation.SucheVoreinstellungFeldname(allgemein, Constants.VF_ALLGEMEINEVOREINSTELLUNGENBASISLOHNKOSTEN_KEY);
816                 Double grundlohnkosten = (Double) voreinstellung1.getWertObject();
817                 Double lohnkosten = new Double(((Double) voreinstellung1.getWertObject()).doubleValue() * lohnerhoehungssindex.doubleValue());
818 
819                 //              Normalkapazitaet
820                 Double normalkapazitaet = new Double(Produktion.normalkapazitaet(kapazitaetsauslastung.doubleValue(), kapazitaetsbestandVQ.doubleValue()));
821                 if (log.isDebugEnabled())
822                 {
823                     log.debug(" Normalkapazitaet : '" + normalkapazitaet.toString() + "'");
824                 }
825 
826                 //              Tab. 21 (261)
827                 /* Neue Aufteilung FLK - davon FLK ohne Überstunden und Nacharbeit */
828                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_ERFOLGSRECHNUNGFLKOHNEUEBERSTUNDENUNDNACHARBEIT_KEY);
829                 Double flkOhneUeberstundenOhneNacharbeit = new Double(-Produktion.fertigungsLohnKostenOhneUeberstundenOhneNacharbeit(fertigungszeitOhneUeberstundenUndNacharbeit.doubleValue(), lohnkosten.doubleValue()));
830                 wert1.setObjectWert(flkOhneUeberstundenOhneNacharbeit);
831                 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
832 
833                 //              Tab. 21 (262)
834                 /* Neue Aufteilung FLK - davon Überstundenzuschläge auf (261) */
835                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_ERFOLGSRECHNUNGUEBERSTUNDENZUSCHLAEGEFLKOHNEUEBERSTUNDENUNDNACHARBEIT_KEY);
836                 Double ueberstundenzuschlaegeOhneNacharbeit = new Double(-Produktion.ueberstundenzuschlaegeFertigungsLohnKosten(fertigungszeitOhneUeberstundenUndNacharbeit.doubleValue(), normalkapazitaet.doubleValue(), lohnkosten.doubleValue()));
837                 wert1.setObjectWert(ueberstundenzuschlaegeOhneNacharbeit);
838                 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
839 
840                 //              Tab. 21 (263)
841                 /* Neue Aufteilung FLK - davon Nacharbeitskosten ohne Überstunden */
842                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_ERFOLGSRECHNUNGNACHARBEITSKOSTENOHNEUEBERSTUNDEN_KEY);
843                 Double nacharbeitslohnkostenOhneUeberstunden = new Double(-Produktion.nacharbeitslohnkostenOhneUeberstunden(nacharbeitszeitOhneUeberstunden.doubleValue(), lohnkosten.doubleValue()));
844                 wert1.setObjectWert(nacharbeitslohnkostenOhneUeberstunden);
845                 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
846 
847                 //              Tab. 21 (264)
848                 /* Neue Aufteilung FLK - davon Überstundenzuschläge auf (263) */
849                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_ERFOLGSRECHNUNGUEBERSTUNDENZUSCHLAEGENACHARBEITSKOSTENOHNEUEBERSTUNDEN_KEY);
850                 Double ueberstundenzuschlaegeNacharbeit = new Double(-Produktion.ueberstundenzuschlagNacharbeit(nacharbeitslohnkostenOhneUeberstunden.doubleValue(), fertigungszeitGesamt.doubleValue(), fertigungszeitOhneUeberstundenUndNacharbeit.doubleValue(), nacharbeitszeitOhneUeberstunden.doubleValue(), normalkapazitaet.doubleValue(), lohnkosten.doubleValue()));
851                 wert1.setObjectWert(ueberstundenzuschlaegeNacharbeit);
852                 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
853 
854                 //              Tab. 21 (26)
855                 /* Fertigungslohnkosten ohne Überstunden */
856                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_ERFOLGSRECHNUNGFERTIGUNGSLOHNKOSTEN_KEY);
857                 Double fertigungslohnkosten = new Double(flkOhneUeberstundenOhneNacharbeit.doubleValue() + ueberstundenzuschlaegeOhneNacharbeit.doubleValue() + nacharbeitslohnkostenOhneUeberstunden.doubleValue() + ueberstundenzuschlaegeNacharbeit.doubleValue());
858                 wert1.setObjectWert(fertigungslohnkosten);
859                 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
860 
861                 //              Tab. 20 (342)
862                 /* Qualitätskosten, davon Nacharbeitskosten */
863                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_GRUNDDATENQUALITAETSKOSTENNACHARBEITSLOHNKOSTEN_KEY);
864                 Double qualitaetskostenDavonNacharbeitskosten = new Double(-Produktion.lohnkosten(nacharbeitslohnkostenOhneUeberstunden.doubleValue(), ueberstundenzuschlaegeNacharbeit.doubleValue()));
865                 wert1.setObjectWert(qualitaetskostenDavonNacharbeitskosten);
866                 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
867 
868                 //              Ausschusskosten
869                 Double ausschusskosten = new Double(Produktion.ausschusskosten(nominaleProduktionsmenge.doubleValue(), ausschussanteil.doubleValue() / 100.0, fertigungszeitproFertigprodukt.doubleValue(), grundlohnkosten.doubleValue(), lohnerhoehungssindex.doubleValue(), rohstoffverbrauchStueck.doubleValue(), rohstoffwertQuartalsendeVQ.doubleValue(), kapazitaetsauslastung.doubleValue()));
870                 if (log.isDebugEnabled())
871                 {
872                     log.debug(" Ausschusskosten : '" + ausschusskosten.toString() + "'");
873                 }
874 
875                 //              Fehlerkosten
876                 Double fehlerkosten = new Double(Produktion.fehlerkosten(ausschusskosten.doubleValue(), qualitaetskostenDavonNacharbeitskosten.doubleValue()));
877                 if (log.isDebugEnabled())
878                 {
879                     log.debug(" Fehlerkosten : '" + fehlerkosten.toString() + "'");
880                 }
881 
882                 //              Tab. 20 (341)
883                 /* Qualitätskosten */
884                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_GRUNDDATENQUALITAETSKOSTEN_KEY);
885                 Double qualitaetskosten = new Double(Produktion.qualitaetskosten(nominaleProduktionsmenge.doubleValue(), inflationsindex.doubleValue(), qualitaetssicherungReal.doubleValue(), fehlerkosten.doubleValue()));
886                 wert1.setObjectWert(qualitaetskosten);
887                 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
888 
889                 //              Kosten pro Fertigprodukt
890                 Double kostenProFertigprodukt =
891                     new Double(Vertrieb.kostenProFertigprodukt(lohnkosten.doubleValue(), fertigungszeitStueck.doubleValue(), rohstoffverbrauchStueck.doubleValue(), fehleranteil.doubleValue(), rohstofflagerbestandVQ.doubleValue(), rohstoffbestellkostenexpress.doubleValue(), rohstofflagerbestandVQ.doubleValue() + (rohstoffbestellungexpress.doubleValue() / rohstoffpreis.doubleValue())));
892                 if (log.isDebugEnabled())
893                 {
894                     log.debug(" Kosten pro Fertigprodukt : '" + kostenProFertigprodukt.toString() + "'");
895                 }
896 
897                 //              Lagerbestand Fertigprodukte in EUR Vor-Quartal
898                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartalminus1, Constants.EF_VERMOEGENSRECHNUNGLAGERBESTANDFERTIGPRODUKTE_KEY);
899                 Double lagerbestandFertigprodukteEURVQ = (Double) wert1.getObjectWert();
900                 if (log.isDebugEnabled())
901                 {
902                     log.debug(" Lagerbestand Fertigprodukte in EUR Vor-Quartal : '" + lagerbestandFertigprodukteEURVQ.toString() + "'");
903                 }
904 
905                 //              durchschnittlicher Wert Fertigprodukte Lager
906                 Double durchschnittlicherWertFertigprodukteLager = new Double(Vertrieb.durchschnittlicherWertFertigprodukteLager(lagerbestandFertigprodukteVQ.doubleValue(), lagerbestandFertigprodukteEURVQ.doubleValue()));
907                 if (log.isDebugEnabled())
908                 {
909                     log.debug(" Durchschnittlicher Wert Fertigprodukte Lager : '" + durchschnittlicherWertFertigprodukteLager.toString() + "'");
910                 }
911 
912                 //              Tab. 21 (13)
913                 /* Lagerzugang an Fertigprodukten in Euro */
914                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_ERFOLGSRECHNUNGLAGERZUGANGFERTIGPRODUKTE_KEY);
915                 Double lagerzugangFertigprodukteEUR = new Double(Vertrieb.lagerZugangFertigprodukteEuro(lagerzugangFertigprodukte.doubleValue(), kostenProFertigprodukt.doubleValue()));
916                 wert1.setObjectWert(lagerzugangFertigprodukteEUR);
917                 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
918 
919                 //              Tab. 21 (14)
920                 /* Lagerabgang an Fertigprodukten in Euro */
921                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_ERFOLGSRECHNUNGLAGERABGANGFERTIGPRODUKTE_KEY);
922                 Double lagerabgangFertigprodukteEUR = new Double(-Vertrieb.lagerAbgangFertigprodukteEuro(durchschnittlicherWertFertigprodukteLager.doubleValue(), lagerabgangFertigprodukte.doubleValue()));
923                 wert1.setObjectWert(lagerabgangFertigprodukteEUR);
924                 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
925 
926                 //              Lagerungskosten Fertigprodukte
927                 voreinstellung1 = CommonCalculation.SucheVoreinstellungFeldname(allgemein, Constants.VF_ALLGEMEINEVOREINSTELLUNGENLAGERKOSTENFERTIGPRODUKTE_KEY);
928                 Double lagerungskostenFertigprodukte = (Double) voreinstellung1.getWertObject();
929                 if (log.isDebugEnabled())
930                 {
931                     log.debug(" Lagerungskosten Fertigprodukte : '" + lagerungskostenFertigprodukte.toString() + "'");
932                 }
933 
934                 //              Tab. 21 (15)
935                 /* Lagerungskosten für Fertigprodukten in Euro */
936                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_ERFOLGSRECHNUNGLAGERUNGSKOSTENFERTIGPRODUKTE_KEY);
937                 Double lagerungskostenFertigprodukteEUR = new Double(-Vertrieb.lagerKostenFertigprodukte(lagermengeFertigprodukte.doubleValue(), lagerungskostenFertigprodukte.doubleValue()));
938                 wert1.setObjectWert(lagerungskostenFertigprodukteEUR);
939                 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
940 
941                 //              Tab. 22 (13)
942                 /* Lagerbestand an Fertigprodukten in Euro */
943                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_VERMOEGENSRECHNUNGLAGERBESTANDFERTIGPRODUKTE_KEY);
944                 Double lagerbestandFertigprodukteEUR = new Double(Vertrieb.lagerBestandFertigprodukteEuro(lagerbestandFertigprodukteEURVQ.doubleValue(), lagerzugangFertigprodukteEUR.doubleValue(), -lagerabgangFertigprodukteEUR.doubleValue()));
945                 wert1.setObjectWert(lagerbestandFertigprodukteEUR);
946                 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
947 
948                 //              Anlagenprojektierung
949                 voreinstellung1 = CommonCalculation.SucheVoreinstellungFeldname(allgemein, Constants.VF_ALLGEMEINEVOREINSTELLUNGENANLAGENPROJEKTIERUNGSKOSTEN_KEY);
950                 Double anlagenprojektierung = new Double(((Double) voreinstellung1.getWertObject()).doubleValue() / 100.0);
951                 if (log.isDebugEnabled())
952                 {
953                     log.debug(" Anlagenprojektierung : '" + anlagenprojektierung.toString() + "'");
954                 }
955 
956                 //              Tab. 21 (31)
957                 /* Anlagenprojektierungskosten */
958                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_ERFOLGSRECHNUNGANLAGENPROJEKTIERUNGSKOSTEN_KEY);
959                 Double anlagenprojektierungskosten = new Double(-Produktion.anlagenProjektierungsKosten(-investitionskosten.doubleValue(), anlagenprojektierung.doubleValue()));
960                 wert1.setObjectWert(anlagenprojektierungskosten);
961                 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
962 
963                 //              Tab. 21 (32)
964                 /* Kosten des Rohstoffverbrauchs während des Quartals */
965                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_ERFOLGSRECHNUNGROHSTOFFVERBRAUCHSKOSTEN_KEY);
966                 Double rohstoffverbrauchskosten = new Double(-Produktion.rohstoffVerbrauchsKosten(nominaleProduktionsmenge.doubleValue(), rohstoffverbrauchStueck.doubleValue(), rohstoffpreisVQ.doubleValue()));
967                 wert1.setObjectWert(rohstoffverbrauchskosten);
968                 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
969 
970                 //              Tab. 21 (33)
971                 /* Kosten der Rohstoffbestellung */
972                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_ERFOLGSRECHNUNGROHSTOFFBESTELLUNGSKOSTEN_KEY);
973                 Double rohstoffbestellungskosten = new Double(-Produktion.rohstoffBestellungskosten(rohstoffbestellkostennormal.doubleValue(), 0.0, inflationsindex.doubleValue()));
974                 wert1.setObjectWert(rohstoffbestellungskosten);
975                 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
976 
977                 //              Lagerungskosten Rohstoffe
978                 voreinstellung1 = CommonCalculation.SucheVoreinstellungFeldname(allgemein, Constants.VF_ALLGEMEINEVOREINSTELLUNGENROHSTOFFLAGERUNGSKOSTEN_KEY);
979                 Double lagerungskostenRohstoffe = (Double) voreinstellung1.getWertObject();
980                 if (log.isDebugEnabled())
981                 {
982                     log.debug(" Lagerungskosten Fertigprodukte : '" + lagerungskostenRohstoffe.toString() + "'");
983                 }
984 
985                 //              Tab. 21 (34)
986                 /* Lagerkosten der Rohstoffe */
987                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_ERFOLGSRECHNUNGLAGERKOSTENROHSTOFFE_KEY);
988                 Double lagerkostenRohstoffe = new Double(-Produktion.rohstoffLagerKosten(rohstofflagerbestandQuartalsende.doubleValue(), lagerungskostenRohstoffe.doubleValue()));
989                 wert1.setObjectWert(lagerkostenRohstoffe);
990                 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
991 
992                 //              Tab. 21 (3)
993                 /* Aufsummierung des Bereiches Beschaffung */
994                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_ERFOLGSRECHNUNGBESCHAFFUNG_KEY);
995                 Double beschaffung = new Double(lagerkostenRohstoffe.doubleValue() + rohstoffbestellungskosten.doubleValue() + rohstoffverbrauchskosten.doubleValue() + anlagenprojektierungskosten.doubleValue());
996                 wert1.setObjectWert(beschaffung);
997                 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
998 
999                 //              Tab. 21 (41)
1000                 /* Verwaltungskosten */
1001                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_ERFOLGSRECHNUNGVERWALTUNGSKOSTEN_KEY);
1002                 Double verwaltungskosten = new Double(-Produktion.verwaltung(kapazitaetsauslastung.doubleValue(), lohnerhoehungssindex.doubleValue(), verwaltungTabelle));
1003                 wert1.setObjectWert(verwaltungskosten);
1004                 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
1005 
1006                 //              Tab. 21 (42)
1007                 /* Beratungskosten */
1008                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_ENTSCHEIDUNGBERATUNG_KEY);
1009                 wert2 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_ERFOLGSRECHNUNGBERATUNGSKOSTEN_KEY);
1010                 Double beratungskosten = new Double(- ((Integer) wert1.getObjectWert()).doubleValue() * 1000.0);
1011                 wert2.setObjectWert(beratungskosten);
1012                 CommonCalculation.WertEintragen(wert2, gruppennummer, new Integer(quartal.intValue() + 1));
1013 
1014                 //              Wertberichtigung
1015                 voreinstellung1 = CommonCalculation.SucheVoreinstellungFeldname(allgemein, Constants.VF_ALLGEMEINEVOREINSTELLUNGENWERTBERICHTIGUNGABSCHREIBUNG_KEY);
1016                 Double wertberichtigung = new Double(((Double) voreinstellung1.getWertObject()).doubleValue() / 100.0);
1017                 if (log.isDebugEnabled())
1018                 {
1019                     log.debug(" Wertberichtigung : '" + wertberichtigung.toString() + "'");
1020                 }
1021 
1022                 //              Tab. 21 (29)
1023                 /* Abschreibungskosten */
1024                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartalminus1, Constants.EF_VERMOEGENSRECHNUNGANLAGEVERMOEGEN_KEY);
1025                 Double anlagevermoegenVQ = (Double) wert1.getObjectWert();
1026                 wert2 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_ERFOLGSRECHNUNGABSCHREIBUNGSKOSTEN_KEY);
1027                 Double abschreibungskosten = new Double(-Produktion.abschreibungskosten(anlagevermoegenVQ.doubleValue(), wertberichtigung.doubleValue()));
1028                 wert2.setObjectWert(abschreibungskosten);
1029                 CommonCalculation.WertEintragen(wert2, gruppennummer, new Integer(quartal.intValue() + 1));
1030 
1031                 //              Tab. 22 (11)
1032                 /* Anlagevermögen */
1033                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_VERMOEGENSRECHNUNGANLAGEVERMOEGEN_KEY);
1034                 Double anlagevermoegen = new Double(Finanzierung.anlageVermoegen(anlagevermoegenVQ.doubleValue(), abschreibungskosten.doubleValue(), -investitionskosten.doubleValue()));
1035                 wert1.setObjectWert(anlagevermoegen);
1036                 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
1037 
1038                 //              Tab. 22 (12)
1039                 /* Rohstofflagerbestand */
1040                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_VERMOEGENSRECHNUNGROHSTOFFLAGERBESTAND_KEY);
1041                 Double rohstofflagerbestand = new Double(Vertrieb.rohstoffLagerBestandEuro(rohstofflagerbestandQuartalsende.doubleValue(), rohstoffwertQuartalsende.doubleValue()));
1042                 wert1.setObjectWert(rohstofflagerbestand);
1043                 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
1044 
1045                 //              Tab. 21 (1)
1046                 /* Aufsummierung des Bereiches Vertrieb */
1047                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_ERFOLGSRECHNUNGVERTRIEB_KEY);
1048                 Double vertrieb = new Double(umsatzerloese.doubleValue() + marketingkosten.doubleValue() + lagerzugangFertigprodukteEUR.doubleValue() + lagerabgangFertigprodukteEUR.doubleValue() + lagerungskostenFertigprodukteEUR.doubleValue() + marktforschungskosten.doubleValue());
1049                 wert1.setObjectWert(vertrieb);
1050                 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
1051 
1052                 //              Spezfische Investitionsausgaben
1053                 voreinstellung1 = CommonCalculation.SucheVoreinstellungFeldname(allgemein, Constants.VF_ALLGEMEINEVOREINSTELLUNGENSPEZIFISCHEINVESTITIONSAUSGABEN_KEY);
1054                 Double spezfischeInvestitionsausgaben = (Double) voreinstellung1.getWertObject();
1055                 if (log.isDebugEnabled())
1056                 {
1057                     log.debug(" Spezfische Investitionsausgaben : '" + spezfischeInvestitionsausgaben.toString() + "'");
1058                 }
1059 
1060                 //              Tab. 20 (333)
1061                 /* Kapazitätsbestand im Folgequartal */
1062                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_GRUNDDATENKAPAZITAETSBESTANDFOLGEQUARTAL_KEY);
1063                 Double kapazitaetsbestand = new Double(Produktion.kapazitaetsbestandFolgequartal(kapazitaetsbestandVQ.doubleValue(), -investitionskosten.doubleValue(), abschreibungskosten.doubleValue(), spezfischeInvestitionsausgaben.doubleValue()));
1064                 wert1.setObjectWert(kapazitaetsbestand);
1065                 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
1066 
1067                 //              Tab. 20 (325)
1068                 /* Maximale Produktart im nächsten Quartal */
1069                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_GRUNDDATENMAXIMALMOEGLICHEPRODUKTARTFOLGEQUARTAL_KEY);
1070                 Integer maximaleProduktartFolgequartal = new Integer(Finanzierung.produktArt(fundeWirksam.doubleValue(), forschungundentwicklungTabelle, produzierteProduktart.intValue(), maximaleProduktartVQ.intValue()));
1071                 wert1.setObjectWert(maximaleProduktartFolgequartal);
1072                 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
1073 
1074                 //              Tab. 20 (323) / (324)
1075                 Integer lizenzerwerbProduktart = new Integer(0);
1076                 Integer lizenzerwerbUnternehmen = new Integer(0);
1077                 Double lizenzerwerbKosten = new Double(0.0);
1078                 Integer lizenzverkaufProduktart = new Integer(0);
1079                 Integer lizenzverkaufUnternehmen = new Integer(0);
1080                 Double lizenzverkaufErloes = new Double(0.0);
1081 
1082                 for (int i = 0; i < lizenzverkaufTabelle.size(); i++)
1083                 {
1084                     Lizenzverkauf lizenz = (Lizenzverkauf) lizenzverkaufTabelle.get(i);
1085 
1086                     if (lizenz != null && lizenz.getGruppennummer().compareTo(gruppennummer) == 0)
1087                     {
1088                         if (lizenz.getUnternehmenKauf() != 0)
1089                         {
1090                             for (int j = 0; j < lizenzverkaufTabelle.size(); j++)
1091                             {
1092                                 Lizenzverkauf tempLizenz = (Lizenzverkauf) lizenzverkaufTabelle.get(j);
1093 
1094                                 if (lizenz != null && tempLizenz.getGruppennummer().intValue() == lizenz.getUnternehmenKauf())
1095                                 {
1096                                     if (tempLizenz.getUnternehmenVerkauf() == lizenz.getGruppennummer().intValue())
1097                                     {
1098                                         //                                      Tab. 20 (323)
1099                                         /* Lizenzerwerb von Produktart Nr. */
1100                                         lizenzerwerbProduktart = new Integer(tempLizenz.getProduktartVerkauf());
1101 
1102                                         /* Lizenzerwerb von Unternehmen Nr. */
1103                                         lizenzerwerbUnternehmen = new Integer(lizenz.getUnternehmenKauf());
1104 
1105                                         /* Lizenzerwerbskosten */
1106                                         lizenzerwerbKosten = new Double(lizenz.getKostenKauf());
1107                                     }
1108 
1109                                     if (lizenzerwerbProduktart.intValue() > maximaleProduktartFolgequartal.intValue())
1110                                     {
1111                                         //                                      Tab. 20 (325)
1112                                         /* Maximale Produktart im nächsten Quartal unter Berücksichtigung des Lizenzerwerbs */
1113                                         maximaleProduktartFolgequartal = lizenzerwerbProduktart;
1114                                     }
1115                                 }
1116                             }
1117                         }
1118                         else
1119                         {
1120                             //                          Tab. 20 (323)
1121                             /* Lizenzerwerb von Produktart Nr. */
1122                             lizenzerwerbProduktart = new Integer(0);
1123 
1124                             /* Lizenzerwerb von Unternehmen Nr. */
1125                             lizenzerwerbUnternehmen = new Integer(0);
1126 
1127                             /* Lizenzerwerbskosten */
1128                             lizenzerwerbKosten = new Double(0.0);
1129                         }
1130 
1131                         if (lizenz.getUnternehmenVerkauf() != 0)
1132                         {
1133                             for (int j = 0; j < lizenzverkaufTabelle.size(); j++)
1134                             {
1135                                 Lizenzverkauf tempLizenz = (Lizenzverkauf) lizenzverkaufTabelle.get(j);
1136 
1137                                 if (lizenz != null && tempLizenz.getGruppennummer().intValue() == lizenz.getUnternehmenKauf())
1138                                 {
1139                                     if (tempLizenz.getUnternehmenVerkauf() == lizenz.getGruppennummer().intValue())
1140                                     {
1141                                         //                                      Tab. 20 (324)
1142                                         /* Lizenzerverkauf von Produktart Nr. */
1143                                         lizenzverkaufProduktart = new Integer(lizenz.getProduktartVerkauf());
1144 
1145                                         /* Lizenzerverkauf an Unternehmen Nr. */
1146                                         lizenzverkaufUnternehmen = new Integer(lizenz.getUnternehmenVerkauf());
1147 
1148                                         /* Lizenzerverkaufserloese */
1149                                         lizenzverkaufErloes = new Double(tempLizenz.getKostenKauf());
1150                                     }
1151                                 }
1152                             }
1153                         }
1154                         else
1155                         {
1156                             //                          Tab. 20 (324)
1157                             /* Lizenzerverkauf von Produktart Nr. */
1158                             lizenzverkaufProduktart = new Integer(0);
1159 
1160                             /* Lizenzerverkauf an Unternehmen Nr. */
1161                             lizenzverkaufUnternehmen = new Integer(0);
1162 
1163                             /* Lizenzerverkaufserloese */
1164                             lizenzverkaufErloes = new Double(0.0);
1165                         }
1166                     }
1167                 }
1168 
1169                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_GRUNDDATENLIZENZERWERBPRODUKTART_KEY);
1170                 wert1.setObjectWert(lizenzerwerbProduktart);
1171                 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
1172 
1173                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_GRUNDDATENLIZENZERWERBUNTERNEHMEN_KEY);
1174                 wert1.setObjectWert(lizenzerwerbUnternehmen);
1175                 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
1176 
1177                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_GRUNDDATENLIZENZERWERBSKOSTEN_KEY);
1178                 wert1.setObjectWert(lizenzerwerbKosten);
1179                 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
1180 
1181                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_GRUNDDATENLIZENZVERKAUFPRODUKTART_KEY);
1182                 wert1.setObjectWert(lizenzverkaufProduktart);
1183                 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
1184 
1185                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_GRUNDDATENLIZENZVERKAUFUNTERNEHMEN_KEY);
1186                 wert1.setObjectWert(lizenzverkaufUnternehmen);
1187                 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
1188 
1189                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_GRUNDDATENLIZENZVERKAUFSERLOESE_KEY);
1190                 wert1.setObjectWert(lizenzverkaufErloes);
1191                 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
1192 
1193                 //              Tab. 21 (22)
1194                 /* Lizenzerwerbskosten */
1195                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_ERFOLGSRECHNUNGLIZENZERWERBSKOSTEN_KEY);
1196                 Double lizenzerwerbskosten = new Double(-lizenzerwerbKosten.doubleValue());
1197                 wert1.setObjectWert(lizenzerwerbskosten);
1198                 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
1199 
1200                 //              Tab. 21 (23)
1201                 /* Lizenzverkaufserlöse */
1202                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_ERFOLGSRECHNUNGLIZENZVERKAUFSERLOESE_KEY);
1203                 Double lizenzverkaufserloese = lizenzverkaufErloes;
1204                 wert1.setObjectWert(lizenzverkaufserloese);
1205                 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
1206 
1207                 //              Tab. 21 (24)
1208                 /* Aufarbeitungskosten für fehlerhafte Produkte */
1209                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartalminus1, Constants.EF_GRUNDDATENPRODUZIERTEPRODUKTART_KEY);
1210                 Integer produzierteProduktartVQ = (Integer) wert1.getObjectWert();
1211                 wert2 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_ERFOLGSRECHNUNGAUFARBEITUNGSKOSTEN_KEY);
1212                 Double aufarbeitungskosten = new Double(0.0);
1213                 int produktartaenderung = (produzierteProduktart.intValue() - produzierteProduktartVQ.intValue());
1214                 if (produktartaenderung >= 0)
1215                 {
1216                     aufarbeitungskosten = new Double(-Produktion.aufarbeitungskosten(lagerbestandFertigprodukteVQ.doubleValue(), produktartaenderung));
1217                 }
1218                 else
1219                 {
1220                     aufarbeitungskosten = new Double(-Produktion.aufarbeitungskosten(lagerbestandFertigprodukteVQ.doubleValue(), 0));
1221                 }
1222                 wert2.setObjectWert(aufarbeitungskosten);
1223                 CommonCalculation.WertEintragen(wert2, gruppennummer, new Integer(quartal.intValue() + 1));
1224 
1225                 //              Basiskosten für Schichtwechsel
1226                 voreinstellung1 = CommonCalculation.SucheVoreinstellungFeldname(allgemein, Constants.VF_ALLGEMEINEVOREINSTELLUNGENSCHICHTWECHSELKOSTEN_KEY);
1227                 Double schichtwechselkostenBASIS = new Double(((Integer) voreinstellung1.getWertObject()).doubleValue());
1228                 if (log.isDebugEnabled())
1229                 {
1230                     log.debug(" Basiskosten für Schichtwechsel : '" + schichtwechselkostenBASIS.toString() + "'");
1231                 }
1232 
1233                 //              Tab. 21 (27)
1234                 /* Schichtwechselkosten */
1235                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartalminus1, Constants.EF_GRUNDDATENKAPAZITAETSAUSLASTUNG_KEY);
1236                 Double kapazitaetsauslastungVQ = (Double) wert1.getObjectWert();
1237                 wert2 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_ERFOLGSRECHNUNGSCHICHTWECHSELKOSTEN_KEY);
1238                 Double schichtwechselkosten = new Double(-Produktion.schichtwechsel(schichtwechselkostenBASIS.doubleValue(), kapazitaetsauslastungVQ.doubleValue(), kapazitaetsauslastung.doubleValue(), lohnerhoehungssindex.doubleValue()));
1239                 wert2.setObjectWert(schichtwechselkosten);
1240                 CommonCalculation.WertEintragen(wert2, gruppennummer, new Integer(quartal.intValue() + 1));
1241 
1242                 //              Tab. 21 (2)
1243                 /* Aufsummierung des Bereiches Produktion */
1244                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_ERFOLGSRECHNUNGPRODUKTION_KEY);
1245                 Double produktion = new Double(fundeKosten.doubleValue() + lizenzerwerbskosten.doubleValue() + lizenzverkaufserloese.doubleValue() + aufarbeitungskosten.doubleValue() + qualitaetssicherungskosten.doubleValue() + fertigungslohnkosten.doubleValue() + schichtwechselkosten.doubleValue() + abschreibungskosten.doubleValue());
1246                 wert1.setObjectWert(produktion);
1247                 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
1248 
1249                 //              Tab. 23 (11)
1250                 /* Bankdarlehen im VorQuartal */
1251                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartalminus1, Constants.EF_VERMOEGENSRECHNUNGBANKKREDIT_KEY);
1252                 Double bankdarlehenVQ = (Double) wert1.getObjectWert();
1253                 wert2 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_FINANZIERUNGBANKDARLEHEN_KEY);
1254                 wert2.setObjectWert(bankdarlehenVQ);
1255                 CommonCalculation.WertEintragen(wert2, gruppennummer, new Integer(quartal.intValue() + 1));
1256 
1257                 //              Tab. 23 (12)
1258                 /* Kontokorrentkredit im VorQuartal */
1259                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartalminus1, Constants.EF_VERMOEGENSRECHNUNGKONTOKORRENTKREDIT_KEY);
1260                 Double kontokorrentkreditVQ = (Double) wert1.getObjectWert();
1261                 wert2 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_FINANZIERUNGKONTOKORRENTKREDIT_KEY);
1262                 wert2.setObjectWert(kontokorrentkreditVQ);
1263                 CommonCalculation.WertEintragen(wert2, gruppennummer, new Integer(quartal.intValue() + 1));
1264 
1265                 //              Basiszinssatz Bankdarlehen
1266                 voreinstellung1 = CommonCalculation.SucheVoreinstellungFeldname(allgemein, Constants.VF_ALLGEMEINEVOREINSTELLUNGENBANKDARLEHENZINSSATZ_KEY);
1267                 Double basiszinssatzBankdarlehen = new Double(((Double) voreinstellung1.getWertObject()).doubleValue() / 100.0);
1268                 if (log.isDebugEnabled())
1269                 {
1270                     log.debug(" Basiszinssatz Bankdarlehen : '" + basiszinssatzBankdarlehen.toString() + "'");
1271                 }
1272 
1273                 //              Tab. 23 (31)
1274                 /* optimaler Kontokorrentkredit */
1275                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartalminus1, Constants.EF_ERFOLGSRECHNUNGDIVIDENDE_KEY);
1276                 Double nettoDividendeVQ = new Double(- ((Double) wert1.getObjectWert()).doubleValue());
1277                 wert2 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_FINANZIERUNGOPTIMALERKONTOKORRENTKREDIT_KEY);
1278                 Double optimalerKontokorrentkredit = new Double(Finanzierung.ueberziehungsKreditOptimal(nettoDividendeVQ.doubleValue(), basiszinssatzBankdarlehen.doubleValue()));
1279                 wert2.setObjectWert(optimalerKontokorrentkredit);
1280                 CommonCalculation.WertEintragen(wert2, gruppennummer, new Integer(quartal.intValue() + 1));
1281 
1282                 //              Tab. 23 (32)
1283                 /* optimale Änderung des Kontokorrentkredits */
1284                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_FINANZIERUNGOPTIMALEAENDERUNGKONTOKORRENTKREDIT_KEY);
1285                 Double optimaleAenderungKontokorrentkredit = new Double(Finanzierung.ueberziehungsKreditAenderungOptimal(optimalerKontokorrentkredit.doubleValue(), kontokorrentkreditVQ.doubleValue()));
1286                 wert1.setObjectWert(optimaleAenderungKontokorrentkredit);
1287                 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
1288 
1289                 //              Tab. 23 (21)
1290                 /* liquiditätswirksamer Erfolg */
1291                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_FINANZIERUNGLIQUIDITAETSWIRKSAMERERFOLGOHNEZINSEN_KEY);
1292                 Double liquiditaetswirksamerErfolg =
1293                     new Double(umsatzerloese.doubleValue() + marketingkosten.doubleValue() + lagerungskostenFertigprodukteEUR.doubleValue() + marktforschungskosten.doubleValue() + (produktion.doubleValue() - abschreibungskosten.doubleValue()) + (beschaffung.doubleValue() - rohstoffverbrauchskosten.doubleValue()) + verwaltungskosten.doubleValue() + beratungskosten.doubleValue());
1294                 wert1.setObjectWert(liquiditaetswirksamerErfolg);
1295                 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
1296 
1297                 //              Tab. 22 (16)
1298                 /* Saldo VorQuartal */
1299                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartalminus1, Constants.EF_VERMOEGENSRECHNUNGKASSE_KEY);
1300                 Double kasseVQ = (Double) wert1.getObjectWert();
1301                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartalminus1, Constants.EF_VERMOEGENSRECHNUNGKAPITALERHOEHUNG_KEY);
1302                 Double kapitalerhoehungVQ = (Double) wert1.getObjectWert();
1303                 wert2 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_FINANZIERUNGSALDO_KEY);
1304                 Double saldo = new Double(unverzinslicheVerbindlichkeiten.doubleValue() - kasseVQ.doubleValue() - kapitalerhoehungVQ.doubleValue());
1305                 wert2.setObjectWert(saldo);
1306                 CommonCalculation.WertEintragen(wert2, gruppennummer, new Integer(quartal.intValue() + 1));
1307 
1308                 //              Tab. 23 (22)
1309                 /* Kapitalbedarf */
1310                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_FINANZIERUNGKAPITALBEDARF_KEY);
1311                 Double kapitalbedarf = new Double(saldo.doubleValue() - liquiditaetswirksamerErfolg.doubleValue());
1312                 wert1.setObjectWert(kapitalbedarf);
1313                 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
1314 
1315                 //              Tab. 23 (33)
1316                 /* optimale Änderung des Bankdarlehens */
1317                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_FINANZIERUNGOPTIMALEAENDERUNGBANKDARLEHEN_KEY);
1318                 Double optimaleAenderungBankkredit = new Double(Finanzierung.vereinbarterKreditAenderungOptimal(kapitalbedarf.doubleValue(), optimaleAenderungKontokorrentkredit.doubleValue()));
1319                 wert1.setObjectWert(optimaleAenderungBankkredit);
1320                 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
1321 
1322                 //              Darlehens-Tilgung oder Erhoehung
1323                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_ENTSCHEIDUNGERHOEHUNGTILGUNG_KEY);
1324                 Integer darlehensTilgungOderErhoehung = (Integer) wert1.getObjectWert();
1325 
1326                 //              Änderung Bankdarlehen
1327                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_ENTSCHEIDUNGAENDERUNGBANKDARLEHEN_KEY);
1328                 Double aenderungBankdarlehen = new Double(((Integer) wert1.getObjectWert()).doubleValue());
1329 
1330                 Double kasseN = new Double(0.0);
1331                 Double bankdarlehen = new Double(0.0);
1332                 Double kontokorrentkredit = new Double(0.0);
1333 
1334                 switch (darlehensTilgungOderErhoehung.intValue())
1335                 {
1336                     case 0 :
1337                         //                      Tab. 22 (24)
1338                         /* Bankdarlehen */
1339                         wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_VERMOEGENSRECHNUNGBANKKREDIT_KEY);
1340                         bankdarlehen = new Double(Finanzierung.vereinbartKredit(bankdarlehenVQ.doubleValue(), -aenderungBankdarlehen.doubleValue()));
1341                         wert1.setObjectWert(bankdarlehen);
1342                         CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
1343 
1344                         //                      Tab. 22 (23)
1345                         /* Kontokorrentkredit */
1346                         wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_VERMOEGENSRECHNUNGKONTOKORRENTKREDIT_KEY);
1347                         //                        Double kontokorrentkredit = new Double(Finanzierung.ueberziehungsKredit(optimaleAenderungKontokorrentkredit.doubleValue(), kontokorrentkreditVQ.doubleValue(), -aenderungBankdarlehen.doubleValue(), optimaleAenderungBankkredit.doubleValue(), bankdarlehenVQ.doubleValue(), kasseN.doubleValue()));
1348                         kontokorrentkredit = new Double(Finanzierung.ueberziehungsKredit(optimaleAenderungKontokorrentkredit.doubleValue(), kontokorrentkreditVQ.doubleValue(), -aenderungBankdarlehen.doubleValue(), optimaleAenderungBankkredit.doubleValue(), bankdarlehenVQ.doubleValue(), 0.0));
1349                         wert1.setObjectWert(kontokorrentkredit);
1350                         CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
1351 
1352                         kasseN = new Double(0.0);
1353                         if (kontokorrentkredit.doubleValue() > 0)
1354                         {
1355                             //                          Tab. 22 (14)
1356                             /* Kasse */
1357                             wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_VERMOEGENSRECHNUNGKASSE_KEY);
1358                             kasseN = new Double(0.0);
1359                             wert1.setObjectWert(kasseN);
1360                             CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
1361                         }
1362                         else
1363                         {
1364                             //                          Tab. 22 (14)
1365                             /* Kasse */
1366                             wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_VERMOEGENSRECHNUNGKASSE_KEY);
1367                             kasseN = new Double(Finanzierung.kasse(kasseVQ.doubleValue(), kapitalerhoehungVQ.doubleValue(), unverzinslicheVerbindlichkeiten.doubleValue(), liquiditaetswirksamerErfolg.doubleValue(), -aenderungBankdarlehen.doubleValue(), kontokorrentkredit.doubleValue() - kontokorrentkreditVQ.doubleValue()));
1368                             wert1.setObjectWert(kasseN);
1369                             CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
1370                         }
1371                         break;
1372                     case 1 :
1373                         //                      Tab. 22 (24)
1374                         /* Bankdarlehen */
1375                         wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_VERMOEGENSRECHNUNGBANKKREDIT_KEY);
1376                         bankdarlehen = new Double(Finanzierung.vereinbartKredit(bankdarlehenVQ.doubleValue(), aenderungBankdarlehen.doubleValue()));
1377                         wert1.setObjectWert(bankdarlehen);
1378                         CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
1379 
1380                         //                      Tab. 22 (23)
1381                         /* Kontokorrentkredit */
1382                         wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_VERMOEGENSRECHNUNGKONTOKORRENTKREDIT_KEY);
1383                         //                        Double kontokorrentkredit = new Double(Finanzierung.ueberziehungsKredit(optimaleAenderungKontokorrentkredit.doubleValue(), kontokorrentkreditVQ.doubleValue(), -aenderungBankdarlehen.doubleValue(), optimaleAenderungBankkredit.doubleValue(), bankdarlehenVQ.doubleValue(), kasseN()));
1384                         kontokorrentkredit = new Double(Finanzierung.ueberziehungsKredit(optimaleAenderungKontokorrentkredit.doubleValue(), kontokorrentkreditVQ.doubleValue(), aenderungBankdarlehen.doubleValue(), optimaleAenderungBankkredit.doubleValue(), bankdarlehenVQ.doubleValue(), 0.0));
1385                         wert1.setObjectWert(kontokorrentkredit);
1386                         CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
1387 
1388                         kasseN = new Double(0.0);
1389                         if (kontokorrentkredit.doubleValue() > 0)
1390                         {
1391                             //                          Tab. 22 (14)
1392                             /* Kasse */
1393                             wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_VERMOEGENSRECHNUNGKASSE_KEY);
1394                             kasseN = new Double(0.0);
1395                             wert1.setObjectWert(kasseN);
1396                             CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
1397                         }
1398                         else
1399                         {
1400                             //                          Tab. 22 (14)
1401                             /* Kasse */
1402                             wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_VERMOEGENSRECHNUNGKASSE_KEY);
1403                             kasseN = new Double(Finanzierung.kasse(kasseVQ.doubleValue(), kapitalerhoehungVQ.doubleValue(), unverzinslicheVerbindlichkeiten.doubleValue(), liquiditaetswirksamerErfolg.doubleValue(), aenderungBankdarlehen.doubleValue(), kontokorrentkredit.doubleValue() - kontokorrentkreditVQ.doubleValue()));
1404                             wert1.setObjectWert(kasseN);
1405                             CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
1406                         }
1407                         break;
1408                 }
1409 
1410                 //              Darlehens-Tilgung oder Erhoehung
1411                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_ENTSCHEIDUNGZINSEN_KEY);
1412                 Double bankdarlehenszinsenEntscheidung = new Double(((Integer) wert1.getObjectWert()).doubleValue());
1413 
1414                 //              Tab. 21 (44)
1415                 /* Zinskosten für das Bankdarlehen */
1416                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_ERFOLGSRECHNUNGZINSKOSTENBANKDARLEHEN_KEY);
1417                 Double zinskostenBankdarlehen = new Double(-Finanzierung.zinskostenBankkredit(bankdarlehen.doubleValue(), basiszinssatzBankdarlehen.doubleValue()));
1418 
1419                 if (- (zinskostenBankdarlehen.doubleValue()) == bankdarlehenszinsenEntscheidung.doubleValue())
1420                 {
1421                     if (log.isDebugEnabled())
1422                     {
1423                         log.debug(" DO NOTHING");
1424                     }
1425                 }
1426                 else if (- (zinskostenBankdarlehen.doubleValue()) < bankdarlehenszinsenEntscheidung.doubleValue())
1427                 {
1428                     zinskostenBankdarlehen = new Double(-bankdarlehenszinsenEntscheidung.doubleValue());
1429                 }
1430                 else
1431                 {
1432                     zinskostenBankdarlehen = new Double(- (zinskostenBankdarlehen.doubleValue() + ((zinskostenBankdarlehen.doubleValue() + bankdarlehenszinsenEntscheidung.doubleValue()) * 2.0)));
1433                 }
1434 
1435                 wert1.setObjectWert(zinskostenBankdarlehen);
1436                 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
1437 
1438                 //              Zinssatz Kontokorrentkredit
1439                 Double kontokorrentkreditZinssatz = new Double(Finanzierung.zinssatzUeberziehungsKredit(-nettoDividendeVQ.doubleValue(), kontokorrentkredit.doubleValue(), basiszinssatzBankdarlehen.doubleValue() * 100.0) / 100.0);
1440                 if (log.isDebugEnabled())
1441                 {
1442                     log.debug(" Zinssatz Kontokorrentkredit : '" + kontokorrentkreditZinssatz.toString() + "'");
1443                 }
1444 
1445                 //              Tab. 21 (43)
1446                 /* Zinskosten für den Kontokorrentkredit */
1447                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_ERFOLGSRECHNUNGZINSKOSTENKONTOKORRENTKREDIT_KEY);
1448                 Double zinskostenKontokorrentkredit = new Double(-Finanzierung.zinskostenUeberziehungskredit(kontokorrentkredit.doubleValue(), kontokorrentkreditZinssatz.doubleValue()));
1449                 wert1.setObjectWert(zinskostenKontokorrentkredit);
1450                 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
1451 
1452                 //              Tab. 23 (41)
1453                 /* durchschnittlicher Zinssatz */
1454                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_FINANZIERUNGDURCHSCHNITTLICHERZINSSATZ_KEY);
1455                 Double durchschnittlicherZinssatz = new Double(Finanzierung.durchschnittlicherZinssatz(basiszinssatzBankdarlehen.doubleValue(), kontokorrentkreditZinssatz.doubleValue(), kontokorrentkredit.doubleValue(), bankdarlehen.doubleValue()));
1456                 wert1.setObjectWert(new Double(durchschnittlicherZinssatz.doubleValue() * 100.0));
1457                 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
1458 
1459                 //              Tab. 21 (4)
1460                 /* Aufsummierung des Unterpunktes Overhead */
1461                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_ERFOLGSRECHNUNGOVERHEAD_KEY);
1462                 Double overhead = new Double(verwaltungskosten.doubleValue() + beratungskosten.doubleValue() + zinskostenKontokorrentkredit.doubleValue() + zinskostenBankdarlehen.doubleValue());
1463                 wert1.setObjectWert(overhead);
1464                 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
1465 
1466                 //              Tab. 21 (51)
1467                 /* Erfolg vor Steuern */
1468                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_ERFOLGSRECHNUNGERFOLGVORSTEUERN_KEY);
1469                 Double erfolgVorSteuern = new Double(vertrieb.doubleValue() + produktion.doubleValue() + beschaffung.doubleValue() + overhead.doubleValue());
1470                 wert1.setObjectWert(erfolgVorSteuern);
1471                 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
1472 
1473                 //              Wertberichtigung
1474                 voreinstellung1 = CommonCalculation.SucheVoreinstellungFeldname(allgemein, Constants.VF_ALLGEMEINEVOREINSTELLUNGENSTEUERNAUFGEWINN_KEY);
1475                 Double gewinnSteuer = new Double(((Double) voreinstellung1.getWertObject()).doubleValue() / 100.0);
1476                 if (log.isDebugEnabled())
1477                 {
1478                     log.debug(" GewinnSteuer : '" + gewinnSteuer.toString() + "'");
1479                 }
1480 
1481                 //              Tab. 21 (52)
1482                 /* Steuern auf den Erfolg vor Steuern */
1483                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_ERFOLGSRECHNUNGSTEUERN_KEY);
1484                 Double steuernErfolgVorSteuern = new Double(0.0);
1485                 if (erfolgVorSteuern.doubleValue() > 0)
1486                 {
1487                     steuernErfolgVorSteuern = new Double(- (erfolgVorSteuern.doubleValue() * gewinnSteuer.doubleValue()));
1488                 }
1489                 else
1490                 {
1491                     steuernErfolgVorSteuern = new Double(0.0);
1492                 }
1493                 wert1.setObjectWert(steuernErfolgVorSteuern);
1494                 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
1495 
1496                 //              Tab. 21 (53)
1497                 /* Erfolg nach Abzug der Steuern */
1498                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_ERFOLGSRECHNUNGERFOLGNACHSTEUERN_KEY);
1499                 Double erfolgNachSteuern = new Double(erfolgVorSteuern.doubleValue() + steuernErfolgVorSteuern.doubleValue());
1500                 wert1.setObjectWert(erfolgNachSteuern);
1501                 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
1502 
1503                 //              Tab. 21 (54)
1504                 /* Netto Dividende */
1505                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_ENTSCHEIDUNGDIVIDENDE_KEY);
1506                 Double nettoDividendeENT = new Double(((Integer) wert1.getObjectWert()).doubleValue() * 1000.0);
1507                 wert2 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_ERFOLGSRECHNUNGDIVIDENDE_KEY);
1508                 Double nettoDividende = new Double(0.0);
1509                 if (nettoDividendeENT.doubleValue() <= erfolgNachSteuern.doubleValue())
1510                 {
1511                     nettoDividende = new Double(- (nettoDividendeENT.doubleValue()));
1512                 }
1513                 else if (erfolgNachSteuern.doubleValue() > 0)
1514                 {
1515                     nettoDividende = new Double(- (erfolgNachSteuern.doubleValue()));
1516                 }
1517                 else
1518                 {
1519                     nettoDividende = new Double(0.0);
1520                 }
1521                 wert2.setObjectWert(nettoDividende);
1522                 CommonCalculation.WertEintragen(wert2, gruppennummer, new Integer(quartal.intValue() + 1));
1523 
1524                 //              Tab. 21 (55)
1525                 /* Rücklagenzuführung nach Steuern und Netto-Dividende */
1526                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_ERFOLGSRECHNUNGRUECKLAGENZUFUEHRUNG_KEY);
1527                 Double ruecklagenzufuehrung = new Double(erfolgNachSteuern.doubleValue() + nettoDividende.doubleValue());
1528                 wert1.setObjectWert(ruecklagenzufuehrung);
1529                 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
1530 
1531                 //              Tab. 23 (53)
1532                 /* Netto-Dividende */
1533                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_FINANZIERUNGDIVIDENDE_KEY);
1534                 wert1.setObjectWert(nettoDividende);
1535                 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
1536 
1537                 //              Tab. 23 (42)
1538                 /* zuviel bezahlte Zinsen */
1539                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_FINANZIERUNGZUVIELBEZAHLTEZINSEN_KEY);
1540                 Double zuvielBezahlteZinsen =
1541                     new Double(Finanzierung.zinsenZuviel(nettoDividendeVQ.doubleValue(), basiszinssatzBankdarlehen.doubleValue() * 100.0, kontokorrentkreditVQ.doubleValue(), bankdarlehenVQ.doubleValue(), optimaleAenderungKontokorrentkredit.doubleValue(), optimaleAenderungBankkredit.doubleValue(), - (zinskostenBankdarlehen.doubleValue() + zinskostenKontokorrentkredit.doubleValue())));
1542                 if (zuvielBezahlteZinsen.doubleValue() < 0.0)
1543                 {
1544                     zuvielBezahlteZinsen = new Double(0.0);
1545                 }
1546                 wert1.setObjectWert(zuvielBezahlteZinsen);
1547                 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
1548 
1549                 //              Tab. 23 (54)
1550                 /* Steuern */
1551                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_FINANZIERUNGSTEUERN_KEY);
1552                 wert1.setObjectWert(steuernErfolgVorSteuern);
1553                 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
1554 
1555                 //              Tab. 22 (15)
1556                 /* Kapitalerhöhung */
1557                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_VERMOEGENSRECHNUNGKAPITALERHOEHUNG_KEY);
1558                 Double kapitalerhoehungVERM = new Double(Finanzierung.kapitalerhoehung(nettoDividende.doubleValue(), nettoDividendeVQ.doubleValue()));
1559                 wert1.setObjectWert(kapitalerhoehungVERM);
1560                 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
1561 
1562                 //              Tab. 22 (22)
1563                 /* unverzinsliche Verbindlichkeiten */
1564                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_VERMOEGENSRECHNUNGUNVERZINSLICHEVERBINDLICHKEITEN_KEY);
1565                 Double unverzinslicheVerbindlichkeitenVERM = new Double(Finanzierung.unverzinslicheVerbindlichkeiten(rohstoffkaufNormalExpress.doubleValue(), -investitionskosten.doubleValue(), -nettoDividende.doubleValue(), -steuernErfolgVorSteuern.doubleValue(), -zinskostenKontokorrentkredit.doubleValue(), -zinskostenBankdarlehen.doubleValue()));
1566                 wert1.setObjectWert(unverzinslicheVerbindlichkeitenVERM);
1567                 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
1568 
1569                 //              Tab. 23 (55)
1570                 /* liquiditätswirksamer Erfolg */
1571                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_FINANZIERUNGLIQUIDITAETSWIRKSAMERERFOLG_KEY);
1572                 Double liquiditaetswirksamerErfolgFI = new Double(umsatzerloese.doubleValue() + marketingkosten.doubleValue() + lagerungskostenFertigprodukteEUR.doubleValue() + marktforschungskosten.doubleValue() + (produktion.doubleValue() - abschreibungskosten.doubleValue()) + (beschaffung.doubleValue() - rohstoffverbrauchskosten.doubleValue()) + overhead.doubleValue());
1573                 wert1.setObjectWert(liquiditaetswirksamerErfolgFI);
1574                 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
1575 
1576                 //              Tab. 23 (56)
1577                 /* Liquiditätsänderung */
1578                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_FINANZIERUNGLIQUIDITAETSAENDERUNG_KEY);
1579                 Double liquiditaetsaenderung = new Double(investitionskosten.doubleValue() + - (rohstoffkaufNormalExpress.doubleValue()) + nettoDividende.doubleValue() + steuernErfolgVorSteuern.doubleValue() + liquiditaetswirksamerErfolgFI.doubleValue());
1580                 wert1.setObjectWert(liquiditaetsaenderung);
1581                 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
1582 
1583                 //              Tab. 22 (1)
1584                 /* Aktiva */
1585                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_VERMOEGENSRECHNUNGAKTIVA_KEY);
1586                 Double aktiva = new Double(anlagevermoegen.doubleValue() + rohstofflagerbestand.doubleValue() + lagerbestandFertigprodukteEUR.doubleValue() + kasseN.doubleValue() + kapitalerhoehungVERM.doubleValue());
1587                 wert1.setObjectWert(aktiva);
1588                 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
1589 
1590                 //              Tab. 22 (21)
1591                 /* Eigenkapital */
1592                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_VERMOEGENSRECHNUNGEIGENKAPITAL_KEY);
1593                 Double eigenkapital = new Double(aktiva.doubleValue() - unverzinslicheVerbindlichkeitenVERM.doubleValue() - kontokorrentkredit.doubleValue() - bankdarlehen.doubleValue());
1594                 wert1.setObjectWert(eigenkapital);
1595                 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
1596 
1597                 //              Tab. 22 (2)
1598                 /* Passiva */
1599                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_VERMOEGENSRECHNUNGPASSIVA_KEY);
1600                 Double passiva = new Double(eigenkapital.doubleValue() + unverzinslicheVerbindlichkeitenVERM.doubleValue() + kontokorrentkredit.doubleValue() + bankdarlehen.doubleValue());
1601                 wert1.setObjectWert(passiva);
1602                 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
1603 
1604                 //              Lohnkosten pro gutes Stueck
1605                 Double lohnkostenProGutesStueck = new Double(Vertrieb.lohnkostenProGutesStueck(fertigungszeitproFertigprodukt.doubleValue(), lohnkosten.doubleValue(), fehleranteil.doubleValue(), nacharbeitsaufwand.doubleValue()));
1606                 if (log.isDebugEnabled())
1607                 {
1608                     log.debug(" Lohnkosten pro gutes Stueck : '" + lohnkostenProGutesStueck.toString() + "'");
1609                 }
1610 
1611                 //              Rohstoffkosten pro Stueck
1612                 Double rohstoffkostenProStueck = new Double(rohstoffverbrauchStueck.doubleValue() * rohstoffwertQuartalsende.doubleValue());
1613                 if (log.isDebugEnabled())
1614                 {
1615                     log.debug(" Rohstoffkosten pro Stueck : '" + rohstoffkostenProStueck.toString() + "'");
1616                 }
1617 
1618                 //              Rohstoffkosten pro gutes Stueck
1619                 Double rohstoffkostenProGutesStueck = new Double(Vertrieb.rohstoffKostenProGutesStueck(rohstoffverbrauchStueck.doubleValue(), rohstoffkostenProStueck.doubleValue(), ausschussanteil.doubleValue()));
1620                 if (log.isDebugEnabled())
1621                 {
1622                     log.debug(" Rohstoffkosten pro gutes Stueck : '" + rohstoffkostenProGutesStueck.toString() + "'");
1623                 }
1624 
1625                 //              Tab. 23 (56)
1626                 /* Liquiditätsänderung bei geplantem Absatz */
1627                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_ENTSCHEIDUNGABSETZBAREMENGE_KEY);
1628                 Double absetzbareMengeENT = new Double(((Integer) wert1.getObjectWert()).doubleValue() * 1000.0);
1629                 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_FINANZIERUNGLIQUIDITAETSAENDERUNGBEIGEPLANTEMABSATZ_KEY);
1630                 Double liquiditaetsaenderungBeiGeplantemAbsatz =
1631                     new Double(Produktion.liquiditaetsaenderungBeiGeplantemAbsatz(erfolgVorSteuern.doubleValue(), liquiditaetsaenderung.doubleValue(), abgesetzteMenge.doubleValue(), absetzbareMengeENT.doubleValue(), verkaufspreisNominell.doubleValue(), lagerungskostenFertigprodukte.doubleValue(), lohnkostenProGutesStueck.doubleValue(), rohstoffkostenProGutesStueck.doubleValue()));
1632                 wert1.setObjectWert(liquiditaetsaenderungBeiGeplantemAbsatz);
1633                 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
1634             }
1635             catch (Exception e)
1636             {
1637                 log.error("THREAD NAME : " + getName());
1638                 log.error(e.getMessage(), e);
1639             }
1640 
1641             if (log.isDebugEnabled())
1642             {
1643                 log.debug(" (F) Verarbeitung \"BerechneHauptwerte\" fuer Gruppe \"" + gruppennummer + "\", Quartal \"" + quartal + "\" abgeschlossen");
1644             }
1645         }
1646         else
1647         {
1648             log.error(" WICHTIGE DATEN FUER DEN THREAD WURDEN NICHT FESTGELEGT. STOPPE VERARBEITUNG !!! ");
1649         }
1650 
1651         synchronized (lock)
1652         {
1653             try
1654             {
1655                 if (log.isDebugEnabled())
1656                 {
1657                     log.debug(" (N) Verstaendige andere Threads, ich bin fertig. THREAD NAME : " + getName());
1658                 }
1659 
1660                 // Inkrementiere Semaphore, Warte auf Freigabe, Vater wartet bis semaphor == Threadcount - 1
1661                 lock.incrementSemaphore();
1662                 // Warte auf NotifyAll bzw 60 Minuten.
1663                 lock.wait(3600000);
1664                 // Dekrementiere Semaphore, Arbeite weiter
1665                 lock.decrementSemaphore();
1666 
1667                 if (log.isDebugEnabled())
1668                 {
1669                     log.debug(" FINALIZING THREAD. " + getName());
1670                 }
1671 
1672                 // Dekrementiere FinishSemaphore, ICH BIN FERTIG
1673                 lock.decrementFinishSemaphore();
1674             }
1675             catch (Exception e)
1676             {
1677                 log.error("THREAD NAME : " + getName());
1678                 log.error(e.getMessage(), e);
1679             }
1680         }
1681     }
1682 
1683     /* ----- SET und GET Methoden ----- */
1684 
1685     /***
1686      * GET Methode
1687      *
1688      * @return Gruppennummer
1689      */
1690     public Integer getGruppennummer()
1691     {
1692         return gruppennummer;
1693     }
1694 
1695     /***
1696      * GET Methode
1697      *
1698      * @return Projektnummer
1699      */
1700     public Integer getProjektnummer()
1701     {
1702         return projektnummer;
1703     }
1704 
1705     /***
1706      * GET Methode
1707      *
1708      * @return Quartal
1709      */
1710     public Integer getQuartal()
1711     {
1712         return quartal;
1713     }
1714 
1715     /***
1716      * SET Methode
1717      *
1718      * @param gruppennummer Die Gruppennummer
1719      */
1720     public void setGruppennummer(Integer gruppennummer)
1721     {
1722         this.gruppennummer = gruppennummer;
1723     }
1724 
1725     /***
1726      * SET Methode
1727      *
1728      * @param projektnummer Die Projektnummer
1729      */
1730     public void setProjektnummer(Integer projektnummer)
1731     {
1732         this.projektnummer = projektnummer;
1733     }
1734 
1735     /***
1736      * SET Methode
1737      *
1738      * @param quartal Das Quartal
1739      */
1740     public void setQuartal(Integer quartal)
1741     {
1742         this.quartal = quartal;
1743     }
1744 }