22. Juli 2010 16:15
Fehlermeldung hat geschrieben:CodeUnit.Run() ist in Schreibtransaktionen nur dann erlaubt, wenn der Rückgabewert nicht benutzt wird. Nicht erlaubt ist zum Beispiel 'OK := CodeUnit.Run()'.
CLEAR(SalesPost);
SalesPost.SetPostingDate(ReplacePostingDate,ReplaceDocumentDate,PostingDateReq);
IF SalesPost.RUN("Sales Header") THEN BEGIN
IF NOT SalesHeader.FINDFIRST THEN
CurrReport.SKIP;
ExtDocNo := SalesHeader."External Document No.";
PostDate := SalesHeader."Posting Date";
CASE SalesHeader."Document Type" OF
SalesHeader."Document Type"::Invoice:
BEGIN
//Rechnungen verbuchen
END;
SalesHeader."Document Type"::"Credit Memo":
BEGIN
//Gutschriften verbuchen
BatchPostSalesCrMem.USEREQUESTFORM := FALSE;
BatchPostSalesCrMem.Parameter(ExtDocNo,PostDate,TRUE);
BatchPostSalesCrMem.RUNMODAL;
END;
END;
22. Juli 2010 17:55
Commit;
IF SalesPost.RUN("Sales Header") THEN BEGIN
23. Juli 2010 08:23
23. Juli 2010 08:30
23. Juli 2010 08:37
Herdi hat geschrieben:Danke, das war die Lösung!
Aber ich versteh ehrlich gesagt noch nicht so ganz warum das hilft.
Ich mach mit der Sales Header Tabelle ja nichts weiter. Kann mir das jemand erklären?
Viele Grüße
Herdi
23. Juli 2010 08:38
winfy hat geschrieben:Das Buchungsdatum vielleicht setzen?
23. Juli 2010 10:48
winfy hat geschrieben:Das Buchungsdatum vielleicht setzen?
mfg,
winfy
Natalie hat geschrieben:Führst du noch außerhalb des veröffentlichten Quelltextes irgendwo ein MODIFY (egal welche Tabelle) aus?
// -002
IF RepAutomatisch THEN
COMMIT;
// +002
CLEAR(SalesPost);
SalesPost.SetPostingDate(ReplacePostingDate,ReplaceDocumentDate,PostingDateReq);
IF SalesPost.RUN("Sales Header") THEN BEGIN
23. Juli 2010 10:52
Herdi hat geschrieben:Nach dem veröffentlichen Text wird ein Log per Modify(True) geschrieben. Kann das der Störenfried sein?
23. Juli 2010 10:56
23. Juli 2010 10:58
Herdi hat geschrieben:Nein, der MODIFY(TRUE) läuft definitiv erst nach dem Codeunit.RUN Aufruf.
23. Juli 2010 11:19
Natalie hat geschrieben:Herdi hat geschrieben:Nein, der MODIFY(TRUE) läuft definitiv erst nach dem Codeunit.RUN Aufruf.
Dann habe ich schlichtweg keine Ahnung, warum das System das COMMIT verlangt. Scheinbar reicht auch eine Recordveränderung ohne MODIFY aus???
Report automatische Verarbeitung
DataItem Stapel <DataItemIndent = 0>: nur Filter setzen
DataItem Belege <DataItemIndent = 1>: Report 298 aufrufen und den entsprechenden Stapel mitgeben
Report "Batch Post Sales Credit Memos"
DataItem "Sales Header" <DataItemindent = 0>: Fenster öffnen und updaten
DataItem "Sales Header" <DataItemindent = 0>: Die Codeunit aufrufen (IF CODEUNIT.RUN THEN;)
DataItem Belege <DataItemIndent = 1>: Nach Report 298 Verarbeitungslog schreiben (MODIFY(TRUE))
23. Juli 2010 11:21
Herdi hat geschrieben:Nein, der MODIFY(TRUE) läuft definitiv erst nach dem Codeunit.RUN Aufruf.
CalculateInvoiceDiscount
BatchPostSalesCrMem.Parameter(ExtDocNo,PostDate,TRUE);
23. Juli 2010 11:24
23. Juli 2010 11:26
winfy hat geschrieben:Was ist eigentlich dieses
- Code:
BatchPostSalesCrMem.Parameter(ExtDocNo,PostDate,TRUE);
?
ExtDocNo := SalesHeader."External Document No."
PostDate := SalesHeader."Posting Date"
23. Juli 2010 11:27
Natalie hat geschrieben:Der Report 298 führt seinerseits doch schon eine Buchung aus. Dabei werden natürlich Datensätze geschrieben, geändert oder gelöscht -> Posten werden z.B. erzeugt.
Würdest du - nur zum Test - den Aufruf auskommentieren, müsste doch rein theoretisch dein IF Codeunit.RUN (beim erstmaligen Aufruf) funktionieren.
23. Juli 2010 11:31
23. Juli 2010 11:46
Natalie hat geschrieben:Ich sagte ja auch "nur zum Test", um damit meine These zu bestätigen.
Du kommst also um das COMMIT nicht herum, es sei denn, der Report soll bei Laufzeitfehlern (durch CODEUNIT.RUN ohne IF) abbrechen.
Herdi hat geschrieben:Allerdings muss ich den vorgelagerten Report lassen, da nur extra eingerichtete Stapel verarbeitet werden dürfen.