Conexion a Bases de Datos Externas

posted under by Antonio Lopez
Aveces es necesario hacer operaciones con bases de datos externas a SAP, ya sea para interfases o para datos complementarios, aunque no es recomendable por licenciamientos de SAP, esta es la forma de hacerlo.

Primero que nada, es necesario realizar una coneccion hacia la base de datos externa, esto lo hacemos mediante la transaccion DBCO.

hacemos clic en el boton "NEW ENTRY" y tecleamos los datos correspondientes a la base de damos los datos necesarios para la coneccion.

Existe una lista de bases de datos a las que podemos acceder:












ya teniendo la conexion, este el el fragmento de codigo que debemos insertar.

*Abrimos conexion
EXEC SQL.
CONNECT TO 'CONEX01' AS 'R'
ENDEXEC.

EXEC SQL.
SET CONNECTION 'R'
ENDEXEC.

*borramos el contenido de la tabla alumnos
EXEC SQL.
DELETE CE.ALUMNOS@DESAR
ENDEXEC.

IF sy-subrc = 0.
*insertamos el valor ANTONIO LOPEZ en la tabla alumnos
EXEC SQL.
INSERT INTO CE.ALUMNOS@DESAR (NOMBRE)
VALUES (:'ANTONIO LOPEZ')
ENDEXEC.
ENDIF.

*Cerramos conexion
EXEC SQL.
SET CONNECTION DEFAULT
ENDEXEC.

Ejecucion de programa de windows desde sap

posted under by Antonio Lopez
Funcion para ejecutar una aplicacion win32 por medio de sap, se pueden pasar parametros a la funcion por medio del COMMANDLINE.


*&---------------------------------------------------------------------*
*& Form EJECUTA_EXE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*

* FORM EJECUTA_EXE। CALL FUNCTION 'WS_EXECUTE' EXPORTING * DOCUMENT = ' ' * CD = ' ' * COMMANDLINE = ' ' * INFORM = ' ' PROGRAM = 'CALC।EXE' * EXCEPTIONS FRONTEND_ERROR = 1 NO_BATCH = 2 PROG_NOT_FOUND = 3 ILLEGAL_OPTION = 4 GUI_REFUSE_EXECUTE = 5 OTHERS = 6.
IF sy-subrc <> 0.

TEXT-01 = 'EL ARCHIVO NO PUEDE SER GENERADO'.
CASE sy-subrc.
WHEN 1.
TEXT-02 = 'ERROR DE EJECUCION DE SAM'.
perform f_mensaje_informa using text-01 text-02.
WHEN 2.
TEXT-02 = 'NO EJECUCION EN SAM'.
perform f_mensaje_informa using text-01 text-02.
WHEN 3.
TEXT-02 = 'PROGRAMA "SAM" A EJECUTAR NO ENCONTRADO'.
perform f_mensaje_informa using text-01 text-02.
WHEN 4.
TEXT-02 = 'OPCION NO APMITIDA PARA EJECUCION EN SAM'.
perform f_mensaje_informa using text-01 text-02.
WHEN 5.
TEXT-02 = 'EJECUCION RECHAZADA EN SAP'.
perform f_mensaje_informa using text-01 text-02.
WHEN 6.
TEXT-02 = 'ERROR DESCONOCIDO'.
perform f_mensaje_informa using text-01 text-02.
ENDCASE.
ENDIF.
ENDFORM. " EJECUTA_EXE

*&---------------------------------------------------------------------*
*& Form F_MENSAJE_INFORMA
*&---------------------------------------------------------------------*
FORM F_MENSAJE_INFORMA USING P_TEXT_01
P_TEXT_02.
CALL FUNCTION 'POPUP_TO_INFORM'
EXPORTING
TXT1 = P_TEXT_01
TXT2 = P_TEXT_02
TITEL = 'WARNING Ventana informativa!!!!'.
ENDFORM. " F_MENSAJE_INFORMA

FTP, Carga y Descarga de archivos.

posted under by Antonio Lopez
Este es el reporte para subir y bajar un archivo de texto desde una ubicacion ftp,

Es importante mencionar que el ftp tiene que estar protegido con contraseña, ya que esta se manda a encriptar primero mediante CALL 'AB_RFC_X_SCRAMBLE_STRING' y despues se conecta al ftp, si no lleva contraseña, este nuca se conecta o muestra mensaje de error de privilegios no validos.


DATA:
* VARIABLES PARA CONECCION FTP
USER(64) TYPE C value 'usuario',
PWD(64) TYPE C value 'password',
HOST(64) TYPE C value 'host',
FILENAME(80) TYPE C value 'carga/archivo।txt',
DEST LIKE RFCDES-RFCDEST VALUE 'SAPFTP',
HDL TYPE I,
KEY TYPE I VALUE 26101957,
DSTLEN TYPE I,
BLOB_LENGTH TYPE I,
BND1(18) TYPE C,
BND2(1) TYPE C,

* TABLAS INTERNAS
BEGIN OF BLOB OCCURS 0,
LINE(82) TYPE c,
END OF BLOB,

BEGIN OF IT_TABLE OCCURS 0,
PROVEEDOR(10),
MATERIAL(18),
ORG(4),
END OF IT_TABLE.


*--- Inicio de Programa
PERFORM TRY_UPLOAD_FILE.
PERFORM TRY_DOWNLOAD_FILE.
*--- Fin de Programa


*&---------------------------------------------------------------------*
*& Form TRY_UPLOAD_FILE
*&---------------------------------------------------------------------*
FORM TRY_UPLOAD_FILE.

DESCRIBE FIELD PWD LENGTH DSTLEN.
CALL 'AB_RFC_X_SCRAMBLE_STRING'
ID 'SOURCE' FIELD PWD ID 'KEY' FIELD KEY
ID 'SCR' FIELD 'X' ID 'DESTINATION' FIELD PWD
ID 'DSTLEN' FIELD DSTLEN.

*BLOB_LENGTH = 77.
*este campo es el que le dice al sap de que longuitud es cada renglon que traeremos del ftp


CALL FUNCTION 'FTP_SERVER_TO_R3'
EXPORTING
HANDLE = HDL
FNAME = FILENAME
IMPORTING
BLOB_LENGTH = BLOB_LENGTH
TABLES
BLOB = BLOB.

CALL FUNCTION 'FTP_DISCONNECT'
EXPORTING
HANDLE = HDL.

*como el archivo lo insertamos en una cadena, loopeamos la tabla y la separamos.
loop at blob.
IT_TABLE-proveedor = blob-line+0(10).
IT_TABLE-material = blob-line+10(18).
IT_TABLE-org = blob-line+28(4).
append IT_TABLE.
endloop.
ENDFORM. " TRY_UPLOAD_FILE


*&---------------------------------------------------------------------*
*& Form TRY_DOWNLOAD_FILE
*&---------------------------------------------------------------------*
FORM TRY_DOWNLOAD_FILE.
DESCRIBE FIELD PWD LENGTH DSTLEN.
CALL 'AB_RFC_X_SCRAMBLE_STRING'
ID 'SOURCE' FIELD PWD ID 'KEY' FIELD KEY
ID 'SCR' FIELD 'X' ID 'DESTINATION' FIELD PWD
ID 'DSTLEN' FIELD DSTLEN.

CALL FUNCTION 'FTP_CONNECT'
EXPORTING
USER = USER
PASSWORD = PWD
HOST = HOST
RFC_DESTINATION = DEST
IMPORTING
HANDLE = HDL.

DESCRIBE TABLE it_datos1 LINES lines.
blob_length = lines * 75 .
CALL FUNCTION 'FTP_R3_TO_SERVER'
EXPORTING
HANDLE = HDL
FNAME = FILENAME2
BLOB_LENGTH = BLOB_LENGTH
TABLES
BLOB = IT_TABLE.

CALL FUNCTION 'FTP_DISCONNECT'
EXPORTING
HANDLE = HDL.
ENDFORM. " TRY_DOWNLOAD_FILE

Iconos para Reportes

posted under by Antonio Lopez
REPORT ZICONS .
TABLES: ICON.
INCLUDE .
FIELD-SYMBOLS: .

SELECT * FROM ICON.
ASSIGN (ICON-NAME) TO .
WRITE: /(5) , 20 '@',21 ICON-ID+1(2),23 '@',ICON-OLENG,
ICON-BUTTON,ICON-STATUS,ICON-MESSAGE,ICON-FUNCTION,
ICON-NAME.
ENDSELECT.

Graficos de Abap

posted under by Antonio Lopez


REPORT ZGRAPH .

DATA: BEGIN OF ITAB_DATA OCCURS 0,
DATANAME(15),
QUANTITY1 TYPE I,
QUANTITY2 TYPE I,
QUANTITY3 TYPE I,
END OF ITAB_DATA,
BEGIN OF ITAB_OPTIONS OCCURS 0,
OPTION(20),
END OF ITAB_OPTIONS.

ITAB_DATA-DATANAME = 'Electricidad'.
ITAB_DATA-QUANTITY1 = 55.
ITAB_DATA-QUANTITY2 = 62.
ITAB_DATA-QUANTITY3 = 59.
APPEND ITAB_DATA.

ITAB_DATA-DATANAME = 'Gas'.
ITAB_DATA-QUANTITY1 = 35.
ITAB_DATA-QUANTITY2 = 52.
ITAB_DATA-QUANTITY3 = 44.
APPEND ITAB_DATA.

ITAB_DATA-DATANAME = 'Agua'.
ITAB_DATA-QUANTITY1 = 18.
ITAB_DATA-QUANTITY2 = 22.
ITAB_DATA-QUANTITY3 = 19.
APPEND ITAB_DATA.

CALL FUNCTION 'GRAPH_MATRIX_3D'
EXPORTING
COL1 = 'Ene'
COL2 = 'Feb'
COL3 = 'Mar'
TITL = 'Gastos'
TABLES
DATA = ITAB_DATA
OPTS = ITAB_OPTIONS
EXCEPTIONS

Principales Funciones abap

posted under by Antonio Lopez
Cálculos
CALCULATE_DATE: Calcula la fecha futura basada en la entrada.

DATE_TO_DAY: Vuelve el día para la fecha incorporada.

DATE_COMPUTE_DAY: Vuelve el día laborable por una fecha

DATE_GET_WEEK: Vuelve la semana por una fecha

Los módulos de la función se relacionaron con (ALV) AVANZARON EL ESPECTADOR de la LISTA
REUSE_ALV_LIST_DISPLAY : Espectador de la lista de ABAP (EXHIBICIÓN de la LISTA)

REUSE_ALV_GRID_DISPLAY : Pantalla completa de ALV GridControl

REUSE_ALV_FIELDCATALOG_MERGE : Cree el catálogo del campo de la estructura del diccionario o de la tabla interna

El módulo de la función se relacionó para cambiar seguir
CHANGEDOCUMENT_READ_HEADERS : Documentos leída y del formato del cambio

DAY_ATTRIBUTES_GET: Cualidades de las vueltas para una gama de las fechas especificadas

MONTHS_BETWEEN_TWO_DATES : Para conseguir el número de meses entre las dos fechas.

