Zeilenhöhe

30. Juli 2008 13:12

Hallo,

unser Corporate Design sieht neben der Schriftgröße auch eine bestimmte Zeilenhöhe bzw. einen Zeilenabstand vor. Gibt es die Möglichkeit einen solchen in NAV zu definieren?

Grüße
Matthias

30. Juli 2008 13:18

Sprichst du von Forms oder Reports?

Du hast in beidem alle Möglichkeiten, indem du mit den Properties XPos, YPos, Width, Height jonglierst.
Dabei gilt 1000 = 1 cm, -> 1/100 mm genau!

30. Juli 2008 13:21

Ich spreche von Reports. Wenn ich per Hand mehrere Boxen untereinander setze kann ich denen natürlich eine genaue Position zu ordnen. Im Falle eines Zeilenumbruchs ist der Abstand zwischen den Zeilen leider ein anderer. Lässt sich dieser auch kontrollieren?

30. Juli 2008 13:27

Wie ich sagte: Alles lässt sich über diese Eigenschaften regeln. Du findest Width und Height auch in den Section-Eigenschaften.

30. Juli 2008 13:48

Ich glaube wir reden ein wenig aneinander vorbei.

Ich habe einen Report, in dem der Abstand zwischen den Text-Grundlinien 4mm ist. Entsprechend sind meine Textboxen 400 (Height) hoch und haben einen Abstand von ebenfalls 400 (Xpos_n = Xpos_(n-1) + 400). Geht ein Text durch MultiLine über mehrere Zeilen, so wird er, wenn die Textbox eine Höhe von 800 hat, nicht vollständig angezeigt. Folglich muss die Zeilenhöhe irgendwie darüber liegen und dafür habe ich auch keine Einstellungs-Möglichkeit gefunden.

30. Juli 2008 14:11

Ah, daher weht der Wind!
Wenn möglich, würde ich bei derart genauen Vorgaben auf die Textbox mit MultiLine verzichten. Du könntest statt dessen den Inhalt dieser Textbox in einen Array der Art Text umschreiben und dann Zeile für Zeile (in einer eigenen Section) den Arrayinhalt ausgeben lassen. Dann hättest du wieder alle gestalterischen Möglichkeiten.

30. Juli 2008 16:32

Wenn ich´s richtig verstehe, soll in den Textboxen kein Font Helvetica, und der Zeilenabstand bei gedruckten Listen ein anderer sein als es bei den Reports ist.

Den Zeichensatz in allen Textboxen zu tauschen, kriegt man ja recht gut über die txt-Versionen der Objekte hin. Aber den Zeilenabstand ändern ..?¿ Kann man da mit den Stylesheets etwas erreichen? :roll:

Re:

6. Mai 2009 15:50

Natalie hat geschrieben:Du könntest statt dessen den Inhalt dieser Textbox in einen Array der Art Text umschreiben und dann Zeile für Zeile (in einer eigenen Section) den Arrayinhalt ausgeben lassen. Dann hättest du wieder alle gestalterischen Möglichkeiten.


Hallo Nathalie,

ich weis das Thema ist schon eine Weile her aber ich habe genau das Gleiche Problem und krieg das einfach nicht umgesetzt. Könntest du mir vielleicht mit einem Codebeispiel weiterhelfen?

Re: Re:

6. Mai 2009 16:02

Benjamin Reichstein hat geschrieben:Hallo Nathalie,

ich weis das Thema ist schon eine Weile her aber ich habe genau das Gleiche Problem und krieg das einfach nicht umgesetzt. Könntest du mir vielleicht mit einem Codebeispiel weiterhelfen?


Willkommen im Forum!
Bin aber recht pingelig, was das überflüssige 'h' in meinem Namen angeht ;-)

Bitte der Vollständigkeit halber von vorn: Welche Anforderung hast du, was hast du probiert, was konntest du schon umsetzen?

Re: Zeilenhöhe

7. Mai 2009 11:08

Entschuldige bitte, Natalie. Ich kann das nachvollziehen, kann es auch nicht leiden wenn man meinen Spitznamen mit "i" schreibt.

Meine Problemstellung sieht folgendermassen aus:
Ich habe Artikelbezeichnungen in Rechnungspositionen die sich aus der Beschreibung 1 und Beschreibung 2 zusammensetzen. Diese schreibe ich mit STRSUBSTNO() in eine Textbox bei der Multiline = YES ist. Da nach rechts nicht genug Platz vorhanden ist, kann diese Bezeichnung also bis zu drei Zeilen groß werden.
Das Problem ist nun natürlich, dass ich immer zwei Leerzeilen zwischen Artikeln mit einzeiliger Bezeichnung habe. Sieht nicht wirklich schön aus und bei mehreren Artikeln kommt man so recht schnell auf zwei Seiten.

Ich habe erst versucht aus der einen Textbox drei zu machen, auf die Länge zu prüfen und die dann entsprechend ein oder auszublenden. Leider muss die Section natürlich trotzdem drei Zeilen hoch sein, deshalb ändert sich am Abstand nichts. Ausserdem hab ich das mit dem Trennen nicht wirklich hübsch hinbekommen.

