Visualizar SAY dentro de un ciclo y procesos...(Solucionado)

Post Reply
ACC69
Posts: 619
Joined: Tue Dec 12, 2006 7:34 pm
Contact:

Visualizar SAY dentro de un ciclo y procesos...(Solucionado)

Post by ACC69 »

Hola buenos dias, de antemano les envio cordial saludos.

Ya tengo casi mas de un mes que no habia entrado al foro, ya que estuve haciendo nuevas adecuaciones y cambios en las tablas,para minizar archivos temporales y moficando variables en todos mis prgs!.

A todos los amigos, tengo dudas sobre say que no me muestra registros estando dentro de un ciclo.

Paso 1:
Como puedo poner un mensaje en un proceso

Ejemplo:

Mensaje("Procesando traspasando saldos ....")
Ciclo de procesos........

Mensaje("Verificando la integridad de cuentas...")
Ciclo de procesos...

Mensaje("Finalizando...")

Paso 2:
Dentro de un ciclo de Do While.
Porque no me muestra los say y ver que se procese los registros de las cuentas o detectar algun registro duplicado,si le pongo MsgInfo() lo muestra pero es engorroso estarle dando enter aceptar y sale aceptar cada registro procesado ,sino que se muestre continuo,sin que salga mensaje de aceptar y enter ...habra otra forma??

Ya que tengo desde principal el dialogo y el MsgRun()

DEFINE DIALOG oDlg RESOURCE "CIEMES" TITLE "Traspasando saldos del mes"
REDEFINE BUTTON oBtn[1] ID 201 OF oDlg ACTION (MsgRun("Generando traspaso de saldos...espera",,;
{|| GENCIEMES()}), oDlg:End())
REDEFINE BUTTON oBtn[2] ID 202 OF oDlg ACTION oDlg:End()
ACTIVATE DIALOG oDlg CENTER VALID (oItem:Enable(),.T.)



Pongo el codigo y alguien me pueda apoyar con ese inconveniente:

Code: Select all

//------------------------------------------------------------------------------
FUNCTION TRASPSDO()
 LOCAL oItem:=oMOpc

 lApSeg := (S04)->AP_SEGNG
 oBtn   := Array(2)

 DEFINE DIALOG oDlg RESOURCE "CIEMES" TITLE "Traspasando saldos del mes"
  REDEFINE BUTTON oBtn[1] ID 201 OF oDlg ACTION (MsgRun("Generando traspaso de saldos...espera",,;
                                                {|| GENCIEMES()}), oDlg:End())
  REDEFINE BUTTON oBtn[2] ID 202 OF oDlg ACTION oDlg:End()
 ACTIVATE DIALOG oDlg CENTER VALID (oItem:Enable(),.T.)


 * Aqui la funcion de procesos
 //------------------------------------------------------------------------------
STATIC FUNCTION GENCIEMES()

