‎2007 Aug 09 3:05 PM
hello, i'm trying to display a report with Alv Grid Display, but when generating the catalog i get this dump : Exception condition "NO_FIELDCATALOG_AVAILABLE" raised. I really don't know where is the problem on the source code, because the print table is not blank. This is the code:
TABLES: bsis , bsas , znom.
*----
Estructura de la Tabla----
*
TYPES: BEGIN OF t_nomina,
bukrs LIKE bsis-bukrs,
hkont LIKE bsis-hkont, "Numero de cuenta de mayor
*TXT50 LIKE BSIS-TXT50,
gsber LIKE bsis-gsber, "Division
budat LIKE bsis-budat, "Fecha de Contabilizacion
*shkzg LIKE BSIS-SHKZG, "Indicador Debe / Haber
wrbtr LIKE bsis-wrbtr, "Importe en moneda de documento
END OF t_nomina.
*Data: begin of t_upload occurs 0,
budat1 like bsis-budat,
budat2 like bsis-budat,
bukrs like bsis-bukrs,
hwaer like BKPF-hwaer,
clave(2),
*MTHS 06.08.2007
DATA: t_bsis LIKE bsis OCCURS 0 WITH HEADER LINE.
DATA: BEGIN OF t_upload OCCURS 0,
fecha1(10),
fecha2(10),
socied(4),
moneda(3),
clave(2),
cuent1(10),
import(13),
divisi(4),
cuent2(10),
descri(50),
END OF t_upload.
DATA: BEGIN OF nom_archivo OCCURS 0,
texto LIKE rlgrap-filename,
END OF nom_archivo.
DATA: BEGIN OF nom_archivo2 OCCURS 0,
texto LIKE rlgrap-filename,
END OF nom_archivo2.
DATA: BEGIN OF t_des OCCURS 0,
cuenta(10),
descri(50),
END OF t_des.
DATA: BEGIN OF t_data OCCURS 0,
budat LIKE bsis-budat,
bukrs LIKE bsis-bukrs,
gsber LIKE bsis-gsber,
hkont LIKE bsis-hkont,
descr LIKE t087j-txt50,
wrbtr LIKE bsis-wrbtr,
END OF t_data.
DATA: BEGIN OF t_data2 OCCURS 0,
budat LIKE bsis-budat,
bukrs LIKE bsis-bukrs,
gsber LIKE bsis-gsber,
hkont LIKE bsis-hkont,
wrbtr LIKE bsis-wrbtr,
END OF t_data2.
DATA: BEGIN OF t_col OCCURS 0,
budat LIKE bsis-budat,
bukrs LIKE bsis-bukrs,
hkont LIKE bsis-hkont,
wrbtr LIKE bsis-wrbtr,
END OF t_col.
DATA: BEGIN OF t_print OCCURS 0,
cuenta(10),
descri(50),
divisi(4),
fecha(10),
import TYPE p DECIMALS 2,
import2 TYPE p DECIMALS 2,
difer TYPE p DECIMALS 2,
END OF t_print.
*----
Definir la tabla interna que vamos a utilizar----
*
DATA: tab_nomina TYPE TABLE OF t_nomina.
DATA: wa_nomina TYPE t_nomina.
DATA: iline TYPE i.
DATA: wa_znom TYPE znom.
DATA: flag(1) TYPE c.
*MTHS 06.08.2007
DATA: contador(2) TYPE n,
debe LIKE bsis-dmbtr,
haber LIKE bsis-dmbtr,
f_date LIKE bsis-budat,
texto(150),
campo(100),
answer(1),
documento LIKE bkpf-belnr,
sw(10). "MG
************************************************************************
DATA: w_field TYPE slis_t_fieldcat_alv,
w_field_wa LIKE LINE OF w_field,
w_layout TYPE slis_layout_alv,
i_events TYPE slis_t_event,
w_events LIKE LINE OF i_events,
w_repid LIKE sy-repid,
w_topheader TYPE slis_t_listheader,
w_top LIKE LINE OF w_topheader.
DATA: i_grid TYPE lvc_s_glay.
DATA: field TYPE slis_t_fieldcat_alv,
gs_layout TYPE slis_layout_alv,
g_repid LIKE sy-repid,
g_inclu LIKE sy-repid,
field2 TYPE slis_t_fieldcat_alv,
gs_layout2 TYPE slis_layout_alv.
DATA: g_status_set TYPE slis_formname VALUE 'PF_STATUS_SET'.
DATA: selfield TYPE slis_selfield.
DATA: ucomm LIKE sy-ucomm.
************************************************************************
***Definicion de lo que va a aparecer en pantalla para el usuario*****
Pantalla de Seleccion
SELECTION-SCREEN BEGIN OF BLOCK b0 WITH FRAME TITLE text-007.
PARAMETERS: p_cami LIKE rlgrap-filename OBLIGATORY
. "Archivo
SELECTION-SCREEN END OF BLOCK b0.
MatchCode para Archivo
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_cami.
Función para simular la busqueda de archivo en windows
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
def_filename = ' '
def_path = p_cami
mask = ',..'
mode = 'O'
title = 'Archivo a importar'
IMPORTING
filename = p_cami
EXCEPTIONS
inv_winsys = 01
no_batch = 02
selection_cancel = 03
selection_error = 04.
INITIALIZATION.
report = sy-repid.
g_repid = sy-repid.
CLEAR flag.
contador = 1.
debe = 0.
haber = 0.
sw = 0.
*****Comienzo de la selección***********************
START-OF-SELECTION.
PERFORM cargar_datos.
****Finalización de la selección*********************
END-OF-SELECTION.
*********Función para la carga de datos***************
FORM cargar_datos .
************************************************************************
Separar nombre del archivo de la ruta donde fue leido
************************************************************************
TRANSLATE p_cami TO UPPER CASE.
SPLIT p_cami AT '' INTO TABLE nom_archivo.
DESCRIBE TABLE nom_archivo LINES contador.
READ TABLE nom_archivo INDEX contador.
SPLIT nom_archivo-texto AT '.' INTO TABLE nom_archivo2.
DESCRIBE TABLE nom_archivo2 LINES contador.
READ TABLE nom_archivo2 INDEX contador.
IF nom_archivo2-texto NE 'XLS'. " and nom_archivo2-texto ne 'xls'.
DATA: registros TYPE i.
DATA: wa_nomina TYPE t_nomina.
data : it_fichero type linea occurs 0 with header line.
INSERT znom FROM wa_znom.
CALL FUNCTION 'WS_UPLOAD'
EXPORTING
CODEPAGE = ' '
filename = p_cami
FILETYPE = 'ASC'
HEADLEN = ' '
LINE_EXIT = ' '
TRUNCLEN = ' '
USER_FORM = ' '
USER_PROG = ' '
DAT_D_FORMAT = ' '
IMPORTING
FILELENGTH =
TABLES
data_tab = t_upload
EXCEPTIONS
conversion_error = 1
file_open_error = 2
file_read_error = 3
invalid_type = 4
no_batch = 5
unknown_error = 6
invalid_table_width = 7
gui_refuse_filetransfer = 8
customer_error = 9
OTHERS = 10
.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
LOOP AT t_upload.
SPLIT t_upload-descri AT space INTO t_des-cuenta t_des-descri.
APPEND t_des.
CONDENSE t_upload-cuent2.
CALL FUNCTION 'CONVERT_DATE_TO_INTERNAL'
EXPORTING
date_external = t_upload-fecha1
IMPORTING
date_internal = t_upload-fecha1
EXCEPTIONS
date_external_is_invalid = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
MOVE t_upload-fecha1 TO t_data-budat.
MOVE t_upload-socied TO t_data-bukrs.
MOVE t_upload-import TO t_data-wrbtr.
MOVE t_upload-cuent2 TO t_data-gsber.
MOVE t_des-cuenta TO t_data-hkont.
MOVE t_des-descri TO t_data-descr.
APPEND t_data.
ENDLOOP.
LOOP AT t_data.
Rellena con ceros a la izquierda para hacer la consulta
a la tabla
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = t_data-hkont
IMPORTING
output = t_data-hkont.
Convierte el formato de fecha que viene en el .txt
para poder hacer la consulta
MODIFY t_data.
ENDLOOP.
SELECT
budat
bukrs
gsber
hkont
wrbtr
INTO CORRESPONDING FIELDS OF TABLE t_data2
FROM bsis
FOR ALL ENTRIES IN t_data
WHERE hkont EQ t_data-hkont
AND bukrs EQ t_data-bukrs
AND budat EQ t_data-budat.
IF sy-subrc NE 0. "Si no hay resultados busco en la BSAS
SELECT
budat
bukrs
gsber
hkont
wrbtr
INTO CORRESPONDING FIELDS OF TABLE t_data2
FROM bsas
FOR ALL ENTRIES IN t_data
WHERE hkont EQ t_data-hkont
AND bukrs EQ t_data-bukrs
AND budat EQ t_data-budat.
ENDIF.
ENDIF.
LOOP AT t_data2.
MOVE-CORRESPONDING t_data2 TO t_col.
COLLECT t_col.
CLEAR t_col.
ENDLOOP.
SORT t_col BY hkont budat.
LOOP AT t_data.
MOVE t_data-gsber TO t_print-divisi.
MOVE t_data-hkont TO t_print-cuenta.
MOVE t_data-wrbtr TO t_print-import.
MOVE t_data-descr TO t_print-descri.
APPEND t_print.
ENDLOOP.
LOOP AT t_print.
READ TABLE t_upload WITH KEY cuent1 = t_print-cuenta.
IF sy-subrc EQ 0.
t_print-fecha = t_upload-fecha1.
MODIFY t_print INDEX sy-tabix.
ENDIF.
READ TABLE t_col WITH KEY hkont = t_print-cuenta.
IF sy-subrc EQ 0.
t_print-import2 = t_col-wrbtr.
MODIFY t_print INDEX sy-tabix.
t_print-difer = t_print-import - t_print-import2.
MODIFY t_print.
CLEAR: t_print, t_upload, t_col.
ENDIF.
ENDLOOP.
PERFORM do_alv.
*****************MTHS 06.08.2007
ENDFORM.
*&----
*
*& Form do_alv
*&----
*
text
*----
*
--> p1 text
<-- p2 text
*----
*
FORM do_alv.
BREAK-POINT.
PERFORM do_fieldcat.
PERFORM do_layout.
PERFORM do_events.
PERFORM do_sort.
PERFORM call_alv.
ENDFORM. " do_alv
*&----
*
*& Form do_layout
*&----
*
text
*----
*
--> p1 text
<-- p2 text
*----
*
FORM do_layout .
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
i_list_type = 0
IMPORTING
et_events = i_events.
READ TABLE i_events
WITH KEY name = slis_ev_top_of_page
INTO w_events.
IF sy-subrc = 0.
MOVE 'ENCABEZADO' TO w_events-form.
MODIFY i_events FROM w_events INDEX sy-tabix.
ENDIF.
gs_layout-zebra = 'X'.
gs_layout-detail_popup = 'X'.
i_grid-edt_cll_cb = 'X'.
SORT t_print BY cuenta fecha.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = g_repid "Nombre del programa
i_callback_pf_status_set = g_status_set
i_callback_user_command = 'CONTABILIZAR'
it_fieldcat = field[] "Catalogo de Salida
is_layout = gs_layout "Layout de Salida
it_events = i_events
i_grid_settings = i_grid
TABLES
t_outtab = t_print "Tabla Interna con Datos
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE e162(00) WITH 'Problema al Imprimir el Reporte'.
ENDIF.
CLEAR w_layout.
w_layout-zebra = 'X'.
w_layout-f2code = '&ETA'.
w_layout-detail_popup = 'X'."striped pattern
ENDFORM. " do_layout
*----
*
FORM call_alv *
*----
*
........ *
*----
*
FORM call_alv.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = report
is_layout = w_layout
it_fieldcat = i_fieldcat
i_save = 'X'
it_events = i_events
it_sort = i_sort
TABLES
t_outtab = t_print
EXCEPTIONS
program_error = 1
OTHERS = 2.
ENDFORM. "call_alv
*&----
*
*& Form do_fieldcat
*&----
*
text
*----
*
--> p1 text
<-- p2 text
*----
*
FORM do_fieldcat .
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
i_program_name = g_repid
i_internal_tabname = 'T_PRINT'
I_STRUCTURE_NAME =
I_CLIENT_NEVER_DISPLAY = 'X'
I_INCLNAME =
I_BYPASSING_BUFFER =
I_BUFFER_ACTIVE =
CHANGING
ct_fieldcat = field.
.
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
LOOP AT field INTO w_field_wa.
CASE w_field_wa-fieldname.
WHEN 'CUENTA'.
w_field_wa-tabname = 't_print'.
w_field_wa-seltext_m = 'Cuenta de Mayor'.
MODIFY field FROM w_field_wa.
WHEN 'DESCRI'.
w_field_wa-tabname = 't_print'.
w_field_wa-seltext_m = 'Descripcion'.
MODIFY field FROM w_field_wa.
WHEN 'DIVISI'.
w_field_wa-tabname = 't_print'.
w_field_wa-seltext_m = 'Division'.
MODIFY field FROM w_field_wa.
WHEN 'FECHA'.
w_field_wa-tabname = 't_print'.
w_field_wa-seltext_m = 'Fecha'.
MODIFY field FROM w_field_wa.
WHEN 'IMPORT'.
w_field_wa-tabname = 't_print'.
w_field_wa-seltext_m = 'Importe archivo'.
MODIFY field FROM w_field_wa.
WHEN 'IMPORT2'.
w_field_wa-tabname = 't_print'.
w_field_wa-seltext_m = 'Importe SAP'.
MODIFY field FROM w_field_wa.
WHEN 'DIFER'.
w_field_wa-tabname = 't_print'.
w_field_wa-seltext_m = 'Diferencia'.
MODIFY field FROM w_field_wa.
ENDCASE.
ENDLOOP.
ENDFORM. " do_fieldcat
*&----
*
*& Form do_sort
*&----
*
text
*----
*
--> p1 text
<-- p2 text
*----
*
*
FORM do_sort .
*
CLEAR w_sort.
REFRESH i_sort.
*
CLEAR w_sort.
w_sort-fieldname = 'CUENTA'.
w_sort-tabname = 't_print'.
w_sort-up = 'X'.
APPEND w_sort TO i_sort.
ENDFORM. " do_sort
*&----
*
*& Form do_events
*&----
*
text
*----
*
--> p1 text
<-- p2 text
*----
*
FORM do_events .
REFRESH i_events.
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
i_list_type = 0
IMPORTING
et_events = i_events
EXCEPTIONS
list_type_wrong = 1
OTHERS = 2.
*
Leer los eventos que me interesan
*
CLEAR w_events.
READ TABLE i_events INTO w_events WITH KEY name = slis_ev_top_of_page
*.
IF sy-subrc = 0.
MOVE 'MI_TOP_OF_PAGE' TO w_events-form.
MODIFY i_events FROM w_events INDEX sy-tabix.
ENDIF.
ENDFORM. " do_events
*----
*
FORM alv_top_of_page *
*----
*
........ *
*----
*
FORM alv_top_of_page.
DATA: fecha1(10) TYPE c.
CLEAR: w_topheader[].
w_top-typ = 'H'. "H=Header, S=Selection, A=Action
w_top-key = ''.
w_top-info = 'ALSTOM, Venezuela S.A'.
APPEND w_top TO w_topheader.
w_top-typ = 'H'. "H=Header, S=Selection, A=Action
w_top-key = ''.
w_top-info = 'REPORTE DE CONCILIACIÓN DE NÓMINA'.
APPEND w_top TO w_topheader.
w_top-typ = 'S'. "H=Header, S=Selection, A=Action
w_top-key = 'Fecha'.
WRITE sy-datum TO fecha1 .
w_top-info = fecha1.
APPEND w_top TO w_topheader.
w_top-typ = 'S'. "H=Header, S=Selection, A=Action
w_top-key = 'Usuario'.
w_top-info = sy-uname.
APPEND w_top TO w_topheader.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
i_logo = 'LOGO'
it_list_commentary = w_topheader.
ENDFORM. "alv_top_of_page
‎2007 Aug 09 3:15 PM
The type (T_PRINT) of your internal table should be declare in the dictionnary,
please try it and let me know,
With release > 4.7, we can use local type to declare internal table using the new ALV OM,
Reward point, thanks
Alex