END_OF_MONTH_DETERMINE_2 : Determina el final de un mes.

HR_HK_DIFF_BT_2_DATES : Encuentre la diferencia entre dos fechas en años, meses y días.

FIMA_DAYS_AND_MONTHS_AND_YEARS : Encuentre la diferencia entre dos fechas en años, meses y días.

MONTH_NAMES_GET: Consiga los nombres del mes

WEEK_GET_FIRST_DAY: Consiga el primer día de la semana

HRGPBS_HESA_DATE_FORMAT : Ajuste a formato la fecha en formato de dd/mm/yyyy

SD_CALC_DURATION_FROM_DATETIME : Encuentre la diferencia entre dos fechas/horas y divulgue la diferencia sobre horas

L_MC_TIME_DIFFERENCE: Encuentre la diferencia del tiempo entre dos fechas/horas

HR_99S_INTERVAL_BETWEEN_DATES : Diferencia entre dos fechas en los días, semanas, meses

LAST_DAY_OF_MONTHS: Vuelve el día pasado del mes

DATE_CHECK_PLAUSIBILITY :Compruebe para saber si hay la fecha inválida.

DATE_2D_TO_4D_CONVERSION :Entrada del año: carácter 2 al carácter 4.

DAY_IN_WEEK:Entre la fecha y dará el nombre del día el lunes 2 1 - martes….

Módulos de la función relacionados con el formato

CLOI_PUT_SIGN_IN_FRONT : Exhibe la muestra negativa delante del número

RKD_WORD_WRAP: Envuelva el texto en varias líneas

CONVERSION_EXIT_ALPHA_INPUT : Rellene los ceros al número en la izquierda

CONVERSION_EXIT_ALPHA_OUTPUT : Elimine los ceros al número en la izquierda

Los módulos de la función se relacionaron con los avisos del diálogo
POPUP_TO_CONFIRM: Exhibe un diálogo del popup con un mensaje definido por el usario para la confirmación

POPUP_TO_GET_VALUE: Exhibe un diálogo del popup que solicita un valor para una tabla-fieldname particular

SAPGUI_PROGRESS_INDICATOR : Exhibe una barra del progreso con el texto para denotar el porcentaje de la terminación y del estado

FILENAME_GET: Exhibe un diálogo del popup para conseguir el nombre de fichero del servidor de la presentación

F4_DATE: Exhibe un diálogo del popup para elegir la fecha

GUI_UPLOAD: Upload un archivo del servidor de la presentación

POPUP_TO_SELECT_MONTH : Exhiba un pop-up para seleccionar un mes

Módulos de la función relacionados con la comunicación del RFC
RFC_CONNECTION_CLOSE: Cierre una conexión del RFC

RFC_GET_SYSTEM_INFO: Dé la información del sistema de un sistema alejado

Los módulos de la función se relacionaron con los archivos de la lectura/de la escritura
FILE_READ_AND_CONVERT_SAP_DATA: Uploads el archivo de la presentación o del servidor del uso en una tabla interna

SUBST_GET_FILE_LIST: Para conseguir la lista de archivos del servidor del uso.

ALSM_EXCEL_TO_INTERNAL_TABLE : Transferencia de datos de la herencia con Excel

Módulos de la función relacionados con enviar email
SO_NEW_DOCUMENT_ATT_SEND_API1 - Envía email con los textos y los accesorios
SO_NEW_DOCUMENT_SEND_API1 - Envía email con los textos.

Los módulos de la función se relacionaron con la ayuda F4
F4IF_INT_TABLE_VALUE_REQUEST - Ayuda F4 también que vuelve el valor que se exhibirá en tabla interna

Campos repetidos en dos tablas...

posted under by Antonio Lopez
Continuando con mis posts con programas simples pero útiles, ahora les
traigo un que recibe dos tablas y devuelve todos los campos que
comparten ambas tablas (Comparando los dominios y no los nombres claro
está...)




REPORT ydummy_atg NO STANDARD PAGE HEADING.

TYPES: BEGIN OF ty_repeated,
fieldname TYPE dd03p-fieldname,
ddtext TYPE dd03p-ddtext,
END OF ty_repeated.

DATA: dd03p_table1 TYPE STANDARD TABLE OF dd03p,
dd03p_table2 TYPE STANDARD TABLE OF dd03p,
t_repeated TYPE STANDARD TABLE OF ty_repeated
WITH HEADER LINE.

DATA: long_1 TYPE i,
long_2 TYPE i,
w_title TYPE string.

FIELD-SYMBOLS: &lt;fs_dd03p&gt; LIKE LINE OF dd03p_table1,
&lt;fs_dd03p_aux&gt; LIKE LINE OF dd03p_table1,
&lt;fs_repeated&gt; LIKE LINE OF t_repeated.

SELECTION-SCREEN BEGIN OF BLOCK test.
PARAMETERS:
p_tab_1 TYPE dd17s-sqltab,
p_tab_2 TYPE dd17s-sqltab.
SELECTION-SCREEN END OF BLOCK test.

START-OF-SELECTION.

CONCATENATE p_tab_1 p_tab_2 INTO
w_title SEPARATED BY '-'.

sy-title = w_title.

CALL FUNCTION 'DDIF_TABL_GET'
EXPORTING
name = p_tab_1
state = 'A'
langu = sy-langu
TABLES
dd03p_tab = dd03p_table1
EXCEPTIONS
illegal_input = 1
OTHERS = 2.

DELETE dd03p_table1 WHERE rollname EQ space.

CALL FUNCTION 'DDIF_TABL_GET'
EXPORTING
name = p_tab_2
state = 'A'
langu = sy-langu
TABLES
dd03p_tab = dd03p_table2
EXCEPTIONS
illegal_input = 1
OTHERS = 2.

DELETE dd03p_table2 WHERE rollname EQ space.

DESCRIBE TABLE dd03p_table1 LINES long_1.
DESCRIBE TABLE dd03p_table2 LINES long_2.

IF long_1 GT long_2.
LOOP AT dd03p_table1 ASSIGNING &lt;fs_dd03p&gt;.
READ TABLE dd03p_table2 ASSIGNING &lt;fs_dd03p_aux&gt;
WITH KEY rollname = &lt;fs_dd03p&gt;-rollname.
IF sy-subrc EQ 0.
MOVE &lt;fs_dd03p_aux&gt;-fieldname TO t_repeated-fieldname.
MOVE &lt;fs_dd03p_aux&gt;-ddtext TO t_repeated-ddtext.
APPEND t_repeated.
ENDIF.
ENDLOOP.
ELSE.
LOOP AT dd03p_table2 ASSIGNING &lt;fs_dd03p&gt;.
READ TABLE dd03p_table1 ASSIGNING &lt;fs_dd03p_aux&gt;
WITH KEY rollname = &lt;fs_dd03p&gt;-rollname.
IF sy-subrc EQ 0.
MOVE &lt;fs_dd03p_aux&gt;-fieldname TO t_repeated-fieldname.
MOVE &lt;fs_dd03p_aux&gt;-ddtext TO t_repeated-ddtext.
APPEND t_repeated.
ENDIF.
ENDLOOP.
ENDIF.

LOOP AT t_repeated ASSIGNING &lt;fs_repeated&gt;.
WRITE:/ &lt;fs_repeated&gt;-fieldname,&lt;fs_repeated&gt;-ddtext.
ENDLOOP.

Tablas por Modulo y Precedencia

posted under by Antonio Lopez
Tablas en FI y sus relaciones.


Introduccion

posted under by Antonio Lopez


Este es un Blog de codigo ABAP, en el se encuentran extractos de programas que resultan utiles.
Este Blog fue creado apenas en este año, espero poder segui haciendolo crecer para brindar un recurso util en procesos de programacion, Las categorias se encuentran en la parte derecha.



SAP AG (Systeme, Anwendungen und Produkte) (Sistemas, Aplicaciones y Productos), con sede en Walldorf (Alemania), es el primer proveedor de software empresarial en el mundo. Como empresa, comercializa un conjunto de aplicaciones de software para soluciones integradas de negocios, entre ellas mySAP Business Suite, que provee soluciones escalables que permiten mejorar continuamente, con más de 1.000 procesos de negocio consideradas las mejores prácticas empresariales.



SAP es considerada como el tercer proveedor independiente de software del mundo y el mayor fabricante europeo de software. Con 12 millones de usuarios, 100.700 instalaciones, y más de 1.500 socios, es la compañía más grande de software Inter-empresa. A finales de 2005, SAP empleaba a 35.873 personas (fuente empleados) en más de 50 países y sus ingresos anuales fueron de 8.513 millones de euros.


ABAP (Advanced Business Application Programming) es un lenguaje de cuarta generación, propiedad de SAP, que se utiliza para programar la mayoría de sus productos (R/3, mySAP Business suite...). Utiliza sentencias de Open SQL para conectarse con prácticamente cualquier base de datos. Cuenta con miles de funciones para el manejo de archivos, bases de datos, fechas, etc... Permite conexiones RFC (Remote Function Calls) para conectar a los sistemas SAP con cualquier otro sistema o lenguaje de programación.

SAP suministra de manera casi gratuita una instalación limitada de R/3 llamada MiniSAP para la práctica de la programación en ABAP.

*source Wikipedia

ALV ROBOT.

posted under by Antonio Lopez

Este es un reporte que muestra un tipo de ALV sin necesidad de usar dynpro, es solo un simple reporte, en el cual me apoyo de una tabla llamada ZRF_t0002, contiene entre otros campos:
zrf_t0002-id_cliente, zrf_t0002-nombre, zrf_t0002-apellido1, zrf_t0002-apellido2.
es facil de impelementar y le da una vista mas profesional a nuetros reportes, espero sea de utilidad.

REPORT zalv_robot .

TABLES: ddshretval,
zrf_t0002.

TYPE-POOLS: slis.

DATA: BEGIN OF it_cliente OCCURS 0,
cliente LIKE zrf_t0002-id_cliente,
END OF it_cliente.

DATA: BEGIN OF it_match OCCURS 0, " Esta tabla nos devuelve la ayuda
shlpname LIKE ddshretval-shlpname,
fieldname LIKE ddshretval-fieldname,
recordpos LIKE ddshretval-recordpos,
fieldval LIKE ddshretval-fieldval,
retfield LIKE ddshretval-retfield,
END OF it_match.


TYPES: BEGIN OF tp_data,
cliente LIKE zrf_t0002-id_cliente,
nombre LIKE zrf_t0002-nombre,
apellido1 LIKE zrf_t0002-apellido1,
apellido2 LIKE zrf_t0002-apellido2,
END OF tp_data,
tp_tbl_data TYPE STANDARD TABLE OF tp_data.



* Report data to be shown.
DATA: it_data TYPE STANDARD TABLE OF tp_data.

* Heading of the report.
DATA: t_heading TYPE slis_t_listheader.

