[gelöst] Codeunit zum Aktualisieren der Tabellen

18. November 2009 14:27

Hallo Zusammen,

und zwar hab ich da ein Problem und ich hoffe ihr könnt mir da weiterhelfen.

Und zwar würde ich gerne meine Tabellen, also z.B. die Value Entry aktualisieren.

Das heißt eine Codeunit machen die in die Value Entry schaut. Wenn dort eine Debitorpreisgruppe leer ist soll er schauen
welcher Debitor das ist, dann anhand des Debitors in der Customer Tabelle schauen ob für diesen Debitor eine Preisgruppe hinterlegt ist.
Wenn ja soll er diese in die bestimmte Zeile in der Value Entry schreiben. Und das Ganze soll er mit jeder Zeile machen.

Nur leider kann ich das Ganze nicht in funktionierenden Code umsetzen.... Habt ihr sowas vielleicht schon mal gemacht?

Dankeschön & Gruß!!!
Zuletzt geändert von Yvi am 9. Dezember 2009 17:43, insgesamt 1-mal geändert.

Re: Codeunit zum Aktualisieren der Tabellen

18. November 2009 14:44

Hallo Yvi,

hast du eine Solution-Devoloper Lizenz? Falls nein, hast du ein Zugriffs Problem, das du ohne euren Partner nicht lösen kannst.

Ansonsten würde ich das über einen Report lösen, der über die Value- Entry läuft, im OnAftergetrecord einen GET auf Customer macht, die Preisgruppe in das Feld einträgt, und einen modify macht.

Gruß, Fiddi

Re: Codeunit zum Aktualisieren der Tabellen

18. November 2009 15:01

Achso, ja dann versuchen wir das über den Report.

Also einen neuen Report, brauch ich da die beiden Tabellen Value Entry und Customer? Keine Sections, oder?
Und ich mach den ganzen Code im OnAfterGetRecord? Und vorallem wie soll der Code in etwa aussehen?
Genau da ist nämlich das Problem, ich kann das irgendwie noch nicht umsetzen!?

Fragen über Fragen.... :-)

Dankeschön für die Hilfe!!!

Gruß

Re: Codeunit zum Aktualisieren der Tabellen

18. November 2009 15:07

noch mal die Frage nach der Lizenz, du kannst die Tabelle nicht ändern, wenn du keinen Zugriff auf diese hast. Zweitens, wenn du nicht weist was du tust in der DB, dann machst du u.U. eine der wichtigsten Tabellen im System kaputt.

Gruß, Fiddi

Re: Codeunit zum Aktualisieren der Tabellen

18. November 2009 15:16

Doch, ich kann die Tabelle schon ändern!
Ich hab nur immer ein wenig Schwierigkeiten das Ganze in einen laufenden Code umzusetzen!
Und ich teste das ja alles vorher in einer Testdatenbank... :-)

Re: Codeunit zum Aktualisieren der Tabellen

18. November 2009 16:19

