Página 1 de 1

Alterar dados no DBF inclusos através de uma MATRIZ

Enviado: 09 Ago 2004 08:26
por janio
Olá a todos,

Pessoal, não estou ainda familiarizado com o uso de MATRIZES.

Peguei um exemplo aqui no Fórum e consegui adaptar ao meu sistema e até o momento tem funcionado blz no lançamento de PARCELAS no contas a pagar. Para inclusão e gravação no DBF, blz. Mas se eu quiser alterar depois de lançados, por exemplo, estes dados? Como fazer?

Espero a ajuda de vcs.

Janio

Segue parte do meu PRG.

vQTDPAR := 0
vDATVEM := CTOD("")
PARCELAS := {}

@ li+11,ci+60 get vQTDPAR Pict "99" valid vQTDPAR()
READ

lin := 16
PARCELAS := {}
For i=1 to vQTDPAR
AADD(parcelas, {vVAL, i, vDATVEM})
Next

For i=1 to vQTDPAR
@ lin,41 say parcelas[i,2] Pict "99"
@ lin,45 get parcelas[i,3]
@ lin,56 get parcelas[i,1] pict "@E 999,999.99"
lin := lin + 1
Next
read

SELECT OP
SET ORDER TO 2
go bottom
vNUMOPA = NUMOPA + 1
vFLGPAG="N"
nQTD := vQTDPAR
for I = 1 to nQTD
APPEND BLANK
replace QTDPAR with vQTDPAR,;
CODEMP with vCODEMP,;
CODCRE with vCODCRE,;
TIPDOC with vTIPDOC,;
NUMDOC with vNUMDOC,;
DATDIG with vDATDIG,;
DATEMI with vDATEMI,;
HISTOR with vHISTOR,;
VALDOC with vVALDOC,;
VALNOT with vVALNOT,;
FLGPAG with vFLGPAG,;
NUMOPA with vNUMOPA,;
VALPAR with parcelas[i,1],;
SEQOPA with parcelas[i,2],;
DATVEN with parcelas[i,3]
Next
COMMIT
endif

Enviado: 10 Ago 2004 10:04
por Dudu_XBase
Janio crie um tbrowse ou um dbedit mostrando as parcelas desse pagamento, usuário seleciona qual parcela qr alterar no browse, vc criar uma tela com os dados daquela parcela selecionada, usuário altera e grava.
No meu contas a pagar eu utilizo 2 bancos o cabeçalho (dados gerais do pagmento), o detalhe(parcelas como foi pago), e 2 browses....entendeu..fui

Enviado: 10 Ago 2004 11:52
por janio
Blz Dudu.

A sua sugestão é proveitosa e bem poderia ser utilizada no meu caso. Só tem um problema: Até agora agora só utilizei o DBEDIT para exibição de dados. Não sei utilizar o DBEDIT para alterar dados.

Poderia me passar um exemplo bem "light"?

Aguardooooo. :wink:

Janio

Enviado: 10 Ago 2004 13:08
por Dudu_XBase

Código: Selecionar todos

#include "inkey.ch"    

