Driau
21/11/07, 13:46:37
Hola a todos. He realizado un pequeño programa. Le he modificado un poco los botones del ALV para que cuando le doy a 'PROCESAR' me genere un fichero. Éste es el codigo:
REPORT ZDESNOTIFICAR.
************************************************************************
* TAULES DE BASE DE DADES *
************************************************************************
TABLES: AFRU.
************************************************************************
* TYPES *
************************************************************************
************************************************************************
* TYPE-POOLS *
************************************************************************
TYPE-POOLS: SLIS.
************************************************************************
* VARIABLES *
************************************************************************
DATA: V_LINES TYPE I.
DATA: G_REPID LIKE SY-REPID.
*VARIABLES ALV
DATA: IT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV.
DATA: GS_LAYOUT TYPE SLIS_LAYOUT_ALV.
DATA: WA_FIELDCAT TYPE LINE OF SLIS_T_FIELDCAT_ALV.
************************************************************************
* TAULES INTERNES *
************************************************************************
DATA: BEGIN OF IT_AFRU OCCURS 0,
AUFNR LIKE AFRU-AUFNR,
RMZHL LIKE AFRU-RMZHL,
LMNGA LIKE AFRU-LMNGA,
MEINH LIKE AFRU-GMEIN,
END OF IT_AFRU.
DATA: BEGIN OF IT_OUT OCCURS 0,
AUFNR LIKE AFRU-AUFNR,
RMZHL LIKE AFRU-RMZHL,
LMNGA LIKE AFRU-LMNGA,
MEINH LIKE AFRU-MEINH,
END OF IT_OUT.
************************************************************************
* PANTALLA DE SELECCIÓ *
************************************************************************
*INSERTAR NUMERO DE OF
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.
PARAMETERS:
P_AUFNR LIKE AFRU-AUFNR. "NÚMERO DE OF
SELECTION-SCREEN END OF BLOCK b1.
*************************************************************************
* AT SELECTION-SCREEN *
*************************************************************************
*************************************************************************
* PROGRAMA PRINCIPAL *
*************************************************************************
START-OF-SELECTION.
G_REPID = SY-REPID.
SELECT AUFNR RMZHL LMNGA MEINH
FROM AFRU
INTO CORRESPONDING FIELDS OF TABLE IT_AFRU
WHERE AUFNR = P_AUFNR.
LOOP AT IT_AFRU.
IT_AFRU-MEINH = 'UN'.
APPEND IT_AFRU TO IT_OUT.
ENDLOOP.
*PREPARAMOS EL ALV-GRID
DESCRIBE TABLE IT_OUT LINES V_LINES.
CASE V_LINES.
WHEN 0.
MESSAGE TEXT-002 TYPE 'S'.
EXIT.
WHEN OTHERS.
PERFORM CATALEG_ALV.
PERFORM LAYOUT_ALV USING GS_LAYOUT.
PERFORM MOSTRAR_ALV.
ENDCASE.
************************************************************************
* FORM: CATALEG_ALV *
* *
************************************************************************
FORM CATALEG_ALV.
CLEAR IT_FIELDCAT.
CLEAR WA_FIELDCAT.
WA_FIELDCAT-FIELDNAME = 'RMZHL'.
WA_FIELDCAT-SELTEXT_L = 'Nº de Palet'.
WA_FIELDCAT-OUTPUTLEN = 10.
APPEND WA_FIELDCAT TO IT_FIELDCAT.
CLEAR WA_FIELDCAT.
WA_FIELDCAT-FIELDNAME = 'LMNGA'.
WA_FIELDCAT-SELTEXT_L = 'Cantidad'.
WA_FIELDCAT-OUTPUTLEN = 10.
APPEND WA_FIELDCAT TO IT_FIELDCAT.
CLEAR WA_FIELDCAT.
WA_FIELDCAT-FIELDNAME = 'MEINH'.
WA_FIELDCAT-SELTEXT_L = 'Unidad de medida'.
WA_FIELDCAT-OUTPUTLEN = 15.
WA_FIELDCAT-JUST = 'R'.
APPEND WA_FIELDCAT TO IT_FIELDCAT.
ENDFORM. "CATALEG_ALV
************************************************************************
* FORM: LAYOUT_ALV *
* *
************************************************************************
FORM LAYOUT_ALV USING LS_LAYOUT TYPE SLIS_LAYOUT_ALV.
LS_LAYOUT-ZEBRA = 'X'.
LS_LAYOUT-BOX_FIELDNAME = 'CHECKBOX'.
ENDFORM. "LAYOUT_ALV
*************************************************************************
* FORM: FUNCIÓ PER A MOSTRAR L'ALV PER PANTALLA *
* *
*************************************************************************
FORM MOSTRAR_ALV.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = G_REPID
IT_FIELDCAT = IT_FIELDCAT
IS_LAYOUT = GS_LAYOUT
I_CALLBACK_PF_STATUS_SET = 'SET_PF_STATUS'
I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
TABLES
T_OUTTAB = IT_OUT .
IF SY-SUBRC <> 0.
ENDIF.
ENDFORM. "MOSTRAR_ALV
*************************************************************************
* FORM: SET_PF_STATUS *
* *
*************************************************************************
FORM set_pf_status USING rt_extab TYPE slis_t_extab.
SET PF-STATUS 'STATUS_ALV'.
ENDFORM. " SET_PF_STATUS
**************************************************************************
* FORM: GENERAR_FICHERO *
* *
**************************************************************************
FORM GENERAR_FICHERO.
CALL FUNCTION 'WS_DOWNLOAD'
EXPORTING
filename = TEXT-003
filetype = 'ASC'
TABLES
data_tab = IT_OUT
EXCEPTIONS
file_open_error = 1
file_write_error = 2
invalid_filesize = 3
invalid_type = 4
no_batch = 5
unknown_error = 6
invalid_table_width = 7
gui_refuse_filetransfer = 8
customer_error = 9
OTHERS = 10.
ENDFORM. "GENERAR_FICHERO
*************************************************************************
* FORM: USER_COMMAND *
* *
*************************************************************************
FORM USER_COMMAND USING RF_UCOMM LIKE SY-UCOMM
RS TYPE SLIS_SELFIELD.
CASE RF_UCOMM.
WHEN 'PROCESAR'.
PERFORM GENERAR_FICHERO.
RS-REFRESH = 'X'.
ENDCASE.
ENDFORM. "user_command
El problema es que en cuanto le doy al boton de GENERAR me da un error del siguiente tipo:
Err.tmpo.ejec. MOVE_TO_LIT_NOTALLOWED_NODATA
Assignment error: Overwriting a protected field.
The program tried to assign a new value to the field "<L_BOX>" even though
it is protected against changes.
La verdad es que no se que hacer...alguien se ha encontrado con lo mismo alguna vez????
Gracias!
REPORT ZDESNOTIFICAR.
************************************************************************
* TAULES DE BASE DE DADES *
************************************************************************
TABLES: AFRU.
************************************************************************
* TYPES *
************************************************************************
************************************************************************
* TYPE-POOLS *
************************************************************************
TYPE-POOLS: SLIS.
************************************************************************
* VARIABLES *
************************************************************************
DATA: V_LINES TYPE I.
DATA: G_REPID LIKE SY-REPID.
*VARIABLES ALV
DATA: IT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV.
DATA: GS_LAYOUT TYPE SLIS_LAYOUT_ALV.
DATA: WA_FIELDCAT TYPE LINE OF SLIS_T_FIELDCAT_ALV.
************************************************************************
* TAULES INTERNES *
************************************************************************
DATA: BEGIN OF IT_AFRU OCCURS 0,
AUFNR LIKE AFRU-AUFNR,
RMZHL LIKE AFRU-RMZHL,
LMNGA LIKE AFRU-LMNGA,
MEINH LIKE AFRU-GMEIN,
END OF IT_AFRU.
DATA: BEGIN OF IT_OUT OCCURS 0,
AUFNR LIKE AFRU-AUFNR,
RMZHL LIKE AFRU-RMZHL,
LMNGA LIKE AFRU-LMNGA,
MEINH LIKE AFRU-MEINH,
END OF IT_OUT.
************************************************************************
* PANTALLA DE SELECCIÓ *
************************************************************************
*INSERTAR NUMERO DE OF
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.
PARAMETERS:
P_AUFNR LIKE AFRU-AUFNR. "NÚMERO DE OF
SELECTION-SCREEN END OF BLOCK b1.
*************************************************************************
* AT SELECTION-SCREEN *
*************************************************************************
*************************************************************************
* PROGRAMA PRINCIPAL *
*************************************************************************
START-OF-SELECTION.
G_REPID = SY-REPID.
SELECT AUFNR RMZHL LMNGA MEINH
FROM AFRU
INTO CORRESPONDING FIELDS OF TABLE IT_AFRU
WHERE AUFNR = P_AUFNR.
LOOP AT IT_AFRU.
IT_AFRU-MEINH = 'UN'.
APPEND IT_AFRU TO IT_OUT.
ENDLOOP.
*PREPARAMOS EL ALV-GRID
DESCRIBE TABLE IT_OUT LINES V_LINES.
CASE V_LINES.
WHEN 0.
MESSAGE TEXT-002 TYPE 'S'.
EXIT.
WHEN OTHERS.
PERFORM CATALEG_ALV.
PERFORM LAYOUT_ALV USING GS_LAYOUT.
PERFORM MOSTRAR_ALV.
ENDCASE.
************************************************************************
* FORM: CATALEG_ALV *
* *
************************************************************************
FORM CATALEG_ALV.
CLEAR IT_FIELDCAT.
CLEAR WA_FIELDCAT.
WA_FIELDCAT-FIELDNAME = 'RMZHL'.
WA_FIELDCAT-SELTEXT_L = 'Nº de Palet'.
WA_FIELDCAT-OUTPUTLEN = 10.
APPEND WA_FIELDCAT TO IT_FIELDCAT.
CLEAR WA_FIELDCAT.
WA_FIELDCAT-FIELDNAME = 'LMNGA'.
WA_FIELDCAT-SELTEXT_L = 'Cantidad'.
WA_FIELDCAT-OUTPUTLEN = 10.
APPEND WA_FIELDCAT TO IT_FIELDCAT.
CLEAR WA_FIELDCAT.
WA_FIELDCAT-FIELDNAME = 'MEINH'.
WA_FIELDCAT-SELTEXT_L = 'Unidad de medida'.
WA_FIELDCAT-OUTPUTLEN = 15.
WA_FIELDCAT-JUST = 'R'.
APPEND WA_FIELDCAT TO IT_FIELDCAT.
ENDFORM. "CATALEG_ALV
************************************************************************
* FORM: LAYOUT_ALV *
* *
************************************************************************
FORM LAYOUT_ALV USING LS_LAYOUT TYPE SLIS_LAYOUT_ALV.
LS_LAYOUT-ZEBRA = 'X'.
LS_LAYOUT-BOX_FIELDNAME = 'CHECKBOX'.
ENDFORM. "LAYOUT_ALV
*************************************************************************
* FORM: FUNCIÓ PER A MOSTRAR L'ALV PER PANTALLA *
* *
*************************************************************************
FORM MOSTRAR_ALV.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = G_REPID
IT_FIELDCAT = IT_FIELDCAT
IS_LAYOUT = GS_LAYOUT
I_CALLBACK_PF_STATUS_SET = 'SET_PF_STATUS'
I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
TABLES
T_OUTTAB = IT_OUT .
IF SY-SUBRC <> 0.
ENDIF.
ENDFORM. "MOSTRAR_ALV
*************************************************************************
* FORM: SET_PF_STATUS *
* *
*************************************************************************
FORM set_pf_status USING rt_extab TYPE slis_t_extab.
SET PF-STATUS 'STATUS_ALV'.
ENDFORM. " SET_PF_STATUS
**************************************************************************
* FORM: GENERAR_FICHERO *
* *
**************************************************************************
FORM GENERAR_FICHERO.
CALL FUNCTION 'WS_DOWNLOAD'
EXPORTING
filename = TEXT-003
filetype = 'ASC'
TABLES
data_tab = IT_OUT
EXCEPTIONS
file_open_error = 1
file_write_error = 2
invalid_filesize = 3
invalid_type = 4
no_batch = 5
unknown_error = 6
invalid_table_width = 7
gui_refuse_filetransfer = 8
customer_error = 9
OTHERS = 10.
ENDFORM. "GENERAR_FICHERO
*************************************************************************
* FORM: USER_COMMAND *
* *
*************************************************************************
FORM USER_COMMAND USING RF_UCOMM LIKE SY-UCOMM
RS TYPE SLIS_SELFIELD.
CASE RF_UCOMM.
WHEN 'PROCESAR'.
PERFORM GENERAR_FICHERO.
RS-REFRESH = 'X'.
ENDCASE.
ENDFORM. "user_command
El problema es que en cuanto le doy al boton de GENERAR me da un error del siguiente tipo:
Err.tmpo.ejec. MOVE_TO_LIT_NOTALLOWED_NODATA
Assignment error: Overwriting a protected field.
The program tried to assign a new value to the field "<L_BOX>" even though
it is protected against changes.
La verdad es que no se que hacer...alguien se ha encontrado con lo mismo alguna vez????
Gracias!