*======================= Selection Screen ==========================*
DATA: vcliente LIKE zrf_t0002-id_cliente,
vnombre LIKE zrf_t0002-nombre.
SELECTION-SCREEN: BEGIN OF BLOCK b1 WITH FRAME TITLE text-t01.
SELECT-OPTIONS id_cli FOR zrf_t0002-id_cliente.
SELECTION-SCREEN: END OF BLOCK b1.

*======================== Event Blocks =============================*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR id_cli-low.
SELECT id_cliente
FROM zrf_t0002
INTO TABLE it_cliente
WHERE id_cliente IN id_cli.
SORT it_cliente BY cliente.


CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'CLIENTE'
window_title = 'CLIENTE'
value_org = 'S'
TABLES
value_tab = it_cliente
return_tab = it_match
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3.

IF sy-subrc EQ 0.
READ TABLE it_match INDEX 1.
vcliente = it_match-fieldval.
MOVE vcliente TO id_cli-low.
SELECT SINGLE nombre FROM zrf_t0002
INTO vnombre WHERE id_cliente IN id_cli.
ENDIF.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR id_cli-high.
SELECT id_cliente
FROM zrf_t0002
INTO TABLE it_cliente
WHERE id_cliente IN id_cli.
SORT it_cliente BY cliente.


CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'ID_CLIENTE'
window_title = 'CLIENTE'
value_org = 'S'
TABLES
value_tab = it_cliente
return_tab = it_match
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3.

IF sy-subrc EQ 0.
READ TABLE it_match INDEX 1.
vcliente = it_match-fieldval.
MOVE vcliente TO id_cli-high.
SELECT SINGLE nombre FROM zrf_t0002
INTO vnombre WHERE id_cliente IN id_cli.

ENDIF.

START-OF-SELECTION.
PERFORM get_data USING it_data.


END-OF-SELECTION.
PERFORM build_alv USING it_data t_heading.

*======================== Subroutines ==============================*

*&------------------------------------------------------------------*
*& Form get_data
*&------------------------------------------------------------------*
* Gets the information to be shown in the report.
*-------------------------------------------------------------------*
FORM get_data USING t_data TYPE tp_tbl_data.

SELECT zrf_t0002~id_cliente
zrf_t0002~nombre
zrf_t0002~apellido1
zrf_t0002~apellido2

INTO TABLE t_data
FROM zrf_t0002
WHERE zrf_t0002~id_cliente IN id_cli.

ENDFORM. " get_data


*&------------------------------------------------------------------*
*& Form build_alv
*&------------------------------------------------------------------*
* Builds and display the ALV Grid.
*-------------------------------------------------------------------*
FORM build_alv USING t_data TYPE tp_tbl_data
t_heading TYPE slis_t_listheader.

* ALV required data objects.
DATA: w_title TYPE lvc_title,
w_repid TYPE syrepid,
w_comm TYPE slis_formname,
w_status TYPE slis_formname,
x_layout TYPE slis_layout_alv,
t_event TYPE slis_t_event,
t_fieldcat TYPE slis_t_fieldcat_alv,
t_sort TYPE slis_t_sortinfo_alv.



REFRESH t_fieldcat.
REFRESH t_event.
REFRESH t_sort.
CLEAR x_layout.
CLEAR w_title.

* Field Catalog
PERFORM set_fieldcat2 USING:
1 'CLIENTE' 'CLIENTE' 'ZRF_T0002' 7 space 'CLIENTE'
'CLIENTE' 'CLIENTE' 'CLIENTE' space space space space space
space t_fieldcat ,
3 'NOMBRE' 'NOMBRE' 'ZRF_T0002' 15 space 'NOMBRE' 'NOMBRE'
'NOMBRE' 'NOMBRE' space space space space space space t_fieldcat ,
4 'APELLIDO1' 'APELLIDO1' 'ZPM_T0004' 25 space 'APELLIDO1'
'APELLIDO1' 'APELLIDO1' 'APELLIDO1' space
space space space space space t_fieldcat ,
5 'APELLIDO2' 'APELLIDO2' 'ZPM_T0004' 25 space 'APELLIDO2'
'APELLIDO2' 'APELLIDO2' 'APELLIDO2' space
space space space space space t_fieldcat .


* Layout
x_layout-zebra = 'X'.

* Top of page heading
PERFORM set_top_page_heading USING t_heading t_event.

* Events
PERFORM set_events USING t_event.

* GUI Status
w_status = ''.
w_repid = sy-repid.

* Title

* User commands
w_comm = 'USER_COMMAND'.


* Displays the ALV grid
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = w_repid
it_fieldcat = t_fieldcat
is_layout = x_layout
it_sort = t_sort
i_callback_pf_status_set = w_status
i_callback_user_command = w_comm
i_save = 'X'
it_events = t_event
i_grid_title = w_title
TABLES
t_outtab = t_data
EXCEPTIONS
program_error = 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.

ENDFORM. " build_alv.


*&------------------------------------------------------------------*
*& Form set_top_page_heading
*&------------------------------------------------------------------*
* Creates the report headings.
*-------------------------------------------------------------------*
FORM set_top_page_heading USING t_heading TYPE slis_t_listheader
t_events TYPE slis_t_event.

DATA: x_heading TYPE slis_listheader,
x_event TYPE LINE OF slis_t_event.

* Report title
CLEAR t_heading[].
CLEAR x_heading.
x_heading-typ = 'H'.
x_heading-info = ''(001).
APPEND x_heading TO t_heading.

* Date of execution
CLEAR x_heading.
x_heading-typ = 'S'.
x_heading-key = 'Date: '.
WRITE sy-datum TO x_heading-info.
APPEND x_heading TO t_heading.

* Time of execution
CLEAR x_heading.
x_heading-typ = 'S'.
x_heading-key = 'Time: '.
WRITE sy-uzeit TO x_heading-info.
APPEND x_heading TO t_heading.

* Top of page event
x_event-name = slis_ev_top_of_page.
x_event-form = 'TOP_OF_PAGE'.
APPEND x_event TO t_events.

ENDFORM.

*&------------------------------------------------------------------*
*& Form set_events
*&------------------------------------------------------------------*
* Sets the events for ALV.
* The TOP_OF_PAGE event is alredy being registered in
* the set_top_page_heading subroutine.
*-------------------------------------------------------------------*
FORM set_events USING t_events TYPE slis_t_event.

DATA: x_event TYPE LINE OF slis_t_event.

ENDFORM.

*&------------------------------------------------------------------*
*& Form set_order
*&------------------------------------------------------------------*
* Adds an entry to the order table.
*-------------------------------------------------------------------*
FORM set_order USING p_fieldname p_tabname p_up p_down p_subtot
t_sort TYPE slis_t_sortinfo_alv.

DATA: x_sort TYPE slis_sortinfo_alv.

CLEAR x_sort.
x_sort-fieldname = p_fieldname.
x_sort-tabname = p_tabname.
x_sort-up = p_up.
x_sort-down = p_down.
x_sort-subtot = p_subtot.
APPEND x_sort TO t_sort.


ENDFORM. "set_order

*-------------------------------------*
FORM set_fieldcat2 USING
p_colpos p_fieldname p_ref_fieldname p_ref_tabname
p_outputlen p_noout
p_seltext_m p_seltext_l p_seltext_s p_reptext_ddic p_ddictxt
p_hotspot p_showasicon p_checkbox p_edit
p_dosum
t_fieldcat TYPE slis_t_fieldcat_alv.

DATA: wa_fieldcat TYPE slis_fieldcat_alv.

CLEAR wa_fieldcat.

* General settings
wa_fieldcat-fieldname = p_fieldname.
wa_fieldcat-col_pos = p_colpos.
wa_fieldcat-no_out = p_noout.
wa_fieldcat-hotspot = p_hotspot.
wa_fieldcat-checkbox = p_checkbox.
wa_fieldcat-icon = p_showasicon.
wa_fieldcat-do_sum = p_dosum.

IF p_ref_tabname IS INITIAL.
wa_fieldcat-rollname = p_ref_fieldname.
ELSE.
wa_fieldcat-ref_tabname = p_ref_tabname.
IF p_ref_fieldname EQ space.
wa_fieldcat-ref_fieldname = wa_fieldcat-fieldname.
ELSE.
wa_fieldcat-ref_fieldname = p_ref_fieldname.
ENDIF.
ENDIF.

* Set output length.
IF NOT p_outputlen IS INITIAL.
wa_fieldcat-outputlen = p_outputlen.
ENDIF.

* Set text headers.
IF NOT p_seltext_m IS INITIAL.
wa_fieldcat-seltext_m = p_seltext_m.
ENDIF.

IF NOT p_seltext_l IS INITIAL.
wa_fieldcat-seltext_l = p_seltext_l.
ENDIF.

IF NOT p_seltext_s IS INITIAL.
wa_fieldcat-seltext_s = p_seltext_s.
ENDIF.

IF NOT p_reptext_ddic IS INITIAL.
wa_fieldcat-reptext_ddic = p_reptext_ddic.
ENDIF.

IF NOT p_ddictxt IS INITIAL.
wa_fieldcat-ddictxt = p_ddictxt.
ENDIF.

* Set as editable or not.
IF NOT p_edit IS INITIAL.
wa_fieldcat-input = 'X'.
wa_fieldcat-edit = 'X'.
ENDIF.

APPEND wa_fieldcat TO t_fieldcat.

ENDFORM. "set_fieldcat2

*======================== Subroutines called by ALV ================*

*&------------------------------------------------------------------*
*& Form top_of_page
*&------------------------------------------------------------------*
* Called on top_of_page ALV event.
* Prints the heading.
*-------------------------------------------------------------------*
FORM top_of_page.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
it_list_commentary = t_heading.
ENDFORM. " alv_top_of_page

*&------------------------------------------------------------------*
*& Form user_command
*&------------------------------------------------------------------*
* Called on user_command ALV event.
* Executes custom commands.
*-------------------------------------------------------------------*
FORM user_command USING r_ucomm LIKE sy-ucomm
rs_selfield TYPE slis_selfield.


ENDFORM. "user_command

Creacion de un TextBox en Dynpro

posted under by Antonio Lopez

Codigo para insertar un ComboBox en un Dynpro parecido a los de Visual Basic, Debemos tener un input/output field en la pantalla, llamado "mes", etse field debe tener la propiedad "DropDown" en "ListBox".

********************
FLOW LOGIC DYNPROO
-----------------------
PROCESS BEFORE OUTPUT.
MODULE PBO. "STATUS_0100.

PROCESS AFTER INPUT.
MODULE PAI. "USER_COMMAND_0100.

PROCESS ON VALUE-REQUEST.
FIELD MES MODULE SET_DATA_MES.




Codigo:
***********************
*INCLUDE TOP
***********************
DATA:
itabitems like listitem occurs 0 with header line,


*****************
*INCLUDE OUTPUT
*****************
*----------------------------------------------------------------------*
* INCLUDE ZRF_0009O01 *
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Module PBO OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE pbo OUTPUT.
SET PF-STATUS '009'.
SET TITLEBAR 'MAINTITLE '.

ENDMODULE. " PBO OUTPUT


