Unicode Anpassung

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 (ForumUser / 97 / 10 / 1 ) » 25. Mär 2019 09:42

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?


Re: Unicode Anpassung

Beitrag von a-dead-trousers (Top Expert / 3199 / 81 / 792 ) » 25. Mär 2019 11:01

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.07
Basis: 7.40

Re: Unicode Anpassung

Beitrag von L0w-RiDer (ForumUser / 97 / 10 / 1 ) » 25. Mär 2019 11:42

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 / 3199 / 81 / 792 ) » 25. Mär 2019 12:31

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.07
Basis: 7.40

Re: Unicode Anpassung

Beitrag von L0w-RiDer (ForumUser / 97 / 10 / 1 ) » 25. Mär 2019 13:30

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 (ForumUser / 97 / 10 / 1 ) » 25. Mär 2019 13:34

Falls jemand eine gute Alternative kennt, wäre ich dafür natürlich auch dankbar :)

Re: Unicode Anpassung

Beitrag von wreichelt (Expert / 687 / 16 / 118 ) » 25. Mär 2019 13:55

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 / 3199 / 81 / 792 ) » 25. Mär 2019 13:56

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.07
Basis: 7.40

Re: Unicode Anpassung

Beitrag von A6272 (Specialist / 114 / 1 / 9 ) » 25. Mär 2019 14:09

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 (ForumUser / 97 / 10 / 1 ) » 25. Mär 2019 15:12

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 (ForumUser / 97 / 10 / 1 ) » 25. Mär 2019 16:05

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 / 3199 / 81 / 792 ) » 26. Mär 2019 07:39

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.07
Basis: 7.40

Re: Unicode Anpassung

Beitrag von L0w-RiDer (ForumUser / 97 / 10 / 1 ) » 26. Mär 2019 08:50

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 / 3917 / 159 / 348 ) » 26. Mär 2019 09:28

Probiere mal CL_ABAP_CONTAINER_UTILITIES=>READ_CONTAINER_C

Re: Unicode Anpassung

Beitrag von L0w-RiDer (ForumUser / 97 / 10 / 1 ) » 26. Mär 2019 09:35

Hi,

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

Seite 1 von 2 (current) Nächste

Aktuelle Forenbeiträge

Kreditlimitprüfung Obligo
vor 2 Tagen von wreichelt 2 / 89
Business Partner Konzept
vor 2 Tagen von SAP_ENTWICKLER 1 / 135
Fortführen der Schleife
vor 2 Tagen von ichse18577 2 / 119
Verursachervormerkung OCM manuell anlegen
vor 3 Tagen von Aba 1 / 98

Unbeantwortete Forenbeiträge

Business Partner Konzept
vor 2 Tagen von SAP_ENTWICKLER 1 / 135
Verursachervormerkung OCM manuell anlegen
vor 3 Tagen von Aba 1 / 98
Auflösen MILL_OC - Auftragszusammenfassung
vor einer Woche von tofralu 1 / 97
Löschen von archivierten Drucklisten
vor einer Woche von Asaph 1 / 87