Page 1 of 1

Pregunta sobre una parte de código

Posted: Wed Sep 24, 2014 7:27 am
by mastintin
Crisobal , o cuanquiera que lo quiera mirar ....
En el fichero erfile.prg -> function NewReport()

Code: Select all


.....

  SELECT 0
   CREATE VRDTMPST

   APPEND BLANK
   REPLACE FIELD_NAME WITH "NAME"   , FIELD_TYPE WITH "C", FIELD_LEN WITH 120, FIELD_DEC WITH 0
   APPEND BLANK
   REPLACE FIELD_NAME WITH "TEXTNR" , FIELD_TYPE WITH "N", FIELD_LEN WITH 4  , FIELD_DEC WITH 0
   APPEND BLANK
   REPLACE FIELD_NAME WITH "IMAGENR", FIELD_TYPE WITH "N", FIELD_LEN WITH 4  , FIELD_DEC WITH 0
   APPEND BLANK
   REPLACE FIELD_NAME WITH "GRAPHNR", FIELD_TYPE WITH "N", FIELD_LEN WITH 4  , FIELD_DEC WITH 0
   APPEND BLANK
   REPLACE FIELD_NAME WITH "BCODENR", FIELD_TYPE WITH "N", FIELD_LEN WITH 4  , FIELD_DEC WITH 0
   APPEND BLANK
   REPLACE FIELD_NAME WITH "TOP1"   , FIELD_TYPE WITH "N", FIELD_LEN WITH 6  , FIELD_DEC WITH 2
   APPEND BLANK
   REPLACE FIELD_NAME WITH "TOP2"   , FIELD_TYPE WITH "N", FIELD_LEN WITH 6  , FIELD_DEC WITH 2
   APPEND BLANK
   REPLACE FIELD_NAME WITH "LTOP"   , FIELD_TYPE WITH "L", FIELD_LEN WITH 0  , FIELD_DEC WITH 0
   APPEND BLANK
   REPLACE FIELD_NAME WITH "WIDTH"  , FIELD_TYPE WITH "N", FIELD_LEN WITH 6  , FIELD_DEC WITH 2
   APPEND BLANK
   REPLACE FIELD_NAME WITH "HEIGHT" , FIELD_TYPE WITH "N", FIELD_LEN WITH 6  , FIELD_DEC WITH 2
   APPEND BLANK
   REPLACE FIELD_NAME WITH "CONDITION" , FIELD_TYPE WITH "N", FIELD_LEN WITH 1  , FIELD_DEC WITH 0

   CREATE VRDTMP FROM VRDTMPST

   USE VRDTMP.DBF ALIAS "AREAS"
   APPEND BLANK
   REPLACE AREAS->NAME WITH "1. " + GL("Area")
   SetNewReportDefaults()
 ......

 
¿ alguien sabe el motivo por lo que esto se ha codificado asi ? ...
Se crea una dbf con _ para con ellos definir una estructura de otra dbf y crearla ?
Luego usa la dbf y al final graba en un ini y destuye la dbf .
No seria mas logico no usar dbs, guardarlo en arrays y grabarlo ?
No me creo que Tim codificase esto asi gratuitamente , pero que motivo existe ? .
Alguien que me lo aclare ? seguro que existe algo que se me escapa .
Gracias anticipadas.

Re: Pregunta sobre una parte de código

Posted: Wed Sep 24, 2014 10:41 am
by Antonio Linares
Manuel,

Prueba a eliminar el uso de la DBF y solo el INI y si funciona, pues cuanto más simple, mejor :-)

Re: Pregunta sobre una parte de código

Posted: Wed Sep 24, 2014 5:31 pm
by cnavarro
Manuel, yo los uso en mi aplicacion ficheros temporales en lugar de arrays para, en caso de error (si la aplicacion no es muy estable, o existen problemas de suministro electrico, etc.) tengo una rutina que lee los temporales existentes y en funcion de la letra por la que empiezan, sé en qué proceso estaban y me permite restaurarlo (por ejemplo un albaran)
Al principio de hacer pruebas en una aplicacion y ponerla en manos del cliente final, si no confías en la aplicacion, es lógico que guardes parcialmente los avances que hacen los usuarios para que no pierdan todo el trabajo, pero, evidentemente, faltaría la rutina que detecta al principio de la aplicacion que existen ficheros temporales para utilizarlos, y seguir en el estado que estabas.
Voy a revisar el codigo a ver si veo algo de lo que comento
De no ser asi, no le encuentro lógica tampoco
De hecho en las pruebas que realizo en el desarrollo me he encontrado con tener que borrar a mano mas de 70 temporales.

