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:

DATAwnx TYPE p LENGTH 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
    CLEARwx0wy0.
    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&


lunes, 23 de junio de 2014

Imágenes o logos dinámicos en un SapScript

Programación:
  TYPESBEGIN OF ty_logo,
*        tdobject TYPE tdobject,
        tdname TYPE  tdobname, "tdname,
*        tdid TYPE tdid,
        tdbtype TYPE tdbtype,
        tdresolut TYPE tdresolut,
  END OF ty_logo.

PERFORM zlogo_get '0300'.

  FORM zlogo_get USING p_bukrs TYPE bukrs.
*
    CASE p_bukrs.
      WHEN '0300'.
        gl_logo-tdname 'LOGO_0300'.
        gl_logo-tdbtype 'BCOL'.
        gl_logo-tdresolut 300.
      WHEN '0200'.
        gl_logo-tdname 'LG_0200'.
        gl_logo-tdbtype 'BCOL'.
        gl_logo-tdresolut 200.
      WHEN '0400'.
        gl_logo-tdname 'LOG4EX'.
        gl_logo-tdbtype 'BCOL'.
        gl_logo-tdresolut 200.
      WHEN '0500'.
        gl_logo-tdname 'LOGONEW'.
        gl_logo-tdbtype 'BCOL'.
        gl_logo-tdresolut 200.
      WHEN OTHERS.
    ENDCASE.
*
    CALL FUNCTION 'WRITE_FORM'
      EXPORTING
        window 'LOGO_SOC'.
*
  ENDFORM.  

En la ventana LOGO_SOC comando /:
BITMAP &GL_LOGO-TDNAME& OBJECT GRAPHICS ID BMAP TYPE &GL_LOGO-TDBTYPE& DPI &GL_LOGO-TDRESOLUT&

viernes, 6 de junio de 2014

Depurar (debugging) un smartform.

Este es un truco personal que también le parece útil a Dani, no sé si otra gente lo hacer o si hay alternativas. Como no deja poner break-points no explícitos en el código de los smartforms.

Lo que hago es en la parte alta de la edición del smartform, voy Entorno->Nombre del módulo de funciones. Copio el nombre del módulo de funciones, que además en este caso también es el nombre del grupo de funciones. Voy  a la SE80 y lo copia allí en grupos de funciones. Busco un trozo de código en todo el programa que corresponda al sitio donde quieres debuggar.


A veces no encuentras tu trozo de código... la solución es ponerse encima del grupo de funciones botón derecho, Otras funciones-> Reestructurar lista de objetos.

miércoles, 4 de junio de 2014

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.

  CONSTANTSLC_ACTION TYPE FIELDNAME VALUE 'ACTION'.

  DATABEGIN OF ZTABLA_EXTRACT OCCURS 0010.
          INCLUDE STRUCTURE ZTABLA_COSTES.
          INCLUDE STRUCTURE VIMFLAGTAB.
  DATAEND 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

martes, 20 de mayo de 2014

BW: Infopaquete en peticiones vacías.

Al planificar una cadena tengo el problema de que si la fuente de datos no tiene registros y viene vacío se que me queda parado el infopaquete con un aviso (warning) y no continua cuando ya puede ser estemos sin registros. 

Solución que me dio en su momento Laura, vamos al infopaquete, y en el menú superior, vamos a Planificador -> Tratamiento de avertencias y ponemos que sea ok. O en este caso casi mejor Planificador-> Color de semáforo en peticiones vacías e indicamos que semáforo verde.




Lo he hecho directamente en producción. Y para que poder continuar ejecutando la cadena, desde el log la cadena he llegado al monitor del infopaquete y le he cambiado el estado de la cabecera a correcto, esto ya no tendré que hacerlo en este caso por que cambio hecho desde el Planificador.

lunes, 31 de marzo de 2014

Nota sobre transporte en Business Warehouse de desarrollo a productivo.

Me anoto lo que me explico Laura, una vez más, a la hora de transporta de BW-DES a BW-PRO el orden recomendado para hacerlo sería:

Primero hay que mapear en BW-PRO entre los sistemas fuentes con la transacción RSLGMP, si no al transportar los sistemas fuentes nos dará la STMS un error del tipo "El sistema fuente <E3-DES-100> no existe".

  1. Orden con objetos (sólo estructuras como infocubos y características).
  2. Fuentes de datos.
  3. Transformaciones.
  4. DTP/Infopaquetes.
  5. Informes (Querys).



lunes, 24 de marzo de 2014

De char a numc. From char to numc.

FORM convert_char_to_numc USING p_char
                          CHANGING p_numc.
  DATAl_aux_i TYPE i.
  l_aux_i p_char.
  p_numc l_aux_i.
ENDFORM.    

martes, 11 de febrero de 2014

Chuletario de transacciones para programador.

Dejo aqui la versión de cierta hoja imprea y algo arrugada donde tengo la chuleta de las transacciones que más uso: chuletario.

Lo iré actualizando y mejorando.

viernes, 24 de enero de 2014

BW: Traer Monedas, Unidades de Medida, Variantes de ejercicio y Calendario de fábrica.

Para traer las Monedas, Unidades de Medida, Variantes de ejercicio y Calendario de fábrica de Sistema origen al BW, sigo las indicaciones de una Best Practice 894_BB_ConfigGuide_EN_CN.doc.

3.2.4          Transfer Global Settings

This activity has to be carried out in SAP BW. If your ERP system and BW system used same client, this step skip.
Procedure
1.     To Transfer Global Settings,choose:
SAP BW menu
Information Systems ® Business Information Warehouse ® Modeling ® Data Warehousing Workbench: Modeling
Transaction code
RSA1  
1.     On the Data Warehousing Workbench: Modeling screen, Choose Source Systems. Right -click your R/3-Source System in the right hand window and choose Transfer Global Settings.
2.     On the Transfer Global Settings : Selection screen, Choose Currencies, Units of measurement, Fisacl year variants, Factory calendar and Rebuild tables,Choose  Exctue .

3.     Choose Exit twice.


Un pantallazo puede ayudar a acabar de encontrarlo en castellano: