Ayuda SAP

Campo Modificado en Screen

Hola !!! Estoy modificando un campo en un SCREEN pero al hacer el update no me toma la modificación que le hice al campo. Esta opción de modificar es nuevo, le cree el:


INCLUDE zsf_p_consulta_srv_pbo_0200.

INCLUDE zsf_p_consulta_srv_pai_0200.

Cuando el llega a este punto y revisen debug: el wa_reg_mod del campo veterinario no tomo el valor que le ingrese por pantalla.

WHEN '&DATA_SAVE'.
*      IF  wa_reg_mod-init_trat GT wa_reg_mod-fin_trat.
*        MESSAGE i000(fb) WITH 'Fecha Fin Menor a Fecha Inicio. proceso Anulado...'.
*      ELSE.
* Salvar en ALV
      READ TABLE gt_notif WITH  KEY   bukrs = wa_reg_mod-bukrs
                                      snig  = wa_reg_mod-snig
                                      fecha = wa_reg_mod-fecha.
      CHECK sy-subrc EQ 0.
*      wa_reg_mod-duracion = wa_reg_mod-fin_trat - wa_reg_mod-init_trat.

      MODIFY gt_notif FROM wa_reg_mod INDEX sy-tabix.
* Actualizar la base de datos

       UPDATE ztsfxdata_cs  SET observ     = wa_reg_mod-observ
                                veter      = wa_reg_mod-veterinario
*                               estatus_tra = wa_reg_mod-estatus_tra
*                                duracion    = wa_reg_mod-duracion
*                                fin_trat    = wa_reg_mod-fin_trat
                                aeusn       = sy-uname
                                aendt       = sy-datum
                                aeuhr       = sy-uzeit
*                               init_trat = wa_reg_mod-init_trat
                           WHERE   bukrs EQ wa_reg_mod-bukrs AND
                                   snig  EQ wa_reg_mod-snig  AND
                                   fecha EQ wa_reg_mod-fecha.

actualiza solo el campo observación

      COMMIT WORK AND WAIT.

*      ENDIF.
      SET SCREEN  0.
  ENDCASE.

De hecho lo escribo en el campo y lo borra. Que puedo revisar en cuanto a que tome el valor introducido en pantalla?

Muchas Gracias

Ana

Hola,

Revisa el código de la dynpro. En la dynpro debes tener un código similar al que te paso abajo:

PROCESS AFTER INPUT.

  LOOP AT <tu tabla>.
    CHAIN.
      FIELD <tu campo>.
      MODULE tab ON CHAIN-REQUEST.
    ENDCHAIN.
  ENDLOOP.

Entonces quizás es cuestión de agregar una línea con tu nuevo campo en la parte de FIELD.
(el CHAIN…FIELD es lo que hace que el valor no se borre en las dynpro)
Si no te funciona pasanos el código de la dynpro para revisarlo.

Saludos

2 Me gusta

Hola amigo, gracias por tu respuesta loque consegui parecido a lo que indicas es este codigo:

PROCESS BEFORE OUTPUT.
  MODULE status_0200.
  MODULE init_0200.
*
PROCESS AFTER INPUT.
  MODULE user_command_0200.
MODULE status_0200 OUTPUT.
  DATA fcode TYPE TABLE OF sy-ucomm.
  CLEAR fcode[].

*  IF wa_reg_mod-estatus_tra EQ '@06@' OR
*     wa_reg_mod-init_trat   EQ '00000000'.
*    APPEND 'LOCK' TO fcode.
*  ENDIF.

  SET PF-STATUS 'S0200' EXCLUDING fcode.
*  SET TITLEBAR 'xxx'.

ENDMODULE.                 " STATUS_0200  OUTPUT

MODULE init_0200 OUTPUT.
  SELECT SINGLE butxt FROM t001
                      INTO t001-butxt
         WHERE bukrs EQ wa_reg_mod-bukrs.

  LOOP AT SCREEN.

***    CHECK  wa_reg_mod-estatus_tra IS INITIAL AND "AA
*            wa_reg_mod-fin_trat LT sy-datum ) AND
***            screen-group1 EQ 'ES' . " AA
*
    CHECK  screen-group1 EQ 'ES' . " AA
*
    screen-active = 0.
    MODIFY SCREEN.
  ENDLOOP.
ENDMODULE.                 " INIT_0200  OUTPUT

