[gelöst] Hilfe bei Textfeldern im Report

15. Januar 2007 15:25

Hallo zusammen, hab mich mal nen bischen im Forum umgesehen aber nichts passendes gefunden.

Hier also mein Problem:

Bei der Angebotserstellung ist es nicht unbedingt zwingend den Kontakt einzugeben.

Dieser Kontakt taucht aber im Adressfeld beim Report auf.

Name
Name 2
Kontakt
Adresse
Adresse 2
usw

Wenn nun das Feld Kontakt nicht gefüllt ist, entsteht eine Leerzeile in der Adresse.
Kann ich es irgentwie erreichen, dass das Feld wenn es leer ist nicht ausgegeben wird? Und somit auch keine Leerzeile entsteht.


gruß
Timo
Zuletzt geändert von t.fischer am 16. Januar 2007 09:36, insgesamt 1-mal geändert.

Re: Hilfe bei Textfeldern im Report

15. Januar 2007 16:10

Hi Timo,

erst einmal herzlich Willkommen hier im Forum! :-)

t.fischer hat geschrieben:Bei der Angebotserstellung ist es nicht unbedingt zwingend den Kontakt einzugeben. [...] Wenn nun das Feld Kontakt nicht gefüllt ist, entsteht eine Leerzeile in der Adresse.

Schau dir mal die Funktion "FormatAddr" in der Codeunit "Format Address" (ID: 365) an. Dort würde ich zum Schluss prüfen, ob eine Leerzeile im Array "AddrArray" existiert und diese dann löschen.

Gruß, Marc

15. Januar 2007 16:37

Prinzipiell müssen alle 8 Adressfelder dazu in ein Array geschrieben werden. Die Funktion COMPRESSARRAY rückt die Felder dann zusammen, um leere zu vermeiden.

Ob Adressenleerzeilen entstehen, wo die PLZ steht und wo ggf. der Kontakt erscheint , wird anhand des Ländercodes in den Feldern "Adressformat" und "Kontaktadressformat" in der Tabelle "Land" definiert, die in Codeunit 365 ausgewertet werden. Die Felder "Lokales Adressformat und "Lokales Kontaktadressformat"für Inlandsformatierung stehen in der "Finanzbuchhaltung Einrichtung".

15. Januar 2007 17:22

Erstmal danke für die schnellen Antworten.
Ich bin leider noch nicht so fit in Navision, habe vor 3 Monaten angefangen mit dem Reportdesign und arbeite mich so langsam vor.
An die Codeunits möchte ich, wenn möglich, nicht unbedingt gehen.

Ich habe mein Problem glaub ich nicht ausführlich genug beschrieben.
Die Adressfelder sind alle in einem Array und werden auch, falls leer, zusammengerückt.

Unser Vertrieb wollte aber den Ansprechpartner auch im Adressfeld haben, dieses Feld ist nicht im Adress Array enthalten, sondern ein extra Feld.
Habe mal einen Screeny gemacht um es ein wenig anschaulicher zu machen.
Bild

Das Feld "Sales Header"."Sell-to Contact" ist der Übeltäter, welcher die leerzeile verursacht.
Wie könnte ich dieses Feld denn in das Adress Array hinzufügen?


Desweitern seht ihr im unteren Bereicht die Überschriften "Ihre Anfrage vom" und "Ansprechpartner".
Wenn in den dazugehörigen Feldern nichts eingetragen ist, stehen die Überschriften alleine da und das sieht natürlich nciht so schön aus.
Gibt es eine Möglichkeit diese Feldern nicht anzuzeigen wenn die Werte nicht vorhanden sind.

Tut mir leid wenn ich mich nicht so klar ausdrücke oder wenn ich komische Fragen stelle, aber in vielen Bereichen verwirrt Navision mich im Moment noch ernorm. :oops:

15. Januar 2007 17:56

