MUNDOSAP

MUNDOSAP (foro/index.php)
-   Programación ABAP IV (foro/forumdisplay.php?f=4)
-   -   FUNCIONES como crear y llamarlas (foro/showthread.php?t=65269)

Anthony Martinez 19/11/12 01:50:17

FUNCIONES como crear y llamarlas
 
Buenas noches a toda la comunidad recien estoy aprendiendo el lenguaje ABAP y en el ejercicio que desarrolle tengo unas llamadas de funciones y la respectiva creacion de cada funcion, lo que no comprendo es a que se debe o que estoy haciendo mal al llamar a una funcion de la sgte manera en esta linea: PERFORM FILL_RIGHT_CHARACTERS USING '*' CHANGING TEXTO2 porque al querer activar mi programita me sale error justo en esta linea en que llamo a esta funcion en cambio si esta linea la comento ya puedo activar mi programita, pero a que se debe el error ?? no comprendo, por favor desearia el apoyo de la comunidad del foro para despejarme esta duda y entender a que se debe el error y como seria la forma correcta de llamar a esta funcion?.
El codigo que desarrolle es el siguiente:


TYPES: X_LINES TYPE STRING.
DATA: T_TABLE TYPE STANDARD TABLE OF X_LINES.

FIELD-SYMBOLS: <FS_TABLE> LIKE LINE OF T_TABLE.

DATA: TEXTO2(30) TYPE C,
AUX_TEXT(30) TYPE C,
V_LEN TYPE I,
V_LONG TYPE I,
AUV TYPE STRING.

SELECTION-SCREEN BEGIN OF BLOCK DEC_TO_BIN2 WITH FRAME.
PARAMETERS:
P_TEXTO(20) TYPE C.
SELECTION-SCREEN END OF BLOCK DEC_TO_BIN2.

START-OF-SELECTION.
PERFORM INICIALIZAR4.
* PERFORM FILL_RIGHT_CHARACTERS USING '*' CHANGING TEXTO2.
PERFORM IMPRIMIR3 USING TEXTO2.

PERFORM INICIALIZAR4.
PERFORM CAPITALIZE_LETTERS CHANGING TEXTO2.
PERFORM IMPRIMIR3 USING TEXTO2.

PERFORM INICIALIZAR4.
PERFORM SPLIT_LONG_TEXT TABLES T_TABLE USING TEXTO2.
PERFORM IMPRIMIR_TABLA TABLES T_TABLE.

PERFORM INICIALIZAR4.
PERFORM REVERSE_STRING USING TEXTO2.
PERFORM IMPRIMIR3 USING TEXTO2.


FORM INICIALIZAR4.
TEXTO2 = P_TEXTO.
SKIP 1.
ENDFORM.

FORM IMPRIMIR_TABLA TABLES T_TAB.
LOOP AT T_TAB
ASSIGNING <FS_TABLE>.
WRITE:/ <FS_TABLE>.
ENDLOOP.
ENDFORM.

FORM IMPRIMIR3 USING L_TEXTO.
WRITE:/ TEXTO2.
ENDFORM.

*LLENA UNA CADENA DE CARACTERES A LA DERECHA
FORM FILL_RIGTH_CHARACTERS USING L_CHAR CHANGING L_TEXTO.

V_LEN = STRLEN( L_TEXTO ).
DESCRIBE FIELD L_TEXTO LENGTH V_LONG IN CHARACTER MODE.
V_LEN = V_LONG - V_LEN.

DO V_LEN TIMES.
CONCATENATE L_TEXTO L_CHAR INTO L_TEXTO.
ENDDO.

ENDFORM.

*CAPITALIZA UN TEXTO DADO
FORM CAPITALIZE_LETTERS CHANGING L_TEXTO.
TRANSLATE L_TEXTO TO LOWER CASE.
SPLIT L_TEXTO AT SPACE INTO TABLE T_TABLE.
CLEAR L_TEXTO.

LOOP AT T_TABLE ASSIGNING <FS_TABLE>.
V_LONG = STRLEN( <FS_TABLE> ).
V_LONG = V_LONG - 1.
AUX_TEXT = <FS_TABLE>+0(1).
TRANSLATE AUX_TEXT TO UPPER CASE.
CONCATENATE AUX_TEXT <FS_TABLE>+1(V_LONG) INTO AUX_TEXT.
CONCATENATE L_TEXTO AUX_TEXT INTO L_TEXTO SEPARATED BY SPACE.
SHIFT L_TEXTO LEFT DELETING LEADING SPACE.
ENDLOOP.
ENDFORM.


FORM SPLIT_LONG_TEXT TABLES T_TAB USING L_TEXTO.

CALL FUNCTION 'RSDG_WORD_WRAP'
EXPORTING
TEXTLINE = L_TEXTO
DELIMITER = SPACE
TABLES
OUT_LINES = T_TAB
EXCEPTIONS
OUTPUTLEN_TOO_LARGE = 1
OTHERS = 2.

DESCRIBE TABLE T_TAB LINES V_LEN.
DELETE T_TAB INDEX V_LEN.
ENDFORM.

*INVIERTE UNA CADENA
FORM REVERSE_STRING CHANGING L_TEXTO.

CALL FUNCTION 'STRING_REVERSE'
EXPORTING
STRING = L_TEXTO
LANG = SY-LANGU
IMPORTING
RSTRING = L_TEXTO
EXCEPTIONS
TOO_SMALL = 1
OTHERS = 2.
ENDFORM.

jarabas 19/11/12 06:50:18

más información
 
Hola.

por lo que veo en tú código tienes un error o en la llamada o en la subrutina en si.

invocas la subrutina de la siguiente manera:
PERFORM FILL_RIGHT_CHARACTERS USING '*' CHANGING TEXTO2

y la subrutina
FORM FILL_RIGTH_CHARACTERS USING L_CHAR CHANGING L_TEXTO.

el error que te da el sistema es que no está declarado el párrafo?

Un saludo.

Anthony Martinez 19/11/12 23:01:11

FUNCIONES como crear y llamarlas
 
Hola JARABAS gracias por responder,pero no entiendo tu respuesta "el error que te da el sistema es que no está declarado el párrafo?" ,si te refieres al '*' es solo el valor asterisco que lo paso como parametro.

jarabas 20/11/12 07:56:59

Hola.

Me refiero a que error de muestra el sistema cuando intentas activar el programa.

De todos modos te he puesto en negrita el posible error que ocasiona que no te active el programa.
la invocación al párrafo y el nombre del párrafo no son iguales.

Me refería a si el sistema te muestra este mensaje:
"The FORM "PARRAFO" does not exist."

Un saludo.

Anthony Martinez 20/11/12 17:49:27

Error Solucionado
 
Si jarabas tienes razon el parrafo que utilizo para invocar es distinto al nombre de la funcion en si, no observe bien la sintaxis del parrafo, gracias jarabas por tu observacion y darme la solucion.


Husos Horarios son GMT. La hora en este momento es 07:44:28.

www.mundosap.com 2006 - Spain
software crm, crm on demand, software call center, crm act, crm solutions, crm gratis, crm web