************************
*INCLUDE INPUT
************************
*----------------------------------------------------------------------*
* INCLUDE ZRF_0009I01 *
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Module PAI INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE pai INPUT.
CASE sy-ucomm.
WHEN 'BACK' OR 'EXIT' OR 'CANC'.
PERFORM leave_program.
ENDCASE.

ENDMODULE. " PAI INPUT
*&---------------------------------------------------------------------*
*& Module SET_DATA_MES INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE set_data_mes INPUT.
IF CONT = 0.
CONT = 1.
itabitems-item = 'ENERO'. APPEND itabitems.
itabitems-item = 'FEBRERO'. APPEND itabitems.
itabitems-item = 'MARZO'. APPEND itabitems.
itabitems-item = 'ABRIL'. APPEND itabitems.
itabitems-item = 'MAYO'. APPEND itabitems.
itabitems-item = 'JUNIO'. APPEND itabitems.
itabitems-item = 'JULIO'. APPEND itabitems.
itabitems-item = 'AGOSTO'. APPEND itabitems.
itabitems-item = 'SEPTIEMBRE'. APPEND itabitems.
itabitems-item = 'OCTUBRE'. APPEND itabitems.
itabitems-item = 'NOVIEMBRE'. APPEND itabitems.
itabitems-item = 'DICIEMBRE'. APPEND itabitems.

CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'CARRID'
value_org = 'S'
TABLES
value_tab = itabitems
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3.
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.
ENDMODULE. " SET_DATA_MES INPUT



******************************
*INCLUDE FORMS
******************************
*----------------------------------------------------------------------*
* INCLUDE ZRF_0009F01 *
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form LEAVE_PROGRAM
*&---------------------------------------------------------------------*
FORM leave_program.
LEAVE PROGRAM.
ENDFORM. " LEAVE_PROGRAM

ALV TREE

posted under by Antonio Lopez

Este Programa permite crear un ALV TREE en un customcontrol, debemos tener customcontrol en nuestra dynproo llamado "CCONTAINER".

En este ejemplo utilizo una tabla llamada zrf_t0000, cuya estructura es la siguiente.
MANDT-----------MANDT
ID--------------NUMC
DEPARTAMENTOS---CHAR
PANTALLAS-------CHAR
TRANSACCIONES---CHAR



CODIGO:
********************************
Screen Flow Logic:
********************************
PROCESS BEFORE OUTPUT.
MODULE STATUS_0100.

PROCESS AFTER INPUT.
MODULE USER_COMMAND_0100.
--------------------------------


**********************
*INCLUDE TOP
**********************
*&---------------------------------------------------------------------*
*& Include ZALVTREETOP *
*& *
*&---------------------------------------------------------------------*
PROGRAM ZALVTREE.

tables:
ZRF_T0000.

include .

DATA: g_alv_tree TYPE REF TO cl_gui_alv_tree,
g_custom_container TYPE REF TO cl_gui_custom_container.

DATA: gt_TONO TYPE ZRF_T0000 OCCURS 0, "Output-Table
ok_code LIKE sy-ucomm,
save_ok LIKE sy-ucomm, "OK-Code
g_max type i value 255,
lztono like line of GT_tono.

DATA:
CAT_CAMPOS TYPE LVC_T_FCAT,
LCAT_CAMPOS LIKE LINE OF CAT_CAMPOS.



*---------------------------------------------------------------
* LOCAL CLASSES
*---------------------------------------------------------------
*§1. Define a (local) class for event handling

CLASS lcl_tree_event_receiver DEFINITION.

PUBLIC SECTION.
*§2. Define an event handler method for each event you want to react to.
METHODS handle_node_double_click
FOR EVENT node_double_click OF cl_gui_alv_tree
IMPORTING node_key sender.
* 'sender' is an implicit event parameter that is provided by
* ABAP Objects runtime system. It contains a reference to the
* object that fired the event. You may directly use it to
* call methods of this instance.

ENDCLASS.
******************************************************************
CLASS lcl_tree_event_receiver IMPLEMENTATION.
*§3. Implement your event handler methods.

METHOD handle_node_double_click.
data: lt_children type lvc_t_nkey.
data temp type p.
DATA: e_node_text type LVC_VALUE.
DATA: TRANSACCION(10) TYPE C.
*first check if the node is a leaf, i.e. can not be expanded

call method sender->get_children
exporting i_node_key = node_key
importing et_children = lt_children.

if lt_children is initial.
****************************************************************
CALL METHOD sender->get_outtab_line
EXPORTING i_node_key = node_key
IMPORTING e_node_text = e_node_text.

SELECT TRANSACCIONES INTO TRANSACCION
FROM ZRF_T0000
WHERE PANTALLAS = e_node_text.
ENDSELECT.
CALL TRANSACTION TRANSACCION.
****************************************************************
endif.
ENDMETHOD.
ENDCLASS.



**********************
* INCLUDE OUTPUT
**********************
*----------------------------------------------------------------------*
* INCLUDE ZALVTREEO01 *
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
SET PF-STATUS 'GUI'.
SET TITLEBAR 'MAINTITLE'.

IF g_alv_tree IS INITIAL.
PERFORM init_tree.

CALL METHOD cl_gui_cfw=>flush
EXCEPTIONS cntl_system_error = 1
cntl_error = 2.
IF sy-subrc NE 0.
CALL FUNCTION 'POPUP_TO_INFORM'
EXPORTING
titel = 'Automation Queue failure'(801)
txt1 = 'Internal error:'(802)
txt2 = 'A method in the automation queue'(803)
txt3 = 'caused a failure.'(804).
ENDIF.
ENDIF.

ENDMODULE. " STATUS_0100 OUTPUT


******************
*INCLUDE IN
******************
*----------------------------------------------------------------------*
* INCLUDE ZALVTREEI01 *
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
module USER_COMMAND_0100 input.
CASE SY-UCOMM.
WHEN 'CANC' OR 'EXIT' OR 'BACK'.
LEAVE PROGRAM.
WHEN OTHERS.
* §6. Call dispatch to process toolbar functions
CALL METHOD cl_gui_cfw=>dispatch.
ENDCASE.
CALL METHOD cl_gui_cfw=>flush.
endmodule. " USER_COMMAND_0100 INPUT


***********************
*INCLUDE FORMS
***********************
*----------------------------------------------------------------------*
* INCLUDE ZALVTREEF01 *
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form init_tree
*&---------------------------------------------------------------------*
* INICIALIZACION DEL TREE
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form init_tree.
* create container for alv-tree
* DATA: l_tree_container_name(30) TYPE c.


CREATE OBJECT g_custom_container
EXPORTING
container_name = 'CCONTAINER'
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
create_error = 3
lifetime_error = 4
lifetime_dynpro_dynpro_link = 5.
IF sy-subrc <> 0.
MESSAGE x208(00) WITH 'ERROR'(100).
ENDIF.

* create tree control
CREATE OBJECT g_alv_tree
EXPORTING
parent = g_custom_container
node_selection_mode = cl_gui_column_tree=>node_sel_mode_single
item_selection = 'X'
no_html_header = 'X'
no_toolbar = ''
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
create_error = 3
lifetime_error = 4
illegal_node_selection_mode = 5
failed = 6
illegal_column_name = 7.
IF sy-subrc <> 0.
MESSAGE x208(00) WITH 'ERROR'. "#EC NOTEXT
ENDIF.

* §2. Create Hierarchy-header
* The simple ALV Tree uses the text of the fields which were used
* for sorting to define this header. When you use
* the 'normal' ALV Tree the hierarchy is build up freely
* by the programmer this is not possible, so he has to define it
* himself.
DATA l_hierarchy_header TYPE treev_hhdr.
PERFORM build_hierarchy_header CHANGING l_hierarchy_header.

* §3. Create empty Tree Control
* IMPORTANT: Table 'gt_sflight' must be empty. Do not change this table
* (even after this method call). You can change data of your table
* by calling methods of CL_GUI_ALV_TREE.
* Furthermore, the output table 'gt_outtab' must be global and can
* only be used for one ALV Tree Control.

PERFORM CATCAMPOS.

* create info-table for html-header
data: lt_list_commentary type slis_t_listheader,
l_logo type sdydo_value.
perform build_comment using
lt_list_commentary
l_logo.

data: ls_variant type disvariant.
ls_variant-report = sy-repid.

CALL METHOD g_alv_tree->set_table_for_first_display
EXPORTING
i_structure_name = 'ZRF_T0000'
is_hierarchy_header = l_hierarchy_header
it_list_commentary = lt_list_commentary
i_logo = l_logo
i_background_id = 'ALV_BACKGROUND'
is_variant = ls_variant
i_save = 'A'
CHANGING
it_outtab = gt_TONO "table must be empty !
it_fieldcatalog = CAT_CAMPOS.

* §4. Create hierarchy (nodes and leaves)
PERFORM create_hierarchy.
PERFORM register_events.
* §5. Send data to frontend.
CALL METHOD g_alv_tree->frontend_update.
* wait for automatic flush at end of pbo
ENDFORM. " init_tree

FORM CATCAMPOS.
REFRESH CAT_CAMPOS.
CLEAR LCAT_CAMPOS.
LCAT_CAMPOS-FIELDNAME = 'DEPARTAMENTOS'.
LCAT_CAMPOS-REF_TABLE = 'ZRF_T0000'.
LCAT_CAMPOS-COLTEXT = 'DEPARTAMENTO'.
LCAT_CAMPOS-OUTPUTLEN = 10.
LCAT_CAMPOS-EMPHASIZE = 'C200'.
*LCAT_CAMPOS-NO_OUT = 'X'.
APPEND LCAT_CAMPOS TO CAT_CAMPOS.

CLEAR LCAT_CAMPOS.
LCAT_CAMPOS-FIELDNAME = 'PANTALLAS'.
LCAT_CAMPOS-REF_TABLE = 'ZRF_T0000'.
LCAT_CAMPOS-COLTEXT = 'PROCESO'.
LCAT_CAMPOS-OUTPUTLEN = 10.
LCAT_CAMPOS-EMPHASIZE = 'C200'.
*LCAT_CAMPOS-NO_OUT = 'X'.
APPEND LCAT_CAMPOS TO CAT_CAMPOS.

CLEAR LCAT_CAMPOS.
LCAT_CAMPOS-FIELDNAME = 'ID'.
LCAT_CAMPOS-REF_TABLE = 'ZRF_T0000'.
LCAT_CAMPOS-COLTEXT = 'ID'.
LCAT_CAMPOS-OUTPUTLEN = 10.
LCAT_CAMPOS-EMPHASIZE = 'C200'.
*LCAT_CAMPOS-NO_OUT = 'X'.
APPEND LCAT_CAMPOS TO CAT_CAMPOS.

CLEAR LCAT_CAMPOS.
LCAT_CAMPOS-FIELDNAME = 'TRANSACCIONES'.
LCAT_CAMPOS-REF_TABLE = 'ZRF_T0000'.
LCAT_CAMPOS-COLTEXT = 'TRANSACCION'.
LCAT_CAMPOS-OUTPUTLEN = 10.
LCAT_CAMPOS-EMPHASIZE = 'C200'.
*LCAT_CAMPOS-NO_OUT = 'X'.
APPEND LCAT_CAMPOS TO CAT_CAMPOS.