So wie das bei dir aufgebaut ist, werden nur die Werte in der Array-Variablen CustAddr komprimiert, das heisst nur da werden durch die erwähnte Funktion in der Codeunit Leerzeilen unterdrückt. Das Feld "Sell-to Contact" bleibt da einfach stehen, wenn es leer ist und verursacht eine Leerzeile.

Ich würde dir da folgendes empfehlen:

Definiere einen neue Array-Variable und übertrage die Werte aus CutAddr inkl. der Kontaktperson auf diese neue Variable. Diese kann dann mit COMPRESSARRAY aufbereitet werden. Dazu musst du dann aber alle Felder, die jetzt mit CustAddr gefüllt werden durch deine neue Array-Variable ersetzen (inkl. dem Feld "Sell-To Contact")

Ich hoffe, ich bin einigermassen verständlich rübergekommen :-D

15. Januar 2007 18:52

Oder löse es ganz unelegant durch Dublizieren der oben veröffentlichten Section. Dort lässt du das/die Feld(er) "Sell-to..." weg. Ergänze dann die beiden Sections im OnPreSection-Trigger um ein
Code:
CurrReport.SHOWOUTPUT("Sales Header"."Sell-to Contact" <> '');

in der Original-Section und
Code:
CurrReport.SHOWOUTPUT("Sales Header"."Sell-to Contact" = '');

in der dublizierten Section.

15. Januar 2007 18:56

Vermutlich reicht es die Zeile
Code:
FormatAddr.SalesHeaderBillTo(CustAddr,"Sales Header");

im OnAfterGetrecord vom Sales Header DataItem auszukommentieren und durch
Code:
FormatAddr.SalesHeaderSellTo(CustAddr,"Sales Header");

zu ersetzen ( ist in unserer Branchenlösung auch so geändert). Dann werden die Werte aus "Verkauf an..." und nicht die aus "Rechnung an..." angedruckt und das Zusatzfeld kann wieder raus.

15. Januar 2007 19:03

t.fischer hat geschrieben:Desweitern seht ihr im unteren Bereicht die Überschriften "Ihre Anfrage vom" und "Ansprechpartner".
Wenn in den dazugehörigen Feldern nichts eingetragen ist, stehen die Überschriften alleine da und das sieht natürlich nciht so schön aus.
Gibt es eine Möglichkeit diese Feldern nicht anzuzeigen wenn die Werte nicht vorhanden sind.

Dazu muss die Caption als Variable definiert werden. Vergleiche wie das mit
Code:
IF "Your Reference" = '' THEN
  ReferenceText := ''
ELSE
  ReferenceText := FIELDCAPTION("Your Reference");

gemacht wird und übernimm das entsprechend. Wenn das keine Tabellenfelder sind, muss der Captiontext über eine Textkonstante ( separate Texte für jeden notwendigen Sprachcode) definiert werden.

16. Januar 2007 01:25

Wie Kowa schon richtig sagte, liegt es daran, dass nicht die Sell-to sondern die Bill-to Adresse im Angebot verwendet ist.
Die Navision-Programmierer sind hierbei davon ausgegangen, dass der, der die Rechnung bezahlen soll, auch entscheiden muss, ob das Angebot angenommen wird.
Die einfachste Lösung wäre hier, dem Vertrieb beizubringen, den Kontakt auch auf der Registerkarte Fakurierung im Angebot einzutragen und dann steht er ganz von alleine im Report :twisted:

16. Januar 2007 09:38

danke für die antworten, ich werde es mal mit einer neuen array variable versuchen, das wäre doch gelacht wenn ich das nicht hinbekommen kann.

16. Januar 2007 10:22

Warum so ein Aufwand?
brauchst du denn die Rechnungsadresse auch noch im Angebot?

Wenn nicht, dann tausche einfach die beiden Buchstaben im OnAfterGetRecord-Trigger vom "Sales Header"-Dataitem.

also statt:

FormatAddr.SalesHeaderBillTo(CustAddr,"Sales Header");

machst du daraus:

FormatAddr.SalesHeaderSellTo(CustAddr,"Sales Header");

und schon kannst du das überzählige Feld aus dem Adressblock herausnehmen!