MODULE user_command_0200 INPUT.

*  BREAK abap2.
  CASE ok_code_0200.
    WHEN 'CANCEL'.
      SET SCREEN  0.
    WHEN 'LOCK'.
***      wa_reg_mod-estatus_tra = '@06@'. 
***      wa_reg_mod-fin_trat    = sy-datum. 
***      wa_reg_mod-duracion = wa_reg_mod-fin_trat - wa_reg_mod-init_trat. 
    WHEN '&DATA_SAVE'.
*      IF  wa_reg_mod-init_trat GT wa_reg_mod-fin_trat.
*        MESSAGE i000(fb) WITH 'Fecha Fin Menor a Fecha Inicio. proceso Anulado...'.
*      ELSE.
* Salvar en ALV
      READ TABLE gt_notif WITH  KEY   bukrs = wa_reg_mod-bukrs
                                      snig  = wa_reg_mod-snig
                                      fecha = wa_reg_mod-fecha.
      CHECK sy-subrc EQ 0.
*      wa_reg_mod-duracion = wa_reg_mod-fin_trat - wa_reg_mod-init_trat.

      MODIFY gt_notif FROM wa_reg_mod INDEX sy-tabix.
* Actualizar la base de datos

       UPDATE ztsfxdata_cs  SET observ     = wa_reg_mod-observ
                                veter      = wa_reg_mod-veterinario
*                               estatus_tra = wa_reg_mod-estatus_tra
*                                duracion    = wa_reg_mod-duracion
*                                fin_trat    = wa_reg_mod-fin_trat
                                aeusn       = sy-uname
                                aendt       = sy-datum
                                aeuhr       = sy-uzeit
*                               init_trat = wa_reg_mod-init_trat
                           WHERE   bukrs EQ wa_reg_mod-bukrs AND
                                   snig  EQ wa_reg_mod-snig  AND
                                   fecha EQ wa_reg_mod-fecha.


      COMMIT WORK AND WAIT.

*      ENDIF.
      SET SCREEN  0.
  ENDCASE.
  CLEAR ok_code_0200.
ENDMODULE.                 " USER_COMMAND_0200  INPUT

Es esta parte a la que te refieres? Es que coloco en el campo veterinario y lo borra no lo toma. En este punto es que deberoa tomar el nuevo valor y ya aqui no lo hace:

  READ TABLE lt_notif INDEX 1 INTO wa_reg_mod.

CASE pi_ucomm.
     WHEN 'MOD'.        " Mostras Pantalla para Modificar
*      BREAK-POINT.
      lt_notif[] = gt_notif[].
      DELETE lt_notif WHERE sel NE 'X'.
      DESCRIBE TABLE lt_notif LINES l_nro_reg.
      IF l_nro_reg EQ 0.
        MESSAGE e000(fb) WITH text-005.
      ELSEIF l_nro_reg GT 1.
        MESSAGE e000(fb) WITH text-006.
      ELSE.
        READ TABLE lt_notif INDEX 1 INTO wa_reg_mod.
        CALL SCREEN 0200 STARTING AT 13 2 ENDING AT 100 10.
      ENDIF.

Que puede revisar?

Muchas Gracias.

Saludos

Ana

Revisando en el debug noto esto:

Revisando el debug noto este punto, el mensaje anterior falto:

Donde almaceno la modificacion wa_reg_mod el campo es veterinario y si le doy click al dynpro me trae:

Se llaman diferente en cambio el campo que si me toma que es el llamado observ se llama igual al ver el debug, si es ese el caso como se modifica o que accion se toma?

Muchas Gracias

Ana

Modifique en el Dynpro el nombre del campo (de veter a veterinario) y lo muestra en la pantalla y si consulto la tabla por la se11 toma el cambio en la misma pero si salgo y vuelvo a entrar para modificar el mismo campo me lo trae vacio que puedo revisar??
En la tabla si se conserva el cambio, es al entrar a la pantalla y traer el registro que modifique que no me muestra lo que le cambie.

Muchas Gracias

Ana

Hola,

Si el registro está actualizado en la SE11.
Y sales y vuelves a entrar y no te trae registro, debes revisar el select donde estás buscando ese dato, a ver qué está pasando.

Este tema se cerró automáticamente 91 días después del último post. No se permiten nuevas respuestas.