Zeilentyp nicht kompatibel

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

Zeilentyp nicht kompatibel

Beitrag von Forty2 (ForumUser / 12 / 0 / 0 ) »
Hallo,
ich arbeite mich gerade in ABAP ein und versuche gerade ein paar Daten zwischen Tabellen hin und her zu schieben.
Leider scheitere ich an der Erstellung einer internen Tabelle.
Mein Coding sieht folgendermaßen aus:

*&---------------------------------------------------------------------*
*& Report ZSELECTFLIGHT *
*& *
*&---------------------------------------------------------------------*
*& *
*& *
*&---------------------------------------------------------------------*

REPORT ZSELECTFLIGHT_ITAB
.

*Interne Tabellendefinition
types: begin of lFlight,
lcarrid type S_CONN_ID,
lconnid type S_CARR_ID,
lfldate type s_date,
lprice type s_price,
lseatsmax type S_SEATSMAX,
lseatsocc type S_SEATSocc,
lpers type p decimals 2,
end of lFlight.

types: it_flight TYPE sorted table of lflight WITH unique key lcarrid
lconnid INITIAL SIZE 10.


data wa_it_flight type it_flight with header line.

data: wa_flight type sflight.

data pers type p decimals 2.

parameters pa_FLI type s_carr_id.

select * from sflight into corresponding fields of wa_flight
where
carrid = pa_fli.

if wa_flight-seatsmax <> 0.
pers = wa_flight-seatsocc / wa_flight-seatsmax.
else.
pers = 0.
endif.

insert wa_flight into table wa_it_Flight .


endselect.

loop at wa_it_flight.

new-line.

write: /
wa_it_flight-lconnid,
wa_it_flight-lcarrid,
wa_it_flight-lseatsmax,
wa_it_flight-lseatsocc,
wa_it_flight-lfldate,
wa_it_flight-lpers,
wa_it_flight-lprice.

endloop.

Leider kommt bei "insert wa_flight into table wa_it_Flight ." immer die Fehlermeldung "wa_flight und der Zeilentyp von wa_it_flight sind nicht kompatibel.
Wenn ich folgendes machen:
wa_it_flight-lcarrid = wa_flight-carrid
meckert ABAP zwar nicht, aber es wird auch nichts übergeben?
Kann mir jemand helfen?
Thanks
Forty2

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


Beitrag von Andreas G (Specialist / 175 / 0 / 0 ) »
hallo.
types: it_flight TYPE sorted table of lflight WITH unique key lcarrid
lconnid INITIAL SIZE 10.
data wa_it_flight type it_flight with header line.
würd ich anders machen:

Code: Alles auswählen.

DATA: it_flight TYPE sorted table of lflight WITH unique key lcarrid 

DATA wa_it_flight type lFlight.
Denn so wie du die wa_it_flight definierst, ist es eine interne Tabelle und kein Arbeitsbereich!

Ausserdem würde ich die interne Tabelle mit DATA defineren (rein vom Sinn her).

mfg Andi.
Hauptsoch: HAUPTSOCH!

Beitrag von Forty2 (ForumUser / 12 / 0 / 0 ) »
Hi,
das habe ich mal ausprobiert.
Leider funktioniert es nicht.
Der Insert Befehl natürlich schon gar nicht mehr, aber auch eine Zuweisung von wa_it_flight = wa_flight. bricht mit der gleichen Fehlermeldung der Nicht-Konvertierung ab.
Forty2

Beitrag von Andreas G (Specialist / 175 / 0 / 0 ) »
:roll: INSERT kann ja auch nicht funktionieren da du in einen Arbeitsbereich einfügen willst.

Dir ist schon der Unterschied zwischen Arbeitsbereich (workarea wa) und interne Tabelle (itab) klar, oder?

INSERT INTO TABLE heißt in eine itab etwas einzufügen. (OK, auch mein Fehler, weil ich nicht gesehen habe das dein wa_it_flight eine interne tabelle ist). Um das ganze übersichtlicher zu machen lass da wa_ weg und benenne sie nur it_flight :wink:

Außerdem würde ich empfehlen den Arbeitsbereich mit APPEND an die interne Tabelle anzuhängen (anstatt von INSERT).

Code: Alles auswählen.

data it_flight type Standard table of lFlight. 
APPEND wa_flight INTO it_flight.
so hoffe des klappt jetzt.
mfg

PS: Unterschiede INSERT, APPEND, MODIFY, ... findest du in der SAP - Hilfe
Hauptsoch: HAUPTSOCH!