endform. " init_tree


**&---------------------------------------------------------------------
**
**& Form build_hierarchy_header
**&---------------------------------------------------------------------
**
** build hierarchy-header-information
**----------------------------------------------------------------------
**
** -->P_L_HIERARCHY_HEADER strucxture for hierarchy-header
**----------------------------------------------------------------------
**
FORM build_hierarchy_header CHANGING
p_hierarchy_header TYPE treev_hhdr.

p_hierarchy_header-heading = 'DEPARTAMENTOS'(300).
p_hierarchy_header-tooltip = 'Escoga un departamento...'(400).
p_hierarchy_header-width = 10.
p_hierarchy_header-width_pix = ' '.

ENDFORM. " build_hierarchy_header
*&---------------------------------------------------------------------*
*& Form build_comment
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_LT_LIST_COMMENTARY text
* -->P_L_LOGO text
*----------------------------------------------------------------------*
form build_comment using
pt_list_commentary type slis_t_listheader
p_logo type sdydo_value.

data: ls_line type slis_listheader.
GET TIME.
* LIST HEADING LINE: TYPE H
clear ls_line.
ls_line-typ = 'H'.
* LS_LINE-KEY: NOT USED FOR THIS TYPE
ls_line-info = 'Rodocletas Feliz S.A. de C.V.'. "#EC NOTEXT
append ls_line to pt_list_commentary.
* STATUS LINE: TYPE S
clear ls_line.
ls_line-typ = 'S'.
ls_line-key = 'valid until'. "#EC NOTEXT
ls_line-info = SY-DATUM. "#EC NOTEXT
append ls_line to pt_list_commentary.
ls_line-key = 'time'.
ls_line-info = SY-UZEIT. "#EC NOTEXT
append ls_line to pt_list_commentary.
* ACTION LINE: TYPE A
clear ls_line.
ls_line-typ = 'A'.
* LS_LINE-KEY: NOT USED FOR THIS TYPE
ls_line-info = 'Seleccione un departamento y su transaccion'."NOTEXT
append ls_line to pt_list_commentary.

p_logo = 'ENJOYSAP_LOGO'.


endform. " build_comment
*&---------------------------------------------------------------------*
*& Form create_hierarchy
*&---------------------------------------------------------------------*
* CREACION DE JERARQUIA
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form create_hierarchy.
DATA: ls_TONO TYPE ZRF_T0000,
lt_TONO TYPE ZRF_T0000 OCCURS 0,
ldepartamento type ZRF_T0000-departamentos,
ldepartamento_anterior type ZRF_T0000-departamentos,
lpantalla type ZRF_T0000-pantallas,
lpantalla_anterior type ZRF_T0000-pantallas.

DATA: l_VISTA TYPE lvc_nkey,
l_DEPARTAMENTO_key TYPE lvc_nkey,
l_PANTALLA_key TYPE lvc_nkey,
l_last_key TYPE lvc_nkey.

* §4a. Select data
SELECT * FROM ZRF_T0000 INTO TABLE lt_TONO up to g_max rows.

* §4b. Sort output table according to your conceived hierarchy
* We sort in this order:
* departamento and pantalla (top level nodes)
* carrier id (next level)

SORT lt_TONO BY DEPARTAMENTOS pantallas.

* Note: The top level nodes do not correspond to a field of the
* output table. Instead we use data of the table to invent another
* hierarchy level above the levels that can be build by sorting.

* §4c. Add data to tree

LOOP AT lt_TONO INTO ls_TONO.
* Prerequesite: The table is sorted.
* You add a node everytime the values of a sorted field changes.
* Finally, the complete line is added as a leaf below the last
* node.

ldepartamento = ls_TONO-departamentos.
lpantalla = ls_tono-pantallas.

* Top level nodes:
IF ldepartamento <> ldepartamento_anterior.
ldepartamento_anterior = ldepartamento.

*Providing no key means that the node is added on top level:
PERFORM add_depto USING ldepartamento
''
CHANGING l_departamento_key.
* The departament changed, thus, there is no predecessor carrier
ENDIF.

* pantalla nodes:
* (always inserted as child of the last depto
* which is identified by 'l_departamento_key')
IF lpantalla <> lpantalla_anterior. "on change of l_carrid
lpantalla_anterior = lpantalla.
PERFORM add_pantalla_line USING ls_tono
l_departamento_key
CHANGING l_pantalla_key.
ENDIF.

*add the related information of each row into each nodo.
PERFORM add_complete_line USING ls_tono
l_pantalla_key
CHANGING l_last_key.
ENDLOOP.

ENDFORM. " create_hierarchy

**&---------------------------------------------------------------------
**& Form add_depto
**&---------------------------------------------------------------------
FORM add_depto USING depto TYPE c
p_relat_key TYPE lvc_nkey
CHANGING p_node_key TYPE lvc_nkey.

DATA: l_node_text TYPE lvc_value,
ls_tono TYPE ZRF_T0000,
l_month(15) TYPE c. "output string for depto

* get depto name for node text
l_node_text = depto.

* add node:
* ALV Tree firstly inserts this node as a leaf if you do not provide
* IS_NODE_LAYOUT with field ISFOLDER set. In form 'add_carrid_line'
* the leaf gets a child and thus ALV converts it to a folder
* automatically.
*
CALL METHOD g_alv_tree->add_node
EXPORTING
i_relat_node_key = p_relat_key
i_relationship = cl_gui_column_tree=>relat_last_child
i_node_text = l_node_text
is_outtab_line = ls_tono
IMPORTING
e_new_node_key = p_node_key.

ENDFORM. " add_month
**--------------------------------------------------------------------

FORM add_pantalla_line USING ps_TONO TYPE ZRF_T0000
p_relat_key TYPE lvc_nkey
CHANGING p_node_key TYPE lvc_nkey.

DATA: l_node_text TYPE lvc_value,
ls_TONO TYPE ZRF_T0000.

* add node
* ALV Tree firstly inserts this node as a leaf if you do not provide
* IS_NODE_LAYOUT with field ISFOLDER set. In form 'add_carrid_line'
* the leaf gets a child and thus ALV converts it to a folder
* automatically.
*
l_node_text = ps_TONO-pantallas.
CALL METHOD g_alv_tree->add_node
EXPORTING
i_relat_node_key = p_relat_key
i_relationship = cl_gui_column_tree=>relat_last_child
i_node_text = l_node_text
is_outtab_line = ls_TONO
IMPORTING
e_new_node_key = p_node_key.

ENDFORM. " add_carrid_line
*&---------------------------------------------------------------------
*
*& Form add_complete_line
*&---------------------------------------------------------------------
*
FORM add_complete_line USING ps_tono TYPE ZRF_T0000
p_relat_key TYPE lvc_nkey
CHANGING p_node_key TYPE lvc_nkey.

DATA: l_node_text TYPE lvc_value.

write PS_TONO-pantallas to l_node_text.

* add leaf:
* ALV Tree firstly inserts this node as a leaf if you do not provide
* IS_NODE_LAYOUT with field ISFOLDER set.
* Since these nodes will never get children they stay leaves
* (as intended).
*
CALL METHOD g_alv_tree->add_node
EXPORTING
i_relat_node_key = p_relat_key
i_relationship = cl_gui_column_tree=>relat_last_child
is_outtab_line = ps_tono
i_node_text = l_node_text
IMPORTING
e_new_node_key = p_node_key.

ENDFORM. " add_complete_line

*&---------------------------------------------------------------------*
*& Form register_events
*&---------------------------------------------------------------------*
* text

form register_events.
DATA: lt_events TYPE cntl_simple_events,
l_event TYPE cntl_simple_event,
l_event_receiver TYPE REF TO lcl_tree_event_receiver.

call method g_alv_tree->get_registered_events
importing events = lt_events.

l_event-eventid = cl_gui_column_tree=>eventid_node_double_click.
APPEND l_event TO lt_events.

CALL METHOD g_alv_tree->set_registered_events
EXPORTING
events = lt_events
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
illegal_event_combination = 3.
IF sy-subrc <> 0.
MESSAGE x208(00) WITH 'ERROR'. "#EC NOTEXT
ENDIF.

CREATE OBJECT l_event_receiver.
SET HANDLER l_event_receiver->handle_node_double_click FOR g_alv_tree.


endform. " register_events

Reporte Generador de Datos para BC_TRAVEL

posted under by Antonio Lopez
Para Generar los datos del modelo BC_TRAVEL es necesario llenar las tablas SPFLI, SLIGHT, SBOOK, esto lo podemos hacer mediante el programa/reporte S_FLIGHT_MODEL_DATA_GENERATOR.


Cuando lo ejecutemos nos pedira seleccionar una opcion de 5 disponibles:
* Borrar datos de las tablas
* Establecer datos minimos
* Establecer datos estandar
* Establecer datos maximos
* Establecer datos gigantes/monstruosos

Seleccionamos la opcion que queremos hacer y listo... tenemos llena nuestra base de datos para los ejemplos tanto de la clase de desarrollo SLIS como de la transaccion DWDM.

AUTHORITY CHECK

posted under by Antonio Lopez
Definición
Esta sentencia nos permite comprobar las autorizaciones de un usuario. Recordemos que dichas autorizaciones forman parte del perfil de usuario y el sistema las guarda en el maestro de usuarios.

Sintaxis:
AUTHORITY-CHECK OBJECT ''
ID 'campo1> { FIELD | DUMMY }
ID 'campo2> { FIELD | DUMMY }
...
ID 'campon> { FIELD | DUMMY }

es el nombre del objeto de autorización que hay que comprobar.
Un objeto de autorización esta compuesto de campos de autorización, todos ellos deben estar especificados a continuación de las cláusulas ID (, ..., ).

, ..., son los valores de autorización que hay que comprobar. puede ser un literal o una variable. El sistema busca en el perfil del usuario el objeto especificado en la sentencia, y comprueba si el usuario tiene autorización para todos los campos del objeto.

Se puede saltar la comprobación de un campo sustituyendo la cláusula FIELD por DUMMY. Si SY-SUBRC vale 0, el usuario esta autorizado, en caso contrario, SY-SUBRC toma un valor distinto de 0.

Ejemplo 1:
AUTHORITY-CHECK OBJECT 'M_EINF_WRK'
ID 'WERKS' FIELD '0002'
ID 'ACTVT' FIELD '02'.
AUTHORITY-CHECK OBJECT 'M_EINF_WRK'
ID 'WERKS' DUMMY
ID 'ACTVT' FIELD '01'.

AT USER-COMMAND

posted under by Antonio Lopez
Definición
Para permitir que el programa reaccione a las funciones que el usuario active se utiliza el evento AT USER-COMMAND.

Sintaxis:
AT USER-COMMAND.


Este evento define un bloque de proceso que se activa cuando seleccionamos un comando. Los comandos se pueden seleccionar a través de los botones proporcionados en el programa, o a través del campo OK-CODE. Este evento se utiliza en los informes interactivos cuando generan salidas secundarias.

