Archivo de Marzo 2008
SAP NetWeaver: The Body of Information
Publicado por Floren en Marzo 18, 2008
Publicado en Cursos, seminarios y manuales | Deja un Comentario »
Report para enviar emails con archivos adjuntos a direcciones externas
Publicado por Floren en Marzo 18, 2008
REPORT ZREPORT_TO_EMAIL NO STANDARD PAGE HEADING LINE-SIZE 200.
DATA : BEGIN OF ITAB OCCURS 0,
PERNR LIKE PA0001-PERNR,
ENAME LIKE PA0001-ENAME,
END OF ITAB.
DATA: message_content LIKE soli OCCURS 10 WITH HEADER LINE,
receiver_list LIKE soos1 OCCURS 5 WITH HEADER LINE,
packing_list LIKE soxpl OCCURS 2 WITH HEADER LINE,
listobject LIKE abaplist OCCURS 10,
compressed_attachment LIKE soli OCCURS 100 WITH HEADER LINE,
w_object_hd_change LIKE sood1,
compressed_size LIKE sy-index.
START-OF-SELECTION.
SELECT PERNR ENAME
INTO CORRESPONDING FIELDS OF TABLE ITAB
FROM PA0001
WHERE PERNR < 50.
LOOP AT ITAB.
WRITE :/02 SY-VLINE , ITAB-PERNR, 15 SY-VLINE , ITAB-ENAME, 50
SY-VLINE.
ENDLOOP.
* Receivers
receiver_list-recextnam = ‘EXTERNAL-MAIL-ID@YAHOO.COM‘. “–>
* EMAIL ADDRESS
RECEIVER_list-RECESC = ‘E’. “<-
RECEIVER_list-SNDART = ‘INT’.”<-
RECEIVER_list-SNDPRI = ‘1′.”<-
APPEND receiver_list.
* General data
w_object_hd_change-objla = sy-langu.
w_object_hd_change-objnam = ‘Object name’.
w_object_hd_change-objsns = ‘P’.
* Mail subject
w_object_hd_change-objdes = ‘Message subject’.
* Mail body
APPEND ‘Message content’ TO message_content.
* Attachment
CALL FUNCTION ‘SAVE_LIST’
EXPORTING
list_index = ‘0′
TABLES
listobject = listobject.
CALL FUNCTION ‘TABLE_COMPRESS’
IMPORTING
compressed_size = compressed_size
TABLES
in = listobject
out = compressed_attachment.
DESCRIBE TABLE compressed_attachment.
CLEAR packing_list.
packing_list-transf_bin = ‘X’.
packing_list-head_start = 0.
packing_list-head_num = 0.
packing_list-body_start = 1.
packing_list-body_num = sy-tfill.
packing_list-objtp = ‘ALI’.
packing_list-objnam = ‘Object name’.
packing_list-objdes = ‘Attachment description’.
packing_list-objlen = compressed_size.
APPEND packing_list.
CALL FUNCTION ‘SO_OBJECT_SEND’
EXPORTING
object_hd_change = w_object_hd_change
object_type = ‘RAW’
owner = sy-uname
TABLES
objcont = message_content
receivers = receiver_list
packing_list = packing_list
att_cont = compressed_attachment.
Publicado en Código | Deja un Comentario »
Borrar Juego de Datos desde Código
Publicado por Floren en Marzo 18, 2008
PERFORM CERRAR_SESION.
IF D_TOT IS INITIAL.
PERFORM BORRAR_JD.
MESSAGE I108.
ELSE.
MESSAGE I105 WITH P_JUEGO.
ENDIF.
*&———————————————————————*
*& Form CERRAR_SESION
*&———————————————————————*
* Cierra la sesión de Batch Input abierta por ABRIR_SESION
*———————————————————————-*
FORM CERRAR_SESION.
* close bdc
CALL FUNCTION ‘BDC_CLOSE_GROUP’
EXCEPTIONS
NOT_OPEN = 01
QUEUE_ERROR = 02.
IF SY-SUBRC <> 0.
MESSAGE A103.
ELSE.
MESSAGE I113.
ENDIF.
ENDFORM. ” CERRAR_SESION
*&———————————————————————*
*& Form BORRAR_JD
*&———————————————————————*
* Borra el juego de datos p_juego
*———————————————————————-*
FORM BORRAR_JD.
SELECT SINGLE * FROM APQI WHERE “credate eq sy-datum and
GROUPID EQ P_JUEGO AND
DATATYP EQ ‘BDC’ AND
PUTTRANS EQ 0.
PERFORM DELETE_SESSION(SAPLSBDC) USING APQI-QID.
ENDFORM. ” BORRAR_JD
*———————————————————————*
* FORM : delete_session
* —>: qid
* <—: SY-SUBRC = 0 Löschen erfolgreich
* SY-SUBRC <> 0 Löschen nicht erfolgreich
*———————————————————————*
FORM DELETE_SESSION USING DEL_QID.
SELECT COUNT(*) FROM APQD WHERE QID = DEL_QID.
IF SY-SUBRC <> 0. “Leere APQD
DELETE FROM APQI WHERE QID = DEL_QID.
IF SY-SUBRC EQ 0.
COMMIT WORK.
ELSE.
ROLLBACK WORK.
SY-SUBRC = 4.
ENDIF.
ELSE.
DELETE FROM APQD WHERE QID = DEL_QID.
IF SY-SUBRC EQ 0.
DELETE FROM APQI WHERE QID = DEL_QID.
IF SY-SUBRC EQ 0.
COMMIT WORK.
ELSE.
ROLLBACK WORK.
SY-SUBRC = 4.
ENDIF.
ELSE.
ROLLBACK WORK.
SY-SUBRC = 4.
ENDIF.
ENDIF.
ENDFORM. “delete_session
Publicado en Código | Deja un Comentario »
Macros en SAP HR
Publicado por Floren en Marzo 18, 2008
La utilización de macros en el código de un objeto, consigue encapsular ciertas sentencias y mejora la modularización. Originariamente, una macro (o macroinstrucción) se puede definir con un conjunto de sentencias más sencillas que quedan alojadas en memoria cuando se ejecuta el programa (a diferencia de una función, que es llamada de forma dinámica).
Para ver el código de una macro en SAP, se debe acceder a la transacción SE11 y visualizar el contenido de la tabla TRMAC. Una vez visualizado el código, es frecuente que dentro se hagan llamadas a rutinas de programa estándar (perform f_rutina (programa_estandard) ).
RP-READ-INFOTYPE: Todos los registros de un empleado para un determinado periodo de tiempo del infotipo indicado en la función son puestas en una tabla interna del infotipo. No necesita de PNP, por lo que suele usarse cuando no hay base de datos lógica asociada al programa.
RP-PROVIDE-FROM-LAST: El último registro del periodo seleccionado es tomado de la tabla interna del infotipo y llevado a la cabecera de la tabla. Necesita, al igual que la anterior, que la tabla correspondiente al infotipo (por ejemplo p0002) esté rellena, por lo que suele usarse cuando hay PNP declarada en el programa.
RP-UPDATE: Permite la actualización de la base de datos de gestión de personal desde el programa. Puede usarse con o sin PNP.
RP-PROVIDE-FROM-FRST: El primer registro del periodo seleccionado es tomado de la tabla interna del infotipo y llevado a la cabecera de la tabla. Necesita que la tabla correspondiente al infotipo (por ejemplo p0002) esté rellena, por lo que suele usarse cuando hay PNP declarada en el programa.
RP-INIT-WITH-SYDATUM: Inicia las variables del sistema PN-BEGDA y PN-ENDDA y las variables PNBEGPS y PNPENDPS con la fecha que hay en el campo del sistema SY-DATUM (la fecha de hoy).
RP-LOWDATE-HIGHDATE: Define las constantes LOW-DATE y HIGH-DATE que representan el instante más antiguo y más reciente en la línea del tiempo. Estas fechas sólo se pueden usar en comparaciones y no en cálculos.
RP-SEL-EIN-AUS-INIT: Esta función se usa para evitar que la Base de Datos tome aquellos empleados con estatus de operación cero durante el periodo de selección PN-BEGDA y PN-ENDDA.
RP-SET-NAME-FORMAT: Permite editar en los reports y los programas RP los nombres de los empleados según un formato predefinido en la tabla T522N.
RP-FETCH-ALTER-PERID: Incluye el número de identificación personal del infotipo de datos personales (0002) en todas las evaluaciones estándar RP.
RP-SET-KEY-DATE: Si el usuario no introduce un periodo de selección en la pantalla de selección los datos de fecha se inician según el contenido de las variables LOW-DATE y HIGH-DATE.
RP-SEL-EIN-AUS: Esta función se usa después del GET PERNR para evitar que la Base de Datos tome aquellos empleados con estatus de operación cero durante el periodo de selección PN-BEGDA y PN-ENDDA.
RP-SEL-CALC: Esta función selecciona aquellos números de personal en que la nómina ha sido también completada en el periodo de selección seleccionado. Por tanto, se debería usar en todas las evaluaciones de nómina.
RP-MAKE-ADDRESS: Enlaza las RP con edición de las direcciones de empleados de acuerdo con las regulaciones internacionales de cada país.
RP-EDIT-ADDRESS: Edita las direcciones de los empleados de acuerdo con las regulaciones internacionales de cada país.
RP-READ-ALL-TIME-ITY: Toma todos los registros de tiempo (2000-2999) de la persona que está siendo procesada dentro del periodo dado y lo pone en las correspondientes tablas internas de los infotipos.
RP-EDIT-NAME: Esta función edita los nombres de los empleados en todas las evaluaciones estándar RP de acuerdo con las regulaciones de cada país.
RP-READ-T001P: Se accede a la tabla T001P usando la clave entera. El resultado se muestra en la cabecera de la tabla T001P.
RP-READ-PAYROLL-DIR: Lee un directorio de un cluster donde se guardan los resultados de nómina.
Publicado en Artículos | Deja un Comentario »
The cost of SAP HCM
Publicado por Floren en Marzo 12, 2008
Publicado en Artículos | Deja un Comentario »
Modificación de Infotipos mediante macro
Publicado por Floren en Marzo 6, 2008
Una manera diferente de actualizar el contenido de uno o más campos en un corte de un infotipo, es mediante el uso de macros.
Para ver el contenido de una macro se debe acceder a la tabla del diccionario TRMAC y allí introducir su nombre:
INFOTYPES: nnnn NAME OLD, nnnn NAME NEW.
* Dentro del bucle principal de selección de empleados (GET PERNR si usas PNP) se recorren los cortes para los que se quiere modificar. Para este ejemplo he usado la sentencia PROVIDE, pero puede usarse un loop-endloop:
PROVIDE * FROM OLD
WHERE …
* Cambiar los registros antiguos:
NEW = OLD.
APPEND NEW.
ENDPROVIDE.
* Usar la macro:
RP-UPDATE OLD NEW.
Report ZTEST_FLOREN.TABLES pernr.INFOTYPES: 0008, 0008 NAME p0008_new.
GET pernr.
CLEAR p0008.
LOOP AT p0008.
p0008_new = p0008. APPEND p0008_new.ENDLOOP.IF p0008_new[] IS NOT INITIAL.
rp-update p0008 p0008_new.
ENDIF.
Publicado en Código | Deja un Comentario »