Mostrando entradas con la etiqueta tablas. Mostrar todas las entradas
Mostrando entradas con la etiqueta tablas. Mostrar todas las entradas

miércoles, 9 de julio de 2014

Notas para rejilla, grid, tabla en un SapScript

Para hacer una tabla (grid, rejilla) con el BOX pero que pueda ir variando de alturas.

Declaramos variables en el programa de control:

DATA: wnx TYPE p LENGTH 5 DECIMALS 2,
      wny LIKE wnx,
      wx0(5),
      wy0 LIKE wx0 .


Contamos líneas.

En la parte que vamos pintando la línea vamos sumando.
Por una parte inicializamos
    CLEAR: wx0, wy0.
    wnx = '0.9'.
    wny = '2.2'.
*
    CALL FUNCTION 'WRITE_FORM'                              
         EXPORTING
           element   = 'LINEA_TITLE'    
           window    = 'MAIN'.

*
Y vamos sumando dentro del loop a la tabla que pintamos.

    LOOP AT i_tabla.
*
      IF sy-tabix = 1.
        ADD '0.5' TO wny.
      ELSE.
        ADD '0.8' TO wny.
      ENDIF.

*
      wx0 = wnx.
      wy0 = wny.
*
      " when oper not marked for print
      CALL FUNCTION 'WRITE_FORM'                              "
           EXPORTING
             element   = 'LINEA'  
             window    = 'MAIN'.

*
    ENDLOOP.


En sapscript tenemos elementos en ventana MAIN.

/E LINEA_TITLE
/: BOX XPOS '0.90' CM YPOS '2.2' CM WIDTH '18.5' CM HEIGHT '0.5' CM FRAME 10 TW INTENSITY 20
TT <B2>Título1:</>,,&VLINE&<B2> Título2:</>

/E LINEA
BOX XPOS &WX0& CM YPOS &WY0& CM WIDTH '18.5' CM HEIGHT '0.8' CM FRAME 10 TW
TT <I0><H2>& i_tabla-columna1&</></>,,&VLINE&& i_tabla-columna2&


miércoles, 28 de mayo de 2014

Guardar campos en tablas Z con el Generador de actualización de tablas. Evento 01.

Situación:
Tengo una tabla ZTABLA a la que le he creado una vista de actualización para la SM30. Y quiero controlar quien y cuando hace cambios en los campos ERDAT, ERZET, ERNAM, AEDAT, AEZET, AENAM. 

El código de help.sap no acaba de funcionar tal cual.

Solución: Primero bloqueo en la dynpro de la actualización estas columnas para que sólo sean de salida y añado el evento 01 (Antes de grabar los datos en la base de datos) con la siguiente subrutina:

*&---------------------------------------------------------------------*
*&      FORM ZEVENTO01
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM ZEVENTO01.

  CONSTANTS: LC_ACTION TYPE FIELDNAME VALUE 'ACTION'.

  DATA: BEGIN OF ZTABLA_EXTRACT OCCURS 0010.
          INCLUDE STRUCTURE ZTABLA_COSTES.
          INCLUDE STRUCTURE VIMFLAGTAB.
  DATA: END OF ZTABLA_EXTRACT.

  DATA LS_DATA_TOTAL          LIKE ZTABLA_EXTRACT.
  DATA LS_DATA_EXTRACT        LIKE ZTABLA_EXTRACT.
  DATA LV_ACTION_TOTAL              TYPE COMT_BOOLEAN.
  DATA LS_TABIX               TYPE SY-TABIX.

  FIELD-SYMBOLS: <LV_ACTION_TOTAL>    TYPE CHAR1,
                 <LS_DATA_TOTAL>      TYPE ANY,
                 <LS_DATA_EXTRACT>    TYPE ANY.

  LOOP AT TOTAL.
