nowaki
13th January 2011, 10:45
Hallo,

habe eine Query Abfrage (Artikel+Bezeichnung,..) erstellt.
Wie kann man beim Report die Leerzeichen entfernen

zb. tiitm001.item ist 16 Zeichen lang der Inhalt aber nur 10 der Rest wird mit Leerzeichen aufgefüllt!?

Wie kann man die Leerzeichen im Ausdruck als .csv oder ASCI entfernen?

Danke

erpengineer
13th January 2011, 14:32
Report:

strip$(shiftl$(tiitm001.item))

nowaki
13th January 2011, 14:47
hat leider nicht funktioniert - habe ein Bild hinzugefügt wie ich es eingetragen habe - vielleicht hätten sie noch eine Idee.

Ich danke im Voraus

erpengineer
13th January 2011, 14:53
OK ... kann nicht funktionieren:

Report:

FFFFFFFFFFFFFFFF;FFFFFFFFFFFFFFFFFFFFFFFFFFFF
16 Zeichen 30 Zeichen

Durch die obige Lösung werden nur Zeichen gekürzt, das eigentliche Problem aber nicht gelöst da die Feldpositionen im Report fix sind.

Folgende Lösung habe ich bisher verwendet:
Definition langer Textstring, manuelle Befüllung im Script.

FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
(domain z. b. tcmcst.str100)

Im Script oder Reportscript wird dieser einzelne String mit den gekürzten Daten und dem Trennzeichen ";" zusammengesetzt.

mystring = strip$(shiftl$(tiitm001.item)) & ";" & strip$(shiftl$(tiitm001.dsca)) & ";" ...

Vielleicht hat jemand anders eine bessere Lösung.

nowaki
13th January 2011, 15:00
wie müsste man das machen? Im Reportskript?

Hätten Sie ein Beispiel?

Danke

erpengineer
13th January 2011, 17:04
Ja, im Detaillayout des Reports und im Reportskript.

Report:

Beispiel:

detail.10
before.layout:

myString = strip$(shiftl$(tiitm001.item) & ";" & strip$(shiftl$(tiitm001.dsca)

Leider wird das immer überschrieben, wenn Sie das Querry neu erstellen lassen.

Wäre vielleicht besser hier eine Reportsession zu machen.

nowaki
14th January 2011, 07:41
Danke für die Antwort.

Leider bin ich da nicht so gut drauf.

Wie muss ich das genau machen?

In MaintainReports ?
Input Field Hinzufügen????
Im Layout - Detail1 welche Print Expresseion und welche Domian? ( tcmcst.str100 funktioniert bei mir nicht!?)

mystring ? Wo? Was ist damit gekennzeichnet?


Ich danke im Voraus

erpengineer
14th January 2011, 09:50
(1) Display Domains:
Domain raussuchen, die lange genug für den zusammengefügten String ist, das kann z. B. tcmcs.str<Zahl> oder tcmcs.st<Zahl> sein, konkret:
tcmcs.str100 oder tcmcs.st100 oder tcmcs.str70 (einfach nach geeigneter Länge suchen, hängt davon ab was auf dem System verfügbar ist).

(2) Im Querry verwalten den Reportnamen notieren, je nachdem wo der Querry entwickelt wurde z. B. Paket tc oder td ist der Name z. B. tcsql<Reportnummer>.

(3) Maintain Reports:
Report suchen
Die Variable für den langen Zeichstring entweder in Inputfields oder im Reportscript definieren.
Beispiel für Inputfield:
myfield domain: tcmcs.str70
(myfield ist ein beliebiger Variablenname)

Die Tabellenfelder aus dem Querry sollten schon automatisch als Inputfields eingetragen sein.

(4) Edit Report Layout z. B. Detail.1:
Hier müssen jetzt alle Tabellenfelder gelöscht werden, und das Feld "myfield" mit der domain z. B. tcmcs.str70 oder tcmcs.st70 eingefügt werden:
Sieht dann im Report so aus:
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

(5) Edit Report Script:
Im Reportscript die folgenden Änderungen machen:

detail.1:
before.layout:
mystring = strip$(shiftl$(tiitm001.item)) & ";" & strip$(shiftl$(tiitm001.dsca))

Hinweis: Die Nummer nach "Detail." muß mit der Detailnummer in den Reportlayouts übereinstimmen. Das ist entweder 1 oder 10 wenn der Report automatisch generiert wurde.

Beispiel für die Reportausgabe:
Daten:
Artikel: "4711 "
Artikelbezeichnung: "Testartikel "

Sollte im Report das folgende ergeben:

4711;Testartikel

(d.h. es sind jetzt keine Leerzeichen zwischen dem Feldtrennzeichen in Excel sollte die csv Datei sofort richtig formatiert in Spalten unterteilt erscheinen.)

Bei den Querries muß man beachten, daß alle manuellen Reportänderungen durch den Button "Bericht erstellen" wieder überschrieben werden.

nowaki
14th January 2011, 13:04
Vielen Dank für Ihre Hilfe !

Jetzt hab ich es geschafft

nowaki
17th January 2011, 12:59
Hallo,

wenn ich "enum" Feld verwenden möchte wie funktioniert das dann?
können auch hier die Leerzeichen entfernt werden?

Danke

erpengineer
17th January 2011, 15:32
Bitte Beispiel posten.

bdittmar
17th January 2011, 20:40
Hallo,

wenn ich "enum" Feld verwenden möchte wie funktioniert das dann?
können auch hier die Leerzeichen entfernt werden?

Danke

Hallo,

die enum.description lesen mit:

enum.descr$()

--------------------------------------------------------------------------------

Syntax
string enum.descr$(string domain_code(12), enum_expr
[, string language_code ] )

Description
This returns the description associated with a specific value in an enumerated domain.

Arguments
domain_code
The name of the domain. The domain must be of type enumerated.

enum_expr
One of the possible values of the enumerated domain.

language_code
To retrieve the description in a language other than the user language, specify the relevant language code in this argument. This is an optional argument. The default language is the language of the user.

Note that the language code of the user is available in the predefined, read-only variable language$.


Return values
The description of the specified enumerate value, either in the current user language or in another specified language.

The function returns an empty string, and displays an error message, if an unknown domain is specified or if no description exists in the data dictionary for the specified language.

Context
Bshell function.

Example
This example assumes an enumerated domain 'tcyesno' with two possible constants: 'tcyesno.yes' and 'tcyesno.no'. It also assumes that 1 is the language code for Dutch, 2 is the language code for English, and 3 is the language code for German. English is the current user language.

domain tcyesno active | enumerated domain
string descr(25)

active = tcyesno.no
descr = enum.descr$("tcyesno", active, "1") | descr contains "nee"
descr = enum.descr$("tcyesno", active) | descr contains "no"
descr = enum.descr$("tcyesno", active, "3") | descr contains "nein"

Regards

nowaki
18th January 2011, 09:51
Beispiel:
tiitm001.kitm

wie würde das bei "Long" und "Double" Felder funktionieren?
zb. tiitm001.oltm und tiitm001.pris

Danke

bdittmar
18th January 2011, 11:26
Beispiel:
tiitm001.kitm

wie würde das bei "Long" und "Double" Felder funktionieren?
zb. tiitm001.oltm und tiitm001.pris

Danke

Hallo,

mit strip$(str$()) sollte das funktionieren.

BaanERP Programmers Guide


str$()

--------------------------------------------------------------------------------

Syntax
string str$( num_expr )

Description
This converts an integer or floating point expression to a string.

Bzw.:

BaanERP Programmers Guide


shiftc$(), shiftl$(), shiftr$()

--------------------------------------------------------------------------------

Syntax
string shiftc$( string strg(.) )
string shiftl$( string strg(.) )
string shiftr$( string strg(.) )

Description
These return the specified string with certain adjustments.

shiftc$() centers the string by equaling the number of leading and trailing spaces. If there is an odd number of spaces, the extra space becomes a trailing space. The returned string always has the same length as the input string.

shiftl$() removes any leading spaces from the input string.

shiftr$() moves the contents of the input string to the right, if there are trailing spaces. The length of the result is always the same as the length of the input string (this is not necessarily the declaration length).

Note
These functions do not change the input string.

Context
Bshell functions.

Example
shiftc$(" ABC ") | result " ABC "
shiftl$(" ABC ") | result "ABC "
shiftr$(" ABC ") | result " ABC"



-------------------------------

Also:
1.) Long oder Double mit str$(FELD) in einen String umwandeln und danach mit strip$() oder shiftl$() / shiftr$() die Leerzeichen entfernen.
In diesem Fall werden wohl fuehrende Leerzeichen auftauchen:

shiftl$(str$(FELD)) entfernt Leerzeichen vor dem umgewandelten Wert.

MFG

nowaki
20th January 2011, 16:10
Hallo,

danke für die rasche Hilfe!

Gibt es eine möglichkeit Texte (zb.Artikeltext, VK-Text usw.)
zu drucken nach Excel auch wenn sie Mehrzeilig sind?

zb. Text in Baan
Artikeltextzeile 1
Artikeltextzeile 2

Artikeltextzeile 3


sollte in Excel zB. so ausschauen
Artikeltextzeile 1# Artikeltextzeile 2# Artikeltextzeile 3

oder
Artikeltextzeile 1; Artikeltextzeile 2; Artikeltextzeile 3


Danke

bdittmar
20th January 2011, 17:29
Hallo,

danke für die rasche Hilfe!

Gibt es eine möglichkeit Texte (zb.Artikeltext, VK-Text usw.)
zu drucken nach Excel auch wenn sie Mehrzeilig sind?

zb. Text in Baan
Artikeltextzeile 1
Artikeltextzeile 2

Artikeltextzeile 3


sollte in Excel zB. so ausschauen
Artikeltextzeile 1# Artikeltextzeile 2# Artikeltextzeile 3

oder
Artikeltextzeile 1; Artikeltextzeile 2; Artikeltextzeile 3


Danke

Hallo,

ja das ist machbar, aber ein bischen aufwendiger, da mit text.to.buf() gelesen werden muss.

Bsp.:

function read.reason.text()
{

|BD20070126 Text aus dhsma062.txtv

ursache1 = ""
string utext(500)
string ubuf(80,40)
long u
string u1(80)
string u2(80)
long line

utext = ""

for u = 1 to
text.to.buf("dhsma062.txtv", "3" , 2, ubuf)
utext = strip$(utext)&" "&strip$(ubuf(1,u))
endfor

ursache1 = utext
}

Obiges Bsp. liest die 1. und 2. Zeile (Mehr war nicht notwendig).
Ansonsten als 3. Parameter Anzahl der gewuenschten Zeilen mitgeben und dann als String wieder neu zusammenbauen (macht utext=.......).

mfg

BD

nowaki
21st January 2011, 08:21
Guten Morgen,

wäre es möglich das sie mir ein Bsp. Script zeigen?
muss das Imput Field bei Texten geäandert werden? (tcmcs.st50)??

danke

bdittmar
21st January 2011, 09:35
Guten Morgen,

wäre es möglich das sie mir ein Bsp. Script zeigen?
muss das Imput Field bei Texten geäandert werden? (tcmcs.st50)??

danke

Hallo,
wie ich aus der urspruenglichen Fragestellung sehe, wird der Ausgabestring im Report gebildet.
Hier ist bei 255 Zeichen Schluss.

Laengere CSV's sollte man mit seq.x Funktionen direkt in eine Datei schreiben.
Dann kann man z.B. 1200 Zeichen pro Zeile realisieren.

Das Input Feld muss so gross sein, dass alle erforderlichen Zeichen beim Concat der Felder aufgenommen werden koennen.
Bei Texten ist das problematisch, da in der Regel vorher nicht bekannt ist, wie lange der resultierende String wird.

mfg

BD

nowaki
21st January 2011, 09:51
Wie würde das funktionieren direkt in Datei???

Die Texte die ich habe hätten Platz da sie nicht so lang sind?
Könnten Sie mir bitte ein Bsp. für den Report Script geben?

Das enum Feld habe ich leider auch noch nicht geschafft!?
wie kann ich das tiitm001.kitm einfügen?
enum.descr$(tiitm001.kitm) funktioniert nicht --> Fehler enum sould be String?

Danke

bdittmar
21st January 2011, 13:02
Wie würde das funktionieren direkt in Datei???

Die Texte die ich habe hätten Platz da sie nicht so lang sind?
Könnten Sie mir bitte ein Bsp. für den Report Script geben?

Das enum Feld habe ich leider auch noch nicht geschafft!?
wie kann ich das tiitm001.kitm einfügen?
enum.descr$(tiitm001.kitm) funktioniert nicht --> Fehler enum sould be String?

Danke

Hallo,
BSP::

extern domain tcmcs.str30 berechnungd

berechnungd = enum.descr$("dhsma.cstt", dhsma050.cstt,"3")

enum.descr$ erwartet 3 parameter:
1. ENUM domain
2. ENUM Feld
3. Sprache

Die ENUM.DSCR in eine Stringvariable ueberfuehren !

Fuer tiitm001.kitm:

extern domain tcmcs.str30 item.kitm

item.kitm = enum.descr$("tckitm", tiitm001.kitm,"3")

Evtl. reicht auch ein 15er String fuer tckitm.

mfg BD

nowaki
21st January 2011, 13:44
Hallo,

könnten sie mir so ein Bsp. auch mit dem Text feld geben?

Danke

jp.aalders
21st January 2011, 13:56
Hallo Nowaki,

Du brauchst erst die Umschreibung von das Enum Feld aus zu Fragen;

domain tcyesno active | enumerated domain
string descr(25)

active = tcyesno.no
descr = enum.descr$("tcyesno", active, "1") | descr contains "nee"
descr = enum.descr$("tcyesno", active) | descr contains "no"
descr = enum.descr$("tcyesno", active, "3") | descr contains "nein"

Nachher kannst du die shiftl$ und strip$ gebrauchen.

Viel erfolg

JP - Niederlande

bdittmar
21st January 2011, 18:07
Hallo,

könnten sie mir so ein Bsp. auch mit dem Text feld geben?

Danke

Hallo,

Nur Bsp.:!!

declaration:

# include <bic_text>
table ttttxt010
extern domain tctxtn artikel.textnummer
extern domain tcmcs.s132 artikel.text
string modifizierter.artikeltext(100)

Im entsprechenden Layoutbereich (Da, wo der Artikel als Variable verfuegbar ist) den Text zu Artikel lesen und aufbereiten (z.B. im detail.1).

detail.1:
before.layout:

read.itemtext()

function read.itemtext()
{
select tiitm001.txta
from tiitm001
where tiitm001._index1 = {:tiitm001.item}
selectdo
artikel.textnummer = tiitm001.txta
read-itemtext()
endselect
}

function read.itemtext()
{
modifizierter.artikeltext = ""
string itext(100)
string ibuf(80,40)
long i

itext = ""
for i = 1 to
text.to.buf("tiitm001.txta", "3", 5, ibuf)
itext = strip$(itext)&strip$(ibuf(1,i))
endfor

modifizierter.artikeltext = itext
}

Hinweis:
Texte koennen ";" enthalten, daher werden beim reinen CSV Import in Excel die Felder verschoben.
Besser ist hier ein Trennzeichen wie "|" zu verwenden.

MFG BD

nowaki
24th January 2011, 08:58
Hallo,

Text Bsp.
funktioniert nicht !?
Beim Compile bekomme ich :
Erro: "include" not expected
Fatal Error: Funkction within function "r.s.detail.1.bef.lay" not expected.

Hätte jemand bitte ein bsp. wo man die Text von K-Artikeländerungen verwalten als .csv exporteir? ( tiedm1101m000)?

Danke

jp.aalders
24th January 2011, 10:01
Morgen Nowaki,

Has du die include #include <bic_text> bei de Declaration aufgenommen? Ein .csv. export kann mann einfach bauen durch als Separator ein ";" zwischen die Feldern zu verwalten.

ZB:

<string> =

tiitm001.item & ";" &
tiitm001.dsca & ";" &
tiitm001.citg

Gr.

JP

nowaki
24th January 2011, 10:12
Hallo,

hab es so übernommen

Nur Bsp.:!!

declaration:

# include <bic_text>
table ttttxt010
extern domain tctxtn artikel.textnummer
extern domain tcmcs.s132 artikel.text
string modifizierter.artikeltext(100)

Im entsprechenden Layoutbereich (Da, wo der Artikel als Variable verfuegbar ist) den Text zu Artikel lesen und aufbereiten (z.B. im detail.1).

detail.1:
before.layout:

read.itemtext()

function read.itemtext()
{
select tiitm001.txta
from tiitm001
where tiitm001._index1 = {:tiitm001.item}
selectdo
artikel.textnummer = tiitm001.txta
read-itemtext()
endselect
}

function read.itemtext()
{
modifizierter.artikeltext = ""
string itext(100)
string ibuf(80,40)
long i

itext = ""
for i = 1 to
text.to.buf("tiitm001.txta", "3", 5, ibuf)
itext = strip$(itext)&strip$(ibuf(1,i))
endfor

modifizierter.artikeltext = itext
}

jp.aalders
24th January 2011, 10:58
for i = 1 to ????

Fehlt hier nichts?

nowaki
24th January 2011, 11:23
was fehlt?

nowaki
24th January 2011, 15:09
Bekomm das leider nicht hin mit den Texten !?

Hat noch jemand eine Idee wie das funktionieren könnte?

Danke

bdittmar
24th January 2011, 20:27
Hallo,

hab es so übernommen

Nur Bsp.:!!

declaration:

# include <bic_text>
table ttttxt010
extern domain tctxtn artikel.textnummer
extern domain tcmcs.s132 artikel.text
string modifizierter.artikeltext(100)

Im entsprechenden Layoutbereich (Da, wo der Artikel als Variable verfuegbar ist) den Text zu Artikel lesen und aufbereiten (z.B. im detail.1).

detail.1:
before.layout:

read.itemtext()

function read.itemtext()
{
select tiitm001.txta
from tiitm001
where tiitm001._index1 = {:tiitm001.item}
selectdo
artikel.textnummer = tiitm001.txta
read.itemtext()
endselect
}

function read.itemtext()
{
modifizierter.artikeltext = ""
string itext(100)
string ibuf(80,40)
long i

itext = ""
for i = 1 to
text.to.buf("tiitm001.txta", "3", 5, ibuf)
itext = strip$(itext)&strip$(ibuf(1,i))
endfor

modifizierter.artikeltext = itext
}

TYPO:
Statt: read-itemtext() read.itemtext()

mfg BD

bdittmar
24th January 2011, 20:33
for i = 1 to ????

Fehlt hier nichts?

Hallo,

Original aus einem meiner UserExits in LN:

Aufbereiten eines Artikeltextes !

function read.sp.item.text()
{
sp.text.file = ""
spstr1 = ""
spstr2 = ""
spstr3 = ""
spstr4 = ""
spstr5 = ""

string sptext(200)
string spbuf(80,40)
long s
long sccsp

sptext = ""

for s = 1 to
text.to.buf("tcibd001.txta", "3", 1, spbuf)
sptext = strip$(sptext)&strip$(spbuf(1,s))
endfor

sp.text.file = sptext

sccsp = string.scan(sp.text.file,"%s|%s|%s|%s|%s", spstr1, spstr2, spstr3, spstr4, spstr5)

}

Liest Zeile 1 des Artikeltextes "abc|cde|efg|hij|klm" in Deutsch und bildet 5 variablen mit string.scan die mit seq.puts in ein ASCII File fuer eine staging area geschrieben werden.

mfg BD

nowaki
25th January 2011, 10:49
Leider Nein.

Ich schaffe es einfach nicht in BaanIV zB einen Artikeltext in einen Query Report in eine Zeile zu drucken

Hat jemand ein Bsp. das ich 1:1 übernehmen kann?

danke

bdittmar
25th January 2011, 17:04
Leider Nein.

Ich schaffe es einfach nicht in BaanIV zB einen Artikeltext in einen Query Report in eine Zeile zu drucken

Hat jemand ein Bsp. das ich 1:1 übernehmen kann?

danke

Hallo,
das Forum kann aber nicht die Entwicklungsarbeit und fertige Loesungen leisten.
Bei Problemen hilft das Forum gerne.

mfg BD