Hi guys, i'm trying to use a tbrowse object to show/add/del items to a database.

So far, everything works ok. But i don't know what i have to do, so changes made on the database, reflect themselves on the tbrowse.

For example. If a delete and item, the change is not reflected on the tbrowse 'till i press a key again.

Also, don't know why this line:

Code:
@ 11,35 get vcant picture "999999" valid vcant >= 0 .AND. vcant <= xmesal read
doesn't allow me to enter more than one digit. Ones you enter a number, the program goes on, like if i hit enter or something.

well thanks in advance, hope u can help me.

Matias.-

this is the code:

Code:
#include "inkey.ch"

public vserv
public sinon
private vcod
private vfech
private conf
private vcant
private vmed
private aux
private ren
vconti := .t.
rest from depura additive

select 1
use xmedica
set index to xmedica, xmedesc

select 2
use ypartida
set index to ypartida

select 3
use ymovim
set index to ymcod, ymfe, ymser, ymtd, ymsmf, ytip, ymoli, ymremito, ymfech

select 4
use zsinoni
set index to zsinini

select 5
use zserv
set index to zsenom

select 6
use rtemp

@ 5,1  clear to  5,58
@ 5,71 clear to  5,78
@ 7,1  clear to 19,78

centrat("SALIDA DE MEDICAMENTOS","1.3.2")

vremito := 0
select ymovim
set order to 8
go bottom
while remito = 0 .and. !bof()
        go(recno() - 1)
end do
vremito := remito
set order to 1

do while .T.

   auxiliar := .T.

   centrat("SALIDA DE MEDICAMENTOS          REMITO : "+str(vremito+1),"1.3.2")
   centram("[ESC] FINALIZAR")

   vmed  := space(20)
   vserv := space(6)
   vfech := date()

   @ 7,1 clear to 8,78

   select ZSERV
   set key - 1 to buscoari
   @ 7,4  say "SERVICIO [F2] : " get vserv picture "######" valid ex_sern(vserv) .AND. .NOT. empty(vserv)
   @ 7,40 say "NOMBRE : "                                                                                                
   read
   vcodserv := vserv
   set key - 1 to

   if lastkey() = 27 .or. empty(vserv)
      exit
   endif

   select ZSERV
   set index to ZSERV,ZSENOM
   seek vserv
   if found()
      @  7,50 say substr(ZSENOM,1,25)         
   endif
   set index to ZSENOM,ZSERV
   @  8,4 say  "FECHA                   : " get vfech valid (vfech <= date())       
   @  8,43 say "RESPONSABLE: " get vmed picture "@!"       
   read

   @  9,1 to 9,78
   @ 10,1  say "Descripcion [F2]"         
   @ 10,35 say "Cantidad"         

  SAVE SCREEN TO hola
  tbr2()
  RESTORE SCREEN FROM hola

  select rtemp
  zap

enddo

close all

return

*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
*+
procedure impsaldo
local cant

select xmedica
cant := xmedica->xmesal

select rtemp
go top
do while .NOT. eof()
   if rtemp->codigo = vcod
      cant := cant - rtemp->cant
   endif
   skip
enddo

@ 22,10 say "Existencia farmacia: "+strtran(str(cant,9,0)," ","0") color "W+/B"

return  

*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
*+
FUNCTION Tbr2()
   LOCAL oBrow, oCol, nKey

   USE rtemp

   //SETCOLOR("N/W")
   //SCROLL()
   //SETCOLOR("W+/BG,GR+/B")
   //SCROLL( 2, 6, 22, 72 )
   //@ 2, 6 TO 22,72 DOUBLE

   oBrow := TBROWSEDB( 12, 1, 19, 45 )
   oBrow:headSep := CHR(205) + CHR(209) + CHR(205) // ÍÑÍ
   oBrow:colSep  := CHR(32) + CHR(179) + CHR(32)   //  ³

   oCol := TBCOLUMNNEW( "DESCRIPCION", {|| rtemp->droga} )
   oBrow:addColumn( oCol )
   oCol := TBCOLUMNNEW( "CANTIDAD", {|| rtemp->cant} )
   oBrow:addColumn( oCol )

   WHILE .T.

      oBrow:refreshAll()

      WHILE ( !oBrow:stabilize() )
         nKey := INKEY()
         IF ( nKey != 0 )
            EXIT // abort stabilization if a key is waiting

         ENDIF

      END

      IF ( oBrow:stable )
         nKey := INKEY(0)

      ENDIF

      DO CASE  
      CASE nKey == K_DOWN 
         oBrow:down()

      CASE nKey == K_UP
         oBrow:up()

      CASE nKey == K_F2

         vcod  := space(14)
         sinon := space(25)
         vcant := 0

         select XMEDICA
         do busaricod
         
         select XMEDICA
         seek vcod
         @ 11,1  say substr(XMEDESC,1,25) COLOR "W/B"

         do impsaldo
         select XMEDICA
         @ 11,35 get vcant picture "999999" valid vcant >= 0 .AND. vcant <= xmedica->xmesal COLOR "W/B"
         read

         select RTEMP
         append blank
         rtemp->droga := substr(XMEDICA->XMEDESC,1,25)
         rtemp->cant := vcant
         rtemp->codigo := vcod

         do impsaldo

         oBrow:goTop()

      CASE nKey == K_DEL
         DELETE

         oBrow:refreshCurrent()

      CASE nKey == K_ESC
         valert := alert("QUE DESEA HACER?",{"CONTINUAR","NO GUARDAR","GUARDAR"})

         DO CASE
            CASE valert == 1
                 
            CASE valert == 2
                 exit 

            CASE valert == 3

                 select rtemp
                 go top

                 do while .NOT. eof()

                    vcod := rtemp->codigo
                    vcant := rtemp->cant

                    if auxiliar = .T.
                       vremito  := vremito+1
                       auxiliar := .F.
                    end if

                    select xmedica
                    seek vcod
                    field->xmesal := xmesal - vcant

                    select ymovim
                    append blank
                    field->codigo  := vcod
                    field->ymofech := vfech
                    field->ymotipo := "S"
                    field->ymocant := vcant
                    field->coserv  := vcodserv
                    field->ymonom  := vmed
                    field->remito  := vremito

                    select ypartida
                    seek vcod
                    do while vcant > 0
                       if ypasal > vcant
                          field->ypasal := ypasal - vcant
                          vcant         := 0
                       else
                          temp          := ypasal
                          field->ypasal := 0
                          vcant         -= temp
                          skip
                       endif
                    enddo

                    select rtemp
                    skip
       
                 enddo
                 exit
         ENDCASE

      ENDCASE

   END

RETURN (NIL)