------------- EDITO ---------------------------------------------------
No encuentro de momento su funcionalidad

Re: Pregunta sobre una parte de código

Posted: Thu Sep 25, 2014 8:57 am
by mastintin
He subido código que quita el uso de dbfs temporales al crear nuevos reportes y pasa a usar arrays , está chapucero pero parece que funciona , comunicar bugs ,etc , falta limpiar el código y mejorarlo ....
Saludos.
------------------ edito --------------------------
He subido el código mas limpio y un poco mas optimizado ...
Doy por concluido este capitulo ( de momento ) y quedo a la espera de aparición de bugs y cambios menores ,salvo que se nos ocurra una mejor implementación.

Re: Pregunta sobre una parte de código

Posted: Thu Sep 25, 2014 5:04 pm
by mastintin
Estoy en fase busca y captura de dbfs ... :D . He localizado donde se generan los temporales estos que quedan por decenas en el directorio raiz ...
El programa los usa para la función Undo/Redo y en teoria se borran al salirnos del programa , Que pasa si el programa casca ? ( como es el caso ya que _ cosas ) , que ahi se quedan .
Tengo que comprobar si cuando se vuelve a entrar nueva mente esos archivos se usan , sino lo suyo sería colocarlos en un directorio /tmp y al iniciar el programa borrar todo lo que se encuentre en el ..
¿ Como lo veis ? .
¿Otra opción ? ¿ un ini ?
Espero opiniones .

Re: Pregunta sobre una parte de código

Posted: Thu Sep 25, 2014 9:01 pm
by mastintin
He decidido dejar las dbfs temporales para undo -redo pero ahora se colocan en un directorio temporal que el programa se encarga de borrar . Si por algo esto no se hace ( porque el programa rompe ) . La próxima vez que se lance el programa este , borra el directorio con su contenido y vuelve a crear de nuevo el directorio .
Saludos.

Re: Pregunta sobre una parte de código

Posted: Fri Sep 26, 2014 1:36 am
by Armando
Manuel y amigos:

Disculpa que me entrometa solo para preguntar, :oops:

En un ambiente de red, que va a pasar con el directorio temporal si dos usuarios entran a definir o
modificar su propio reporte?.

Saludos

Re: Pregunta sobre una parte de código

Posted: Fri Sep 26, 2014 5:57 am
by mastintin
Buena observacion . Tendremos que cambiar el directorio temporal a temporal de windows asi cada uno tiene el suyo y no tenemos problemas ( igual que hace rpreview creo )

------------------ edito --------------------------------------
He cambiado el directorio temporal a un directorio colocado en el temporal de windows asi evitamos el problema sugerido por Armando . ( Gracias Armando por tu acertada sugerencia ) .
Subido al repositorio . :D

Re: Pregunta sobre una parte de código

Posted: Tue Nov 11, 2014 11:50 pm
by devtuxtla
Hola Mastintin.

He tenido muy malas experiencias usando el directorio temporal de windows, ya que W7 y W8 tienen restricciones sobre su uso.
Un usuario que NO es administrador de ese equipo, puede no tener derechos de escritura sobre todo C:\WINDOWS

Lo que he encontrado como solucion, es crear un directorio temporal sobre el directorio donde se ejecuta la aplicacion, asi, este puede borrarse si es necesario.

NO usar los directorios de windows, le da a la aplicacion independencia del sistema operativo.

saludos

Re: Pregunta sobre una parte de código

Posted: Wed Nov 12, 2014 11:21 am
by hmpaquito
c:\windows\temp es distinto al contenido de %temp%
Quiza %temp% siempre este disponible para el usuario.

Re: Pregunta sobre una parte de código

Posted: Thu Nov 13, 2014 11:40 am
by mastintin
hmpaquito wrote:c:\windows\temp es distinto al contenido de %temp%
Quiza %temp% siempre este disponible para el usuario.
Efectivamente va al temporal del usuario donde siempre se tienen permiso de escritura.