El bloque de proceso del evento AT USER-COMMAND se ejecuta cuando el usuario activa un código de función presente en el status activo en ese momento. Este evento no se activa por los códigos de función predefinido del sistema o por el código de función PICK que, como ya hemos visto, activa el evento AT LINE-SELECTION. El campo del sistema SY-UCOMM nos permite saber qué código de función ha activado el usuario.

Ejemplo 1:
DATA: NUMBER1 TYPE I VALUE 20,
NUMBER2 TYPE I VALUE 5,
RESULT TYPE I.

START-OF-SELECTION.
WRITE: / NUMBER1, '?', NUMBER2.
AT USER-COMMAND.
CASE SY-UCOMM.
WHEN 'ADD'.
RESULT = NUMBER1 + NUMBER2.
WHEN 'SUBT'.
RESULT = NUMBER1 - NUMBER2.
WHEN 'MULT'.
RESULT = NUMBER1 * NUMBER2.
WHEN 'DIVI'.
RESULT = NUMBER1 / NUMBER2.
WHEN OTHERS.
WRITE 'Unknown function code'.
EXIT.
ENDCASE.
WRITE: / 'Result:', RESULT.

AT .. ENDAT

posted under by Antonio Lopez
Definición
La sentencia AT .. ENDAT sólo puede ser utilizada dentro de un bucle LOOP .. ENDLOOP para extractos, e identifica un bloque de proceso. La sentencia se ejecuta cuando se detecta que cambia algún valor en el field-group.

Sintaxis:
AT { WITH }.

ENDAT.

La setencia AT se cierra con ENDAT, identificando de esta forma un bloque de proceso.

La cláusula WITH se utiliza para indicar que la sentencia AT se debe ejecutar si para el field-group le
sigue el field-group .

Ejemplo 1:
DATA: NAME(30),
SALES TYPE I.
FIELD-GROUPS: HEADER, INFOS.
INSERT: NAME INTO HEADER,
SALES INTO INFOS.
...
LOOP.
AT NEW NAME.
NEW-PAGE.
ENDAT.
...
AT END OF NAME.
WRITE: / NAME, SUM(SALES).
ENDAT.
ENDLOOP.

SD

posted under by Antonio Lopez
Este es resumen de las transacciones del módulo de ventas y distribución (SD)
de la versión 3.x del sistema SAP R/3:
Cód Descripción
OLSD Configuración de SD
VB21 Volumen de ventas y compras
VK15 Múltiples condiciones de ventas.
VA01 Sol. Material Almacén. Crear
VA02 Sol. Material Almacén. Modificar
VA03 Sol. Material Almacén. Visualizar
VA05 Sol. Material Almacén. Lista
VA11 Crear solicitud de venta
VA12 Modificar solicitud de venta
VA13 Visualizar solicitud de venta
VA15 Lista solicitud de venta
VL02 Entrega

RH

posted under by Antonio Lopez
Este es resumen de las transacciones del módulo de recursos humanos (HR) de
la versión 3.x del sistema SAP R/3:
Cód Descripción
PA03 Cambia el registro de control de nóminas
PA20 Visualiza infotipo PA
PA30 Crearo modifica infotipos PA.
PP02 Entrada rápida para objetos de tipo PD
PU00 Borra infotipo PA de un empleado.

LOGISTICA

posted under by Antonio Lopez
Este es resumen amplio de las transacciones del módulo de logística (MM) de
la versión 3.x del sistema SAP R/3:

Cód Descripción
ME00 Gestión Materiales. Compras
MB00 Gestión Materiales. Gestión de Stocks
MR00 Gestión Materiales. Verificar Facturas
MRBE Gestión Materiales. Valoración
LPRO Gestión Materiales. Pronostico de Material
MD00 Gestión Materiales. Planificación Necesidades
MI00 Gestión Materiales. Inventario
MM00 Gestión Materiales. Maestro Materiales
CL00 Gestión Materiales. Clasificación
VA00 Gestión comercial. Ventas
VL00 Gestión Materiales. Expedición
MCE9 Sistema Info. Compras.
MCC2 Sistema Info. Gestión Stocks
MCT2 Sistema Info. Comercial
MC01 Sistema Info. Buscar vía Set Info.
MC02 Sistema Info. Buscar vía Texto
MCB1 Sistema Info. Controlling Stocks
ME90 Imprimir Orden de Entrega
MBSF Conformidad. Liberar Recepción
MK03 Entorno. Consulta de Proveedores
ME3N Entorno. Consulta Contratos
MM03 Entorno. Consulta de maestro de materiales
MR03 Entorno. Consulta Facturas
MMBE Entorno. Resumen de Stocks
MB51 Entorno. Consulta Mov. Material
MB01 Mvtos. Almacén. Entrada por pedido
MB1A Mvtos. Almacén. Salida de material
MBST Mvtos. Almacén. Anular documento
MBRL Mvtos. Almacén. Devolución a Proveedor
MB03 Mvtos. Almacén. Visualizar documento
ME56 Solicitud de Pedido. Asignar contrato.
ME5A Sol. Pedido. Listados. Generalidades
ME5K Sol. Pedido. Listados. Por imputación
ME5W Sol. Pedido. Listados. Nueva presentación
ME56 Sol. Pedido. Funciones siguiente. Asignar
ME57 Sol. Pedido. Funciones siguientes. Asignar y tratar
ME52 Sol. Pedido. SolP generadas. MRP. Modificar
ME53 Sol. Pedido. SolP generadas MRP. Visualizar
ME4L Pet. Ofertas/Oferta. Listados. Por proveedor
ME4M Pet. Ofertas/Oferta. Listados. Por material
ME4S Pet. Ofertas/Oferta. Listados. Por licitación
ME4C Pet. Ofertas/Oferta. Listados. Por grupo artículos
ME4N Pet. Ofertas/Oferta. Listados. Por petición oferta
ME2L Pet. Ofertas/Oferta. Listados. Por proveedor.
ME41 Pet. Ofertas/Oferta. Crear
ME42 Pet. Ofertas/Oferta. Modificar
ME43 Pet. Ofertas/Oferta. Visualizar
ME47 Pet. Ofertas/Oferta. Actualizar
ME48 Pet. Ofertas/Oferta. Visualizar
ME49 Pet. Ofertas/Oferta. Comparación precios
ME21 Pedido/Contrato. Crear
ME58 Pedido/Contrato. Mediante sol. pedido
ME22 Pedido/Contrato. Modificar
ME23 Pedido/Contrato. Visualizar
ME28 Pedido/Contrato. Liberar
ME2L Pedido/Contrato. Listados. Por proveedor
ME2M Pedido/Contrato. Listados. Por material
ME2K Pedido/Contrato. Listados. Por imputación
ME2C Pedido/Contrato. Listados. Por grupo de artículos
ME2N Pedido/Contrato. Listados. Por número de pedido
ME31 Pedido/Contrato. Pedido Abierto. Crear
ME32 Pedido/Contrato. Pedido Abierto. Modificar
ME33 Pedido/Contrato. Pedido Abierto. Visualizar
ME58 Pedido/Contrato. Pedido de Baremo. Mediante sol. Pedido
MB01 Conformidad. Crear
MB02 Conformidad. Modificar
MB03 Conformidad. Visualizar
ME11 Conformidad. Registro Info. Crear
ME12 Conformidad. Registro Info. Modificar
ME13 Conformidad. Registro Info. Visualizar
ME14 Conformidad. Registro Info. Modificaciones
ME15 Conformidad. Registro Info. Petición de borrado
ME01 Conformidad. Libro de Pedidos. Actualizar
ME03 Conformidad. Libro de Pedidos. Visualizar
ME04 Conformidad. Libro de Pedidos. Modificaciones
MEQ1 Conformidad. Regulación por cuota. Actualizar
MEQ3 Conformidad. Regulación por cuota. Visualizar
MEQ4 Conformidad. Regulación por cuota. Modificaciones
MEQM Conformidad. Regulación por cuota. Listado por material
ME61 Conformidad. Evaluación proveedor. Actualizar
ME62 Conformidad. Evaluación proveedor. Visualizar
ME63 Conformidad. Evaluación proveedor. Reevaluación autom.
ME64 Conformidad. Evaluación proveedor. Comparación evaluac.
ME6A Conformidad. Evaluación proveedor. Modificaciones
ME6H Conformidad. Evaluación proveedor. Análisis estándar
ME1l Conformidad. Listados. Por proveedor
ME1M Conformidad. Listados. Por material
ME1W Conformidad. Listados. Por grupo artículos
ME1P Conformidad. Listados. Histor. precio-pedido
ME1E Conformidad. Listados. Histor. precio-oferta.
ME0M Conformidad. Visualizar listado. Por material.
SU53 Visualiza los objetos de autorización de un usuario.

CONTROL DE ACCESOS

posted under by Antonio Lopez
Este es resumen de las transacciones del módulo de control accesos (CA) de la
versión 3.x del sistema SAP R/3:

Cód Descripción
SU01 Administración de usuarios
SU02 Administración de perfiles
SU03 Administración de autorizaciones
PFCG Generador automático de perfiles
SUIM Sistema de información

ABAP

posted under by Antonio Lopez
Este es resumen de las transacciones del entorno de programación y de administración del sistema más utilizadas de la versión 3.x del sistema SAP R/3:

Cód Descripcion
BMV0 Gestión de los log de direct input.
OY19 Comparación del contenido de una tabla entre dos sistemas SAP R/3
SCAM CATT Management
SCAT Computer Aided Test Tool
SE01 Sistema de gestión de transportes
SE07 Estatus de las ordenes de transporte
SE09 Órdenes de transporte Workbench
SE10 Órdenes de transporte Customizong
SE11 Mantenimiento del diccionario de datos
SE12 Visualización del diccionario de datos
SE13 Mantenimiento de tablas
SE14 Diccionario de datos, utilidad para bases de datos
SE15 Sistema del repositorio
SE16 Visor de datos (Datos Browser)
SE17 Visor de tablas
SE30 Análisis de tiempos de ejecución
SE32 Mantenimiento de elementos de texto.
SE35 Mantenimiento de módulos de diálogo
SE36 Mantenimiento de bases de datos lógicas
SE37 Mantenimiento de módulos de función
SE38 Mantenimiento de programas (editor ABAP/4)
SE39 Editor split screen
SE41 Manteniemiento de menús (menú Painter)
SE43 Mantenimiento de menús de área.
SE51 Mantenimiento de dynpros (screen painter)
SE54 Mantenimiento de vistas
SE61 Gestión de la documentación
SE62 Utilidad ramo industrial
SE63 Traductor
SE65 Documentación estadística de textos breves
SE66 Documentación estadística de textos explicativos
SE68 Gestión del departamento de traducción
SE71 SAPscript layout set
SE72 SAPscript estilos
SE73 SAPscript fonts
SE74 SAPscript conversión de formato
SE75 SAPscript settings
SE76 SAPscript traductor Layout Sets
SE77 SAPscript traductor estilos
SE80 Visor de objetos (object browsers)
SE81 Jerarquía de aplicación (SAP)
SE82 Jerarquía de aplicación (cliente)
SE84 Sistema de información del repositorio.
SE85 Sistema de información del repositorio.
SE86 Sistema de información del repositorio.
SE87 Gestión del modelo de datos (data modeler)
SE88 Sistema de información
SE91 Gestión de mensajes
SE92 Gestión de mensajes del log del sistema
SE93 Gestión de códigos de transacción
SEU Gestión de objetos (object browser)
SO32 Gestión de usuarios SAPOffice
SHDO Mantenimiento de variantes
SQ00 ABAP/4 Query: queries
SQ01 ABAP/4 Query: mantenimiento de queries
SQ02 ABAP/4 Query: mantenimiento de areas funcionales
SQ03 ABAP/4 Query: mantenimiento de grupos de usuarios
SQ07 ABAP/4 Query: comparación del lenguaje
SM35 Gestión de juegos de datos (Batch-Input)
SM37 Mantenimiento de JOBS
SM21 Ver el log del sistema. Se utiliza para ver más información cuando ocurre
un DUMP.
SHD0 Mantenimiento de transacciones de variante.
SO00 Envia un mensaje a través de SAP. El destinatario puede ser de Internet,
X400, etc..
SMOD Gestión de User-exits.

