Tbrowse mostrando apenas um registro

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

porter
Usuário Nível 5
Usuário Nível 5
Mensagens: 1057
Registrado em: 10 Dez 2009 16:44
Localização: OLIMPIA-SP

Tbrowse mostrando apenas um registro

Mensagem por porter »

Boa noite pessoal,
A rotina abaixo, esta mostrando apenas um registro, ja no clipper mostra todos os 2000 registros. Existe diferença na forma de usar o Tbrowse no clipper e no xHarbour ?
Pelo debugador verifiquei que a funcao MOV_PTR nao esta sendo executada, nao sei porque, se alguem puder me dar uma luz onde esta errada a rotina abaixo, fico agradecido.

Desde ja obrigado.

Código: Selecionar todos

FUNCTION MAIN
REQUEST DBFNSX
RDDSETDEFAULT("DBFNSX")
DBSETDRIVER("DBFNSX")
*REQUEST DBFCDX
*RDDSETDEFAULT("DBFCDX")
SETMODE(25,80)
CLEAR
ALTD()
USE CLIENTES
GOTO TOP
PRIV aCampos:={{"CLI_NOME"   , "@!"         , "Cliente"  },;
               {"CLI_ENDE"   , REPL("!",40) , "Endere‡o" }}
@10,00 TO 23,79
BRW_ARQ(10,00,23,79,aCampos)
RETURN

PROCEDURE BRW_ARQ
      use CLIENTES
      PARAMETERS brw_ls,brw_cs,brw_li,brw_ci,brw_campos
      brw:=TBrowseNew(brw_ls+1,brw_cs+1,brw_li-1,brw_ci-1)
      brw:colorspec :=  "&BCB/&AZ , &MR+/&VD , &CYB/&AZ , &PR/&PR , &VDB/&MR , &VM/&AZB"
      brw:headsep:=chr(205)
      brw:colsep:=" "+" "
      brw:gotopblock({|| dbGoTop()})
      brw:gobottomblock({|| dbGoBottom()})
      brw:skipblock({|_1| MOV_PTR(_1)})
      FOR i_=1 TO LEN(brw_campos)
          cp_titu:=brw_campos[i_,3]
          cp_masc:=brw_campos[i_,2]
          cp_:=brw_campos[i_,1]
          brw:addcolumn(tbcolumnnew(cp_titu,&("{||TRAN("+cp_+",["+cp_masc+"])}")))
          brw:getcolumn(i_):width := LEN(TRAN(&cp_.,cp_masc))
          brw:getcolumn(i_):colorblock=&("{||IF(CLI_BLOQ='S',{3,2},IF(CLI_BLOQ='N',{1,2},IF(CLI_MOTBLO='3',{6,2})))}")
          brw:FREEZE:=1  && CONGELA PRIMEIRA COLUNA
      NEXT
      volta_db=.t.
      DO WHILE volta_db
         SETCOLOR("W+/B")
         SET CURSOR OFF
         brw:REFRESHALL()
         DO WHILE !brw:stabilize() .AND. NEXTKEY()=0
         ENDDO
         SETCOLOR("W/G+B")
         crow := ROW()
         READINSERT(.f.)
         tecl_p=INKEY(0)
         brw:dehilite()
      ENDDO

FUNCTION MOV_PTR(a_pular)
      LOCAL ja_pulado := 0
      IF a_pular = 0
         SKIP 0
      ELSE
         DO WHILE !EOF() .AND. !BOF() .AND. a_pular <> ja_pulado
            IF a_pular > 0
               SKIP
               ja_pulado++
            ELSE
               SKIP -1
               ja_pulado--
            ENDI
         ENDDO
         IF EOF() .OR. BOF()
            IF a_pular > 0
               GO BOTTOM
               ja_pulado--
            ELSE
               GO TOP
               ja_pulado++
            ENDIF
         ENDIF
      ENDIF
      RETURN ja_pulado
Editado pela última vez por Toledo em 02 Ago 2011 17:59, em um total de 1 vez.
Razão: Mensagem editada para colocar a tag [ code ]<br>Veja como utilizar esta tag: http://www.pctoledo.com.br/forum/faq.php?mode=bbcode#f2r1
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Tbrowse mostrando apenas um registro

Mensagem por alxsts »

Olá!

Várias coisas podem estar acontecendo.

Notei que na Function Main, você abre a tabela e dá um Go Top. Depois chama a procedure BRW_ARQ e dentro dela abre novamente a tabela, desta vez sem o Go Top. Isto pode estar influindo.

Notei ainda que você está usando NSX. Em outro tópico você e outros colegas disseram que tem tido problemas com este driver. Pode ser isto. Vi que os comando para CDX estão comentados. Funciona com CDX?

Notei que você está tendo problemas com DBEdit(), postados em outro tópico. Pessoalmente prefiro TBrowse()

Quando postar código, utilize a Tag Code que fica na barra de ferramentas da janela onde você digita o post. Isto facilita muito a leitura e análise do código, agilizando o tempo de resposta.
[]´s
Alexandre Santos (AlxSts)
porter
Usuário Nível 5
Usuário Nível 5
Mensagens: 1057
Registrado em: 10 Dez 2009 16:44
Localização: OLIMPIA-SP

