Modify eines Feldes in mehreren Tabellen

25. Januar 2006 10:29

hi leute, kleines prob.

ich will den "Location Code" in allen Tabellen in der dieses Feld vorhanden ist
modifizieren. Nur weiss ich nicht wie ich´s angehen soll ?! ich dachte mir zuerst
das ich´s auf dem einfachen weg machen soll (der bei näheren überlegungen sehr aufwendig ist)

reset
setfilter
find
modify

bei einer tabelle kein problem! bei 150 tabellen ne menge arbeit (und unötiger zeitaufwand)
Dachte mir ich kanns vl. mit recordref´s machen? nur fehlt mir ein bisschen die erfahrung mit
ref´s :(

mfg
dante

25. Januar 2006 10:43

Hallo Dante,
leider kann ich dir nicht wirklich helfen, aber Timo Lässer hat im Downloadbereich ein Beispiel bereitgestellt, vieleicht hilft es dir weiter.
Recordref und Co lernen
http://mbs-support.info/viewtopic.php?t ... ght=recref

Wenn du hier im Forum nach recref suchst, bekommst du ein paar Einträge zu diesen Thema.
Gruß Mikka

25. Januar 2006 12:31

Hi Dante,

willst du den Inhalt des Feldes oder irgendwelche Properties des Feldes ändern?

für den 1.Fall ist ja die TableRelation zuständig, wenn du da einen Datensatz umbenennst oder so, ändert Navision die Datensätze in den anderen Tabellen ja auch. Ob man damit dann wirklich alle Stellen erwischt...

für den 2.Fall denke ich, könntest du auch das Developer Toolkit und die "Where Used"-Funktion nutzen.

Mit den Ref´s habe ich selber auch noch keine Erfahrungen.

gruss, Otschko

25. Januar 2006 14:51

Ok mit folgendem code funkt. der zugriff auf 1e tabelle.
ich modifiziere per Report

ich kann mit hilfe dieses reports und der tabelle "Object" auf alle tabellen zugreifen, nur hab ich folgendes problem in zeile 2:

Das Feld Location Code ist in meheren tabellen enhalten, mit unterschiedlichen "Field No."
wie kann ich mit meinem code auf den "Feld Name" (der in allen Tabellen gleich heisst ("Location Code")) zugreiffen?
RecRefs sind ein bisschen verwirrend für mich ;)


Code:
recref.OPEN(Object.ID)
fldref := recref.FIELD(83); // Feld Location Code
fldref.SETRANGE('');        // Prüfen ob BLANK
IF recref.FIND('-') THEN BEGIN
REPEAT
  fldref := recref.FIELD(83); // Name
  fldref.VALUE := 'NEWMOD';
  recref.MODIFY;
UNTIL recref.NEXT = 0;
END;

25. Januar 2006 18:17

nachdem ich ein bisschen nachgedacht habe ;) bin ich mal so weit...
is´n report.

Das letzte prob is nur das wenn eine Tabelle das Feld "Lagerortcode" nicht beeinhaltet er mir eine schöne fehlermeldung bringt, das das feld nicht in der tabelle vorhanden ist. -- was auch stimmt ;)

nur sehe ich wahrscheinlich den wald vor lauter bäumen nicht mehr :(

ideen?





Code:
recref.OPEN(ID);
y := 0;
feld := 'Lagerortcode';
  FOR i := 1 TO recref.FIELDCOUNT DO BEGIN
    IF recref.FIELDEXIST(i) THEN BEGIN
      fldref := recref.FIELD(i);
        IF fldref.CAPTION = feld THEN BEGIN
          y := i;
        END;
    END;
  END;
 
recref.RESET;
fldref := recref.FIELD(y);
fldref.SETRANGE('');
IF recref.FIND('-') THEN BEGIN
  REPEAT
    fldref.VALUE := '60';
    recref.MODIFY;
  UNTIL recref.NEXT = 0;
END;


mfg
dante

25. Januar 2006 18:34

lol SORRY eigene Dummheit :)

Code:

recref.OPEN(ID);
y := 0;
feld := 'Lagerortcode';
  FOR i := 1 TO recref.FIELDCOUNT DO BEGIN
    IF recref.FIELDEXIST(i) THEN BEGIN
      fldref := recref.FIELD(i);
        IF fldref.CAPTION = feld THEN BEGIN
          y := i;
        END;
    END;
  END;
 
IF y <> 0 THEN BEGIN   // <-- mit dem hier gehts ;)
recref.RESET;
fldref := recref.FIELD(y);
fldref.SETRANGE('');
  IF recref.FIND('-') THEN BEGIN
    REPEAT
      fldref.VALUE := '60';
      recref.MODIFY;
    UNTIL recref.NEXT = 0;
  END;
END;

26. Januar 2006 14:10

Wenn du nur den "Namen" des Codes ändern willst, also zb:

Dein Aussenlager hat den Code AL und soll nun den Code AUSSEN bekommen, dann reicht ein rename in der Tabelle Lagerorte, Navision ändert dann alle verbundenen Felder mit.

Aber wenn ich dich richtig verstehe, willst du ein Lager gegen ein anderes vorhandenes austauschen z.B. um 2 Lager zusammenzuführen, dann ist deine Lösung die richtige.

26. Januar 2006 14:28

Michael Schumacher hat geschrieben:[...]
Aber wenn ich dich richtig verstehe, willst du ein Lager gegen ein anderes vorhandenes austauschen z.B. um 2 Lager zusammenzuführen, dann ist deine Lösung die richtige.

Auch da gibt es eine schnellere Lösung:
Nehmen wir an, die Lager AL und AUSSEN sollen zu AUSSEN zusammengeführt werden.
1. Lösche den Lagerort, den du behalten willst (AUSSEN) (klingt komisch, ist aber so)
2. Benenne das Lager AL in AUSSEN um

Durch das Löschen des ersten Lagerortes werden die Stellen, wo der Code verwendet wird, nicht geändert.
Durch das Umbenennen werden alle Datensätze, die auf AL zeigen in AUSSEN geändert.

(Wie immer gilt bei solchen Aktionen: Es beruhigt, wenn man vorher eine Datensicherung gemacht hat.)

26. Januar 2006 14:58

@michael. musste alle im system befindlichen tabellen, die lagerort BLANK hatten auf einen neuen wert modifizieren.. deshalb die reordrefs ;)

is mir persönlich n bissl kompliziert mit den recordrefs und fieldrefs, aber langsam blick ich durch...

danke für eure antworten... und für das forum hier!

26. Januar 2006 16:05

Dante hat geschrieben:musste alle im system befindlichen tabellen, die lagerort BLANK hatten auf einen neuen wert modifizieren.. deshalb die reordrefs
[...]
Auch dieser Fall hätte ohne RecRef gelöst werden können:
Neuen Lagerort mit Code (leer) anlegen und dann meinen Trick einen Beitrag weiter oben anwenden.


Dante hat geschrieben:[...]
is mir persönlich n bissl kompliziert mit den recordrefs und fieldrefs, aber langsam blick ich durch...
[...]
Aller Anfang ist schwer, aber "Übung macht den Meister".


Dante hat geschrieben:[...]
danke für eure antworten... und für das forum hier!
Ich weise an dieser Stelle darauf hin, dass "das Forum hier" nur durch die aktiven Mitglieder zu dem wurde, was es heute ist, daher gebe ich das Lob gleich mal an alle Mitglieder weiter.