Einzelnen Beitrag anzeigen

BloodySmartie
(Gast)

n/a Beiträge
 
#1

Komisches Sprachkonstrukt - zwei Rümpfe in Prozedur

  Alt 2. Jun 2008, 15:06
Hallo zusammen!

Wir stehen hier in einem Projekt gerade mehr oder minder sprachlos vor einem Fetzen Quellcode unseres Vorgängers, der uns bereits auf Ebene seiner Sourcen oft zum Lachen gebracht hat. Allerdings tut er im aktuellen Code etwas, das ich einfach nicht verstehe. Er hat eine Prozedur(deren Namen ich aus Zwecken der Komik unverändert lassen werden), die quasi zwei Rümpfe hat.

Beispiel für Lesefaule:
Delphi-Quellcode:
procedure Create_Sales_Per_Wahl_And_Section_aus_Telemetriedaten;

var
   ...
begin
   ...(diverse Operationen...)
end;
begin
   ...(diverse andere Operationen...)
end;
Original-Code:
Delphi-Quellcode:

procedure Create_Sales_Per_Wahl_And_Section_aus_Telemetriedaten;

var
  {------------------------------------------------------}
  {----- Hilfsvariablen zum Sichern der Datenfelder -----}
  {------------------------------------------------------}
  DatumZeit : string;
  IP_Adresse : string;
  Rufnummer : string;
  Zielrufnummer : string;
  Transaktionscode : string;
  TransaktionsID : string;
  SubMandantenID : string;
  SubMandantenID2 : string;
  SubMandantenID3 : string;

  {---------------------------------------------------------------------}
  {----- Hilfsvariablen zum Speichern aller Mandanteninformationen -----}
  {---------------------------------------------------------------------}
  Server_IP : string;
  Datenbank : string;

  {------------------------------------------------------------}
  {----- Hilfsvariablen zum Speichern des Datenbanklogins -----}
  {------------------------------------------------------------}
  Username : string;
  Password : string;

  {--------------------------------------------------------------------}
  {----- Hilfsvariable um den Wert einer Transaktion zu speichern -----}
  {--------------------------------------------------------------------}
  Wert : string;

  {--------------------------------------------------------------------}
  {----- Hilfsvariable um die Wahl einer Transaktion zu speichern -----}
  {--------------------------------------------------------------------}
  Wahl : string;