REPORTES - ALV - TEXTEDIT (CUSTOM CONTROL)

posted under by Antonio Lopez
PROGRAMA PARA HACER UN TEXTO EDITABLE EN UN CUSTOM CONTROL, IMPLEMENTANDO METODOS DE EVENTOS (F1 Y F4), EL LAYOUT DE LA PANTALLA DEBE SER UN CUSTOM CONTROL LLAMADO "textedit" Y UN CAMPO DE SALIDA LLAMADO "field", SU FLUJO LOGICO ES:

PROCESS BEFORE OUTPUT.
MODULE status_0100.

PROCESS AFTER INPUT.
MODULE cancel AT EXIT-COMMAND.
MODULE user_command_0100.




REPORT demo_custom_control .

* Declarations *****************************************************

CLASS event_handler DEFINITION.
PUBLIC SECTION.
METHODS: handle_f1 FOR EVENT f1 OF cl_gui_textedit
IMPORTING sender,
handle_f4 FOR EVENT f4 OF cl_gui_textedit
IMPORTING sender.
ENDCLASS.

DATA: ok_code LIKE sy-ucomm,
save_ok LIKE sy-ucomm.

DATA: init,
container TYPE REF TO cl_gui_custom_container,
editor TYPE REF TO cl_gui_textedit.

DATA: event_tab TYPE cntl_simple_events,
event TYPE cntl_simple_event.

DATA: line(256) TYPE c,
text_tab LIKE STANDARD TABLE OF line,
field LIKE line.

DATA handle TYPE REF TO event_handler.

* Reporting Events ***************************************************

START-OF-SELECTION.
line = 'First line in TextEditControl'.
APPEND line TO text_tab.
line = '--------------------------------------------------'.
APPEND line TO text_tab.
line = '...'.
APPEND line TO text_tab.
CALL SCREEN 100.

* Dialog Modules *****************************************************

MODULE status_0100 OUTPUT.
SET PF-STATUS 'SCREEN_100'.
IF init is initial.
init = 'X'.
CREATE OBJECT:
container EXPORTING container_name = 'TEXTEDIT',
editor EXPORTING parent = container,
handle.
event-eventid = cl_gui_textedit=>event_f1.
event-appl_event = ' '. "system event
APPEND event TO event_tab.
event-eventid = cl_gui_textedit=>event_f4.
event-appl_event = 'X'. "application event
APPEND event TO event_tab.
CALL METHOD: editor->set_registered_events
EXPORTING events = event_tab.
SET HANDLER handle->handle_f1
handle->handle_f4 FOR editor.
ENDIF.
CALL METHOD editor->set_text_as_stream
EXPORTING text = text_tab.
ENDMODULE.

MODULE cancel INPUT.
LEAVE PROGRAM.
ENDMODULE.

MODULE user_command_0100 INPUT.
save_ok = ok_code.
CLEAR ok_code.
CASE save_ok.
WHEN 'INSERT'.
CALL METHOD editor->get_text_as_stream
IMPORTING text = text_tab.
WHEN 'F1'.
MESSAGE i888(sabapdocu) WITH text-001.
WHEN OTHERS.
MESSAGE i888(sabapdocu) WITH text-002.
CALL METHOD cl_gui_cfw=>dispatch.
ENDCASE.
SET SCREEN 100.
ENDMODULE.

* Class Implementations **********************************************

CLASS event_handler IMPLEMENTATION.
METHOD handle_f1.
DATA row TYPE i.
MESSAGE i888(sabapdocu) WITH text-003.
CALL METHOD sender->get_selection_pos
IMPORTING from_line = row.
CALL METHOD sender->get_line_text
EXPORTING line_number = row
IMPORTING text = field.
CALL METHOD cl_gui_cfw=>set_new_ok_code
EXPORTING new_code = 'F1'.
CALL METHOD cl_gui_cfw=>flush.
ENDMETHOD.

METHOD handle_f4.
DATA row TYPE i.
MESSAGE i888(sabapdocu) WITH text-004.
CALL METHOD sender->get_selection_pos
IMPORTING from_line = row.
CALL METHOD sender->get_line_text
EXPORTING line_number = row
IMPORTING text = field.
CALL METHOD cl_gui_cfw=>flush.
ENDMETHOD.
ENDCLASS.

Pop-up para recibir un dato del usuario

posted under by Antonio Lopez

CALL FUNCTION 'POPUP_TO_GET_ONE_VALUE'
EXPORTING
textline1 = 'Introduce el nombre!!'
textline2 = 'Nombre del Transportista: '
titel = 'Alta de material en almacen'
valuelength = 80
IMPORTING
value1 = l_texto
EXCEPTIONS
titel_too_long = 1
OTHERS = 2.

Simple Module Pool

posted under by Antonio Lopez
* Este module pool pretende introducirnos al mundo
* de la programacion, no es nada elaborado pero
* contiene las sentencias basicas SELECT, INSERT,
* DELETE para una tabla de nombre ZRF_T0024, cuyos
* campos son: ZRF_T0024-ID_CODIGO,
* ZRF_T0024-DESCRIPCION ZRF_T0024-DIAS. Necesitaremos
* crear una screen, con tres input/output fields de
* nombre igual que la tabla:
* ZRF_T0024-ID_CODIGO, ZRF_T0024-DESCRIPCION ZRF_T0024-DIAS.
* Este es el codigo.



*&--------------------------------------*
*& Include ZRF_602TOP *
*&--------------------------------------*
PROGRAM ZRF_0602.
TABLES:
ZRF_T0024. "CODIGOS DE MTTO


*&--------------------------------------*
*& screen *
*&--------------------------------------*
PROCESS BEFORE OUTPUT.
MODULE PBO.
*
PROCESS AFTER INPUT.
FIELD ZRF_T0024-ID_CODIGO MODULE DESPLIEGA_CODIGOS_MTTO.
MODULE PAI.



*&-------------------------------------*
*& Module PAI INPUT *
*&-------------------------------------*
module PAI input.

CASE SY-UCOMM.
WHEN 'ADD'.
PERFORM NUEVO_602.
WHEN 'DELT'.
PERFORM BORRAR_602.
WHEN 'CLEAN'.
PERFORM LIMPIAR_602.
WHEN 'SAVE'.
PERFORM GUARDAR_602.
WHEN 'EXIT' OR 'BACK' OR 'CANC'.
PERFORM exit_program.
ENDCASE.

endmodule. " PAI INPUT

*&-----------------------------------------*
*& Module PBO OUTPUT *
*&-----------------------------------------*
module PBO output.
SET PF-STATUS 'ZRF_602GUI'.
SET TITLEBAR 'MAINTITLE'.
endmodule. " PBO OUTPUT

*--------------------------------------*
* INCLUDE ZRF_602F01 *
*--------------------------------------*
*&----------------------*
*& Form NUEVO_602
*&----------------------*
form NUEVO_602.
DATA: TEMPO LIKE ZRF_T0024-ID_CODIGO.
SELECT MAX( ID_CODIGO ) FROM ZRF_T0024 INTO TEMPO.
ZRF_T0024-ID_CODIGO = TEMPO + 1.
endform. " NUEVO_602
*&------------------------*
*& Form BORRAR_602
*&------------------------*
form BORRAR_602.
DATA L_RESP.
CALL FUNCTION 'POPUP_TO_CONFIRM'
EXPORTING
TITLEBAR = 'Eliminacion de registros!!!'
DIAGNOSE_OBJECT = ' '
text_question = '¿Desea eliminar el registro actual?'
TEXT_BUTTON_1 = 'si'(001)
ICON_BUTTON_1 = ' '
TEXT_BUTTON_2 = 'no'(002)
ICON_BUTTON_2 = ' '
IMPORTING
ANSWER = L_RESP.
IF L_RESP <> 'A'.
IF L_RESP = 1. "Sí
DELETE FROM ZRF_T0024 WHERE ID_CODIGO = ZRF_T0024-ID_CODIGO.
PERFORM LIMPIAR_602.
ENDIF.
ENDIF.
endform. " BORRAR_602
*&-------------------------*
*& Form LIMPIAR_602
*&-------------------------*
form LIMPIAR_602.
ZRF_T0024-ID_CODIGO = ''.
ZRF_T0024-DESCRIPCION = ''.
ZRF_T0024-DIAS = ''.
endform. " LIMPIAR_602
*&---------------------------*
*& Form GUARDAR_602
*&---------------------------*
form GUARDAR_602.
INSERT INTO ZRF_T0024 VALUES ZRF_T0024.
PERFORM LIMPIAR_602.

FINANZAS

posted under by Antonio Lopez
Este es resumen de las transacciones administración financiera (FI) de la
versión 3.x del sistema SAP R/3:
Cód Descripción
FGRP Pantalla del report writer
FM12 Visualiza documentos bloqueados por el usuario.
FST2 Inserta un nombre específico para una cuenta de tipo G/L.
FST3 Visualiza el nombre de una cuenta G/L.
KEA0 Mantenimiento de operaciones de interés.
KEKE Actividad CO-PA.
KEKK Asignación de operaciones de interés.
KL04 Borrar un tipo de actividad.
KS04 Borra un centro de coste.
KSH2 Cambia o borro un grupo de centro de coste.
OBR2 Borra el programa de clientes, vendedores y cuentas G/L.
OKC5 Borra un grupo de elementos/costes.
OKE1 Borra datos de una transacción.
OKE2 Borra un centro de beneficio.
OKI1 Determina el numero de actividad de los tipos de actividad.
OMZ1 Define el papel de los socios.

Pop-up con botones personalizados

posted under by Antonio Lopez

