Página 1 de 1

Tbrowser repetindo linha ao excluir

Enviado: 09 Mar 2007 17:52
por emanuelrdantas
Olá Pessoal,
Estou tendo um problema com meu Tbrowse que coloco pra editar um .dbf. É o seguinte, enquanto eu estou incluindo itens no temp, o Tbrowse atualiza normalmente, ou seja, ele automaticamente adiciona os itens que eu mandei pra esse .dbf. No entanto, quando eu entro no Tbrowser para excluir um item,
ele repete a primeira linha do .dbf até a linha que excluir, mas se eu exclui a primeira linha, ele atualiza normalmente. Entao, meu problema é quando excluo um item que nao esteja na primeira linha.
Agradeço antecipadamente a ajuda de todos.
Obrigado

************************ CODIGO FONTE **************
RESTORE SCREEN FROM TELA_PRINC
set color to w+/b
DO CABECALHO WITH "ENTRADA DE MERCADORIAS","ENTRADA"


********************* VARIAVEIS ****************
nTIPODEOP = 00
aDESCMERC = SPACE(40)
aCODF = SPACE(06)
TIPO = SPACE(01)
aCODBARRA = SPACE(13)
nQTE = 000000
nPRUNIT = 0000.00
nPROTAL = 00000.00
WEXCLU = SPACE(01)
wFINAL = SPACE(01)
nQTELANC = 000000
nCODLAN = SPACE(06)
NUMITENS = 000
nNUMMOV = 00000
nPRAZO1 = 000
nPRAZO2 = 000
nPRAZO3 = 000
nPRAZO4 = 000
dTVENCLANC = CTOD(" / / ")

***************** ARRAYS ************************
DECLARE PROCTIPON := { "COD","DESC" }
DECLARE PROCTIPOF := { "99","@! " }
DECLARE PROCTIPOL := { "CODIGO","TIPO DE OPERACAO" }
DECLARE PROCTIPOSUP := { "_","_" }
DECLARE PROCPRODN := { "CCM01DSMER","NCM01VLCUS" }
DECLARE PROCPRODF := { "@!","9999999.99" }
DECLARE PROCPRODL := { "DESCRICAO DA MERCADORIA","CUSTO" }



*************** VERIFICA INDEXACOES **************



if !file("OPERACOES01.ntx")
use OPERACOES
index on COD to OPERACOES01
endif

if !file("TEMP02.ntx")
use TEMP
index on DESCMERC to TEMP02
endif

if !file("CMCA0204.ntx")
use CMCA02
index on CCM02CDMER to CMCA0204
endif



************* DEFINE AREAS DE TRABALHO ************
SELE 01
USE OPERACOES INDEX OPERACOES01 ALIAS OPERACOES
SELE 02
USE CMCA01 INDEX CMCA0102 ALIAS CMCA01
SELE 03
USE CMCA02 INDEX CMCA0201 ALIAS CMCA02
SELE 04
USE CMCA02 INDEX CMCA0204 ALIAS CMCA0204
SET EXCLU ON
SELE 05
USE MOVIMENTACAO INDEX MOVIMENTACAO01 ALIAS MOVIMENTACAO
SELE 06
USE PAGAR INDEX PAGAR03 ALIAS PAGAR
SELE 07
USE TEMP INDEX TEMP02 ALIAS TEMP
ZAP
SET EXCLU OFF


***************** TBROWSER ***********************
MOSTRALANC := TBrowseDB(09,00,19,78)
oColumn := TBColumnNew(" ",{|| TEMP->DESCMERC})
oColumn2 := TBColumnNew(" ",{|| TEMP->QTE})
oColumn3 := TBColumnNew(" ",{|| TEMP->PRUNIT})
oColumn4 := TBColumnNew(" ",{|| TEMP->PRTOTAL})
MOSTRALANC:addColumn(ocolumn)
MOSTRALANC:addColumn(ocolumn2)
MOSTRALANC:addColumn(ocolumn3)
MOSTRALANC:addColumn(ocolumn4)



******************* PEGA TIPO DE OPERACAO ********

