[gelöst] Nachträgliches einfügen von Daten per Report

7. Dezember 2016 10:13

Hallo zusammen,

hab folgendes Problem:
Ich hab ein neues Feld In der Tabelle 23(Kreditor, "Vetraulich/Confidential"), dieses wurde nun für jeden Kreditor im Nachhinein gepflegt.
Nun möchte ich per Report diese Information im nachhinein in die Tabellen 38,122,124 schreiben.

Habe mir schon einen Report angelegt, der auf Prozessing Only steht, ebenso hab ich erstmal nur für die Tabelle 38 ein DataItem angelegt.
Dort schreibe ich dann meinen Code, der die Daten ändern/hinzufügen soll.
Funktionieren tut es leider nicht :/

Hier mein Report :

//START

Purchase Header - OnAfterGetRechord()

IF PurchaseHeader.FIND Then
PurchaseHeader.SETRANGE("Buy-from Vendor No.",Vendor."No.");
PurchaseHeader.Confidential := Vendor.Confidential;
PurchaseHeader.INSERT;
MESSAGE('TEST');

//ENDE

Ich denke der Setrange ist falsch und warum kann ich keine Bilder mehr von meinem Computer einfügen ?

Danke im Vorraus schonmal.

Gruß Ray
Zuletzt geändert von Rayleigh am 12. Dezember 2016 14:24, insgesamt 1-mal geändert.

Re: Nachträgliches einfügen von Daten per Report

7. Dezember 2016 10:21

Wo fängt man denn da am besten an?

Ist das dein kompletter Report?
Wenn ja:
- Wo kommt das Vendor Objekt her?
- Ist das "PurchaseHeader"-Object eine Globale oder Lokale Variable?
- Warum setzt du den Filter nachdem du die Daten geholt hast?
- Warum fügst du neue Purchase Header ein, ich dachte du wolltest die alten modifizieren?

Re: Nachträgliches einfügen von Daten per Report

7. Dezember 2016 10:40

Hallo,

da ist leider so einiges im argen. :-(

Erste Frage: Hast du eine Solution-Developer- Lizenz? Falls nein, dann kannst du dir die Änderungen in Tabelle 122 und 124 sparen. Darauf hast du keinen Zugriff.

Zweitens:
Wenn du einen Report schreibst, bei dem die Tabelle 38 (Purchase Header) als DataItem eingetragen ist, welchen Daten hast du im "Purchase Header" - OnAfterGetRecord im Zugriff?
Richtig: einen Einkaufskopf, in dem du nicht noch einmal nach einem Einkaufskopf suchen musst. Das macht man vorher :wink:
Entweder filterst du den Einkaufskopf vorher auf die entsprechenden Kreditoren, oder du definierst ein weiteres übergeordnetes DataItem Vendor das mit "Purchase Header" verknüpft ist.
Dann kannst du das Feld ändern, und mit MODIFY den geänderten Datensatz zurückschreiben (Der Datensatz ist ja schon da, du möchtest ja keinen neuen erzeugen).

Gruß Fiddi

Re: Nachträgliches einfügen von Daten per Report

7. Dezember 2016 10:40

Hallo Ted,

danke für deine Antwort.

- Das Vendor Objekt muss ich mir wahrscheinlich mit dem GET Befehl holen, oder muss ich für den Vendor auch ein Dataitem anlegen wo er dann drüberläuft ?
- Eine Globale, habe aber auch grade gemerkt das ich "PuchaseHeader" weglassen kann, da ich ja in dem DataItem bin
- Problem ist, ich denke ich brauche gar keinen Filter.
Was ich möchte ist, er soll in der Tabelle 38 für jeden Datensatz in die Tabelle 23 schauen und den Wert des Feldes ("Confidential") dann in den Datensatz schreiben

- Es gibt quasi keine alten Daten, da die werte nachgepflegt werden sollen.

//START

Vendor.GET("No.");
IF PurchaseHeader.FIND Then
Confidential := Vendor.Confidential;
MODIFY;
MESSAGE('TEST');

//ENDE

Gruß Ray

Re: Nachträgliches einfügen von Daten per Report

7. Dezember 2016 10:45

Hallo Rayleigh,

dein Quelltext ist leichter zu lesen und zu verstehen, wenn du ihn zwischen so genannte Code-Tags setzt. Insbesondere deine Formatierungen werden so auch beibehalten.

Daher bitten wir dich, vor und nach deinem Quelltext diese Code-Tags einzufügen. Beispiel:


[code]Dein Quelltext[/code]

Gruß, Kowa
MSDynamics.de-Team

Re: Nachträgliches einfügen von Daten per Report

7. Dezember 2016 11:06

Hallo,

@kowa
erstmal danke Kowa für den Hinweis.

@fiddi
1. Der Zugriff auf die Tabellen ist kein Problem, dass ist aber noch garnicht das Thema, da ich erstmal die Daten in die Tabelle 38 schreiben will.
2. Ich will jetzt über dem Kreditor laufen, ich geh für jeden Kreditor in die Tabelle 38 und änder das Feld in jedem Datensatz wo sich meine Vendor."No." mit der
PurchaseHeader." Buy-from Vendor No." gleicht.
Für diese vorangehensweise bräucht ich nur ein Dataitem oder ?

//START

Vendor - OnAfterGetRecord()
Code:
PurchaseHeader.SETRAnge("Buy-from Vendor No.",Vendor."No.");
PurchaseHeader.Confidential := Vendor.Confidential;
PurchaseHeader.MODIFY(TRUE);
MESSAGE('TEST');


//ENDE

Re: Nachträgliches einfügen von Daten per Report

7. Dezember 2016 12:31

Code:
PurchaseHeader.SETRAnge("Buy-from Vendor No.",Vendor."No.");
PurchaseHeader.MODIFYALL(Confidential ,TRUE);
MESSAGE('TEST');

sollte besser funktionieren.

Gruß Fiddi

Re: Nachträgliches einfügen von Daten per Report

12. Dezember 2016 14:23

Hallo zusammen,

habe nun rumprobiert und bin an folgende Lösung gekommen, danke für eure Antworten.
Schließe hiermit den Thread.
Der Code steht im OnAfterGetRecord() Trigger des Vendors :

Code:
Vendor - OnAfterGetRecord()
PurchaseHeader.SETRANGE("Buy-from Vendor No.",Vendor."No.");
IF PurchaseHeader.FINDSET THEN BEGIN
  REPEAT
    PurchaseHeader.Confidential := Vendor.Confidential;
    PurchaseHeader.MODIFY;
  UNTIL PurchaseHeader.NEXT = 0;
END;

PurchInvHeader.SETRANGE("Buy-from Vendor No.","No.");
IF PurchInvHeader.FINDSET THEN BEGIN
  REPEAT
    PurchInvHeader.Confidential := Vendor.Confidential;
    PurchInvHeader.MODIFY;
  UNTIL PurchInvHeader.NEXT = 0;
END;

PurchCrMemoHdr.SETRANGE("Buy-from Vendor No.",Vendor."No.");
IF PurchCrMemoHdr.FINDSET THEN BEGIN
  REPEAT 
    PurchCrMemoHdr.Confidential := Vendor.Confidential;
    PurchCrMemoHdr.MODIFY;
  UNTIL PurchCrMemoHdr.NEXT = 0;
END;


Gruß Ray