MUNDOSAP

MUNDOSAP (foro/index.php)
-   Programación ABAP IV (foro/forumdisplay.php?f=4)
-   -   Volver al mismo programa??? (foro/showthread.php?t=7963)

tate 26/09/07 14:47:24

Volver al mismo programa???
 
Buenas amigos tengo un problemilla, aber si me ayudais.

Tengo un report, que tiene una pantalla de seleccion con SELECTION-SCREEN , entonces despues de eso, hace una select, y si toda va bien, sigue el programa, pero si falla, hace esto:

IF sy-subrc <> 0.
MESSAGE e398(00) WITH text-001.
ENDIF.

Lo que necesito esque si entra en ese if, saque el mensaje de error, pero vuelva a la pantalla de selecion.
He probado poniendo el submit y no hace nada, ya que saca el mensaje de error y se keda la pantalla en azul y solo deja darle a "esc", asi q ue no se, aber si alguien me puede ayudar.

ppchico 26/09/07 14:56:55

Hola:

Si lo que quieres, es que salga erl mensaje de error, sin dejar el programa bloqueado, lo que puedes hacer es lanzarlo como un mensaje de estatus, pero con el formato de Error, es decir:

message sxxx(Clase_mensaje) display like 'E'.

Con eso te debería ir bien.

Espero que te valga.

Un saludo.

Mauricio Hidalgo 26/09/07 15:02:53

Y no te sirve poner esa validación en el evento AT SELECTION-SCREEN ?.

Ddscerezo 26/09/07 15:33:25

Set Screen 0
 
Quizá lo que quieres es volver a la dynpro de la que partes (SELECT-OPTION).
Si es así usa:

SET SCREEN 0.

Ya me contarás.

sugerencia: prueba a ponerlo justo antes del mensaje de error.

melerogalan 26/09/07 16:40:15


Gracias por lo del display, no lo sabía y me viene de lujo para unas cosillas y no joder el flujo del programa, gracias colega. :o

ppchico 27/09/07 07:33:25

Me alegra saber, que a alguien le ha venido bien... La verdad es que este foro nos ayuda mucho en la ardua tarea diaria del trato con nuestro particular lenguaje ABAP IV. Muchas gracias a todos los que hacéis posible que cada día saquemos proyectos a delante difíciles de sacar.

Un saludo a todos.

tate 27/09/07 07:38:19

buenas, priemro muchas gracias por las contestaciones, pero os cuento:

E puesto MESSAGE s398(00) WITH text-001 DISPLAY LIKE 'e'.
y al verificar me sale:

*****Field "DISPLAY" is unknown. It is neither in one of the specified
tables nor defined by a "DATA" statement.*****

Y tmb e probado el stop y nada, saca el mensaje de error, y ya no me deja acer nada, solo al escape y ya esta.

melerogalan 27/09/07 07:40:36


La instruccion es asi:
MESSAGE s398(00) DISPLAY LIKE 'E' WITH text-001.

Asi me funciona a mi, espero que a ti tambien, por cierto, intenta poner siempre entre comillas, los caracteres en mayúsculas, evitaras errores absurdos. :p
Por cierto el error qeu te da es que cuando pones la instrucción 'WITH' las palabras que le sigue los considera nombres de variables si van sin comillas y si va con comillas lo considera literales , ambos para mostrar en el mensaje, asi que 'WITH' tiene que ser lo ultimo. Por eso el error te dice que el campo 'DISPLAY' no esta declarado, porque lo considera como si fuera una variable.
Si quieres alguna otra aclaración, aqui estoy.

ppchico 27/09/07 07:49:31

Efectivamente meloregalan lleva razón, el error es por motivos sintácticos de la Instrucción MESSAGE, Me olvide de ponerte la instrucción exacta, ya que no vi que querías incluirle un parámetro al mensaje.

Prueba con el formato que ha puesto meloregalan, y debería de funcionar correctamente.

Un saludo.

melerogalan 27/09/07 07:52:35


meloregalan ?? !! :mad: ......... melerogalan

jeje, es broma. Saludos

tate 27/09/07 07:57:40

acabo de probarlo y me dice esto:
"DISPLAY LIKE 'E'" is not expected.

que tendria que hacer????

ppchico 27/09/07 07:58:27

Jajajajaja, las malas jugadas que nos gasta la vista, he leido lo que quería leer, y no lo que ponía, A partir de ahora seguro que nop me confundo MELEROGALAN. jejejeje.

ppchico 27/09/07 07:59:27

Tate, podrías poner un trozo de código algo más extenso del contexto de la instrucción, para hacernos una idea de donde puede estar el fallo?

Gracias.

tate 27/09/07 08:20:06

SELECTION-SCREEN BEGIN OF BLOCK sc_params.

SELECT-OPTIONS s_matnr FOR ekpo-matnr.

PARAMETERS p_werks LIKE marc-werks OBLIGATORY.

SELECT-OPTIONS p_bstyp FOR ekpo-bstyp OBLIGATORY DEFAULT 'L'.

SELECT-OPTIONS p_lgort FOR ekpo-lgort NO-EXTENSION NO INTERVALS.

SELECT-OPTIONS p_dispo FOR marc-dispo NO-EXTENSION NO INTERVALS.

SELECTION-SCREEN END OF BLOCK sc_params.

************************
* Main Code Area
************************
START-OF-SELECTION.