@ 04,00 to 04,79 DOUBLE
@ 03,00
@ 03,00 say "[TIPO DE OPERACAO:]"
@ 03,20 GET nTIPODEOP PICT "99"
READ
IF LASTKEY () = 27
RETURN
ENDIF
SELE OPERACOES
SEEK nTIPODEOP
IF !FOUND()
SAVE SCREEN TO DBEDIT1
SET COLOR TO B/W
GO TOP
DBEDIT (04,20,10,60,PROCTIPON,"FIRMSHOW",PROCTIPOF,PROCTIPOL,PROCTIPOSUP)
@ 24,12 SAY MENSAGEM
SET COLOR TO W+/B
@ 24,00 CLEAR TO 24,79
RESTORE SCREEN FROM DBEDIT1
@ 03,20 CLEAR TO 03,79
@ 03,20 SAY DESC
INKEY(0)
ELSE
@ 03,20 CLEAR TO 03,79
@ 03,20 SAY DESC
@ 03,40 SAY nTIPODEOP
ENDIF
@ 05,00 SAY " DESCRICAO QTE PR.UNIT PR.TOTAL "
@ 06,00 TO 06,79 DOUBLE
@ 08,00 TO 08,79
@ 20,00 TO 20,79
@ 21,00
@ 22,00
@ 21,04 SAY "Total de Itens:"
@ 22,04 say "Total da Nota.:"
DO WHILE .T.
SELE TEMP
COUNT TO NUMITENS
@ 21,20 CLEAR TO 21,24
@ 21,20 SAY NUMITENS
nVALTOTAL = 0000000.00
SELE TEMP
GO TOP
DO WHILE !EOF()
nVALTOTAL = PRTOTAL + nVALTOTAL
SKIP
ENDDO
@ 22,20 CLEAR TO 22,24
@ 22,20 SAY nVALTOTAL
IF aDESCMERC = "SAIR"
RETURN
ENDIF
aDESCMERC = " "
@ 07,00
@ 07,04 GET aDESCMERC PICT "@!"
READ
IF LASTKEY() = 27
EXIT
ENDIF
IF aDESCMERC = " "
do while .t.
while (! MOSTRALANC:stabilize())
nkey = inkey()
if nkey != 0
exit
endif
enddo
if MOSTRALANC:stable()
nkey = inkey()
endif
if nkey == 5
MOSTRALANC:up()
elseif nkey == 24
MOSTRALANC:down()
elseif nkey == 19
MOSTRALANC:left()
elseif nkey == 4
MOSTRALANC:right()
elseif nkey == 1
MOSTRALANC:home()
elseif nkey == 6
MOSTRALANC:end()
elseif nkey == 18
MOSTRALANC:pageUp()
elseif nkey == 3
MOSTRALANC:pageDown()
elseif nkey == 31
MOSTRALANC:goTop()
elseif nkey == 30
MOSTRALANC:goBottom()
elseif nkey == 29
MOSTRALANC:panHome()
elseif nkey == 23
MOSTRALANC:panEnd()
elseif nkey == 26
MOSTRALANC:panLeft()
elseif nkey == 2
MOSTRALANC:panRight()
elseif nkey == 27
EXIT
LOOP
elseif nkey == 7
@ 23,15 say "Tem certeza que deseja excluir esse item? [S/N]"
@ 23,63 get wexclu pict "@!" VALID wEXCLU$"SN"
read
if wexclu = "S"
@ 23,15 CLEAR TO 23,64
DO RRLOC
delete
dbcommit()
UNLOCK
SET EXCLUSIVE ON
PACK
SET EXCLUSIVE OFF
go bottom
skip -10
MOSTRALANC:refreshall()
MOSTRALANC:configure()
MOSTRALANC:forcestable()
ELSE
@ 23,15 CLEAR TO 23,64
LOOP
Endif
ELSEIF nKEY == -4
SAVE SCREEN TO ATUALIZA
DO JANELA WITH 11,20,16,55
@ 12,22 SAY "Digite o prazo:"
@ 12,39 GET nPRAZO1 PICT "999"
READ
@ 12,43 GET nPRAZO2 PICT "999"
READ
@ 12,47 GET nPRAZO3 PICT "999"
READ
@ 12,51 GET nPRAZO4 PICT "999"
READ
@ 23,15 SAY "Deseja finalizar e atualizar esta entrada? [S/N]"
@ 23,64 get wfinal pict "@!" VALID wFINAL$"SN"
READ
IF wFINAL = "S"
SELE TEMP
GO TOP
DO WHILE !EOF()
SELE MOVIMENTACAO
GO BOTTOM
nNUMMOV = SEQUENCIA + 1
DO RRLOC
APPEND BLANK
REPL SEQUENCIA WITH nNUMMOV
REPL TIPODEOP WITH nTIPODEOP
REPL CODMERC WITH TEMP->CODMERC
REPL DESCMERC WITH TEMP->DESCMERC
REPL PRUNIT WITH TEMP->PRUNIT
REPL PRTOTAL WITH TEMP->PRTOTAL
REPL PRAZO1 WITH nPRAZO1
REPL PRAZO2 WITH nPRAZO2
REPL PRAZO3 WITH nPRAZO3
REPL PRAZO4 WITH nPRAZO4
SELE TEMP
SKIP
ENDDO


