viernes, 25 de septiembre de 2009

Funcion para enviar correo mediante outlook

FUNCTION ZCORREO.
*"----------------------------------------------------------------------
*"*"Interfase local
*" IMPORTING
*" REFERENCE(CORREO2) TYPE C
*" REFERENCE(ADJUNTO2) TYPE C
*"----------------------------------------------------------------------
data:
correo(50) type c,
adjunto LIKE RLGRAP-FILENAME.

correo = correo2.
adjunto = adjunto2.

* AT SELECTION-SCREEN ON VALUE-REQUEST FOR adjunto.
* CALL FUNCTION 'KD_GET_FILENAME_ON_F4'
* EXPORTING
* STATIC = 'X'
* MASK = ''
* CHANGING
* FILE_NAME = adjunto.
*
*start-of-selection.

TYPE-POOLS : ole2.
DATA: appoutlook TYPE ole2_object.
DATA: appout2 TYPE ole2_object.
DATA: appitem TYPE ole2_object.
DATA: namespace TYPE ole2_object.
DATA: attachments TYPE ole2_object.
DATA: frace01(45), frace02(45).
DATA: p_subj(20) TYPE c.
DATA: p_body TYPE string.




* Crear objeto OLE : outlook.application
CREATE OBJECT appoutlook 'outlook.application'.
* Mensajes vía MAPI
CALL METHOD OF appoutlook 'GetNameSpace' = namespace
EXPORTING
#1 = 'MAPI'.
* Crea objeto nuevo ITEM ( nuevo mensaje )
CALL METHOD OF appoutlook 'CreateItem' = appitem
EXPORTING
#1 = '0'.
* Propiedades TO , SUBJECT y BODY
SET PROPERTY OF appitem 'To' = correo.

* CONCATENATE p_subj 'OC: ' itab-ebeln INTO p_subj
*SEPARATED BY space.
SET PROPERTY OF appitem 'Subject' = 'Email Automatico'.

CONCATENATE '' 'Mensaje enviado de manera automatica '
INTO p_body.

SET PROPERTY OF appitem 'Body' = p_body.

* Se adjunta el archivo
if adjunto is not initial.
CALL METHOD OF appitem 'Attachments' = attachments.
CALL METHOD OF attachments 'Add'
EXPORTING
#1 = adjunto.
endif.
* Envíar directamente
CALL METHOD OF appitem 'Send'.
*Se muestra la pantalla del outlook
*CALL METHOD OF appitem 'Display'.
* Libera Espacio del objeto
FREE OBJECT attachments.
FREE OBJECT appitem.
FREE OBJECT namespace.
FREE OBJECT APPOUTLOOK.
* Cierra Outlook ( solo si se quiere que quede cerrado )

CALL METHOD OF appoutlook 'Quit'.

*en caso que quieras ejecutar outlook
*CALL FUNCTION 'WS_EXECUTE'
* EXPORTING
** commandline = commandline
* program = 'OUTLOOK.EXE'
* EXCEPTIONS
* frontend_error = 1
* no_batch = 2
* prog_not_found = 3
* illegal_option = 4
* OTHERS = 5.
*
* IF sy-subrc > 0.
* RAISE execution_failed.
* ENDIF.
*
MESSAGE s000(38) WITH 'Proceso email finalizado... '.
*







ENDFUNCTION.

ABAP envia por pdf el ultimo spool creado

*&---------------------------------------------------------------------*
*& Form ENVIA_MAIL2
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*

form envia_mail2.

DATA: IT_TSP01 LIKE TSP01 OCCURS 0 WITH HEADER LINE.
DATA: NUMBYTES TYPE I,
PDFSPOOLID LIKE TSP01-RQIDENT,
IT_PDF LIKE TLINE OCCURS 0.

*Lo primero es buscar el número de la orden de spool en la tabla TSP01. *En este caso le paso el nombre del usuario y el mandante.
SELECT RQIDENT
INTO (IT_TSP01-RQIDENT)
FROM TSP01
WHERE RQOWNER EQ SY-UNAME
AND RQCLIENT EQ SY-MANDT.
APPEND IT_TSP01.
ENDSELECT.

*Ordeno en forma descendente para quedarme con el último formulario *generado
SORT IT_TSP01 DESCENDING.