*
    ASSIGN TOTAL TO <LS_DATA_TOTAL> CASTING LIKE ZTABLA.
    LS_DATA_TOTAL = <LS_DATA_TOTAL>.
    ASSIGN COMPONENT LC_ACTION OF STRUCTURE TOTAL TO <LV_ACTION_TOTAL>.
*
    IF SY-SUBRC NE 0.
      LV_ACTION_TOTAL = <ACTION>.
      ASSIGN LV_ACTION_TOTAL TO <LV_ACTION_TOTAL>.
    ENDIF.
*
    LV_ACTION_TOTAL = <LV_ACTION_TOTAL>.
    CHECK LV_ACTION_TOTAL IS NOT INITIAL.
*
    READ TABLE EXTRACT WITH KEY  <VIM_XTOTAL_KEY>.
*
    IF SY-SUBRC EQ 0.
      LS_TABIX = SY-TABIX.
    ELSE.
      CLEAR LS_TABIX.
    ENDIF.
*
    IF LS_DATA_TOTAL-PEINH IS INITIAL.
      LS_DATA_TOTAL-PEINH = 1.
    ENDIF.
*
    IF LV_ACTION_TOTAL EQ 'N'." New Entry.
      LS_DATA_TOTAL-ERDAT = SY-DATUM.
      LS_DATA_TOTAL-ERZET = SY-UZEIT.
      LS_DATA_TOTAL-ERNAM  = SY-UNAME.
    ENDIF.
*
    IF LV_ACTION_TOTAL EQ 'U'."Update
      LS_DATA_TOTAL-AEDAT = SY-DATUM.
      LS_DATA_TOTAL-AEZET = SY-UZEIT.
      LS_DATA_TOTAL-AENAM = SY-UNAME.
    ENDIF.
    <LS_DATA_TOTAL> = LS_DATA_TOTAL.
*
    MODIFY TOTAL.
    CHECK LS_TABIX GT 0.
    EXTRACT = TOTAL.
    MODIFY EXTRACT INDEX LS_TABIX.
*
  ENDLOOP.
*
  SY-SUBRC = 0.
ENDFORM.                    "FORM ZEVENTO01

Nota: podemos buscar otras vistas de actualización con eventos en TVIMF para ver como lo hace.
Otras referencias:
http://scn.sap.com/docs/DOC-10318
http://help.sap.com/saphelp_nw04s/helpdata/en/a7/5133ac407a11d1893b0000e8323c4f/frameset.htm

viernes, 7 de septiembre de 2012

Error en Smartform por no existir imagen de la SE78.


Problema: tengo un smartform y en ella una imagen. La imagen las subo con la SE78, son BMAP, BCOL. El problema lo tengo en que el nombre es dinámico w_milogo y si no hemos subido la imagen con la SE78 el formulario no sale y da error. ¿Cómo evitarlo?
Buscando por internet he visto que la tabla donde se guardan los atributos  básicos de la imagen es en stxbitmaps, por lo tanto es tan sencillo como ver si existe el valor en esta tabla.

SELECT SINGLE tdname FROM  stxbitmaps
  INTO (w_milogo)
       WHERE  tdobject  = 'GRAPHICS'
       AND    tdname    = w_milogo
       AND    tdid      = 'BMAP'
       AND    tdbtype   = 'BCOL'.
*
IF sy-subrc IS NOT INITIAL.
  CLEAR w_milogo.
ENDIF.
Finalmente  en las condiciones de la imagen del Smartform ponemos que w_milogo no es igual a INITIAL, y evitamos el error.

lunes, 30 de abril de 2012

La tabla de los usuarios Desarrolladores ABAP en SAP.

Es frecuente que los usuarios de desarrollo, programación o developer, como quieras llamarlos se hereden y se presten durante un proyecto SAP y a que al final no sepamos cuales había. O nos dediquemos todos a usar el mismo cuando tenemos varios.
Para encontrarlos nada mejor que consultar la tabla DEVACCESS con la SE16N o SE16 según el gusto del programador ABAP.