Ayuda para modificar el RPreview, Antonio Linares (SOLUCIONADO)

Post Reply
User avatar
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)

Post by Armando »

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
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
User avatar
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

Post by 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 ?
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
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

Post by sysctrl2 »

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 "
User avatar
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

Post by Armando »

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 el código anterior obtengo el siguiente dialogo, al fondo se aprecia la vista previa a enviar por corrro

Image


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.)
Y ahí me bota el siguiente error

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

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
User avatar
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)

Post by Armando »

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
User avatar
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)

Post by sysctrl2 »

Excelente paisano
muestra una pantalla
a ver si me gusta :D :D :D :D
Cesar Cortes Cruz
SysCtrl Software
Mexico

' Sin +- FWH es mejor "
User avatar
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)

Post by Armando »

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
User avatar
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)

Post by sysctrl2 »

excelente paisano, !!
gracias por la explicación
Cesar Cortes Cruz
SysCtrl Software
Mexico

' Sin +- FWH es mejor "
Post Reply