ich habe mir zur Preiskalkulation die o.a. Maske so angepasst, dass folgende TIB-Grids angezeigt werden (die blauen Felder sind Infos der Verknüpfungen):

Die Maske funktioniert soweit gut, aber ich habe ein Problem mit dem TIB-Grid BSAPGAF oben rechts:
wenn ich dort mit "+" einen Datensatz einfüge, oder innerhalb des Grids eine Änderung vornehme, dann erkennt der Designer das nicht im "frmAfterInsert"-Script. Dort steht:
Code: Alles auswählen
Begin
// letzter Stand 23.10.2009 AS
wo := 'AfterInsert';
if (q_3.state = dssInsert) then
begin
// Aus irgendeinem Grund wird nach dem Insert der Hauptartikel als Material eingetragen
M := q_3.FieldByName('BSA_ID_ARTNR');
M.AsInteger := 0;
q_3.RelationIdFeld('BSA_ID_ARTNR');
end;
if (q_1.state = dssInsert) then
Include(PROC0003);
if (q_2.state = dssInsert) then
Include(PROC0002);
if (q_3.state = dssInsert) then
Include(PROC0004);
if (q_8.state = dssInsert) then
Include(PROC0023);
if (q_9.state = dssInsert) then
Include(PROC0024);
End;Dasselbe Problem habe ich beim editieren innerhalb des TIB-Grids.
Es greift ja nach der Aktualisierung das "frmAfterPost" Script im Designer, hier der Code:
Code: Alles auswählen
Begin
if ((q_2.PostedState = dssInsert) or (q_2.PostedState = dssEdit) or (q_2.PostedState = dssDelete)) then
begin
Messagebox('Q2 Insert or Edit',self.caption,0);
iLocateID := AsInteger(q_2.FieldByName('ID'));
q_2.refresh();
q_1.refresh();
q_2.Locate('ID',IntToStr(iLocateID));
include(PROC0024);
end;
if ((q_3.PostedState = dssInsert) or (q_3.PostedState = dssEdit)) then
begin
iLocateID := AsInteger(q_3.FieldByName('ID'));
q_3.refresh();
q_1.refresh();
CB_BSA_ARTBEZ.Text := '';
CB_BSA_ARTBEZ2.Text := '';
q_3.Locate('ID',IntToStr(iLocateID));
include(PROC0024);
end;
if ((q_9.PostedState = dssInsert) or (q_9.PostedState = dssEdit)) then
begin
Messagebox('Q9 Insert or Edit',self.caption,0);
iLocateID := AsInteger(q_9.FieldByName('ID'));
q_9.refresh();
q_1.refresh();
q_9.Locate('ID',IntToStr(iLocateID));
include(PROC0024);
end;
if ((q_8.PostedState = dssInsert) or (q_8.PostedState = dssEdit)) then
begin
iLocateID := AsInteger(q_8.FieldByName('ID'));
q_8.refresh();
q_1.refresh();
q_8.Locate('ID',IntToStr(iLocateID));
include(PROC0024);
end;
// Sachmerkmale neu einlesen
Sachmerkmale('R','tsBSAPSuche', LB_ParaSachmerkmale.Caption);
End;Mein Problem ist: ich muss der Maske mitteilen, dass im q_9 (BSAPGAF) etwas passiert ist (einfügen, ändern oder löschen), damit ich einen Button anzeige, der die neue Preisbrechnung durchführt.
Ich verstehe nicht, warum Änderungen in q_9 nicht von der Maske erkannt werden. Der TIB-Grid funktioniert ja an sich. Der einzige Unterschied zu den anderen TIB-Grids (die alle korrekt funktionieren und auch im frmAfterInsert und frmAfterPost erkannt werden) ist die MasterSource. Der TIB-Grid hat den MasterSource D_2 weil es sich um ein Unterprogramm von BSAPG handelt.
Kann es sein, das die Masken nur Änderungen der TIB-Grids mit MasterSource D_1 erkennen?
Beste Grüße
Thomas