Hola, C. Navarro.
Uso FWH FWH18.04 y Windows 10.
El RTF lo genera el propio FWH. El procedimiento es el siguiente:
Creo un plantilla con
LibreOffice en la que únicamente aparece el logotipo, la dirección y poco más y la guardo en formato RTF. A partir de ahí se empieza a introducir texto en el propio archivo RTF creado y se guarda. Básicamente el procedimiento es el siguiente:
- Code: Select all Expand view RUN
Function creainforme(nRecnoDoc, cnumero, cnombre, obrwregdoc)
local ctextbase, cplantilla, ctxtfile, cbase
Local cRaiz:="\COMPARTIDO\REGSAT\WINSAT\DOCUMENTAL"
Local cnum, cnom, CarpetaSAT, nlibro, libro, fecha, dfecha,clasedoc,cClasedoc
Local aFiles, aDir, apunte
Local cFolder
local cFile:=strzero(nRecnoDoc,8)+".RTF"
local cFichero:="\COMPARTIDO\REGSAT\WINSAT\RTFINT\"+strzero(nRecnoDoc,8)+".RTF"
nlibro = REG->NUM_LIB
dFecha = REG->FECHA
clasedoc =REG->CLASE_DOC
cNum:=Cnumero
cNom:=cnombre
CarpetaSAT:=alltrim(cnum)+"-"+alltrim(cnom)
libro:=strzero(nlibro,6)
fecha:=strzero(day(dfecha),2)+strzero(month(dfecha),2)+str(year(dfecha),4)
apunte:=libro+"-"+fecha+"-"+alltrim(clasedoc)
cFolder:=cRaiz+"\"+CarpetaSAT+"\"+Libro+"\"+fecha+"\"+Clasedoc+"\"
IF FILE("\COMPARTIDO\REGSAT\WINSAT\RTFINT\"+strzero(nRecnoDoc,8)+".RTF") .AND. FILE("\COMPARTIDO\REGSAT\WINSAT\RTFINT\"+cfichero)
MsgAlert("Ya existe el fichero."+CRLF+;
"Puede modificarlo en edición", "Archivo ya existe")
endif
ctextbase:= MEMOREAD("\COMPARTIDO\REGSAT\WINSAT\plantillas\informe.rtf") //ESTA ES LA PLANTILLA RTF
IF !FILE("\COMPARTIDO\REGSAT\WINSAT\plantillas\informe.rtf")
MsgStop("El archivo base no existe","Error")
RETURN nil
ENDIF
cFichero:=strzero(nRecnoDoc,8)+".RTF"
memoread("\COMPARTIDO\REGSAT\WINSAT\plantillas\informe.rtf")
cTxtFile:=MemoRead("\COMPARTIDO\REGSAT\WINSAT\plantillas\informe.rtf")
memowrit("\COMPARTIDO\REGSAT\WINSAT\RTFINT\"+cfichero, cTxtFile,.f. )
memowrit("\COMPARTIDO\REGSAT\WINSAT\DOCUMENTAL\"+CarpetaSAT+"\"+"DIARIO"+"\"+apunte+"\"+"i"+cfichero, cTxtFile,.f. )
if reg->(flock())
reg->fecha_ni:=date()
reg->fileint:=Cfichero
reg->(dbunlock())
oBrwregdoc:refresh()
endif
Msginfo("Se ha creado fichero "+cfichero)
obrwregdoc:refresh()
//opendoc(nRecnoDoc, cFichero, oBrwregdoc)
RETURN nil
Como verás lo que hago es que ,tomando como plantilla un documento RTF en blanco (únicamente con el logotipo y la dirección), creo el RTF renombrándolo con el numero del recno() en la subcarpeta de la empresa que también se crea, lo abro, se introduce el texto y se guarda. Ni siguiera utilizo campos MEMO porque muchas veces el texto es muy extenso y además incluye tablas. Además, no tengo confianza con los campos MEMO para estos casos.
Luego con la siguiente función creo los PDF, pero el resultado no es un reflejo muy fiel al fichero RTF creado:
- Code: Select all Expand view RUN
Function infotopdf (nRecnoDoc, cnumero, cnombre, obrwregdoc)
local oWnd, oBar
local cRtf, cPdf, lOpen, cFile
local cFichero, ctextbase, cplantilla, ctxtfile, cbase
Local cRaiz:="\COMPARTIDO\REGSAT\WINSAT\DOCUMENTAL"
Local cnum, cnom, CarpetaSAT, nlibro, libro, fecha, dfecha,clasedoc,cClasedoc
Local aFiles, aDir
Local cFolder, apunte
LOCAL hDLL := LoadLibrary( "Riched20.dll" )
cFile:=strzero(nRecnoDoc,8)+".RTF"
cFichero:="\COMPARTIDO\REGSAT\WINSAT\RTFINT\"+strzero(nRecnoDoc,8)+".RTF"
IF !FILE("\COMPARTIDO\REGSAT\WINSAT\RTFINT\"+strzero(nRecnoDoc,8)+".RTF")
//MsgNoYes( "El archivo existe. Se va a eliminar el existente y crear uno nuevo. ¿Desea continuar?","Aviso")
MsgAlert("No existe el fichero"+cfichero)
return .f.
endif
nlibro = REG->NUM_LIB
dFecha = REG->FECHA
clasedoc =REG->CLASE_DOC
cNum:=Cnumero
cNom:=cnombre
CarpetaSAT:=alltrim(cnum)+"-"+alltrim(cnom)
libro:=strzero(nlibro,6)
fecha:=strzero(day(dfecha),2)+strzero(month(dfecha),2)+str(year(dfecha),4)
apunte:=libro+"-"+fecha+"-"+alltrim(clasedoc)
cFolder:=cRaiz+"\"+CarpetaSAT+"\"+Libro+"\"+fecha+"\"+Clasedoc+"\"+cfile
cRtf:="\COMPARTIDO\REGSAT\WINSAT\DOCUMENTAL\"+CarpetaSAT+"\"+"DIARIO"+"\"+apunte+"\"+"i"+cfile
DEFINE WINDOW oWnd TITLE "PDF"
DEFINE BUTTONBAR oBar OF oWnd SIZE 100,32 2010
DEFINE BUTTON OF oBar PROMPT "Generar PDF" ;
ACTION RTFTOPDF(cRtf, cPdf, lOpen )
ACTIVATE WINDOW oWnd CENTERED
return nil