rubens escreveu:Fiz uma alteração baseada no comentário dele e só com estas linhas fica funcional...
form_venda.grid_vendas.Value := recno()-8
Rubens, como pode ocorrer uma exclusão de registros, então não se pode tomar como base o RECNO(), pois o cálculo (recno()-8) pode resultar um dos registros deletados. Devido a esta possibilidade que eu sugeri dar um GO BOTTOM para ir para o último registro e depois dar um SKIP - (menos) para retornar uma certa quantidade de registros.
Como o código que você apresentou não tinha como compilar, pois era apenas uma parte do seu código, as minhas sugestões não foram testadas, então tinha que lhe passar as alterações e você fazer os testes para ver se daria certo.
Bom, diante desta situação, então resolvi pegar o código inicial deste seu tópico, que é compilável, e incluir as rotinas de incluir e excluir registros, assim pude fazer alguns testes.
Rubens, compile o exemplo que segue abaixo e faça algumas inclusões (no campo Código digite na sequencia: 11, 12, 13, 14... até 21) e depois clique no Browse e selecione um dos registros e pressione a tecla DELETE e confirme a exclusão. Pode excluir quantos registros quiser e depois volte a incluir os códigos (22, 23, 24, etc).
#include 'minigui.ch'
function main()
local bColor := {202,202,255}
Private lSai:=.T.
set deleted on
if file('ivendast.dbf')
ferase('ivendast.dbf')
endif
aStru := {;
{'CODBARRA','C',13,00},;
{"CODPRO_" ,"C",05,00},;
{"NOMPRO_" ,"C",40,00},;
{"QTDE_" ,"N",12,03},;
{"VALOR_" ,"N",12,02},;
{"TOTAL_" ,"N",12,02},;
{"CODGRU_" ,"C",03,00},;
{"OBSIV_" ,"C",50,00},;
{"LUCRO_" ,"N",12,02},;
{"PRVENDA" ,"N",12,02},;
{"TRIBUTO" ,"C",02,00},;
{"UND_" ,"C",02,00},;
{"VLVISTA" ,"N",12,02},;
{"DESCONTO" ,"N",12,02},;
{"COMISSAOP","N",12,02},;
{"COMISSAO" ,"N",12,02}}
DBCREATE( 'ivendast.dbf' , aStru)
use ivendast.dbf alias ivt
for x=1 to 10
append blank
REPLACE CODBARRA WITH STRZERO(X,13)
REPLACE CODPRO_ WITH STRZERO(X,5)
REPLACE NOMPRO_ WITH STRZERO(X,5)
REPLACE QTDE_ WITH X
REPLACE VALOR_ WITH X
REPLACE TOTAL_ WITH X*X
REPLACE CODGRU_ WITH STRZERO(X,3)
REPLACE OBSIV_ WITH STRZERO(X,5)
REPLACE LUCRO_ WITH X
REPLACE PRVENDA WITH X
REPLACE TRIBUTO WITH '00'
REPLACE UND_ WITH 'UN'
REPLACE VLVISTA WITH X
COMMIT
next
Go Top
define window form_venda;
at 100,300;
width getdesktopwidth();
height getdesktopheight();
main
@ getdesktopheight()-145,5 textbox tbox_codigo;
height 48;
width 290;
font 'verdana' size 22 bold;
backcolor {0,255,255};
fontcolor BLUE;
on enter calcula_valores();
rightalign;
MAXLENGTH 13
n_soma_colunas := (220+140+60+140+150)
n_tam_col_desc := (getdesktopwidth()-n_soma_colunas)-40
DEFINE BROWSE grid_vendas
row 110
col 0
width getdesktopwidth()
height getdesktopheight()-300
headers {'Código Barras','Descrição' ,'Qtde' ,'Und' ,'Unitário' ,'SubTotal'}
widths {220,n_tam_col_desc,140,60,140,150}
WORKAREA IVT
FIELDS {'IVT->CODBARRA','IVT->nompro_' ,'IVT->QTDE_','IVT->UND_','IVT->VALOR_','IVT->TOTAL_'}
READONLY { .F. , .F. , .F. , .F. , .F. , .F. }
LOCK .F.
FONTNAME 'verdana'
FONTSIZE 16
FONTBOLD .T.
backcolor {229,229,229}
nolines .T.
VSCROLLBAR .F.
DYNAMICBACKCOLOR { bColor , bColor, bColor, bColor, bColor, bColor }
justIfy {BROWSE_JTFY_LEFT,BROWSE_JTFY_LEFT,BROWSE_JTFY_RIGHT,BROWSE_JTFY_RIGHT,BROWSE_JTFY_RIGHT,BROWSE_JTFY_RIGHT}
ONGOTFOCUS {|| lSai:=.F. }
ONLOSTFOCUS {|| lSai:=.T. }
END BROWSE
form_venda.grid_vendas.Value:=recno()
// Esc sai do programa/form
on key escape action saidoprograma()
ON KEY DELETE ACTION APAGA_ITEM()
end window
form_venda.tbox_codigo.setfocus
form_venda.maximize
form_venda.activate
return(nil)
*-------------------------------------------------------------------------------
static function saidobrowse()
if msgyesno('Confirma saÃda do browse?','Browse')
form_venda.tbox_codigo.setfocus
endif
return(nil)
*-------------------------------------------------------------------------------
static function saidoprograma()
If lSai
if msgyesno('Confirma saÃda do programa ?','Form')
form_venda.release
endif
Else
saidobrowse()
Endif
return(nil)
********************************************************************************
static function calcula_valores()
X:=Val(form_venda.tbox_codigo.value)
if X>0
append blank
REPLACE CODBARRA WITH STRZERO(X,13)
REPLACE CODPRO_ WITH STRZERO(X,5)
REPLACE NOMPRO_ WITH STRZERO(X,5)
REPLACE QTDE_ WITH X
REPLACE VALOR_ WITH X
REPLACE TOTAL_ WITH X*X
REPLACE CODGRU_ WITH STRZERO(X,3)
REPLACE OBSIV_ WITH STRZERO(X,5)
REPLACE LUCRO_ WITH X
REPLACE PRVENDA WITH X
REPLACE TRIBUTO WITH '00'
REPLACE UND_ WITH 'UN'
REPLACE VLVISTA WITH X
COMMIT
nCrtHandle:=GetControlIndex ( "grid_vendas" , "form_venda" )
nTamPagGrid:=ListViewGetCountPerPage ( _HMG_aControlhandles [nCrtHandle] )
nRegsGrid:=RecCount()
If nRegsGrid>nTamPagGrid
nGoGrid:=Int(nTamPagGrid/2)
If nGoGrid!=(nTamPagGrid/2)
nGoGrid+=1
Endif
Go Bottom
Skip -(nGoGrid)
form_venda.grid_vendas.Value:=recno()
Endif
form_venda.grid_vendas.refresh
setproperty( 'form_venda','tbox_codigo','value', '')
form_venda.tbox_codigo.setfocus
endif
return nil
**************************************************************
static function apaga_item()
local nReg := form_venda.grid_vendas.value
if !lSai
IF MsgOkCancel ('Confirma exclusão do item ?','Exclusao de Item')
ivt->(dbgoto( nReg ))
delete
Go Top
nCrtHandle:=GetControlIndex ( "grid_vendas" , "form_venda" )
nTamPagGrid:=ListViewGetCountPerPage ( _HMG_aControlhandles [nCrtHandle] )
nRegsGrid:=RecCount()
If nRegsGrid>nTamPagGrid
nGoGrid:=Int(nTamPagGrid/2)
If nGoGrid!=(nTamPagGrid/2)
nGoGrid+=1
Endif
Go Bottom
Skip -(nGoGrid)
form_venda.grid_vendas.Value:=recno()
Endif
form_venda.grid_vendas.refresh
ENDIF
endif
form_venda.tbox_codigo.setfocus()
return(nil)
Quando se tem um código que pode ser compilado, fica mais fácil encontrar uma solução para o problema.
Só para relembrar:
Toledo escreveu: E também o comando refresh e setfocus não tem os () no final
Abraços,