PDA

Ver la Versión Completa : Volver al mismo programa???


tate
26/09/07, 14:47:24
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
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
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.

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
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.

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
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.

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
si, lo pongo y y al verificar me pone:

"DISPLAY LIKE 'E'" is not expected.

¿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
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.

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
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