begin
  {-------------------------------------------------}
  {----- Einmalige Prozessverarbeitung starten -----}
  {-------------------------------------------------}
  if RunOnce=true then
    begin
      try
        PSQLQuery_Work1.Active:=false;
        PSQLQuery_Work1.SQL.Text:='select * from anruf_telemetrie where '+
                                  '(rufnummer_ankommend='+''''+'--zensiert--'+''''+') or'+
                                  '(rufnummer_ankommend='+''''+'--zensiert--'+''''+') or'+
                                  '(rufnummer_ankommend='+''''+'--zensiert--'+''''+') or'+
                                  '(rufnummer_ankommend='+''''+'--zensiert--'+''''+') or'+
                                  '(rufnummer_ankommend='+''''+'--zensiert--'+''''+') or'+
                                  '(rufnummer_ankommend='+''''+'--zensiert--'+''''+') or'+
                                  '(rufnummer_ankommend='+''''+'--zensiert--'+''''+') or'+
                                  '(rufnummer_ankommend='+''''+'--zensiert--'+''''+') or'+
                                  '(rufnummer_ankommend='+''''+'--zensiert--'+''''+') or'+
                                  '(rufnummer_ankommend='+''''+'--zensiert--'+''''+') '+
                                  'order by datumzeit_ankommend;';
        PSQLQuery_Work1.Active:=true;

        {---------------------------------------------------}
        {----- Verarbeitungsstatus in Listbox ausgeben -----}
        {---------------------------------------------------}
        Work_Trace_ListBox.Items.Insert(0,TimeToStr(Now)+' | Tabelle - Anruf_Telemetrie - geöffnet!');

      except
        {---------------------------------------------------}
        {----- Verarbeitungsstatus in Listbox ausgeben -----}
        {---------------------------------------------------}
        Work_Trace_ListBox.Items.Insert(0,TimeToStr(Now)+' | Tabelle - Anruf_Telemetrie - konnte nicht geöffnet werden!');
      end;

      {-------------------------------------------------------}
      {----- Telemetriemeldungen sequentiell durchlaufen -----}
      {-------------------------------------------------------}
      while (not PSQLQuery_Work1.Eof) do
        begin
          Application.ProcessMessages;

          DatumZeit:=PSQLQuery_Work1.FieldByName('datumzeit_ankommend').AsString;
          IP_Adresse:=PSQLQuery_Work1.FieldByName('ip_sender').AsString;
          Rufnummer:=PSQLQuery_Work1.FieldByName('rufnummer_ankommend').AsString;
          Zielrufnummer:=PSQLQuery_Work1.FieldByName('zielrufnummer').AsString;
          TransaktionsID:=PSQLQuery_Work1.FieldByName('transaktion_id').AsString;
          Transaktionscode:=PSQLQuery_Work1.FieldByName('transaktionscode').AsString;

          {-----------------------------------------------------}
          {----- Variablen für Verabreitung initialisieren -----}
          {-----------------------------------------------------}
          Status:=0;Mandanten_ID:='';Server_IP:='';Datenbank:='';
          Username:='';Password:='';

          {------------------------------------}
          {----- Bildschirm-Trace starten -----}
          {------------------------------------}
          Com_Trace_ListBox.Items.Insert(0,'----- Action-Snapshot Anfang -----');

          {------------------------------------------------------------------}
          {----- Prüfen ob der Abenser der Telemetriemeldung gültig ist -----}
          {------------------------------------------------------------------}
          Check_for_valid_Sender(Status,IP_Adresse);

          {----------------------------------------------}
          {----- Mandanten zur Rufnummern ermitteln -----}
          {----------------------------------------------}
          Get_Client(Status,Mandanten_ID,Rufnummer,DatumZeit,ZielRufnummer);

          {----------------------------------------------}
          {----- Detaildaten des Mandaten ermitteln -----}
          {----------------------------------------------}
          Get_Client_Details(Status,MandantenName,Server_IP,Datenbank,Mandanten_ID);

          {---------------------------------------------------------}
          {----- Login-Daten für Mandantendantenbank ermitteln -----}
          {---------------------------------------------------------}
          Get_DB_Login(Status,Username,Password,Server_IP);

          {----------------------------------------}
          {----- Mandantendatenbank verbinden -----}
          {----------------------------------------}
          Connect_Client_Database(Datenbank,Server_IP,Username,Password);

          {---------------------------------------------------------------}
          {----- Transaktionsdetails lesen wenn die Verbindung steht -----}
          {---------------------------------------------------------------}
          Get_Transaction_Details(Transaktionscode,Wert,Rufnummer, Wahl, SubMandantenID, SubMandantenID2, SubMandantenID3);

          {---------------------------------------------------------------}
          {----- Prüfen ob wegen einer Automatenbefüllung die Anzahl -----}
          {----- der Leeranwahlen zurückgesetzt werden muss          -----}
          {---------------------------------------------------------------}
          Check_Reset_Leeranwahlen(Rufnummer,DatumZeit,Transaktionscode,true);

          {------------------------------------------------------------}
          {----- Sofern erforderlich Statistikdaten aktualisieren -----}
          {------------------------------------------------------------}
          Verarbeite_Verkaufe__per_Wahl_und_Section(Rufnummer,DatumZeit,Transaktionscode,Wahl);

          {-----------------------------------------}
          {----- Bildschirm-Trace abschliessen -----}
          {-----------------------------------------}


          Com_Trace_ListBox.Items.Insert(0,'----- Action-Snapshot Ende -----');
          Com_Trace_ListBox.Items.Insert(0,'');

          {-----------------------------------------}
          {----- Sprung zum nächsten Datensatz -----}
          {-----------------------------------------}
          PSQLQuery_Work1.Next;
        end;

      {------------------------------}
      {----- Query's schliessen -----}
      {------------------------------}
      try
        PSQLQuery_Work1.Active:=false;
      except
      end;
    end
end;

{- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - }

begin
  {------------------------------------------}
  {------ Hilfsvariablen initialisieren -----}
  {------------------------------------------}
  Process:=true;

  with MainDlg do
    begin
      {-------------------------------------------------------}
      {----- Timer während der Verarbeitung deaktivieren -----}
      {-------------------------------------------------------}
      ValidateData.Enabled:=false;

      {------------------------------------}
      {----- Bildschirm-Trace starten -----}
      {------------------------------------}
      Work_Trace_ListBox.Items.Insert(0,'----- Action-Snapshot Anfang -----');

      try
        PSQLQueryMandanten.Active:=false;
        PSQLQueryMandanten.SQL.Text:='select * from public.mandaten';
        PSQLQueryMandanten.Active:=true;

        {---------------------------------------------------}
        {----- Verarbeitungsstatus in Listbox ausgeben -----}
        {---------------------------------------------------}
        Work_Trace_ListBox.Items.Insert(0,TimeToStr(Now)+' | Tabelle Mandanten geöffnet!');
      except
        {-----------------------------}
        {----- Status definieren -----}
        {-----------------------------}
        Process:=false;

        {---------------------------------------------------}
        {----- Verarbeitungsstatus in Listbox ausgeben -----}
        {---------------------------------------------------}
        Work_Trace_ListBox.Items.Insert(0,TimeToStr(Now)+' | Tabelle Mandanten konnte nicht geöffnet werden!');
      end;

      {-----------------------------------------------------------------}
      {------ Verarbeitung für alle angelegten Mandanten vornehmen -----}
      {-----------------------------------------------------------------}
      while (not PSQLQueryMandanten.Eof) and (Process=true) do
        begin
          {---------------------------------------------------}
          {----- Verarbeitungsstatus in Listbox ausgeben -----}
          {---------------------------------------------------}
          Work_Trace_ListBox.Items.Insert(0,TimeToStr(Now)+' | Verarbeitung für Mandant '+PSQLQueryMandanten.FieldByName('name').AsString+'...');

          {-----------------------------------------------------------------}
          {----- MandatenID zur Prozessverifizierung zwischenspeichern -----}
          {-----------------------------------------------------------------}
          MandantenID:=PSQLQueryMandanten.FieldByName('mandanten_id').AsString;

          {-----------------------------------------------}
          {------ Login-Daten zum Mandantn ermitteln -----}
          {-----------------------------------------------}
          if (PSQLQueryMandanten.FieldByName('name').AsString<>'') and
             (PSQLQueryMandanten.FieldByName('name').AsString<>'m-Transaktion') then
            begin
              try
                PSQLQueryDatenbankserver.Active:=false;
                PSQLQueryDatenbankserver.SQL.Text:='select * from datenbankserver where '+
                                                   'servername ='+''''+PSQLQueryMandanten.FieldByName('servername').AsString+''''+';';
                PSQLQueryDatenbankserver.Active:=true;

                {---------------------------------------------------}
                {----- Verarbeitungsstatus in Listbox ausgeben -----}
                {---------------------------------------------------}
                Work_Trace_ListBox.Items.Insert(0,TimeToStr(Now)+' | Datenbankparameter für Mandanten ermittelt!');

                {--------------------------------------------}
                {----- Datenbanknamen zwischenspeichern -----}
                {--------------------------------------------}
                Datenbank:=PSQLQueryMandanten.Fieldbyname('datenbank').AsString;

                {---------------------------------------}
                {----- Server-IP zwischenspeichern -----}
                {---------------------------------------}
                Server_IP:=PSQLQueryDatenbankserver.Fieldbyname('server_ip').AsString;

                {---------------------------------------}
                {----- Usernamen zwischenspeichern -----}
                {---------------------------------------}
                Username:=PSQLQueryDatenbankserver.Fieldbyname('username').AsString;

                {--------------------------------------}
                {----- Password zwischenspeichern -----}
                {--------------------------------------}
                Password:=PSQLQueryDatenbankserver.Fieldbyname('passwort').AsString;
              except
                on E: Exception do
                  begin
                    {-----------------------------}
                    {----- Status definieren -----}
                    {-----------------------------}
                    Process:=false;

                    {---------------------------------------------------}
                    {----- Verarbeitungsstatus in Listbox ausgeben -----}
                    {---------------------------------------------------}
                    Work_Trace_ListBox.Items.Insert(0,TimeToStr(Now)+' | Datenbankparameter für Mandanten konnt nicht ermittelt werden!');
                  end;
              end;

              {--------------------------------------------}
              {----- Query Datenbankserver schliessen -----}
              {--------------------------------------------}
              try
                if PSQLQueryDatenbankserver.Active then PSQLQueryDatenbankserver.Active:=false;
              except;
              end;

              {---------------------------------------------------------------}
              {----- Sofern keine Verarbeitungsfehler aufgetreten sind   -----}
              {----- wird nun die Verbindung zur Datenbank des aktuellen -----}
              {----- Mandanten hergestellt.                              -----}
              {---------------------------------------------------------------}
              if Process then
                begin
                  try
                    PSQLDatabase_Work.Connected:=false;
                    PSQLDatabase_Work.Databasename:=Datenbank;
                    PSQLDatabase_Work.Host:=Server_IP;
                    PSQLDatabase_Work.Username:=Username;
                    PSQLDatabase_Work.UserPassword:=Password;
                    PSQLDatabase_Work.Connected:=true;

                    {---------------------------------------------------}
                    {----- Verarbeitungsstatus in Listbox ausgeben -----}
                    {---------------------------------------------------}
                    Work_Trace_ListBox.Items.Insert(0,TimeToStr(Now)+' | Verbindung zur Mandantendatenbank hergestellt - '+PSQLQueryMandanten.FieldByName('name').AsString);
                  except
                    on E: Exception do
                      begin
                        {-----------------------------}
                        {----- Status definieren -----}
                        {-----------------------------}
                        Process:=false;

                        {---------------------------------------------------}
                        {----- Verarbeitungsstatus in Listbox ausgeben -----}
                        {---------------------------------------------------}
                        Work_Trace_ListBox.Items.Insert(0,TimeToStr(Now)+' | Verbindung zur Mandantendatenbank fehlgeschlagen - '+PSQLQueryMandanten.FieldByName('name').AsString+'!');
                        Work_Trace_ListBox.Items.Insert(0,TimeToStr(Now)+' | '+e.Message);
                      end;
                  end;

                  {--------------------------------------------------------------}
                  {----- Aufgaben in der Datenbank des Mandanten abarbeiten -----}
                  {--------------------------------------------------------------}
                  if Process then
                    begin
                      {----------------------------------------------------------}
                      {----- Prüfen ob für jeden angelegten Automaten ein   -----}
                      {----- entsprechender Datensatz in der Tabelle        -----}
                      {----- Automatenprodukte vorhanden ist.               -----}
                      {----- In Automantenprodukte wird zu jedem Automat    -----}
                      {----- eine eindeutige Produktbestückung gespeichert. -----}
                      {----------------------------------------------------------}
                      Validate_Record_in_Automatenprodukte;

                      {----------------------------------------------------}
                      {----- Setzt eine Default Konfiguration für das -----}
                      {----- Eskalationsmanagement.                   -----}
                      {----------------------------------------------------}
                      Set_Default_Escalation_Configuration;

                      {-----------------------------------------------------------------------}
                      {----- Ermittlung der Statistikdaten zurückliegender Transaktionen -----}
                      {-----------------------------------------------------------------------}
                      if (ParamStr(1)='X') or (ParamStr(2)='X') then Create_Sales_Per_Wahl_And_Section_aus_Telemetriedaten;
                    end;

                  {------------------------------------------------------}
                  {----- Dynamischen Datenbankverbindung schliessen -----}
                  {------------------------------------------------------}
                  try
                    PSQLDatabase_Work.Connected:=false;
                  except
                  end;
                end;
            end;
          {-----------------------------------------}
          {----- Sprung zum nächsten Datensatz -----}
          {-----------------------------------------}
          PSQLQueryMandanten.Next;

          {---------------------------------}
          {----- Prozessorzeit abgeben -----}
          {---------------------------------}
          Application.ProcessMessages;
        end;

      {------------------------------}
      {----- Query's schliessen -----}
      {------------------------------}
      try
        if PSQLQueryMandanten.Active then PSQLQueryMandanten.Active:=false;
      except
      end;

      {-----------------------------------------}
      {----- Bildschirm-Trace abschliessen -----}
      {-----------------------------------------}
      Work_Trace_ListBox.Items.Insert(0,'----- Action-Snapshot Ende -----');
      Work_Trace_ListBox.Items.Insert(0,'');

      {------------------------------------}
      {----- Statusvariable umsetzten -----}
      {------------------------------------}
      RunOnce:=false;

      {----------------------------------------------------------}
      {----- Timer nach Abschluss aller Aktionen aktivieren -----}
      {----------------------------------------------------------}
      ValidateData.Enabled:=true;
    end;
end;


Ideas, anybody?
  Mit Zitat antworten Zitat