Reklamationsformular beschädigt?

Lob (und Tadel), Anregungen und Probleme.

Moderator: SYNERPY

Antworten
Dirk Tiefenbach
Beiträge: 77
Registriert: Do Okt 18, 2007 9:00 am
Wohnort: Senden

Reklamationsformular beschädigt?

Beitrag von Dirk Tiefenbach »

Hallo zusammen,

Noch ein eher lästiges Problem:

Beim Anlegen von Reklamationen (V_BREKL) passiert beim Verlassen des Feldes Projektnummer daß das Feld Lieferadresse mit der Projektnummer gefüllt wird. :( . Fast unnötig zu erwähnen daß es natürlich keine Adresse mit dieser Nummer gibt. Weiterhin ist das Formular unwillig zu erkennen, dass die eingegebene Projektposition schon vorhanden ist und macht dann immer den Projektpositionsdialog auf. Dort ist das Projekt und die Projektposition beim Suchen derselbigen auch problemlos gefunden worden. In anderen Formularen (z.B. Angebot) funktioniert es tadellos. Vielleicht ist auch nur diese Fromular verwanzt. :?:

Noch ein wenig zum Hintergrund: Wir haben für jedes Projekt mittels einer Vorlage mehrere Positionen angelegt um bestimmte Bereiche wie Neuanlage (10), Ersatzteilgeschäft(100), Reklamation(800), etc. separat erfassen zu können.

Ich hoffe ich habe mich halbwegs verständlich ausgedrückt; nach zwei Tagen probiererei an desem Problem wird man :shock:.

Danke im Voraus für Rettung in der Not.

Euer Dirk
SYN20
Beiträge: 95
Registriert: Do Aug 23, 2007 1:54 pm

Beitrag von SYN20 »

Sehr geehrter Herr Tiefenbach,

zur Korrektur der Vorbelegung der abw. Lieferadresse des Lieferanten aus der Projektnummer spielen Sie bitte dieses Skript in Ihre Datenbank ein.

Für die Behebung des zweiten Problems müßten Sie mir Ihre Datenbankversion (AVERP - Hauptemenü -> Hilfe -> Info -> GDB-Version) nennen.

Gruß,
Syn20
Dirk Tiefenbach
Beiträge: 77
Registriert: Do Okt 18, 2007 9:00 am
Wohnort: Senden

Beitrag von Dirk Tiefenbach »

Hallo,

Danke für die schnelle Antwort. Repariert das Skript das Formular oder/und bereinigt es die Einträge in der Datenbank (wäre nicht nötig da wir diese falsche Lieferadresse immer von Hand löschen bevor wir speichern können da es diese "Adresse" ja nicht gibt)?

Unsere Datenbankversion: AVERP2009-A.07

Danke

Dirk
SYN20
Beiträge: 95
Registriert: Do Aug 23, 2007 1:54 pm

Beitrag von SYN20 »

Sehr geehrter Herr Tiefenbach,

das Skript ändert ändert keine Reklamationsdatensätze sondern verhindert die Belegung der Lieferadresse aus dem Projekt.

Gruß,
Syn20
SYN20
Beiträge: 95
Registriert: Do Aug 23, 2007 1:54 pm

Beitrag von SYN20 »

Sehr geehrter Herr Tiefenbach,

es ist möglich, dass durch manuelles Anpassen der Projektpositionsnummer, die führenden Leerzeichen der laufenden Nummer gelöscht werden. Dies würde die von Ihnen beschriebenen Probleme, allerdings auch in Masken wie Angebot / Auftrag, verursachen.

Prüfen Sie deshalb bitte die Projekt-Pos.-Nr. der Position(en), die Sie in der Reklamationsverwaltung zuweisen wollen.

Gruß,
Syn20
Dirk Tiefenbach
Beiträge: 77
Registriert: Do Okt 18, 2007 9:00 am
Wohnort: Senden

Beitrag von Dirk Tiefenbach »

Wieder danke für die schnelle Antwort.

Leider hat beides nicht geholfen:

Das Skript habe ich eingespielt, aber es wird jetz die Projektnummer beim Verlassen des Feldes in die Lieferscheinnummer kopiert. :shock:

Die Positionsnummer habe ich geprüft, die sind alle mit den entsprechenden Leerzeichen vorab. Es funktioniert gar keine Positionsnummer, egal welche ich nehme. In der Angebotsverwaltung ist es mit meiner Positionsnummer kein Problem.

Was kann ich tun um dem Problem auf die Spur zu kommen? Sollte ich im Designer was prüfen? Und wenn ja, wo in dem Formular? Oder das ganze Fromular ersetzen?

Ich bin ratlos

Danke

Dirk
SYN20
Beiträge: 95
Registriert: Do Aug 23, 2007 1:54 pm

Beitrag von SYN20 »

Sehr geehrter Herr Tiefenbach,

das Skript wurde aktualisiert. Der Kontext, der in unserem aktuellen Datenbankstand für die Projektposition verwendet, wird war bei Ihnen schon belegt. Bitte laden Sie das Skript erneut über den oben genannten Link.

Bitte prüfen Sie des weiteren folgendes:

1. Das OnExit Event des Felds E_BPROJPO_MASKENKEY sollte folgenden Code enthalten:

Code: Alles auswählen

  // LS: 2010-03-04 PF  
  BPROJPO_ID := AsInteger(Q_1.FieldByName('BPROJPO_ID'));
  
  // Status der Position  
  if ((E_BPROJPO_MASKENKEY.Field.AsString <> E_BPROJPO_MASKENKEY.Field.OldAsString) and (BPROJPO_ID > 0)) then
  begin
    MySQL := frmData.Universal;
    MySQL.SQL.Text := 'SELECT STATUS FROM BPROJPO WHERE ID = :BPROJPO_ID';
    MySQL.ParamByName('BPROJPO_ID', BPROJPO_ID); 
    MySQL.open();
    sSTATUS := AsString(MySQL.FieldByName('STATUS'));
    MySQL.close();
  
    if (sSTATUS = 'TF') then
    begin
      if (messagebox(LB_STATUSTF.caption, self.caption, 4+256) <> 6) then
      begin
        MyFeld := q_1.FieldByName('BPROJPO_ID');
        MyFeld.AsInteger := 0;
        q_1.RelationIDFeld('BPROJPO_ID');
      end;   
    end;
  end;  
2. die Domain des Felds BPROJPO_MASKENKEY der View V_BREKL sollte D_MASKENKEY_10R sein.

Gruß,
Syn20
Dirk Tiefenbach
Beiträge: 77
Registriert: Do Okt 18, 2007 9:00 am
Wohnort: Senden

Beitrag von Dirk Tiefenbach »

Hallo,

das geht ja wirklich super schnell hier. Erstmal Danke dafür.

Das mit dem Skript habe ich gemacht und das scheint zu funktionieren. Super. :D

Allerdings sieht mein OnExit Event aber deutlich anders aus:

Code: Alles auswählen

Begin
  // LS: 2008-10-01 HS

  sJa := copy(frmdata.sJaNein,1,1);
  iBMAND_ID := AsInteger(q_1.FieldByName('BMAND_ID'));
  iBPROJ_ID := AsInteger(q_1.FieldByName('BPROJPO_BPROJ_ID'));

  MySQL := frmData.Universal;
  MySQL.SQL.Text := 'SELECT AUTOPROJPOS FROM BMAND WHERE ID = :BMAND_ID';
  MySQL.ParamByName('BMAND_ID', iBMAND_ID);
  MySQL.open();
  sAUTOPROJ := AsString(MySQL.FieldByName('AUTOPROJPOS'));
  MySQL.close();

  if (sAUTOPROJ = sJa) then
  begin
    MySQL.SQL.Text := 'SELECT FIRST 1 ID AS "ID", STATUS FROM BPROJPO WHERE BPROJ_ID_LINKKEY = :BPROJ_ID ORDER BY MASKENKEY';
// Versuch DTI    MySQL.SQL.Text := 'SELECT ID AS "ID", STATUS FROM BPROJPO WHERE BPROJ_ID_LINKKEY = :BPROJ_ID AND MASKENKEY = "       800" ORDER BY MASKENKEY';
		MySQL.ParamByName('BPROJ_ID', iBPROJ_ID);
    MySQL.open();
    iBPROJPO_ID := AsInteger(MySQL.FieldByName('ID'));   
    sSTATUS := AsString(MySQL.FieldByName('STATUS'));
    MySQL.close();
       
    if (iBPROJPO_ID > 0) then
    begin      
      if (sSTATUS = 'TF') then
      begin
        if (messagebox(LB_STATUSTF.caption, self.caption, 4+256) = 6) then
        begin
          M := q_1.FieldByName('BPROJPO_ID');
          M.Value := iBPROJPO_ID;
          q_1.RelationIdFeld('BPROJPO_ID');
        end;   
      end
      else
      begin 
        M := q_1.FieldByName('BPROJPO_ID');
        M.Value := iBPROJPO_ID;
        q_1.RelationIdFeld('BPROJPO_ID');
      end;
    end;
  end;
End;

Ihre Prozedur ist von 2010 das kann ja eigentlich in dieser "alten" Version der Datenbank nicht drin sein.

Die Domain von BPROJPO_MASKENKEY stimmt.

Sollte ich die Prozedur mit Ihrer neuen Variante überschreiben?

Es bleibt spannend, aber es geht voran.

Danke

Dirk
SYN20
Beiträge: 95
Registriert: Do Aug 23, 2007 1:54 pm

Beitrag von SYN20 »

Sehr geehrter Herr Tiefenbach,

verwenden Sie bitte das aktuelle OnExit-Skript.

Des weiteren spielen Sie bitte folgendes Skript 2 in eine Testdatenbank ein.

das Skript führt folgende Aktionen aus:
- ändert den Update-Trigger der Projektposition, so dass die Positionsnummer immer 10 Zeichen lang ist
- korrigiert alle bestehenden Projektpositionsnummern
- ändert die Relation der Projektposition in der Reklamationsverwaltung, so dass ausschließlich Positionen zu dem vorher erfassten Projekt ausgewählt werden können

Gruß,
Syn20
Dirk Tiefenbach
Beiträge: 77
Registriert: Do Okt 18, 2007 9:00 am
Wohnort: Senden

Beitrag von Dirk Tiefenbach »

Hallo,

hat super funktioniert. Ich habe die OnExit Procedur überschrieben, was erstmal nicht geholfen hat aber das 2. Skript hat dann alles gerichtet (obwohl ich nicht weiß wie :wink: ).

Vielen, vielen Dank

viele Ostergrüße

Dirk
Antworten