*******************************
* pop-up para personalizacion de botones
*******************************
DATA L_RESP.
CALL FUNCTION 'POPUP_TO_CONFIRM'
EXPORTING
TITLEBAR = 'Confirmacion de botones'
DIAGNOSE_OBJECT = ' '
text_question = '¿Desea cambiar el registro seleccionado?'
TEXT_BUTTON_1 = 'SIMON'(001)
ICON_BUTTON_1 = ' '
TEXT_BUTTON_2 = 'NEL PASTEL'(002)
ICON_BUTTON_2 = ' '
IMPORTING
ANSWER = L_RESP.
IF L_RESP <> 'A'. "verifica que no haya cancelado el usuario.
IF L_RESP = 1. "Símon
* usted selecciono que SIMON.
ELSE
* Usted selecciono que NEL.
ENDIF.

Pop-up de Confirmacion

posted under by Antonio Lopez

*******************************
* pop-up para confirmacion de pasos
*******************************

DATA L_RESP.
CALL FUNCTION 'POPUP_TO_CONFIRM_STEP'
EXPORTING
TEXTLINE1 = 'pop-up para confirmacion de pasos'
TEXTLINE2 = 'desea usted escoger el boton 1?'
TITEL = 'Confirmacion de pasos'
IMPORTING
ANSWER = L_RESP
EXCEPTIONS
OTHERS = 1.

IF L_RESP = 'J'. "Sí
* se selecciono el boton de SI/ACEPTO
ENDIF.

Colores

posted under by Antonio Lopez

Batch Input

posted under by Antonio Lopez
Este reporte sube los datos contenidos en un archivo de texto plano, que a su vez ha sido guardado en formato txt y separados los valores por tabulador.

REPORT ZCMABI_MM001_MON .

************************************************************************
* Description : subir datos de un archivo plano separado por tabs
* Inputs : archivo de texto
* Outputs : log de errores y aciertos
* Error/Return Codes : Ninguno
* External References: WS_FILENAME_GET, WS_UPLOAD
* transactions
************************************************************************

********* TABLES *******************************************************

********* DATA: VARIABLES **********************************************
DATA: w_msg(50) TYPE c, "Message string by Input File Proc.
w_n0 LIKE sy-tabix, "Counter: records read
w_n1 LIKE sy-tabix, "Counter: records selected
w_n2 LIKE sy-tabix. "Counter: records processed


********* DATA: INTERNAL TABLES, RANGES ********************************
*DATA: it_file TYPE zcmata_mm001_mxe OCCURS 0 WITH HEADER LINE.
DATA: BEGIN OF it_file OCCURS 0,
MONEDA LIKE ZCMATA_MM001_MON-MONEDA,
NOMBRE_LARGO LIKE ZCMATA_MM001_MON-NOMBRE_LARGO,
END OF it_file.

DATA:
bdc_tab LIKE STANDARD TABLE OF bdcdata WITH HEADER LINE,
err_bi LIKE STANDARD TABLE OF bdcmsgcoll WITH HEADER LINE.

PARAMETERS: p_fname LIKE rlgrap-filename OBLIGATORY. "Filename Prefix


*************************
**** at selection-screen.
*************************
*--------- F4 for PC Input file ----------------------------------------
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_fname.
PERFORM select_file.

AT SELECTION-SCREEN ON p_fname.
PERFORM try_upload_file.

********************
* at selection-screen.
********************
*******************
START-OF-SELECTION.
*******************
PERFORM numerate_lines.
PERFORM validate_file.

*****************
END-OF-SELECTION.
*****************

*PERFORM PROCESS_FILE.
PERFORM print_statistic.
PERFORM print_footer.







*---------------------------------------------------------------------*
* FORM SELECT_FILE *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
FORM select_file.
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
def_path = 'c:\'
mask = ',Text Files,*.txt;*.doc,All Files,*.*.'(101)
title = 'Select File'(100)
IMPORTING
filename = p_fname
EXCEPTIONS
inv_winsys = 1
no_batch = 2
selection_cancel = 3
selection_error = 4
OTHERS = 5.
IF sy-subrc <> 0 AND sy-subrc <> 3.
MESSAGE e102(yb) WITH 'Error Selecting File'(007).
ENDIF.
ENDFORM.

*---------------------------------------------------------------------*
* FORM TRY_UPLOAD_FILE *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
FORM try_upload_file.
CALL FUNCTION 'WS_UPLOAD'
EXPORTING
filename = p_fname
filetype = 'DAT'
TABLES
data_tab = it_file
EXCEPTIONS
conversion_error = 1
file_open_error = 2
file_read_error = 3
invalid_table_width = 4
invalid_type = 5
no_batch = 6
unknown_error = 7
OTHERS = 8.
IF sy-subrc <> 0.
CASE sy-subrc.
* =to be customized=: text-006 = 'Uploading Error:'
* text-06n = Concrete Error Description
WHEN 1. CONCATENATE text-006 text-061 INTO w_msg SEPARATED BY space.
WHEN 2. CONCATENATE text-006 text-062 INTO w_msg SEPARATED BY space.
WHEN 3. CONCATENATE text-006 text-063 INTO w_msg SEPARATED BY space.
WHEN 4. CONCATENATE text-006 text-064 INTO w_msg SEPARATED BY space.
WHEN 5. CONCATENATE text-006 text-065 INTO w_msg SEPARATED BY space.
WHEN 6. CONCATENATE text-006 text-066 INTO w_msg SEPARATED BY space.
WHEN 7. CONCATENATE text-006 text-067 INTO w_msg SEPARATED BY space.
WHEN 8. CONCATENATE text-006 text-068 INTO w_msg SEPARATED BY space.
ENDCASE.
MESSAGE e102(yb) WITH w_msg.
ENDIF.
IF it_file IS INITIAL.
MESSAGE e102(yb) WITH 'Empty File!'(013).
ENDIF.
ENDFORM.


*---------------------------------------------------------------------*
* FORM NUMERATE_LINES *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
FORM numerate_lines.
DESCRIBE TABLE it_file LINES w_n0.
ENDFORM.


*---------------------------------------------------------------------*
* FORM VALIDATE_FILE *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
FORM validate_file.
DATA:
lit_file LIKE LINE OF it_file.

PERFORM bdc_open. "< Apertura del juego de datos

WRITE: /5 'NOMENCLATURA', 20 'NOMBRE LARGO'.
LOOP AT it_file.
MOVE it_file TO lit_file.

AT FIRST.
PERFORM dynpro USING:
'X' 'ZCMAMP_MM001_MON' '0100',
'' 'BDC_OKCODE' '=ADD',
'' 'BDC_CURSOR' 'ZCMATA_MM001_MON-MONEDA'.
ENDAT.

PERFORM dynpro USING:
'X' 'ZCMAMP_MM001_MON' '0100',
'' 'BDC_OKCODE' '=ADD',
'' 'BDC_CURSOR' 'ZCMATA_MM001_MON-NOMBRE_LARGO',
'' 'ZCMATA_MM001_MON-MONEDA' LIT_FILE-MONEDA,
'' 'ZCMATA_MM001_MON-NOMBRE_LARGO' LIT_FILE-NOMBRE_LARGO.


WRITE: /5 lit_file-MONEDA, 20 lit_file-NOMBRE_LARGO.
ENDLOOP.

PERFORM dynpro USING:
'X' 'ZCMAMP_MM001_MON' '0100',
'' 'BDC_OKCODE' '=SAVE',
'' 'BDC_CURSOR' 'ZCMATA_MM001_MON-NOMBRE_LARGO',
'' 'ZCMATA_MM001_MON-MONEDA' LIT_FILE-MONEDA,
'' 'ZCMATA_MM001_MON-NOMBRE_LARGO' LIT_FILE-NOMBRE_LARGO.



CALL TRANSACTION 'ZCMA_MM001_TMON' USING bdc_tab
MODE 'N'
MESSAGES INTO err_bi.

SKIP 2.
WRITE: 'TABLA DE ERRORES' COLOR 7 ON.
LOOP AT ERR_BI.
WRITE: / 'ERROR NUMERO:' COLOR 2 ON, SY-TABIX COLOR 2 ON.
WRITE: / 'ID MSG', ERR_BI-MSGID,
/ 'NUMBER', ERR_BI-MSGNR,
/ 'TIPO', ERR_BI-MSGTYP,
/ 'VAR1', ERR_BI-MSGV1,
/ 'VAR2', ERR_BI-MSGV2,
/ 'VAR3', ERR_BI-MSGV3,
/ 'VAR4', ERR_BI-MSGV4,
/ 'FIELD', ERR_BI-FLDNAME.
ENDLOOP.

CALL FUNCTION 'WS_DOWNLOAD'
EXPORTING
* BIN_FILESIZE = ' '
* CODEPAGE = ' '
FILENAME = 'C:\ERRORES_BIM.TXT'
FILETYPE = 'ASC'
* MODE = ' '
* WK1_N_FORMAT = ' '
* WK1_N_SIZE = ' '
* WK1_T_FORMAT = ' '
* WK1_T_SIZE = ' '
* COL_SELECT = ' '
* COL_SELECTMASK = ' '
* NO_AUTH_CHECK = ' '
* IMPORTING
* FILELENGTH =
TABLES
data_tab = err_bi
* FIELDNAMES =
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.

IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.


DESCRIBE TABLE it_file LINES w_n1.

PERFORM bdc_closed. " Cierre del juego de datos
ENDFORM.


*---------------------------------------------------------------------*
* FORM PRINT_STATISTIC *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
FORM print_statistic.
SKIP 1.
WRITE: / 'Read Lines'(014) INTENSIFIED ON,
AT 40 w_n0 INTENSIFIED OFF.
WRITE: / 'Selected Lines'(015) INTENSIFIED ON,
AT 40 w_n1 INTENSIFIED OFF.
WRITE: / 'Processed Lines'(016) INTENSIFIED ON,
AT 40 w_n1 INTENSIFIED OFF.
WRITE: / 'ARCHIVO DE ERRORES GUARDADO: (C:\ERRORES_BI.TXT)'.

ENDFORM.


*---------------------------------------------------------------------*
* FORM PRINT_FOOTER *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
FORM print_footer.
* =to be customized=
WRITE /'*** End Of Report ***'.
ENDFORM.

*......................................................................*
* DYNPRO
*......................................................................*
FORM dynpro USING value(dynbegin)
value(name)
value(value).

CLEAR bdc_tab.
IF dynbegin = 'X'.
bdc_tab-program = name.
bdc_tab-dynpro = value.
bdc_tab-dynbegin = 'X'.
ELSE.
bdc_tab-fnam = name.
bdc_tab-fval = value.
ENDIF.
APPEND bdc_tab.
CLEAR bdc_tab.

ENDFORM.

*......................................................................*
* BCD OPEN
*......................................................................*
FORM bdc_open.
CALL FUNCTION 'BDC_OPEN_GROUP'
EXPORTING
client = sy-mandt
group = 'antonio' " SM35
keep = 'X'
user = sy-uname.
ENDFORM.

*......................................................................*
* BCD CLOSED
*......................................................................*
FORM bdc_closed.
CALL FUNCTION 'BDC_CLOSE_GROUP'
EXCEPTIONS
not_open = 1
queue_error = 2
OTHERS = 3.
ENDFORM.

Google
 
top