Problema extraño con hb_memoread

HMG en Español

Moderator: Rathinagiri

Post Reply
User avatar
edufloriv
Posts: 238
Joined: Thu Nov 08, 2012 3:42 am
DBs Used: DBF, MariaDB, MySQL, MSSQL, MariaDB
Location: PERU

Problema extraño con hb_memoread

Post by edufloriv »

Saludos amigos,

Tengo un problema con la lectura de unos archivos .TXT, este es el segmento del código problemático:

Code: Select all

* ------------------------------------------------------ *
* SISTEMA     : INFO-FARMA                               *
* PRG         : VENTGRAB.PRG                             *
* CREADO      : 21-08-2020                               *
* ACTUALIZADO :                                          *
* AUTOR       : EDUARDO V. FLORES RIVAS                  *
* COMENTARIOS : Envia el request al sertvidor de trans.  *
* ------------------------------------------------------ *

FUNC Request_Venta

   LOCAL cOperStamp  := SELLOFECHA()+STRZERO(SYS_ESTAC,2)
   LOCAL cRequestTxt := PATHREQUEST + 'rqst_' + cOperStamp + '.txt'
   LOCAL cRequestCab := PATHREQUEST + 'rqst_' + cOperStamp + '_cab.dbf'
   LOCAL cRequestDet := PATHREQUEST + 'rqst_' + cOperStamp + '_det.dbf'
   LOCAL cResponsTxt := PATHRESPONS + 'resp_' + cOperStamp + '.txt'  //<-ESTE ES EL ARCHIVO .TXT QUE NECESITO LEER
   LOCAL aRequestCab := {;
   {'CLIE_COD','C', 6,0},;
   {'CLIE_NOM','C',50,0},;
   {'DIR1_COD','C', 3,0},;
   {'DIR2_COD','C', 3,0},;
   {'TRAN_COD','C', 3,0},;
   {'VEND_COD','C', 2,0},;
   {'VEND_NOM','C',30,0},;
   {'DOCU_DIA','N', 3,0},;
   {'TOTA_CST','N',12,2},;
   {'TOTA_AFE','N',12,2},;
   {'TOTA_INA','N',12,2},;
   {'TOTA_EXO','N',12,2},;
   {'TOTA_GRA','N',12,2},;
   {'TOTA_IGV','N',12,2},;
   {'TOTA_DOC','N',12,2},;
   {'USER_COD','C', 2,0},;
   {'USER_NOM','C', 2,0},;
   {'ESTA_NUM','N', 2,0}}
   LOCAL cQSTtxt := ''
   LOCAL cRSPtxt := 'Error'+chr(13)+chr(10)
   
      DBCREATE( cRequestCab , aRequestCab )
      USE &cRequestCab ALIAS VCTMP EXCLUSIVE NEW
      APPEND BLANK
      REPLACE VCTMP->CLIE_COD  WITH  Win_Ventas.TxtClieCod.Value
      REPLACE VCTMP->CLIE_NOM  WITH  Win_Ventas.TxtClieDes.Value
      REPLACE VCTMP->DIR1_COD  WITH  Win_Ventas.TxtDireCod.Value
      REPLACE VCTMP->DIR2_COD  WITH  Win_Ventas.TxtDireCod2.Value
      REPLACE VCTMP->TRAN_COD  WITH  Win_Ventas.TxtTranCod.Value
      REPLACE VCTMP->VEND_COD  WITH  Win_Ventas.TxtVendCod.Value
      REPLACE VCTMP->VEND_NOM  WITH  Win_Ventas.TxtVendNom.Value
      REPLACE VCTMP->DOCU_DIA  WITH  Win_Ventas.TxtDias.Value
      REPLACE VCTMP->USER_COD  WITH  Win_Ventas.TxtUserCod.Value
      REPLACE VCTMP->USER_NOM  WITH  Win_Ventas.TxtUserNom.Value
      REPLACE VCTMP->ESTA_NUM  WITH  SYS_ESTAC
      CLOSE VCTMP

      SELE VDTMP
      COPY STRUCTURE TO &cRequestDet 
      COPY TO &cRequestDet
      
      IF FILE(cRequestCab) .AND. FILE(cRequestDet)
         cQSTtxt := 'registro de venta'+chr(13)+chr(10)
         hb_memowrit( cRequestTxt , cQSTtxt )
         IF FILE( cRequestTxt )
            nTrys := 0
            DO WHILE .T.
               IF FILE( cResponsTxt )
                  cRSPtxt := hb_memoread( cResponsTxt )  //<- AQUI EL PROBLEMA, PARECE NO LEER EL ARCHIVO DE TEXTO
                  msginfo( 'Venta grabada.'+CHR(13)+cRSPtxt ) //<- cRSPtxt ESTA VACIO
                  CLOSE VDTMP
//                  DELETE FILE &cResponsTxt
                  EXIT
               ELSE
                  nTrys++
                  IF nTrys > 1000000
                     msginfo( cRSPtxt )
//                     msgexclamation('El servidor de transacciones no responde'+chr(13)+'Revise si el InfoServ esta activo.')
                     EXIT
                  ENDIF
               ENDIF
            ENDDO
         ELSE
            msginfo('ERROR: No se pudo enviar el request al servidor de transacciones.')
         ENDIF
      ELSE
         msginfo('ERROR: No se pudieron crear los archivos request en la carpeta RQS\.')
      ENDIF

RETURN( cRSPtxt )
Leo el archivo con hb_memoread y lo almaceno en la variable cRSPtxt, pero ya en la línea siguiente la variable llega vacia. cResponsTxt tiene el nombre del archivo, si no existiera no pasaria el IF FILE(), me parece un error muy extraño no sé que no estoy viendo.

Agradeceré cualquier ayuda al respecto.

Cordiales saludos,

Eduardo Flores Rivas


LIMA - PERU
User avatar
edufloriv
Posts: 238
Joined: Thu Nov 08, 2012 3:42 am
DBs Used: DBF, MariaDB, MySQL, MSSQL, MariaDB
Location: PERU

Re: Problema extraño con hb_memoread

Post by edufloriv »

Amigos yo de nuevo,

Ya lo resolvi, el problema es que al ser "cResponsTxt" un archivo escrito (hb_memowrit) por OTRA PC, el proceso parece ocurrir tan rápido que el archivo ya existe pero aún está siendo ocupado por esta, así que no me permite la lectura y me devuelve una cadena vacia.

Lo solucione asi:

IF FILE( cResponsTxt )
FOR nLap = 1 TO 250000 //<- Aqui pongo un retraso
NEXT
cRSPtxt := hb_memoread( cResponsTxt ) //<- AHORA SI LO LEE
msginfo( 'Venta grabada.'+CHR(13)+cRSPtxt ) //<- cRSPtxt llega con el contenido
CLOSE VDTMP
DELETE FILE &cResponsTxt
EXIT
ELSE

Recuerdo que habia una forma de producir un retraso de tiempo pero ya no recuerdo como.

Gracias por su atención y saludos.

Eduardo Flores Rivas


LIMA - PERU
Post Reply