Unicode Anpassung

Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Getting started ... Alles für einen gelungenen Start.
23 Beiträge • Seite 1 von 2 (current) Nächste
23 Beiträge Seite 1 von 2 (current) Nächste

Unicode Anpassung

Beitrag von L0w-RiDer (Expert / 535 / 83 / 2 ) »
Hallo,

ich bin gerade dabei Programme Unicodefähig zu machen. Dabei soll nun ein String in eine Struktur geschrieben werden. Es tritt nun folgende Fehlermeldung auf: "<FS_FKKDEVREF>" und "SDATA" sind in einem Unicode-Programm nicht ineinander konvertierbar. So nun gehe ich wie folgt vor, ich habe mich hier an dem Beispielcoding von dieser Seite orientiert: http://www.4ap.de/abap/syntax/unicode-umstellung. Hier heißt es ja bei meinem Fall man soll wie folgt vorgehen :

Code: Alles auswählen.

Die Umwandlung eines Strings in eine Struktur kommt z.B. auch oft bei der IDOC-Verarbeitung vor. Dort liegen die Daten in einem DATA-Feld mit üblicherweise 2000 Character-Länge. Die ersten 18 Char die MATNR, dann 4 Char für die VKORG usw. Wenn jetzt nicht nur Characterfelder in der Struktur enthalten sind funktioniert ein einfacher MOVE unter Unicode nicht mehr.

 **    MOVE i_zsctapos-data TO i_strudv09.
*     In Unicode muss gecasted werden
       FIELD-SYMBOLS: <zppstdv09> TYPE zppstdv09.
       ASSIGN i_zsctapos-data TO <zppstdv09> CASTING.
       i_strudv09 = <zppstdv09>.


Wenn ich so vorgehe, bekomme ich immer einen Kurzdump mit folgender Fehlermeldung:
"Datenobjekte in Unicode-Programmen nicht konvertierbar."

Mit Unicode kann ja kein String in eine Struktur geschrieben werden, wenn diese auch Felder hat die keine Char-Felder sind.

Was mache ich falsch?
Kennt jemand eine andere Möglichkeit?

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Re: Unicode Anpassung

Beitrag von a-dead-trousers (Top Expert / 4271 / 213 / 1140 ) »
Ich würde eine Struktur anlegen, die nur zeichenartige Felder besitzt und deren Namen der Zielstruktur entsprechen.

Code: Alles auswählen.

neue_Struktur = String.
move-corresponding neue_Struktur into alte_Struktur.
Bei den Feldlängen musst du halt aufpassen. Ein "normaler" Integer wäre z.B. NUMC Länge 10.
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: Unicode Anpassung

Beitrag von L0w-RiDer (Expert / 535 / 83 / 2 ) »
hmm das Problem ist, dass es bei mehreren Programmen angepasst werden muss und nochmal ein Strukturtyp mit 30 Felder oder mehr unschön wäre. Sollte das nicht normalerweise mit assign und casting funktionieren?

Re: Unicode Anpassung

Beitrag von a-dead-trousers (Top Expert / 4271 / 213 / 1140 ) »
Nicht über diesen Weg.
Du müsstest je Feld in der Zielstruktur das ASSIGN/CASTING machen und dann den entsprechenden Abschnitt aus dem String zuweisen.
Mit einer kopierten Struktur (über das DDIC geht das ja leicht) und Austauschen der Datenelemente bist du IMHO schneller und sicherer unterwegs.

EDIT:
Du könntest dir eventuell über RTTI/RTTC einen Strukturtyp für die Konvertierung zur Laufzeit zusammenbauen. Aber lesbar und nachvollziehbar ist was anderes.

EDIT2:
Nach längerem Überlegen, glaub ich, ich weiß wo dein Problem liegt. In dem Link wird IDOC mit einem Datenfeld von 2000 Zeichen erwähnt und du möchtest einen String umwandeln.
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: Unicode Anpassung

