Assigning component Problem: uebernahme zahlen

Getting started ... Alles für einen gelungenen Start.

Assigning component Problem: uebernahme zahlen

Postby Aliya3110 » Sun Jun 07, 2015 6:27 pm

Hallo zusammen,
Übernahme von Zahlen mit 2 Kommastellen, da habe ich Probleme. Wie kann ich sie übernehmen?

DATA: ls_invoiceheader TYPE zsmm_invoiceheader,
lt_invoiceheader TYPE ztymm_invoiceheader,
lv_spaltenname TYPE string,
lv_addinvoice_table TYPE i,
lv_table TYPE boolean.
DATA: lv_exceptiontext TYPE string.

FIELD-SYMBOLS:
<ls_xml_data> LIKE LINE OF lt_xml_data,
<lv_value> TYPE any,
<lv_addvalue> TYPE any,
<ls_invoiceheader> TYPE zsmm_invoiceheader.

LOOP AT lt_xml_data ASSIGNING <ls_xml_data>.

* check fieldname
ASSIGN COMPONENT lv_spaltenname OF STRUCTURE ls_invoiceheader TO <lv_addvalue> .
IF sy-subrc = 0.
TRY.
<lv_addvalue> = <ls_xml_data>-cvalue.
CATCH cx_sy_conversion_no_number INTO lo_exception.
lv_exceptiontext = lo_exception->get_text( ).
ENDTRY.
ENDIF.
lv_spaltenname = <ls_xml_data>-cvalue.

* add fieldvalue in Structur
ASSIGN COMPONENT <ls_xml_data>-cvalue OF STRUCTURE ls_invoiceheader TO <lv_value>.
IF sy-subrc = 0.
TRANSLATE <ls_xml_data>-cvalue TO UPPER CASE.
ENDIF.

Genau hier müssen die zahlen übernommen werden, aber eine Exception wird ausgelöst:

TRY.
<lv_addvalue> = <ls_xml_data>-cvalue.
CATCH cx_sy_conversion_no_number INTO lo_exception.
lv_exceptiontext = lo_exception->get_text( ).
ENDTRY.
Aliya3110
...
...
 
Posts: 125
Joined: Sun May 25, 2008 3:17 pm

Re: Assigning component Problem: uebernahme zahlen

Postby Alma59 » Tue Jun 09, 2015 7:41 am

Hallo,

welchen Wert hat den die Variable und wie ist diese Typisierung der beiden Variablen ?
Wahrscheinlich musst du den Dezimaltrenner auf Punkt ändern.

VG
Alma59
...
...
 
Posts: 134
Joined: Tue Jul 08, 2008 10:35 am

Re: Assigning component Problem: uebernahme zahlen

Postby Aliya3110 » Tue Jun 09, 2015 8:09 am

Hallo abap4711,

vielen Dank für Deine Antwort.
Ich habe den Wert als Betrag in meiner Struktur mit dem Typ CURR13 2.
In der do Schleife wird die Position nicht ermittelt. Die Schleife läuft über die Struktur aber übernommen wird die Position nicht. Sy-Subrc fängt mit der 0 an und endet bei 81, da meine Struktur 80 Felder hat. Einige davon sind Zahlen.

Ich lese im Loop den Namen der Spalte wie. z.B. Betrag und dann direkt darunter in der zweiten Schleifendurchlauf den Inhalt 230,80. Der Name des Colums und der Inhalt sind in einer Spalte.

LOOP AT lt_xml_data ASSIGNING <ls_xml_data>.

* check fieldname
ASSIGN COMPONENT lv_spaltenname OF STRUCTURE ls_invoiceheader TO <lv_addvalue> .
IF sy-subrc = 0.
TRY.
* convert dats
CALL METHOD gcl_xml->convert_date
EXPORTING
iv_columname = lv_spaltenname
CHANGING
cv_dats = <ls_xml_data>-cvalue.

<lv_addvalue> = <ls_xml_data>-cvalue.

CATCH cx_sy_conversion_no_number INTO lo_exception.
lv_exceptiontext = lo_exception->get_text( ).
* DO.
* ASSIGN COMPONENT sy-index OF STRUCTURE ls_invoiceheader TO <lv_addvalue> .
* IF sy-subrc <> 0.
* EXIT.
* ENDIF.
* ENDDO.
ENDTRY.
ENDIF.

lv_spaltenname = <ls_xml_data>-cvalue.

* add fieldvalue in Structur
ASSIGN COMPONENT <ls_xml_data>-cvalue OF STRUCTURE ls_invoiceheader TO <lv_value>.
IF sy-subrc = 0.
TRANSLATE <ls_xml_data>-cvalue TO UPPER CASE.
ENDIF.
Aliya3110
...
...
 
Posts: 125
Joined: Sun May 25, 2008 3:17 pm

Re: Assigning component Problem: uebernahme zahlen

Postby Alma59 » Tue Jun 09, 2015 9:22 am

Geht es denn nun ? Setzt du den Wert in der Methode CONVERT_DATE um ?

VG
Alma59
...
...
 