Beitrag von Forty2 (ForumUser / 12 / 0 / 0 ) »
Hi,
ich glaube zumindest den Unterschied zu kennen.
War aber auch mein Fehler mit den Bezeichnern.
Nun ja.
Ich habe das Coding nun etwas vereinfacht und das Programm lässt sich auch starten. :-)

*&---------------------------------------------------------------------*
*& Report ZSELECTFLIGHT *
*& *
*&---------------------------------------------------------------------*
*& *
*& *
*&---------------------------------------------------------------------*

REPORT ZSELECTFLIGHT_ITAB
.

*--------------Deklaration

*Interne Tabellendefinition
types: begin of lFlight,
lcarrid type S_CONN_ID,
lconnid type S_CARR_ID,
lfldate type s_date,
lprice type s_price,
lseatsmax type S_SEATSMAX,
lseatsocc type S_SEATSocc,
lpers type p decimals 2,
end of lFlight.

DATA:
it_flight TYPE standard table of lFlight.


*Arbeitsbereich
DATA wa_it_flight type lFlight.

*data: wa_sflight type sflight.

data pers type p decimals 2.

parameters pa_FLI type s_carr_id.

*--------------------Programm

select * from sflight into corresponding fields of wa_it_flight
where
carrid = pa_fli.

if wa_it_flight-lseatsmax <> 0.
pers = wa_it_flight-lseatsocc / wa_it_flight-lseatsmax.
else.
pers = 0.
endif.
append wa_it_flight to it_flight.

endselect.

loop at it_flight into wa_it_flight.

new-line.

write: /
wa_it_flight-lconnid,
wa_it_flight-lcarrid,
wa_it_flight-lseatsmax,
wa_it_flight-lseatsocc,
wa_it_flight-lfldate,
wa_it_flight-lprice,
wa_it_flight-lpers,
'%'.

endloop.

Allerdings bei
select * from sflight into corresponding fields of wa_it_flight
where
carrid = pa_fli.
wird nie was in wa_it_flight geschrieben. Somit wird in meine interne tabelle immer Nuller geschrieben. :-(
Thanks
Forty2

Beitrag von DeathGuardian (Expert / 759 / 0 / 3 ) »
Dein Problem ist, das deine Workarea vom Typ Sflight ist, aber deine Itab von deinem selbstgestrickten Typen ist.

Diese beiden müssen vom aufbau her gleich sein.

Beitrag von Forty2 (ForumUser / 12 / 0 / 0 ) »
Sind sie, zumindest was die Felder in it_flight betrifft.
SFlight hat natürlich noch ein paar mehr Felder.

Sinn der Sache ist letzlich, dass ich eine vorhandene Tabelle (SFLIGHT) filtere und auslese und dann um Werte (berechnet oder aus anderen Tabellen) erweitere um die Daten dann weiter zu verabeiten.

Wahrscheinlich geht das alles viel einfacher als hier probiert. HEUL

Beitrag von Andreas G (Specialist / 175 / 0 / 0 ) »
types: begin of lFlight,
lcarrid type S_CONN_ID,
lconnid type S_CARR_ID,
lfldate type s_date,
lprice type s_price,
lseatsmax type S_SEATSMAX,
lseatsocc type S_SEATSocc,
lpers type p decimals 2,
end of lFlight.
du musst die "l"s weglassen! z.B. statt lcarrid nur carrid!
bei into corresponding fields of werden nur felder übernommen die den gleichen namen haben. und in der tabelle SFLIGHT heist das Feld auch carrid und nicht lcarrid!

mfg Andi
Hauptsoch: HAUPTSOCH!

Beitrag von Forty2 (ForumUser / 12 / 0 / 0 ) »
Hmpf,
die Welt kann so einfach sein. :-)
Nun funzt es.
Super vielen dank.

Forty2

Beitrag von Forty2 (ForumUser / 12 / 0 / 0 ) »
Hi,
noch ein Problem.
Ich will eine FORM aufrufen doch leider funktioniert es nicht.
Mein Code:

*&---------------------------------------------------------------------*
*& Report ZSELECTFLIGHT *
*& *
*&---------------------------------------------------------------------*
*& *
*& *
*&---------------------------------------------------------------------*

REPORT ZSELECTFLIGHT_ITAB
.

*--------------Deklaration

*Interne Tabellendefinition
types: begin of lFlight,
carrid type sflight-carrid,
connid type sflight-connid,
fldate type sflight-fldate,
price type sflight-price,
seatsmax type sflight-SEATSMAX,
seatsocc type sflight-SEATSocc,
lpers type p decimals 2,
end of lFlight.
*Instantiierung der internen Tabelle
DATA:
it_flight TYPE standard table of lFlight.