SELE TEMP
GO TOP
DO WHILE !EOF()
nQTELANC = QTE
nCODLANC = CODMERC
DO PREENCHE1 WITH nCODLANC
SELE CMCA0204
SEEK nCODLANC
nQTELANC = nQTELANC + NCM02QTLJ1
DO RRLOC
REPL NCM02QTLJ1 WITH nQTELANC
UNLOCK
SELE TEMP
SKIP

ENDDO
IF nTIPODEOP = 02
dTVENCLANC = dTSYSTEM+nPRAZO1
SELE PAGAR
DO RRLOC
APPEND BLANK
REPL EMISSAO WITH DTSYSTEM
REPL NUMMOV WITH nNUMMOV
REPL DTVENC WITH dTVENCLANC
REPL VLDUP WITH nVALTOTAL
REPL VLSALDO WITH nVALTOTAL
UNLOCK
ENDIF
IF nTIPODEOP = 03
SELE PAGAR
dTVENCLANC = dTSYSTEM+nPRAZO1
DO RRLOC
APPEND BLANK
REPL EMISSAO WITH dTSYSTEM
REPL NUMMOV WITH nNUMMOV
REPL DTVENC WITH dTVENCLANC
REPL VLDUP WITH nVALTOTAL
REPL VLSALDO WITH nVALTOTAL
UNLOCK
SELE TEMP
GO TOP
DO WHILE !EOF()
nQTELANC = QTE
nCODLANC = CODMERC
DO PREENCHE1 WITH nCODLANC
SELE CMCA0204
SEEK nCODLANC
nQTELANC = nQTELANC + NCM02FILJ1
DO RRLOC
REPL NCM02QTLJ1 WITH nQTELANC
UNLOCK
SELE TEMP
SKIP
ENDDO
ENDIF

aDESCMERC = "SAIR"
EXIT

ENDIF
IF WFINAL = "N"
RESTORE SCREEN FROM ATUALIZA
@ 23,00 TO 23,79
LOOP
ENDIF
endif