Posts: 134
Joined: Tue Jul 08, 2008 10:35 am

Re: Assigning component Problem: uebernahme zahlen

Postby Aliya3110 » Tue Jun 09, 2015 9:48 am

In der Conver_date konvertiere ich das Datum nicht den Betrag.
Der Betrag mit den Dezimalzahlen muss ich mit "," übernehmen daher versuche ich in der Do Schleife mit Sy-Index die Zahl zu lesen und übernehmen. Den Betrag 230,80 habe ich aus XML gelesen und mit Komma soll ins SAP in die Tabelle "RBKP" (Rechnungsbruttobetrag in Belegwährung) in das Feld "RMWWR"
Aliya3110
...
...
 
Posts: 125
Joined: Sun May 25, 2008 3:17 pm

Re: Assigning component Problem: uebernahme zahlen

Postby Alma59 » Tue Jun 09, 2015 10:12 am

Warum wandelst du den Dezimaltrenner nicht um in einen Punkt ?
Du kannst kein Komma als Dezimaltrenner in das Feld RBKP-RMWWR stellen.

Entweder frägst du fest auf den Spaltennamen ab oder du prüfst über das Dictionary ob es ein Betragsfeld ist und dann ersetzt du das Komma z.b. mit dem FUBA CONVERSION_EXIT_ISR1_INPUT.
Alma59
...
...
 
Posts: 134
Joined: Tue Jul 08, 2008 10:35 am

Re: Assigning component Problem: uebernahme zahlen

Postby Aliya3110 » Tue Jun 09, 2015 11:02 am

Dann brauche ich gar nicht mit "ASSIGN COMPONENT SY-INDEX" zu bearbeiten oder? "ASSIGN COMPONENT lv_spaltenname" müsste ausreichen aber habe folgende Werte auch in der Tabelle aktuell oder auch Werte mit dem Vorzeichen '-'. Im Catch Teil fange ich die Werte aus Zahlen. Sie müssen dann an die richtige Position in der ls_invoiceheader. Wenn ich mit"ASSIGN COMPONENT SY-INDEX" arbeite, muss ich sie unbedingt konvertieren?

Auf der DB in der Tabelle "RBKP"
KURSF
0,51129
0,51129
0,51129

RMWWR
358.156,00
1.595,05
5.432,60
Datentypen sind:
KURSFKURSFDEC95Umrechnungskurs
RMWWRRMWWRCURR132Rechnungsbruttobetrag in Belegwährung

Ich habe gelesen:
Hat das Feld comp einen nicht textartigen elementaren Typ, wird der Inhalt in den Typ i konvertiert und als Position der Komponente in der Struktur interpretiert. Falls der Wert von comp 0 ist, wird dem Feldsymbol der Speicherbereich der gesamten Struktur zugewiesen.
Aliya3110
...
...
 
Posts: 125
Joined: Sun May 25, 2008 3:17 pm

Re: Assigning component Problem: uebernahme zahlen

Postby Alma59 » Tue Jun 09, 2015 11:35 am

Du setzt doch das Datum in deiner Methode auch schon um und ich nehme mal an das du hier auch schon sagt : Spaltename "DATAB" - dann wandeln in ein korrektes Datum um.

Das selbe kannst du doch für deine Werte-Felder machen:
Spaltenname "BETRAG" "KURS" usw. -> Dann Komma durch Punkt ersetzen.
oder eben abfragen ob das Feld deiner Struktur zsmm_invoiceheader Decimalstellen hat.
Alma59
...
...
 
Posts: 134
Joined: Tue Jul 08, 2008 10:35 am

Re: Assigning component Problem: uebernahme zahlen

Postby Aliya3110 » Tue Jun 09, 2015 11:56 am

Das Datum Feld habe ich durch "ASSIGN COMPONENT lv_spaltenname" ermittelt und wurde das Ereignis "cx_sy_conversion_no_number" nicht ausgelöst, da das Feld nicht Zahl ist. Ich habe nur die Formatierung angepasst. YYYYMMDD. Die Felder mit komma und Vorzeichen lösen das Ereignis aus. In dem Fall arbeitet man doch mit "ASSIGN COMPONENT SY-Index" statt "ASSIGN COMPONENT lv_spaltenname" ohne zu konvertieren, weil es nicht um ein zeichenartiges Objekt geht oder?
Aliya3110
...
...
 
Posts: 125
Joined: Sun May 25, 2008 3:17 pm

Re: Assigning component Problem: uebernahme zahlen

Postby Alma59 » Tue Jun 09, 2015 12:50 pm

Da du ja deine Struktur kennst, kannst du direkt mit den Feldnamen zugreifen.

SY-Index benutzt man eigentlich, wenn man über eine DO-Schleife Feld für Feld abarbeiten will, die Struktur aber nicht kennt.

Gebe mal ein Beispiel wie die lt_xml_data aussieht.
Alma59
...
...
 
Posts: 134
Joined: Tue Jul 08, 2008 10:35 am

Next

Return to ABAP® für Anfänger

Who is online

Users browsing this forum: No registered users and 4 guests