*Al siguiente módulo de función le paso el número de la orden para que *me devuelva el formulario dentro de la tabla IT_PDF
CALL FUNCTION 'CONVERT_OTFSPOOLJOB_2_PDF'
EXPORTING
SRC_SPOOLID = IT_TSP01-RQIDENT
IMPORTING
PDF_BYTECOUNT = NUMBYTES
TABLES
PDF = IT_PDF
EXCEPTIONS
ERR_NO_OTF_SPOOLJOB = 1
ERR_NO_SPOOLJOB = 2
ERR_NO_PERMISSION = 3
ERR_CONV_NOT_POSSIBLE = 4
ERR_BAD_DSTDEVICE = 5
USER_CANCELLED = 6
ERR_SPOOLERROR = 7
ERR_TEMSEERROR = 8
ERR_BTCJOB_OPEN_FAILED = 9
ERR_BTCJOB_SUBMIT_FAILED = 10
ERR_BTCJOB_CLOSE_FAILED = 11
OTHERS = 12.

IF SY-SUBRC EQ 0.

*Una vez que tengo el formulario en la tabla hago el download
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
BIN_FILESIZE = NUMBYTES
FILENAME = 'C:\Aviso.pdf'
FILETYPE = 'BIN'
TABLES
DATA_TAB = IT_PDF
EXCEPTIONS
FILE_WRITE_ERROR = 1
NO_BATCH = 2
GUI_REFUSE_FILETRANSFER = 3
INVALID_TYPE = 4
NO_AUTHORITY = 5
UNKNOWN_ERROR = 6.

IF SY-SUBRC EQ 0.
MESSAGE I014(ZSM) WITH 'Aviso de pago creado'
' '
' '.
*se envia un correo a la direccion correspondiente con el Aviso adjunto
CALL FUNCTION 'ZCORREO'
EXPORTING
correo2 = 'felipe.carrales@gmail.com'
adjunto2 = 'C:\Aviso.pdf'.


ELSE.
MESSAGE I014(ZSM) WITH 'No se pudo transferir el archivo c:\Aviso.pdf'.
DELETE FROM TSP01 WHERE RQIDENT EQ IT_TSP01-RQIDENT.
ENDIF.

ENDIF.



endform.

martes, 22 de septiembre de 2009

Abap enviar mail mediante outlook

report enviamail.


parameters:
correo(50) type c,
adjunto LIKE RLGRAP-FILENAME.


AT SELECTION-SCREEN ON VALUE-REQUEST FOR adjunto.
CALL FUNCTION 'KD_GET_FILENAME_ON_F4'
EXPORTING
STATIC = 'X'
MASK = ''
CHANGING
FILE_NAME = adjunto.

start-of-selection.

TYPE-POOLS : ole2.
DATA: appoutlook TYPE ole2_object.
DATA: appout2 TYPE ole2_object.
DATA: appitem TYPE ole2_object.
DATA: namespace TYPE ole2_object.
DATA: attachments TYPE ole2_object.
DATA: frace01(45), frace02(45).
DATA: p_subj(20) TYPE c.
DATA: p_body TYPE string.




* Crear objeto OLE : outlook.application
CREATE OBJECT appoutlook 'outlook.application'.
* Mensajes vía MAPI
CALL METHOD OF appoutlook 'GetNameSpace' = namespace
EXPORTING
#1 = 'MAPI'.
* Crea objeto nuevo ITEM ( nuevo mensaje )
CALL METHOD OF appoutlook 'CreateItem' = appitem
EXPORTING
#1 = '0'.
* Propiedades TO , SUBJECT y BODY
SET PROPERTY OF appitem 'To' = correo.

* CONCATENATE p_subj 'OC: ' itab-ebeln INTO p_subj
*SEPARATED BY space.
SET PROPERTY OF appitem 'Subject' = 'Correo electronico test'.

CONCATENATE '' 'aca va el texto para el cuerpo del mensaje '
INTO p_body.

SET PROPERTY OF appitem 'Body' = p_body.

* Se adjunta el archivo
if adjunto is not initial.
CALL METHOD OF appitem 'Attachments' = attachments.
CALL METHOD OF attachments 'Add'
EXPORTING
#1 = adjunto.
endif.
* Envíar directamente
CALL METHOD OF appitem 'Send'.
*Se muestra la pantalla del outlook
******** CALL METHOD OF appitem 'Display'.
* Libera Espacio del objeto
FREE OBJECT attachments.
FREE OBJECT appitem.
FREE OBJECT namespace.
* Cierra Outlook ( solo si se quiere que quede cerrado )
***CALL METHOD OF appoutlook 'Quit'.

