Hola Antonio:
Te dejo otra opcion funcionando.
Aca simplemente creas una carpeta dentro de tu aplicacion donde guardar los documentos con el mismo nombre que el nro de folio. Y que la operadora se encargue de copiar y pegar tal cual lo deja el Dr., y que Word se encargue de editar el documento. En tu tabla DBF no guardas nada, solo el nro de folio y el nombre del paciente.
Crea un documento llamado VACIO.DOC que este vacio, pero podrias tener en el un encabezado y pie de pagina con logo y demas ya configurado, para que cuando cree un documento nuevo tengas un modelo base.
Yo cree una carpeta llamada DOCS, pero la funcion puede servirte, pasandole como parametro la carpeta donde debe guardar los documentos, para ir separando, por ejemplo, por tipo de estudio.
Es un inicio, pero creo que puede serte util.
#include "Fivewin.ch"
#include "xbrowse.ch"
STATIC oWnd, oBrw
FUNCTION Main()
Local oBar
SET DATE FORMAT "DD/MM/YYYY"
SET DELETE ON
SET CONFIRM ON
SET SOFTSEEK ON
SET 3DLOOK ON
use folios shared new alias "folios"
DEFINE WINDOW oWnd TITLE "A/B/M de Folios"
DEFINE BUTTONBAR oBar SIZE 60,60 OF oWnd 2010
DEFINE BUTTON OF oBar ;
TOOLTIP "Agregar Registro" ;
ACTION (Formu( .t. ),oBrw:Refresh());
PROMPT "Alta" TOP
DEFINE BUTTON RESOURCE "MODI" OF oBar ;
TOOLTIP "Modificar Registro" ;
ACTION (Formu( .f. ),oBrw:Refresh());
PROMPT "Modifica" TOP
DEFINE BUTTON RESOURCE "BAJA" OF oBar ;
TOOLTIP "Eliminar Registro" ;
ACTION (Baja( ),oBrw:Refresh());
PROMPT "Baja" TOP
// Este boton cierra la aplicacion
DEFINE BUTTON RESOURCE "SALE" OF oBar;
TOOLTIP "Cerrar Ventana" ;
ACTION oWnd:End();
PROMPT "Cerrar" TOP
@ 01,01 XBROWSE oBrw alias "folios";
COLUMNS "folio","paciente";
HEADERS "Numero","Apellido y nombre del paciente";
SIZES 90,2000;
OF oWnd
oBrw:CreateFromCode()
oWnd:oClient := oBrw
ACTIVATE WINDOW oWnd valid(cerrar())
RETURN nil
***************************************
** Formulario de altas y modificaciones
STATIC FUNCTION Formu ( lAlta)
LOCAL oGet := ARRAY(8), oBot := ARRAY(3), lRta := .f., aVar := ARRAY(2), oForm
IF lAlta
aVar[1] := 0
aVar[2] := SPACE(30)
ELSE
aVar[1] := folios->folio
aVar[2] := folios->paciente
ENDIF
DEFINE DIALOG oForm TITLE IF(lAlta,"Alta","Modificacion") + " de Folios" FROM 05,10 TO 15,90 OF oWnd
@ 07, 05 SAY "Folio Numero:" OF oForm PIXEL SIZE 60,12 RIGHT
@ 22, 05 SAY "Paciente:" OF oForm PIXEL SIZE 60,12 RIGHT
@ 05, 70 GET oGet[1] VAR avar[1] PICTURE "9999999999" OF oForm PIXEL RIGHT WHEN(lAlta)
@ 20, 70 GET oGet[2] VAR aVar[2] PICTURE "@!" OF oForm PIXEL
@ 35, 70 BUTTON oBot[3] PROMPT "Editar Word" OF oForm PIXEL SIZE 50,12;
ACTION (EWord("Docs",aVar[1]))
@ 50,05 BUTTON oBot[1] PROMPT "&Grabar" OF oForm SIZE 30,10 ;
ACTION ((lRta := .t.), oForm:End() ) PIXEL
@ 50,90 BUTTON oBot[2] PROMPT "&Cancelar" OF oForm SIZE 30,10 ;
ACTION ((lRta := .f.), oForm:End() ) PIXEL CANCEL
ACTIVATE DIALOG oForm CENTER
IF !lRta
RETURN nil
ENDIF
IF aVar[1] = 0
MsgStop("Valores no validos","Error")
RETURN nil
ENDIF
IF lAlta
folios->(dbappend())
ENDIF
REPLACE folios->folio WITH aVar[1], folios->paciente WITH aVar[2]
RETURN nil
*************************************
** Cerrar el archivo abierto
STATIC FUNCTION cerrar ( )
close folios
RETURN .t.
***********************************
** Baja de registro
STATIC FUNCTION Baja ( )
LOCAL mrta := .f., oError, nNum := folios->folio
IF folios->(RecCount()) = 0
RETURN nil
ENDIF
mrta := MsgNoYes("Seguro de eliminar"+CHR(10)+;
"el registro código N°:"+STR(nNum),"Atencion")
IF !mrta
RETURN nil
ENDIF
folios->(rlock())
folios->(dbdelete())
oBrw:Refresh()
RETURN nil
**************************************
** Ejecutar word
FUNCTION EWord(cCamino,nFile)
LOCAL cPathm cFile
cFile := STRTRAN(STR(nFile,10)," ","0")
cPath := hb_CurDrive()+":\"+CurDir()+"\"+ALLTRIM(cCamino)+"\"+ALLTRIM(cFile)+".DOC"
IF !FILE(cPath)
FILECOPY("VACIO.DOC", cPath, .f.)
ENDIF
ShellExecute( ,"open", cPath,,,1 )
RETURN nil