[gelöst] Überschriften im Report ausblenden

9. April 2008 07:22

Hallo,

kann man in einem Report z.B die Überschrift Rabat ausblenden wenn in einem Auftrag oder einer Rechnung kein Rabatt eingetragen ist. Hat jemand da einen Code/Befehl wie ich das dann realisieren könnte?

mfg Harrison
Zuletzt geändert von Harrison am 14. April 2008 06:46, insgesamt 1-mal geändert.

9. April 2008 08:06

Ist die Überschrift bei dir ein einzelnes Feld oder
steht die Überschrift alleine in einer Section im Reprt.
Dann hätte ich gesagt, dass du ein CurrReprt.SHOWOUTPUT(FALSE) verwendest für die Section, wenn die Bedingung des nichtvorhandenen Rabatts erfüllt ist.

Gruß Schaarschi

9. April 2008 09:18

Das ist ein Feld in einer Section aber mit den anderen Überschriften.
Da könnte ich die Section kopieren und ne Bedingung erstellen und darauf hin die entsprechende Section drucken. Ich habe nur keinen schimmer wie ich auf meine z.B. Sales Line eine Abfrage ob ein Wert hinterlegt ist mache?

mfg Harrison

9. April 2008 15:26

Das musst Du anders machen.

In der Section mit den Kopfangaben musst Du anstelle des Labels mit Caption "Rabatt" eine Variable z.B. RabattText einsetzen.
Diese Variable gibst Du dann als SourceExpression in einer Textbox an.

Danach brauchst Du im SalesHeader-OnAfterGetRecord etwas Code.
Aus dem Stehgreif etwa so:
Code:
RabattText := '';
SalesLine.RESET;
SalesLine.SETCURRENTKEY("Document Type","Document No.","Line No.");
SalesLine.SETRANGE("Document Type", SalesHeader."Document Type");
SalesLine.SETRANGE("Document No.", SalesHeader."No.");
SalesLine.SetFilter("Line Discount %" , '<>%1', 0);
if SalesLine.findfirst then
  RabattText := 'Rabatt';


ca. so

Gruss

10. April 2008 08:06

Danke das hat wunderbar geklappt,

habe probiert das nun auf die Rechnung anzuwenden. Irgendwo ist da noch ein Fehler drin und ich habe auch noch nicht ganz den aufbau dieses Filters verstanden.
Code:
RabattText := '';
"Sales Invoice Line".RESET;
"Sales Invoice Line".SETCURRENTKEY("Document No.","Line No.");
"Sales Invoice Line".SETRANGE("Document No.", "Sales Invoice Header"."No.");
"Sales Invoice Line".SETRANGE("Sales Invoice Header"."No.");
"Sales Invoice Line".SETFILTER("Line Discount %" , '<>%1', 0);
IF "Sales Invoice Line".FINDFIRST THEN
RabattText := 'Rabatt%';


kann mal jemand drüber fliegen und schauen was ich da falsch mache?

mfg Harrison

10. April 2008 08:31

Hi Harrison!

Harrison hat geschrieben:kann mal jemand drüber fliegen und schauen was ich da falsch mache?


Wenn du den Code von martinst mit deinem Code vergleichst, wirst du sehen, dass diese Zeile

Code:
"Sales Invoice Line".SETRANGE("Sales Invoice Header"."No.");

überflüssig ist. Außerdem hast du die folgende Zeile vergessen:

Code:
SalesLine.SETRANGE("Document Type", SalesHeader."Document Type");


Meiner Meinung nach benötigt man die Zeile, in welcher der Tabellenschlüssel gesetzt wird, nicht. Durch das RESET wird der primäre Tabellenschlüssel gewählt und dieser ist im Standard "Document Type,Document No.,Line No.". Für deinen Code ist dieser Tabellenschlüssel der beste.

Gruß, Marc

10. April 2008 15:14

Noch mal Hallo,

mir ist gegen Mittag aufgefallen das nach dem einfügen der Codes die Positionen nicht mehr korrekt dargestellt werden. Anzahl der Positionen ist geblieben aber es wird nur noch die Informationen der ersten Position gedruckt. Hier die Beiden Codezeilen
Code:
 
// SalesLine.SetFilter("Line Discount %" , '<>%1', 0);
// if SalesLine.findfirst then

Egal welche Zeile ich aktiviere beide verursachen den Datensalat

MFG Harrison

10. April 2008 17:13

IF "Sales Invoice Line".FINDFIRST THEN
RabattText := 'Rabatt%';


Ich würde den ELSE-Zweig noch ausprogrammieren, der RabattText löscht, wenn keine SalesLine gefunden wurde.

11. April 2008 11:36

Hallo,

Du solltest eine neue Variable z.B. SalesInvLine mit dem Record "Sales Invoice Line" anlegen und darüber prüfen ob Rabatt angezeigt werden soll oder nicht.
Mit Sales Invoice Line.FindFirst findest Du nur den ersten Eintrag. und da der Report "Sales Invoice Line" druckt erscheint immer die gleiche Position.

Viele Grüße

Jörg

12. April 2008 10:09

Ja Danke West010,
soweit klappt es nur habe nun einen Fehlermeldung :
Es wurde ein Feld einer Datensatzvariablenerwartet. Zum Beispiel:
Datensatz Feld
Debitor.Name

die Zeile in der dann der Curser steht lautet:
Code:
SalesInvLine.SETRANGE("Sales Invoice Header"."No.");

hinter ..."No"

mfg Harrison

12. April 2008 15:03

So müsste es in dieser Zeile lauten:

Code:
SalesInvLine.SETRANGE("Document No.", "Sales Invoice Header"."No.");

14. April 2008 06:46

Danke das war es,

mfg Harrison