Beitrag von L0w-RiDer (Expert / 535 / 83 / 2 ) »
genau es ist wie du schreibst bei EDIT 2.

Ich habe einen String (Variable) die z.B. als String oder Long-String deklariert ist und möchte nun diesen in eine Struktur schreiben (moven). Diese Strukur hat nun Felder, die auch z.B. Numeric oder Packed usw. sind. Dies geht nun seit Unicode ja leider nicht mehr. Ich hätte es nun auch soweit hinbekommen. Bis auf das Feld bei Packed.

Bei Packed gibt es mir den Hexadezimalen Wert.

Code: Alles auswählen.


Types: Begin of ty_struc,
                    Feld1 type c lenght 12,
                    Feld2 type p (15),
                    Feld3   type p(12),
                    Feld4   type d(5),
                    Feld5   type n(10),
          end of ty_struc.

data: ls_struc type ty_struc,
         Var1    type lchr length 1000.

Var1 = '1232141231241355hddfze5tdhfdhdvb'.

FIELD-SYMBOLS: <fs_struc> type ty_struc.
ASSIGN Var1 to <fs_struc> CASTING.
ls_struc = <fs_struc>. 

" ls_struc = Var1 <--------- Dies ist ja nicht mehr möglich, wegen Unicode. 


Re: Unicode Anpassung

Beitrag von L0w-RiDer (Expert / 535 / 83 / 2 ) »
Falls jemand eine gute Alternative kennt, wäre ich dafür natürlich auch dankbar :)

Re: Unicode Anpassung

Beitrag von wreichelt (Top Expert / 1031 / 29 / 188 ) »
Hallo,

ein gepacktes Feld kann mittels Write...to...exponent 0 in ein Char-Feld geschrieben werden.

Gruß Wolfgang

Re: Unicode Anpassung

Beitrag von a-dead-trousers (Top Expert / 4271 / 213 / 1140 ) »
wreichelt hat geschrieben:ein gepacktes Feld kann mittels Write...to...exponent 0 in ein Char-Feld geschrieben werden.
L0w-RiDer braucht es aber in die entgegengesetzte Richtung.
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: Unicode Anpassung

Beitrag von A6272 (Specialist / 231 / 6 / 36 ) »
Hallo,

Die Daten einer IDOC Zeile haben doch eine definierte Struktur, abhängig vom Segment. Wenn die Zielvariable entsprechend dem Segment aus der IDOc Struktur definiert ist, gibt es keine Probleme.

DATA: ls_idoc_data TYPE edidd,
ls_nad_7 TYPE /idexge/e1vdewnad_7, (ist eine Struktur, bei der alle Felder vom Typ CHAR sind)

LOOP AT it_idoc_data INTO ls_idoc_data.
CASE ls_idoc_data-segnam.
WHEN lc_seg_nad_7
ls_nad_7 = ls_idoc_data-sdata.

Re: Unicode Anpassung

Beitrag von L0w-RiDer (Expert / 535 / 83 / 2 ) »
siehe Bild:

bei Datentyp Currency ( oder Packed) schreibt er mir den Hexadezimalen Wert rein. Wie kann ich so etwas vermeiden?

Vielen Dank im Voraus.

Re: Unicode Anpassung

Beitrag von L0w-RiDer (Expert / 535 / 83 / 2 ) »
Alternative gefragt:

Ich habe nun eine Struktur in der nun auch in gewissen Feldern Hexadezimale Werte vorkommen. Könnte ich z.B. drüber loopen oder mit READ oder ähnliches abfragen ob darin das Feld z.B. Packed ist und es dann umwandeln lassen vom Hexadezimalen Wert in den Ursprungswert. Ist sowas in der Richtung möglich?

Re: Unicode Anpassung

Beitrag von a-dead-trousers (Top Expert / 4271 / 213 / 1140 ) »
L0w-RiDer hat geschrieben:Alternative gefragt:

Ich habe nun eine Struktur in der nun auch in gewissen Feldern Hexadezimale Werte vorkommen. Könnte ich z.B. drüber loopen oder mit READ oder ähnliches abfragen ob darin das Feld z.B. Packed ist und es dann umwandeln lassen vom Hexadezimalen Wert in den Ursprungswert. Ist sowas in der Richtung möglich?
RTTI bzw. CL_ABAP_TYPEDESCR und die zugehörigen Subklassen.
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: Unicode Anpassung

Beitrag von L0w-RiDer (Expert / 535 / 83 / 2 ) »
hmm okay, vielen Dank soweit. Ich bräuchte da glaube ich nun doch etwas Hilfe.

Ich habe mir nun diese Klasse Subklasse mit der folgenden Methode rausgesucht.

CL_ABAP_DATADESCR=>DESCRIBE_BY_DATA.

Soweit richtig?

Nun loope ich drüber und greife auf die einzelnen Felder zu:

Code: Alles auswählen.

loop at lt_fkkdefrev assigning <fs_fkkdefrev>.
    check sy-tabix <> 1.
    clear sy-subrc.
        while sy-subrc = 0.
            assign component sy-index of structure <fs_fkkdefrev> to field-symbol(<ld_feld>).
            check sy-subrc = 0.
            CL_ABAP_DATADESCR=>DESCRIBE_BY_DATA(<ld_feld>)

        ENDWHILE.
endloop.

Wie kann ich nun den Datentyp rausfinden ( ob es z.B. p ist) und dann die Hexadezimalen Werte umwandeln?

Vielen Dank.

Re: Unicode Anpassung

Beitrag von ewx (Top Expert / 4784 / 294 / 628 ) »
Probiere mal CL_ABAP_CONTAINER_UTILITIES=>READ_CONTAINER_C

Re: Unicode Anpassung

Beitrag von L0w-RiDer (Expert / 535 / 83 / 2 ) »
Hi,

könntest du mir vielleicht ein Beispiel auf der Basis von meinem Code oben geben???
Irgendwie funktioniert das bei mir nicht so ganz :(

Vergleichbare Themen

0
Antw.
2146
Views
Unicode-Strings via ABAP-OLE2 to EXCEL (NON-Unicode-SAP-Sys)
von fritz_herma » 15.03.2007 14:17 • Verfasst in ABAP® Core
0
Antw.
1073
Views
Anpassung Profilvergleich
von KlausB » 09.06.2006 09:59 • Verfasst in Human Resources
0
Antw.
719
Views
Anpassung Ausgabestruktur
von Gottschall » 26.04.2017 10:27 • Verfasst in ABAP® für Anfänger
0
Antw.
1081
Views
Anpassung Wertehilfe
von Amja92 » 29.01.2017 14:52 • Verfasst in ABAP® für Anfänger
0
Antw.
784
Views
Anpassung der Fehlerausgabe?
von hmaxi96 » 26.01.2016 10:35 • Verfasst in ABAP® für Anfänger

Über diesen Beitrag



Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Aktuelle Forenbeiträge

Zwischensumme Adobe Forms
vor 3 Tagen von Lucyalison 1 / 64
Interne Tabelle
vor 5 Tagen von black_adept 2 / 133
MaLo-Checker in ABAP
vor einer Woche von A6272 6 / 254

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.

Aktuelle Forenbeiträge

Zwischensumme Adobe Forms
vor 3 Tagen von Lucyalison 1 / 64
Interne Tabelle
vor 5 Tagen von black_adept 2 / 133
MaLo-Checker in ABAP
vor einer Woche von A6272 6 / 254

Unbeantwortete Forenbeiträge

Zwischensumme Adobe Forms
vor 3 Tagen von Lucyalison 1 / 64
Group Items auf einer Filterbar
vor einer Woche von Bright4.5 1 / 107
tRFC Transaktionen SM58
vor 4 Wochen von A6272 1 / 140