PERFORM get_data.
PERFORM field_catalog.
PERFORM alv_display.


*&---------------------------------------------------------------------*
*& Form get_data
*&---------------------------------------------------------------------*
FORM get_data.

SELECT e~matnr e~txz01 m~lbkum e~effwr e~matkl m~stprs m~salk3 k~lifnr
e~aedat e~menge e~ktmng k~ebeln k~bstyp m~verpr e~meins k~waers m~peinh e~peinh e~netpr e~pstyp e~infnr e~werks

INTO (gt_outtab-matnr, gt_outtab-txz01, gt_outtab-lbkum,

gt_outtab-effwr, gt_outtab-matkl, gt_outtab-stprs, gt_outtab-salk3,
gt_outtab-lifnr, gt_outtab-aedat, gt_outtab-menge, gt_outtab-ktmng,
gt_outtab-ebeln, gt_outtab-bstyp, gt_outtab-verpr, gt_outtab-meins,
gt_outtab-waers, gt_outtab-peinh2, gt_outtab-peinh, gt_outtab-netpr,
gt_outtab-pstyp, gt_outtab-infnr, gt_outtab-werks)

FROM marc AS a INNER JOIN mbew AS m ON a~matnr EQ m~matnr
INNER JOIN ekpo AS e ON a~matnr EQ e~matnr
INNER JOIN ekko AS k ON k~ebeln EQ e~ebeln
WHERE a~beskz EQ 'F'
and a~werks EQ p_werks
AND a~matnr IN s_matnr
AND m~bwkey EQ p_werks
AND m~lbkum NE ''
AND e~werks EQ p_werks
AND e~bstyp IN p_bstyp
AND e~loekz EQ ''
AND e~lgort IN p_lgort
AND a~dispo IN p_dispo.

APPEND gt_outtab.
ENDSELECT.

***********aqui es donde tendria que sacar el mensaje y luego volver a la pantalla de seleccion***********

IF sy-subrc <> 0.
MESSAGE e398(00) WITH text-001.
ENDIF.

ppchico 27/09/07 08:24:16

Has probado a poner esto en la sentencia MESSAGE?

MESSAGE s398(00) DISPLAY LIKE 'E' WITH text-001.

Acabo de probarlo en un programita de prueba, y compila perfectamente.

tate 27/09/07 08:27:12

si, lo pongo y y al verificar me pone:

"DISPLAY LIKE 'E'" is not expected.

melerogalan 27/09/07 08:29:49


¿Que version de sap utilizas? :confused:
Para saber si te acepta esa sentencia, pon el cursor del raton sobre la sentencia 'MESSAGE' y le das a F1, hay te viene todas las opciones que te permite tu version de sap.

ppchico 27/09/07 08:32:21

Si puedes copia y pega el que te puse en el post anterior:

MESSAGE s398(00) DISPLAY LIKE 'E' WITH text-001.

Posiblemente sea por alguna tontería, porque a mi me compila perfectamente.

Si te digo la verdad a mi en ocasiones también me ha pasado que estaba bien, y no me compilaba, y al copiarlo desde otro sitio, me compilaba bien, posiblemente fuese por algun error en algún espacio o algo así...

No se, prueba porque debería de salirte...

tate 27/09/07 08:42:30

tengo la version 4.6 y le doy al f1, y no me sale la variante para display, asi q por eso no podre utilizarlo.
Ademas la e pegado desde aki y na de na.

melerogalan 27/09/07 08:58:40


Entonces es una putada, yo antes cuando no conocia lo del display, ponia todos los mensajes de éxito y asi no paralizaba el flujo. Coméntale esta situación a tu cliente o a tu responsable. Esto no es culpa tuye, es de la versión de sap que te restringue tus posibilidades.

Saludos.

ppchico 27/09/07 09:12:51

En este caso, la solución sería la propuesta en un post anterior, y si es posible, hacer el chequeo en el at selectión screen, y desde ahi dar el mensaje... Lo malo, es que por el código que has puesto, supongo que será dificil adaptarlo para hacer la selección y el chequeo en el el bloque de at selection screen....

La verdad es que ahora mismo, no se me ocurre otra cosa...

tate 27/09/07 09:22:01

bueno, alfinal lo e tenido que dejar asi:

IF sy-subrc <> 0.
MESSAGE s398(00) WITH text-001.
LEAVE TO TRANSACTION ZSPR.
ENDIF.

Lo unico q no saca el mensaje en rojo , pero bueno, por lo que me an dicho, si en esta version no se puede, que lo deje asi.

Asi que muchas gracias a todos.

Rodolfo Montiel Rivera 11/04/08 16:55:33

LEAVE TO SCREEN 0. tmb podria ser

DavidXD_XD 11/04/08 17:27:11

Puedes colocar un flag, aver si sirve :D

IF sy-subrc NE 0.
g_flag = 'X'.
ENDIF.

y dentro del START_OF_SELECTION.
IF g_glag IS INITIAL.
"Continuo con mis rutinas
ELSE.
MESSAGE S000 WITH text-t01.
ENDIF.

Betotor 08/05/08 14:55:04

regresa al mismo programa...
 
Estimado Tate, yo trabajo con una versión R/3 4.0B, yo utilice esta sentencia y me funcionó al tiro:

message s398(00) raising exception with text-001.
:D


Husos Horarios son GMT. La hora en este momento es 04:53:06.

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