[gelöst] Option auf Report

14. Dezember 2010 14:12

Ich habe eine simple Section Steuerung auf einem Report (Ersatzteilangebot) realisiert, siehe Anhang.

Section 1 wird angedruckt falls Line Discount % <> 0
Section 2 wird angedruckt falls Line Discount % = 0

Auf fast allen Berichten klappt es, es gibt aber auch Ausnahmen wo die falsche Section angedruckt wird.

EDIT:
Habe herausgefunden woran es liegt. Hat man in der ersten Verkaufszeile einen Line Discount, so wird die richtige Section angedruckt. Wie bekomme ich es hin das immer, egal in welcher Verkaufszeile ein Line Discount steht, die richtige Section angedruckt wird?
Kann mir da jemand helfen?
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Zuletzt geändert von misterelektro1981 am 16. Dezember 2010 12:42, insgesamt 1-mal geändert.

Re: Option auf Report

14. Dezember 2010 14:40

Da es sich um den Header handelt, musst du vorab in allen zum Sales Header gehörenden nachfolgenden Zeilen nachschauen, ob ein Rabatt vorkommt. Das ginge im OnAfterGetRecord des Sales Headers.

Re: Option auf Report

14. Dezember 2010 14:47

Danke für die rasche Antwort.

Ich denke du meinst auf dem DataItem Sales Line, oder?

Wenn ich das das richtig verstehte würde ich dann mit einem BOOL Wert auf den Sections arbeiten, oder?

Quasi:
if boolwert = true then...
if boolwert = false then...

Jetzt stellt sich für mich die Frage wie suche ich Programmiertechnisch zuvor danach?

Re: Option auf Report

14. Dezember 2010 15:10

Ich meinte schon den Sales Header. Da legst du dir eine Variable Sales Line an, filterst sie so zurecht, wie die Verknüpfung der DataItems Sales Header zu Sales Line es vorgibt (schätzungsweise Document Type und No), filterst zusätzlich auf Discount, und je nachdem, ob du Zeilen findest oder nicht, hast du deinen Boolwert, der den zu druckenden Header der Sales Lines fest legt.

Alternativ kannst du auch mit einem einzigen Header arbeiten, in dem du das Label für die Überschrift "Rabatt" gegen eine Textbox austauschst, die du einfach leer lässt, wenn keine Zeile mit Rabatt gefunden wurde. Fände ich auch schöner.

Aber mach lieber erst mal mit deiner Lösung weiter.

Re: Option auf Report

14. Dezember 2010 15:31

Hallo McClane,

ich bin dir wirklich dankbar für deinen Versuch mir das zu erklären. Jedesmal wenn ich denke etwas zu verstanden habe, kommt eine neue etwas andere Anforderung und ich bin am grübeln.
Bitte nimm es mir nicht übel wenn ich immer wieder erwähnenn muss, dass ich noch nie eine Schulung besucht habe und nun soll ich filtern, etwas suchen usw.

Ich versuche es mal aufzuschreiben wie ich es jetzt versucht hätte umzusetzen, falls es nicht passt wäre ich dir dankbar wenn du mir den Code posten könntest:
gl.Variable Typ Record auf Sales Line
=> gl.Variable.SETRANGE("Document Type" :: Ersatzteilangebot, "No.", "Discount %") //Woher weiß ich denn wie man Sales Header und Sales Line verknüpfe???
=> if findfirst ("Line Discount %" <> 0) then
=> boolvariable = true;

P.S. Bitte nicht lachen, wirst du wahrscheinlich schon, wenn das niemals funktionieren kann.

Re: Option auf Report

14. Dezember 2010 15:51

Dann solltest du an dem Zustand "keine Schulung erhalten" mal was ändern :wink: . Ich muss dich ja sicher nicht daran erinnern, dass du mit hochsensiblen Daten herumspielst und was das für Auswirkungen haben kann, wenn mal etwas schief läuft.

So:
wie zwei DataItems verknüpft sind, siehst du in deinem Beispiel, wenn du dir im Report->Sales Line->Properties den DataItemLink ansiehst. Da steht bei dir sowas wie "Document Type=FIELD(Document Type),Document No.=FIELD(No.)", denke ich. Die Sachen vor dem = beziehen sich auf Sales Line, die dahinter auf Sales Header.

Nehmen wir an, dass das so da steht. Dann entspräche dem für deine Suche:
Code:
SalesLine.SetRange("Document Type","Sales Header"."Document Type"); // "Sales Header" der Deutlichkeit halber
SalesLine.SetRange("Document No.","Sales Header"."No.");

Um eine Zeile mit Rabatt zu finden, muss man noch darauf filtern:
Code:
SalesLine.SetFilter("Line Discount %",'>0');


Gibt's eine Zeile dieser Art, ist die Bedingung für den Header mit "Rabatt" erfüllt:
Code:
DruckeRabattHeader:=SalesLine.findfirst;
Zuletzt geändert von McClane am 15. Dezember 2010 11:27, insgesamt 1-mal geändert.

Re: Option auf Report

14. Dezember 2010 16:04

McClane hat geschrieben:Dann solltest du an dem Zustand "keine Schulung erhalten" mal was ändern :wink: . Ich muss dich ja sicher nicht daran erinnern, dass du mit hochsensiblen Daten herumspielst und was das für Auswirkungen haben kann, wenn mal etwas schief läuft.

Das Thema habe ich bereits des öfteren bei uns angesprochen. Man setzt das quasi vorraus das man das als Dippel Ing. automatisch beherrschen sollten...

Jetzt wie du es beschrieben hast ist es wirklich sehr verständlich und es klappt natürlich auch.
Dennoch eine Frage, dmait es funktioniert musste ich eine lokale Variable erstellen, hat das einen besonderen Grund oder war das Zufall?

Re: Option auf Report

14. Dezember 2010 17:36

misterelektro1981 hat geschrieben:Dennoch eine Frage, dmait es funktioniert musste ich eine lokale Variable erstellen, hat das einen besonderen Grund oder war das Zufall?

Nun ja, irgendwie musst du ja auf die Tabelle zugreifen, oder? Und die Variable dafür muss man wohl oder übel deklarieren. Oder lag die Betonung auf "lokal"? Eine globale Variable hätte auch geklappt.

Re: Option auf Report

16. Dezember 2010 12:41

Hallo,

die Betonung lag auf "lokal". Keine Ahnung warum aber mit einer globalen Variablen kam ich nichts zum positiven Ergebnis.

Re: [gelöst] Option auf Report

16. Dezember 2010 13:19

Das hat aber irgendeinen anderen Grund gehabt.