Paso 1: 
* En esta parte que metodo debo usar para que me salga cada mensaje de procesos por ejemplo:
 * Mensaje( "Traspasando saldos iniciales de la tabla MOVTCONT a SDOSCTAS

 //--------------------------------------------------------------------------------\\
   *- Paso 5..."[ Traspasando saldos iniciales de MOVTCONT.DBF en SDOSCTAS.DBF]" -*
 //---------------------------------------------------------------------------------\\

 (S14)->( DbGoTop() )

 aAcum   := {{0,0}}
 lSelSeg := .F.

 (S09)->( DbSetOrder(2) )
 (S09)->( DbGoTop() )

 (S09)->( DbSeek(STR(Ano_Per,4)) )

 Cpo    := 'SALD'+TSTR(Mes_Per)
 MesAnt := 'SALD'+TSTR(Mes_Per -1)

 DO WHILE (S09)->( !EOF() )
     IF (S09)->ANOEJERC <= Ano_Per
         SdoAnt := (S09)->&MesAnt
         cCta   := (S09)->CUENTA
         cAno   := (S09)->ANOEJERC

         (S14)->( DbSetOrder(7) )
         (S14)->( SetSeek(cAMMov+(S09)->CUENTA) )
         
        Paso2 : 
        * En esta parte dentro del ciclo como puedo mostrar un say que se este procesando registros ,ya que no me lo muestra
         @ 12,20 say "Cuenta :"+cCta
         @ 13,20 say "Año ejercicio :"+STR(cAno)

         aAcum := {{0,0}}

         DO WHILE FUNNIV(lSelSeg,S09,S11,S14,Cta1,Cta2,Cta3,Cta4) .AND. (S14)->AMMOV=cAM_Ini .AND. (S14)->( !EOF() )
             aAcum[1,1] += (S14)->CARGO
             aAcum[1,2] += (S14)->ABONO

             (S14)->( DbSkip() )
         ENDDO

         IF SdoAnt <> 0 .OR. (aAcum[1,1] - aAcum[1,2]) <> 0
             (S09)->( DbSetOrder(1) )
             *(S09)->( DbSeek((S09)->CUENTA+STR((S09)->ANOEJERC,4)) )
             (S09)->( DbSeek(cCta+STR(cAno,4)) )

             IF (S09)->( !FOUND() )
                 (S09)->( DbAppend() )

                 REPLACE (S09)->CUENTA WITH (S09)->CUENTA
             ELSE
                 DO WHILE (S09)->( !RLOCK() )
                 ENDDO
             ENDIF

             *MsgInfo( SdoAnt+(aAcum[1,1] - aAcum[1,2]) )

             REPLACE (S09)->&CPO WITH SdoAnt+(aAcum[1,1] - aAcum[1,2])

         ENDIF
     ENDIF

     (S09)->( DbSkip() )
 ENDDO

Esperando contar con su amable apoyo de siempre, quedo a la espera de algun colega con ese simple detalle.

Saludos y buen dia.!

Atte: Adrian C. C.
acc69@hotmail.com
Last edited by ACC69 on Fri Dec 11, 2015 5:42 pm, edited 1 time in total.
RSalazarU
Posts: 177
Joined: Wed Jul 16, 2008 12:59 pm
Location: Cochabamba-Bolivia
Contact:

Re: Visualizar SAY dentro de un ciclo y procesos...

Post by RSalazarU »

Hola ACC

yo lo hago de la siguiente manera:

Code: Select all

:  
MsgRun("Reprocesando.. / Reprocesing.. ", , {|oDlg| ReProcesar( oDlg ) })
:

Function ReProcesar(oDlg)
local dPeriodo, dUltimaFecha
      :
      do While dPeriodo <= dUltimaFecha 
         :
         oDlg:cMsg := "Reprocesando.. / Reprocesing..   " + cVALTOCHAR(MONTH(dPeriodo))+"/"+cVALTOCHAR(YEAR(dPeriodo)) //<- aca cambio el mensaje a MsgRun()
         oDlg:Refresh()
         SysRefresh()
         :
         dPeriodo:=EOM(dPeriodo)+1
      enddo
      :
   Return NIL
 
Espero te ayude.

Atentamente,

Rolando
Cochabamba, Bolivia
ACC69
Posts: 619
Joined: Tue Dec 12, 2006 7:34 pm
Contact:

Re: Visualizar SAY dentro de un ciclo y procesos...

Post by ACC69 »

RSalazarU wrote:Hola ACC

yo lo hago de la siguiente manera:

Code: Select all

:  
MsgRun("Reprocesando.. / Reprocesing.. ", , {|oDlg| ReProcesar( oDlg ) })
:

Function ReProcesar(oDlg)
local dPeriodo, dUltimaFecha
      :
      do While dPeriodo <= dUltimaFecha 
         :
         oDlg:cMsg := "Reprocesando.. / Reprocesing..   " + cVALTOCHAR(MONTH(dPeriodo))+"/"+cVALTOCHAR(YEAR(dPeriodo)) //<- aca cambio el mensaje a MsgRun()
         oDlg:Refresh()
         SysRefresh()
         :
         dPeriodo:=EOM(dPeriodo)+1
      enddo
      :
   Return NIL
 
Espero te ayude.

Atentamente,

Rolando
Cochabamba, Bolivia

Hola Rolando gracias por responder y agradezco tu atencion, hare pruebas y te comento,y creo que si funcionaria como tu indicas dentro del ciclo,solo me queda por indicarle un mensaje antes del ciclo para que muestre cada proceso y que el usuario no se desespere en caso que se tarde..por ejemplo:

STATIC FUNCTION GENCIEMES()

Mensaje("Traspasando saldos 1...")
DO WHILE .T.
instrucciones....
ENDDO

Mensaje("Verificando integridad de cuentas")
DO WHILE .T.
Instrucciones
ENDDO

Y asi ...hasta terminar el proceso, no he encontrado algun otro metodo,ya que desde msgrun() de ahi llamo la funcion dentro de un dialogo.

Return Nil

DEFINE DIALOG oDlg RESOURCE "CIEMES" TITLE "Traspasando saldos del mes"
REDEFINE BUTTON oBtn[1] ID 201 OF oDlg ACTION (MsgRun("Generando traspaso de saldos...espera",,;
{|| GENCIEMES()}), oDlg:End())
REDEFINE BUTTON oBtn[2] ID 202 OF oDlg ACTION oDlg:End()
ACTIVATE DIALOG oDlg CENTER VALID (oItem:Enable(),.T.)

Saludos cordiales y gracias por tu atencion Ing. Rolando

Atte: Adrian C. C.
acc69@hotmail.com
ACC69
Posts: 619
Joined: Tue Dec 12, 2006 7:34 pm
Contact:

Re: Visualizar SAY dentro de un ciclo y procesos...

Post by ACC69 »

RSalazarU wrote:Hola ACC

yo lo hago de la siguiente manera:

Code: Select all

:  
MsgRun("Reprocesando.. / Reprocesing.. ", , {|oDlg| ReProcesar( oDlg ) })
:

Function ReProcesar(oDlg)
local dPeriodo, dUltimaFecha
      :
      do While dPeriodo <= dUltimaFecha 
         :
         oDlg:cMsg := "Reprocesando.. / Reprocesing..   " + cVALTOCHAR(MONTH(dPeriodo))+"/"+cVALTOCHAR(YEAR(dPeriodo)) //<- aca cambio el mensaje a MsgRun()
         oDlg:Refresh()
         SysRefresh()
         :
         dPeriodo:=EOM(dPeriodo)+1
      enddo
      :
   Return NIL
 
Espero te ayude.

Atentamente,

Rolando
Cochabamba, Bolivia

Gracias Ing. Rolando si funciono.! :D y al igual ya le busque lo que queria era simple y sencillo asi:

MsgRun("Dejando en cero los saldos iniciales en SDOSCTAS.DBF", "Aguarde...")
Do While eof()
....
Enddo

MsgRun("Verificando integridad de cuentas", "Aguarde...")
Do While eof()
....
Enddo

Gracias saludos y buen dia Ing. Rolando.

Atte: Adrian C. C.
Post Reply