Umstellung Unicode - Zuweisung gepackter Felder

Getting started ... Alles für einen gelungenen Start.
9 Beiträge • Seite 1 von 1
9 Beiträge Seite 1 von 1

Umstellung Unicode - Zuweisung gepackter Felder

Beitrag von gutzeli (ForumUser / 5 / 0 / 0 ) »
Hallo zusammen,

wir sind gerade dabei unsere Programme auf Unicode umzustellen.
Dabei haben wir Probleme, wenn Strukturen in denen gepackte Felder enthalten sind, einem String-Feld zugewiesen werden - am Ende kommt ein verstrubbelter Wert heraus (nicht identisch mit dem Wert auf einem non unicode System).


anbei die relevante Codestelle:

Code: Alles auswählen.

TYPES:  BEGIN OF ergebnis_string,
          string(400) TYPE c, "Inhalt
        END OF ergebnis_string,
        BEGIN OF initial_structur,
          zahl(4),
          anzhl TYPE p DECIMALS 2,
        END OF initial_structur.

DATA: it_erg TYPE STANDARD TABLE OF ergebnis_string,
     wa_erg LIKE LINE OF it_erg.

DATA: it_import TYPE initial_structur.

FIELD-SYMBOLS <gv_import> LIKE it_import.


it_import-zahl = '0100'.
it_import-anzhl =  '1.00'.

ASSIGN wa_erg TO <gv_import> CASTING.
<gv_import> = it_import.


APPEND wa_erg TO it_erg.
Hat jemand eine Idee, was hier der Fehler ist.

Danke im Vorraus

Grüße Gutzeli

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


Re: Umstellung Unicode - Zuweisung gepackter Felder

Beitrag von a-dead-trousers (Top Expert / 4395 / 223 / 1182 ) »
hi!

Ich nehme mal an der Wert wird im Ergebnis als E-Zahl dargestellt oder?
Versuch mal das Übertragen von dem betroffenen Feld über einen Write-Befehl zu erledigen.
Alternativ kannst du auch die Klasse CL_ABAP_CONV_OBJ ausprobieren.

lg ADT
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: Umstellung Unicode - Zuweisung gepackter Felder

Beitrag von gutzeli (ForumUser / 5 / 0 / 0 ) »
Hi ADT,

danke für den Hinweis.
Habe es mit der Klasse probiert - leider sieht das Ergebnis immer noch wie gewollt aus.
In einem NON-Unicode System hat die Variable wa_erg folgende Hex-Code:
30313030000000000000100C

In einem Unicode System ist sie mit folgendem Wert belegt:
3000310030003000000000000000100C

Grüße
gutzeli

Re: Umstellung Unicode - Zuweisung gepackter Felder

Beitrag von black_adept (Top Expert / 4089 / 127 / 940 ) »
Hallo gutzeli,

das ist doch alles ganz normal was du da hast. Deine Struktur besteht aus 2 Teilen - einem CHAR-Teil und einem Zahlteil. Der Char-Teil wird jetzt in Unicode dargestellt, der Rest genau wie gehabt.

Code: Alles auswählen.

30313030000000000000100C         = 30   31   30   30   000000000000100C = "0" "1" "0" "0" zahl  Chars in non-unicode
3000310030003000000000000000100C = 3000 3100 3000 3000 000000000000100C = "0" "1" "0" "0" zahl  Chars in unicode
Wo ist denn da jetzt das Problem?
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Umstellung Unicode - Zuweisung gepackter Felder

Beitrag von gutzeli (ForumUser / 5 / 0 / 0 ) »
Hallo black_adept,

das Problem ist, dass die Daten (it_erg) per RFC an ein anderes SAP System (non-unicode) übergeben werden und dieses mit dem aktuellen Format nichts anfangen kann. Bei einer anderen Schnittstelle gerneriern wir ein Flatfile, welches wiederum von einem non-unicode SAP System gelesen wird - auch hier haben wir das Problem.
Gibt es eine Möglichkeit die Daten wieder in das non-unicode Format zu wandeln?

Grüße gutzeli

Re: Umstellung Unicode - Zuweisung gepackter Felder

Beitrag von black_adept (Top Expert / 4089 / 127 / 940 ) »
Ach so - du willst von und nach Unicode konvertieren. Leider habe ich hier nur ein non-Unicodesystem mit dem ich dir ein Beispiel geben kann wie man damit unicode-Streams erzeugt. Der umgekehrte Weg müsste aber analog gehen.


Konvertierung aus non-Unicode-system: Ausgabe in non-unicode, Unicode little endian und Unicode big endian

Code: Alles auswählen.

REPORT.
TYPES:  BEGIN OF ergebnis_string,
          string(400) TYPE c, "Inhalt
        END OF ergebnis_string,
        BEGIN OF initial_structur,
          zahl(4),
          anzhl TYPE p DECIMALS 2,
        END OF initial_structur.

DATA: it_erg TYPE STANDARD TABLE OF ergebnis_string,
      wa_erg LIKE LINE OF it_erg.

DATA: it_import TYPE initial_structur.



it_import-zahl  = '0100'.
it_import-anzhl =  '1.00'.



DATA: wa_ergx           TYPE xstring.
DATA: go_conv_legacy    TYPE REF TO cl_abap_conv_out_ce,
      go_view_legacy    TYPE REF TO cl_abap_view_offlen.
