Programación:
TYPES: BEGIN 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&
Trozos y retales de código de ABAP (SAP)que encuentro de interés. Tanto para tenerlos a mano en cualquier sitio como para compatirlos.
lunes, 23 de junio de 2014
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
Cómo obtener el flujo de documentos desde un programa ABAP
Muy interesante post de Teknoda sobre el módulo de funciones RV_ORDER_FLOW_INFORMATION y el flujo de documentos comerciales.
miércoles, 28 de mayo de 2014
Guardar campos en tablas Z con el Generador de actualización de tablas. Evento 01.
Situación:
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.
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
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.
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.
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".
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".
- Orden con objetos (sólo estructuras como infocubos y características).
- Fuentes de datos.
- Transformaciones.
- DTP/Infopaquetes.
- 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.
DATA: l_aux_i TYPE i.
l_aux_i = p_char.
p_numc = l_aux_i.
ENDFORM.
CHANGING p_numc.
DATA: l_aux_i TYPE i.
l_aux_i = p_char.
p_numc = l_aux_i.
ENDFORM.
Suscribirse a:
Entradas (Atom)

