FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Ayuda para modificar el RPreview, Antonio Linares (SOLUCIONADO)
Posts: 3358
Joined: Fri Oct 07, 2005 08:20 PM
Ayuda para modificar el RPreview, Antonio Linares (SOLUCIONADO)
Posted: Sat Mar 01, 2025 02:31 AM

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

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
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM
Re: Ayuda para modificar el RPreview, Antonio Linares
Posted: Sat Mar 01, 2025 05: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 ?

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 1144
Joined: Mon Feb 05, 2007 07:15 PM
Re: Ayuda para modificar el RPreview, Antonio Linares
Posted: Sat Mar 01, 2025 03:09 PM
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 "
Posts: 3358
Joined: Fri Oct 07, 2005 08:20 PM
Re: Ayuda para modificar el RPreview, Antonio Linares
Posted: Sat Mar 01, 2025 03:32 PM
Antonio Linares wrote: 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.
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 el c贸digo anterior obtengo el siguiente dialogo, al fondo se aprecia la vista previa a enviar por corrro




Con CLIC al bot贸n Enviar y salir se ejecuta la siguiente funci贸n
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.)
Y ah铆 me bota el siguiente error
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
La l铆nea 1967 es esta
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
Posts: 3358
Joined: Fri Oct 07, 2005 08:20 PM
Re: Ayuda para modificar el RPreview, Antonio Linares (SOLUCIONADO)
Posted: Sat Mar 01, 2025 06:34 PM

Maestro Antonio y amigos del foro:

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
Posts: 1144
Joined: Mon Feb 05, 2007 07:15 PM
Re: Ayuda para modificar el RPreview, Antonio Linares (SOLUCIONADO)
Posted: Sat Mar 01, 2025 06:54 PM
Excelente paisano
muestra una pantalla
a ver si me gusta :D :D :D :D
Cesar Cortes Cruz

SysCtrl Software

Mexico



' Sin +- FWH es mejor "
Posts: 3358
Joined: Fri Oct 07, 2005 08:20 PM
Re: Ayuda para modificar el RPreview, Antonio Linares (SOLUCIONADO)
Posted: Sat Mar 01, 2025 07:13 PM

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

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
Posts: 1144
Joined: Mon Feb 05, 2007 07:15 PM
Re: Ayuda para modificar el RPreview, Antonio Linares (SOLUCIONADO)
Posted: Sat Mar 01, 2025 11:48 PM

excelente paisano, !!

gracias por la explicaci贸n

Cesar Cortes Cruz

SysCtrl Software

Mexico



' Sin +- FWH es mejor "

Continue the discussion