docs/ps-bericht-maka

changeset 0:f3982c724ecf final

initial commit
author markus schnalke <meillo@marmaro.de>
date Sun, 15 Apr 2007 02:44:56 +0200
parents
children 8de065a2912f
files DasUnternehmen.tex Dbsrv.tex Dokumentation.tex Eis.tex Fazit.tex Makefile Milestones.tex Montis.tex Pics/Maka-Logo.png Pics/dictionary-maske.png Pics/dictionary-woerterbuch-frames.png Pics/dictionary-woerterbuch.png Pics/eis-bestellobligo-drilldown.png Pics/eis-bestellobligo.png Pics/eis-bestellungenohneab.png Pics/eis-fehlteile.png Pics/eis-fehlteilmanagement.png Pics/eis-ftm-drilldown-baugruppen.png Pics/eis-ftm-drilldown-lieferanten.png Pics/eis-hk-check.png Pics/eis-hk1euro.png Pics/eis-lieferantensuche.png Pics/eis-liefererinnerungen-email.png Pics/eis-liefererinnerungen.png Pics/eis-lieferkontaktdaten.png Pics/eis-popuphilfe.png Pics/eis-realewbz-drilldown.png Pics/eis-realewbz.png Pics/eis-spaeteslieferdatum.png Pics/eis-tagesgeschaeft.png Pics/montis-ftm-drilldown.png Pics/montis-ftm-maske.png Pics/montis-liefertreue-analyse.png Pics/montis-liefertreue-drilldown.png Pics/montis-liefertreue-maske.png Pics/montis-liefertreue-msummen.png Pics/montis-suchprofile.png Pics/translator-db-bearbeiten-auswaehlen.png Pics/translator-db-bearbeiten.png Pics/translator-db-datenpflege-filter.png Pics/translator-db-datenpflege-wenigerspalten.png Pics/translator-db-datenpflege.png Pics/translator-db-maske-de.png Pics/translator-db-maske-en.png Pics/translator-db-uebersetzen-en.png Rahmenbedingungen.tex Style01.tex Titel.tex TranslatorDb.tex Vorwort.tex Ziele.tex main.lof main.lot main.tex main.toc
diffstat 54 files changed, 792 insertions(+), 0 deletions(-) [+]
line diff
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/DasUnternehmen.tex	Sun Apr 15 02:44:56 2007 +0200
     1.3 @@ -0,0 +1,69 @@
     1.4 +\section{Unternehmensvorstellung}
     1.5 +
     1.6 +
     1.7 +
     1.8 +\subsection{Das Unternehmen}
     1.9 +
    1.10 +
    1.11 +\begin{quote}
    1.12 +Die \textbf{MAKA - Max Mayer Maschinenbau GmbH} ist ein inhabergeführtes Unternehmen mit rund 170 Mitarbeitern, das seine Wurzeln im schwäbischen Maschinenbau hat. Mit über 50 Jahren Erfahrung im Maschinenbau und über 25-jähriger Erfahrung im Bau von CNC-Spezialmaschinen setzt sich \textbf{MAKA} mit an die Spitze dieser Technik im den Bereichen Holz-, Aluminium- und Kunststoffbearbeitung.
    1.13 +
    1.14 +Ebenso werden individuelle Lösungen für die hohen Anforderungen im Modellbau und Gussbereich angeboten. Die Hochgeschwindigkeitsbearbeitung mit 5-Achs-Technik in der Aluminium-, Holz und Kunststoffbranche wird mit \textbf{MAKA}-CNC-Spezialmaschinen erfolgreich von weltweit führenden Firmen des Automobil-, Flugzeug-, Waggon-, Yacht-, Fassaden-, Möbel-, Türen- und Treppenbaus und von Spezialisten wie Tiefzieher, Kunststoff- und Acrylglasbearbeitern umgesetzt.
    1.15 +
    1.16 +Unser Unternehmen hat es sich zum Ziel gemacht, die richtige technische und wirtschaftlichste Lösung auf hohem Niveau zu bieten.
    1.17 +\end{quote}
    1.18 +
    1.19 +So beschreibt sich das größte Unternehmen Nersingens selbst. Neben dem Hauptsitz in Nersingen\footnote{Zehn Kilometer östlich von Ulm gelegen}, gehören die eigene Produktion in Neu-Ulm-Burlafingen, das Tochterunternehmen in England und 13 Vertretungen in Europa dazu.
    1.20 +
    1.21 +Der Umsatz verteilt sich zur Hälfte auf Deutschland, etwa 45\% im restlichen Europa (davon knapp 20\% im Vereinigten Königreich) und verbleibenden fünf Prozent in den USA und den Vereinigten Arabischen Emiraten.
    1.22 +
    1.23 +
    1.24 +\begin{figure}[hbt]
    1.25 +  \centering
    1.26 +  \includegraphics[width=4cm]{Pics/Maka-Logo.png}
    1.27 +  \caption{Das Firmenlogo}
    1.28 +\end{figure}
    1.29 +
    1.30 +
    1.31 +Als Etwas das viel über ein Unternehmen aussagt, möchte ich hier noch die Philosophie von \textbf{MAKA} anfügen.
    1.32 +\begin{quote}
    1.33 +  Made in Germany, Alles aus einer Hand und Kundennähe sind die tragenden Säulen der \textbf{MAKA}-Kundenphilosophie und Eckpfeiler der Erfolgs.
    1.34 +\end{quote}
    1.35 +
    1.36 +Das Unternehmen ist auch im Internet vertreten. Unter \texttt{http://maka.com} ist die Webpräsenz zu erreichen. Ebenfalls online zu finden ist der Unternehmensteil \textbf{MAKA - Tischlereimaschinen} mit dem 1952 das Unternehmen entstanden ist.
    1.37 +
    1.38 +
    1.39 +
    1.40 +
    1.41 +
    1.42 +
    1.43 +\subsection{Die IT-Abteilung}
    1.44 +
    1.45 +
    1.46 +Die IT-Abteilung bei \textbf{MAKA} umfasst drei Personen. Das sind: Der Abteilungsleiter, der sich, neben den vielfältigen Aufgaben seiner Position, auch um das ERP-System kümmert. Ein Systemadministrator der Hardwarebelange und die Standardsoftware unter sich hat. Und schließlich mein Betreuer, einstmals Student an der FH-Ulm, jetzt Programmierer und Verantwortlicher für das \textit{DBSRV}-Projekt bei \textbf{MAKA}.
    1.47 +
    1.48 +Hardware und Software werden intern verwaltet; Berater und einzelne Spezialisten werden von extern bezogen. Ganz allgemein wird ein ``möglichst viel in-house''-Konzept verfolgt.
    1.49 +
    1.50 +Die IT-Abteilung ist stark mit dem restlichen Unternehmen verwoben und hat, meiner Ansicht, eher wenig Entscheidungsmacht.
    1.51 +
    1.52 +
    1.53 +
    1.54 +
    1.55 +
    1.56 +
    1.57 +
    1.58 +
    1.59 +
    1.60 +\subsection{\textbf{MAKA} und die Hochschule}
    1.61 +
    1.62 +\textbf{MAKA} setzt als ERP-System das niederländische \textit{Baan} ein. Dieses, in einigen Punkten suboptimale, System, bietet vor allem eines nicht: Übersichtlichkeit. Viele Masken und Reports sind sehr im Detail. Sie ermöglicht zwar alle nötigen Aktionen und auch Abfragen wie ``Alle Fehlteile eines Projekts'' sind implementiert; wenn man aber wissen möchte, welche Bestellungen für diese Fehlteile laufen und wann diese vorraussichtlich geliefert werden, dann steigt der Aufwand für diese Informationen schnell exponentiell: Drei verschiedene Masken, nervige Nummerntipperei und eine große Zeitinvestition müssen dafür in Kauf genommen werden.
    1.63 +
    1.64 +Um diese Unzulänglichkeiten des ERP-Systems auszugleichen wurde 2004 von \textbf{MAKA} über den Dozent Herrn von Schwerin eine Zusammenarbeit zwischen dem Unternehmen und der Fachhochschule Ulm angeregt: In Projektcharakter analysierten die damaligen Studenten Andreas Heinemann und Fabian Heß die Situation, informierten sich über mögliche Lösungen, entwarfen das Konzept der heutigen Lösung und programmierten schließlich die ersten Anwendungen.
    1.65 +
    1.66 +Was als Projekt in ihrer Freizeit begann, führt über Praxissemester und Diplomarbeit, bei einem der Beiden sogar zur Festanstellung bei \textbf{MAKA}.
    1.67 +
    1.68 +\large{Erfolg auf ganzer Linie. Ein Musterprojekt der Hochschule!}
    1.69 +
    1.70 +
    1.71 +Seit dieser Zeit wurde die Zusammenarbeit mit der Hochschule weiter gepflegt. Ich selbst bin der inzwischen vierte Wirtschaftsinformatik-Student der bei \textbf{MAKA} die Verbindung, und damit den Wissens- und Erfahrungsaustausch, zwischen Forschung und Wirtschaft herstellt.
    1.72 +
     2.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     2.2 +++ b/Dbsrv.tex	Sun Apr 15 02:44:56 2007 +0200
     2.3 @@ -0,0 +1,39 @@
     2.4 +\section{Das DBSRV-Projekt}
     2.5 +
     2.6 +Wie in der Einführung beschrieben, wurde von den ersten Praktikanten bei \textbf{MAKA} das DBSRV-Projekt ins Leben gerufen.
     2.7 +Der DBSRV ist eine Art Framework für allerlei Programme die den Mitarbeitern zur Verfügung stehen. Zum Teil erweitern diese Programme die Funktion des ERP-Systems, aber es gibt auch Programme die komplett neue Funktionalitäten anbieten\footnote{Ein Beispiel hierfür wäre die Bilderdatenbank}.
     2.8 +All diese Programme sind von Praktikanten nach und nach geschrieben worden.
     2.9 +
    2.10 +Ich habe hier einfach an der Stelle weitergemacht an der mein Vorgänger aufgehört hatte. Pflichtenhefte, oder vielleicht besser ``Konzepte'' existierten dazu bereits.
    2.11 +
    2.12 +Im Folgendem werde ich den Begriff \textit{DBSRV} verwenden wenn ich dieses DBSRV-Projekt meine.
    2.13 +
    2.14 +
    2.15 +
    2.16 +
    2.17 +
    2.18 +Während meines Praktikums habe ich an drei Programmen gearbeitet:
    2.19 +
    2.20 +\begin{enumerate}
    2.21 +  \item Einkaufsinformationssystem (kurz EIS)\\
    2.22 +    Eine Abfragensammlung mit Reports wie Bestellobligo, Realer Wiederbeschaffungszeit und einem Fehlteilmanagement.
    2.23 +    Dieses Programm war von meinem Vorgänger schon zur Hälfte fertig gestellt.
    2.24 +
    2.25 +  \item Montageinformationssystem (kurz MontIS)\\
    2.26 +    Dem EIS recht ähnlich aber für die Montage. Zu implementieren war das Fehlteilmanagement und die Liefertreueanalyse.
    2.27 +    
    2.28 +  \item Translator-Datenbank \& Dictionary\\
    2.29 +    Eine Übersetzungsdatenbank für fremdsprachige Artikelbezeichungen um entsprechend lokalisierte Stücklisten drucken zu können.
    2.30 +
    2.31 +\end{enumerate}
    2.32 +
    2.33 +
    2.34 +
    2.35 +
    2.36 +\newpage
    2.37 +\section{Einarbeiten}
    2.38 +
    2.39 +Die erste Woche verbrachte ich damit die bestehende Codebasis des EIS und die Datenbank des ERP-Systems kennen und verstehen zu lernen. Dabei ist es natürlich eine Schwierigkeit sich die Denkmuster des vorherigen Programmierers zu verinnerlichen. Eine dabei sehr gute Entscheidung war den Code durch Refactoring kennenzulernen und gleichzeitig zu verbessern. Code zu lesen führt meist nicht zum gewünschten Erfolg (jedenfalls nicht in dem Maße). Indem man den Programmcode allerdings `umräumt', und die dabei zwangsläufig entstehenden Fehler\footnote{Die Erfahrung (und Murphy) zeigt, dass durch Refactoring immer Fehler entstehen werden. Oder wenn man es von der anderen Seite betrachtet, kommen so (Design-)Fehler zum Vorschein.} studiert, lernt man die Funktion des Codes sehr schnell und intensiv kennen.
    2.40 +
    2.41 +Nachdem ich die Programmiergewohnheiten meines Vorgängers analysiert hatte und, durch die Arbeit mit dem Code, einen gewissen Einblick in die Logik der Datenherkunft erhalten hatte, machte ich mich daran selbst meinen ersten Report zu schreiben. Das größte Problem am Anfang war dabei herauszufinden aus welchen Datenbanktabellen ich die benötigten Daten erhalte. Bei über 70 Datenbanktabellen, mit zudem recht kryptischen Namen, war das auch verständlich. Mit der Zeit erkennt man dann aber ein Schema hinter den Bezeichnungen und kann sie sich so herleiten. Als Beispiel möchte ich die Tabellenspalte \texttt{ttdpur041100.T\_ORNO} anführen. Das erste \texttt{t} ist bei allen Tabellen so, dann folgt ein \texttt{td} für das Baan-Modul ``distribution'' (engl. für ``Vertrieb'' oder ``Absatz''), \texttt{pur} steht für ``purchase'' (engl. für ``Beschaffung''), die \texttt{041} ist die Tabelle ``Bestellkopf'' und die \texttt{100} steht für die Echtfirma. Um solche Schemen nachvollziehen zu können war auch ein Wissen über den Aufbau eines ERP-Systems notwendig, das ich mir während des Praktikums angeeignet habe. Mit der Zeit habe ich dann auch ein Gefühl dafür bekommen wo ich welche Daten finde.
    2.42 +
     3.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     3.2 +++ b/Dokumentation.tex	Sun Apr 15 02:44:56 2007 +0200
     3.3 @@ -0,0 +1,33 @@
     3.4 +\section{Dokumentation}
     3.5 +
     3.6 +Die Dokumentation von Programmen gehört ebenso wie das Programmieren selbst zur Softwareentwicklung dazu. Ich habe meine Anwendungen natürlich dokumentiert. Dies war für mich zuerst einmal eine eher neue Sache, da ich mich zwar mit der Notwendigkeit von Dokumentationen schon beschäftigt, aber noch keine selbst geschrieben hatte. Bei der technischen Umsetzung hielt ich mich an die Form die meine Vorgänger eingeführt hatten: Microsoft Word-Dokumente. Diese wandelte ich mittels OpenOffice.org in ein PDF um.
     3.7 +
     3.8 +Mir war es wichtig, den Zusatzaufwand für die Dokumentation möglichst gering zu halten. Dieses Bestreben gründet zum Einen auf die allgemeine Erfahrung, dass Anwender keine Dokumentation lesen, und zum Anderen auf meine Überzeugung, dass nur der Quellcode selbst vollständig, aktuell und detailliert genug ist und deshalb vor allem er aussagekräftig und übersichtlich gemacht werden muss. Die Dokumentation sollte meiner Meinung nach nur als Ergänzung zum Quellcode gesehen werden. Sie ist jedoch trotzdem wichtig und notwendig um dem Entwickler schnell und direkt die grundlegende Logik und die nicht offensichtlichen Implementierungen des Programms offenzulegen. Des weiteren sollte sie dem Anwender Zusatzinformationen bieten, falls dieser ein Bedürfnis nach ihnen hat. Die Dokumentation für die beiden Personengruppen zu zweiteilen halte ich nicht unbedingt für sinnvoll, da auf diese Weise der Aufwand und die Redundanz steigt und bei Dokumentationen im Umfang von etwa 15 Seiten sollten die gesuchten Informationen noch recht einfach herauszufiltern sein.
     3.9 +
    3.10 +Meine Dokumentation enthält somit zum größten Teil die hier aufgezählten Informationen:
    3.11 +\begin{itemize}
    3.12 +  \item Grundsätzliche Informationen zur technischen Struktur des Programms
    3.13 +  \item Programmdesign-Prinzipien
    3.14 +  \item Kurzbeschreibung der einzelnen Programmteile und genauere Erläuterungen zu einzelnen Funktionen
    3.15 +  \item Tipps, Hinweise und Anmerkungen aller Art
    3.16 +  \item Konkrete Anleitungen falls nötig (Bei der Translator-Datenbank ist das zum Beispiel: ``So füge ich eine Sprache hinzu'')
    3.17 +\end{itemize}
    3.18 +
    3.19 +Was für mich nicht, oder nur in geringem Maße, in der Dokumentation vertreten sein sollte, sind:
    3.20 +\begin{itemize}
    3.21 +  \item Zu detaillierte Informationen
    3.22 +  \item Variablen-, Klassen-, Dateinamen und ähnliches
    3.23 +\end{itemize}
    3.24 +Diese Informationen sorgen doch nur für einen allzu hohen Aufwand zum Aktuellhalten der Dokumente. Um auf derartige Zusatzinformationen aber nicht verzichten zu müssen, sollte man hier automatische Tools einsetzten. Ich habe an dieser Stelle das Programm \textit{Doxygen}\footnote{\textit{Doxygen} ist freie Software und kann von der Website http://doxygen.org heruntergeladen werden.} eingesetzt. Die Ergebnisse für Klassen waren dabei sehr gut, der größte Teil der sonstigen Informationen eher weniger brauchbar. Der Aufwand für Doxygen-Kommentare im Quellcode ist gering und dient der Übersichtlichkeit des Codes selbst. Das Generieren der Doxygen-Dokumentation erfordert dann nur einen Programmaufruf, der Rest erfolgt automatisch.
    3.25 +
    3.26 +
    3.27 +Wie man im Text sicher schon heraushören konnte, habe ich keine spezielle Anwenderdokumentation in Form von einem Handbuch oder ähnlichem geschrieben. Wir erinnern uns: Der Benutzer ließt dieselbige ja doch nicht.\footnote{Diese Grundannahme sollte mit ein wenig Humor verstanden werden.} Deshalb sollte man dem Anwender die zusätzlichen Informationen zum Programm auf eine Weise anbieten, sodass er möglichst wenig davon mitbekommt und schon gar keinen zusätzlichen Aufwand hat.
    3.28 +
    3.29 +Diesen Überlegungen bin ich gefolgt und habe als erstes versucht meine Programmoberflächen möglichst natürlich zu gestalten. Der Benutzer sollte alles dort finden wo er es erwartet. Konzepte wie ``von links nach rechts'' bzw. ``von oben nach unten'', ``Gleiches zusammen'' und ``wiederkehrende Elemente'' machen hierbei den größten Teil aus. Alle meine Reports sollten ein \textit{Common Look'n'Feel}\footnote{Eine einheitliche Optik und Bedienung} haben.
    3.30 +
    3.31 +Als wichtige Komponente, beim Anbieten von Zusatzinformationen ohne separates Handbuch, stellte sich dabei das Universalattribut \texttt{title} von HTML-Tags heraus. Mit ihm ist es möglich beliebigen Elementen einen Tooltip-Text zuzuweisen. Fährt man dann im HTML-Dokument mit dem Mauszeiger über das Element und verweilt kurz darauf, so öffnet sich ein kleines Informationsfenster mit dem hinterlegten Text. Diese Möglichkeit habe ich konsequent genutzt. So können zum Beispiel bei allen Tabellen durch überfahren der Spaltenüberschriften genauere Informationen zu den enthaltenen Werten gewonnen werden.
    3.32 +
    3.33 +
    3.34 +Für diejenigen Benutzer die trotz meiner Bemühungen um ein selbsterklärendes Oberflächendesign gerne die Dokumentation lesen möchten, habe ich diese auf den Startmasken der einzelnen Programme jeweils verlinkt. Ein Fragezeichen in der rechten oberen Ecke führt einheitlich zur Dokumentation in PDF-Form.
    3.35 +
    3.36 +
     4.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     4.2 +++ b/Eis.tex	Sun Apr 15 02:44:56 2007 +0200
     4.3 @@ -0,0 +1,135 @@
     4.4 +\section{Das Einkaufsinformationssystem}
     4.5 +
     4.6 +
     4.7 +Dieses Programm umfasst Reports aus den Bereichen
     4.8 +\begin{itemize}
     4.9 +  \item Lieferantenanalysen
    4.10 +  \item Artikelanalysen
    4.11 +  \item Tagesgeschäft
    4.12 +  \item Fehlteilmanagement
    4.13 +\end{itemize}
    4.14 +Die ersten zwei Bereiche wurden von meinem Vorgänger schon fertig gestellt. Das Tagesgeschäft war meine erste Aufgabe.
    4.15 +Es war gut an einem bereits begonnen Programm weiterzumachen, da das im Normalfall einfach als selbst von Grund auf Entwerfen ist. Gerade wenn man sich mit dem System noch nicht besonders gut auskennt.
    4.16 +
    4.17 +
    4.18 +
    4.19 +
    4.20 +
    4.21 +
    4.22 +\subsection{Tagesgeschäft}
    4.23 +
    4.24 +\begin{figure}[hbt]
    4.25 +  \centering
    4.26 +  \includegraphics[width=10cm]{Pics/eis-tagesgeschaeft.png}
    4.27 +  \caption{Die Eingabemaske des Tagesgeschäft-Programmteils}\label{Fig:eis-tagesgeschaeft}
    4.28 +\end{figure}
    4.29 +
    4.30 +Der Reiter \textit{Tagesgeschäft} enthält im oberen Bereich Formularfelder mit denen die Daten eingeschränkt werden können. Auf diese Weise kann zum Beispiel nur ein bestimmter Lieferant, oder nur eine Gruppe von Artikeln betrachtet werden. Einzelne Einschränkungsfelder sind je nach gewähltem Report eventuell auch deaktiviert. So macht zum Beispiel beim \textit{Herstellkosten-Check}\footnote{Eine Auflistung von Artikeln deren Soll-Herstellkosten oder letzter Einkaufspreis mehr als 5\% von den Standard-Herstellkosten abweichen} eine Einschränkung nach Lieferant oder Einkäufer keinen Sinn, da hier die Artikel ohne sonstigen Zusammenhang betrachtet werden.
    4.31 +
    4.32 +Bei den Bestellnummernkreisen können beliebig weitere hinzugefügt werden. Bei Lieferant und Einkäufer kann über eine Suchfunktion die Lieferanten-/Einkäufer-Nummer anhand des Namens ermittelt werden. Und bei manchen Reports können die Datensätze zeitlich begrenzt werden.
    4.33 +
    4.34 +Ich möchte nun zwei Reports näher vorstellen.
    4.35 +
    4.36 +
    4.37 +
    4.38 +\subsubsection{Bestellobligoanalyse}
    4.39 +
    4.40 +Dieser Report stellt eine übersichtliche Darstellung der auf das Unternehmen zukommenden Kosten im Bereich Einkauf bereit.
    4.41 +Die Analyse bezieht sich erst einmal auf Kalenderwochen, aber Monatssummen sind vorhanden. Zudem sind für alle Zeiträume Drilldowns auf die konkreten Bestellungen vorhanden. Es wird also eine Bestellobligoübersicht für alle Detailstufen angeboten.
    4.42 +
    4.43 +\begin{figure}[hbt]
    4.44 +  \centering
    4.45 +  \includegraphics[width=10cm]{Pics/eis-bestellobligo.png}
    4.46 +  \caption{Die Bestellobligoanalyse}\label{Fig:eis-bestellobligo}
    4.47 +\end{figure}
    4.48 +
    4.49 +%\begin{figure}[hbt]
    4.50 +%  \centering
    4.51 +%  \includegraphics[width=14cm]{Pics/eis-bestellobligo-drilldown.png}
    4.52 +%  \caption{Drilldown bei der Bestellobligoanalyse}\label{Fig:eis-bestellobligo-drilldown}
    4.53 +%\end{figure}
    4.54 +
    4.55 +Im Drilldown zeigt ein Klick auf einen Lieferantennamen seine Kontaktdaten an.
    4.56 +
    4.57 +
    4.58 +
    4.59 +\subsubsection{Reale Wiederbeschaffungszeit}
    4.60 +
    4.61 +In diesem Report kann die tatsächliche (reale) Wiederbeschaffungszeit mit der, im Artikelstamm abgelegten, geplanten Wiederbeschaffungszeit verglichen werden. Bei größeren Abweichungen, die farblich hervorgehoben sind, können dann die Artikelstammdaten korrigiert werden. Falls dies nicht gemacht würde, würde es im, vom ERP-System generierten, Produktionsplan zu Wartezeiten und Verschiebungen kommen. Um die Zeitplanung im Produktionsplan möglichst optimal zu halten (Stichwort ``Just-in-time'') müssen die benötigten Daten natürlich auch möglichst exakt sein.
    4.62 +
    4.63 +Aber auch in der Beziehung zum Lieferant sind die reale Wiederbeschaffungszeit und ihre Abweichung zur Geplanten wichtige Daten. Mit einer anschaulichen Übersicht kann hier beim Lieferant ein gewisser Druck ausgeübt werden, falls er seine `versprochenen' Lieferzeiten nicht einhält. Oft ist bei Gesprächen mit dem Lieferant die reine Präsenz dieser Daten und ihre sofortige und detaillierte Abrufbarkeit, der entscheidende `Trumpf'.
    4.64 +
    4.65 +Wenn Artikel von verschiedenen Lieferanten bezogen werden, dann lassen sich diese sehr schön gegenüberstellen. Und gegen die Fakten aus Abbildung \ref{Fig:eis-realewbz-drilldown} muss der untere Lieferant erst einmal etwas sagen.
    4.66 +
    4.67 +\begin{figure}[hbt]
    4.68 +  \centering
    4.69 +  \includegraphics[width=10cm]{Pics/eis-realewbz-drilldown.png}
    4.70 +  \caption{Wiederbeschaffungszeiten eines Artikels von zwei Lieferanten}\label{Fig:eis-realewbz-drilldown}
    4.71 +\end{figure}
    4.72 +
    4.73 +
    4.74 +
    4.75 +
    4.76 +
    4.77 +
    4.78 +
    4.79 +
    4.80 +
    4.81 +\subsection{Fehlteilmanagement}
    4.82 +
    4.83 +\begin{figure}[hbt]
    4.84 +  \centering
    4.85 +  \includegraphics[width=10cm]{Pics/eis-fehlteilmanagement.png}
    4.86 +  \caption{Startmaske des Fehlteilmanagements}\label{Fig:eis-fehlteilmanagement}
    4.87 +\end{figure}
    4.88 +
    4.89 +Dieser Programmteil zeigt die momentanen Fehlteile und alle dafür laufenden Bestellungen auf.
    4.90 +
    4.91 +Als erstes wir eine Liste mit allen Projekten in denen noch Teile fehlen generiert. Von dieser kann je ein Drilldown mit einer Gruppierung nach Lieferanten oder nach Baugruppen aufgerufen werden. Die beiden Drilldowns bieten dabei leicht unterschiedliche Funktionen.
    4.92 +
    4.93 +Da das Fehlteilmanagement mich recht lange beschäftigt hat und auch im Montageinformationssystem integriert ist, möchte ich hier etwas genauer darauf eingehen.
    4.94 +
    4.95 +Anzumerken wäre hier vielleicht noch, dass das Fehlteilmanagement auch die komplizierteste Datenbeschaffung hatte --- Joins über zwölf Tabellen, ebensoviele Where-Bedingungen und eine getrennte Behandlung von kundenspezifischen und Standardartikeln. Hier hatte ich dann auch Performanceprobleme die nun zwar nicht ganz verschwunden, aber inzwischen in einem erträglichen Rahmen sind. Im Nachhinein gesehen, wäre es vielleicht besser gewesen, einfacheres SQL und dafür komplexeres PHP zu verwenden. Inwiefern die Geschwindigkeit dabei gestiegen (und die Lesbarkeit des Codes eventuell gesunken) wäre, darüber kann ich nur spekulieren.
    4.96 +
    4.97 +
    4.98 +\subsubsection{Drilldown nach Lieferanten}
    4.99 +
   4.100 +Die Tabelle ist logisch dreigeteilt:
   4.101 +\begin{itemize}
   4.102 +  \item Die linken acht Spalten (bis zur senkrechten schwarzen Linie) enthalten Daten zum Artikel selbst.
   4.103 +  \item Die nächsten vier Spalten stellen die Bestellung dar. Laufen mehrere Bestellungen die auf diesen Artikel passen, so werden sie allen angezeigt. Das Lieferdatum ist rötlich hinterlegt, falls die Bestellung erst nach dem benötigten Datum eintreffen würde.
   4.104 +  \item Die letzten Spalten ermöglichen es den Einkäufern zusätzliche Informationen zu den Bestellungen einzutragen und sich selbst an Bestellungen erinnern zu lassen.
   4.105 +\end{itemize}
   4.106 +
   4.107 +\begin{figure}[hbt]
   4.108 +  \centering
   4.109 +  \includegraphics[width=14cm]{Pics/eis-ftm-drilldown-lieferanten.png}
   4.110 +  \caption{Drilldown nach Lieferanten im Fehlteilmanagement}\label{eis-ftm-drilldown-lieferanten}
   4.111 +\end{figure}
   4.112 +
   4.113 +Dieser dritte Tabellenteil verbindet dann auch das Einkaufs- mit dem Montageinformationsystem. Denn die eingetragenen Notizen können über das Montageinformationssystem abgerufen werden. Eingetragene verschobene Liefertermine oder bereits vollzogenen Mahnungen ersparen so manchen Anruf.
   4.114 +
   4.115 +Mit der \textit{Erinnerung in X Tagen} kann man sich in einer selbst gewählten Anzahl von Tagen eine Erinnerung zukommen lassen. Diese wird von einem Job automatisch per Email verschickt.
   4.116 +Die Email-Adressen wurden dabei über eine Abfrage des LDAP-Verzeichnises gewonnen.
   4.117 +
   4.118 +Am Anfang der Seite und über jeder Baugruppe befindet sich ein Link mit dem ein PDF-Dokument der ganzen Seite oder nur der einzelnen Baugruppe erzeugt werden kann. Dieses ist besser zum Ausdrucken geeignet und kann problemlos per Email verschickt werden.
   4.119 +PDFs habe ich mit der FPDF-Bibliothek\footnote{\textit{FPDF} ist Freeware und auf http://fpdf.org zu finden.} erstellt. Die einzige Schwierigkeit dabei war das Überführen eines (eher) fließenden Layouts in HTML in ein Layout mit absoluten Maßen im PDF. Größere Probleme gab es dabei allerdings nicht.
   4.120 +
   4.121 +
   4.122 +
   4.123 +\subsubsection{Drilldown nach Baugruppen}
   4.124 +
   4.125 +\begin{figure}[hbt]
   4.126 +  \centering
   4.127 +  \includegraphics[width=14cm]{Pics/eis-ftm-drilldown-baugruppen.png}
   4.128 +  \caption{Drilldown nach Baugruppen im Fehlteilmanagement}\label{eis-ftm-drilldown-baugruppen}
   4.129 +\end{figure}
   4.130 +
   4.131 +Die Aufteilung der Tabelle entspricht der im Lieferantendrilldown.
   4.132 +
   4.133 +Anders sind hingegen die letzten Spalten. Der Drilldown nach Baugruppen stellt hier so etwas wie das Gegenstück zum Drilldown nach Lieferanten dar. Die Bemerkungen können hier nur gelesen werden, dafür können Aufforderungen zurück an die Einkäufer geschickt werden, dass sie ihre Bestellungen überprüfen sollten.
   4.134 +
   4.135 +Funktionen wie diese gehen über das ursprüngliche Programmkonzept hinaus. Sie sind erst im Laufe der Programmentwicklung aufgekommen und herangereift. Es war häufig so, dass das Programm erst mit dem Programmieren gewachsen ist und seine endgültige Gestalt bekommen hat. Dies war vor allem durch den engen Kontakt mit den Anwendern möglich. Sie haben jede Programmversion direkt getestet und mir Verbesserungen, Anregungen und Wünsche mitgeteilt. Mir hat es gut gefallen, auf diese Weise Programme zu ``erarbeiten''.
   4.136 +
   4.137 +
   4.138 +An dieser Stelle möchte ich nun zum Montageinformationssystem (kurz \textit{MontIS}) überleiten.
     5.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     5.2 +++ b/Fazit.tex	Sun Apr 15 02:44:56 2007 +0200
     5.3 @@ -0,0 +1,41 @@
     5.4 +\section{Fazit}
     5.5 +
     5.6 +
     5.7 +Mein primärer Grund mich bei \textbf{MAKA} zu bewerben, war das Aufgabenprofil der ausgeschriebenen Stelle:
     5.8 +\begin{quote}
     5.9 +Intranetprogrammierung mit PHP und MySQL
    5.10 +\end{quote}
    5.11 +
    5.12 +Da ich privat diese Technologie schon seit einigen Jahren verwende, war es mir jetzt wichtig, durch viel praktische Anwendung meine Kenntnisse zu festigen und auszubauen. Wo mein PHP-Können schon recht gut war, gingen meine (My)SQL-Fähigkeiten nur wenig über Grundkenntnisse hinaus.
    5.13 +
    5.14 +Diese Erwartung an das Praxissemester wurde voll erfüllt. Meine PHP-Kenntnisse haben sich stark gefestigt, der Umgang mit der Scriptsprache ist nun solide und sicher.
    5.15 +Aber was mir noch wichtiger ist: Die vorhandenen Kenntnisse haben sich nicht nur eingefahren, sondern ich habe sie auch konsequent ausbauen können. Das geht vom Erlernen der objektorientierten Bestandteile von PHP, über das Entwerfen von Standardklassen für die tägliche Arbeit (z.B. eine Datenbankklasse), bis hin zum \textit{Verstehen} der Sprache an sich und ihrer Grenzen.
    5.16 +
    5.17 +Ich habe das Gefühl, dass ich PHP wirklich kennen gelernt habe und dass sich mein Kenntnisniveau deutlich gehoben hat.
    5.18 +
    5.19 +
    5.20 +
    5.21 +Als zweiten großen Part war die Datenbanksprache SQL, in ihrer Unterart MySQL, vertreten. Meine zu Beginn eher grundsätzlichen Kenntnisse erfuhren einen richtigen Sprung nach vorne. Bald schon waren umfangreiche Joins kein Problem mehr und wenig später formulierte ich sie mit sicherem Gefühl. Der Sprachumfang von SQL ist bekanntermaßen nicht die Schwierigkeit, welche dagegen im Planen des besten Weges zu den richtigen Daten zu finden ist. Gerade an dieser Stelle habe ich durch die viele Übung einen Erfahrungsschatz ansammeln können, der durch Themen wie Indizierung und Queryoptimierung sinnvoll ergänzt wird.
    5.22 +
    5.23 +
    5.24 +
    5.25 +Abseits der Programmiersprachen habe ich die Gelegenheit genutzt, um auch meinen Workflow zu optimieren. Was diesen Bereich angeht, so ließ mir \textbf{MAKA} hier viele Freiheiten, um die ich sehr froh war. Denn nur dadurch konnte ich \textit{meinen} Weg finden und einen Arbeitsablauf entwerfen, der mir entspricht.
    5.26 +
    5.27 +Leider stand mir kein UNIX-System zur Verfügung, aber das wäre auch nur die absolute Krönung gewesen. Dennoch habe ich die Möglichkeit genutzt, den \textit{Vim}\footnote{Der \textit{Vim} ist ein verbesserter \textit{vi} welcher unter UNIX-Systemen zum Standard gehört. Der \textit{Vim} ist freie Software und kann unter http://vim.org heruntergeladen werden.} als Editor zu verwenden. Vor diesen sechs Monaten hatte ich ihn nur hin und wieder eingesetzt, jetzt kann ich ohne ihn nicht mehr leben! ;-)\footnote{hier soll mir ein Smiley erlaubt sein *grins* }
    5.28 +
    5.29 +
    5.30 +
    5.31 +Nicht zu vergessen ist jedoch das Wirtschaftswissen, das ich mir während der meiner Zeit bei \textbf{MAKA} aufgenommen habe. Bereitwillig und von sich aus wurden mir die Vorgänge im Unternehmen erklärt. Immer wieder wurde wurden mir Gelegenheiten angeboten, die internen Abläufe zu verstehen. An vielen Stellen konnte ich dabei Verbindungen zu den Vorlesungen der ersten Semester herstellen.
    5.32 +
    5.33 +
    5.34 +\vspace{2cm}
    5.35 +
    5.36 +{\bf
    5.37 +Für mich war dieses Praxissemester eine große Bereicherung und die Erfahrungen die ich in diesen sechs Monaten gemacht habe, werden mir in meinem Studium mit Sicherheit von großem Nutzen sein.
    5.38 +
    5.39 +Ich möchte mich dafür herzlich bei der Firma \textit{MAKA - Max Mayer Maschinenbau GmbH} bedanken --- es war eine tolle Zeit!
    5.40 +}
    5.41 +
    5.42 +\vspace{5cm}
    5.43 +Markus Schnalke\\
    5.44 +Breitingen, den \today
     6.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     6.2 +++ b/Makefile	Sun Apr 15 02:44:56 2007 +0200
     6.3 @@ -0,0 +1,23 @@
     6.4 +# Makefile fuer den PS-Bericht
     6.5 +
     6.6 +SRC = main.tex
     6.7 +OBJ = ${SRC:.tex=.pdf}
     6.8 +
     6.9 +all: xpdf
    6.10 +
    6.11 +#.tex.pdf:
    6.12 +#	@echo pdflatex $<
    6.13 +#	@pdflatex $<
    6.14 +
    6.15 +${OBJ}: ${SRC}
    6.16 +	@echo pdflatex $@
    6.17 +	@pdflatex ${SRC}
    6.18 +	@pdflatex ${SRC}
    6.19 +
    6.20 +xpdf: ${OBJ}
    6.21 +	@echo xpdf $@
    6.22 +	@xpdf -z page ${OBJ}
    6.23 +	@rm ${OBJ}
    6.24 +
    6.25 +
    6.26 +.PHONY: all xpdf
     7.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     7.2 +++ b/Milestones.tex	Sun Apr 15 02:44:56 2007 +0200
     7.3 @@ -0,0 +1,21 @@
     7.4 +\vspace{2cm}
     7.5 +{\Large \textbf{Milestones}}
     7.6 +
     7.7 +\begin{center}
     7.8 +\renewcommand{\baselinestretch}{1.4}\normalsize
     7.9 +\begin{tabular}{p{2cm}p{11cm}}
    7.10 +  \textbf{Datum} & \textbf{Event}\\ \hline
    7.11 +
    7.12 +  04.09.2006 & Praktikumsbeginn \\
    7.13 +  06.09.2006 & Besprechung EIS-Tagesgeschäft \\
    7.14 +  10.10.2006 & Präsentations EIS-Tagesgeschäft \\
    7.15 +  11.10.2006 & Besprechung EIS-Fehlteilmanagement \\
    7.16 +  09.11.2006 & Präsentation EIS-Fehlteilmanagement \\
    7.17 +  15.01.2007 & Besprechung Translator-Datenbank \\
    7.18 +  09.02.2007 & Diskussion Translator-Datenbank \\
    7.19 +  09.02.2007 & Präsentation MontIS \\
    7.20 +  21.02.2007 & Präsentation Translator-Datenbank \\
    7.21 +  02.03.2007 & Praktikumsende \\
    7.22 +\end{tabular}
    7.23 +\renewcommand{\baselinestretch}{1}\normalsize
    7.24 +\end{center}
     8.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     8.2 +++ b/Montis.tex	Sun Apr 15 02:44:56 2007 +0200
     8.3 @@ -0,0 +1,96 @@
     8.4 +\section{Das Montageinformationssystem}
     8.5 +
     8.6 +
     8.7 +Das Programm ist nach Konzept deutlich umfangreicher, es wurde allerdings beschlossen, dass zum jetzigen Zeitpunkt nur ein Teil dessen umgesetzt werden sollte. Dies sind die beiden Reiter:
     8.8 +\begin{itemize}
     8.9 +  \item Fehlteilmanagement
    8.10 +  \item Liefertreue
    8.11 +\end{itemize}
    8.12 +
    8.13 +Der Aufwand dafür wurde dadurch verringert, dass beide Programmteile auch schon im Einkaufsinformationssystem implementiert waren. Die Liefertreueanalyse von meinem Vorgänger das Fehlteilmanagement von mir. Somit war das reine Programmieren der Reports nicht das große Problem --- sie mussten zum großen Teil nur angepasst und mit anderen Daten versorgt werden.
    8.14 +
    8.15 +\begin{figure}[hbt]
    8.16 +  \centering
    8.17 +  \includegraphics[width=10cm]{Pics/montis-liefertreue-maske.png}
    8.18 +  \caption{Maske der Liefertreueanalyse im MontIS}\label{Fig:montis-liefertreue-maske}
    8.19 +\end{figure}
    8.20 +
    8.21 +Inzwischen kannte ich mich schon ganz gut mit der Datenbank des ERP-Systems und dem DBSRV-Framework aus und so war es gut, dass ich nun mit einem neuen Programm auch selbst neue Strukturen aufbauen konnte. Inzwischen hatte ich die Probleme und Umständlichkeiten des Einkaufsinformationssystems kennengelernt und wollte an diesen Stellen das MontIS besser machen.
    8.22 +
    8.23 +Ich nahm mir also Zeit um mir ein Grundgerüst zu bauen, das allgemein und skalierbar genug war um die einzelnen Reports dann ohne viel Anpassung der Programmbasis einbauen zu können. Auch habe ich zu diesem Zeitpunkt angefangen mir Klassen für wiederkehrende Anforderungen zu schreiben. Eine Datenbankklasse und eine zur Handhabung und Ausgabe von Ergebnistabellen seien hier erwähnt.
    8.24 +
    8.25 +An denen Punkten meiner neuen Struktur, an denen ich keine überzeugende Lösung finden konnte, habe ich auf die alten Strukturen aus dem EIS zurückgegriffen. So konnte ich kreativ neue Ansätze einarbeiten, hatte jedoch jederzeit auch eine funktionierende (wenn auch nicht immer gute) Implementierung als Fallback zur Verfügung. Mein Montageinformationssystem wurde dann zu eben jener Mischung aus Neuem und Altem und entspricht der Entwicklung meiner Fähigkeiten.
    8.26 +
    8.27 +Auch bot das MontIS eine bessere Übersicht und Handhabbarkeit die das, meiner Meinung nach, etwas überladene Einkaufsinformationssystem missen ließ.
    8.28 +
    8.29 +
    8.30 +Das Fehlteilmanagement entspricht dabei in den meisten Punkten dem des EIS. Die Liefertreueanalyse dagegen möchte ich näher vorstellen.
    8.31 +
    8.32 +
    8.33 +
    8.34 +
    8.35 +\subsection{Liefertreueanalyse}
    8.36 +
    8.37 +Die Optik und Struktur des Reports wurden sein Gegenstück aus dem Einkaufsinformationssystem angelehnt. Die Anpassungen waren eher Restrukturierungen des Source-Codes, und die andere Datenbasis natürlich.
    8.38 +
    8.39 +Hier hatte ich nun auch Gelegenheit mich mit den Diagrammklassen des \textit{jpgraph}-Pakets zu beschäftigen. Zwei damit erstellt Diagramme stellen auf der ersten Seite des Reports die grundsätzlichen Verteilungen auf einfach erfassbare Weise dar.
    8.40 +
    8.41 +\begin{figure}[hbt]
    8.42 +  \centering
    8.43 +  \includegraphics[width=14cm]{Pics/montis-liefertreue-analyse.png}
    8.44 +  \caption{Liefertreueanalyse der Montage}\label{Fig:montis-liefertreue-analyse}
    8.45 +\end{figure}
    8.46 +
    8.47 +Im linken oberen Bereich zeigt ein Balkendiagramm die Lieferdatumsabweichungen der Fertigung über die letzten 13 Monate an. Um eventuell Beeinflussungen durch die Auftragsmenge erkennen zu können wurde die Anzahl der Aufträge und deren Umsatz als Linien im Hintergrund ebenfalls dargestellt. Die flache rote Linie zeigt dabei die Anzahl der kurzfristig angelegten Aufträge die somit kaum geplant werden können.
    8.48 +
    8.49 +Darunter befinden sich zwei Kuchendiagramme die Gesamtverteilungen für das laufende und vorherige Jahr anzeigen.
    8.50 +
    8.51 +Auf der rechten Seite sind diese Werte noch einmal als Absolut- und Prozentzahlen verfügbar.
    8.52 +
    8.53 +
    8.54 +Die Zeiträume in denen Lieferungen als ``zu früh'', ``pünktlich'', ``zu spät'' und ``viel zu spät'' gewertet werden, sind in einer Includedatei global für das ganze Programm festgelegt und werden in den Reports dann dynamisch von dort bezogen. Ich habe stets darauf geachtet \textit{Magic Numbers}\footnote{\textit{Magic Numbers} sind hier feste Zahlen im Code die nicht 0 oder 1 sind} zu vermeiden und solche Werte immer dynamisch und zentral zu beziehen.
    8.55 +
    8.56 +
    8.57 +Für das laufende und vorige Jahr ist je ein Drilldown verfügbar der zu einer Monatssummenübersicht führt. In dieser lassen sind nun ganz konkret alle einzelnen Lieferpünktlichkeiten und Monate aufschlüsseln - jede Kombination und die jeweiligen Summen.
    8.58 +
    8.59 +\begin{figure}[hbt]
    8.60 +  \centering
    8.61 +  \includegraphics[width=10cm]{Pics/montis-liefertreue-msummen.png}
    8.62 +  \caption{Monatssummendrilldown der Liefertreueanalyse}\label{Fig:montis-liefertreue-msummen}
    8.63 +\end{figure}
    8.64 +
    8.65 +Jede unterstrichene Zahl führt weiter auf einen Drilldown mit genau diesen Aufträgen.
    8.66 +
    8.67 +Man sieht die Vorlaufzeit\footnote{Hier die Zeit zwischen Anlagedatum und geplantem Lieferdatum. Normalerweise würde man aber nur die Zeit von Anlage bis zum geplanten Montagebeginn als Vorlaufzeit bezeichnen} welche rot hinterlegt ist, falls sie kürzer als sieben Tage ist. In diesem Fall würde man sie als ``Schnellschüsse'' bezeichnen. Diese Schnellschüsse entsprechen der, im Balkendiagramm auf der ersten Reportseite enthaltenen, roten Linie.
    8.68 +
    8.69 +Der zweite entscheidende Wert ist die Abweichung zwischen geplantem und tatsächlichem Lieferdatum, die mit den bekannten Farben in die vier Zeiträume aufgeteilt ist.
    8.70 +
    8.71 +\begin{figure}[hbt]
    8.72 +  \centering
    8.73 +  \includegraphics[width=10cm]{Pics/montis-liefertreue-drilldown.png}
    8.74 +  \caption{Detaillierter Drilldown auf einzelne Aufträge}\label{Fig:montis-liefertreue-drilldown}
    8.75 +\end{figure}
    8.76 +
    8.77 +Wie alle größeren Tabellen in meinen Programmen wurde diese mithilfe meiner selbst geschriebenen \texttt{Ergebnisklasse.class.php} gefüllt, sortiert und ausgegeben. Wie man an den Pfeilen in der zweiten Titelzeile sieht, kann diese Tabelle nach jeder beliebigen Spalte sortiert werden. Diese Funktionalität war dank der Klasse mit minimalem Mehraufwand möglich und wurde deshalb auch konsequent verwendet.
    8.78 +
    8.79 +
    8.80 +
    8.81 +
    8.82 +\subsection{Suchprofile}
    8.83 +
    8.84 +Wie bereits in einem anderen Programm auf dem DBSRV implementiert, sollte auch das Montageinformationssystem \textit{Suchprofile} zur Verfügung stellen. Dabei handelt es sich um die Möglichkeit eine ausgefüllte Maske abzuspeichern und jederzeit wieder aufzurufen. So können bestimmte Reports ohne erneutes Ausfüllen der Maske nochmal aufgerufen werden. Ein Beispiel dafür wäre eine Abfrage die sich nur auf eine bestimmte Untermenge von Produktionsaufträgen und Artikelnummern bezieht.
    8.85 +
    8.86 +Als der Wunsch aufkam dieses Feature ins MontIS einzubauen, war es für mich ein tolles Gefühl festzustellen, dass sich meine Grundstruktur nun auszahlte. In ein paar Stunden war es mir möglich die Funktionalität komplett einzubauen ohne größere Änderungen am Programm vornehmen zu müssen. Gleichzeitig konnte ich die Realisierung flexibel und skalierbar halten. So ist es nun möglich beliebig neue Enschränkungsfelder zur Maske hinzuzufügen oder wegzunehmen --- an den Suchprofilen muss dazu nichts verändert werden. Ebenso funktionieren auch alte gespeicherte Profile mit neuen Masken.
    8.87 +
    8.88 +Würde man die gleiche Funktionalität im Einkaufsinformationssystem einbauen möchten, so würde es wohl mehrere Tage in Anspruch nehmen und wäre doch deutlich statischer.
    8.89 +
    8.90 +\begin{figure}[hbt]
    8.91 +  \centering
    8.92 +  \includegraphics[width=4cm]{Pics/montis-suchprofile.png}
    8.93 +  \caption{Menü für Suchprofile}\label{Fig:montis-suchprofile}
    8.94 +\end{figure}
    8.95 +
    8.96 +
    8.97 +
    8.98 +
    8.99 +Nach Abschluss des Einkaufs- und  des Montageinformationssystems folgte ein komplett anderes Projekt: Die Reimplementierung der Translator-Datenbank in PHP und MySQL.
     9.1 Binary file Pics/Maka-Logo.png has changed
    10.1 Binary file Pics/dictionary-maske.png has changed
    11.1 Binary file Pics/dictionary-woerterbuch-frames.png has changed
    12.1 Binary file Pics/dictionary-woerterbuch.png has changed
    13.1 Binary file Pics/eis-bestellobligo-drilldown.png has changed
    14.1 Binary file Pics/eis-bestellobligo.png has changed
    15.1 Binary file Pics/eis-bestellungenohneab.png has changed
    16.1 Binary file Pics/eis-fehlteile.png has changed
    17.1 Binary file Pics/eis-fehlteilmanagement.png has changed
    18.1 Binary file Pics/eis-ftm-drilldown-baugruppen.png has changed
    19.1 Binary file Pics/eis-ftm-drilldown-lieferanten.png has changed
    20.1 Binary file Pics/eis-hk-check.png has changed
    21.1 Binary file Pics/eis-hk1euro.png has changed
    22.1 Binary file Pics/eis-lieferantensuche.png has changed
    23.1 Binary file Pics/eis-liefererinnerungen-email.png has changed
    24.1 Binary file Pics/eis-liefererinnerungen.png has changed
    25.1 Binary file Pics/eis-lieferkontaktdaten.png has changed
    26.1 Binary file Pics/eis-popuphilfe.png has changed
    27.1 Binary file Pics/eis-realewbz-drilldown.png has changed
    28.1 Binary file Pics/eis-realewbz.png has changed
    29.1 Binary file Pics/eis-spaeteslieferdatum.png has changed
    30.1 Binary file Pics/eis-tagesgeschaeft.png has changed
    31.1 Binary file Pics/montis-ftm-drilldown.png has changed
    32.1 Binary file Pics/montis-ftm-maske.png has changed
    33.1 Binary file Pics/montis-liefertreue-analyse.png has changed
    34.1 Binary file Pics/montis-liefertreue-drilldown.png has changed
    35.1 Binary file Pics/montis-liefertreue-maske.png has changed
    36.1 Binary file Pics/montis-liefertreue-msummen.png has changed
    37.1 Binary file Pics/montis-suchprofile.png has changed
    38.1 Binary file Pics/translator-db-bearbeiten-auswaehlen.png has changed
    39.1 Binary file Pics/translator-db-bearbeiten.png has changed
    40.1 Binary file Pics/translator-db-datenpflege-filter.png has changed
    41.1 Binary file Pics/translator-db-datenpflege-wenigerspalten.png has changed
    42.1 Binary file Pics/translator-db-datenpflege.png has changed
    43.1 Binary file Pics/translator-db-maske-de.png has changed
    44.1 Binary file Pics/translator-db-maske-en.png has changed
    45.1 Binary file Pics/translator-db-uebersetzen-en.png has changed
    46.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    46.2 +++ b/Rahmenbedingungen.tex	Sun Apr 15 02:44:56 2007 +0200
    46.3 @@ -0,0 +1,15 @@
    46.4 +\section{Rahmenbedingungen}
    46.5 +
    46.6 +
    46.7 +Bevor ich näher auf meine Tätigkeit für die \textbf{Max Mayer Maschinenbau GmbH} eingehe, möchte ich zuerst die gegebene Entwicklungssituation beschreiben.
    46.8 +
    46.9 +Grundsätzlich hatte ich sehr viele Freiräume die Situation an meine Wünsche und Bedürfnisse anzupassen.
   46.10 +
   46.11 +Die Entwicklung der Programme fand stets im direkten Kontakt mit den späteren Anwenden statt. Das war, vor allem zu Beginn aber auch später noch, notwenig, da oft nur sie das nötige Hintergrund- und Praxiswissen hatten.
   46.12 +
   46.13 +Des Weiteren entwickelte ich direkt am Live-System. Anfangs war ich darüber eher überrascht, hätte ich mir dies in einem Unternehmen wie \textbf{MAKA} nicht vorstellen können. Doch diese scheinbare Unprofessionalität stellte sich schnell als sehr erfolgreich heraus. Änderungen und Neuentwicklungen meinerseits waren auf diese Weise sofort verfügbar und in Verbindung mit dem engen Anwenderkontakt konnte ich von ihrem direkten Feedback profitieren.
   46.14 +Mit der Entwicklung am Live-System wird aber natürlich in Kauf genommen, dass es entwicklungsbedingt zu Ausfällen kommen kann. Da das System nicht von \textit{entscheidender} Notwendigkeit ist, sondern eher Zusatznutzen und Komfort bietet, ist dies akzeptabel. Im Allgemeinen treten Ausfälle nur in Programmteilen auf, an denen gerade programmiert wird.
   46.15 +
   46.16 +Ein weiterer Punkt um dieses Vorgehen verständlich zu machen, ist die Dynamik des Systems selbst. Während ich mir einem Programmteil beschäftigt war, habe ich nebenher auch kleine Änderungswünsche und Bugfixes für andere (ältere) Programmteile umgesetzt. Eigentlich gibt es kein \textit{abgeschlossen} bei diesen Programmen, denn sie alle sind einer ständigen Veränderung und Anpassung unterworfen. Dieses System \textit{lebt} ... auch weil ständig daran programmiert wird.
   46.17 +
   46.18 +
    47.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    47.2 +++ b/Style01.tex	Sun Apr 15 02:44:56 2007 +0200
    47.3 @@ -0,0 +1,15 @@
    47.4 +
    47.5 +\setkomafont{sectioning}{\normalfont\normalcolor\bfseries}
    47.6 +
    47.7 +\setlength{\parindent}{0em}
    47.8 +\setlength{\parskip}{1.0ex plus 1.0ex minus 0.5ex}
    47.9 +
   47.10 +\pagestyle{scrheadings}
   47.11 +
   47.12 +\setcounter{tocdepth}{2}
   47.13 +
   47.14 +
   47.15 +
   47.16 +\ifoot[]{\textsc{Markus Schnalke}}
   47.17 +\cfoot{}
   47.18 +\ofoot[]{\thepage}
    48.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    48.2 +++ b/Titel.tex	Sun Apr 15 02:44:56 2007 +0200
    48.3 @@ -0,0 +1,37 @@
    48.4 +\begin{titlepage}
    48.5 +
    48.6 +\title{Praxissemester bei MAKA}
    48.7 +\author{markus schnalke}
    48.8 +
    48.9 +
   48.10 +\thispagestyle{empty}
   48.11 +
   48.12 +%\maketitle
   48.13 +%
   48.14 +%\begin{center}
   48.15 +%  Dies ist der Bericht zu meinem ersten Praxissemester im Studiengang Wirtschaftsinformatik an der Hochschule Ulm. Ich wählte die \textbf{MAKA - Max Mayer Maschinenbau GmbH} 
   48.16 +%  \small{Dieser Bericht ist untersteht einer Creative Commons-Lizenz\footnote{Namensnennung-NichtKommerziell-KeineBearbeitung 2.5: http://creativecommons.org/licenses/by-nc-nd/2.5/deed.de}. Ausgenommen hiervon sind die zitierten Texte.}
   48.17 +%\end{center}
   48.18 +
   48.19 +
   48.20 +\begin{flushright}
   48.21 +
   48.22 +\rule[8cm]{0cm}{0cm}
   48.23 +{\Huge Mein Praxissemester\\ bei \textbf{MAKA}}
   48.24 +
   48.25 +\rule[2cm]{0cm}{0cm}
   48.26 +\textsc{Markus Schnalke\\MatNr: 039131}
   48.27 +
   48.28 +\end{flushright}
   48.29 +
   48.30 +
   48.31 +
   48.32 +\rule[7cm]{0cm}{0cm}
   48.33 +
   48.34 +\textit{Dies ist der Bericht zu meinem ersten Praxissemester im Studiengang Wirtschaftsinformatik an der Hochschule Ulm. Ich absolvierte dieses Praktikum in der IT-Abteilung der \textbf{MAKA - Max Mayer Maschinenbau GmbH} in Nersingen.} 
   48.35 +
   48.36 +{\tiny Dieses Dokument untersteht einer Creative Commons-Lizenz (Namensnennung - NichtKommerziell - KeineBearbeitung 2.5). }
   48.37 +
   48.38 +
   48.39 +\end{titlepage}
   48.40 +
    49.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    49.2 +++ b/TranslatorDb.tex	Sun Apr 15 02:44:56 2007 +0200
    49.3 @@ -0,0 +1,115 @@
    49.4 +\section{Die Translator-Datenbank}
    49.5 +
    49.6 +
    49.7 +
    49.8 +\textbf{MAKA} ist ein Unternehmen, das seine Maschinen europaweit (und einzeln auch in alle Welt) verkauft. Per Gesetz muss die bei der Maschine mitgelieferte Dokumentation in einer landestypischen Sprache verfasst sein. Für die Stückliste, als Teil der Dokumentation gilt das somit auch. Nun sind Stücklisten bei zwei Maschinen quasi nie identisch, aber auch selten komplett verschieden. Komplette Neuübersetzungen wären also Zeit- und Geldverschwendung, Wiederverwendbarkeit von Übersetzungen ist aber auch nur auf Artikelebene gegeben.
    49.9 +
   49.10 +Aus diesen Gründen wurde schon vor einigen Jahren ein Access-Programm geschrieben um sprachlich angepasste Stücklisten generieren zu können. Es konnten Übersetzungen eingetragen und dann fertige Stücklisten gedruckt werden. Dieses Programm hatte gerade bei der Performance und durch die nötige Sonderbehandlung von speziellen Baugruppen so seine Probleme. Nun war es meine Aufgabe dieses Programm in PHP und MySQL neu zu schreiben und in das DBSRV-Projekt einzugliedern.
   49.11 +
   49.12 +\begin{figure}[hbt]
   49.13 +  \centering
   49.14 +  \includegraphics[width=10cm]{Pics/translator-db-maske-de.png}
   49.15 +  \caption{Startmaske der Translator-Datenbank}
   49.16 +\end{figure}
   49.17 +
   49.18 +
   49.19 +Nachdem ich im Montageinformationssystem schon einige grundsätzliche Überlegungen zur Grundstruktur des Programms umsetzten konnte, aber dennoch noch stark an die vom Einkaufsinformationssystem vorgegebene Struktur angelehnt war, hatte ich nun mit der Translator-Datenbank die Möglichkeit ein Programm komplett auf ein selbst designtes Strukturkonzept aufzubauen. Diese Möglichkeit war mir sehr wichtig, da ich mir über Programmdesignfragen viele Gedanken mache und meine Überlegungen dazu natürlich auch in der Praxis erproben möchte. Zudem ist es ein unbefriedigendes Gefühl mit konzeptionell schlechten Programmstrukturen zu arbeiten. Oft finden sich die Unzulänglichkeiten von Konzepten halt erst bei ihrem Einsatz. Sie dann umzustellen erfordert (auch bei Extreme Programming) immer großen Refactoring-Aufwand. So läuft es meist darauf hinaus, dass man an der gegebenen, nicht optimalen, aber dennoch brauchbaren Programmbasis festhält. Wichtig ist dann halt, dass man beim nächsten Programmdesign die Probleme des Vorhergehenden zu eliminieren versucht.
   49.20 +
   49.21 +Ich hatte nun die Gelegenheit die Erfahrungen aus EIS und MontIS mit meinem sonstigen neu erworbenen Wissen zu verschmelzen und daraus das bestmögliche Grundgerüst für die Translator-Datenbank zu kreieren. Schön war dabei, dass ich mich gleichzeitig recht wenig um die eigentliche Funktion des Programms kümmern musste, da es ein Vorgängerprogramm als Muster gab und die Programmlogik nicht besonders komplex war. Eine perfekte Ausgangssituation!
   49.22 +
   49.23 +
   49.24 +
   49.25 +Die verschiedenen Funktionen der Translator-Datenbank wurden in drei Hauptteile gegliedert.
   49.26 +\begin{itemize}
   49.27 +  \item Stückliste generieren\\
   49.28 +        Hier kann eine Stückliste in der ausgewählten Sprache als PDF erzeugt werden.
   49.29 +  \item Stückliste übersetzen\\
   49.30 +        Erzeugt ein HTML-Formular mit allen noch fehlenden Übersetzungen eines Projekts, oder generiert eine Excel-Tabelle für externe Übersetzungsbüros.
   49.31 +  \item Datenpflege\\
   49.32 +        Ermöglicht die direkte Bearbeitung der Datenbank. Dies ist nur ausgewählten Personen gestattet.
   49.33 +\end{itemize}
   49.34 +
   49.35 +Im Folgenden möchte ich nun einzelne Funktionen der Translator-Datenbank genauer erklären.
   49.36 +
   49.37 +
   49.38 +
   49.39 +
   49.40 +
   49.41 +\subsection{Mehrsprachigkeit}
   49.42 +
   49.43 +Eine zentrale Anforderung der Translator-Datenbank war ihre Mehrsprachigkeit. Da das Programm auch von den der Tochterfirma \textbf{MAKA-UK} und später eventuell auch von den anderen Auslandsvertretungen genutzt werden sollte, musste die Benutzeroberfläche in verschiedenen Sprachen anwählbar sein. Die Menge dieser Sprachen sollte dynamisch erweiterbar sein. Ebenso war eine beliebige Anzahl von Sprachen für Stücklistenübersetzungen gefordert.
   49.44 +
   49.45 +Die Benutzeroberfläche wird mit Texten aus Sprachdateien versorgt, die mittels einer PHP-Klasse \texttt{Gettext.class.php} ausgelesen werden. Im Programmquellcode selbst stehen lediglich Textidentifikator die dem Objekt der Gettext-Klasse übergeben werden. Zurückgeliefert wird dann der betreffende Text in der Sprache mit der das Objekt initialisiert wurde. Das folgende Codebeispiel demonstriert die Verwendung:
   49.46 +
   49.47 +\begin{verbatim}
   49.48 +<?php
   49.49 +
   49.50 +  include 'Classes/Gettext.class.php';
   49.51 +
   49.52 +  // the language for the translation  is taken from the session
   49.53 +  $gt = new Gettext($_SESSION['lang_gui']);
   49.54 +
   49.55 +  echo $gt->_('hello_world');
   49.56 +
   49.57 +?>
   49.58 +\end{verbatim}
   49.59 +Ausgegeben wird dabei je nach eingestellter Sprache ``Hallo Welt!'', ``Hello world!'', oder was auch immer in der jeweiligen Sprachdatei für den Identifikator \texttt{hello\_world} hinterlegt ist.
   49.60 +
   49.61 +Fehlende Texte werden in der Form \texttt{\#\#identifier\#\#} zurückgegeben. Auf diese Weise bleibt das Programm jederzeit benutzbar, auch wenn Sprachdateien nicht komplett sind. Ebenso ist es möglich auch nicht vollständig übersetzte Stücklisten zu generieren; die fehlenden Bezeichnungen bleiben leer und können gegebenenfalls auch von Hand nachgetragen werden. Eine derartige Vorgehensweise ist keineswegs angestrebt, aber trotzdem ermöglicht um die reine Funktion des Programms zu erhalten.
   49.62 +
   49.63 +Die Sprachen für die Programmoberfläche und für die Stücklisten kann im oberen linken Bereich der Startmaske gewählt werden. Ein Wechsel der Oberflächesprache wird sofort wirksam. Das heißt, die komplette Oberfläche ist sofort in der gewählten Sprache nutzbar. Die Sprachauswahl für die Oberfläche zeigt dabei die Sprachnamen in der jeweiligen Sprache selbst an, die Dropdownbox mit den Sprachen für die Stücklisten ist in der gewählten Oberflächensprache. Das Programmdesign sollte an jeder Stelle die erwartete Implementierung bieten --- auch \textit{Principle of least surprise} genannt.
   49.64 +
   49.65 +
   49.66 +
   49.67 +\subsection{Standardstücklisten}
   49.68 +
   49.69 +Um alte Maschinen auch nachträglich mit Stücklisten versorgen zu können, wurde diese inzwischen überholte Form der Stücklisten ebenfalls implementiert. Die Unterscheidung welcher Stücklistentyp erzeugt werden muss, geschieht automatisch anhand der Projektnummer. Die Algorithmen um die Stücklisten aufzustellen unterscheiden sich grundlegend. Wo für neue Projektstücklisten flache Datenbankabfragen genügen müssen die Standardstücklisten rekursiv als Baum aufgebaut werden. Wobei keine Baugruppe mehrfach in der Stückliste vorkommen soll, statt dessen müssen nur die Mengen angepasst werden.
   49.70 +
   49.71 +Bei der Vorgängerversion der Translator-Datenbank in Access war es noch Aufgabe des Anwenders, sich um all diese Sonderfälle zu kümmern, jetzt bekommt der Benutzer von all dem gar nichts mehr mit.
   49.72 +
   49.73 +
   49.74 +
   49.75 +\subsection{Datenpflege}
   49.76 +
   49.77 +\begin{figure}[hbt]
   49.78 +  \centering
   49.79 +  \includegraphics[width=10cm]{Pics/translator-db-datenpflege-wenigerspalten.png}
   49.80 +  \caption{Datenpflege mit ausgeblendeten Spalten}\label{Fig:datenpflege-wenigerspalten}
   49.81 +\end{figure}
   49.82 +
   49.83 +Im Datenpflege-Fenster werden alle Datensätze der Datenbank aufgelistet. Um die vielen Datensätze handhabbar zu halten, wurde eine seitenweise Darstellung gewählt. Die Navigation um durch die Seiten zu blättern, zeigt nur eine sinnvolle Anzahl von Seitenzahlen an. Die Tabellenspalten zeigen die in der Datenbank hinterlegten Spalten an. Um die Übersichtlichkeit zu fördern können einzelne Spalten aus und wieder eingeblendet werden, wie in Abbildung \ref{Fig:datenpflege-wenigerspalten} zu sehen ist. Die Spalten werden dynamisch verwaltet, das heißt, es werden einfach alle Spalten deren Spaltenname einem bestimmten Schema entspricht als Sprachspalten angesehen und eingefügt.
   49.84 +
   49.85 +Die Datensätze können nach Artikelnummer eingeschränkt oder nach einem Begriff gefiltert werden. Zudem kann die Tabelle natürlich nach allen Spalten sortiert werden.
   49.86 +
   49.87 +Die einzelnen Datensätze können hier bearbeitet, gelöscht und neue Datensätze können angelegt werden.
   49.88 +
   49.89 +
   49.90 +\subsubsection{Datensatz bearbeiten}
   49.91 +
   49.92 +Beim Speichern von Übersetzungen habe ich erneut stark darauf geachtet, dass das Programm automatisch die erwartete Funktion ausführt. So werden Datensätze nur überschrieben wenn lediglich Übersetzungen angepasst wurden. Besteht allerdings die Gefahr, dass unbeteiligte Daten überschrieben werden, was bei einer falsch getippten Artikelnummer der Fall wäre, dann werden beide Datensatzversionen gegenübergestellt und dem Benutzer die Entscheidung überlassen, welche Daten gespeichert werden sollen. Dies ist in Abbildung \ref{Fig:bearbeiten-auswaehlen} zu sehen.
   49.93 +
   49.94 +\begin{figure}[hbt]
   49.95 +  \centering
   49.96 +  \includegraphics[width=14cm]{Pics/translator-db-bearbeiten-auswaehlen.png}
   49.97 +  \caption{Zwei Übersetzungen kollidieren und der Benutzer muss entscheiden}\label{Fig:bearbeiten-auswaehlen}
   49.98 +\end{figure}
   49.99 +
  49.100 +
  49.101 +
  49.102 +
  49.103 +
  49.104 +\subsection{Das Dictionary}
  49.105 +
  49.106 +Ein für den User eigenständiges Programm, aber intern doch direkt mit der Translator-Datenbank verbunden und auch aus ihr hervorgegangen, ist das \textit{Dictionary}. Dieses ist eine Art Nachschlagewerk für übersetzte Artikelbezeichnungen und für alle Mitarbeiter zugänglich. Von einer simplen Startmaske kommt man zu einer Ansicht die der Translator-Datenbank-Datenpflege nachempfunden ist. Hier wird auf den Datenbestand allerdings nur lesend zugegriffen. Sinn des Dictionary ist es, eine Unterstützung im internationalen Kontakt zu sein, um auf einheitliche Bezeichnungen zurückgreifen zu können.
  49.107 +
  49.108 +Wie auch in der Datenpflege der Translator-Datenbank können die Datensätze beliebig sortiert, gefiltert und nach Artikelnummer eingeschränkt werden. Auch lassen sich einzelne Sprachspalten ein- und ausblenden um die Übersicht zu fördern.
  49.109 +
  49.110 +\begin{figure}[hbt]
  49.111 +  \centering
  49.112 +  \includegraphics[width=14cm]{Pics/dictionary-woerterbuch-frames.png}
  49.113 +  \caption{Typische Ansicht des Dictionary mit markierten Unstimmigkeiten}\label{Fig:dictionary-woerterbuch-frames}
  49.114 +\end{figure}
  49.115 +
  49.116 +Da es in Abbildung \ref{Fig:dictionary-woerterbuch-frames} sehr schön sichtbar ist, möchte ich an dieser Stelle eine weitere Möglichkeit der Datenpflege-Ansicht beschreiben: Indem man nach Sprachspalten sortiert, stehen gleiche Bezeichnungen untereinander. So fallen sehr schnell Unstimmigkeiten bei den Übersetzungen auf, die in Abbildung \ref{Fig:dictionary-woerterbuch-frames} mir farbigen Rahmen hervorgehoben wurden. Diese Abweichungen können dann nach und nach ausgemerzt werden.
  49.117 +
  49.118 +
    50.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    50.2 +++ b/Vorwort.tex	Sun Apr 15 02:44:56 2007 +0200
    50.3 @@ -0,0 +1,11 @@
    50.4 +\section{Vorwort}
    50.5 +
    50.6 +
    50.7 +Als Student einer Fachhochschule habe ich die Möglichkeit in Praxissemestern Einblicke in die Praxis der freien Wirtschaft zu sammeln. Ich sehe darin eine große Bereicherung für mich, die Hochschule und das Unternehmen und bin froh diese Chancen nutzen zu können.
    50.8 +
    50.9 +Für die 24-wöchige Praktikumszeit hatte ich mir die Firma \textbf{MAKA - Max Mayer Maschinenbau GmbH} im nahen Nersingen als Arbeitgeber ausgesucht. Ich habe diese Zeit auf vielfältige Weise genossen und bin mir sicher, ganz viel Erfahrung für mein weiteres Studium mitgenommen zu haben.
   50.10 +
   50.11 +Ich möchte in diesem Bericht, der meine Tätigkeit bei \textbf{MAKA} beschreibt, nun als Erstes kurz das Unternehmen selbst und die IT-Abteilung, der ich zugehörig war, vorstellen. Dann allgemeine Dinge zu meiner Arbeit sagen und einige Teile meiner Projekte detaillierter beschreiben. Abschließend werde ich ein Fazit des Praxissemesters ziehen.
   50.12 +
   50.13 +
   50.14 +
    51.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    51.2 +++ b/Ziele.tex	Sun Apr 15 02:44:56 2007 +0200
    51.3 @@ -0,0 +1,28 @@
    51.4 +\section{Persönliche Ziele}
    51.5 +
    51.6 +
    51.7 +Mein primärer Grund mich bei \textbf{MAKA} zu bewerben, war das Aufgabenprofil der ausgeschriebenen Stelle:
    51.8 +\begin{quote}
    51.9 +Intranetprogrammierung mit PHP und MySQL
   51.10 +\end{quote}
   51.11 +
   51.12 +Da ich privat diese Technologie schon seit einigen Jahren verwende, war es mir jetzt wichtig, durch viel praktische Anwendung meine Kenntnisse zu festigen und auszubauen. Wo mein PHP-Können schon recht gut war, gingen meine (My)SQL-Fähigkeiten nur wenig über Grundkenntnisse hinaus.
   51.13 +
   51.14 +Diese Erwartung an das Praxissemester wurde voll erfüllt. Meine PHP-Kenntnisse haben sich stark gefestigt, der Umgang mit der Scriptsprache ist nun solide und sicher.
   51.15 +Aber was mir noch wichtiger ist: Die vorhandenen Kenntnisse haben sich nicht nur eingefahren, sondern ich habe sie auch konsequent ausbauen können. Das geht vom Erlernen der objektorientierten Bestandteile von PHP, über das Entwerfen von Standardklassen für die tägliche Arbeit (z.B. eine Datenbankklasse), bis hin zum \textit{Verstehen} der Sprache an sich und ihrer Grenzen.
   51.16 +
   51.17 +Ich habe das Gefühl, dass ich PHP wirklich kennen gelernt habe und dass sich mein Kenntnisniveau deutlich gehoben hat.
   51.18 +
   51.19 +
   51.20 +
   51.21 +Als zweiten großen Part war die Datenbanksprache SQL, in ihrer Unterart MySQL, vertreten. Meine zu Beginn eher grundsätzlichen Kenntnisse erfuhren einen richtigen Sprung nach vorne. Bald schon waren umfangreiche Joins kein Problem mehr und wenig später formulierte ich sie mit sicherem Gefühl. Der Sprachumfang von SQL ist bekanntermaßen nicht die Schwierigkeit, welche dagegen den besten Weg zu den richtigen Daten zu finden ist. FIXME(zitat)FIXME. Gerade an dieser Stelle habe ich durch die viele Übung einen Erfahrungsschatz ansammeln können, der durch Themen wie Indizierung und Queryoptimierung sinnvoll ergänzt wird.
   51.22 +
   51.23 +
   51.24 +
   51.25 +Abseits der Programmiersprachen habe ich die Gelegenheit genutzt, um auch meinen Workflow zu optimieren. Was diesen Bereich angeht, so ließ mir \textbf{MAKA} hier ganz viele Freiheiten, um die ich sehr froh war. Denn nur dadurch konnte ich \textit{meinen} Weg finden und einen Arbeitsablauf entwerfen, der mir entspricht.
   51.26 +
   51.27 +Leider stand mir kein UNIX-System zur Verfügung, aber das wäre auch nur die absolute Krönung gewesen. Dennoch habe ich die Möglichkeit genutzt, den Vim\footnote{http://vim.org} als Editor zu verwenden. Vor diesen sechs Monaten hatte ich ihn nur hin und wieder eingesetzt, jetzt kann ich ohne ihn nicht mehr leben! ;-)
   51.28 +
   51.29 +
   51.30 +
   51.31 +Nicht zu vergessen ist das Wirtschaftswissen, das ich mir während der meiner Zeit bei \textbf{MAKA} aufgenommen habe. Bereitwillig und von sich aus wurden mir die Vorgänge im Unternehmen erklärt. Immer wieder wurde wurden mir Gelegenheiten angeboten, die internen Abläufe zu verstehen. An vielen Stellen konnte ich dabei Verbindungen zu den Vorlesungen der ersten Semester herstellen, was meiner Meinung klar für die (Fach-)Hochschule spricht.
    52.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    52.2 +++ b/main.lof	Sun Apr 15 02:44:56 2007 +0200
    52.3 @@ -0,0 +1,16 @@
    52.4 +\contentsline {figure}{\numberline {1}{\ignorespaces Das Firmenlogo}}{4}
    52.5 +\contentsline {figure}{\numberline {2}{\ignorespaces Die Eingabemaske des Tagesgesch\"aft-Programmteils}}{9}
    52.6 +\contentsline {figure}{\numberline {3}{\ignorespaces Die Bestellobligoanalyse}}{10}
    52.7 +\contentsline {figure}{\numberline {4}{\ignorespaces Wiederbeschaffungszeiten eines Artikels von zwei Lieferanten}}{11}
    52.8 +\contentsline {figure}{\numberline {5}{\ignorespaces Startmaske des Fehlteilmanagements}}{12}
    52.9 +\contentsline {figure}{\numberline {6}{\ignorespaces Drilldown nach Lieferanten im Fehlteilmanagement}}{13}
   52.10 +\contentsline {figure}{\numberline {7}{\ignorespaces Drilldown nach Baugruppen im Fehlteilmanagement}}{14}
   52.11 +\contentsline {figure}{\numberline {8}{\ignorespaces Maske der Liefertreueanalyse im MontIS}}{15}
   52.12 +\contentsline {figure}{\numberline {9}{\ignorespaces Liefertreueanalyse der Montage}}{16}
   52.13 +\contentsline {figure}{\numberline {10}{\ignorespaces Monatssummendrilldown der Liefertreueanalyse}}{17}
   52.14 +\contentsline {figure}{\numberline {11}{\ignorespaces Detaillierter Drilldown auf einzelne Auftr\"age}}{18}
   52.15 +\contentsline {figure}{\numberline {12}{\ignorespaces Men\"u f\"ur Suchprofile}}{19}
   52.16 +\contentsline {figure}{\numberline {13}{\ignorespaces Startmaske der Translator-Datenbank}}{20}
   52.17 +\contentsline {figure}{\numberline {14}{\ignorespaces Datenpflege mit ausgeblendeten Spalten}}{23}
   52.18 +\contentsline {figure}{\numberline {15}{\ignorespaces Zwei \"Ubersetzungen kollidieren und der Benutzer muss entscheiden}}{24}
   52.19 +\contentsline {figure}{\numberline {16}{\ignorespaces Typische Ansicht des Dictionary mit markierten Unstimmigkeiten}}{25}
    53.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    53.2 +++ b/main.tex	Sun Apr 15 02:44:56 2007 +0200
    53.3 @@ -0,0 +1,69 @@
    53.4 +% @file
    53.5 +% @brief   PS-Bericht
    53.6 +% @author  markus schnalke <meillo@marmaro.de>
    53.7 +% @since   2007-02-17
    53.8 +
    53.9 +
   53.10 +\documentclass[a4paper]{scrartcl}
   53.11 +
   53.12 +
   53.13 +  \usepackage[T1]{fontenc}
   53.14 +  \usepackage[latin1]{inputenc}
   53.15 +  \usepackage{ngerman}
   53.16 +  \usepackage{graphicx}
   53.17 +  \usepackage[automark]{scrpage2}
   53.18 +  \input{Style01}
   53.19 +
   53.20 +
   53.21 +\begin{document}
   53.22 +
   53.23 +
   53.24 +
   53.25 +  \input{Titel}
   53.26 +
   53.27 +  \tableofcontents
   53.28 +
   53.29 +
   53.30 +
   53.31 +  \newpage
   53.32 +  \part{Einleitung}
   53.33 +
   53.34 +    \input{Vorwort}
   53.35 +
   53.36 +    \newpage
   53.37 +    \input{DasUnternehmen}
   53.38 +
   53.39 +    \newpage
   53.40 +    \input{Rahmenbedingungen}
   53.41 +
   53.42 +
   53.43 +
   53.44 +  \newpage
   53.45 +  \part{Aufgabenbeschreibung}
   53.46 +
   53.47 +    \input{Dbsrv}
   53.48 +
   53.49 +    \include{Eis}
   53.50 +
   53.51 +    \include{Montis}
   53.52 +
   53.53 +    \include{TranslatorDb}
   53.54 +
   53.55 +    \include{Dokumentation}
   53.56 +
   53.57 +
   53.58 +  \newpage
   53.59 +  \part{Abschließend}
   53.60 +
   53.61 +    \input{Fazit}
   53.62 +
   53.63 +
   53.64 +  \newpage
   53.65 +  \appendix
   53.66 +
   53.67 +    \listoffigures
   53.68 +
   53.69 +    \input{Milestones}
   53.70 +
   53.71 +
   53.72 +\end{document}
    54.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    54.2 +++ b/main.toc	Sun Apr 15 02:44:56 2007 +0200
    54.3 @@ -0,0 +1,29 @@
    54.4 +\contentsline {part}{\numberline {I}Einleitung}{3}
    54.5 +\contentsline {section}{\numberline {1}Vorwort}{3}
    54.6 +\contentsline {section}{\numberline {2}Unternehmensvorstellung}{4}
    54.7 +\contentsline {subsection}{\numberline {2.1}Das Unternehmen}{4}
    54.8 +\contentsline {subsection}{\numberline {2.2}Die IT-Abteilung}{5}
    54.9 +\contentsline {subsection}{\numberline {2.3}\textbf {MAKA} und die Hochschule}{5}
   54.10 +\contentsline {section}{\numberline {3}Rahmenbedingungen}{6}
   54.11 +\contentsline {part}{\numberline {II}Aufgabenbeschreibung}{7}
   54.12 +\contentsline {section}{\numberline {4}Das DBSRV-Projekt}{7}
   54.13 +\contentsline {section}{\numberline {5}Einarbeiten}{8}
   54.14 +\contentsline {section}{\numberline {6}Das Einkaufsinformationssystem}{9}
   54.15 +\contentsline {subsection}{\numberline {6.1}Tagesgesch\"aft}{9}
   54.16 +\contentsline {subsubsection}{\numberline {6.1.1}Bestellobligoanalyse}{10}
   54.17 +\contentsline {subsubsection}{\numberline {6.1.2}Reale Wiederbeschaffungszeit}{10}
   54.18 +\contentsline {subsection}{\numberline {6.2}Fehlteilmanagement}{11}
   54.19 +\contentsline {subsubsection}{\numberline {6.2.1}Drilldown nach Lieferanten}{12}
   54.20 +\contentsline {subsubsection}{\numberline {6.2.2}Drilldown nach Baugruppen}{13}
   54.21 +\contentsline {section}{\numberline {7}Das Montageinformationssystem}{15}
   54.22 +\contentsline {subsection}{\numberline {7.1}Liefertreueanalyse}{16}
   54.23 +\contentsline {subsection}{\numberline {7.2}Suchprofile}{18}
   54.24 +\contentsline {section}{\numberline {8}Die Translator-Datenbank}{20}
   54.25 +\contentsline {subsection}{\numberline {8.1}Mehrsprachigkeit}{21}
   54.26 +\contentsline {subsection}{\numberline {8.2}Standardst\"ucklisten}{22}
   54.27 +\contentsline {subsection}{\numberline {8.3}Datenpflege}{23}
   54.28 +\contentsline {subsubsection}{\numberline {8.3.1}Datensatz bearbeiten}{24}
   54.29 +\contentsline {subsection}{\numberline {8.4}Das Dictionary}{24}
   54.30 +\contentsline {section}{\numberline {9}Dokumentation}{26}
   54.31 +\contentsline {part}{\numberline {III}Abschlie\IeC {\ss }end}{28}
   54.32 +\contentsline {section}{\numberline {10}Fazit}{28}