martes, 8 de septiembre de 2009

Historias Ninja


SI TIENE UN GATO O UN PERRO, ENSÉÑELES COMO AFRONTAR LA CRISIS... ELLOS TAMBIÉN DEBEN APORTAR A LA CASA.


YO ESTOY TRATANDO DE HACER LO MISMO CON MIS MASCOTAS!



Tengo que entrenar a mi perro... mi gato se fue =(

*-*-*
los gatos son de putos!
*-*-*
...Debes tener un Gato
*-*-*
no tengo tengo un perro asesino se llama Satan
*-*-*
Si ese tosco perro te asesina a diario te hara mal
...debes tener un gato
*-*-*
jajajaja
Tonto!
contigo no se puede !
creo que solo hay una manera de acabar con esta discusion
*pffffff explota una bomba de humo y sale caminando entre las tinieblas*


te hare enfadar para que hagas tu maximo esfuerzo

*corre tan rapido que se ven muchos, desenfunda su Katana y le rebana la cabeza a Beckam,
antes de que caiga al suelo, le ensarta la espada en un hojo y te la muestra retadoramente,
mientras el cuerpo aun se mueve saltando chorros de sangre de 6 metros*

Este es tu idolo!...




*-*-*

Ja ja ja *se mofa en tono de indiferencia ante la muerte de beckman, con la vista al suelo,,, y poco a poco dirijiendola a su adversario*

He estado esperando este momento kabuto *comienza musicka emocionante*

Jajaja *se mofa mas*

*Toma su daga de la Muerte, y se hace un corte en el brazo izquierdo*



te mostrare una tecnica Prohibida por los antiguos ninjas

*la sangre cae al suelo y grita*

Tecnica de invocacion Ninja

*Sucede una explosion y aparece un guerrero del infierno invocado, el es es*

*notece que se marco copia a fco jimenez, alias la bestia del infierno, quien se unira a la batalla como invocacion del guerrero ninja*

*-*-*

demasiado tarde...
*solo dejo un rastro la hayabusa susuky entre ruido de el motor que pareciera qeu estan acuchillando a un marrano;
se aleja a 400 km por hora*
Voy a comer orita regresoooooooooooooo...!!
tsssssssssssssssss (ruido de moto)

lunes, 7 de septiembre de 2009

Uso del Join en ABAP

A continuacion un ejemplo del uso del join para cuando necesitar traer
datos de dos o mas tablas.

SELECT VDBEVI~RANL KNA1~NAME1 VDBEVI~SBEWART VDBEVI~DDISPO VDBEVI~BHWHR
INTO CORRESPONDING FIELDS OF TABLE i_table FROM vdbevi
INNER JOIN KNA1 on VDBEVI~KUNNR = KNA1~KUNNR
WHERE VDBEVI~DDISPO IN p_fecham
and VDBEVI~KUNNR = p_KUNNR
and ( VDBEVI~SBEWART = '4530' OR VDBEVI~SBEWART = '4531' ) .

viernes, 4 de septiembre de 2009

Libro namber guan

Una tarde lluviosa en un pueblo olvidado, un retrato que habla por si mismo, otros tiempos: don anciano se da cuenta que no es lo mismo los tiempos han cambiado, nadie tiene tiempo para nada, todos olvidan vivir, el trabajo y la vida atareada los distrae, el no puede ayudar a nadie, solo es un retrato , olvidado en un pueblo lejano, en una cabaña que esta por derrumbarse, pronto no quedara nada, el anciano solo se lamenta, jamaz podra cumplir su mision, jamaz ira al cielo.

Logs llenos en sql

Si tus logs se han llenado, basta crear un backup para ello:
-Abrimos enterprise manager
-Nos desplazamos a la base de datos que tenga el log lleno
-Clic derecho encima de ella : all tasks : backup database
-Selecionamos transaction logs, hubicacion y aceptar

Si marca algun error como alternativa podemos agregar otro archivo de logs:
-Click derecho sobre la base de datos : propiedades
-Pestaña transaction logs : en los 3 puntitos : ponemos nombre aceptar
-El tamaño lo igualamos a el que teniamos anteriormente y listo

Saludos