Tbrowse mostrando apenas um registro

Mensagem por porter »

Olá AlsAlx
Mesmo com CDX, o tbrowse esta mostrando apenas um registro.
O problema que eu tinha com Dbedit, ja foi resolvido, nao entendi porque quando o arquivo esta vazio, ele nao executa o modo = 3.
Na rotina abaixo, acrescentei goto top, mas nao resolveu.
Estou postando novamente o codigo corrigido, notei que a funcao MDV_PTR nao esta sendo executada, nao sei porque mas ele processa de forma diferente do clipper.

Obrigado,
Abraços, t+

Código: Selecionar todos

FUNCTION MAIN
*REQUEST DBFNSX
*RDDSETDEFAULT("DBFNSX")
*DBSETDRIVER("DBFNSX")
REQUEST DBFCDX
RDDSETDEFAULT("DBFCDX")
SETMODE(25,80)
CLEAR
@01,01 say "02/08/2011"
*ALTD()
USE CLIENTES
GOTO TOP
PRIV aCampos:={{"CLI_NOME"   , "@!"         , "Cliente"  },;
               {"CLI_ENDE"   , REPL("!",40) , "Endere‡o" }}
@10,00 TO 23,79
BRW_ARQ(10,00,23,79,aCampos)
RETURN

PROCEDURE BRW_ARQ
      use CLIENTES
[color=#FF0000]      goto top[/color] 
     index on cli_nome to indnome
      PARAMETERS brw_ls,brw_cs,brw_li,brw_ci,brw_campos
      brw:=TBrowseNew(brw_ls+1,brw_cs+1,brw_li-1,brw_ci-1)
      brw:colorspec :=  "&BCB/&AZ , &MR+/&VD , &CYB/&AZ , &PR/&PR , &VDB/&MR , &VM/&AZB"
      brw:headsep:=chr(205)
      brw:colsep:=" "+" "
      brw:gotopblock({|| dbGoTop()})
      brw:gobottomblock({|| dbGoBottom()})
[color=#FF0000]      brw:skipblock({|_1| MOV_PTR(_1)})[/color]      FOR i_=1 TO LEN(brw_campos)
          cp_titu:=brw_campos[i_,3]
          cp_masc:=brw_campos[i_,2]
          cp_:=brw_campos[i_,1]
          brw:addcolumn(tbcolumnnew(cp_titu,&("{||TRAN("+cp_+",["+cp_masc+"])}")))
          brw:getcolumn(i_):width := LEN(TRAN(&cp_.,cp_masc))
          brw:getcolumn(i_):colorblock=&("{||IF(CLI_BLOQ='S',{3,2},IF(CLI_BLOQ='N',{1,2},IF(CLI_MOTBLO='3',{6,2})))}")
          brw:FREEZE:=1  && CONGELA PRIMEIRA COLUNA
      NEXT
      volta_db=.t.
      DO WHILE volta_db
         SETCOLOR("W+/B")
         SET CURSOR OFF
         brw:REFRESHALL()
         DO WHILE !brw:stabilize() .AND. NEXTKEY()=0
         ENDDO
         SETCOLOR("W/G+B")
         crow := ROW()
         READINSERT(.f.)
         tecl_p=INKEY(0)
         brw:dehilite()
      ENDDO

FUNCTION MOV_PTR(a_pular)
      LOCAL ja_pulado := 0
      IF a_pular = 0
         SKIP 0
      ELSE
         DO WHILE !EOF() .AND. !BOF() .AND. a_pular <> ja_pulado
            IF a_pular > 0
               SKIP
               ja_pulado++
            ELSE
               SKIP -1
               ja_pulado--
            ENDI
         ENDDO
         IF EOF() .OR. BOF()
            IF a_pular > 0
               GO BOTTOM
               ja_pulado--
            ELSE
               GO TOP
               ja_pulado++
            ENDIF
         ENDIF
      ENDIF
      RETURN ja_pulado
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Tbrowse mostrando apenas um registro

Mensagem por Jairo Maia »

Olá Pórter,

Tente alterar a linha 24 que está assim:

Código: Selecionar todos

brw:=TBrowseNew(brw_ls+1,brw_cs+1,brw_li-1,brw_ci-1)
Para esta forma:

Código: Selecionar todos

brw:=TBrowseDB(brw_ls+1,brw_cs+1,brw_li-1,brw_ci-1)
Troquei o TBrowseNew por TBrowseDB. Faça um teste e veja o que acontece.
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
porter
Usuário Nível 5
Usuário Nível 5
Mensagens: 1057
Registrado em: 10 Dez 2009 16:44
Localização: OLIMPIA-SP

Tbrowse mostrando apenas um registro[Resolvido]

Mensagem por porter »

Olá Jairo,
Deu certo,

Obrigado, mais uma vez.

Abraços.
Rafael Tapia
Usuário Nível 1
Usuário Nível 1
Mensagens: 4
Registrado em: 25 Mar 2011 14:54
Localização: Florianopolis

Problemas com o Tbrowse

Mensagem por Rafael Tapia »

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........................
Responder