Schnellsuchfeld integrieren QS-Dokumentenverw. BQS [erl.]

Alles über Formulare, deren Erstellung und deren eventueller Austausch

Moderator: SYNERPY

Antworten
koch
Beiträge: 97
Registriert: Mo Dez 11, 2006 1:28 pm

Schnellsuchfeld integrieren QS-Dokumentenverw. BQS [erl.]

Beitrag von koch »

Hallo,

seh mal wieder den Wald vor lauter Bäumen nicht und benötige professionelle Hilfe ...
Ich probiere gerade ein Schnellsuchfeld in die Maske 'QS-Dokumentenverwaltung' zu integrieren.
Als Beispiel habe ich mir das Schnellsuchfeld aus dem 'Artikelstamm' angeschaut und den Code (siehe unten)
übernommen und angepasst. Das klappt soweit gut, bis auf das der selektierte Datensatz nach erfolgreicher Suche
nicht in die Maske übernommen wird. Es wird immer der erste Datensatz angezeigt. Wo ist das Rad zum schrauben ?

Edit_1OnExit:

Code: Alles auswählen

Begin
  //LS: AK 10.07.2008
  //Schnellsuche
  if ((q_1.state = dssSearch) or (q_1.state = dssEdit) or (q_1.state = dssInsert)) then
  begin
    if (EDIT_1.Text <> '') then
    begin
      if q_1.state = dssSearch then
      begin
        q_1.Cancel();
        q_1.Search();
        q_1.ClearSearch;
      end;  
			    
      iPos := Pos(':',EDIT_1.Text);
          
      if ((Length(EDIT_1.Text) > 10) and (iPos = 0)) then
        EDIT_1.Text := copy(EDIT_1.Text,1,10);

      BUTTON_3.click();
    end;
  end;
  EDIT_1.Text := '';
End;

BUTTON_3OnClickScript:

Code: Alles auswählen

Begin
  //LS: PF 13.08.2008
  LB_SUCHE.Caption := '';
  MyQuery := frmdata.universal;
  sAusw := EDIT_1.Text;
  sJA := AsString(frmData.q_v_bfirma.FieldByName('JA'));
  iPos := Pos(':',sAusw);
  
  if (iPos <> 0) then
  begin
    B := Self.Name;
    Z := Application.FindComponent(B);
    sFeld := Uppercase(trim(copy(sAusw,0,iPos-1)));

      sWert := Uppercase(trim(copy(sAusw,iPos+1,length(sAusw)-iPos)));
    M := Z.FindComponent('E_'+sFeld);

    if (M <> 0) then
    begin
      MyQuery.SQL.Text := 'SELECT FIRST 1 A.ID '+
                          'FROM V_BQS A '+
                          ' AND '+
                          '      F_UPPER('+sFeld+') = :FELDWERT';
      MyQuery.ParamByName('FELDWERT',sWert);
      MyQuery.Open();
      iBQS_ID := AsInteger(MyQuery.FieldByName('ID')); 
      MyQuery.Close();

      if (iBQS_ID <> 0) then
      begin 
        LB_SUCHE.Caption := 1;
        M.Text := sWert;  
        
	      if (q_1.state = dssSearch) then
          q_1.post();
      end;
    end;
  end
  else    
  begin 
	  if (q_1.state = dssSearch) then
		begin   
	    MyQuery.sql.text := 'SELECT A.* ' +
	                        'FROM V_BQS A ' +
	                        'LEFT OUTER JOIN A_VIEWPSEUDO B ON A.ID = B.ID ' +                  
	                        '      where ((A.BEZEICHNUNG CONTAINING :sAusw))';
	    MyQuery.ParamByName('sAusw', sAusw);
	    MyQuery.open();
	    iBQS_ID := AsInteger(MyQuery.FieldByName('ID'));
	
			if iBQS_ID > 0 then
	    begin
	      bOK := UniversalAuflist(Self.Caption);
	
		    if bOK then
		    begin
		      iBQS_ID := AsInteger(MyQuery.FieldByName('ID'));
		      LB_SUCHE.Caption := 1;
		      E_ID.Field.Value := iBQS_ID;
		      q_1.post();
	      end
		  end
		  else
		    Messagebox(LB_NOERFASSUNG.Caption, 'AvERP');
	  
	    MyQuery.Close();
	  end;  
  end;