procedure manutencao ()
    local oConsulta, cTela := savescreen (), cCor := setcolor ()
    local cCod,cNom,cCodigo,cDescricao
    local nOrdem, getlist := {}
   
    dbselectarea("bancos")
    dbsetorder (1)
    set dele on
    setcolor ("w+/b,n/w,n,n,w/b")
    // bordas 
    @ 04,01 to 06,77
    @ 05, 22 say " Cadastro de Bancos"
    @ 07,01 to 22,77
    
    /* cria tbrowse */
    oConsulta := tbrowsedb (08,02,21,76)

    /* define separadores do tbrowse */
    oConsulta:colorspec := "w+/b,n/w,n,n,w/b"
    oConsulta:colsep    := chr (032) + chr (179) + chr (032)
    oConsulta:headsep   := chr (196) + chr (194) + chr (196)
    oConsulta:footsep   := chr (196) + chr (193) + chr (196)

    /* define colunas do tbrowse */
    oCol1 := tbcolumnnew ("Codigo",    {|| bancos->CODIGO })
    oCol2 := tbcolumnnew ("Descricao", {|| bancos->DESCRICAO })

    /* adiciona colunas no tbrowse */
    oConsulta:addcolumn(oCol1)
    oConsulta:addcolumn(oCol2)

    while ( .t. )

	setcursor (0)

	while ( !oConsulta:stabilize () )
	enddo

        // para deixar selecionada toda a linha
        oConsulta:colorrect({oConsulta:rowpos,1,oConsulta:rowpos,oConsulta:colCount},{2,1})
        
	nTecla := inkey (0)

	do case

	    case ( nTecla == K_ESC )
		exit
	
	    case ( nTecla == K_DOWN )
		oConsulta:down ()

	    case ( nTecla == K_UP )
		oConsulta:up ()

	    case ( nTecla == K_LEFT )
		oConsulta:left ()

	    case ( nTecla == K_RIGHT )
		oConsulta:right ()

	    case ( nTecla == K_PGUP )
		oConsulta:pageup ()

            case ( nTecla == K_PGDN )
		oConsulta:pagedown ()

	    case ( nTecla == K_CTRL_PGUP )
		oConsulta:gotop ()

	    case ( nTecla == K_CTRL_PGDN )
		oConsulta:gobottom ()
	    
	    case ( nTecla == K_HOME )
		oConsulta:gotop ()
	    	    
            case ( nTecla == K_END )
	        oConsulta:gobottom ()
	    
	  
	    // Alteração...
	    case ( nTecla == K_ENTER )
                cTela2 := savescreen ()
		setcolor ("w+/bg+,n/w,n,n,w/bg+")
		setpos (08,13); dispout ("[ A L T E R A C A O ]","gr+/bg+")
                setpos (09,19); dispout (bancos->CODIGO, "w/bg+")
                cCODIGO := bancos->CODIGO
		setcursor (1)
		setcursor (0)
                // aki vc colocar suas varives os gets read...replace
                
                

		setcolor (cCor)
                restscreen(,,,,cTela2)
		oConsulta:refreshall ()

	    
	    // pesquisa por codigo
	    case ( nTecla == K_C .or. nTecla == K_c )

		nRecno := recno ()
		dbsetorder (1)

		while ( .t. )

		    mud (11,25,15,40)
		    centraliza (11, "[ C¢digo ]", 25, 40, "w+/b")
		    setcursor (2)

                    cCod := 0
                    @ 13,30 get cCod picture "99999" valid (zeros(@cCod))
		    read

		    setcursor (0)

		    if ( escape () .or. empty (cCod) )
			exit
		    endif

                    dbseek(ccod,.t.)

		    if (eof())
			rin ()
			dbgoto (nRecno)
			loop
		    else
			exit
		    endif

		enddo

		oConsulta:refreshall ()

	    // pesquisa por nome
	    case ( nTecla == K_N .or. nTecla == K_n )

		nRecno := recno ()

                dbsetorder (2)

		while ( .t. )

		    mud (11,25,15,60)
		    centraliza (11, "[ Nome ]", 25, 60, "w+/b")

		    setcursor (2)

                    cNom := space (len(bancos->DESCRICAO))
		    @ 13,28 get cNom picture "@!"
		    read

		    setcursor (0)

		    if ( escape () .or. empty (cNom) )
			exit
		    endif

                    dbseek(cNom,.t.)

		    if (eof())
                        rin ()
                        dbgoto (nRecno)
                        loop
		    else
                        exit
                  endif

		enddo

		oConsulta:refreshall ()
	endcase
        
        oConsulta:refreshcurrent()
    
    enddo

    dbcloseall ()
    restscreen (,,,, cTela)
    setcolor (cCor)
    setcursor (1)
    return


Enviado: 10 Ago 2004 13:35
por janio
Valeu, Dudu.

Vou ver se consigo adaptar ao sistema.

Aceito mais sugestões, alguém se habilita?

Um abraço,


Janio