enddo
ELSE
SELE TEMP
go bottom
skip -10
MOSTRALANC:refreshall()
MOSTRALANC:configure()
MOSTRALANC:forcestable()
SELE CMCA01
SEEK RTRIM(aDESCMERC)
SAVE SCREEN TO DBEDIT2
SET COLOR TO B/W
DBEDIT (08,15,20,70,PROCPRODN,,PROCPRODF,PROCPRODL,PROCTIPOSUP)
SET COLOR TO W+/B
RESTORE SCREEN FROM DBEDIT2
@ 07,00 CLEAR TO 07,79
@ 07,04 SAY CCM01DSMER
@ 07,47 GET nQTE PICT "999999"
READ
IF nQTE = 0
DO MENSAGEM WITH "Quantidade NAO pode ser ZERO, Tente Novamente",.T.
LOOP
ENDIF
@ 07,47 CLEAR TO 07,53
@ 07,45 SAY nQTE
nPRUNIT = nCM01VLCUS
@ 07,49 SAY nPRUNIT PICT "9999.99"
nPRTOTAL = nQTE * nPRUNIT
@ 07,66 SAY nPRTOTAL PICT "99999.99"
SELE TEMP
DO RRLOC
APPEND BLANK
REPL CODMERC WITH CMCA01->CCM01CDMER
REPL DESCMERC WITH CMCA01->CCM01DSMER
REPL QTE WITH nQTE
REPL PRUNIT WITH nPRUNIT
REPL PRTOTAL WITH nPRTOTAL
REPL ATUALIZADO WITH "N"
UNLOCK
go bottom
skip -10
@ 07,45 CLEAR TO 07,79
MOSTRALANC:refreshall()
MOSTRALANC:configure()
MOSTRALANC:forcestable()
ENDIF
ENDDO
CLOSE DATA
RETURN
function firmshow
IF LASTKEY() = 27
RETURN 0
ENDIF
@ 24,20 say MENSAGEM
return 1
[/code]

Enviado: 09 Mar 2007 17:57
por vailton
Uso assim:

Código: Selecionar todos

DELETE
SKIP 

IF EOF() 
   GO BOTTOM
ENd

Resolve.. a proposito: CARA TU DEU UM PACK ali depois do DELETE ?!?! Pq isto?

Rpz, Nao deu certo

Enviado: 09 Mar 2007 18:44
por emanuelrdantas
Tentei fazer o que vc disse, mas nao deu certo. Por favor, gostaria que vc explicasse o porque da sua solucao, sou iniciante e no tbrowse, tô pior ainda.
O pack que vc perguntou é porque ja tentei de tudo, até o pack, ai desisti e ficou lá, mas ja tirei
Obrigado novamente
Emanuel

Postanto o codigo novamente.

Enviado: 11 Mar 2007 09:34
por emanuelrdantas
Oi Pessoal, estou postanto o código novamente. O anterior copiei e colei, mas nao funcionou. Ficou tudo na mesma linha. Fiz ainda algumas pequenas alteraçoes, mas nada relacionado à exclusão o Tbrowser, pois nao tenho a solucao. Por Favor, pessoal me ajudem, preciso entregar pelo menos o controle de estoque essa semana para a realizao de um balanco
Muito Obrigado
Emanuel

Código: Selecionar todos

RESTORE SCREEN FROM TELA_PRINC
set color to w+/b
DO CABECALHO WITH "ENTRADA DE MERCADORIAS","ENTRADA"


********************* VARIAVEIS ****************
nTIPODEOP = 00
aDESCMERC = SPACE(40)
aCODF = SPACE(06)
TIPO = SPACE(01)
aCODBARRA = SPACE(13)
nQTE = 000000
nPRUNIT = 0000.00
nPROTAL = 00000.00
nPRTOTALIG = 00000.00
WEXCLU = SPACE(01)
wFINAL = SPACE(01)
nQTELANC = 000000
nQTEIGUAL = 000000
aCODLAN = SPACE(06)
aCODIGUAL = SPACE(06)
aREABRIR = SPACE(01)
NUMITENS = 000
nNUMMOV = 00000
nPRAZO1 = 000
nPRAZO2 = 000
nPRAZO3 = 000
nPRAZO4 = 000
dTVENCLANC = CTOD("  /  /    ")

***************** ARRAYS ************************
DECLARE PROCTIPON := { "COD","DESC" }
DECLARE PROCTIPOF := { "99","@! " }
DECLARE PROCTIPOL := { "CODIGO","TIPO DE OPERACAO" }
DECLARE PROCTIPOSUP := { "_","_" }
DECLARE PROCPRODN := { "CCM01DSMER","NCM01VLCUS" }
DECLARE PROCPRODF := { "@!","9999999.99" }
DECLARE PROCPRODL := { "DESCRICAO DA MERCADORIA","CUSTO" }



*************** VERIFICA INDEXACOES **************



if !file("OPERACOES01.ntx")
   use OPERACOES 
   index on COD to OPERACOES01