End;

Schonmal vielen Dank für eure Hilfe.

Gruß
Werner
Zuletzt geändert von koch am Fr Feb 05, 2010 2:11 pm, insgesamt 1-mal geändert.
koch
Beiträge: 97
Registriert: Mo Dez 11, 2006 1:28 pm

Beitrag von koch »

(M)Eine funktionierende Lösung:

Edit_1OnExit:

Code: Alles auswählen

Begin
	// 05.02.2010 WK
   if (q_1.state = dssInsert) or (q_1.state = dssEdit) or (q_1.state = dssSearch) then
    if Edit_1.Text <> '' then
    begin
      if q_1.state = dssSearch then
      begin
        q_1.Cancel();
        q_1.Search();
        q_1.ClearSearch;
      end; 
      Button_3.click();
    end;  
  Edit_1.Text := '';
End;
Button_3OnButtonErfassungClickScript

Code: Alles auswählen

Begin
  // 05.02.2010 WK
  bPascalScriptOK := true;
  debugon := false;
  // ID aus der Query der Maske holen 
  sausw := Edit_1.Text;
  
  //Prüfen, ob im aktuellen DS eine ID existiert (ob ein Datensatz selektiert ist)
  if (sausw <> '') then
  begin
    //Auflistfenster initialisieren und zuweisen 
    O_Auflist := Application.FindComponent('frmauflist2');

    // Auflisfenster generieren
    O_Auflist.bQueryErzeugen := False;
    O_Auflist.Caption := LB_Auswahl.Caption;
    O_Auflist.MultiSelectIDFeld := 'ID';
    O_Auflist.bEinfacheAuswahl := true;
    O_Auflist.Q_Erfassung.SQL.Text := 'SELECT A.MASKENKEY AS "Ident-Nr.", A.BEZEICHNUNG AS "Kurztitel", A.ID AS "ID" ' +
                                      'FROM V_BQS A ' +
                                      'LEFT OUTER JOIN A_VIEWPSEUDO B ON A.ID = B.ID ' +
                                      'WHERE (F_LOWER(A.MASKENKEY) CONTAINING F_LOWER(''' + sAUSW + ''')) OR ' +
                                      '      (F_LOWER(A.BEZEICHNUNG) CONTAINING F_LOWER(''' + sAUSW + '''))' +
																			'ORDER BY MASKENKEY ';                                  
	end
  else
    bPascalScriptOK:=false;
  1:
End;
Button_3OnAfterClick

Code: Alles auswählen

Begin
  // 05.02.2010 WK
  debugon := false;
  O_Auflist := Application.FindComponent('frmauflist2');

  IF (O_Auflist > 0) then
  begin
    MyObject := O_Auflist.Q_Erfassung;
    MyFeld := AsInteger(MyObject.FieldByName('ID'));
    if (MyFeld > 0 and MyObject.Active) then
    begin
      if (q_1.state = dssInsert) or (q_1.state = dssEdit) then
      begin
        M := q_1.FieldByName('ID');
        M.Value := MyFeld;
        q_1.RelationIdFeld('ID');
        
        E_MASKENKEY.EditValueChanging := true;  
      end
      else if (q_1.state = dssSearch) then
      begin
        MySQL := frmData.Universal;
        MySQL.SQL.Text := 'SELECT MASKENKEY FROM BQS WHERE ID = :ID';
        MySQL.ParamByName('ID', MyFeld);
        MySQL.open();
        E_MASKENKEY.Text := AsString(MySQL.FieldByName('MASKENKEY'));
        MySQL.close();
      end;
    end;
  end;
End;

Für Verbesserungsvorschläge oder Lernhinweise bin ich immer dankbar ...

Gruß
Werner
Antworten