Ola a todos.
Estou com um problema no meu tbrowse de cadastro de compra de produtos:
Tenho varias colunas no meu Tbrowse, digito informacao na 1 coluna, na 2, na 3 e na 4 coluna. Da 4 quero q o sistema posicione o cursor na coluna 9, o Tbowse esta fazendo isso, mas o problema é q como tem muitas colunas nele, so aparece na tela os primeiros 7 campos. Eu gostaria q quando eu der enter na 4 coluna q alem do cursor pular para a coluna 9 a janela do Tbrowse role para a esquerda monstrando o lugar q o cursor esta posicionado para o cliente se liga q tem q digita esse campo agora.
Preciso entao fazer q a janela do meu Tbrowse role para a esquerda mostrando a coluna da validade q nao aparece na janela, ele esta a direita e nao é visualizado.
Coloquei uma imagem do meu Tbrowse em anexo.
o Codigo q estou utilizando é este:
Código: Selecionar todos
FUNCTION BrowCompra()
LOCAL nTecla, lSai, nAtual, oColumn, cCorAtual, lFicar := .T., nLin, nQtdProdComprado
LOCAL nRodape, bTrigger
PRIVATE oBrowProd, nRow, lProdVazio, lContInc := .F., aGrade
nLin := 08 // Indica a Primeira Linha de dados do Browse
nQtdProdComprado := 300 // Indica a Quantidade de Produtos para uma mesma compra
// Fernando Vasata 6-23-98 10:42am
// Aumentado o nQtdProdComprado 100 p 300
nRodape := RodNovoRodape({ ;
{"F4-Alterar Custo", K_F4, {|| AlteraCusto(aProdCompra[nRow,6],aProdCompra[nRow,7])}}, ;
{"F5-Incluir Produto", K_F5, {|| ChamaProd(.F.)}}, ;
{"F7-Alterar Produto", K_F7, {|| AlteraProd(.T.)}}, ; //rafael 463
{"F6-Produtos Pedido", K_F6, {|| ConsProdPedido()}} ;
})
RodDesenha(nRodape)
BEGIN SEQUENCE
WHILE lFicar
nRow := 1
IF LEN(aProdCompra) == 0
lProdVazio := .T.
// AADD(aProdCompra,{SPACE(30),0,SPACE(2),0,0,SPACE(03),SPACE(tam_cod_prod),SPACE(13),{}, 0 , CTOD(' '),SPACE(02),0 })
AADD(aProdCompra,{SPACE(30), 0, SPACE(2), 0, 0, SPACE(03), SPACE(tam_cod_prod), SPACE(13), {}, 0, CTOD(' '), SPACE(02), 0, SPACE(03), SPACE(03), CTOD(' ')})
ELSEIF aProdCompra[1,1] == SPACE(30)
lProdVazio := .T.
ELSE
lProdVazio := .F.
ENDIF
oBrowProd := _TBrowseNew(07,01,19,78)
oBrowProd:headsep:= "Ä"
oBrowProd:colsep := "³"
oBrowProd:footsep:= "Ä"
oBrowProd:addcolumn(tbcolumnnew("Produto", ;
{|| produto->(DBSETORDER(1), DBSEEK(aProdCompra[nRow, 6]+aProdCompra[nRow, 7])), ;
PADR(EvalScript("DESC_PRODUTO_COM_VEN"), 30)}))
oColumn :=tbcolumnnew( 'Qtd.', {||aProdCompra[nRow,2] })
oColumn :picture := '@ZE 999999.999'
oBrowProd:addcolumn(oColumn)
oBrowProd:addcolumn(tbcolumnnew( 'UN',{||aProdCompra[nRow,3] }))
oColumn :=tbcolumnnew( 'Unit rio', {||aProdCompra[nRow,4] })
oColumn :picture := '@ZE 999,999.99'
oBrowProd:addcolumn(oColumn)
oColumn :=tbcolumnnew( 'Total', {|| aProdCompra[nRow,4]*aProdCompra[nRow,2] })
oColumn :picture := '@ZE 9,999,999.99'
oBrowProd:addcolumn(oColumn)
oColumn :=tbcolumnnew( 'IPI', {||aProdCompra[nRow,10] })
oColumn :picture := '@ZE 99.99'
oBrowProd:addcolumn(oColumn)
oColumn :=tbcolumnnew( 'Tot.c/IPI', {|| Trunca( aProdCompra[nRow,2]*(aProdCompra[nRow,4]+(aProdCompra[nRow,4]*(aProdCompra[nRow,10]/100))) ) })
oColumn :picture := '@ZE 9,999,999.99'
oBrowProd:addcolumn(oColumn)
oColumn :=tbcolumnnew( 'CT', {|| aProdCompra[nRow,12] } )
oBrowProd:addcolumn(oColumn)
oColumn :=tbcolumnnew( 'ICM', {|| Trunca( aProdCompra[nRow,13] ) })
oColumn :picture := '@E 999.99'
oBrowProd:addcolumn(oColumn)
oColumn :=tbcolumnnew( 'Previsao', {|| aProdCompra[nRow,11] })
oBrowProd:addcolumn(oColumn)
// so quando houver grade
IF (cfgUsaGrad == 'S')
oColumn :=tbcolumnnew( 'Cor', {|| Retorna('NOME', aProdCompra[nRow, 14], 'cores', 1, .T., .F.) })
oBrowProd:addcolumn(oColumn)
oColumn :=tbcolumnnew( 'Tam', {|| aProdCompra[nRow,15] })
oBrowProd:addcolumn(oColumn)
ENDIF
oColumn :=tbcolumnnew( 'Validade', {|| ( aProdCompra[nRow,16] )})
oColumn : picture := "99/99/99"
oBrowProd:addcolumn(oColumn)
oBrowProd:gotopblock := {|| nRow := 1}
oBrowProd:gobottomblock := {|| nRow := LEN(aProdCompra)}
oBrowProd:skipblock := {|nPular| skipper(nPular, aProdCompra, @nRow)}
nTecla := 0
lSai := .F.
WHILE ! lSai
SET CURSOR OFF
TBStabBarra(oBrowProd)
CalcTotalVendas(21, aProdCompra, .T.) // Calcula e Exibe total compra
EstimaFrete() // calcula e exibe valor do frete
IF !lProdVazio .AND. !lContInc
nAtual := nRow
CustoMedio2(aProdCompra[nRow,6], aProdCompra[nRow,7], aProdCompra[nRow,4], aProdCompra[nRow,2],20,17)
nTecla := InkeyWait(10)
ELSE
nTecla := 0
ENDIF
IF nTecla = K_DOWN .OR. !TecPadrao(oBrowProd,nTecla)
IF nTecla = K_DOWN
oBrowProd:DOWN()
ENDIF
IF VALTYPE(bTrigger := RodTrigger(nRodape, nTecla)) == "B"
EVAL(bTrigger)
ELSEIF nTecla = K_ESC
lSai := .T.
oBrowProd:REFRESHALL()
nTecla := 0
ELSEIF (nTecla = K_DOWN .AND. nAtual == LEN(aProdCompra) ) .OR. lProdVazio .OR. lContInc
cCorAtual := SETCOLOR()
MudaCor(SETCOLOR())
lProdVazio := lSai := IncCompProd(nLin, 09, 18, 21, nQtdProdComprado)
SETCOLOR(cCorAtual)
IF !lSai
oBrowProd:REFRESHALL()
ENDIF
nTecla := 0
ELSEIF nTecla = K_ENTER
oBrowProd:dehilite():hilite()
IF oBrowProd:ColPos < 8 // data previsao
cCorAtual := SETCOLOR()
MudaCor(setcolor())
AltCompProd(nLin)
SETCOLOR(cCorAtual)
ELSEIF oBrowProd:ColPos = 8
AltCT()
IF LASTKEY()<>K_ESC
oBrowProd:ColPos := 9
KEYBOARD CHR(K_ENTER)
ENDIF
ELSEIF oBrowProd:ColPos = 9
AltIcmCompra()
IF LASTKEY()<>K_ESC
IF cPedido == 'S'
KEYBOARD CHR(K_CTRL_PGDN)+CHR( K_CTRL_END )+CHR( K_ENTER )
ELSE
KEYBOARD CHR(K_CTRL_PGDN)+CHR( K_DOWN )
ENDIF
ENDIF
ELSEIF oBrowProd:ColPos = 10
IF cPedido == 'S'
AltDtPrevisao()
ENDIF
KEYBOARD CHR(K_CTRL_PGDN)+CHR(K_DOWN)
ELSEIF oBrowProd:ColPos = 11
Altdatavalid()
KEYBOARD CHR(K_CTRL_PGDN)+CHR(K_DOWN)
ENDIF
oBrowProd:REFRESHALL()
nTecla := 0
ELSEIF nTecla = K_DEL
DelProdCompra(,, .F.)
oBrowProd:REFRESHALL()
nTecla := 0
ELSEIF nTecla = 0
oBrowProd:REFRESHALL()
ENDIF
ENDIF
ENDDO
IF LASTKEY() <> K_ESC .AND. aProdCompra[1,1] <> SPACE(30)
SET CURSOR ON
lFicar := !CompraFinaliza()
SET CURSOR OFF
IF LEN(aProdCompra) >= nQtdProdComprado
CLEAR TYPEAHEAD
lContInc := .F.
ENDIF
ELSEIF LEN(aProdCompra) == 0 .OR. aProdCompra[1,1] == SPACE(30)
lFicar := .F.
ELSEIF LEN(aProdCompra) <> 0
IF Confirma(22,"Abandonar Compra?")
aProdCompra := {}
lFicar := .T.
ELSE
KEYBOARD CHR(K_CTRL_PGDN)+CHR(K_DOWN)
ENDIF
ENDIF
ENDDO
END SEQUENCE
RodRestaura(nRodape)
SET CURSOR ON
RETURN(NIL)
Código: Selecionar todos
FUNCTION IncCompProd(nLinI, nLinIScrool, nLinFScrool, nLinCalc, nQtdProdComprado) // Recebe Numero da Linha Inicial
LOCAL nRet, nReg
LOCAL lBreak := .F. // 31/01/2001
LOCAL nRodape
PRIVATE lAlterou,nIpi,cNmProd, nQuantidade, cUnidade, nVlrUnitario, cGrupo, cCodigo,cCodBarra, cCor, cTamanho, ;
nLin,aGradeSaldo,lTemGrade ,datavalid
nRodape := RodNovoRodape({ ;
{"F5-Incluir Produto", K_F5, {|| ChamaProd(.T.)}}, ;
{"F6-Pedidos", K_F6, {|| ConsProdPedido(.T.)}} ;
})
BEGIN SEQUENCE
lContInc := .F.
oBrowProd:autolite := .F.
oBrowProd:GOBOTTOM()
oBrowProd:PANHOME()
TBStabBarra(oBrowProd)
oBrowProd:autolite := .T.
nLin := oBrowProd:rowpos + nLinI // 7
lAlterou := .F.
IF nLin = nLinFScrool // 15
scroll(nLinIScrool,01,nLinFScrool,78,1) // 8
ELSEIF ! lProdVazio
nLin++
ENDIF
aGradeSaldo :={}
cNmProd := SPACE(50)
nQuantidade := 0
cUnidade := SPACE(02)
nVlrUnitario := 0
nIpi := 0
datavalid := CTOD(' ')
cGrupo := ''//0
cCodigo := ''//0
cCodBarra := SPACE(13)
cCor := SPACE(02)
cTamanho := SPACE(03)
lTemGrade := .f.
@ nLin,02 SAY " ³ ³ ³ ³ ³ "
@ 24,05 SAY REPLICATE('Ä',20)
@ nLin,03 GET cNmProd ;
PICTURE "@!KS30" ;
CONSULTA ConsPadrao({|| MProduto(, STRZERO(p2, 4), .T., .T.)}) ;
VALID (ValCompraProd(@cUnidade, @cGrupo, @cCodigo, @cCodBarra, nQtdProdComprado, nLin, @nIpi) .AND. ;
PerguntaGrade(cGrupo, cCodigo, @cCor, @cTamanho, ,.t.,.t.) .AND. SomaProdGrade())
@ nLin,34 GET nQuantidade ;
PICTURE "@ZE 999999.999" ;
WHEN !lTemGrade .AND. !EMPTY(cNmProd) .AND. MostraScriptProduto(cGrupo, cCodigo) ;
VALID IF(!lTemGrade,nQuantidade > 0,)
@ nLin,48 GET nVlrUnitario ;
PICTURE "@ZE 999,999.99" ;
WHEN !EMPTY(cNmProd) .AND. !lTemGrade ;
CONSULTA {{"F2-Descontos de Custo", K_F2, {|| DescCusto()}}, ;
{"F4-Altera Custo", K_F4, {|| AlteraCusto(cGrupo, cCodigo)}}} ;
VALID IF(!lTemGrade,(nVlrUnitario > 0 .AND. ;
ImpVar(TRANSFORM(nVlrUnitario*nQuantidade,'@E 9,999,999.99'),nLin,59) ) .AND. ;
CustoMedio2(cGrupo, cCodigo, nVlrUnitario,nQuantidade, 20, 17 ),)
@ nLin,72 GET nIpi ;
PICTURE "@ZE 99.99" ;
WHEN !EMPTY(cNmProd) .AND. !lTemGrade;
VALID IF(!lTemGrade,nIpi >= 0,)
@ nLin,112 GET datavalid ;
PICTURE "99/99/99"
Leia(, {nRodape})
IF LASTKEY() <> K_ESC .AND. LEN(aProdCompra) < nQtdProdComprado .AND. (updated() .OR. lAlterou) .AND. !EMPTY(cNmProd)
IF lProdVazio .AND. !lTemGrade
aProdCompra[nRow, 1] := LEFT(cNmProd,30) // Nome do Produto
aProdCompra[nRow, 2] := nQuantidade // Quantidade
aProdCompra[nRow, 3] := cUnidade // Unidade
aProdCompra[nRow, 4] := nVlrUnitario // Valor Unitario
aProdCompra[nRow, 5] := ROUND(nQuantidade*nVlrUnitario,2) // Valor Total
aProdCompra[nRow, 6] := cGrupo // Grupo do produto
aProdCompra[nRow, 7] := cCodigo // Codigo do produto
aProdCompra[nRow, 8] := cCodBarra // Codigo de Barra
aProdCompra[nRow,10]:= nIpi // IPI do Produto
aProdCompra[nRow,11]:= DATE() // data Previsao
aProdCompra[nRow,12]:= Retorna('CT', cGrupo+cCodigo, 'PRODUTO', 1)
aProdCompra[nRow,13]:= Retorna('ICM', cGrupo+cCodigo, 'PRODUTO', 1)
aProdCompra[nRow,16]:= datavalid // data Vencimento
// so quando houver grade
IF (cfgUsaGrad == 'S')
aProdCompra[nRow, 14]:= cCor
aProdCompra[nRow, 15]:= cTamanho
ENDIF
lProdVazio := .F.
ELSEIF !lTemGrade
nRet := ASCAN(aProdCompra,{| x | x[8] == cCodBarra })
IF nRet <> 0 .AND. cPedido <> 'S'
IF cfgUsaGrad == "S" .AND. (aProdCompra[nRet,14] <> cCor .OR. aProdCompra[nRet,15] <> cTamanho)
AADD(aProdCompra,{LEFT(cNmProd,30),;
nQuantidade,;
cUnidade,;
nVlrUnitario,;
ROUND(nQuantidade*nVlrUnitario,2),;
cGrupo,;
cCodigo,;
cCodBarra,;
{},;
nIpi, ;
DATE(),;
Retorna('CT',cGrupo+cCodigo,'PRODUTO',1),;
Retorna('ICM',cGrupo+cCodigo,'PRODUTO',1),;
cCor,;
cTamanho,;
datavalid})
ELSE
lContInc := .T.
aProdCompra[nRet,2] += nQuantidade
aProdCompra[nRet,5] += ROUND(nQuantidade*nVlrUnitario,2)
ENDIF
ELSE
AADD(aProdCompra,{LEFT(cNmProd,30),;
nQuantidade,;
cUnidade,;
nVlrUnitario,;
ROUND(nQuantidade*nVlrUnitario,2),;
cGrupo,;
cCodigo,;
cCodBarra,;
{},;
nIpi, ;
DATE(),;
Retorna('CT',cGrupo+cCodigo,'PRODUTO',1),;
Retorna('ICM',cGrupo+cCodigo,'PRODUTO',1),;
cCor,;
cTamanho,;
datavalid})
ENDIF
ENDIF
IF !lTemGrade
@ nLin,03 SAY LEFT(cNmProd,30)
@ nLin,34 SAY nQuantidade PICTURE "@ZE 999999.999"
@ nLin,45 SAY cUnidade
@ nLin,48 SAY nVlrUnitario PICTURE "@ZE 999,999.99"
@ nLin,59 SAY ROUND(nQuantidade*nVlrUnitario,2) PICTURE "@ZE 9,999,999.99"
oBrowProd:ColPos := 8
KEYBOARD CHR(K_CTRL_PGDN)+CHR(K_DOWN) //CHR(K_ENTER)
ENDIF
ENDIF
CalcTotalVendas(nLinCalc,aProdCompra,.T.) // Calcula e Exibe total vendas
EstimaFrete() // calcula e exibe valor do frete
END SEQUENCE
RodRestaura(nRodape)
RETURN (LEN(aProdCompra)=0 .OR. EMPTY(aProdCompra[1,1])) .OR. (EMPTY(cNmProd) .AND. LASTKEY()==K_ENTER)
Se alguem souber como ajudar, ficarei muito feliz.
Obrigado........................