DATA: go_conv_unicode   TYPE REF TO cl_abap_conv_out_ce,
      go_view_unicode   TYPE REF TO cl_abap_view_offlen.

*--------------------------------------------------------------------*
* Konvertierung normal
*--------------------------------------------------------------------*

go_conv_legacy  = cl_abap_conv_out_ce=>create(  ).
go_view_legacy  = cl_abap_view_offlen=>create_legacy_view( it_import ).
go_conv_legacy->convert_struc(  EXPORTING data   = it_import
                                          view   = go_view_legacy
                                IMPORTING buffer = wa_ergx ).

WRITE:/ 'Non-Unicode', AT 40 wa_ergx.




*--------------------------------------------------------------------*
* Konvertierung nach Unicode aus non-unicode system heraus
*--------------------------------------------------------------------*

go_conv_unicode  = cl_abap_conv_out_ce=>create( encoding = '4100'
                                                endian   = 'B' ).
go_view_unicode  = cl_abap_view_offlen=>create_unicode16_view( it_import ).
go_conv_unicode->convert_struc(  EXPORTING data   = it_import
                                           view   = go_view_unicode
                                 IMPORTING buffer = wa_ergx ).

WRITE:/ 'Unicode big endian', AT 40 wa_ergx.
*--------------------------------------------------------------------*
* Konvertierung nach Unicode aus non-unicode system heraus
*--------------------------------------------------------------------*

go_conv_unicode  = cl_abap_conv_out_ce=>create( encoding = '4101' ).
go_view_unicode  = cl_abap_view_offlen=>create_unicode16_view( it_import ).
go_conv_unicode->convert_struc(  EXPORTING data   = it_import
                                           view   = go_view_unicode
                                 IMPORTING buffer = wa_ergx ).

WRITE:/ 'Unicode little endian', AT 40 wa_ergx.
Ausgabe:

Code: Alles auswählen.

Non-Unicode                            30313030000000000000100C
Unicode big endian                     0030003100300030000000000000100C
Unicode little endian                  3000310030003000000000000000100C
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Umstellung Unicode - Zuweisung gepackter Felder

Beitrag von black_adept (Top Expert / 4089 / 127 / 940 ) »
Nachtrag: Gerade noch mal sicherheitshalber auf einem Unicode system nachgeschaut. Dort wird dieselbe Ausgabe erzeugt. Somit solltest du das so verwenden können.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Umstellung Unicode - Zuweisung gepackter Felder

Beitrag von gutzeli (ForumUser / 5 / 0 / 0 ) »
Danke - hat mich ein gutes Stück weiter gebracht

Re: Umstellung Unicode - Zuweisung gepackter Felder

Beitrag von gutzeli (ForumUser / 5 / 0 / 0 ) »
Hallo black_adept,

erst einaml Danke für Deine tolle Hilfe - mühsam ernährt sich das Eichhörnchen.

Mit der "Konvertierung normal" erhalte ich jetzt den HEX-Code, wie ich es auch im NUS erhalte.
Jetzt muss ich den HEx Code noch umwandeln, so dass ich z.B. "0100######`#" in die Schnittstelle stellen kann.
Hierzu verwende folgendes

Code: Alles auswählen.

DATA: l_convin          TYPE REF TO cl_abap_conv_in_ce,
      l_msgstr          TYPE string,
      lv_string         TYPE string.
DATA: lo_cx_root        TYPE REF TO cx_root.

TRY.
    CALL METHOD cl_abap_conv_in_ce=>create
      EXPORTING
        encoding    = 'UTF-8'
        input       = wa_ergx
      RECEIVING
        conv        = l_convin.

    CALL METHOD l_convin->read
      IMPORTING
        data = lv_string.

    WRITE:/ 'Wert', AT 40 lv_string.
    
  CATCH cx_root INTO lo_cx_root.
    BREAK-POINT.

ENDTRY.
Jetzt habe ich aber das Problem, dass z.B. beim Wert 8.00 für it_import-anzhl bei der Methode l_convin->read der Fehler "cx_sy_conversion_codepage" geworfen wird. Für 1-7 funktioniert es.
Kennst Du eine andere Möglichkeit den Hex-Code zu wandeln.

Grüße

Seite 1 von 1

Vergleichbare Themen

2
Antw.
4794
Views
Unicode-Umstellung
von ralf.wenzel » 06.03.2007 10:06 • Verfasst in ABAP® Core
5
Antw.
6518
Views
Unicode-Umstellung: Codepages
von neXXus » 23.09.2013 10:50 • Verfasst in ABAP® Core
3
Antw.
1970
Views
mySAP ERP und Umstellung auf UNICODE
von ta » 19.01.2006 09:22 • Verfasst in Basis
1
Antw.
6361
Views
Unicode-Umstellung mit Syntaxfehler
von Kristin » 17.12.2008 13:33 • Verfasst in SAP - Allgemeines
3
Antw.
2788
Views
Error XML Parser. Nach Unicode Umstellung
von isp » 05.09.2018 11:45 • Verfasst in ABAP® Core

Über diesen Beitrag


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

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.

Unbeantwortete Forenbeiträge

Daten an Tabelle binden
vor 2 Tagen von Bright4.5 1 / 767
aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 2389
Hilfe bei SWEC/SWE2
letzen Monat von retsch 1 / 8974