endif

if !file("TEMP02.ntx")
   use TEMP 
   index on DESCMERC to TEMP02
endif

if !file("CMCA0204.ntx")
   use CMCA02 
   index on CCM02CDMER to CMCA0204
endif

if !file("TEMP01.ntx")
   use TEMP 
   index on CODMERC to TEMP01
endif


if !file("CMCA0101.ntx")
   use CMCA01 
   index on CCM01CDMER to CMCA0101
endif

************* DEFINE AREAS DE TRABALHO ************
SELE 01
USE OPERACOES INDEX OPERACOES01 ALIAS OPERACOES 
SELE 02
USE CMCA01 INDEX CMCA0101,CMCA0102 ALIAS CMCA01   
SELE 03
USE CMCA02 INDEX CMCA0201,CMCA0204 ALIAS CMCA02       
SET EXCLU ON
SELE 05
USE MOVIMENTACAO INDEX MOVIMENTACAO01 ALIAS MOVIMENTACAO
SELE 06
USE PAGAR INDEX PAGAR03 ALIAS PAGAR
SELE 07
USE TEMP INDEX TEMP01,TEMP02 ALIAS TEMP
COUNT TO NUMITENS
IF NUMITENS > 0 
   @ 24,02 SAY "A Ultima Entrada NAO foi Atualizada. Deseja Reabrir-la? [S/N]"
   @ 24,64 GET aREABRIR
   READ
   IF aREABRIR = "N"
   ZAP
   ENDIF
ENDIF
SET EXCLU OFF


***************** TBROWSER ***********************
MOSTRALANC := TBrowseDB(09,00,19,78)
   oColumn := TBColumnNew("        ",{|| TEMP->DESCMERC})
   oColumn2 := TBColumnNew("      ",{|| TEMP->QTE})
   oColumn3 := TBColumnNew("         ",{|| TEMP->PRUNIT})
   oColumn4 := TBColumnNew("           ",{|| TEMP->PRTOTAL})
   MOSTRALANC:addColumn(ocolumn)
   MOSTRALANC:addColumn(ocolumn2)
   MOSTRALANC:addColumn(ocolumn3)
   MOSTRALANC:addColumn(ocolumn4)



******************* PEGA TIPO DE OPERACAO ********

@ 04,00 to 04,79 DOUBLE
@ 03,00
@ 03,00 say "[TIPO DE OPERACAO:]"
@ 03,20 GET nTIPODEOP PICT "99" 
READ
IF LASTKEY () = 27 
   RETURN 
ENDIF
SELE OPERACOES
SEEK nTIPODEOP
IF !FOUND()
    SAVE SCREEN TO DBEDIT1
    SET COLOR TO B/W
    GO TOP
    DBEDIT (04,20,10,60,PROCTIPON,"FIRMSHOW",PROCTIPOF,PROCTIPOL,PROCTIPOSUP)
    @ 24,12 SAY MENSAGEM
    SET COLOR TO W+/B
    @ 24,00 CLEAR TO 24,79
    RESTORE SCREEN FROM DBEDIT1
    @ 03,20 CLEAR TO 03,79
    @ 03,20 SAY DESC
    INKEY(0)
ELSE 
    @ 03,20 CLEAR TO 03,79
    @ 03,20 SAY DESC
    @ 03,40 SAY nTIPODEOP
ENDIF
@ 05,00 SAY "    DESCRICAO                                   QTE     PR.UNIT      PR.TOTAL      

