Amigos del foro:
Necesito modificar el RPreview de la versión FWH2307 para ajustarlo a mis necesidades, que ya tenia yo
realizadas en el RPreview de la versión FWH2012, a continuación mis necesidades:
1.- Modificar el método SendEmail() que está vinculado al botón email de la barra de botones, o hacer
una nueva función para:
2.- Primero debo crear un archivo .PDF tomando el nombre del título de la vista previa o documento,
eso ya lo hace el Rpreview original, pero, me parece que solo es para una página,
mi vista previa normalmente tiene más de una página, para crear el PDF utilizo Img2Pdf.Exe
3.- Armar el correo electrónico para enviarlo, adjuntando el archivo PDF recién creado, definir
los posibles correos adicionales CC y/o CCO, encabezado y cuerpo del correo que tomo de un
dialogo personalizado.
4.- Finalmente enviarlo, para esto cuento con MailBee.Exe
Creo que donde estoy liado es en el punto 2, no lo he logrado
Si alguien esta interesado en apoyarme y no fui lo suficientemente claro, por favor dígamelo para aclarar.
Saludos y muchas gracias
Ayuda para modificar el RPreview, Antonio Linares (SOLUCIONADO)
- Armando
- Posts: 3279
- Joined: Fri Oct 07, 2005 8:20 pm
- Location: Toluca, México
- Been thanked: 4 times
- Contact:
Ayuda para modificar el RPreview, Antonio Linares (SOLUCIONADO)
Last edited by Armando on Sat Mar 01, 2025 6:33 pm, edited 1 time in total.
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
- Antonio Linares
- Site Admin
- Posts: 42655
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Has thanked: 67 times
- Been thanked: 96 times
- Contact:
Re: Ayuda para modificar el RPreview, Antonio Linares
Estimado Armando,
> ya tenia yo realizadas en el RPreview de la versión FWH2012
Y no tienes los cambios que hicistes en el código ?
> ya tenia yo realizadas en el RPreview de la versión FWH2012
Y no tienes los cambios que hicistes en el código ?
- sysctrl2
- Posts: 1066
- Joined: Mon Feb 05, 2007 7:15 pm
- Has thanked: 7 times
- Been thanked: 3 times
- Contact:
Re: Ayuda para modificar el RPreview, Antonio Linares
Code: Select all | Expand
function TmpPdf( oPrn )
local cFilePdf := cTempFile( '.\tmp\' , ".pdf" )
local cMsg := "Exportando a PDF: Aguarda un momento"
if !File( ".\tmp" )
lMkDir( ".\tmp" )
endif
MSGRUN( cMsg, "Usuario", {|| MSPrintToPDF( oPrn:aMeta, cFilePdf, .T. ) } ) //.t. show pdf
return nil
Cesar Cortes Cruz
SysCtrl Software
Mexico
' Sin +- FWH es mejor "
SysCtrl Software
Mexico
' Sin +- FWH es mejor "
- Armando
- Posts: 3279
- Joined: Fri Oct 07, 2005 8:20 pm
- Location: Toluca, México
- Been thanked: 4 times
- Contact:
Re: Ayuda para modificar el RPreview, Antonio Linares
Antonio Linares wrote: Sat Mar 01, 2025 5:11 am Estimado Armando,
> ya tenia yo realizadas en el RPreview de la versión FWH2012
Y no tienes los cambios que hicistes en el código ?
Maestro Antonio:
Efectivamente tengo los cambios, he tratado de adaptarlos al nuevo Rprefview pero mi poca experiencia
en Clases no me ayuda. el código siguiente sustituye al original en el método SendEMail(), hasta aquí todo bien.
Code: Select all | Expand
METHOD SendEmail() CLASS TPreview
LOCAL oDlg,oFont,oIcono
LOCAL aSays := Array(03)
LOCAL aGets := ARRAY(07)
LOCAL acMails := {}
LOCAL aChks := ARRAY(06)
LOCAL oAceptar,oCancelar
LOCAL cName := If( ::oReport != nil, ::oReport:cName, ::oDevice:cDocument )
LOCAL aFiles := ::oDevice:aMeta[1]
// ? Len(aFiles) Me arroja 47
DEFINE FONT oFont NAME "MS Sans Serif" SIZE 0,-10
DEFINE ICON oIcono RESOURCE "AppLogo"
DEFINE DIALOG oDlg RESOURCE "CORREOS" FONT oFont ICON oIcono;
COLOR oApp:nClrText, oApp:nClrBack
REDEFINE SAY aSays[01] VAR "Dirección principal:" ID 11 OF oDlg;
COLOR oApp:nClrText, oApp:nClrBack FONT oFont
REDEFINE GROUP aSays[02] PROMPT "Con copia para *" ID 12 OF oDlg;
COLOR oApp:nClrText, oApp:nClrBack FONT oFont TRANSPARENT
REDEFINE SAY aSays[03] VAR "* Marque la(s) dirección(es) de correo opcional(es) a la(s) que desea enviarle(s) una copia" ID 13 OF oDlg;
COLOR oApp:nClrText, oApp:nClrBack FONT oFont
REDEFINE COMBOBOX aGets[01] VAR oApp:cToAddr ID 101 OF oDlg UPDATE;
PROMPTS acMails;
MESSAGE "Elija la dirección de correo principal"
aGets[01]:lIncSearch := (.T.)
REDEFINE CHECKBOX aGets[02] VAR aChks[01] ID 102 OF oDlg UPDATE;
MESSAGE "Active la casilla si desea enviar solo la primera página"
REDEFINE CHECKBOX aGets[03] VAR aChks[02] ID 103 OF oDlg UPDATE;
WHEN ! EMPTY(ALLTRIM(oApp:acMails[02]));
MESSAGE "Active la casilla si desea enviar copia del correo a esta dirección"
REDEFINE CHECKBOX aGets[04] VAR aChks[03] ID 104 OF oDlg UPDATE;
WHEN ! EMPTY(ALLTRIM(oApp:acMails[03]));
MESSAGE "Active la casilla si desea enviar copia del correo a esta dirección"
REDEFINE CHECKBOX aGets[05] VAR aChks[04] ID 105 OF oDlg UPDATE;
WHEN ! EMPTY(ALLTRIM(oApp:acMails[04]));
MESSAGE "Active la casilla si desea enviar copia del correo a esta dirección"
REDEFINE CHECKBOX aGets[06] VAR aChks[05] ID 106 OF oDlg UPDATE;
WHEN ! EMPTY(ALLTRIM(oApp:acMails[05]));
MESSAGE "Active la casilla si desea enviar copia del correo a esta dirección"
REDEFINE CHECKBOX aGets[07] VAR aChks[06] ID 107 OF oDlg UPDATE;
WHEN ! EMPTY(ALLTRIM(oApp:acMails[06]));
MESSAGE "Active la casilla si desea enviar copia del correo a esta dirección"
REDEFINE BTNBMP oAceptar PROMPT "&Enviar y salir" ID 901 OF oDlg UPDATE;
WHEN ! Empty(AllTrim(oApp:cToAddr));
RESOURCE "SiSave" LEFT ACTION (IIF(EnviarEmail(cName),oDlg:END(),""));
MESSAGE "Realiza los cambios en la tabla"
REDEFINE BTNBMP oCancelar PROMPT "&Salir sin enviar" ID 902 OF oDlg UPDATE;
RESOURCE "NoSave" LEFT ACTION oDlg:END();
MESSAGE "Cancela el proceso"
oCancelar:lCancel := .T.
oDlg:lHelpIcon := (.F.)
ACTIVATE DIALOG oDlg CENTERED ON PAINT (aGets[03]:SetText(oApp:acMails[02]),;
aGets[04]:SetText(oApp:acMails[03]),;
aGets[05]:SetText(oApp:acMails[04]),;
aGets[06]:SetText(oApp:acMails[05]),;
aGets[07]:SetText(oApp:acMails[06]),;
IIF(EMPTY(ALLTRIM(oApp:acMails[02])),aGets[03]:Hide(),),;
IIF(EMPTY(ALLTRIM(oApp:acMails[03])),aGets[04]:Hide(),),;
IIF(EMPTY(ALLTRIM(oApp:acMails[04])),aGets[05]:Hide(),),;
IIF(EMPTY(ALLTRIM(oApp:acMails[05])),aGets[06]:Hide(),),;
IIF(EMPTY(ALLTRIM(oApp:acMails[06])),aGets[07]:Hide(),))
oIcono:END()
oFont:END()
return nil

Con CLIC al botón Enviar y salir se ejecuta la siguiente función
Code: Select all | Expand
function EnviarEMail(cPdfFile)
LOCAL nVez := 0
LOCAL aFiles := ::oDevice:aMeta[1]
// Limpiamos el arreglo de las paginas (aFiles)
FOR nVez := 2 TO LEN(aFiles)
aFiles[nVez] := ""
NEXT
// Pasamos los correos para enviarles copias
IF aCheck[02]
oApp:cCC := ALLTRIM(oApp:acMails[02])
ENDIF
IF aCheck[03]
oApp:cCC := oApp:cCC + "," + ALLTRIM(oApp:acMails[03])
ENDIF
IF aCheck[04]
oApp:cCC := oApp:cCC + "," + ALLTRIM(oApp:acMails[04])
ENDIF
IF aCheck[05]
oApp:cCC := oApp:cCC + "," + ALLTRIM(oApp:acMails[05])
ENDIF
IF aCheck[06]
oApp:cCC := oApp:cCC + " ," + ALLTRIM(oApp:acMails[06])
ENDIF
pdfFileName := AllTrim(pdfFileName)
pdfFileName := ALLTRIM(SUBSTR(pdfFileName,AT(":",pdfFileName) + 1))
cPdfFile := TRUENAME(ALLTRIM(oApp:cPathPdfs) + "\" + ALLTRIM(pdfFileName) + ".Pdf")
? cPdfFile
IF ! FILE(".\img2pdf.exe")
MsgStop("Falta el archivo Img2Pdf.Exe, no se pudo enviar el correo !",oApp:cAplicacion)
RETURN(.F.)
ENDIF
IF ! FILE(".\cImage.Dll")
MsgStop("Falta el archivo cImage.Dll, no se pudo enviar el correo !",oApp:cAplicacion)
RETURN(.F.)
ENDIF
IF ! FILE(".\ImgDll.Dll")
MsgStop("Falta el archivo ImgDll.Dll, no se pudo enviar el correo !",oApp:cAplicacion)
RETURN(.F.)
ENDIF
FOR nVez := 1 TO LEN(aFiles)
IF nVez == 1
/*
-r = Pone la resolución en el archivo PDF generado
-1 = Usa la resolución del archivo original
-o = Va seguido del nombre del archivo PDF que será generado
*/
WaitRun("img2pdf.exe -$ 55XSD423445544KWET56 -r -1 -o " +;
'"' + ALLTRIM(cPdfFile) + '"' + SPACE(01) +;
'"' + ALLTRIM(aFiles[nVez]) + '"',0) // El cero es para evitar la ventana del DOS
ELSE
/*
-p = Agrega a un archivo PDF existente
1 = significa que lo agrega al final del archivo existente
-r = Pone la resolución en el archivo PDF generado
-1 = Usa la resolución del archivo original
-o = Va seguido del nombre del archivo PDF que será generado
*/
WaitRun("img2pdf.exe -$ 55XSD423445544KWET56 -p 1 -r -1 -o " +;
'"' + ALLTRIM(cPdfFile) + '"' + SPACE(01) +;
'"' + ALLTRIM(aFiles[nVez]) + '"',0) // El cero es para evitar la ventana del DOS
ENDIF
NEXT
RETURN(.T.)
Code: Select all | Expand
Application
===========
Path and name: D:\SiaWin40\SiaWin40.Exe (32 bits)
Size: 6,311,424 bytes
Compiler version: Harbour 3.2.0dev (r1904111533)
FiveWin version: FWH 23.07
C compiler version: Borland/Embarcadero C++ 7.0 (32-bit)
Windows 11 64 Bits, version: 6.2, Build 9200
Time from start: 0 hours 0 mins 22 secs
Error occurred at: 01/03/2025, 09:29:57
Error description: Error BASE/1003 No existe la variable: SELF
Stack Calls
===========
Called from: Source\rpreview.prg => ENVIAREMAIL( 1967 )
Called from: Source\rpreview.prg => (b)TPREVIEW_SENDEMAIL( 1937 )
Called from: .\source\classes\BTNBMP.PRG => TBTNBMP:CLICK( 792 )
Called from: .\source\classes\BTNBMP.PRG => TBTNBMP:LBUTTONUP( 1083 )
Called from: .\source\classes\CONTROL.PRG => TCONTROL:HANDLEEVENT( 1847 )
Called from: .\source\classes\BTNBMP.PRG => TBTNBMP:HANDLEEVENT( 2135 )
Called from: .\source\classes\WINDOW.PRG => _FWH( 3693 )
Called from: => DIALOGBOX( 0 )
Called from: .\source\classes\DIALOG.PRG => TDIALOG:ACTIVATE( 307 )
Called from: Source\rpreview.prg => TPREVIEW:SENDEMAIL( 1956 )
Called from: Source\rpreview.prg => (b)TPREVIEW_BUILDBUTTONBAR( 397 )
Called from: .\source\classes\BTNBMP.PRG => TBTNBMP:CLICK( 792 )
Called from: .\source\classes\BTNBMP.PRG => TBTNBMP:LBUTTONUP( 1083 )
Called from: .\source\classes\CONTROL.PRG => TCONTROL:HANDLEEVENT( 1847 )
Called from: .\source\classes\BTNBMP.PRG => TBTNBMP:HANDLEEVENT( 2135 )
Called from: .\source\classes\WINDOW.PRG => _FWH( 3693 )
Called from: => SYSREFRESH( 0 )
Called from: .\source\function\MSGRUN.PRG => STOPUNTIL( 72 )
Called from: Source\rpreview.prg => TPREVIEW:ACTIVATE( 181 )
Called from: Source\rpreview.prg => RPREVIEW( 2051 )
Called from: Source\vrd.prg => VRD:END( 554 )
Called from: Source\SiaWin1a.Prg => IMPRIMIR( 4365 )
Called from: Source\SiaWin1a.Prg => (b)SIAWIN1A( 713 )
Called from: .\source\classes\BTNBMP.PRG => TBTNBMP:CLICK( 792 )
Called from: .\source\classes\BTNBMP.PRG => TBTNBMP:LBUTTONUP( 1083 )
Called from: .\source\classes\CONTROL.PRG => TCONTROL:HANDLEEVENT( 1847 )
Called from: .\source\classes\BTNBMP.PRG => TBTNBMP:HANDLEEVENT( 2135 )
Called from: .\source\classes\WINDOW.PRG => _FWH( 3693 )
Called from: => WINRUN( 0 )
Called from: .\source\classes\WINDOW.PRG => TMDIFRAME:ACTIVATE( 1118 )
Called from: Source\SiaWin.Prg => MAIN( 168 )
System
LOCAL aFiles := ::oDevice:aMeta[1]
Maestro y amigos, muchas gracias por el apoyo
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
- Armando
- Posts: 3279
- Joined: Fri Oct 07, 2005 8:20 pm
- Location: Toluca, México
- Been thanked: 4 times
- Contact:
Re: Ayuda para modificar el RPreview, Antonio Linares (SOLUCIONADO)
Maestro Antonio y amigos del foro:
Problema solucionado, con la orientación de Antonio, lo he solucionado.
Saludos
Problema solucionado, con la orientación de Antonio, lo he solucionado.
Saludos
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
- sysctrl2
- Posts: 1066
- Joined: Mon Feb 05, 2007 7:15 pm
- Has thanked: 7 times
- Been thanked: 3 times
- Contact:
Re: Ayuda para modificar el RPreview, Antonio Linares (SOLUCIONADO)
Excelente paisano
muestra una pantalla
a ver si me gusta

muestra una pantalla
a ver si me gusta




Cesar Cortes Cruz
SysCtrl Software
Mexico
' Sin +- FWH es mejor "
SysCtrl Software
Mexico
' Sin +- FWH es mejor "
- Armando
- Posts: 3279
- Joined: Fri Oct 07, 2005 8:20 pm
- Location: Toluca, México
- Been thanked: 4 times
- Contact:
Re: Ayuda para modificar el RPreview, Antonio Linares (SOLUCIONADO)
Paisano:
La imagen la tienes en el post de arriba, te describo un poco el proceso
Principalmente esta personalización se hizo necesaria pues mi aplicación es un Punto de Venta
donde la gran mayoría de correos es el envío de facturas.
En al RPreview de FWH, al dar clic sobre el botón email, se inicia MAIL adjuntando el PDF y espera
a que el usuario indique los parámetros para el correo, dirección destino, con copia para, encabezado y cuerpo
del correo, etc. es decir, la intervención del usuario y creo que esto lo tienen bien claro todos los colegas.
En mi caso, al dar clic al botón email, se abre un dialogo, como el que ves en el post anterior, donde
se le solicita al usuario indique la dirección destino, ya viene predefinida, hay hasta 6 checks para
hasta 6 posibles correos CC donde el usuario puede elegir a quien enviar copia y a quien no, si no hay
correos adicionales no se muestran todos los checks
El encabezado y cuerpo del correo lo tengo predefinido en una tabla.
Cuando todo esta correcto el usuario da clic sobre el botón Enviar y Salir
Listo, el programa se encarga de crear el PDF, adjuntarlo al correo y enviarlo.
Al final, envía mensaje del resultado del envío
Y, como decía porky pig, eso es to to to todo amigos
La imagen la tienes en el post de arriba, te describo un poco el proceso
Principalmente esta personalización se hizo necesaria pues mi aplicación es un Punto de Venta
donde la gran mayoría de correos es el envío de facturas.
En al RPreview de FWH, al dar clic sobre el botón email, se inicia MAIL adjuntando el PDF y espera
a que el usuario indique los parámetros para el correo, dirección destino, con copia para, encabezado y cuerpo
del correo, etc. es decir, la intervención del usuario y creo que esto lo tienen bien claro todos los colegas.
En mi caso, al dar clic al botón email, se abre un dialogo, como el que ves en el post anterior, donde
se le solicita al usuario indique la dirección destino, ya viene predefinida, hay hasta 6 checks para
hasta 6 posibles correos CC donde el usuario puede elegir a quien enviar copia y a quien no, si no hay
correos adicionales no se muestran todos los checks
El encabezado y cuerpo del correo lo tengo predefinido en una tabla.
Cuando todo esta correcto el usuario da clic sobre el botón Enviar y Salir
Listo, el programa se encarga de crear el PDF, adjuntarlo al correo y enviarlo.
Al final, envía mensaje del resultado del envío
Y, como decía porky pig, eso es to to to todo amigos
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
- sysctrl2
- Posts: 1066
- Joined: Mon Feb 05, 2007 7:15 pm
- Has thanked: 7 times
- Been thanked: 3 times
- Contact:
Re: Ayuda para modificar el RPreview, Antonio Linares (SOLUCIONADO)
excelente paisano, !!
gracias por la explicación
gracias por la explicación
Cesar Cortes Cruz
SysCtrl Software
Mexico
' Sin +- FWH es mejor "
SysCtrl Software
Mexico
' Sin +- FWH es mejor "