Ich habe mir auch schon mal die Wertposten "zerschossen", war kein Spass :-(
Und ich habe vorher auch Tests auf einer Lokalen-DB gemacht, aber bei mehren millionen Datensätzen (wo nur 50 - 100 falsch waren), fällt das ganze nicht sofort auf (Gottlob hatte ich eine Sicherung)! Also bedenke was du tust!

Du benötigst keine Sections, der Report kann auf "ProcessingOnly" stehen.
Nur ein DataItem "ValueEntry", den Filter setzten auf "Source Type = Customer" damit nur die Debitorenposten angezeigt werden.
Dann eine Variable vom Typ Record deklarieren auf die Tabelle Customer.

Wie Fiddi schreibt, auf dem OnAfterGetRecord Trigger ein Get auf Customer machen (über das Feld ValueEntry."Source No."). Jetztz nur noch den Feldwert zuweisen und Modify.

Wie der Zugriff per GET erfolgen kann steht sehr schön geschrieben, hier:
Records: GET SETFILTER FIND etc.

Re: Codeunit zum Aktualisieren der Tabellen

19. November 2009 17:13

Ok, das schaut doch schon mal gut aus.... Das haben wir jetzt alles mal so gemacht.

Unser Code sieht momentan so aus:

Code:
Debitor.GET("No.","Customer Price Group");
IF "Customer Price Group" = '' THEN
     "Customer Price Group" := Debitor."Customer Price Group";
MODIFY;


Jetzt bekommen wir aber den Fehler: "Es wurden zu viele Schlüsselfelder spezifiziert, daher kann Debitor nicht geöffnet werden.
Die Anzahl der Primärschlüsselfelder ist 1." Der Primärschlüssel in der Tabelle Value Entry ist: Entry No. Und der Customer Tabelle: No.

Irgendwo müssen wir dem ja auch noch sagen das die Source No. in der Value Entry die No. aus der Debitortabelle ist!?
Bisher weiß der ja noch gar nicht bei welchem Debitor er nach der Debitorpresigruppe schauen soll, oder?

Re: Codeunit zum Aktualisieren der Tabellen

19. November 2009 17:20

So ist zumindest das GET syntaktich richtig:

Code:
Debitor.GET("No");
IF "Customer Price Group" = '' THEN
     "Customer Price Group" := Debitor."Customer Price Group";
MODIFY;

Bitte lies folgenden Artikel :greenarrow: viewtopic.php?p=40410#p40410 Abschnitt GET.
Und wenn der Inhalt nicht verständlich genug war, dann sage mir bitte, wo es hakt :-)

Re: Codeunit zum Aktualisieren der Tabellen

19. November 2009 17:25

Hallo,

danke schon mal... :-)

Jetzt bringt er folgenden Fehler: "Debitor Nr. '' existiert nicht."

Wie gesagt, weiß der denn schon von welchem Debitor er sich die Debitorpreisgruppe holen muss?
Der weiß ja nicht das Source No. aus der Value Entry gleich No. aus der Customer Tabelle ist, oder?

Re: Codeunit zum Aktualisieren der Tabellen

19. November 2009 17:29

Es gibt in Value Entry die Felder Source Type und Source No.
Nur wenn Source Type = Customer ist, nimmst du Debitorennr. = Source No.
Also filterst du schon mal am besten die Datensätze auf Source Type = Customer.

Re: Codeunit zum Aktualisieren der Tabellen

19. November 2009 17:32

Ja genau, das haben wir. Einen Filter: Source Type = Customer.
Und dadurch weiß er schon das Source No. gleich No. aus der Debitortabelle ist?

Was hat das dann mit dem Fehler auf sich?

Re: Codeunit zum Aktualisieren der Tabellen

19. November 2009 18:48

Yvi hat geschrieben:Ja genau, das haben wir. Einen Filter: Source Type = Customer.
Und dadurch weiß er schon das Source No. gleich No. aus der Debitortabelle ist?

Anders formuliert: Ohne Source Type wüsste NIEMAND, was das in der Source No. überhaupt für eine Nummer ist ;-)
Ist übrigens auch genauso in der TableRelation des Feldes Source No. definiert, falls dir das was sagt.

Was hat das dann mit dem Fehler auf sich?

Im dem Datensatz, in dem du standest (bzw. standest du überhaupt schon auf einem??), war das Feld "No." (des Value Entrys) leer, also hat er nach dem Debitor mit der Nummer = leer gesucht - und nicht gefunden (Fehlermeldung).
Aber wie gesagt, er muss das Feld "Source No." nehmen.

Re: [gelöst] Codeunit zum Aktualisieren der Tabellen

9. Dezember 2009 17:45

Hallo,

wir haben das ganze jetzt doch in eine Codeunit gepackt und noch ein bisschen probiert, jetzt klappts.

Dankeschön für eure Hilfe!:-)

Gruß!