Code: Alles auswählen.
CALL METHOD: obj_cl->get_contracts_from_refipos
EXPORTING
iv_rel_typ = iv_rel_typ
iv_bukrs = iv_bukrs
iv_ref_prodnr = iv_ref_prodnr
iv_ref_posnr = iv_ref_posnr
iv_ref_dat_von = iv_ref_dat_von
IMPORTING
et_ranl = et_ranl.
IF container IS INITIAL.
CREATE OBJECT container
EXPORTING
container_name = 'CONTAINER'.
CREATE OBJECT alvgrid
EXPORTING
i_parent = container.
CALL METHOD alvgrid->set_table_for_first_display
EXPORTING
i_structure_name = '/BHW/TB_REF_T_RANL'
CHANGING
it_outtab = et_ranl
EXCEPTIONS
invalid_parameter_combination = 1
program_error = 2
too_many_lines = 3
OTHERS = 5.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
Code: Alles auswählen.
CHANGING
it_outtab = et_ranl
EXCEPTIONS
invalid_parameter_combination = 1
program_error = 2
too_many_lines = 3
OTHERS = 5.
it_fieldcatalog = <interne Tabell>
Gruß Dörk.Laufzeitfehler MOVE_CAST_ERROR
Ausnahme CX_SY_MOVE_CAST_ERROR
Datum und Zeit 23.11.2005 07:39:41
Kurztext
Dynamischer Typkonflikt bei Zuweisung von Referenzen
Was ist passiert?
Fehler im ABAP-Anwendungsprogramm.
Das laufende ABAP-Programm "SAPLSLVC" mußte abgebrochen werden, da es auf
eine Anweisung gestoßen ist, die leider nicht ausgeführt werden kann.
Fehleranalyse
Es ist eine Ausnahme aufgetreten, die weiter unten näher erläutert wird.
Die Ausnahme, der die Klasse 'CX_SY_MOVE_CAST_ERROR' zugeordnet ist,
wurde in der Prozedur "ANALYSE_FIELDCAT_NEW" "(FORM)" weder abgefangen,
noch durch eine RAISING-Klausel propagiert.
Da der Aufrufer der Prozedur nicht mit dem Auftreten der Ausnahme
rechnen konnte, wurde das laufende Programm abgebrochen.
Der Grund für die Ausnahme ist:
Bei der 'CAST' Operation ('?=' oder 'MOVE ?TO') wurde versucht eine
Referenz einer Referenzvariablen zuzuweisen.
Der aktuelle Inhalt der Quellvariablen paßt aber nicht in die Ziel-
variable.
Quelltyp: "\CLASS=CL_ABAP_ELEMDESCR"
Zieltyp : "\CLASS=CL_ABAP_STRUCTDESCR"
Fehlende RAISING Klausel im Interface
Programm SAPLSLVC
Include LSLVCF36
Zeile 9
Modultyp (FORM)
Modulname ANALYSE_FIELDCAT_NEW
Auslösestelle der Ausnahme
Programm SAPLSLVC
Include LSLVCF36
Zeile 41
Modultyp (FORM)
Modulname ANALYSE_FIELDCAT_NEW
Zeile Quelltext
11 it_data type table
12 is_layout type lvc_s_layo
13 it_fieldcat type lvc_t_fcat
14 changing
15 ct_fieldcat_local type lvc_t_fcat_local
16 cs_layout_local type lvc_s_layl.
17
18 data:
19 l_struc_descr type ref to cl_abap_structdescr,
20 begin of lt_components occurs 40,
21 name type abap_compdescr-name,
22 component type sy-tabix,
23 end of lt_components,
24 ls_fieldcat_local type lvc_s_fcat_local.
25
26 data: lr_alv type ref to cl_gui_alv_grid.
27
28 data: l_tabix type i.
29
30 field-symbols:
31 <ls_component> type abap_compdescr,
32 <l_workarea> type any,
33 <l_field> type any,
34 <ls_fieldcat> type lvc_s_fcat.
35
36
37 ***********************************************************************
38 * find out the component numbers and names
39 ***********************************************************************
40 assign local copy of initial line of it_data to <l_workarea>.
>>>>> l_struc_descr ?= cl_abap_typedescr=>describe_by_data( <l_workarea> ).
42 loop at l_struc_descr->components assigning <ls_component>.
43 lt_components-component = sy-tabix.
44 lt_components-name = <ls_component>-name.
45 append lt_components.
46 endloop.
47 sort lt_components by name.
48
49
50 ***********************************************************************
51 * prepare local layout structure
52 ***********************************************************************
53 clear cs_layout_local.
54 * find component number for ctab_fname
55 read table lt_components with key name = is_layout-ctab_fname
56 binary search.
57 if sy-subrc = 0.
58 cs_layout_local-indx_ctab = lt_components-component.
59 endif.
60 * find component number for info_fname
Code: Alles auswählen.
TYPES: BEGIN OF s_attribut,
RANL TYPE /BHW/TB_REF_T_RANL,
end of s_attribut.
DATA gs_attribut TYPE s_attribut.
DATA: gt_fieldcat TYPE lvc_t_fcat.
CONSTANTS: gc_true TYPE as4flag VALUE 'X',
gc_false TYPE as4flag VALUE ' '.
DATA gv_aendern_flag TYPE char1.
Code: Alles auswählen.
*&--------------------------------------------------------------------*
*& Form build_fieldcat
*&--------------------------------------------------------------------*
* Feldkatalog aus Dynpro-Struktur erstellen , initialisieren
*---------------------------------------------------------------------*
FORM build_fieldcat.
DATA ls_struct_type TYPE REF TO cl_abap_structdescr.
DATA ls_fcat TYPE lvc_s_fcat.
FIELD-SYMBOLS <fs_comp> TYPE abap_compdescr.
CLEAR: gt_fieldcat.
* Komponenten aus Struktur holen
ls_struct_type ?= cl_abap_typedescr=>describe_by_data( gs_attribut ).
* Feldkatalog aus den Komponenten erstellen
LOOP AT ls_struct_type->components ASSIGNING <fs_comp>.
ls_fcat-col_pos = sy-tabix.
ls_fcat-fieldname = <fs_comp>-name.
ls_fcat-ref_field = <fs_comp>-name.
ls_fcat-scrtext_s = <fs_comp>-name.
** CELLTAB wird übernommen
IF <fs_comp>-name <> 'CELLTAB'. "DN 17.10.2005
APPEND ls_fcat TO gt_fieldcat.
ENDIF.
ENDLOOP.
ENDFORM. "fill_fieldcat
*&--------------------------------------------------------------------*
*& Form edit_fieldcat
*&--------------------------------------------------------------------*
* Feldkatalog bearbeiten
*---------------------------------------------------------------------*
FORM edit_fieldcat USING aendern_flag TYPE char1.
FIELD-SYMBOLS <fs_fcat> TYPE lvc_s_fcat.
* Feldkatalog mit vernünftigen Name füllen
LOOP AT gt_fieldcat ASSIGNING <fs_fcat>.
<fs_fcat>-no_out = gc_true.
CASE <fs_fcat>-fieldname.
WHEN 'RANL'.
<fs_fcat>-scrtext_m = text-001.
IF aendern_flag = gc_true.
<fs_fcat>-no_out = gc_false.
ENDIF.
WHEN OTHERS.
<fs_fcat>-no_out = gc_true.
ENDCASE.
<fs_fcat>-scrtext_s = <fs_fcat>-scrtext_m.
<fs_fcat>-scrtext_l = <fs_fcat>-scrtext_m.
ENDLOOP.
ENDFORM. "edit_fieldcat
Code: Alles auswählen.
CASE fkcode.
WHEN 'SUBMIT'.
*NEW
gv_aendern_flag = gc_true.
PERFORM build_fieldcat.
PERFORM edit_fieldcat
USING gv_aendern_flag.
CREATE OBJECT obj_cl.
CALL METHOD: obj_cl->get_contracts_from_refipos
EXPORTING
iv_rel_typ = iv_rel_typ
iv_bukrs = iv_bukrs
iv_ref_prodnr = iv_ref_prodnr
iv_ref_posnr = iv_ref_posnr
iv_ref_dat_von = iv_ref_dat_von
IMPORTING
et_ranl = et_ranl.
IF container IS INITIAL.
CREATE OBJECT container
EXPORTING
container_name = 'CONTAINER'.
CREATE OBJECT alvgrid
EXPORTING
i_parent = container.
CALL METHOD alvgrid->set_table_for_first_display
EXPORTING
i_structure_name = '/BHW/TB_REF_T_RANL'
CHANGING
it_outtab = et_ranl
*NEW
it_fieldcatalog = gt_fieldcat
EXCEPTIONS
invalid_parameter_combination = 1
program_error = 2
too_many_lines = 3
OTHERS = 5.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDIF.
WHEN 'BEE'.
LEAVE PROGRAM.
ENDCASE.
Code: Alles auswählen.
** CELLTAB wird übernommen
IF <fs_comp>-name <> 'CELLTAB'. "DN 17.10.2005
APPEND ls_fcat TO gt_fieldcat.
ENDIF.
ENDLOOP.Code: Alles auswählen.
** CELLTAB wird übernommen
IF <fs_comp>-name <> 'CELLTAB'. "DN 17.10.2005
MODIFY gt_fieldcat from ls_fcat.
ENDIF.
ENDLOOP.Code: Alles auswählen.
Kurztext
Fehler in einer ABAP-Anweisung: (Bearbeiten einer internen Tabelle).
Was ist passiert?
Fehler im ABAP-Anwendungsprogramm.
Das laufende ABAP-Programm "/BHW/TB_REF_GET_CONTRACTS" mußte abgebrochen
werden, da es auf
eine Anweisung gestoßen ist, die leider nicht ausgeführt werden kann.
Fehleranalyse
Es sollte eine Zeile der internen Tabelle "???" geändert,
gelöscht oder hinzugefügt werden. Zu der Tabelle existiert jedoch
kein gültiger Cursor.
Mögliche Ursachen:
1. Im entsprechenden ABAP-Sprachbefehl wurde der Zusatz
"...INDEX..." nicht angegeben, obwohl dieser Befehl nicht
innerhalb einer "LOOP...ENDLOOP" Schleife über diese Tabelle steht.
2. Der entsprechende ABAP-Sprachbefehl wurde innerhalb einer
"LOOP...ENDLOOP" Schleife nach einem DELETE "???" aufgerufen.
Auslösestelle des Laufzeitfehlers
Programm /BHW/TB_REF_GET_CONTRACTS
Include /BHW/TB_REF_GET_CONTRA_FIELDS
Zeile 36
Modultyp (FORM)
Modulname BUILD_FIELDCAT
Code: Alles auswählen.
Zeile Quelltext
6 *& Form build_fieldcat
7 *&--------------------------------------------------------------------*
8 * Feldkatalog aus Dynpro-Struktur erstellen , initialisieren
9 *---------------------------------------------------------------------*
10 FORM build_fieldcat.
11 DATA ls_struct_type TYPE REF TO cl_abap_structdescr.
12 DATA ls_fcat TYPE lvc_s_fcat.
13 FIELD-SYMBOLS <fs_comp> TYPE abap_compdescr.
14
15 CLEAR: gt_fieldcat.
16
17 * Komponenten aus Struktur holen
18 ls_struct_type ?= cl_abap_typedescr=>describe_by_data( gs_attribut ).
19
20 * Feldkatalog aus den Komponenten erstellen
21 LOOP AT ls_struct_type->components ASSIGNING <fs_comp>.
22 ls_fcat-col_pos = sy-tabix.
23 ls_fcat-fieldname = <fs_comp>-name.
24 ls_fcat-ref_field = <fs_comp>-name.
25 ls_fcat-scrtext_s = <fs_comp>-name.
26
27 ** CELLTAB wird übernommen
28 * IF <fs_comp>-name <> 'CELLTAB'. "DN 17.10.2005
29 * APPEND ls_fcat TO gt_fieldcat.
30 * ENDIF.
31 * ENDLOOP.
32
33 IF <fs_comp>-name <> 'CELLTAB'. "DN 17.10.2005
34 MODIFY gt_fieldcat from ls_fcat.
35 ENDIF.
>>>>> ENDLOOP.
37
38 ENDFORM. "fill_fieldcat
39
40 *&--------------------------------------------------------------------*
41
42 *& Form edit_fieldcat
43
44 *&--------------------------------------------------------------------*
45
46 * Feldkatalog bearbeiten
47
48 *---------------------------------------------------------------------*
49
50
51 FORM edit_fieldcat USING aendern_flag TYPE char1.
52
53
54 FIELD-SYMBOLS <fs_fcat> TYPE lvc_s_fcat.
55
Code: Alles auswählen.
LOOP AT gt_fieldcat INTO ls_fcat.
IF ls_fcat-fieldname = '<Spaltenname>'.
ls_fcat-scrtext_l = '<dein Spaltenname>'.
ls_fcat-scrtext_m = '<dein Spaltenname>'.
ls_fcat-scrtext_s = '<dein Spaltenname>'.
ls_fcat-seltext = '<dein Spaltenname>'.
ls_fcat-reptext = '<dein Spaltenname>'.
MODIFY gt_fieldcat from ls_fcat.
ELSEIF.
....
ENDIF.
ENDLOOP.
Code: Alles auswählen.
*&--------------------------------------------------------------------*
*& Form build_fieldcat
*&--------------------------------------------------------------------*
* Feldkatalog aus Dynpro-Struktur erstellen , initialisieren
*---------------------------------------------------------------------*
FORM build_fieldcat.
DATA ls_struct_type TYPE REF TO cl_abap_structdescr.
DATA ls_fcat TYPE lvc_s_fcat.
FIELD-SYMBOLS <fs_comp> TYPE abap_compdescr.
CLEAR: gt_fieldcat.
* Komponenten aus Struktur holen
ls_struct_type ?= cl_abap_typedescr=>describe_by_data( gs_attribut ).
* Feldkatalog aus den Komponenten erstellen
LOOP AT ls_struct_type->components ASSIGNING <fs_comp>.
ls_fcat-col_pos = sy-tabix.
ls_fcat-fieldname = <fs_comp>-name.
ls_fcat-ref_field = <fs_comp>-name.
ls_fcat-scrtext_s = <fs_comp>-name.
** CELLTAB wird übernommen
IF <fs_comp>-name <> 'CELLTAB'. "DN 17.10.2005
APPEND ls_fcat TO gt_fieldcat.
ENDIF.
ENDLOOP.
ENDFORM. "fill_fieldcat
*&--------------------------------------------------------------------*
*& Form edit_fieldcat
*&--------------------------------------------------------------------*
* Feldkatalog bearbeiten
*---------------------------------------------------------------------*
FORM edit_fieldcat USING aendern_flag TYPE char1.
FIELD-SYMBOLS <fs_fcat> TYPE lvc_s_fcat.
* Feldkatalog mit vernünftigen Name füllen
LOOP AT gt_fieldcat ASSIGNING <fs_fcat>.
<fs_fcat>-no_out = gc_true.
CASE <fs_fcat>-fieldname.
WHEN 'RANL'.
<fs_fcat>-scrtext_m = text-001.
IF aendern_flag = gc_true.
<fs_fcat>-no_out = gc_false.
ENDIF.
WHEN OTHERS.
<fs_fcat>-no_out = gc_true.
ENDCASE.
<fs_fcat>-scrtext_s = <fs_fcat>-scrtext_m.
<fs_fcat>-scrtext_l = <fs_fcat>-scrtext_m.
ENDLOOP.
ENDFORM. "edit_fieldcatCode: Alles auswählen.
LOOP AT gt_fieldcat INTO ls_fcat.
IF ls_fcat-fieldname = '<Spaltenname>'.
ls_fcat-scrtext_l = '<dein Spaltenname>'.
ls_fcat-scrtext_m = '<dein Spaltenname>'.
ls_fcat-scrtext_s = '<dein Spaltenname>'.
ls_fcat-seltext = '<dein Spaltenname>'.
ls_fcat-reptext = '<dein Spaltenname>'.
MODIFY gt_fieldcat from ls_fcat.
ELSEIF.
....
ENDIF.
ENDLOOP.Code: Alles auswählen.
FORM fieldcat_builder.
*&--------------------------------------------------------------------*
DATA ls_struct_type TYPE REF TO cl_abap_structdescr.
DATA ls_fcat TYPE lvc_s_fcat.
LOOP AT gt_fieldcat INTO ls_fcat.
IF ls_fcat-fieldname = 'RANL'.
ls_fcat-scrtext_l = 'RANL'.
ls_fcat-scrtext_m = 'RANL'.
ls_fcat-scrtext_s = 'RANL'.
ls_fcat-seltext = 'RANL'.
ls_fcat-reptext = 'RANL'.
MODIFY gt_fieldcat from ls_fcat.
ENDIF.
ENDLOOP.
ENDFORM. "refresh_alv