Und jetzt habe ich deine Lösung gelesen und bin mir nicht genau sicher wie man das umsetzt. Meinst du, einfach drei Sections zu machen (für jede Zeile eine) und die dann entsprechend ein / ausblenden?
Und wie trenne ich die Beschreibung ordentlich, damit nicht Worte mittendrin abgeschnitten sind?
Bin leider noch ziemlicher Anfänger und die Logik von Navision ist nicht wirklich einfach nachzuvollziehen, wenn man von einer anderen Programmiersprache kommt.

Re: Zeilenhöhe

7. Mai 2009 11:51

Hi Benjamin,

wenn ich dein Problem richtig verstehe, dann geht es bei dir weniger um die Zeilenhöhe als viel mehr um die Sectionaufteilung. Obwohl es nicht so recht in dieses Topic gehört hier ein Ansatz für dich: Eigentlich gibt es zwei Möglichkeiten dein Problem zu lösen. Optimal sind leider beide nicht.

Möglichkeit 1: Du lässt mit einer Schleife einen "Zeiger" über deinen String laufen, und suchst von einer maximalen Zeilenlänge ausgehend das vorhergehende Leerzeichen. An der gefundenen Stelle teilst du deinen String. Die Teilstrings steckst du in ein Array und stellst diese jeweils in einer eigenen Section dar. Hierbei ist es möglich durch ein zusätzliches DataItem (Typ Integer) nur eine Section anzulegen.

Möglichkeit 2: In den meisten Fällen deutlich eleganter und in der Positionierung auch flexibler ist es mehrere Sections zu erstellen. In jeder Section ist der gleiche String zu sehen, aber die Boxen und damit die Sections haben unterschiedliche Höhe (einzeilig, zweizeilig, usw.). Mit CurrReport.SHOWOUTPUT((STRLEN(deinString) > 0) AND (STRLEN(deinString) <= 70)); kannst du dann kontrollieren welche der Sections gezeigt wird.

Beide Möglichkeiten sind deshalb nicht optimal, weil die optimale Auslastung einer Zeile bei den meisten Schriftarten nicht zeichengenau genannt werden kann. Es kann also sein, dass ein Umbruch erfolgt, obwohl das nächste Wort noch Platz hätte. Möglichkeit 1 ist zwar deutlich aufwendiger, verhindert aber zuverlässig das Anzeigen von Leerzeilen.

Grüße
Matthias

Re: Zeilenhöhe

7. Mai 2009 12:05

Benjamin Reichstein hat geschrieben:Ich habe Artikelbezeichnungen in Rechnungspositionen die sich aus der Beschreibung 1 und Beschreibung 2 zusammensetzen. Diese schreibe ich mit STRSUBSTNO() in eine Textbox bei der Multiline = YES ist.

Alternativ kannst du übrigens auch in die SourceExpr der Textbox schreiben:
Code:
Description + ' ' + "Description 2"


Da nach rechts nicht genug Platz vorhanden ist, kann diese Bezeichnung also bis zu drei Zeilen groß werden.
Das Problem ist nun natürlich, dass ich immer zwei Leerzeilen zwischen Artikeln mit einzeiliger Bezeichnung habe. Sieht nicht wirklich schön aus und bei mehreren Artikeln kommt man so recht schnell auf zwei Seiten.

Stimmt, bei Platzspargeboten ist MultiLine nicht geeignet.

Meinst du, einfach drei Sections zu machen (für jede Zeile eine) und die dann entsprechend ein / ausblenden?

So ist es.

Und wie trenne ich die Beschreibung ordentlich, damit nicht Worte mittendrin abgeschnitten sind?

Mir ist keine Möglichkeit bekannt, mit NAV-Boardmitteln das 100%ig rauszubekommen, wenn die Schriftart <> Courier ist.
Deswegen sieht die Lösung bei unseren Kunden meistens so aus:
  • Ist viel Platz nach rechts(was bei dir nicht der Fall ist), dann verwende ich nur eine Textbox an mit SourceExpr = Beschr1+Beschr2.
  • Ist der Platz voraussichtlich zu knapp, erstelle ich eine zweite Section, in der nur Beschreibung 2 gedruckt wird. Diese Section wird im Falle einer leeren Beschreibung 2 ausgeblendet.
Wenn der Platz nach rechts zum Andrucken des Inhalts nicht 100%ig ausreicht: Pech gehabt.
Wir hatten noch nie den Fall, dass nur EIN Beschreibungsteil auf mehrere Zeilen aufgeteilt werden musste.

Bin leider noch ziemlicher Anfänger und die Logik von Navision ist nicht wirklich einfach nachzuvollziehen, wenn man von einer anderen Programmiersprache kommt.
*nick* kenn ich, war bei mir genauso :-)

Re: Zeilenhöhe

8. Mai 2009 14:49

Vielen Dank schonmal für die Anregungen und Hilfestellungen, hat mir auf jeden Fall weitergeholfen.
Ich werde das in der nächsten Woche mal probieren.