Página 1 de 1

DBedit esconde registros

Enviado: 12 Mai 2011 08:47
por Paulao
Bom dia meus amigos, tenho uma rotina feita com a funcao dbedit de cadastro de produtos que quando eu teclo INSert cadastra um novo item, o que ocorre é que ao teclar insert os registros que ja estavam dadastrados se deslocam para cima ficando o registro novo na primeira linha do dbedit, gostaria que quando a tecla insert fosse pressionada os registros que ja estivesse cadastrados permanecessem na mesma posição que estao e o novo registro fosse colocado abaixo destes. abaixo a rotina que estou utilizando

Código: Selecionar todos

            centraopc("³ INS - Novo Item ³ DEL - Apaga item ³ ESC - Retorna ³","","","","",1)
            sele itosisps
            itensorc("E")
            tela3=savescreen()
            setcolor("n/W")
            whil .t.
                declare v_cpm[7],v_msc[7],v_cbc[7]
                v_cpm[1] = "item_ito"
                v_cpm[2] = "mate_ito"
                v_cpm[3] = "qtde_ito"
                v_cpm[4] = "vlun_ito"
                v_cpm[5] = "vlto_ito"
                v_msc[1] = "@!K"
                v_msc[2] = "@!KS30"
                v_msc[3] = "@ZE 99999.99"
                v_msc[4] = "@ZE 9999999.99"
                v_msc[5] = "@ZE 9999999.99"
                v_cbc[1] = "Item"
                v_cbc[2] = "Material"
                v_cbc[3] = "Qtde."
                v_cbc[4] = "Vl Unit"
                v_cbc[5] = "Vl Total"
                SETCOLOR("GR+*/N")
                setcolor("w/b,w+/r,n/n,n/n,n/w")
                @22,20 SAY"INSERT - Novo Item    DELETE - Apagar item    ESC-Voltar  "
                dbedit(12,03,21,76,v_cpm,"trataorc",v_msc,v_cbc,"ÄÂÄ"," ³ ","ÄÁÄ")
                if lastkey() == K_ESC
                    exit
                endi
            endd
            restscreen(,,,,tela3)
  





func trataorc(modo,coluna)
    campo := v_cpm[coluna]
    masca := v_msc[coluna]
    if modo = 0 .or. modo == 1 .or. modo == 2
        return(1)
    elseif modo == 3
        return(1)
    elseif modo == 4
        igual_var()
        nume_ito = orcsisps->nume_orc
        do case
            case lastkey() = ( K_INS )
                if .not. adireg(0)
                    beep()
                    alert("InclusÆo nÆo foi bem sucedida",3)
                    retu .f.
                else
                    repl flag_ito with orcsisps->flag_orc
                    repl data_ito with orcsisps->data_orc
                    repl nume_ito with orcsisps->nume_orc  
                    numitem()
                    repl item_ito with pitem_ito
                    set cursor on
                    keyb chr(K_CTRL_HOME ) + chr ( K_ENTER ) 
                    return(2)
                endi
            case lastkey() == K_DEL
                if(!eof())                             
                    if .not. reglock(5)
                        beep()
                        alert("ExclusÆo mal sucedida",3)
                        return (1) 
                    else
                        dele
                        mensagem("Tecle <ESC> para sair")
                        unlock
                        return(2)
                    endif
                endi
            case lastkey() == K_DOWN
                if eof()
                    msg("Final do arquivo encontrado")
                    skip-1
                endi
            case lastkey() == K_UP
                if bof()
                    msg("Inicio do arquivo encontrado")
                endi
            case lastkey() == K_ESC
                return(0)
            case lastkey() == K_ENTER
                do while .t.
                    if rlock()
                        exit
                    endif
                enddo
                if coluna==1
                    @row(),col() get pitem_ito pict"@!K"
                    set cursor on
                    read
                    dbegets()  
                    return(2)
                elseif coluna==2
                    @row(),col() get pmate_ito pict"@!KS30"
                    set cursor on
                    read
                    dbegets()                    
                    return(2)
                elseif coluna==3
                    @row(),col() get pqtde_ito pict"@ZE 99999.99"
                    set cursor on
                    read
                    dbegets()  
                    return(2)
                elseif coluna==4
                    @row(),col() get pvlun_ito pict"@ZE 9999999.99";
                    valid subtot("pqtde_ito","pvlun_ito","pvlto_ito")
                    set cursor on
                    read
                    dbegets()  
                    return(2)
                elseif coluna==5
                    @row(),col() get pvlto_ito pict"@ZE 9999999.99"
                    set cursor on
                    read
                    dbegets()  
                    return(2)  
                endi
                set cursor on
            otherwise
                return(1)
        endcase
    endif 


func dbegets(par1)
set cursor off
repl_var()
dbunlock()
dbcommit()
IF LASTKEY()==K_ESC
    RETURN(2)
ENDI
keyb chr( K_RIGHT ) + chr ( K_ENTER )  
retu .t.






DBedit esconde registros

Enviado: 12 Mai 2011 09:36
por billy1943
Toda vez que a função DbEdit abre um banco de dados ou volta da função que controla uma exceção de tecla com o valor 2 (DB_REFRESH), ela remonta a tela e continua a esperar o acionamento de outra tecla.

Assim, o que você precisa é de um índice que remonte a tela e coloque o último produto incluído no final dela.

Sugiro que esse índice seja feito com os números dos registro (recno()), pois ele garantirá que o último digitado será sempre o último da tela, independentemente dos demais índices.

DBedit esconde registros

Enviado: 12 Mai 2011 09:49
por Pablo César
Ou então mantenha o SET ORDER TO 0 (to zero) para que os registros não mostre conforme o índice. Isto mantém os índices ainda aberto (disponíveis) mas não incidem na exibição.

DBedit esconde registros

Enviado: 12 Mai 2011 13:58
por Paulao
Resolvido o problema, após adicionado o registro a rotina tinha a seguinte linha de comando:

keyb chr(K_CTRL_HOME ) + chr ( K_ENTER )

Eu substitui por esta linha

keyb chr(K_CTRL_PGDN)

agora quando teclo insert o cursor sempre vai para a ultima linha conservando as demais em suas posições.


Obrigado a todos