"
@ 06,00 TO 06,79 DOUBLE
@ 08,00 TO 08,79
@ 20,00 TO 20,79
@ 21,00
@ 22,00
@ 21,04 SAY "Total de Itens:"
@ 22,04 say "Total da Nota.:"
DO WHILE .T.
   SELE TEMP
   COUNT TO NUMITENS
   @ 21,20 CLEAR TO 21,24
   @ 21,20 SAY NUMITENS
   nVALTOTAL = 0000000.00
   SELE TEMP
   GO TOP
   DO WHILE !EOF()
      nVALTOTAL = PRTOTAL + nVALTOTAL
      SKIP
   ENDDO
   @ 22,20 CLEAR TO 22,24
   @ 22,20 SAY nVALTOTAL
   IF aDESCMERC = "SAIR"
      RETURN
   ENDIF
   aDESCMERC = "                                            "
   @ 07,00
   @ 07,04 GET aDESCMERC PICT "@!"
   READ
   IF LASTKEY() = 27
      EXIT
   ENDIF
   IF aDESCMERC = "*                                          "  
      SELE TEMP
      go bottom
      skip -10
      MOSTRALANC:refreshall()
      MOSTRALANC:configure()
      MOSTRALANC:forcestable()
      do while .t.
         while (! MOSTRALANC:stabilize()) 
               nkey = inkey()
               if nkey != 0
                  exit
               endif
         enddo
         if MOSTRALANC:stable()
            nkey = inkey()
         endif
         if nkey == 5
            MOSTRALANC:up()
         elseif nkey == 24
            MOSTRALANC:down()
         elseif nkey == 19
            MOSTRALANC:left()
         elseif nkey == 4
            MOSTRALANC:right()
         elseif nkey == 1
            MOSTRALANC:home()
         elseif nkey == 6
            MOSTRALANC:end()
         elseif nkey == 18
            MOSTRALANC:pageUp()
         elseif nkey == 3
            MOSTRALANC:pageDown()
         elseif nkey == 31
            MOSTRALANC:goTop()
         elseif nkey == 30
            MOSTRALANC:goBottom()
         elseif nkey == 29
            MOSTRALANC:panHome()
         elseif nkey == 23
            MOSTRALANC:panEnd()
         elseif nkey == 26
            MOSTRALANC:panLeft()
         elseif nkey == 2
            MOSTRALANC:panRight()
         elseif nkey == 27
            EXIT
            LOOP
         elseif nkey == 7
            @ 23,15 say  "Tem certeza que deseja excluir esse item? [S/N]"
            @ 23,63 get wexclu pict "@!" VALID wEXCLU$"SN"
            read
            if wexclu = "S"
               @ 23,15 CLEAR TO 23,64
               DO RRLOC
               delete
	       skip
               if eof()
                  go bottom
               endif
               DBCOMMIT()
               UNLOCK
               MOSTRALANC:refreshall()
               MOSTRALANC:configure()
               MOSTRALANC:forcestable()
            ELSE 
               @ 23,15 CLEAR TO 23,64
               LOOP 
            Endif
         ELSEIF nKEY == -4
           SAVE SCREEN TO ATUALIZA
           DO JANELA WITH 11,20,16,55
           @ 12,22 SAY "Digite o prazo:"
           @ 12,39 GET nPRAZO1 PICT "999"
           READ
           @ 12,43 GET nPRAZO2 PICT "999"
           READ
           @ 12,47 GET nPRAZO3 PICT "999"
           READ
           @ 12,51 GET nPRAZO4 PICT "999"
           READ
           @ 23,15 SAY "Deseja finalizar e atualizar esta entrada? [S/N]"
           @ 23,64 get wfinal pict "@!" VALID wFINAL$"SN"
           READ
           IF wFINAL = "S"
              SELE TEMP
              GO TOP
              DO WHILE !EOF()
                 SELE MOVIMENTACAO
                 GO BOTTOM
                 nNUMMOV = SEQUENCIA + 1
                 DO RRLOC 
                 APPEND BLANK
                 REPL SEQUENCIA WITH nNUMMOV
                 REPL TIPODEOP WITH nTIPODEOP
                 REPL CODMERC WITH TEMP->CODMERC
                 REPL DESCMERC WITH TEMP->DESCMERC
                 REPL PRUNIT WITH TEMP->PRUNIT
                 REPL PRTOTAL WITH TEMP->PRTOTAL
                 REPL PRAZO1 WITH nPRAZO1
                 REPL PRAZO2 WITH nPRAZO2
                 REPL PRAZO3 WITH nPRAZO3
                 REPL PRAZO4 WITH nPRAZO4
                 SELE TEMP
                 SKIP
              ENDDO


              SELE TEMP
              GO TOP
              DO WHILE !EOF()
                 nQTELANC = QTE
                 aCODLANC = CODMERC
                 DO PREENCHE1 WITH aCODLANC
                 SELE CMCA02 &&
                 SEEK aCODLANC
                 nQTELANC = nQTELANC + NCM02QTLJ1
                 DO WHILE .T.
                    DO RRLOC
                    REPL NCM02QTLJ1 WITH nQTELANC
                    UNLOCK
 		    SKIP
                    IF CCM02CDMER = aCODLANC
                       LOOP
                    ELSE
                       EXIT
                    ENDIF
                 ENDDO
                 SELE TEMP
                 SKIP
                 
              ENDDO    
              IF nTIPODEOP = 02
                 dTVENCLANC = dTSYSTEM+nPRAZO1
                 SELE PAGAR
                 DO RRLOC
                 APPEND BLANK
                 REPL EMISSAO WITH DTSYSTEM
                 REPL NUMMOV WITH nNUMMOV
                 REPL DTVENC WITH dTVENCLANC
                 REPL VLDUP WITH nVALTOTAL
                 REPL VLSALDO WITH nVALTOTAL
                 UNLOCK
                 SELE TEMP
                 GO TOP 
                 DO WHILE !EOF()
                    nQTELANC = QTE
                    aCODLANC = CODMERC
                    DO PREENCHE1 WITH aCODLANC
                    SELE CMCA02 &&
                    SEEK aCODLANC
                    nQTELANC = NCM02QTMAX - nQTELANC
                    DO WHILE .T.
                       DO RRLOC
                       REPL NCM02QTMAX WITH nQTELANC
                       UNLOCK
 		       SKIP
                       IF CCM02CDMER = aCODLANC
                          LOOP
                       ELSE
                          EXIT
                       ENDIF
                    ENDDO
                    SELE TEMP
                    SKIP
                 ENDDO
              ENDIF
              IF nTIPODEOP = 03
                 SELE PAGAR
                 dTVENCLANC = dTSYSTEM+nPRAZO1
                 DO RRLOC
                 APPEND BLANK
                 REPL EMISSAO WITH dTSYSTEM
                 REPL NUMMOV WITH nNUMMOV
                 REPL DTVENC WITH dTVENCLANC
                 REPL VLDUP WITH nVALTOTAL
                 REPL VLSALDO WITH nVALTOTAL
                 UNLOCK
                 SELE TEMP
                 GO TOP
                 DO WHILE !EOF()
                    nQTELANC = QTE
                    aCODLANC = CODMERC
                    DO PREENCHE1 WITH aCODLANC
                    SELE CMCA02 &&
                    SEEK aCODLANC
                    nQTELANC = nQTELANC + NCM02FILJ1
                    DO WHILE .T.
                       DO RRLOC
                       REPL NCM02FILJ1 WITH nQTELANC
                       UNLOCK
 		       SKIP
                       IF CCM02CDMER = aCODLANC
                          LOOP
                       ELSE
                          EXIT
                       ENDIF
                    ENDDO
                    SELE TEMP
                    SKIP
                 ENDDO   
              ENDIF  
                        
              aDESCMERC = "SAIR"
              EXIT
              
            ENDIF
           IF WFINAL = "N"
               RESTORE SCREEN FROM ATUALIZA
               @ 23,00 TO 23,79
               LOOP
           ENDIF   
         endif
   
      enddo
   ELSEIF aDESCMERC = "                                        "
     aCODBARRA = "             "
     @ 07,04 CLEAR TO 07,79
     @ 07,04 GET aCODBARRA
     READ
     SELE CMCA02
     SEEK aCODBARRA
     IF !FOUND()
        DO MENSAGEM WITH "Codigo de Barra NAO Encontrado, Tente Novamente",.t.
        LOOP 
     ELSE
        nCODIGUAL = CCM02CDMER
        DO PREENCHE1 WITH nCODIGUAL
        SELE TEMP
        go bottom
        skip -10
        MOSTRALANC:refreshall()
        MOSTRALANC:configure()
        MOSTRALANC:forcestable() 
        SELE CMCA01
        SEEK nCODIGUAL
        @ 07,00 CLEAR TO 07,79
        @ 07,04 SAY CCM01DSMER
      ENDIF  
   ELSE      
      SELE TEMP
      go bottom
      skip -10
      MOSTRALANC:refreshall()
      MOSTRALANC:configure()
      MOSTRALANC:forcestable() 
      SELE CMCA01
      SEEK RTRIM(aDESCMERC)
      SAVE SCREEN TO DBEDIT2
      SET COLOR TO B/W
      DBEDIT (08,15,20,70,PROCPRODN,,PROCPRODF,PROCPRODL,PROCTIPOSUP)
      SET COLOR TO W+/B
      RESTORE SCREEN FROM DBEDIT2
      @ 07,00 CLEAR TO 07,79
      @ 07,04 SAY CCM01DSMER
      nCODIGUAL = CCM01CDMER
   ENDIF      


      nQTE = 0
      SELE TEMP
      SEEK nCODIGUAL
      IF !FOUND()
         @ 07,47 GET nQTE PICT "999999"
         READ
         IF nQTE = 0
            DO MENSAGEM WITH "Quantidade NAO pode ser ZERO, Tente Novamente",.T.
            LOOP
         ENDIF
         @ 07,47 CLEAR TO 07,53
         @ 07,45 SAY nQTE
         nPRUNIT = CMCA01->NCM01VLCUS
         @ 07,49 SAY nPRUNIT PICT "9999.99" 
         nPRTOTAL = nQTE * nPRUNIT
         @ 07,66 SAY nPRTOTAL PICT "99999.99" 
         SELE TEMP
         DO RRLOC
         APPEND BLANK
         REPL CODMERC WITH CMCA01->CCM01CDMER
         REPL DESCMERC WITH CMCA01->CCM01DSMER
         REPL QTE WITH nQTE
         REPL PRUNIT WITH nPRUNIT
         REPL PRTOTAL WITH nPRTOTAL
         REPL ATUALIZADO WITH "N"
         UNLOCK
         go bottom
         skip -10
         @ 07,45 CLEAR TO 07,79
         MOSTRALANC:refreshall()
         MOSTRALANC:configure()
         MOSTRALANC:forcestable() 
      ELSE
         DO MENSAGEM WITH "Este Produto Ja foi Lançado, A QTE sera ADICIONADA",.t.
         @ 07,47 GET nQTE PICT "999999"
         READ
         IF nQTE = 0
            DO MENSAGEM WITH "Quantidade NAO pode ser ZERO, Tente Novamente",.T.
            LOOP
         ENDIF
         @ 07,47 CLEAR TO 07,53
         @ 07,45 SAY nQTE
         nPRUNIT = CMCA01->NCM01VLCUS
         @ 07,49 SAY nPRUNIT PICT "9999.99" 
         SELE TEMP
         nQTEIGUAL = QTE + nQTE
         nPRTOTAL = nQTE * nPRUNIT
         nPRTOTALIG = nQTEIGUAL * nPRUNIT
         @ 07,66 SAY nPRTOTAL PICT "99999.99" 
         SELE TEMP
         DO RRLOC
         REPL CODMERC WITH CMCA01->CCM01CDMER
         REPL DESCMERC WITH CMCA01->CCM01DSMER
         REPL QTE WITH nQTEIGUAL
         REPL PRUNIT WITH nPRUNIT
         REPL PRTOTAL WITH nPRTOTALIG
         REPL ATUALIZADO WITH "N"
         UNLOCK
         go bottom
         skip -10
         @ 07,45 CLEAR TO 07,79
         MOSTRALANC:refreshall()
         MOSTRALANC:configure()
         MOSTRALANC:forcestable() 
      ENDIF
   
ENDDO
SET EXCLUSIVE ON
SELE TEMP
ZAP
SET EXCLUSIVE OFF
CLOSE DATA
RETURN
function firmshow
   IF LASTKEY() = 27
      RETURN 0
   ENDIF
   @ 24,20 say MENSAGEM
   return 1