*Arbeitsbereich der internen Tabelle
DATA wa_it_flight type lFlight.

data pers type p decimals 2.
data line type i.

parameters pa_FLI type s_carr_id.


*--------------------Programm
select * from sflight into
corresponding fields of wa_it_flight
where
carrid = pa_fli.

append wa_it_flight to it_flight.

endselect.

*Berechnung durchführen
perform CalculateValues using it_flight
line.
........

*Berechnung Percentage + Ausgabe Anzahl Sätze
Form CalculateValues using f_itab TYPE lFlight

value(f_lines) type i.

data l_itabLine like line of f_itab.

loop at f_itab into l_itabLine.

if l_itabLine-seatsmax <> 0.
l_itabLine-lpers = l_itabLine-seatsocc / l_itabLine-seatsmax.
else.
l_itabLine-lpers = 0.
endif.

add 1 to f_lines.

endloop.
endform. "CalculateValues

Die Fehlermeldung ist, dass F_ITAB nicht kompatible zu IT_FLIGHT sein soll.

Kann einer helfen?
Thanks
Forty2

Beitrag von Paint (Specialist / 116 / 0 / 1 ) »
Du willst die ganze Tabelle übergeben, dann musst du "tables" nutzen anstatt "using".

Beitrag von Forty2 (ForumUser / 12 / 0 / 0 ) »
Danke der Tipp war gut.

Damit hat es letztlich funktioniert:

Form CalculateValues changing f_itab like it_Flight

value(f_lines) type i.

Wie kann ich eigentlich die Anzahl der Tabelleneinträge aus einer internen Tabelle lesen.
Mit select count(*) from it_flight geht es schon mal nicht.
Forty2

Beitrag von Paint (Specialist / 116 / 0 / 1 ) »
DESCRIBE TABLE itab LINES lines.

Beitrag von Forty2 (ForumUser / 12 / 0 / 0 ) »
Super Danke.
Über sy-dbcnt geht es auch habe ich gerade rausgefunden.
Forty2

Beitrag von Paint (Specialist / 116 / 0 / 1 ) »
naja eigentlich ist sy-dbcnt eher für db-tabellen gedacht:

SQL-Anweisungen setzen den Inhalt von SY-DBCNT auf die Anzahl der bearbeiteten Tabellenzeilen. Bei SELECT-Schleifen in Open SQL ist SY-DBCNT nach der Anweisung ENDSELECT gesetzt. In Native SQL ist SY-DBCNT nach der Anweisung ENDEXEC gesetzt.

DELETE setzt SY-DBCNT auf die Anzahl der gelöschten Zeilen
FETCH setzt SY-DBCNT auf die Anzahl aller bisher für den entsprechenden Cursor gelesenen Zeilen.
INSERT setzt SY-DBCNT auf die Anzahl der eingefügten Zeilen.
MODIFY setzt SY-DBCNT auf die Anzahl der bearbeiteten Zeilen
UPDATE setzt SY-DBCNT auf die Anzahl der geänderten Zeilen.

Vergleichbare Themen

0
Antw.
1347
Views
Gleiche Datentypen, aber nicht kompatibel?
von Basler84 » 12.07.2013 08:05 • Verfasst in ABAP® für Anfänger
2
Antw.
3191
Views
Zeilentyp einer generischen Tabelle
von horn » 08.08.2008 20:35 • Verfasst in ABAP® für Anfänger
16
Antw.
1935
Views
Dynamische Tabelle definieren mit Zeilentyp einer anderen - wie machen?
von DeathAndPain » 01.10.2021 19:29 • Verfasst in ABAP® Core
3
Antw.
3677
Views
Sortierung einer internen Tab. mit Zeilentyp einer Referenz
von ABAP_User » 22.03.2012 08:51 • Verfasst in ABAP Objects®

Aktuelle Forenbeiträge

Daten an Tabelle binden
vor 8 Stunden von Bright4.5 3 / 1482
Regex in where
vor 10 Stunden von tar 6 / 153

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

Daten an Tabelle binden
vor 8 Stunden von Bright4.5 3 / 1482
Regex in where
vor 10 Stunden von tar 6 / 153

Unbeantwortete Forenbeiträge

aRFC im OO-Kontext
vor 5 Wochen von ralf.wenzel 1 / 3261
Hilfe bei SWEC/SWE2
September 2024 von retsch 1 / 9821